]> code.citadel.org Git - citadel.git/blobdiff - citadel/msgbase.c
Completed the code for the 'reject' action
[citadel.git] / citadel / msgbase.c
index 0bc88bf08f3f08243e3ca6af3d01eec54b835e32..284480f80c46af689ba791a628fff30b999f2562 100644 (file)
@@ -260,7 +260,7 @@ void CM_SetAsField(struct CtdlMessage *Msg, eMsgField which, char **buf, long le
        Msg->cm_fields[which] = *buf;
        *buf = NULL;
        if (length < 0) {                       // You can set the length to -1 to have CM_SetField measure it for you
-               Msg->cm_lengths[which] = strlen(buf);
+               Msg->cm_lengths[which] = strlen(Msg->cm_fields[which]);
        }
        else {
                Msg->cm_lengths[which] = length;
@@ -2036,11 +2036,11 @@ int CtdlOutputPreLoadedMsg(
         * using functions that are bounds-checked, and therefore we can
         * make them substantially smaller than SIZ.
         */
-       char suser[100];
-       char luser[100];
-       char fuser[100];
-       char snode[100];
-       char mid[100];
+       char suser[1024];
+       char luser[1024];
+       char fuser[1024];
+       char snode[1024];
+       char mid[1024];
 
        syslog(LOG_DEBUG, "msgbase: CtdlOutputPreLoadedMsg(TheMessage=%s, %d, %d, %d, %d",
                   ((TheMessage == NULL) ? "NULL" : "not null"),
@@ -2143,6 +2143,7 @@ int CtdlOutputPreLoadedMsg(
        strcpy(suser, "");
        strcpy(luser, "");
        strcpy(fuser, "");
+       strcpy(snode, "");
        if (mode == MT_RFC822) 
                OutputRFC822MsgHeaders(
                        TheMessage,
@@ -2779,7 +2780,7 @@ long CtdlSubmitMsg(struct CtdlMessage *msg,       /* message to save */
         * If this message has no O (room) field, generate one.
         */
        if (CM_IsEmpty(msg, eOriginalRoom) && !IsEmptyStr(CC->room.QRname)) {
-               CM_SetField(msg, eOriginalRoom, CC->room.QRname, strlen(CC->room.QRname));
+               CM_SetField(msg, eOriginalRoom, CC->room.QRname, -1);
        }
 
        /* Perform "before save" hooks (aborting if any return nonzero) */
@@ -2872,7 +2873,7 @@ long CtdlSubmitMsg(struct CtdlMessage *msg,       /* message to save */
                if (CC->logged_in) {
                        strcpy(bounce_to, CC->user.fullname);
                }
-               else {
+               else if (!IsEmptyStr(msg->cm_fields[eAuthor])){
                        strcpy(bounce_to, msg->cm_fields[eAuthor]);
                }
                recps->bounce_to = bounce_to;
@@ -2880,20 +2881,17 @@ long CtdlSubmitMsg(struct CtdlMessage *msg,     /* message to save */
                
        CM_SetFieldLONG(msg, eVltMsgNum, newmsgid);
 
-
        /* If this is private, local mail, make a copy in the
         * recipient's mailbox and bump the reference count.
         */
-       if ((recps != NULL) && (recps->num_local > 0))
-       {
+       if ((recps != NULL) && (recps->num_local > 0)) {
                char *pch;
                int ntokens;
 
                pch = recps->recp_local;
                recps->recp_local = recipient;
                ntokens = num_tokens(pch, '|');
-               for (i=0; i<ntokens; ++i)
-               {
+               for (i=0; i<ntokens; ++i) {
                        extract_token(recipient, pch, i, '|', sizeof recipient);
                        syslog(LOG_DEBUG, "msgbase: delivering private local mail to <%s>", recipient);
                        if (CtdlGetUser(&userbuf, recipient) == 0) {
@@ -2929,10 +2927,8 @@ long CtdlSubmitMsg(struct CtdlMessage *msg,      /* message to save */
        }
 
        if (collected_addresses != NULL) {
-               aptr = (struct addresses_to_be_filed *)
-                       malloc(sizeof(struct addresses_to_be_filed));
-               CtdlMailboxName(actual_rm, sizeof actual_rm,
-                               &CC->user, USERCONTACTSROOM);
+               aptr = (struct addresses_to_be_filed *) malloc(sizeof(struct addresses_to_be_filed));
+               CtdlMailboxName(actual_rm, sizeof actual_rm, &CC->user, USERCONTACTSROOM);
                aptr->roomname = strdup(actual_rm);
                aptr->collected_addresses = collected_addresses;
                begin_critical_section(S_ATBF);
@@ -3002,11 +2998,11 @@ long quickie_message(const char *from,
        msg->cm_format_type = format_type;
 
        if (!IsEmptyStr(from)) {
-               CM_SetField(msg, eAuthor, from, strlen(from));
+               CM_SetField(msg, eAuthor, from, -1);
        }
        else if (!IsEmptyStr(fromaddr)) {
                char *pAt;
-               CM_SetField(msg, eAuthor, fromaddr, strlen(fromaddr));
+               CM_SetField(msg, eAuthor, fromaddr, -1);
                pAt = strchr(msg->cm_fields[eAuthor], '@');
                if (pAt != NULL) {
                        CM_CutFieldAt(msg, eAuthor, pAt - msg->cm_fields[eAuthor]);
@@ -3016,17 +3012,17 @@ long quickie_message(const char *from,
                msg->cm_fields[eAuthor] = strdup("Citadel");
        }
 
-       if (!IsEmptyStr(fromaddr)) CM_SetField(msg, erFc822Addr, fromaddr, strlen(fromaddr));
-       if (!IsEmptyStr(room)) CM_SetField(msg, eOriginalRoom, room, strlen(room));
+       if (!IsEmptyStr(fromaddr)) CM_SetField(msg, erFc822Addr, fromaddr, -1);
+       if (!IsEmptyStr(room)) CM_SetField(msg, eOriginalRoom, room, -1);
        if (!IsEmptyStr(to)) {
-               CM_SetField(msg, eRecipient, to, strlen(to));
+               CM_SetField(msg, eRecipient, to, -1);
                recp = validate_recipients(to, NULL, 0);
        }
        if (!IsEmptyStr(subject)) {
-               CM_SetField(msg, eMsgSubject, subject, strlen(subject));
+               CM_SetField(msg, eMsgSubject, subject, -1);
        }
        if (!IsEmptyStr(text)) {
-               CM_SetField(msg, eMesageText, text, strlen(text));
+               CM_SetField(msg, eMesageText, text, -1);
        }
 
        long msgnum = CtdlSubmitMsg(msg, recp, room, 0);
@@ -3217,7 +3213,7 @@ struct CtdlMessage *CtdlMakeMessageLen(
                CM_SetField(msg, eMessagePath, my_email, myelen);
        }
        else if (!IsEmptyStr(author->fullname)) {
-               CM_SetField(msg, eMessagePath, author->fullname, strlen(author->fullname));
+               CM_SetField(msg, eMessagePath, author->fullname, -1);
        }
        convert_spaces_to_underscores(msg->cm_fields[eMessagePath]);
 
@@ -3236,10 +3232,10 @@ struct CtdlMessage *CtdlMakeMessageLen(
 
        if (!!IsEmptyStr(CC->room.QRname)) {
                if (CC->room.QRflags & QR_MAILBOX) {            /* room */
-                       CM_SetField(msg, eOriginalRoom, &CC->room.QRname[11], strlen(&CC->room.QRname[11]));
+                       CM_SetField(msg, eOriginalRoom, &CC->room.QRname[11], -1);
                }
                else {
-                       CM_SetField(msg, eOriginalRoom, CC->room.QRname, strlen(CC->room.QRname));
+                       CM_SetField(msg, eOriginalRoom, CC->room.QRname, -1);
                }
        }
 
@@ -3254,7 +3250,7 @@ struct CtdlMessage *CtdlMakeMessageLen(
                CM_SetField(msg, erFc822Addr, my_email, myelen);
        }
        else if ( (author == &CC->user) && (!IsEmptyStr(CC->cs_inet_email)) ) {
-               CM_SetField(msg, erFc822Addr, CC->cs_inet_email, strlen(CC->cs_inet_email));
+               CM_SetField(msg, erFc822Addr, CC->cs_inet_email, -1);
        }
 
        if (subject != NULL) {
@@ -3608,8 +3604,8 @@ void CtdlWriteObject(char *req_room,                      /* Room to stuff it in */
        msg->cm_magic = CTDLMESSAGE_MAGIC;
        msg->cm_anon_type = MES_NORMAL;
        msg->cm_format_type = 4;
-       CM_SetField(msg, eAuthor, CC->user.fullname, strlen(CC->user.fullname));
-       CM_SetField(msg, eOriginalRoom, req_room, strlen(req_room));
+       CM_SetField(msg, eAuthor, CC->user.fullname, -1);
+       CM_SetField(msg, eOriginalRoom, req_room, -1);
        msg->cm_flags = flags;
        
        CM_SetAsFieldSB(msg, eMesageText, &encoded_message);