* move the instant death to USR2 as dave questioned
[citadel.git] / citadel / sysdep.c
index f183b4ac9b65583397d8fa9e207a05a392964d6e..cb5b3a650458d22013992b9e1ee374a9711cdf41 100644 (file)
@@ -169,6 +169,10 @@ static RETSIGTYPE signal_cleanup(int signum) {
        }
 }
 
+static RETSIGTYPE signal_exit(int signum) {
+       exit(1);
+}
+
 
 
 /*
@@ -222,6 +226,7 @@ void init_sysdep(void) {
        signal(SIGQUIT, signal_cleanup);
        signal(SIGHUP, signal_cleanup);
        signal(SIGTERM, signal_cleanup);
+       signal(SIGUSR2, signal_exit);
        // signal(SIGSEGV, signal_cleanup);     commented out because
        // signal(SIGILL, signal_cleanup);      we want core dumps
        // signal(SIGBUS, signal_cleanup);
@@ -466,14 +471,8 @@ int client_write(const char *buf, int nbytes)
 //     flush_client_inbuf();
        Ctx = CC;
        if (Ctx->redirect_buffer != NULL) {
-               if ((Ctx->redirect_len + nbytes + 2) >= Ctx->redirect_alloc) {
-                       Ctx->redirect_alloc = (Ctx->redirect_alloc * 2) + nbytes;
-                       Ctx->redirect_buffer = realloc(Ctx->redirect_buffer,
-                                               Ctx->redirect_alloc);
-               }
-               memcpy(&Ctx->redirect_buffer[Ctx->redirect_len], buf, nbytes);
-               Ctx->redirect_len += nbytes;
-               Ctx->redirect_buffer[Ctx->redirect_len] = 0;
+               StrBufAppendBufPlain(Ctx->redirect_buffer,
+                                    buf, nbytes, 0);
                return 0;
        }
 
@@ -668,9 +667,56 @@ int CtdlClientGetLine(StrBuf *Target)
        FlushStrBuf(Target);
 #ifdef HAVE_OPENSSL
        if (CCC->redirect_ssl) {
-               return client_readline_sslbuffer(Target,
-                                                CCC->ReadBuf,
-                                                1);
+#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+");
+               pch = ChrPtr(CCC->ReadBuf);
+               len = StrLength(CCC->ReadBuf);
+               if (CCC->Pos != NULL)
+                       rlen = CC->Pos - 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 = client_readline_sslbuffer(Target,
+                                              CCC->ReadBuf,
+                                              1);
+#ifdef BIGBAD_IODBG
+                pch = ChrPtr(CCC->ReadBuf);
+                nlen = StrLength(CCC->ReadBuf);
+                if (CCC->Pos != NULL)
+                        nrlen = CC->Pos - 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))
+                       CtdlLogPrintf(CTDL_CRIT, 
+                                     "%s failed: %s\n",
+                                     __FUNCTION__,
+                                     Error);
+#endif
+               return rc;
        }
        else 
 #endif