chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
662c311
)
libudev: monitor - unify socket message handling
author
Kay Sievers
<kay.sievers@vrfy.org>
Wed, 8 Apr 2009 14:46:54 +0000
(07:46 -0700)
committer
Kay Sievers
<kay.sievers@vrfy.org>
Wed, 8 Apr 2009 14:46:54 +0000
(07:46 -0700)
udev/lib/libudev-monitor.c
patch
|
blob
|
history
diff --git
a/udev/lib/libudev-monitor.c
b/udev/lib/libudev-monitor.c
index a8b1a4e2e51195a6dd71e04776d6400bdf0a70e4..21bd19ba0346dad3a82ede32dc25b262eb6386a2 100644
(file)
--- a/
udev/lib/libudev-monitor.c
+++ b/
udev/lib/libudev-monitor.c
@@
-143,25
+143,22
@@
int udev_monitor_enable_receiving(struct udev_monitor *udev_monitor)
int err;
const int on = 1;
int err;
const int on = 1;
- if (udev_monitor->snl.nl_family != 0) {
- err = bind(udev_monitor->sock,
- (struct sockaddr *)&udev_monitor->snl, sizeof(struct sockaddr_nl));
- if (err < 0) {
- err(udev_monitor->udev, "bind failed: %m\n");
- return err;
- }
- dbg(udev_monitor->udev, "monitor %p listening on netlink\n", udev_monitor);
- } else if (udev_monitor->sun.sun_family != 0) {
+ if (udev_monitor->sun.sun_family != 0)
err = bind(udev_monitor->sock,
(struct sockaddr *)&udev_monitor->sun, udev_monitor->addrlen);
err = bind(udev_monitor->sock,
(struct sockaddr *)&udev_monitor->sun, udev_monitor->addrlen);
- if (err < 0) {
- err(udev_monitor->udev, "bind failed: %m\n");
- return err;
- }
- /* enable receiving of the sender credentials */
- setsockopt(udev_monitor->sock, SOL_SOCKET, SO_PASSCRED, &on, sizeof(on));
- dbg(udev_monitor->udev, "monitor %p listening on socket\n", udev_monitor);
+ else if (udev_monitor->snl.nl_family != 0)
+ err = bind(udev_monitor->sock,
+ (struct sockaddr *)&udev_monitor->snl, sizeof(struct sockaddr_nl));
+ else
+ return -EINVAL;
+
+ if (err < 0) {
+ err(udev_monitor->udev, "bind failed: %m\n");
+ return err;
}
}
+
+ /* enable receiving of sender credentials */
+ setsockopt(udev_monitor->sock, SOL_SOCKET, SO_PASSCRED, &on, sizeof(on));
return 0;
}
return 0;
}
@@
-262,6
+259,8
@@
struct udev_device *udev_monitor_receive_device(struct udev_monitor *udev_monito
struct msghdr smsg;
struct iovec iov;
char cred_msg[CMSG_SPACE(sizeof(struct ucred))];
struct msghdr smsg;
struct iovec iov;
char cred_msg[CMSG_SPACE(sizeof(struct ucred))];
+ struct cmsghdr *cmsg;
+ struct ucred *cred;
char buf[4096];
size_t bufpos;
int devpath_set = 0;
char buf[4096];
size_t bufpos;
int devpath_set = 0;
@@
-287,19
+286,16
@@
struct udev_device *udev_monitor_receive_device(struct udev_monitor *udev_monito
return NULL;
}
return NULL;
}
- if (udev_monitor->sun.sun_family != 0) {
- struct cmsghdr *cmsg = CMSG_FIRSTHDR(&smsg);
- struct ucred *cred = (struct ucred *)CMSG_DATA (cmsg);
-
- if (cmsg == NULL || cmsg->cmsg_type != SCM_CREDENTIALS) {
- info(udev_monitor->udev, "no sender credentials received, message ignored");
- return NULL;
- }
+ cmsg = CMSG_FIRSTHDR(&smsg);
+ if (cmsg == NULL || cmsg->cmsg_type != SCM_CREDENTIALS) {
+ info(udev_monitor->udev, "no sender credentials received, message ignored");
+ return NULL;
+ }
- if (cred->uid != 0) {
- info(udev_monitor->udev, "sender uid=%d, message ignored", cred->uid);
-
return NULL
;
- }
+ cred = (struct ucred *)CMSG_DATA(cmsg);
+ if (cred->uid != 0) {
+
info(udev_monitor->udev, "sender uid=%d, message ignored", cred->uid)
;
+ return NULL;
}
/* skip header */
}
/* skip header */
@@
-404,18
+400,20
@@
int udev_monitor_send_device(struct udev_monitor *udev_monitor, struct udev_devi
len = udev_device_get_properties_monitor_buf(udev_device, &buf);
if (len < 32)
return -1;
len = udev_device_get_properties_monitor_buf(udev_device, &buf);
if (len < 32)
return -1;
- if (udev_monitor->sun.sun_family != 0)
{
+ if (udev_monitor->sun.sun_family != 0)
count = sendto(udev_monitor->sock,
buf, len, 0,
(struct sockaddr *)&udev_monitor->sun,
udev_monitor->addrlen);
count = sendto(udev_monitor->sock,
buf, len, 0,
(struct sockaddr *)&udev_monitor->sun,
udev_monitor->addrlen);
- } else {
- /* no destination besides the muticast group, we will always get
-1
ECONNREFUSED */
+ else if (udev_monitor->snl.nl_family != 0)
+ /* no destination besides the muticast group, we will always get ECONNREFUSED */
count = sendto(udev_monitor->sock,
buf, len, 0,
(struct sockaddr *)&udev_monitor->snl_peer,
sizeof(struct sockaddr_nl));
count = sendto(udev_monitor->sock,
buf, len, 0,
(struct sockaddr *)&udev_monitor->snl_peer,
sizeof(struct sockaddr_nl));
- }
+ else
+ return -1;
+
info(udev_monitor->udev, "passed %zi bytes to monitor %p, \n", count, udev_monitor);
return count;
}
info(udev_monitor->udev, "passed %zi bytes to monitor %p, \n", count, udev_monitor);
return count;
}