Merge branch 'master' into next
[paraslash.git] / command.c
index fa844b5ed2213bb8dc00777c18d25e9659b36e19..8fdb839a97be1e6c459f5911621fffa88d61410b 100644 (file)
--- a/command.c
+++ b/command.c
@@ -6,6 +6,7 @@
 
 /** \file command.c Client authentication and server commands. */
 
+#include <regex.h>
 #include <signal.h>
 #include <sys/time.h>
 #include <sys/types.h>
@@ -42,6 +43,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 +368,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;
@@ -773,7 +778,7 @@ __noreturn void handle_connect(int fd, const char *peername)
                numbytes = 256;
                get_random_bytes_or_die((unsigned char *)buf, numbytes);
        }
-       PARA_DEBUG_LOG("sending %zu byte challenge + rc4 keys (%u bytes)\n",
+       PARA_DEBUG_LOG("sending %u byte challenge + rc4 keys (%zu bytes)\n",
                CHALLENGE_SIZE, numbytes);
        ret = send_bin_buffer(fd, buf, numbytes);
        if (ret < 0)
@@ -783,7 +788,7 @@ __noreturn void handle_connect(int fd, const char *peername)
        if (ret < 0)
                goto net_err;
        numbytes = ret;
-       PARA_DEBUG_LOG("received %zu bytes challenge response\n", ret);
+       PARA_DEBUG_LOG("received %d bytes challenge response\n", ret);
        ret = -E_BAD_USER;
        if (!u)
                goto net_err;
@@ -821,10 +826,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 +845,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++;