Use common /var/run/rpcd base directory to store runtime information
authorJo-Philipp Wich <jow@openwrt.org>
Thu, 5 Sep 2013 13:14:00 +0000 (15:14 +0200)
committerJo-Philipp Wich <jow@openwrt.org>
Thu, 5 Sep 2013 13:14:00 +0000 (15:14 +0200)
include/rpcd/session.h
include/rpcd/uci.h
main.c
uci.c

index 70891bc9b41ee1c9ec1d1237230d61d49ff42f64..7fa388e5360e8fde6ce259609b8c6830a160c4c6 100644 (file)
@@ -32,7 +32,7 @@
 
 #define RPC_SID_LEN    32
 #define RPC_DEFAULT_SESSION_TIMEOUT    300
-#define RPC_SESSION_DIRECTORY  "/var/run/rpcd"
+#define RPC_SESSION_DIRECTORY  "/var/run/rpcd/sessions"
 
 struct rpc_session {
        struct avl_node avl;
index 7a169f22d3944097e123f3ae07ffc2a45fbb1c89..e334b9c07ac5f7cc27667ece79d326245b14df7d 100644 (file)
@@ -30,6 +30,8 @@
 #include <libubus.h>
 #include <uci.h>
 
+#define RPC_UCI_SAVEDIR_PREFIX  "/var/run/rpcd/uci-"
+
 int rpc_uci_api_init(struct ubus_context *ctx);
 
 void rpc_uci_purge_savedirs(void);
diff --git a/main.c b/main.c
index 5a608c270958aba77d758c322c9bc2227d967f34..0bb06cea61089ebbbc02215e7d7887d035d80517 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>
@@ -58,6 +59,7 @@ exec_self(int argc, char **argv)
 
 int main(int argc, char **argv)
 {
+       struct stat s;
        const char *hangup;
        const char *ubus_socket = NULL;
        int ch;
@@ -72,6 +74,9 @@ int main(int argc, char **argv)
                }
        }
 
+       if (stat("/var/run/rpcd", &s))
+               mkdir("/var/run/rpcd", 0700);
+
        signal(SIGPIPE, SIG_IGN);
        signal(SIGHUP,  handle_signal);
        signal(SIGUSR1, handle_signal);
diff --git a/uci.c b/uci.c
index 0fede861aaeac674e1d3a32dd47d1ca9724f5c1e..11df4d91575e1d3e8b8bd40d4f1ea9eb2e2ccd45 100644 (file)
--- a/uci.c
+++ b/uci.c
@@ -185,7 +185,7 @@ rpc_uci_set_savedir(struct blob_attr *sid)
        }
 
        snprintf(path, sizeof(path) - 1,
-                "/tmp/.uci-rpc-%s", (char *)blobmsg_data(sid));
+                RPC_UCI_SAVEDIR_PREFIX "%s", blobmsg_get_string(sid));
 
        uci_set_savedir(cursor, path);
 }
@@ -1151,12 +1151,12 @@ rpc_uci_purge_savedir_cb(struct rpc_session *ses, void *priv)
 {
        char path[PATH_MAX];
 
-       snprintf(path, sizeof(path) - 1, "/tmp/.uci-rpc-%s", ses->id);
+       snprintf(path, sizeof(path) - 1, RPC_UCI_SAVEDIR_PREFIX "%s", ses->id);
        rpc_uci_purge_savedir(path);
 }
 
 /*
- * Removes all delta directories which match the /tmp/.uci-rpc-* pattern.
+ * Removes all delta directories which match the RPC_UCI_SAVEDIR_PREFIX.
  * This is used to clean up garbage when starting rpcd.
  */
 void rpc_uci_purge_savedirs(void)
@@ -1164,7 +1164,7 @@ void rpc_uci_purge_savedirs(void)
        int i;
        glob_t gl;
 
-       if (!glob("/tmp/.uci-rpc-*", 0, NULL, &gl))
+       if (!glob(RPC_UCI_SAVEDIR_PREFIX "*", 0, NULL, &gl))
        {
                for (i = 0; i < gl.gl_pathc; i++)
                        rpc_uci_purge_savedir(gl.gl_pathv[i]);