uci: make config argument of changes call optional to allow listing all changes in...
[project/rpcd.git] / main.c
diff --git a/main.c b/main.c
index 9bebd3e4fe18768b543a2bbf291c959ff4a96576..75f5cee0fa15195f243f5c3e41394389b5516f38 100644 (file)
--- a/main.c
+++ b/main.c
@@ -22,6 +22,7 @@
 #include <libubox/blobmsg_json.h>
 #include <libubus.h>
 #include <signal.h>
+#include <sys/stat.h>
 
 #include <rpcd/session.h>
 #include <rpcd/uci.h>
@@ -52,11 +53,14 @@ exec_self(int argc, char **argv)
        for (i = 0; i < argc; i++)
                args[i] = argv[i];
 
+       setenv("RPC_HANGUP", "1", 1);
        execv(cmd, (char * const *)args);
 }
 
 int main(int argc, char **argv)
 {
+       struct stat s;
+       const char *hangup;
        const char *ubus_socket = NULL;
        int ch;
 
@@ -70,6 +74,11 @@ int main(int argc, char **argv)
                }
        }
 
+       if (stat("/var/run/rpcd", &s))
+               mkdir("/var/run/rpcd", 0700);
+
+       umask(0077);
+
        signal(SIGPIPE, SIG_IGN);
        signal(SIGHUP,  handle_signal);
        signal(SIGUSR1, handle_signal);
@@ -88,7 +97,12 @@ int main(int argc, char **argv)
        rpc_uci_api_init(ctx);
        rpc_plugin_api_init(ctx);
 
-       rpc_session_thaw();
+       hangup = getenv("RPC_HANGUP");
+
+       if (!hangup || strcmp(hangup, "1"))
+               rpc_uci_purge_savedirs();
+       else
+               rpc_session_thaw();
 
        uloop_run();
        ubus_free(ctx);