X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=command.c;h=bfce809a310cbe7024386ed61a441f71d3cf4e82;hp=69564336c6f8228a072f699ad83dbbe19d154338;hb=3998a8c581623224b7b56bce593646b2c8516a0f;hpb=66b97974ebba5c6ea967b713f84f62a1b72da8d2 diff --git a/command.c b/command.c index 69564336..bfce809a 100644 --- a/command.c +++ b/command.c @@ -1,8 +1,4 @@ -/* - * Copyright (C) 1997 Andre Noll - * - * Licensed under the GPL v2. For licencing details see COPYING. - */ +/* Copyright (C) 1997 Andre Noll , see file COPYING. */ /** \file command.c Client authentication and server commands. */ @@ -26,12 +22,12 @@ #include "string.h" #include "afh.h" #include "afs.h" +#include "net.h" #include "server.h" #include "list.h" #include "send.h" #include "sched.h" #include "vss.h" -#include "net.h" #include "daemon.h" #include "fd.h" #include "ipc.h" @@ -398,7 +394,7 @@ static int com_si(struct command_context *cc, "supported audio formats: %s\n", ut, mmd->num_played, (int)getppid(), - (int)mmd->afs_pid, + (int)afs_pid, mmd->active_connections, mmd->num_commands, mmd->num_connects, @@ -667,8 +663,7 @@ static int com_nomore(__a_unused struct command_context *cc, } EXPORT_SERVER_CMD_HANDLER(nomore); -static int com_ff(__a_unused struct command_context *cc, - struct lls_parse_result *lpr) +static int com_ff(struct command_context *cc, struct lls_parse_result *lpr) { long promille; int ret, backwards = 0; @@ -688,6 +683,7 @@ static int com_ff(__a_unused struct command_context *cc, ret = -E_NO_AUDIO_FILE; if (!mmd->afd.afhi.chunks_total || !mmd->afd.afhi.seconds_total) goto out; + ret = 1; promille = (1000 * mmd->current_chunk) / mmd->afd.afhi.chunks_total; if (backwards) promille -= 1000 * i / mmd->afd.afhi.seconds_total; @@ -703,15 +699,13 @@ static int com_ff(__a_unused struct command_context *cc, mmd->new_vss_status_flags |= VSS_REPOS; mmd->new_vss_status_flags &= ~VSS_NEXT; mmd->events++; - ret = 1; out: mutex_unlock(mmd_mutex); return ret; } EXPORT_SERVER_CMD_HANDLER(ff); -static int com_jmp(__a_unused struct command_context *cc, - struct lls_parse_result *lpr) +static int com_jmp(struct command_context *cc, struct lls_parse_result *lpr) { long unsigned int i; int ret; @@ -744,12 +738,11 @@ out: } EXPORT_SERVER_CMD_HANDLER(jmp); -static int com_tasks(struct command_context *cc, +/* deprecated, does nothing */ +static int com_tasks(__a_unused struct command_context *cc, __a_unused struct lls_parse_result *lpr) { - char *tl = server_get_tasks(); - assert(tl); - return send_sb(&cc->scc, tl, strlen(tl), SBD_OUTPUT, false); + return 1; } EXPORT_SERVER_CMD_HANDLER(tasks); @@ -808,8 +801,7 @@ out: #define HANDSHAKE_BUFSIZE 4096 -static int run_command(struct command_context *cc, struct iovec *iov, - const char *peername) +static int run_command(struct command_context *cc, struct iovec *iov) { int ret, i, argc; char *p, *end, **argv; @@ -842,8 +834,8 @@ static int run_command(struct command_context *cc, struct iovec *iov, p += strlen(p) + 1; } argv[argc] = NULL; - PARA_NOTICE_LOG("calling com_%s() for %s@%s\n", lls_command_name(lcmd), - cc->u->name, peername); + PARA_NOTICE_LOG("calling com_%s() for user %s\n", + lls_command_name(lcmd), cc->u->name); ret = lls(lls_parse(argc, argv, lcmd, &lpr, &errctx)); if (ret >= 0) { const struct server_cmd_user_data *ud = lls_user_data(lcmd); @@ -864,7 +856,6 @@ static int run_command(struct command_context *cc, struct iovec *iov, * Perform user authentication and execute a command. * * \param fd The file descriptor to send output to. - * \param peername Identifies the connecting peer. * * Whenever para_server accepts an incoming tcp connection on the port it * listens on, it forks and the resulting child calls this function. @@ -879,16 +870,16 @@ static int run_command(struct command_context *cc, struct iovec *iov, * 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 + * In order to cope with DOS attacks, a timeout is set up which terminates * the function if the connection was not authenticated when the timeout * expires. * - * \sa alarm(2), \ref crypt.c, \ref crypt.h. + * \sa alarm(2), \ref openssl.c, \ref crypt.h. */ -__noreturn void handle_connect(int fd, const char *peername) +__noreturn void handle_connect(int fd) { int ret; - unsigned char rand_buf[CHALLENGE_SIZE + 2 * SESSION_KEY_LEN]; + unsigned char rand_buf[APC_CHALLENGE_SIZE + 2 * SESSION_KEY_LEN]; unsigned char challenge_hash[HASH_SIZE]; char *command = NULL, *buf = para_malloc(HANDSHAKE_BUFSIZE) /* must be on the heap */; size_t numbytes; @@ -918,7 +909,7 @@ __noreturn void handle_connect(int fd, const char *peername) goto net_err; if (cc->u) { get_random_bytes_or_die(rand_buf, sizeof(rand_buf)); - ret = pub_encrypt(cc->u->pubkey, rand_buf, sizeof(rand_buf), + ret = apc_pub_encrypt(cc->u->pubkey, rand_buf, sizeof(rand_buf), (unsigned char *)buf); if (ret < 0) goto net_err; @@ -933,7 +924,7 @@ __noreturn void handle_connect(int fd, const char *peername) get_random_bytes_or_die((unsigned char *)buf, numbytes); } PARA_DEBUG_LOG("sending %d byte challenge + session key (%zu bytes)\n", - CHALLENGE_SIZE, numbytes); + APC_CHALLENGE_SIZE, numbytes); ret = send_sb(&cc->scc, buf, numbytes, SBD_CHALLENGE, false); buf = NULL; if (ret < 0) @@ -949,21 +940,21 @@ __noreturn void handle_connect(int fd, const char *peername) if (!cc->u) goto net_err; /* - * The correct response is the hash of the first CHALLENGE_SIZE bytes + * The correct response is the hash of the first APC_CHALLENGE_SIZE bytes * of the random data. */ ret = -E_BAD_AUTH; if (numbytes != HASH_SIZE) goto net_err; - hash_function((char *)rand_buf, CHALLENGE_SIZE, challenge_hash); + hash_function((char *)rand_buf, APC_CHALLENGE_SIZE, challenge_hash); if (memcmp(challenge_hash, buf, HASH_SIZE)) goto net_err; /* auth successful */ alarm(0); PARA_INFO_LOG("good auth for %s\n", cc->u->name); /* init stream cipher keys with the second part of the random buffer */ - cc->scc.recv = sc_new(rand_buf + CHALLENGE_SIZE, SESSION_KEY_LEN); - cc->scc.send = sc_new(rand_buf + CHALLENGE_SIZE + SESSION_KEY_LEN, + cc->scc.recv = sc_new(rand_buf + APC_CHALLENGE_SIZE, SESSION_KEY_LEN); + cc->scc.send = sc_new(rand_buf + APC_CHALLENGE_SIZE + SESSION_KEY_LEN, SESSION_KEY_LEN); ret = send_sb(&cc->scc, NULL, 0, SBD_PROCEED, false); if (ret < 0) @@ -971,7 +962,7 @@ __noreturn void handle_connect(int fd, const char *peername) ret = recv_sb(&cc->scc, SBD_COMMAND, MAX_COMMAND_LEN, &iov); if (ret < 0) goto net_err; - ret = run_command(cc, &iov, peername); + ret = run_command(cc, &iov); free(iov.iov_base); if (ret < 0) goto err_out;