udev-ctrl: enable SO_PASSCREDS on listening socket already rather than on accept()
This matches what systemd-udevd-control.socket does.
This commit is contained in:
@@ -44,6 +44,7 @@ struct UdevCtrl {
|
||||
int udev_ctrl_new_from_fd(UdevCtrl **ret, int fd) {
|
||||
_cleanup_close_ int sock = -EBADF;
|
||||
UdevCtrl *uctrl;
|
||||
int r;
|
||||
|
||||
assert(ret);
|
||||
|
||||
@@ -53,6 +54,11 @@ int udev_ctrl_new_from_fd(UdevCtrl **ret, int fd) {
|
||||
return log_error_errno(errno, "Failed to create socket: %m");
|
||||
}
|
||||
|
||||
/* enable receiving of the sender credentials in the messages */
|
||||
r = setsockopt_int(fd >= 0 ? fd : sock, SOL_SOCKET, SO_PASSCRED, true);
|
||||
if (r < 0)
|
||||
log_warning_errno(r, "Failed to set SO_PASSCRED, ignoring: %m");
|
||||
|
||||
uctrl = new(UdevCtrl, 1);
|
||||
if (!uctrl)
|
||||
return -ENOMEM;
|
||||
@@ -240,11 +246,6 @@ static int udev_ctrl_event_handler(sd_event_source *s, int fd, uint32_t revents,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* enable receiving of the sender credentials in the messages */
|
||||
r = setsockopt_int(sock, SOL_SOCKET, SO_PASSCRED, true);
|
||||
if (r < 0)
|
||||
log_warning_errno(r, "Failed to set SO_PASSCRED, ignoring: %m");
|
||||
|
||||
r = sd_event_add_io(uctrl->event, &uctrl->event_source_connect, sock, EPOLLIN, udev_ctrl_connection_event_handler, uctrl);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to create event source for udev control connection: %m");
|
||||
|
||||
Reference in New Issue
Block a user