X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=command.c;h=8940a0d1b8faf931d8a2e8cea77c0593746d517b;hp=072b972cb5754122aa539178edbf6cf43a19d3e3;hb=6ba4b93029e13751208ea5e47c8e2a1fb21ebdec;hpb=2c679eeb8bbc93220f85403eca6e9380dc624a6a;ds=sidebyside diff --git a/command.c b/command.c index 072b972c..8940a0d1 100644 --- a/command.c +++ b/command.c @@ -4,32 +4,33 @@ * Licensed under the GPL v2. For licencing details see COPYING. */ -/** \file command.c does client authentication and executes server commands */ +/** \file command.c Client authentication and server commands. */ +#include #include #include #include #include #include "para.h" +#include "error.h" #include "server.cmdline.h" -#include "afs_common.h" +#include "string.h" #include "afh.h" +#include "afs.h" #include "server.h" #include "vss.h" #include "send.h" #include "rc4.h" -#include "error.h" #include "net.h" #include "daemon.h" -#include "string.h" #include "fd.h" #include "list.h" #include "user_list.h" #include "server_command_list.h" #include "afs_command_list.h" -/** commands including options must be shorter than this */ +/** Commands including options must be shorter than this. */ #define MAX_COMMAND_LEN 32768 static RC4_KEY rc4_recv_key; @@ -38,7 +39,6 @@ static unsigned char rc4_buf[2 * RC4_KEY_LEN]; extern const char *status_item_list[NUM_STAT_ITEMS]; extern struct misc_meta_data *mmd; -extern struct audio_file_selector selectors[]; extern struct sender senders[]; static void dummy(__a_unused int s) @@ -148,7 +148,7 @@ static char *get_status(struct misc_meta_data *nmmd) ret = make_message( "%s:%zu\n" "%s:%s\n" "%s:%lu\n" "%s:%u\n" "%s:%s\n" "%s:%s\n" "%s:%s\n" "%s:%s\n" - "%s:%li\n" "%s:%s\n" "%s" "%s" + "%s:%li\n" "%s:%s\n" "%s" "%s:%s\n" "%s:%lu.%lu\n" "%s:%lu.%lu\n", status_item_list[SI_FILE_SIZE], nmmd->size / 1024, status_item_list[SI_MTIME], mtime, @@ -158,11 +158,10 @@ static char *get_status(struct misc_meta_data *nmmd) status_item_list[SI_STATUS_BAR], bar ? bar : "(none)", status_item_list[SI_STATUS], status, status_item_list[SI_STATUS_FLAGS], flags, - status_item_list[SI_SELECTOR], selectors[nmmd->selector_num].name, + status_item_list[SI_SELECTOR], "FIXME", status_item_list[SI_OFFSET], offset, status_item_list[SI_FORMAT], audio_format_name(nmmd->audio_format), - nmmd->selector_info, nmmd->afi.info_string, status_item_list[SI_UPTIME], ut, @@ -219,7 +218,7 @@ static int check_sender_args(int argc, char * const * argv, struct sender_comman case SENDER_ALLOW: if (argc != 4 && argc != 5) return -E_COMMAND_SYNTAX; - if (!inet_aton(argv[3], &scd->addr)) + if (!inet_pton(AF_INET, argv[3], &scd->addr)) return -E_COMMAND_SYNTAX; scd->netmask = 32; if (argc == 5) { @@ -232,7 +231,7 @@ static int check_sender_args(int argc, char * const * argv, struct sender_comman case SENDER_DELETE: if (argc != 4 && argc != 5) return -E_COMMAND_SYNTAX; - if (!inet_aton(argv[3], &scd->addr)) + if (!inet_pton(AF_INET, argv[3], &scd->addr)) return -E_COMMAND_SYNTAX; scd->port = -1; if (argc == 5) { @@ -293,15 +292,11 @@ int com_si(int fd, int argc, __a_unused char * const * argv) { int i, ret; char *ut; - char *selector_string = NULL, *sender_info = NULL, *sender_list = NULL; + char *sender_info = NULL, *sender_list = NULL; if (argc != 1) return -E_COMMAND_SYNTAX; mmd_lock(); - for (i = 0; selectors[i].name; i++) { - selector_string = para_strcat(selector_string, selectors[i].name); - selector_string = para_strcat(selector_string, " "); - } for (i = 0; senders[i].name; i++) { char *info = senders[i].info(); sender_info = para_strcat(sender_info, info); @@ -314,7 +309,6 @@ int com_si(int fd, int argc, __a_unused char * const * argv) "pid: %d\n" "connections (active/accepted/total): %u/%u/%u\n" "current loglevel: %i\n" - "supported audio file selectors: %s\n" "supported audio formats: %s\n" "supported senders: %s\n" "%s", @@ -324,14 +318,12 @@ int com_si(int fd, int argc, __a_unused char * const * argv) mmd->num_commands, mmd->num_connects, conf.loglevel_arg, - selector_string, supported_audio_formats(), sender_list, sender_info ); mmd_unlock(); free(ut); - free(selector_string); free(sender_list); free(sender_info); return ret; @@ -453,7 +445,7 @@ static int send_list_of_commands(int fd, struct server_command *cmd, return 1; } -/* always returns string that must be freed by the caller in handler */ +/* returns string that must be freed by the caller */ static struct server_command *get_cmd_ptr(const char *name, char **handler) { struct server_command *cmd; @@ -464,16 +456,6 @@ static struct server_command *get_cmd_ptr(const char *name, char **handler) *handler = para_strdup("para_server"); /* server commands */ return cmd; } - /* not found, look for commands supported by the current selector */ - mmd_lock(); - if (handler) - *handler = make_message("the %s selector", - selectors[mmd->selector_num].name); - cmd = selectors[mmd->selector_num].cmd_list; - mmd_unlock(); - for (; cmd->name; cmd++) - if (!strcmp(cmd->name, name)) - return cmd; /* not found, look for commands supported by afs */ for (cmd = afs_cmds; cmd->name; cmd++) if (!strcmp(cmd->name, name)) @@ -492,16 +474,7 @@ int com_help(int fd, int argc, char * const * argv) /* no argument given, print list of commands */ if ((ret = send_list_of_commands(fd, server_cmds, "server")) < 0) return ret; - mmd_lock(); - handler = para_strdup(selectors[mmd->selector_num].name); - cmd = selectors[mmd->selector_num].cmd_list; - mmd_unlock(); - ret = send_list_of_commands(fd, cmd, handler); - free(handler); - if (ret < 0) - return ret; - cmd = afs_cmds; - return send_list_of_commands(fd, cmd, "afs"); + return send_list_of_commands(fd, afs_cmds, "afs"); } /* argument given for help */ cmd = get_cmd_ptr(argv[1], &handler); @@ -585,31 +558,6 @@ int com_pause(__a_unused int fd, int argc, __a_unused char * const * argv) return 1; } -int com_chs(int fd, int argc, char * const * argv) -{ - int i, ret; - - if (argc == 1) { - char *selector; - mmd_lock(); - selector = para_strdup(selectors[mmd->selector_num].name); - mmd_unlock(); - ret = send_va_buffer(fd, "%s\n", selector); - free(selector); - return ret; - } - for (i = 0; selectors[i].name; i++) { - if (strcmp(selectors[i].name, argv[1])) - continue; - mmd_lock(); - mmd->selector_change = i; - mmd->events++; - mmd_unlock(); - return 1; - } - return -E_BAD_SELECTOR; -} - /* next */ int com_next(__a_unused int fd, int argc, __a_unused char * const * argv) { @@ -812,12 +760,10 @@ out: * encrypted with its RSA public key. From this point on, * all transfers are crypted with this session key. * - * Next it is checked if the peer supplied a valid server - * command or a command for the audio file selector currently - * in use. If yes, and if the user has sufficient - * permissions to execute that command, the function calls - * the corresponding command handler which does argument - * checking and further processing. + * Next it is checked if the peer supplied a valid server command or a command + * for the audio file selector. If yes, and if the user has sufficient + * permissions to execute that command, the function calls the corresponding + * command handler which does argument checking and further processing. * * In order to cope with a DOS attacks, a timeout is set up * which terminates the function if the connection was not