* rpcd - UBUS RPC server
*
* Copyright (C) 2013 Felix Fietkau <nbd@openwrt.org>
- * Copyright (C) 2013 Jo-Philipp Wich <jow@openwrt.org>
+ * Copyright (C) 2013-2014 Jo-Philipp Wich <jow@openwrt.org>
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
*/
#include <unistd.h>
+#include <stdlib.h>
#include <libubox/blobmsg_json.h>
#include <libubus.h>
static struct ubus_context *ctx;
static bool respawn = false;
+int rpc_exec_timeout = RPC_EXEC_DEFAULT_TIMEOUT;
+
static void
handle_signal(int sig)
{
const char *ubus_socket = NULL;
int ch;
- while ((ch = getopt(argc, argv, "s:")) != -1) {
+ while ((ch = getopt(argc, argv, "s:t:")) != -1) {
switch (ch) {
case 's':
ubus_socket = optarg;
break;
+
+ case 't':
+ rpc_exec_timeout = 1000 * strtol(optarg, NULL, 0);
+ break;
+
default:
break;
}
}
- if (stat("/var/run/rpcd", &s))
- mkdir("/var/run/rpcd", 0700);
+ if (rpc_exec_timeout < 1000 || rpc_exec_timeout > 600000) {
+ fprintf(stderr, "Invalid execution timeout specified\n");
+ return -1;
+ }
+
+ if (stat(RPC_UCI_DIR_PREFIX, &s))
+ mkdir(RPC_UCI_DIR_PREFIX, 0700);
+
+ umask(0077);
signal(SIGPIPE, SIG_IGN);
signal(SIGHUP, handle_signal);