chiark / gitweb /
activate: fix uninitialized memory
[elogind.git] / src / activate / activate.c
index 8b282bda7fa8b71ab1e7bbb1b2b7300220a96660..b3ef428cee16c88ec5f8af7df835db32da5a42d7 100644 (file)
@@ -91,6 +91,35 @@ static int print_socket(const char* desc, int fd) {
         return 0;
 }
 
+static int make_socket_fd(const char* address, int flags) {
+        _cleanup_free_ char *p = NULL;
+        SocketAddress a;
+        int fd, r;
+
+        r = socket_address_parse(&a, address);
+        if (r < 0) {
+                log_error("Failed to parse socket: %s", strerror(-r));
+                return r;
+        }
+
+        fd = socket_address_listen(&a, flags, SOMAXCONN, SOCKET_ADDRESS_DEFAULT, NULL, false, false, 0755, 0644, NULL);
+        if (fd < 0) {
+                log_error("Failed to listen: %s", strerror(-r));
+                return fd;
+        }
+
+        r = socket_address_print(&a, &p);
+        if (r < 0) {
+                log_error("socket_address_print(): %s", strerror(-r));
+                close_nointr_nofail(fd);
+                return r;
+        }
+
+        log_info("Listening on %s", p);
+
+        return fd;
+}
+
 static int open_sockets(int *epoll_fd, bool accept) {
         int n, fd, r;
         int count = 0;
@@ -129,6 +158,7 @@ static int open_sockets(int *epoll_fd, bool accept) {
                         return fd;
                 }
 
+                assert(fd == SD_LISTEN_FDS_START + count);
                 count ++;
         }
 
@@ -158,7 +188,7 @@ static int launch(char* name, char **argv, char **env, int fds) {
 
         length = strv_length(arg_environ);
         /* PATH, TERM, HOME, USER, LISTEN_FDS, LISTEN_PID, NULL */
-        envp = new(char *, length + 7);
+        envp = new0(char *, length + 7);
 
         STRV_FOREACH(s, arg_environ) {
                 if (strchr(*s, '='))
@@ -375,9 +405,8 @@ int main(int argc, char **argv, char **envp) {
         int r, n;
         int epoll_fd = -1;
 
-        log_set_max_level(LOG_DEBUG);
-        log_show_color(true);
         log_parse_environment();
+        log_open();
 
         r = parse_argv(argc, argv);
         if (r <= 0)
@@ -391,7 +420,7 @@ int main(int argc, char **argv, char **envp) {
         if (n < 0)
                 return EXIT_FAILURE;
 
-        while (true) {
+        for (;;) {
                 struct epoll_event event;
 
                 r = epoll_wait(epoll_fd, &event, 1, -1);