]> code.citadel.org Git - citadel.git/blobdiff - citadel/citadel_ipc.c
Patches from Matt with slight mod from me to do without strlen. Also modified lprintf...
[citadel.git] / citadel / citadel_ipc.c
index af0fbb40eb2e62553318ec0a768562ccd2361f56..54d076e84a852e0a91c4254044fea32c08d4070d 100644 (file)
@@ -121,7 +121,7 @@ int CtdlIPCEcho(CtdlIPC *ipc, const char *arg, char *cret)
 int CtdlIPCQuit(CtdlIPC *ipc)
 {
        register int ret = 221;         /* Default to successful quit */
-       char aaa[128];
+       char aaa[SIZ]; 
 
        CtdlIPC_lock(ipc);
        if (ipc->sock > -1) {
@@ -149,7 +149,7 @@ int CtdlIPCQuit(CtdlIPC *ipc)
 int CtdlIPCLogout(CtdlIPC *ipc)
 {
        register int ret;
-       char aaa[128];
+       char aaa[SIZ];
 
        CtdlIPC_lock(ipc);
        CtdlIPC_putline(ipc, "LOUT");
@@ -838,7 +838,7 @@ int CtdlIPCSetRoomAide(CtdlIPC *ipc, const char *username, char *cret)
 
 
 /* ENT0 */
-int CtdlIPCPostMessage(CtdlIPC *ipc, int flag, const struct ctdlipcmessage *mr, char *cret)
+int CtdlIPCPostMessage(CtdlIPC *ipc, int flag, int *subject_required,  const struct ctdlipcmessage *mr, char *cret)
 {
        register int ret;
        char cmd[SIZ];
@@ -851,6 +851,14 @@ int CtdlIPCPostMessage(CtdlIPC *ipc, int flag, const struct ctdlipcmessage *mr,
                        mr->anonymous, mr->type, mr->subject, mr->author);
        ret = CtdlIPCGenericCommand(ipc, cmd, mr->text, strlen(mr->text), NULL,
                        NULL, cret);
+       if ((flag == 0) && (subject_required != NULL)) {
+               /* Is the server strongly recommending that the user enter a message subject? */
+               if ((cret[3] != '\0') && (cret[4] != '\0')) {
+                       *subject_required = extract_int(&cret[4], 1);
+               }
+
+               
+       }
        return ret;
 }
 
@@ -1834,6 +1842,7 @@ int CtdlIPCSetSystemConfig(CtdlIPC *ipc, const char *listing, char *cret)
 int CtdlIPCGetSystemConfigByType(CtdlIPC *ipc, const char *mimetype,
                char **listing, char *cret)
 {
+       register int ret;
        char *aaa;
        size_t bytes;
 
@@ -1845,8 +1854,10 @@ int CtdlIPCGetSystemConfigByType(CtdlIPC *ipc, const char *mimetype,
        aaa = malloc(strlen(mimetype) + 13);
        if (!aaa) return -1;
        sprintf(aaa, "CONF GETSYS|%s", mimetype);
-       return CtdlIPCGenericCommand(ipc, aaa, NULL, 0,
+       ret = CtdlIPCGenericCommand(ipc, aaa, NULL, 0,
                        listing, &bytes, cret);
+    free(aaa);
+    return ret;
 }
 
 
@@ -1854,6 +1865,7 @@ int CtdlIPCGetSystemConfigByType(CtdlIPC *ipc, const char *mimetype,
 int CtdlIPCSetSystemConfigByType(CtdlIPC *ipc, const char *mimetype,
               const char *listing, char *cret)
 {
+    register int ret;
        char *aaa;
 
        if (!cret) return -2;
@@ -1863,8 +1875,10 @@ int CtdlIPCSetSystemConfigByType(CtdlIPC *ipc, const char *mimetype,
        aaa = malloc(strlen(mimetype) + 13);
        if (!aaa) return -1;
        sprintf(aaa, "CONF PUTSYS|%s", mimetype);
-       return CtdlIPCGenericCommand(ipc, aaa, listing, strlen(listing),
+       ret = CtdlIPCGenericCommand(ipc, aaa, listing, strlen(listing),
                        NULL, NULL, cret);
+    free(aaa);
+    return ret;
 }
 
 
@@ -2016,6 +2030,7 @@ static void endtls(SSL *ssl)
 /* QDIR */
 int CtdlIPCDirectoryLookup(CtdlIPC *ipc, const char *address, char *cret)
 {
+    register int ret;
        char *aaa;
 
        if (!address) return -2;
@@ -2025,7 +2040,9 @@ int CtdlIPCDirectoryLookup(CtdlIPC *ipc, const char *address, char *cret)
        if (!aaa) return -1;
 
        sprintf(aaa, "QDIR %s", address);
-       return CtdlIPCGenericCommand(ipc, aaa, NULL, 0, NULL, NULL, cret);
+       ret = CtdlIPCGenericCommand(ipc, aaa, NULL, 0, NULL, NULL, cret);
+    free(aaa);
+    return ret;
 }
 
 
@@ -2318,6 +2335,7 @@ int CtdlIPCWriteUpload(CtdlIPC *ipc, const char *path,
        char aaa[SIZ];
        char buf[4096];
        FILE *fd;
+       int ferr;
 
        if (!cret) return -1;
        if (!path) return -1;
@@ -2362,7 +2380,9 @@ int CtdlIPCWriteUpload(CtdlIPC *ipc, const char *path,
        }
        if (progress_gauge_callback)
                progress_gauge_callback(ipc, 1, 1);
-       return (!ferror(fd) ? ret : -2);
+       ferr = ferror(fd);
+       fclose(fd);
+       return (!ferr ? ret : -2);
 }
 
 
@@ -2853,8 +2873,8 @@ static void CtdlIPC_getline(CtdlIPC* ipc, char *buf)
                        serv_read(ipc, &buf[i], 1);
 
        /* Strip the trailing newline (and carriage return, if present) */
-       if (buf[i] == 10) buf[i--] = 0;
-       if (buf[i] == 13) buf[i--] = 0;
+       if (i>=0 && buf[i] == 10) buf[i--] = 0;
+       if (i>=0 && buf[i] == 13) buf[i--] = 0;
 }
 
 void CtdlIPC_chat_recv(CtdlIPC* ipc, char* buf)