From: Harald Hoyer Date: Mon, 8 Apr 2013 17:59:20 +0000 (+0200) Subject: udev/udev-ctrl.c:udev_ctrl_new_from_fd() enable SO_PASSCRED X-Git-Tag: v201~11 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=b97caef538ae37bd2dc04fc15b448c12a2c9422b udev/udev-ctrl.c:udev_ctrl_new_from_fd() enable SO_PASSCRED Avoid "sender uid=65534, message ignored" case, where no credentials can be read on the sender side. Seems, the server socket does not enable credential receiving fast enough, and the message from the client (without credential) sometimes is queued before the credential passing was active. --- diff --git a/src/udev/udev-ctrl.c b/src/udev/udev-ctrl.c index 6ee6b04b1..e60da906c 100644 --- a/src/udev/udev-ctrl.c +++ b/src/udev/udev-ctrl.c @@ -73,6 +73,7 @@ struct udev_ctrl_connection { struct udev_ctrl *udev_ctrl_new_from_fd(struct udev *udev, int fd) { struct udev_ctrl *uctrl; + const int on = 1; uctrl = calloc(1, sizeof(struct udev_ctrl)); if (uctrl == NULL) @@ -91,6 +92,7 @@ struct udev_ctrl *udev_ctrl_new_from_fd(struct udev *udev, int fd) uctrl->bound = true; uctrl->sock = fd; } + setsockopt(uctrl->sock, SOL_SOCKET, SO_PASSCRED, &on, sizeof(on)); uctrl->saddr.sun_family = AF_LOCAL; strscpy(uctrl->saddr.sun_path, sizeof(uctrl->saddr.sun_path), "/run/udev/control");