chiark / gitweb /
fix typo in group assignment
[elogind.git] / udevcontrol.c
index 6a278a04c1fc4eef05b6f5dced4378b1dd12bf23..f19ae98fba8bbd80cff87254c6d7fc44ff94cfd2 100644 (file)
 #include "udev.h"
 #include "udev_version.h"
 #include "udevd.h"
+#include "udev_utils.h"
 #include "logging.h"
 
 /* global variables */
 static int sock = -1;
+static int log = 0;
 
 #ifdef USE_LOG
-void log_message (int level, const char *format, ...)
+void log_message (int priority, const char *format, ...)
 {
        va_list args;
 
+       if (priority > log)
+               return;
+
        va_start(args, format);
-       vsyslog(level, format, args);
+       vsyslog(priority, format, args);
        va_end(args);
 }
 #endif
@@ -59,31 +64,50 @@ int main(int argc, char *argv[], char *envp[])
        static struct udevd_msg usend_msg;
        struct sockaddr_un saddr;
        socklen_t addrlen;
+       const char *env;
+       const char *val;
+       int *intval;
        int retval = 1;
 
+       env = getenv("UDEV_LOG");
+       if (env)
+               log = log_priority(env);
+
        logging_init("udevcontrol");
        dbg("version %s", UDEV_VERSION);
 
        if (argc != 2) {
-               info("usage: udevcontrol <cmd>\n");
+               err("error finding comand");
                goto exit;
        }
 
        memset(&usend_msg, 0x00, sizeof(struct udevd_msg));
        strcpy(usend_msg.magic, UDEV_MAGIC);
 
-       if (strstr(argv[1], "stop_exec_queue"))
+       if (!strcmp(argv[1], "stop_exec_queue"))
                usend_msg.type = UDEVD_STOP_EXEC_QUEUE;
-       else if (strstr(argv[1], "start_exec_queue"))
+       else if (!strcmp(argv[1], "start_exec_queue"))
                usend_msg.type = UDEVD_START_EXEC_QUEUE;
-       else {
-               info("unknown command\n");
+       else if (!strncmp(argv[1], "log_priority=", strlen("log_priority="))) {
+               intval = (int *) usend_msg.envbuf;
+               val = &argv[1][strlen("log_priority=")];
+               usend_msg.type = UDEVD_SET_LOG_LEVEL;
+               *intval = log_priority(val);
+               info("send log_priority=%i", *intval);
+       } else if (!strncmp(argv[1], "max_childs=", strlen("max_childs="))) {
+               intval = (int *) usend_msg.envbuf;
+               val = &argv[1][strlen("max_childs=")];
+               usend_msg.type = UDEVD_SET_MAX_CHILDS;
+               *intval = atoi(val);
+               info("send max_childs=%i", *intval);
+       } else {
+               err("error parsing command\n");
                goto exit;
        }
 
        sock = socket(AF_LOCAL, SOCK_DGRAM, 0);
        if (sock == -1) {
-               info("error getting socket");
+               err("error getting socket");
                goto exit;
        }
 
@@ -95,8 +119,13 @@ int main(int argc, char *argv[], char *envp[])
 
 
        retval = sendto(sock, &usend_msg, sizeof(usend_msg), 0, (struct sockaddr *)&saddr, addrlen);
-       if (retval == -1)
+       if (retval == -1) {
                info("error sending message (%s)", strerror(errno));
+               retval = 1;
+       } else {
+               dbg("sent message type=0x%02x, %u bytes sent", usend_msg.type, retval);
+               retval = 0;
+       }
 
        close(sock);