]> code.citadel.org Git - citadel.git/blobdiff - citadel/sysdep.c
* client_read_blob(): behave the same way in non-ssl as ssl, so we return <0 in case...
[citadel.git] / citadel / sysdep.c
index 135e1c1ee049c01ab4eed7dd0284b6cadf3444f1..41bc7d0e79113d62149535ba6e8fe8a0d20becc0 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);
@@ -568,10 +573,15 @@ int client_read_blob(StrBuf *Target, int bytes, int timeout)
 #ifdef HAVE_OPENSSL
        if (CCC->redirect_ssl) {
                retval = client_read_sslblob(Target, bytes, timeout);
+               if (retval < 0) {
+                       CtdlLogPrintf(CTDL_CRIT, 
+                                     "%s failed\n",
+                                     __FUNCTION__);
+               }
        }
        else 
 #endif
-
+       {
                retval = StrBufReadBLOBBuffered(Target, 
                                                CCC->ReadBuf,
                                                &CCC->Pos,
@@ -580,33 +590,35 @@ int client_read_blob(StrBuf *Target, int bytes, int timeout)
                                                bytes,
                                                O_TERM,
                                                &Error);
-       if (retval < 0) {
-               CtdlLogPrintf(CTDL_CRIT, 
-                             "%s failed: %s\n",
-                             __FUNCTION__,
-                             Error);
-       }
-       else
-       {
+               if (retval < 0) {
+                       CtdlLogPrintf(CTDL_CRIT, 
+                                     "%s failed: %s\n",
+                                     __FUNCTION__, 
+                                     Error);
+                       return retval;
+               }
+               else
+               {
 #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+");
-                fprintf(fd, "Read: BufSize: %d BufContent: [",
-                        StrLength(Target));
-               rv = fwrite(ChrPtr(Target), StrLength(Target), 1, fd);
-                fprintf(fd, "]\n");
-               
+                       int rv = 0;
+                       char fn [SIZ];
+                       FILE *fd;
                        
-                fclose(fd);
+                       snprintf(fn, SIZ, "/tmp/foolog_%s.%d", CCC->ServiceName, CCC->cs_pid);
+                       
+                       fd = fopen(fn, "a+");
+                       fprintf(fd, "Read: BufSize: %d BufContent: [",
+                               StrLength(Target));
+                       rv = fwrite(ChrPtr(Target), StrLength(Target), 1, fd);
+                       fprintf(fd, "]\n");
+                       
+                       
+                       fclose(fd);
 #endif
 
+               }
        }
-       return retval == bytes;
+       return retval;
 }
 
 int client_read_to(char *buf, int bytes, int timeout)
@@ -662,9 +674,59 @@ 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 = 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+");
+               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\nSSL1: BufSize: %d BufPos: %d \n_____________________\n",
+                       len, rlen);
+#endif
+               rc = client_readline_sslbuffer(Target,
+                                              CCC->ReadBuf,
+                                              &CCC->Pos,
+                                              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\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)
+                       CtdlLogPrintf(CTDL_CRIT, 
+                                     "%s failed\n",
+                                     __FUNCTION__);
+#endif
+               return rc;
        }
        else 
 #endif