* fixed some of the rfc822 parser
authorArt Cancro <ajc@citadel.org>
Fri, 24 Dec 1999 21:34:35 +0000 (21:34 +0000)
committerArt Cancro <ajc@citadel.org>
Fri, 24 Dec 1999 21:34:35 +0000 (21:34 +0000)
citadel/internet_addressing.c
citadel/serv_smtp.c

index 1086361b25255415178aeeb1ff81c27c28354b91..c1942956034645bba9cf75f19b94b22753bc9e78 100644 (file)
@@ -304,13 +304,14 @@ int convert_field(struct CtdlMessage *msg, int beg, int end) {
 
        if (colonpos < 0) return(0);    /* no colon? not a valid header line */
 
-       value = mallok((end - beg) + 2);
-       safestrncpy(value, &rfc822[beg], (end-beg)+1);
-       key = value;
+       key = mallok((end - beg) + 2);
+       safestrncpy(key, &rfc822[beg], (end-beg)+1);
        key[colonpos - beg] = 0;
        value = &key[(colonpos - beg) + 1];
        unfold_rfc822_field(value);
 
+       lprintf(9, "Key=<%s> Value=<%s>\n", key, value);
+
        /* Here's the big rfc822-to-citadel loop. */
 
        if (!strcasecmp(key, "Date")) {
@@ -325,15 +326,19 @@ int convert_field(struct CtdlMessage *msg, int beg, int end) {
                node = mallok(strlen(value));
                name = mallok(strlen(value));
                process_rfc822_addr(value, user, node, name);
+               lprintf(9, "Converted to <%s@%s> (%s)\n", user, node, name);
                if (msg->cm_fields['A'] == NULL)
-                       msg->cm_fields['A'] = strdoop(user);
+                       msg->cm_fields['A'] = user;
+               else
+                       phree(user);
                if (msg->cm_fields['N'] == NULL)
-                       msg->cm_fields['N'] = strdoop(node);
+                       msg->cm_fields['N'] = node;
+               else
+                       phree(node);
                if (msg->cm_fields['H'] == NULL)
-                       msg->cm_fields['H'] = strdoop(name);
-               phree(user);
-               phree(node);
-               phree(name);
+                       msg->cm_fields['H'] = name;
+               else
+                       phree(name);
                processed = 1;
        }
 
@@ -356,7 +361,6 @@ struct CtdlMessage *convert_internet_message(char *rfc822) {
 
        struct CtdlMessage *msg;
        int pos, beg, end;
-       int msglen;
        int done;
        char buf[256];
        int converted;
@@ -370,7 +374,7 @@ struct CtdlMessage *convert_internet_message(char *rfc822) {
        msg->cm_format_type = 4;                /* always MIME */
        msg->cm_fields['M'] = rfc822;
 
-       msglen = strlen(rfc822);
+       lprintf(9, "Unconverted RFC822 message length = %d\n", strlen(rfc822));
        pos = 0;
        done = 0;
 
@@ -414,6 +418,8 @@ struct CtdlMessage *convert_internet_message(char *rfc822) {
                msg->cm_fields['T'] = strdoop(buf);
        }
 
+       lprintf(9, "RFC822 length remaining after conversion = %d\n",
+               strlen(rfc822));
        return msg;
 }
 
index 5a206e29d0dc0d277ffeb65f6c303e2d0bc41fa0..c6967aabc1fef46374c1cc83f3181597a7050e41 100644 (file)
@@ -373,6 +373,7 @@ void smtp_rcpt(char *argbuf) {
 void smtp_data(void) {
        char *body;
        struct CtdlMessage *msg;
+       FILE *fp;
 
 /*
        if (strlen(SMTP->from) == 0) {
@@ -394,10 +395,11 @@ void smtp_data(void) {
                return;
        }
 
-       fprintf(stderr, "Converting message...\n");
+       lprintf(9, "Converting message...\n");
        msg = convert_internet_message(body);
 
        /*   FIX do something with it!  */
+       lprintf(9, "Saving message...\n");
        CtdlSaveMsg(msg, "", BASEROOM, MES_LOCAL, 1);
 
        CtdlFreeMessage(msg);