]> source.dussan.org Git - rspamd.git/commitdiff
* Drop privilleges immideately after creating of listen socket
authorVsevolod Stakhov <vsevolod@rambler-co.ru>
Wed, 4 Mar 2009 09:50:40 +0000 (12:50 +0300)
committerVsevolod Stakhov <vsevolod@rambler-co.ru>
Wed, 4 Mar 2009 09:50:40 +0000 (12:50 +0300)
src/main.c

index f0eca39d32531a42d1fda0476436ef3ed3488b36..b3a36da9848fee44fba40c92bfc89cdf76886097 100644 (file)
@@ -377,6 +377,29 @@ main (int argc, char **argv, char **env)
                fprintf (stderr, "syntax OK\n");
                return EXIT_SUCCESS;
        }
+
+       /* Create listen socket */
+       if (rspamd->cfg->bind_family == AF_INET) {
+               if ((listen_sock = make_tcp_socket (&rspamd->cfg->bind_addr, rspamd->cfg->bind_port, TRUE)) == -1) {
+                       msg_err ("main: cannot create tcp listen socket. %s", strerror (errno));
+                       exit(-errno);
+               }
+       }
+       else {
+               un_addr = (struct sockaddr_un *) g_malloc (sizeof (struct sockaddr_un));
+               if (!un_addr || (listen_sock = make_unix_socket (rspamd->cfg->bind_host, un_addr, TRUE)) == -1) {
+                       msg_err ("main: cannot create unix listen socket. %s", strerror (errno));
+                       exit(-errno);
+               }
+       }
+
+       if (listen (listen_sock, -1) == -1) {
+               msg_err ("main: cannot listen on socket. %s", strerror (errno));
+               exit(-errno);
+       }
+
+       /* Drop privilleges */
+       drop_priv (cfg);
        
        config_logger (rspamd, TRUE);
 
@@ -412,28 +435,6 @@ main (int argc, char **argv, char **env)
        
        init_signals (&signals, sig_handler);
 
-       /* Create listen socket */
-       if (rspamd->cfg->bind_family == AF_INET) {
-               if ((listen_sock = make_tcp_socket (&rspamd->cfg->bind_addr, rspamd->cfg->bind_port, TRUE)) == -1) {
-                       msg_err ("main: cannot create tcp listen socket. %s", strerror (errno));
-                       exit(-errno);
-               }
-       }
-       else {
-               un_addr = (struct sockaddr_un *) g_malloc (sizeof (struct sockaddr_un));
-               if (!un_addr || (listen_sock = make_unix_socket (rspamd->cfg->bind_host, un_addr, TRUE)) == -1) {
-                       msg_err ("main: cannot create unix listen socket. %s", strerror (errno));
-                       exit(-errno);
-               }
-       }
-
-       if (listen (listen_sock, -1) == -1) {
-               msg_err ("main: cannot listen on socket. %s", strerror (errno));
-               exit(-errno);
-       }
-
-       /* Drop privilleges */
-       drop_priv (cfg);
 
        if (write_pid (rspamd) == -1) {
                msg_err ("main: cannot write pid file %s", rspamd->cfg->pid_file);
@@ -455,7 +456,6 @@ main (int argc, char **argv, char **env)
        /* Block signals to use sigsuspend in future */
        sigprocmask(SIG_BLOCK, &signals.sa_mask, NULL);
 
-       
        TAILQ_INIT (&rspamd->workers);
 
        setproctitle ("main process");