*
*/
+#include "config.h"
+
#include <stddef.h>
#include <signal.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <linux/types.h>
#include <linux/netlink.h>
+#ifdef HAVE_INOTIFY
+#include <sys/inotify.h>
+#endif
#include "udev.h"
#include "udev_rules.h"
for (i = 0; msg->envp[i]; i++)
putenv(msg->envp[i]);
- udev = udev_device_init(NULL);
+ udev = udev_device_init();
if (udev == NULL)
return -1;
strlcpy(udev->action, msg->action, sizeof(udev->action));
size_t start;
/* location of queue file */
- snprintf(filename, sizeof(filename), "%s/"EVENT_QUEUE_DIR"/%llu", udev_root, msg->seqnum);
+ snprintf(filename, sizeof(filename), "%s/.udev/queue/%llu", udev_root, msg->seqnum);
/* location of failed file */
strlcpy(filename_failed, udev_root, sizeof(filename_failed));
strlcat(filename_failed, "/", sizeof(filename_failed));
- start = strlcat(filename_failed, EVENT_FAILED_DIR"/", sizeof(filename_failed));
+ start = strlcat(filename_failed, ".udev/failed/", sizeof(filename_failed));
strlcat(filename_failed, msg->devpath, sizeof(filename_failed));
path_encode(&filename_failed[start], sizeof(filename_failed) - start);
strlcpy(filename_failed_old, udev_root, sizeof(filename_failed_old));
strlcat(filename_failed_old, "/", sizeof(filename_failed_old));
- start = strlcat(filename_failed_old, EVENT_FAILED_DIR"/", sizeof(filename_failed_old));
+ start = strlcat(filename_failed_old, ".udev/failed/", sizeof(filename_failed_old));
strlcat(filename_failed_old, msg->devpath_old, sizeof(filename_failed_old));
path_encode(&filename_failed_old[start], sizeof(filename) - start);
info("seq %llu queued, '%s' '%s'\n", msg->seqnum, msg->action, msg->subsystem);
strlcpy(filename, udev_root, sizeof(filename));
- strlcat(filename, "/" EVENT_SEQNUM, sizeof(filename));
+ strlcat(filename, "/.udev/uevent_seqnum", sizeof(filename));
fd = open(filename, O_WRONLY|O_TRUNC|O_CREAT, 0644);
if (fd >= 0) {
char str[32];
struct iovec iov;
struct ucred *cred;
char cred_msg[CMSG_SPACE(sizeof(struct ucred))];
- int *intval;
char *pos;
memset(&ctrl_msg, 0x00, sizeof(struct udevd_ctrl_msg));
msg_queue_manager();
break;
case UDEVD_CTRL_SET_LOG_LEVEL:
- intval = (int *) ctrl_msg.buf;
- info("udevd message (SET_LOG_PRIORITY) received, udev_log_priority=%i\n", *intval);
- udev_log_priority = *intval;
+ info("udevd message (SET_LOG_PRIORITY) received, udev_log_priority=%i\n", ctrl_msg.intval);
+ udev_log_priority = ctrl_msg.intval;
sprintf(udev_log, "UDEV_LOG=%i", udev_log_priority);
putenv(udev_log);
break;
case UDEVD_CTRL_SET_MAX_CHILDS:
- intval = (int *) ctrl_msg.buf;
- info("udevd message (UDEVD_SET_MAX_CHILDS) received, max_childs=%i\n", *intval);
- max_childs = *intval;
+ info("udevd message (UDEVD_SET_MAX_CHILDS) received, max_childs=%i\n", ctrl_msg.intval);
+ max_childs = ctrl_msg.intval;
break;
case UDEVD_CTRL_SET_MAX_CHILDS_RUNNING:
- intval = (int *) ctrl_msg.buf;
- info("udevd message (UDEVD_SET_MAX_CHILDS_RUNNING) received, max_childs=%i\n", *intval);
- max_childs_running = *intval;
+ info("udevd message (UDEVD_SET_MAX_CHILDS_RUNNING) received, max_childs_running=%i\n", ctrl_msg.intval);
+ max_childs_running = ctrl_msg.intval;
break;
case UDEVD_CTRL_RELOAD_RULES:
info("udevd message (RELOAD_RULES) received\n");
memset(&saddr, 0x00, sizeof(saddr));
saddr.sun_family = AF_LOCAL;
- /* use abstract namespace for socket path */
- strcpy(&saddr.sun_path[1], UDEVD_CTRL_SOCK_PATH);
- addrlen = offsetof(struct sockaddr_un, sun_path) + 1 + strlen(&saddr.sun_path[1]);
+ strcpy(saddr.sun_path, UDEVD_CTRL_SOCK_PATH);
+ addrlen = offsetof(struct sockaddr_un, sun_path) + strlen(saddr.sun_path);
+ /* translate leading '@' to abstract namespace */
+ if (saddr.sun_path[0] == '@')
+ saddr.sun_path[0] = '\0';
udevd_sock = socket(AF_LOCAL, SOCK_DGRAM, 0);
if (udevd_sock == -1) {
len = 3;
}
strlcpy(filename, udev_root, sizeof(filename));
- strlcat(filename, "/" EVENT_SEQNUM, sizeof(filename));
+ strlcat(filename, "/.udev/uevent_seqnum", sizeof(filename));
create_path(filename);
fd = open(filename, O_WRONLY|O_TRUNC|O_CREAT, 0644);
if (fd >= 0) {
}
}
-int main(int argc, char *argv[], char *envp[])
+int main(int argc, char *argv[])
{
int retval;
int fd;
logging_init("udevd");
udev_config_init();
selinux_init();
- dbg("version %s\n", UDEV_VERSION);
+ dbg("version %s\n", VERSION);
while (1) {
option = getopt_long(argc, argv, "dDthV", options, NULL);
printf("Usage: udevd [--help] [--daemon] [--debug-trace] [--debug] [--version]\n");
goto exit;
case 'V':
- printf("%s\n", UDEV_VERSION);
+ printf("%s\n", VERSION);
goto exit;
default:
goto exit;
fd = open("/dev/kmsg", O_WRONLY);
if (fd > 0) {
- const char *str = "<6>udevd version " UDEV_VERSION " started\n";
+ const char *str = "<6>udevd version " VERSION " started\n";
write(fd, str, strlen(str));
close(fd);
} else {
char filename[PATH_MAX];
- inotify_add_watch(inotify_fd, RULES_LIB_DIR,
+ inotify_add_watch(inotify_fd, UDEV_PREFIX "/lib/udev/rules.d",
IN_CREATE | IN_DELETE | IN_MOVE | IN_CLOSE_WRITE);
- inotify_add_watch(inotify_fd, RULES_ETC_DIR,
+ inotify_add_watch(inotify_fd, SYSCONFDIR "/udev/rules.d",
IN_CREATE | IN_DELETE | IN_MOVE | IN_CLOSE_WRITE);
/* watch dynamic rules directory */
strlcpy(filename, udev_root, sizeof(filename));
- strlcat(filename, "/"RULES_DYN_DIR, sizeof(filename));
+ strlcat(filename, "/.udev/rules.d", sizeof(filename));
inotify_add_watch(inotify_fd, filename,
IN_CREATE | IN_DELETE | IN_MOVE | IN_CLOSE_WRITE);
}