X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=main.c;h=3b6841baca861bd4772feb9f825fe54231098f26;hb=f00890cd6eb47ad9bb5da0fb6c50aedc8406e7c5;hp=9bebd3e4fe18768b543a2bbf291c959ff4a96576;hpb=524032c291fcb4d8e4b160f4c9c4ec8b5de92db3;p=project%2Frpcd.git diff --git a/main.c b/main.c index 9bebd3e..3b6841b 100644 --- a/main.c +++ b/main.c @@ -2,7 +2,7 @@ * rpcd - UBUS RPC server * * Copyright (C) 2013 Felix Fietkau - * Copyright (C) 2013 Jo-Philipp Wich + * Copyright (C) 2013-2014 Jo-Philipp Wich * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -22,6 +22,7 @@ #include #include #include +#include #include #include @@ -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);