X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=command.c;h=8fdb839a97be1e6c459f5911621fffa88d61410b;hp=becd561b939f775427b552b831cc3413fb433fcb;hb=0f7851078e5eb89565f9b3194ee100ac20bbb7f1;hpb=b03fee78f6041e0f126125a5d209a201a86deaba diff --git a/command.c b/command.c index becd561b..8fdb839a 100644 --- a/command.c +++ b/command.c @@ -6,6 +6,7 @@ /** \file command.c Client authentication and server commands. */ +#include #include #include #include @@ -44,6 +45,7 @@ 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) { @@ -366,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; @@ -775,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) @@ -785,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; @@ -823,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); @@ -838,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++;