com_stat(): Return a proper error message if an invalid option was given.
[paraslash.git] / command.c
index f8b5e4ee50f47af295c2e4d2689d30fc031eb44f..90c4b60846c5c6cade80316f57bef742fdc7e716 100644 (file)
--- a/command.c
+++ b/command.c
@@ -367,6 +367,7 @@ int com_stat(struct rc4_context *rc4c, int argc, char * const * argv)
                        parser_friendly = 1;
                        continue;
                }
+               return -E_COMMAND_SYNTAX;
        }
        if (i != argc)
                return -E_COMMAND_SYNTAX;
@@ -824,10 +825,14 @@ __noreturn void handle_connect(int fd, const char *peername)
        if (ret < 0)
                goto err_out;
        /* valid command and sufficient perms */
-       argc = split_args(command, &argv, "\n");
+       ret = create_argv(command, "\n", &argv);
+       if (ret < 0)
+               goto err_out;
+       argc = ret;
        PARA_NOTICE_LOG("calling com_%s() for %s@%s\n", cmd->name, u->name,
                        peername);
        ret = cmd->handler(&rc4c, argc, argv);
+       free_argv(argv);
        mutex_lock(mmd_mutex);
        mmd->num_commands++;
        mutex_unlock(mmd_mutex);
@@ -839,7 +844,6 @@ net_err:
        PARA_NOTICE_LOG("%s\n", para_strerror(-ret));
 out:
        free(command);
-       free(argv);
        mutex_lock(mmd_mutex);
        if (cmd && (cmd->perms & AFS_WRITE) && ret >= 0)
                mmd->events++;