X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=command.c;h=b7795a002a20f36349bd450522b99f746f3256ba;hp=becd561b939f775427b552b831cc3413fb433fcb;hb=98f2c8aea52a49fad3fd6df67b1eb32c1499176c;hpb=b03fee78f6041e0f126125a5d209a201a86deaba;ds=sidebyside diff --git a/command.c b/command.c index becd561b..b7795a00 100644 --- a/command.c +++ b/command.c @@ -1,11 +1,12 @@ /* - * Copyright (C) 1997-2009 Andre Noll + * Copyright (C) 1997-2010 Andre Noll * * Licensed under the GPL v2. For licencing details see COPYING. */ /** \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) { @@ -232,7 +234,7 @@ int com_si(struct rc4_context *rc4c, int argc, __a_unused char * const * argv) { int i, ret; char *ut; - char *sender_info = NULL, *sender_list = NULL; + char *sender_info = NULL; if (argc != 1) return -E_COMMAND_SYNTAX; @@ -241,8 +243,6 @@ int com_si(struct rc4_context *rc4c, int argc, __a_unused char * const * argv) char *info = senders[i].info(); sender_info = para_strcat(sender_info, info); free(info); - sender_list = para_strcat(sender_list, senders[i].name); - sender_list = para_strcat(sender_list, " "); } ut = uptime_str(); ret = rc4_send_va_buffer(rc4c, "up: %s\nplayed: %u\n" @@ -251,7 +251,6 @@ int com_si(struct rc4_context *rc4c, int argc, __a_unused char * const * argv) "connections (active/accepted/total): %u/%u/%u\n" "current loglevel: %s\n" "supported audio formats: %s\n" - "supported senders: %s\n" "%s", ut, mmd->num_played, (int)getppid(), @@ -261,12 +260,10 @@ int com_si(struct rc4_context *rc4c, int argc, __a_unused char * const * argv) mmd->num_connects, conf.loglevel_arg, supported_audio_formats(), - sender_list, sender_info ); mutex_unlock(mmd_mutex); free(ut); - free(sender_list); free(sender_info); return ret; } @@ -366,6 +363,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 +773,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 +783,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 +821,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 +840,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++;