Merge branch 'autotools'
[umurmur.git] / src / main.c
index cef4f605a4d2e88877d7e488dbb83302e378f962..fce997a77a471f4201d3706e107f0e51ac1fee58 100644 (file)
@@ -1,5 +1,5 @@
-/* Copyright (C) 2009-2010, Martin Johansson <martin@fatbob.nu>
-   Copyright (C) 2005-2010, Thorvald Natvig <thorvald@natvig.com>
+/* Copyright (C) 2009-2011, Martin Johansson <martin@fatbob.nu>
+   Copyright (C) 2005-2011, Thorvald Natvig <thorvald@natvig.com>
 
    All rights reserved.
 
@@ -29,7 +29,6 @@
    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
-
 #include <stdio.h>
 #include <unistd.h>
 #include <sys/types.h>
@@ -163,8 +162,8 @@ void signal_handler(int sig)
 {
        switch(sig) {
        case SIGHUP:
-               /* XXX - do stuff? */
-               Log_info("HUP signal");
+               Log_info("HUP signal received.");
+               Log_reset();
                break;
        case SIGTERM:
                Log_info("TERM signal. Shutting down.");
@@ -277,28 +276,29 @@ int main(int argc, char **argv)
                        break;
                }
        }
-
-       /* Logging to terminal if not daemonizing, otherwise to syslog.
-        * Need to initialize logging before calling Conf_init()
-        */
-       if (!nodaemon)
-               Log_init(false);
-       else
-               Log_init(true);
        
        /* Initialize the config subsystem early;
-        * switch_user() will need to read some config variables.
+        * switch_user() will need to read some config variables as well as logging.
         */
        Conf_init(conffile);
-
+       
+       /* Logging to terminal if not daemonizing, otherwise to syslog or log file.
+        */
        if (!nodaemon) {
                daemonize();
+               Log_init(false);
                if (pidfile != NULL)
                        lockfile(pidfile);
 
                switch_user();
-       }
 
+               /* Reopen log file. If user switch results in access denied, we catch
+                * it early.
+                */
+               Log_reset(); 
+       }
+       else Log_init(true);
+       
        signal(SIGCHLD, SIG_IGN); /* ignore child */
        signal(SIGTSTP, SIG_IGN); /* ignore tty signals */
        signal(SIGTTOU, SIG_IGN);