session: Fix crash when the UCI option 'password' or 'username' is missing
[project/rpcd.git] / main.c
diff --git a/main.c b/main.c
index 1db3241958f0d61ba01c59a5f6710b7d6839e58b..d77a814cdbf611f2c5fbdc55b00f1c89e100bd88 100644 (file)
--- a/main.c
+++ b/main.c
 #include <signal.h>
 #include <sys/stat.h>
 
+#include <rpcd/exec.h>
+#include <rpcd/plugin.h>
+#include <rpcd/rc.h>
 #include <rpcd/session.h>
 #include <rpcd/uci.h>
-#include <rpcd/plugin.h>
-#include <rpcd/exec.h>
 
 static struct ubus_context *ctx;
 static bool respawn = false;
@@ -47,10 +48,15 @@ static void
 exec_self(int argc, char **argv)
 {
        int i;
-       const char *cmd = rpc_exec_lookup(argv[0]);
-       char **args = calloc(argc + 1, sizeof(char *));
+       const char *cmd;
+       char **args;
+
+       cmd = rpc_exec_lookup(argv[0]);
+       if (!cmd)
+               return;
 
-       if (!cmd || !args)
+       args = calloc(argc + 1, sizeof(char *));
+       if (!args)
                return;
 
        for (i = 0; i < argc; i++)
@@ -108,6 +114,7 @@ int main(int argc, char **argv)
 
        rpc_session_api_init(ctx);
        rpc_uci_api_init(ctx);
+       rpc_rc_api_init(ctx);
        rpc_plugin_api_init(ctx);
 
        hangup = getenv("RPC_HANGUP");