X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=command.c;h=2c9d29dfca3c6202d61e222a1934b9d21e1357bf;hp=bcbbc3406def48eba64adeb31eecd81997f634b2;hb=037059c8a25ce134af1eaa6c3fa8ac96b9f7e0b6;hpb=f32c0776882e01913c64c8ccbf2d94e0fb4d6369 diff --git a/command.c b/command.c index bcbbc340..2c9d29df 100644 --- a/command.c +++ b/command.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 1997-2010 Andre Noll + * Copyright (C) 1997-2011 Andre Noll * * Licensed under the GPL v2. For licencing details see COPYING. */ @@ -11,8 +11,8 @@ #include #include #include -#include #include +#include #include "para.h" #include "error.h" @@ -254,7 +254,8 @@ int com_si(struct rc4_context *rc4c, int argc, __a_unused char * const * argv) free(info); } ut = uptime_str(); - ret = rc4_send_va_buffer(rc4c, "up: %s\nplayed: %u\n" + ret = rc4_send_va_buffer(rc4c, "version: " GIT_VERSION "\n" + "up: %s\nplayed: %u\n" "server_pid: %d\n" "afs_pid: %d\n" "connections (active/accepted/total): %u/%u/%u\n" @@ -268,7 +269,7 @@ int com_si(struct rc4_context *rc4c, int argc, __a_unused char * const * argv) mmd->num_commands, mmd->num_connects, conf.loglevel_arg, - supported_audio_formats(), + SERVER_AUDIO_FORMATS, sender_info ); mutex_unlock(mmd_mutex); @@ -457,10 +458,8 @@ int com_help(struct rc4_context *rc4c, int argc, char * const * argv) } /* argument given for help */ cmd = get_cmd_ptr(argv[1], &handler); - if (!cmd) { - free(handler); + if (!cmd) return -E_BAD_CMD; - } perms = cmd_perms_itohuman(cmd->perms); ret = rc4_send_va_buffer(rc4c, "%s - %s\n\n" @@ -744,34 +743,34 @@ __noreturn void handle_connect(int fd, const char *peername) /* we need a blocking fd here as recv() might return EAGAIN otherwise. */ ret = mark_fd_blocking(fd); if (ret < 0) - goto err_out; + goto net_err; /* send Welcome message */ ret = send_va_buffer(fd, "This is para_server, version " PACKAGE_VERSION ".\n" ); if (ret < 0) - goto err_out; + goto net_err; /* recv auth request line */ ret = recv_buffer(fd, buf, sizeof(buf)); if (ret < 0) - goto err_out; + goto net_err; if (ret < 10) { ret = -E_AUTH_REQUEST; - goto err_out; + goto net_err; } numbytes = ret; ret = -E_AUTH_REQUEST; if (strncmp(buf, AUTH_REQUEST_MSG, strlen(AUTH_REQUEST_MSG))) - goto err_out; + goto net_err; p = buf + strlen(AUTH_REQUEST_MSG); PARA_DEBUG_LOG("received auth request for user %s\n", p); ret = -E_BAD_USER; u = lookup_user(p); if (u) { get_random_bytes_or_die(rand_buf, sizeof(rand_buf)); - ret = para_encrypt_buffer(u->rsa, rand_buf, sizeof(rand_buf), + ret = pub_encrypt(u->pubkey, rand_buf, sizeof(rand_buf), (unsigned char *)buf); if (ret < 0) - goto err_out; + goto net_err; numbytes = ret; } else { /* @@ -809,10 +808,10 @@ __noreturn void handle_connect(int fd, const char *peername) /* auth successful */ alarm(0); PARA_INFO_LOG("good auth for %s\n", u->name); - /* init rc4 keys with the second part of the random buffer */ - RC4_set_key(&rc4c.recv_key, RC4_KEY_LEN, rand_buf + CHALLENGE_SIZE); - RC4_set_key(&rc4c.send_key, RC4_KEY_LEN, rand_buf + CHALLENGE_SIZE - + RC4_KEY_LEN); + /* init stream cipher keys with the second part of the random buffer */ + rc4c.recv = stream_cipher_new(rand_buf + CHALLENGE_SIZE, RC4_KEY_LEN); + rc4c.send = stream_cipher_new(rand_buf + CHALLENGE_SIZE + RC4_KEY_LEN, + RC4_KEY_LEN); ret = rc4_send_buffer(&rc4c, PROCEED_MSG); if (ret < 0) goto net_err; @@ -849,6 +848,8 @@ net_err: PARA_NOTICE_LOG("%s\n", para_strerror(-ret)); out: free(command); + stream_cipher_free(rc4c.recv); + stream_cipher_free(rc4c.send); mutex_lock(mmd_mutex); if (cmd && (cmd->perms & AFS_WRITE) && ret >= 0) mmd->events++;