com_stat(): Return a proper error message if an invalid option was given.
[paraslash.git] / command.c
index fa844b5ed2213bb8dc00777c18d25e9659b36e19..90c4b60846c5c6cade80316f57bef742fdc7e716 100644 (file)
--- a/command.c
+++ b/command.c
@@ -42,6 +42,9 @@
 extern int mmd_mutex;
 extern struct misc_meta_data *mmd;
 extern struct sender senders[];
+int send_afs_status(struct rc4_context *rc4c, int parser_friendly);
+
+const char *status_item_list[] = {STATUS_ITEM_ARRAY};
 
 static void dummy(__a_unused int s)
 {
@@ -364,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;
@@ -821,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);
@@ -836,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++;