Solution to bug no. 258 (forging of from headers with IMAP move)
authorDave West <davew@uncensored.citadel.org>
Sun, 28 Oct 2007 11:48:04 +0000 (11:48 +0000)
committerDave West <davew@uncensored.citadel.org>
Sun, 28 Oct 2007 11:48:04 +0000 (11:48 +0000)
I have implimented a configuration option in the site wide
configuration.
It is now possible to have Citadel keep the original from headers for
the message.

citadel/control.c
citadel/include/dtds/config-defs.h
citadel/modules/imap/imap_misc.c
webcit/siteconfig.c

index dbe84067057cc98f8961932dadbc24236251c110..fe625d0512cf2570cdbb1ef4e0bb446fc9f75411 100644 (file)
@@ -329,6 +329,7 @@ void cmd_conf(char *argbuf)
                cprintf("%s\n", config.c_master_user);
                cprintf("%s\n", config.c_master_pass);
                cprintf("%s\n", config.c_pager_program);
+               cprintf("%d\n", config.c_imap_keep_from);
                cprintf("000\n");
        }
 
@@ -567,6 +568,9 @@ void cmd_conf(char *argbuf)
                                        buf,
                                        sizeof config.c_pager_program);
                                break;
+                       case 61:
+                               config.c_imap_keep_from = atoi(buf);
+                               break;
                        }
                        ++a;
                }
index d804fca20c59910495b92ef82abd2443af744dfb..cfdea8cc9583174238127ccedb426484b2c2078a 100644 (file)
@@ -83,3 +83,4 @@ CFG_VALUE(CHAR(c_rbl_at_greeting),            " Check RBL's at connect instead of after RC
 CFG_VALUE(STRING_BUF(c_master_user, 32),       " Master user name ");
 CFG_VALUE(STRING_BUF(c_master_pass, 32),       " Master user password ");
 CFG_VALUE(STRING_BUF(c_pager_program, 256),    " External pager program (blank to disable)");
+CFG_VALUE(CHAR(c_imap_keep_from),              " IMAP keep original from header in msgs");
index 671c6ce5fdc2f1c1847b3b2b78bbec4054cea25b..8525216b8d5b259c21ce2f7ba73085e05e2d389d 100644 (file)
@@ -454,7 +454,7 @@ void imap_append(int num_parms, char *parms[]) {
         * private mailboxes.
         */
        if (CC->logged_in) {
-          if ( (CC->room.QRflags & QR_MAILBOX) == 0) {
+          if ( ((CC->room.QRflags & QR_MAILBOX) == 0) && (config.c_imap_keep_from == 0)) {
                if (msg->cm_fields['A'] != NULL) free(msg->cm_fields['A']);
                if (msg->cm_fields['N'] != NULL) free(msg->cm_fields['N']);
                if (msg->cm_fields['H'] != NULL) free(msg->cm_fields['H']);
index 380e06165cec2de90d90d02d5ca99d7e8d3dfd27..da8db435fb71258b4fbe4804f62add936b0b3973 100644 (file)
@@ -591,6 +591,14 @@ void display_siteconfig(void)
                        sprintf(&funambol[strlen(funambol)], "<input type=\"text\" NAME=\"c_pager_program\" MAXLENGTH=\"255\" VALUE=\"%s\">", buf);
                        sprintf(&funambol[strlen(funambol)], "</TD></TR>\n");
                        break;
+               case 61:
+                       sprintf(&network[strlen(network)], "<TR><TD>");
+                       sprintf(&network[strlen(network)], _("Keep original from headers in IMAP"));
+                       sprintf(&network[strlen(network)], "</TD><TD>");
+                       sprintf(&network[strlen(network)], "<input type=\"checkbox\" NAME=\"c_imap_keep_from\" VALUE=\"yes\" %s>",
+                               ((atoi(buf) != 0) ? "CHECKED" : ""));
+                       sprintf(&network[strlen(network)], "</TD></TR>\n");
+                       break;
                }
        
        }
@@ -766,6 +774,7 @@ void siteconfig(void)
        serv_printf("%s", bstr("c_master_user"));
        serv_printf("%s", bstr("c_master_pass"));
        serv_printf("%s", bstr("c_pager_program"));
+       serv_printf("%s", ((!strcasecmp(bstr("c_imap_keep_from"), "yes") ? "1" : "0")));
        serv_printf("000");
 
        serv_printf("SPEX site|%d|%d", atoi(bstr("sitepolicy")), atoi(bstr("sitevalue")));