X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fsysdep.c;h=9b1bcfa56b6ad21d430458c937ddcb825df4b32b;hb=45fc293fa4f3071711a67c85b1337e5b1eebea23;hp=971d729c4c282de588a791b04dd7de96eddbd679;hpb=cb5275786332fa50897200781d3100449b5f71dd;p=citadel.git diff --git a/citadel/sysdep.c b/citadel/sysdep.c index 971d729c4..9b1bcfa56 100644 --- a/citadel/sysdep.c +++ b/citadel/sysdep.c @@ -86,14 +86,14 @@ void init_sysdep(void) { init_ssl(); #endif - /* - * Set up a place to put thread-specific data. - * We only need a single pointer per thread - it points to the - * CitContext structure (in the ContextList linked list) of the - * session to which the calling thread is currently bound. - */ - if (pthread_key_create(&MyConKey, NULL) != 0) { + if (pthread_key_create(&ThreadKey, NULL) != 0) { // TSD for threads + syslog(LOG_ERR, "pthread_key_create() : %m"); + abort(); + } + + if (pthread_key_create(&MyConKey, NULL) != 0) { // TSD for sessions syslog(LOG_CRIT, "sysdep: can't create TSD key: %m"); + abort(); } /* @@ -128,7 +128,7 @@ void init_sysdep(void) { * port_number port number to bind * queue_len number of incoming connections to allow in the queue */ -int ctdl_tcp_server(char *ip_addr, int port_number, int queue_len, char *errormessage) +int ctdl_tcp_server(char *ip_addr, int port_number, int queue_len) { struct protoent *p; struct sockaddr_in6 sin6; @@ -157,8 +157,7 @@ int ctdl_tcp_server(char *ip_addr, int port_number, int queue_len, char *errorme { ip_version = 4; if (inet_pton(AF_INET, ip_addr, &sin4.sin_addr) <= 0) { - snprintf(errormessage, SIZ, "Error binding to [%s] : %s", ip_addr, strerror(errno)); - syslog(LOG_ALERT, "tcpserver: %s", errormessage); + syslog(LOG_ALERT, "tcpserver: inet_pton: %m"); return (-1); } } @@ -166,26 +165,27 @@ int ctdl_tcp_server(char *ip_addr, int port_number, int queue_len, char *errorme { ip_version = 6; if (inet_pton(AF_INET6, ip_addr, &sin6.sin6_addr) <= 0) { - snprintf(errormessage, SIZ, "Error binding to [%s] : %s", ip_addr, strerror(errno)); - syslog(LOG_ALERT, "tcpserver: %s", errormessage); + syslog(LOG_ALERT, "tcpserver: inet_pton: %m"); return (-1); } } if (port_number == 0) { - snprintf(errormessage, SIZ, "Can't start: no port number specified."); - syslog(LOG_ALERT, "tcpserver: %s", errormessage); + syslog(LOG_ALERT, "tcpserver: no port number was specified"); return (-1); } sin6.sin6_port = htons((u_short) port_number); sin4.sin_port = htons((u_short) port_number); p = getprotobyname("tcp"); + if (p == NULL) { + syslog(LOG_ALERT, "tcpserver: getprotobyname: %m"); + return (-1); + } s = socket( ((ip_version == 6) ? PF_INET6 : PF_INET), SOCK_STREAM, (p->p_proto)); if (s < 0) { - snprintf(errormessage, SIZ, "Can't create a listening socket: %s", strerror(errno)); - syslog(LOG_ALERT, "tcpserver: %s", errormessage); + syslog(LOG_ALERT, "tcpserver: socket: %m"); return (-1); } /* Set some socket options that make sense. */ @@ -200,16 +200,14 @@ int ctdl_tcp_server(char *ip_addr, int port_number, int queue_len, char *errorme } if (b < 0) { - snprintf(errormessage, SIZ, "Can't bind: %s", strerror(errno)); - syslog(LOG_ALERT, "tcpserver: %s", errormessage); + syslog(LOG_ALERT, "tcpserver: bind: %m"); return (-1); } fcntl(s, F_SETFL, O_NONBLOCK); if (listen(s, ((queue_len >= 5) ? queue_len : 5) ) < 0) { - snprintf(errormessage, SIZ, "Can't listen: %s", strerror(errno)); - syslog(LOG_ALERT, "tcpserver: %s", errormessage); + syslog(LOG_ALERT, "tcpserver: listen: %m"); return (-1); } return (s); @@ -219,7 +217,7 @@ int ctdl_tcp_server(char *ip_addr, int port_number, int queue_len, char *errorme /* * Create a Unix domain socket and listen on it */ -int ctdl_uds_server(char *sockpath, int queue_len, char *errormessage) +int ctdl_uds_server(char *sockpath, int queue_len) { struct sockaddr_un addr; int s; @@ -234,8 +232,7 @@ int ctdl_uds_server(char *sockpath, int queue_len, char *errormessage) i = unlink(sockpath); if ((i != 0) && (errno != ENOENT)) { - snprintf(errormessage, SIZ, "can't unlink %s: %s", sockpath, strerror(errno)); - syslog(LOG_ERR, "udsserver: %s", errormessage); + syslog(LOG_ERR, "udsserver: %m"); return(-1); } @@ -245,28 +242,24 @@ int ctdl_uds_server(char *sockpath, int queue_len, char *errormessage) s = socket(AF_UNIX, SOCK_STREAM, 0); if (s < 0) { - snprintf(errormessage, SIZ, "can't create a socket: %s", strerror(errno)); - syslog(LOG_ERR, "udsserver: %s", errormessage); + syslog(LOG_ERR, "udsserver: socket: %m"); return(-1); } if (bind(s, (struct sockaddr *)&addr, sizeof(addr)) < 0) { - snprintf(errormessage, SIZ, "can't bind: %s", strerror(errno)); - syslog(LOG_ERR, "udsserver: %s", errormessage); + syslog(LOG_ERR, "udsserver: bind: %m"); return(-1); } /* set to nonblock - we need this for some obscure situations */ if (fcntl(s, F_SETFL, O_NONBLOCK) < 0) { - snprintf(errormessage, SIZ, "can't set socket to non-blocking: %s", strerror(errno)); - syslog(LOG_ERR, "udsserver: %s", errormessage); + syslog(LOG_ERR, "udsserver: fcntl: %m"); close(s); return(-1); } if (listen(s, actual_queue_len) < 0) { - snprintf(errormessage, SIZ, "can't listen: %s", strerror(errno)); - syslog(LOG_ERR, "udsserver: %s", errormessage); + syslog(LOG_ERR, "udsserver: listen: %m"); return(-1); }