From 7b1cbec91a51a8d8f1546935d942744b0f5a274e Mon Sep 17 00:00:00 2001 From: "kay.sievers@vrfy.org" Date: Thu, 12 Feb 2004 01:23:59 -0800 Subject: [PATCH] better credential patch Here is a small improvement. We check for the type of message we receive and udevsend seems not to need all the credential setup stuff, the kernel will fill it for us. udevd now refuses to start as non root, cause it doesn't make any sense. --- udevd.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) (limited to 'udevd.c') diff --git a/udevd.c b/udevd.c index 366c227a3b..14616b9824 100644 --- a/udevd.c +++ b/udevd.c @@ -252,16 +252,19 @@ static void handle_msg(int sock) cmsg = CMSG_FIRSTHDR(&smsg); cred = (struct ucred *) CMSG_DATA(cmsg); + if (cmsg == NULL || cmsg->cmsg_type != SCM_CREDENTIALS) { + dbg("no sender credentials received, message ignored"); + goto skip; + } + if (cred->uid != 0) { dbg("sender uid=%i, message ignored", cred->uid); - free(msg); - return; + goto skip; } if (strncmp(msg->magic, UDEV_MAGIC, sizeof(UDEV_MAGIC)) != 0 ) { dbg("message magic '%s' doesn't match, ignore it", msg->magic); - free(msg); - return; + goto skip; } /* if no seqnum is given, we move straight to exec queue */ @@ -271,6 +274,11 @@ static void handle_msg(int sock) } else { msg_queue_insert(msg); } + return; + +skip: + free(msg); + return; } static void sig_handler(int signum) @@ -316,6 +324,11 @@ int main(int argc, char *argv[]) init_logging("udevd"); + if (getuid() != 0) { + dbg("need to be root, exit"); + exit(1); + } + /* set signal handler */ act.sa_handler = sig_handler; sigemptyset (&act.sa_mask); @@ -336,14 +349,14 @@ int main(int argc, char *argv[]) ssock = socket(AF_LOCAL, SOCK_DGRAM, 0); if (ssock == -1) { - dbg("error getting socket"); + dbg("error getting socket, exit"); exit(1); } /* the bind takes care of ensuring only one copy running */ retval = bind(ssock, (struct sockaddr *) &saddr, addrlen); if (retval < 0) { - dbg("bind failed\n"); + dbg("bind failed, exit"); goto exit; } -- cgit v1.2.3-54-g00ecf