From a35c113e0bb9fa9ac02b77eb01dd32f49cd5c8d0 Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Sun, 31 Dec 2017 16:27:25 +0100 Subject: [PATCH] server: Simplify afs socket cookie code. Currently, the afs_socket_cookie value is passed to afs_init() and is stored in the commmand task structure of the afs process. This is unnecessary since the variable defined in server.c is non-static, and declared as extern in afs.c. We may thus refer to this variable from afs.c. The variable was also documented twice. Get rid of one comment. --- afs.c | 33 ++++++++------------------------- afs.h | 2 +- server.c | 12 ++++++++++-- 3 files changed, 19 insertions(+), 28 deletions(-) diff --git a/afs.c b/afs.c index a8c504f4..c2d5e7af 100644 --- a/afs.c +++ b/afs.c @@ -74,11 +74,6 @@ static struct afs_table afs_tables[NUM_AFS_TABLES] = { struct command_task { /** The file descriptor for the local socket. */ int fd; - /** - * Value sent by the command handlers to identify themselves as - * children of the running para_server. - */ - uint32_t cookie; /** The associated task structure. */ struct task *task; }; @@ -93,15 +88,6 @@ static struct signal_task *signal_task; static enum play_mode current_play_mode; static char *current_mop; /* mode or playlist specifier. NULL means dummy mood */ -/** - * A random number used to "authenticate" the connection. - * - * para_server picks this number by random before it forks the afs process. The - * command handlers know this number as well and write it to the afs socket, - * together with the id of the shared memory area which contains the payload of - * the afs command. A local process has to know this number to abuse the afs - * service provided by the local socket. - */ extern uint32_t afs_socket_cookie; /** @@ -880,7 +866,7 @@ static int execute_server_command(fd_set *rfds) } /* returns 0 if no data available, 1 else */ -static int execute_afs_command(int fd, fd_set *rfds, uint32_t expected_cookie) +static int execute_afs_command(int fd, fd_set *rfds) { uint32_t cookie; int query_shmid; @@ -898,9 +884,9 @@ static int execute_afs_command(int fd, fd_set *rfds, uint32_t expected_cookie) return 1; } cookie = *(uint32_t *)buf; - if (cookie != expected_cookie) { + if (cookie != afs_socket_cookie) { PARA_NOTICE_LOG("received invalid cookie (got %u, expected %u)\n", - (unsigned)cookie, (unsigned)expected_cookie); + (unsigned)cookie, (unsigned)afs_socket_cookie); return 1; } query_shmid = *(int *)(buf + sizeof(cookie)); @@ -938,7 +924,7 @@ static int command_post_select(struct sched *s, void *context) } /* Check the list of connected clients. */ list_for_each_entry_safe(client, tmp, &afs_client_list, node) { - ret = execute_afs_command(client->fd, &s->rfds, ct->cookie); + ret = execute_afs_command(client->fd, &s->rfds); if (ret == 0) { /* prevent bogus connection flooding */ struct timeval diff; tv_diff(now, &client->connect_time, &diff); @@ -969,11 +955,10 @@ static int command_post_select(struct sched *s, void *context) return 0; } -static void register_command_task(uint32_t cookie, struct sched *s) +static void register_command_task(struct sched *s) { struct command_task *ct = &command_task_struct; ct->fd = setup_command_socket_or_die(); - ct->cookie = cookie; ct->task = task_register(&(struct task_info) { .name = "afs command", @@ -986,10 +971,9 @@ static void register_command_task(uint32_t cookie, struct sched *s) /** * Initialize the audio file selector process. * - * \param cookie The value used for "authentication". * \param socket_fd File descriptor used for communication with the server. */ -__noreturn void afs_init(uint32_t cookie, int socket_fd) +__noreturn void afs_init(int socket_fd) { static struct sched s; int i, ret; @@ -1005,10 +989,9 @@ __noreturn void afs_init(uint32_t cookie, int socket_fd) ret = mark_fd_nonblocking(server_socket); if (ret < 0) goto out_close; - PARA_INFO_LOG("server_socket: %d, afs_socket_cookie: %u\n", - server_socket, (unsigned) cookie); + PARA_INFO_LOG("server_socket: %d\n", server_socket); init_admissible_files(OPT_STRING_VAL(AFS_INITIAL_MODE)); - register_command_task(cookie, &s); + register_command_task(&s); s.default_timeout.tv_sec = 0; s.default_timeout.tv_usec = 999 * 1000; ret = write(socket_fd, "\0", 1); diff --git a/afs.h b/afs.h index 544a498d..f506cbff 100644 --- a/afs.h +++ b/afs.h @@ -212,7 +212,7 @@ _static_inline_ int afs_max_size_handler(char *buf, size_t size, void *private) return pass_buffer_as_shm(amshd->fd, amshd->band, buf, size); } -__noreturn void afs_init(uint32_t cookie, int socket_fd); +__noreturn void afs_init(int socket_fd); __must_check int afs_event(enum afs_events event, struct para_buffer *pb, void *data); int send_callback_request(afs_callback *f, struct osl_object *query, diff --git a/server.c b/server.c index 2018b8ee..8c2a78f4 100644 --- a/server.c +++ b/server.c @@ -86,7 +86,15 @@ struct lls_parse_result *server_lpr = NULL; /* Command line options (no config file options). Used in handle_sighup(). */ static struct lls_parse_result *cmdline_lpr; -/** A random value used in child context for authentication. */ +/** + * A random number used to "authenticate" the afs connection. + * + * para_server picks this number by random before it forks the afs process. The + * command handlers know this number as well and write it to the afs socket, + * together with the id of the shared memory area which contains the payload of + * the afs command. A local process has to know this number to abuse the afs + * service provided by the local socket. + */ uint32_t afs_socket_cookie; /** The mutex protecting the shared memory area containing the mmd struct. */ @@ -454,7 +462,7 @@ static int init_afs(int argc, char **argv) i = argc - lls_num_inputs(cmdline_lpr) - 1; sprintf(argv[i], "para_server (afs)"); close(afs_server_socket[0]); - afs_init(afs_socket_cookie, afs_server_socket[1]); + afs_init(afs_server_socket[1]); } close(afs_server_socket[1]); if (read(afs_server_socket[0], &c, 1) <= 0) { -- 2.39.5