chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[PATCH] remove USE_DBUS and USE_SELINUX flags from the README as they are no longer...
[elogind.git]
/
udevd.c
diff --git
a/udevd.c
b/udevd.c
index 366c227a3bc9c48c42d1236c4e2fe5006e3cc685..4cb3e1d405650965da86ea0569ca420dd2212a38 100644
(file)
--- a/
udevd.c
+++ b/
udevd.c
@@
-36,6
+36,7
@@
#include "list.h"
#include "udev.h"
#include "list.h"
#include "udev.h"
+#include "udev_lib.h"
#include "udev_version.h"
#include "udevd.h"
#include "logging.h"
#include "udev_version.h"
#include "udevd.h"
#include "logging.h"
@@
-51,12
+52,17
@@
LIST_HEAD(running_list);
static void exec_queue_manager(void);
static void msg_queue_manager(void);
static void exec_queue_manager(void);
static void msg_queue_manager(void);
-unsigned char logname[42];
-
-
int log_ok(void
)
+#ifdef LOG
+unsigned char logname[LOGNAME_SIZE];
+
void log_message (int level, const char *format, ...
)
{
{
- return 1;
+ va_list args;
+
+ va_start(args, format);
+ vsyslog(level, format, args);
+ va_end(args);
}
}
+#endif
static void msg_dump_queue(void)
{
static void msg_dump_queue(void)
{
@@
-114,8
+120,8
@@
static void msg_queue_insert(struct hotplug_msg *msg)
static void udev_run(struct hotplug_msg *msg)
{
pid_t pid;
static void udev_run(struct hotplug_msg *msg)
{
pid_t pid;
- char action[
32
];
- char devpath[
256
];
+ char action[
ACTION_SIZE
];
+ char devpath[
DEVPATH_SIZE
];
char *env[] = { action, devpath, NULL };
snprintf(action, sizeof(action), "ACTION=%s", msg->action);
char *env[] = { action, devpath, NULL };
snprintf(action, sizeof(action), "ACTION=%s", msg->action);
@@
-252,16
+258,19
@@
static void handle_msg(int sock)
cmsg = CMSG_FIRSTHDR(&smsg);
cred = (struct ucred *) CMSG_DATA(cmsg);
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);
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);
}
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 */
}
/* if no seqnum is given, we move straight to exec queue */
@@
-271,6
+280,11
@@
static void handle_msg(int sock)
} else {
msg_queue_insert(msg);
}
} else {
msg_queue_insert(msg);
}
+ return;
+
+skip:
+ free(msg);
+ return;
}
static void sig_handler(int signum)
}
static void sig_handler(int signum)
@@
-315,6
+329,12
@@
int main(int argc, char *argv[])
struct sigaction act;
init_logging("udevd");
struct sigaction act;
init_logging("udevd");
+ dbg("version %s", UDEV_VERSION);
+
+ if (getuid() != 0) {
+ dbg("need to be root, exit");
+ exit(1);
+ }
/* set signal handler */
act.sa_handler = sig_handler;
/* set signal handler */
act.sa_handler = sig_handler;
@@
-336,14
+356,14
@@
int main(int argc, char *argv[])
ssock = socket(AF_LOCAL, SOCK_DGRAM, 0);
if (ssock == -1) {
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) {
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;
}
goto exit;
}