]> code.citadel.org Git - citadel.git/blobdiff - citadel/msgbase.c
* IMAP date strings. More stupidity.
[citadel.git] / citadel / msgbase.c
index 5be0bcf3bbacc67bd94724f678b00adc1e13e568..2ef26071149cd0a162bebd24d2f2440b9f9c591e 100644 (file)
@@ -1,4 +1,9 @@
-/* $Id$ */
+/* 
+ * $Id$
+ *
+ * Implements the message store.
+ *
+ */
 
 #include "sysdep.h"
 #include <stdlib.h>
@@ -80,17 +85,18 @@ void remove_any_whitespace_to_the_left_or_right_of_at_symbol(char *name)
 {
        int i;
 
-       for (i = 0; i < strlen(name); ++i)
+stov:  for (i = 0; i < strlen(name); ++i) {
                if (name[i] == '@') {
                        if (i > 0)
                                if (isspace(name[i - 1])) {
                                        strcpy(&name[i - 1], &name[i]);
-                                       i = 0;
+                                       goto stov; /* start over */
                                }
                        while (isspace(name[i + 1])) {
                                strcpy(&name[i + 1], &name[i + 2]);
                        }
                }
+       }
 }
 
 
@@ -104,16 +110,13 @@ int alias(char *name)
        int a, b;
        char aaa[300], bbb[300];
 
-       TRACE;
        remove_any_whitespace_to_the_left_or_right_of_at_symbol(name);
-       TRACE;
 
        fp = fopen("network/mail.aliases", "r");
        if (fp == NULL)
                fp = fopen("/dev/null", "r");
        if (fp == NULL)
                return (MES_ERROR);
-       TRACE;
        strcpy(aaa, "");
        strcpy(bbb, "");
        while (fgets(aaa, sizeof aaa, fp) != NULL) {
@@ -130,7 +133,6 @@ int alias(char *name)
                if (!strcasecmp(name, aaa))
                        strcpy(name, bbb);
        }
-       TRACE;
        fclose(fp);
        lprintf(7, "Mail is being forwarded to %s\n", name);
 
@@ -145,18 +147,15 @@ int alias(char *name)
        }
 
        /* determine local or remote type, see citadel.h */
-       TRACE;
        for (a = 0; a < strlen(name); ++a)
                if (name[a] == '!')
                        return (MES_INTERNET);
-       TRACE;
        for (a = 0; a < strlen(name); ++a)
                if (name[a] == '@')
                        for (b = a; b < strlen(name); ++b)
                                if (name[b] == '.')
                                        return (MES_INTERNET);
        b = 0;
-       TRACE;
        for (a = 0; a < strlen(name); ++a)
                if (name[a] == '@')
                        ++b;
@@ -176,7 +175,6 @@ int alias(char *name)
 GETSN:         do {
                        a = getstring(fp, aaa);
                } while ((a >= 0) && (strcasecmp(aaa, bbb)));
-               TRACE;
                a = getstring(fp, aaa);
                if (!strncmp(aaa, "use ", 4)) {
                        strcpy(bbb, &aaa[4]);
@@ -184,7 +182,6 @@ GETSN:              do {
                        goto GETSN;
                }
                fclose(fp);
-               TRACE;
                if (!strncmp(aaa, "uum", 3)) {
                        strcpy(bbb, name);
                        for (a = 0; a < strlen(bbb); ++a) {
@@ -218,7 +215,6 @@ GETSN:              do {
                }
                return (MES_ERROR);
        }
-       TRACE;
        lprintf(9, "returning MES_LOCAL\n");
        return (MES_LOCAL);
 }
@@ -235,7 +231,7 @@ void get_mm(void)
 
 
 
-void simple_listing(long msgnum)
+void simple_listing(long msgnum, void *userdata)
 {
        cprintf("%ld\n", msgnum);
 }
@@ -281,7 +277,8 @@ int CtdlForEachMessage(int mode, long ref,
                        int moderation_level,
                        char *content_type,
                        struct CtdlMessage *compare,
-                       void (*CallBack) (long msgnum))
+                       void (*CallBack) (long, void *),
+                       void *userdata)
 {
 
        int a;
@@ -372,7 +369,7 @@ int CtdlForEachMessage(int mode, long ref,
                                || ((mode == MSGS_EQ) && (thismsg == ref))
                            )
                            ) {
-                               if (CallBack) CallBack(thismsg);
+                               if (CallBack) CallBack(thismsg, userdata);
                                ++num_processed;
                        }
                }
@@ -443,7 +440,7 @@ void cmd_msgs(char *cmdbuf)
 
        CtdlForEachMessage(mode, cm_ref,
                CC->usersupp.moderation_filter,
-               NULL, template, simple_listing);
+               NULL, template, simple_listing, NULL);
        if (template != NULL) CtdlFreeMessage(template);
        cprintf("000\n");
 }
@@ -970,8 +967,8 @@ int CtdlOutputMsg(long msg_num,             /* message number (local) to fetch */
                                else if (i == 'R')
                                        cprintf("To: %s%s", mptr, nl);
                                else if (i == 'T') {
-                                       generate_rfc822_datestamp(datestamp,
-                                                               atol(mptr) );
+                                       datestring(datestamp, atol(mptr),
+                                               DATESTRING_RFC822 );
                                        cprintf("Date: %s%s", datestamp, nl);
                                }
                        }
@@ -1195,7 +1192,7 @@ void cmd_opna(char *cmdbuf)
 {
        long msgid;
 
-       CtdlAllocUserData(SYM_DESIRED_SECTION, 64);
+       CtdlAllocUserData(SYM_DESIRED_SECTION, 256);
 
        msgid = extract_long(cmdbuf, 0);
        extract(desired_section, cmdbuf, 1);
@@ -1437,7 +1434,7 @@ void serialize_message(struct ser_ret *ret,               /* return values */
 /*
  * Back end for the ReplicationChecks() function
  */
-void check_repl(long msgnum) {
+void check_repl(long msgnum, void *userdata) {
        struct CtdlMessage *msg;
        time_t timestamp = (-1L);
 
@@ -1487,7 +1484,8 @@ int ReplicationChecks(struct CtdlMessage *msg) {
        memset(template, 0, sizeof(struct CtdlMessage));
        template->cm_fields['E'] = strdoop(msg->cm_fields['E']);
 
-       CtdlForEachMessage(MSGS_ALL, 0L, (-127), NULL, template, check_repl);
+       CtdlForEachMessage(MSGS_ALL, 0L, (-127), NULL, template,
+               check_repl, NULL);
 
        /* If a newer message exists with the same Extended ID, abort
         * this save.
@@ -2540,7 +2538,7 @@ void CtdlWriteObject(char *req_room,              /* Room to stuff it in */
 
 
 
-void CtdlGetSysConfigBackend(long msgnum) {
+void CtdlGetSysConfigBackend(long msgnum, void *userdata) {
        config_msgnum = msgnum;
 }
 
@@ -2563,7 +2561,7 @@ char *CtdlGetSysConfig(char *sysconfname) {
        begin_critical_section(S_CONFIG);
        config_msgnum = (-1L);
        CtdlForEachMessage(MSGS_LAST, 1, (-127), sysconfname, NULL,
-               CtdlGetSysConfigBackend);
+               CtdlGetSysConfigBackend, NULL);
        msgnum = config_msgnum;
        end_critical_section(S_CONFIG);