X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=server.c;h=6195266bb8f87ca168c410c44aef5dfac18586b4;hp=c7e681264cddcd3fe7223b2492485be97869f4cc;hb=883af7d8af543616fe4ca09b0273dd4f59848779;hpb=be0b6d883628d8ff9043107f1ddd780838facd3d diff --git a/server.c b/server.c index c7e68126..6195266b 100644 --- a/server.c +++ b/server.c @@ -42,6 +42,8 @@ #include "string.h" #include "ipc.h" #include "fd.h" +#include "signal.h" +#include "user_list.h" /** define the array of error lists needed by para_server */ INIT_SERVER_ERRLISTS; @@ -57,7 +59,7 @@ struct misc_meta_data *mmd; * senders. */ struct server_args_info conf; -char *user_list = NULL; +char *user_list_file = NULL; extern void dccp_send_init(struct sender *); extern void http_send_init(struct sender *); extern void ortp_send_init(struct sender *); @@ -221,11 +223,11 @@ static void parse_config(int override) cf = conf.config_file_arg; else cf = make_message("%s/.paraslash/server.conf", home); - free(user_list); + free(user_list_file); if (!conf.user_list_given) - user_list = make_message("%s/.paraslash/server.users", home); + user_list_file = make_message("%s/.paraslash/server.users", home); else - user_list = para_strdup(conf.user_list_arg); + user_list_file = para_strdup(conf.user_list_arg); ret = stat(cf, &statbuf); if (ret && conf.config_file_given) { ret = -1; @@ -251,8 +253,8 @@ out: free(home); if (ret > 0) return; - free(user_list); - user_list = NULL; + free(user_list_file); + user_list_file = NULL; exit(EXIT_FAILURE); } @@ -302,11 +304,18 @@ random: static unsigned init_network(void) { - int sockfd = init_tcp_socket(conf.port_arg); + int fd, ret = init_tcp_socket(conf.port_arg); - if (sockfd < 0) - exit(EXIT_FAILURE); - return sockfd; + if (ret < 0) + goto err; + fd = ret; + ret = mark_fd_nonblock(fd); + if (ret < 0) + goto err; + return fd; +err: + PARA_EMERG_LOG("%s\n", PARA_STRERROR(-ret)); + exit(EXIT_FAILURE); } static void init_random_seed(void) @@ -346,6 +355,7 @@ static unsigned do_inits(int argc, char **argv) log_welcome("para_server", conf.loglevel_arg); shm_init(); /* init mmd struct */ server_uptime(UPTIME_SET); /* reset server uptime */ + init_user_list(user_list_file); /* become daemon */ if (conf.daemon_given) daemon_init(); @@ -391,6 +401,7 @@ static void handle_sighup(void) parse_config(1); /* reopens log */ mmd->selector_change = mmd->selector_num; /* do not change selector.. */ change_selector(); /* .. just reload */ + init_user_list(user_list_file); /* reload user list */ } static void status_refresh(void)