Fix a serious bug in deamon mode.
authorAndre Noll <maan@congo.fml.local>
Fri, 28 Mar 2008 14:01:09 +0000 (15:01 +0100)
committerAndre Noll <maan@congo.fml.local>
Fri, 28 Mar 2008 14:01:09 +0000 (15:01 +0100)
In daemon mode, we changed to dest_dir _before_ calling daemon_init(),
which changes the cwd to /.

Fix this rather embarrassing bug by changing cwd later. To this aim,
introduce change_to_dest_dir() which also logs some messages.

dss.c

diff --git a/dss.c b/dss.c
index 02d0c8b..413f88d 100644 (file)
--- a/dss.c
+++ b/dss.c
@@ -629,7 +629,6 @@ static void parse_config_file(int override)
        }
        DSS_EMERG_LOG("loglevel: %d\n", conf.loglevel_arg);
 //     cmdline_parser_dump(logfile? logfile : stdout, &conf);
-       ret = dss_chdir(conf.dest_dir_arg);
 out:
        free(config_file);
        if (ret >= 0)
@@ -638,10 +637,23 @@ out:
        exit(EXIT_FAILURE);
 }
 
+static void change_to_dest_dir(void)
+{
+       int ret;
+
+       DSS_INFO_LOG("changing cwd to %s\n", conf.dest_dir_arg);
+       ret = dss_chdir(conf.dest_dir_arg);
+       if (ret >= 0)
+               return;
+       DSS_EMERG_LOG("%s\n", dss_strerror(-ret));
+       exit(EXIT_FAILURE);
+}
+
 static void handle_sighup(void)
 {
        DSS_NOTICE_LOG("SIGHUP\n");
        parse_config_file(1);
+       change_to_dest_dir();
 }
 
 static void handle_signal(void)
@@ -965,6 +977,7 @@ int main(int argc, char **argv)
 
        if (conf.daemon_given)
                daemon_init();
+       change_to_dest_dir();
        setup_signal_handling();
        ret = call_command_handler();
        if (ret < 0)