Removed an old debugging harness
[citadel.git] / citadel / sysdep.c
index 971d729c4c282de588a791b04dd7de96eddbd679..1a30b4df769a3dae66824e09d0c27b424aa9fdd1 100644 (file)
@@ -4,7 +4,7 @@
  * Here's where we (hopefully) have most parts of the Citadel server that
  * might need tweaking when run on different operating system variants.
  *
- * Copyright (c) 1987-2019 by the citadel.org team
+ * Copyright (c) 1987-2021 by the citadel.org team
  *
  * This program is open source software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License, version 3.
@@ -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);
        }
 
@@ -365,26 +358,6 @@ int client_write(const char *buf, int nbytes)
 
        Ctx = CC;
 
-#ifdef BIGBAD_IODBG
-       {
-               int rv = 0;
-               char fn [SIZ];
-               FILE *fd;
-               
-               snprintf(fn, SIZ, "/tmp/foolog_%s.%d", Ctx->ServiceName, Ctx->cs_pid);
-               
-               fd = fopen(fn, "a+");
-               if (fd == NULL) {
-                       syslog(LOG_ERR, "%s: %m", fn);
-                       exit(1);
-               }
-               fprintf(fd, "Sending: BufSize: %d BufContent: [", nbytes);
-               rv = fwrite(buf, nbytes, 1, fd);
-               fprintf(fd, "]\n");
-               fclose(fd);
-       }
-#endif
-//     flush_client_inbuf();
        if (Ctx->redirect_buffer != NULL) {
                StrBufAppendBufPlain(Ctx->redirect_buffer,
                                     buf, nbytes, 0);
@@ -479,64 +452,14 @@ int client_read_blob(StrBuf *Target, int bytes, int timeout)
 
 #ifdef HAVE_OPENSSL
        if (CCC->redirect_ssl) {
-#ifdef BIGBAD_IODBG
-               int rv = 0;
-               char fn [SIZ];
-               FILE *fd;
-               
-               snprintf(fn, SIZ, "/tmp/foolog_%s.%d", CCC->ServiceName, CCC->cs_pid);
-                       
-               fd = fopen(fn, "a+");
-               if (fd == NULL) {
-                       syslog(LOG_ERR, "%s: %m", fn);
-                       exit(1);
-               }
-               fprintf(fd, "Reading BLOB: BufSize: %d ", bytes);
-               rv = fwrite(ChrPtr(Target), StrLength(Target), 1, fd);
-               fprintf(fd, "]\n");
-               
-                       
-               fclose(fd);
-#endif
                retval = client_read_sslblob(Target, bytes, timeout);
                if (retval < 0) {
                        syslog(LOG_ERR, "sysdep: client_read_blob() failed");
                }
-#ifdef BIGBAD_IODBG
-               snprintf(fn, SIZ, "/tmp/foolog_%s.%d", CCC->ServiceName, CCC->cs_pid);
-               
-               fd = fopen(fn, "a+");
-               if (fd == NULL) {
-                       syslog(LOG_ERR, "%s: %m", fn);
-                       exit(1);
-               }
-               fprintf(fd, "Read: %d BufContent: [", StrLength(Target));
-               rv = fwrite(ChrPtr(Target), StrLength(Target), 1, fd);
-               fprintf(fd, "]\n");
-               fclose(fd);
-#endif
        }
        else 
 #endif
        {
-#ifdef BIGBAD_IODBG
-               int rv = 0;
-               char fn [SIZ];
-               FILE *fd;
-               
-               snprintf(fn, SIZ, "/tmp/foolog_%s.%d", CCC->ServiceName, CCC->cs_pid);
-                       
-               fd = fopen(fn, "a+");
-               if (fd == NULL) {
-                       syslog(LOG_ERR, "%s: %m", fn);
-                       exit(1);
-               }
-               fprintf(fd, "Reading BLOB: BufSize: %d ",
-                       bytes);
-               rv = fwrite(ChrPtr(Target), StrLength(Target), 1, fd);
-               fprintf(fd, "]\n");
-               fclose(fd);
-#endif
                retval = StrBufReadBLOBBuffered(Target, 
                                                CCC->RecvBuf.Buf,
                                                &CCC->RecvBuf.ReadWritePointer,
@@ -551,20 +474,6 @@ int client_read_blob(StrBuf *Target, int bytes, int timeout)
                        client_close();
                        return retval;
                }
-#ifdef BIGBAD_IODBG
-               snprintf(fn, SIZ, "/tmp/foolog_%s.%d", CCC->ServiceName, CCC->cs_pid);
-               
-               fd = fopen(fn, "a+");
-               if (fd == NULL) {
-                       syslog(LOG_ERR, "%s: %m", fn);
-                       exit(1);
-               }
-               fprintf(fd, "Read: %d BufContent: [",
-                       StrLength(Target));
-               rv = fwrite(ChrPtr(Target), StrLength(Target), 1, fd);
-               fprintf(fd, "]\n");
-               fclose(fd);
-#endif
        }
        return retval;
 }
@@ -604,26 +513,6 @@ int client_read_random_blob(StrBuf *Target, int timeout)
                        StrBufAppendBufPlain(Target, pch, len, 0);
                        FlushStrBuf(CCC->RecvBuf.Buf);
                        CCC->RecvBuf.ReadWritePointer = NULL;
-#ifdef BIGBAD_IODBG
-                       {
-                               int rv = 0;
-                               char fn [SIZ];
-                               FILE *fd;
-                       
-                               snprintf(fn, SIZ, "/tmp/foolog_%s.%d", CCC->ServiceName, CCC->cs_pid);
-                       
-                               fd = fopen(fn, "a+");
-                               if (fd == NULL) {
-                                       syslog(LOG_ERR, "%s: %m", fn);
-                                       exit(1);
-                               }
-                               fprintf(fd, "Read: BufSize: %d BufContent: [",
-                                       StrLength(Target));
-                               rv = fwrite(ChrPtr(Target), StrLength(Target), 1, fd);
-                               fprintf(fd, "]\n");
-                               fclose(fd);
-                       }
-#endif
                        return StrLength(Target);
                }
                return rc;
@@ -685,92 +574,12 @@ int CtdlClientGetLine(StrBuf *Target)
        FlushStrBuf(Target);
 #ifdef HAVE_OPENSSL
        if (CCC->redirect_ssl) {
-#ifdef BIGBAD_IODBG
-               char fn [SIZ];
-               FILE *fd;
-               int len = 0;
-               int rlen = 0;
-               int  nlen = 0;
-               int nrlen = 0;
-               const char *pch;
-
-               snprintf(fn, SIZ, "/tmp/foolog_%s.%d", CCC->ServiceName, CCC->cs_pid);
-
-               fd = fopen(fn, "a+");
-               if (fd == NULL) {
-                       syslog(LOG_ERR, "%s: %m", fn);
-                       exit(1);
-               }
-               pch = ChrPtr(CCC->RecvBuf.Buf);
-               len = StrLength(CCC->RecvBuf.Buf);
-               if (CCC->RecvBuf.ReadWritePointer != NULL)
-                       rlen = CCC->RecvBuf.ReadWritePointer - pch;
-               else
-                       rlen = 0;
-
-/*             fprintf(fd, "\n\n\nBufSize: %d BufPos: %d \nBufContent: [%s]\n\n_____________________\n",
-                       len, rlen, pch);
-*/
-               fprintf(fd, "\n\n\nSSL1: BufSize: %d BufPos: %d \n_____________________\n",
-                       len, rlen);
-#endif
-               rc = client_readline_sslbuffer(Target,
-                                              CCC->RecvBuf.Buf,
-                                              &CCC->RecvBuf.ReadWritePointer,
-                                              1);
-#ifdef BIGBAD_IODBG
-                pch = ChrPtr(CCC->RecvBuf.Buf);
-                nlen = StrLength(CCC->RecvBuf.Buf);
-                if (CCC->RecvBuf.ReadWritePointer != NULL)
-                        nrlen = CCC->RecvBuf.ReadWritePointer - pch;
-                else
-                        nrlen = 0;
-/*
-                fprintf(fd, "\n\n\nBufSize: was: %d is: %d BufPos: was: %d is: %d \nBufContent: [%s]\n\n_____________________\n",
-                        len, nlen, rlen, nrlen, pch);
-*/
-                fprintf(fd, "\n\n\nSSL2: BufSize: was: %d is: %d BufPos: was: %d is: %d \n",
-                        len, nlen, rlen, nrlen);
-
-                fprintf(fd, "SSL3: Read: BufSize: %d BufContent: [%s]\n\n*************\n",
-                        StrLength(Target), ChrPtr(Target));
-                fclose(fd);
-
-               if (rc < 0) {
-                       syslog(LOG_ERR, "sysdep: CtdlClientGetLine() failed");
-               }
-#endif
+               rc = client_readline_sslbuffer(Target, CCC->RecvBuf.Buf, &CCC->RecvBuf.ReadWritePointer, 1);
                return rc;
        }
        else 
 #endif
        {
-#ifdef BIGBAD_IODBG
-               char fn [SIZ];
-               FILE *fd;
-               int len, rlen, nlen, nrlen;
-               const char *pch;
-
-               snprintf(fn, SIZ, "/tmp/foolog_%s.%d", CCC->ServiceName, CCC->cs_pid);
-
-               fd = fopen(fn, "a+");
-               if (fd == NULL) {
-                       syslog(LOG_ERR, "%s: %m", fn);
-                       exit(1);
-               }
-               pch = ChrPtr(CCC->RecvBuf.Buf);
-               len = StrLength(CCC->RecvBuf.Buf);
-               if (CCC->RecvBuf.ReadWritePointer != NULL)
-                       rlen = CCC->RecvBuf.ReadWritePointer - pch;
-               else
-                       rlen = 0;
-
-/*             fprintf(fd, "\n\n\nBufSize: %d BufPos: %d \nBufContent: [%s]\n\n_____________________\n",
-                       len, rlen, pch);
-*/
-               fprintf(fd, "\n\n\nBufSize: %d BufPos: %d \n_____________________\n",
-                       len, rlen);
-#endif
                rc = StrBufTCP_read_buffered_line_fast(Target, 
                                                       CCC->RecvBuf.Buf,
                                                       &CCC->RecvBuf.ReadWritePointer,
@@ -779,29 +588,6 @@ int CtdlClientGetLine(StrBuf *Target)
                                                       1,
                                                       &Error
                );
-
-#ifdef BIGBAD_IODBG
-                pch = ChrPtr(CCC->RecvBuf.Buf);
-                nlen = StrLength(CCC->RecvBuf.Buf);
-                if (CCC->RecvBuf.ReadWritePointer != NULL)
-                        nrlen = CCC->RecvBuf.ReadWritePointer - pch;
-                else
-                        nrlen = 0;
-/*
-                fprintf(fd, "\n\n\nBufSize: was: %d is: %d BufPos: was: %d is: %d \nBufContent: [%s]\n\n_____________________\n",
-                        len, nlen, rlen, nrlen, pch);
-*/
-                fprintf(fd, "\n\n\nBufSize: was: %d is: %d BufPos: was: %d is: %d \n",
-                        len, nlen, rlen, nrlen);
-
-                fprintf(fd, "Read: BufSize: %d BufContent: [%s]\n\n*************\n",
-                        StrLength(Target), ChrPtr(Target));
-                fclose(fd);
-
-               if ((rc < 0) && (Error != NULL)) {
-                       syslog(LOG_ERR, "sysdep: CtdlClientGetLine() failed: %s", Error);
-               }
-#endif
                return rc;
        }
 }
@@ -953,17 +739,16 @@ void start_daemon(int unused) {
        pid_t child = 0;
        FILE *fp;
        int do_restart = 0;
-
        current_child = 0;
 
+       //if (chdir(ctdl_run_dir) != 0) {
+               //syslog(LOG_ERR, "%s: %m", ctdl_run_dir);
+       //}
+
        /* Close stdin/stdout/stderr and replace them with /dev/null.
         * We don't just call close() because we don't want these fd's
         * to be reused for other files.
         */
-       if (chdir(ctdl_run_dir) != 0) {
-               syslog(LOG_ERR, "%s: %m", ctdl_run_dir);
-       }
-
        child = fork();
        if (child != 0) {
                exit(0);