Use common /var/run/rpcd base directory to store runtime information

This commit is contained in:
Jo-Philipp Wich 2013-09-05 15:14:00 +02:00
parent b4649c9fda
commit fa53571f2b
4 changed files with 12 additions and 5 deletions

View file

@ -32,7 +32,7 @@
#define RPC_SID_LEN 32 #define RPC_SID_LEN 32
#define RPC_DEFAULT_SESSION_TIMEOUT 300 #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 rpc_session {
struct avl_node avl; struct avl_node avl;

View file

@ -30,6 +30,8 @@
#include <libubus.h> #include <libubus.h>
#include <uci.h> #include <uci.h>
#define RPC_UCI_SAVEDIR_PREFIX "/var/run/rpcd/uci-"
int rpc_uci_api_init(struct ubus_context *ctx); int rpc_uci_api_init(struct ubus_context *ctx);
void rpc_uci_purge_savedirs(void); void rpc_uci_purge_savedirs(void);

5
main.c
View file

@ -22,6 +22,7 @@
#include <libubox/blobmsg_json.h> #include <libubox/blobmsg_json.h>
#include <libubus.h> #include <libubus.h>
#include <signal.h> #include <signal.h>
#include <sys/stat.h>
#include <rpcd/session.h> #include <rpcd/session.h>
#include <rpcd/uci.h> #include <rpcd/uci.h>
@ -58,6 +59,7 @@ exec_self(int argc, char **argv)
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
struct stat s;
const char *hangup; const char *hangup;
const char *ubus_socket = NULL; const char *ubus_socket = NULL;
int ch; 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(SIGPIPE, SIG_IGN);
signal(SIGHUP, handle_signal); signal(SIGHUP, handle_signal);
signal(SIGUSR1, handle_signal); signal(SIGUSR1, handle_signal);

8
uci.c
View file

@ -185,7 +185,7 @@ rpc_uci_set_savedir(struct blob_attr *sid)
} }
snprintf(path, sizeof(path) - 1, 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); uci_set_savedir(cursor, path);
} }
@ -1151,12 +1151,12 @@ rpc_uci_purge_savedir_cb(struct rpc_session *ses, void *priv)
{ {
char path[PATH_MAX]; 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); 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. * This is used to clean up garbage when starting rpcd.
*/ */
void rpc_uci_purge_savedirs(void) void rpc_uci_purge_savedirs(void)
@ -1164,7 +1164,7 @@ void rpc_uci_purge_savedirs(void)
int i; int i;
glob_t gl; 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++) for (i = 0; i < gl.gl_pathc; i++)
rpc_uci_purge_savedir(gl.gl_pathv[i]); rpc_uci_purge_savedir(gl.gl_pathv[i]);