static void msg_queue_manager(void);
static void user_sighandler(void);
static void reap_kids(void);
+char *udev_bin;
#ifdef LOG
unsigned char logname[LOGNAME_SIZE];
}
#endif
+#define msg_dump(msg) \
+ dbg("msg_dump: sequence %d, '%s', '%s', '%s'", \
+ msg->seqnum, msg->action, msg->devpath, msg->subsystem);
+
static void msg_dump_queue(void)
{
#ifdef DEBUG
#endif
}
-static void msg_dump(struct hotplug_msg *msg)
-{
- dbg("sequence %d, '%s', '%s', '%s'",
- msg->seqnum, msg->action, msg->devpath, msg->subsystem);
-}
-
static struct hotplug_msg *msg_create(void)
{
struct hotplug_msg *new_msg;
char devpath[DEVPATH_SIZE];
char *env[] = { action, devpath, NULL };
- snprintf(action, sizeof(action), "ACTION=%s", msg->action);
- snprintf(devpath, sizeof(devpath), "DEVPATH=%s", msg->devpath);
+ strcpy(action, "ACTION=");
+ strfieldcat(action, msg->action);
+ strcpy(devpath, "DEVPATH=");
+ strfieldcat(devpath, msg->devpath);
pid = fork();
switch (pid) {
case 0:
/* child */
- execle(UDEV_BIN, "udev", msg->subsystem, NULL, env);
+ execle(udev_bin, "udev", msg->subsystem, NULL, env);
dbg("exec of child failed");
exit(1);
break;
/* enable receiving of the sender credentials */
setsockopt(ssock, SOL_SOCKET, SO_PASSCRED, &on, sizeof(on));
+ /* possible override of udev binary, used for testing */
+ udev_bin = getenv("UDEV_BIN");
+ if (udev_bin != NULL)
+ dbg("udev binary is set to '%s'", udev_bin);
+ else
+ udev_bin = UDEV_BIN;
+
FD_ZERO(&readfds);
FD_SET(ssock, &readfds);
FD_SET(pipefds[0], &readfds);