X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=command.c;h=7dba2f90b8e4ff1e6fca0352d31b79d24b41e9af;hp=056df57de6046d5c5f3ccd13edd6fb6c2672864d;hb=08a1de75a3a83c728d97a3c4ff182553adbda8cc;hpb=471684761a2039bbc89aa1e3c33c62de6bef86cf diff --git a/command.c b/command.c index 056df57d..7dba2f90 100644 --- a/command.c +++ b/command.c @@ -6,24 +6,33 @@ /** \file command.c does client authentication and executes server commands */ -#include /* gettimeofday */ +#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 -#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 */ -#define MAX_COMMAND_LEN 4096 +#define MAX_COMMAND_LEN 32768 static RC4_KEY rc4_recv_key; static RC4_KEY rc4_send_key; @@ -31,7 +40,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) @@ -141,7 +149,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, @@ -151,11 +159,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, @@ -174,7 +181,7 @@ static char *get_status(struct misc_meta_data *nmmd) return ret; } -static int check_sender_args(int argc, char **argv, struct sender_command_data *scd) +static int check_sender_args(int argc, char * const * argv, struct sender_command_data *scd) { int i; /* this has to match sender.h */ @@ -212,7 +219,7 @@ static int check_sender_args(int argc, char **argv, struct sender_command_data * 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) { @@ -225,7 +232,7 @@ static int check_sender_args(int argc, char **argv, struct sender_command_data * 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) { @@ -240,7 +247,7 @@ static int check_sender_args(int argc, char **argv, struct sender_command_data * return 1; } -int com_sender(int fd, int argc, char **argv) +int com_sender(int fd, int argc, char * const * argv) { int i, ret; struct sender_command_data scd; @@ -282,19 +289,15 @@ int com_sender(int fd, int argc, char **argv) } /* server info */ -int com_si(int fd, int argc, __a_unused char **argv) +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); @@ -307,7 +310,6 @@ int com_si(int fd, int argc, __a_unused char **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", @@ -317,21 +319,19 @@ int com_si(int fd, int argc, __a_unused char **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; } /* version */ -int com_version(int fd, int argc, __a_unused char **argv) +int com_version(int fd, int argc, __a_unused char * const * argv) { if (argc != 1) return -E_COMMAND_SYNTAX; @@ -342,7 +342,7 @@ int com_version(int fd, int argc, __a_unused char **argv) } /* sc */ -int com_sc(int fd, int argc, char **argv) +int com_sc(int fd, int argc, char * const * argv) { char *name = NULL; int ret, old = 0, count = -1; /* print af change forever */ @@ -370,7 +370,7 @@ repeat: } /* sb */ -int com_sb(int fd, int argc, char **argv) +int com_sb(int fd, int argc, char * const * argv) { char *sb; int ret, nr = -1; /* status bar will be printed that many @@ -397,7 +397,7 @@ int com_sb(int fd, int argc, char **argv) } /* stat */ -int com_stat(int fd, int argc, char **argv) +int com_stat(int fd, int argc, char * const * argv) { int ret, num = 0;/* status will be printed that many * times. num <= 0 means: print forever @@ -447,7 +447,7 @@ static int send_list_of_commands(int fd, struct server_command *cmd, } /* always returns string that must be freed by the caller in handler */ -static struct server_command *get_cmd_ptr(char *name, char **handler) +static struct server_command *get_cmd_ptr(const char *name, char **handler) { struct server_command *cmd; @@ -457,21 +457,15 @@ static struct server_command *get_cmd_ptr(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++) + /* not found, look for commands supported by afs */ + for (cmd = afs_cmds; cmd->name; cmd++) if (!strcmp(cmd->name, name)) return cmd; return NULL; } /* help */ -int com_help(int fd, int argc, char **argv) +int com_help(int fd, int argc, char * const * argv) { struct server_command *cmd; char *perms, *handler; @@ -481,13 +475,7 @@ int com_help(int fd, int argc, char **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); - return ret; + return send_list_of_commands(fd, afs_cmds, "afs"); } /* argument given for help */ cmd = get_cmd_ptr(argv[1], &handler); @@ -515,7 +503,7 @@ int com_help(int fd, int argc, char **argv) } /* hup */ -int com_hup(__a_unused int fd, int argc, __a_unused char **argv) +int com_hup(__a_unused int fd, int argc, __a_unused char * const * argv) { if (argc != 1) return -E_COMMAND_SYNTAX; @@ -524,7 +512,7 @@ int com_hup(__a_unused int fd, int argc, __a_unused char **argv) } /* term */ -int com_term(__a_unused int fd, int argc, __a_unused char **argv) +int com_term(__a_unused int fd, int argc, __a_unused char * const * argv) { if (argc != 1) return -E_COMMAND_SYNTAX; @@ -532,7 +520,7 @@ int com_term(__a_unused int fd, int argc, __a_unused char **argv) return 1; } -int com_play(__a_unused int fd, int argc, __a_unused char **argv) +int com_play(__a_unused int fd, int argc, __a_unused char * const * argv) { if (argc != 1) return -E_COMMAND_SYNTAX; @@ -545,7 +533,7 @@ int com_play(__a_unused int fd, int argc, __a_unused char **argv) } /* stop */ -int com_stop(__a_unused int fd, int argc, __a_unused char **argv) +int com_stop(__a_unused int fd, int argc, __a_unused char * const * argv) { if (argc != 1) return -E_COMMAND_SYNTAX; @@ -558,7 +546,7 @@ int com_stop(__a_unused int fd, int argc, __a_unused char **argv) } /* pause */ -int com_pause(__a_unused int fd, int argc, __a_unused char **argv) +int com_pause(__a_unused int fd, int argc, __a_unused char * const * argv) { if (argc != 1) return -E_COMMAND_SYNTAX; @@ -571,33 +559,8 @@ int com_pause(__a_unused int fd, int argc, __a_unused char **argv) return 1; } -int com_chs(int fd, int argc, char **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 **argv) +int com_next(__a_unused int fd, int argc, __a_unused char * const * argv) { if (argc != 1) return -E_COMMAND_SYNTAX; @@ -609,7 +572,7 @@ int com_next(__a_unused int fd, int argc, __a_unused char **argv) } /* nomore */ -int com_nomore(__a_unused int fd, int argc, __a_unused char **argv) +int com_nomore(__a_unused int fd, int argc, __a_unused char * const * argv) { if (argc != 1) return -E_COMMAND_SYNTAX; @@ -621,7 +584,7 @@ int com_nomore(__a_unused int fd, int argc, __a_unused char **argv) } /* ff */ -int com_ff(__a_unused int fd, int argc, char **argv) +int com_ff(__a_unused int fd, int argc, char * const * argv) { long promille; int ret, backwards = 0; @@ -660,7 +623,7 @@ out: } /* jmp */ -int com_jmp(__a_unused int fd, int argc, char **argv) +int com_jmp(__a_unused int fd, int argc, char * const * argv) { long unsigned int i; int ret; @@ -798,12 +761,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