From: Dave West Date: Sun, 28 Oct 2007 11:48:04 +0000 (+0000) Subject: Solution to bug no. 258 (forging of from headers with IMAP move) X-Git-Tag: v7.86~2892 X-Git-Url: https://code.citadel.org/?p=citadel.git;a=commitdiff_plain;h=242289cc7e9ae7df8bce27e30c6629c9eb3bf3ee Solution to bug no. 258 (forging of from headers with IMAP move) 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. --- diff --git a/citadel/control.c b/citadel/control.c index dbe840670..fe625d051 100644 --- a/citadel/control.c +++ b/citadel/control.c @@ -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; } diff --git a/citadel/include/dtds/config-defs.h b/citadel/include/dtds/config-defs.h index d804fca20..cfdea8cc9 100644 --- a/citadel/include/dtds/config-defs.h +++ b/citadel/include/dtds/config-defs.h @@ -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"); diff --git a/citadel/modules/imap/imap_misc.c b/citadel/modules/imap/imap_misc.c index 671c6ce5f..8525216b8 100644 --- a/citadel/modules/imap/imap_misc.c +++ b/citadel/modules/imap/imap_misc.c @@ -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']); diff --git a/webcit/siteconfig.c b/webcit/siteconfig.c index 380e06165..da8db435f 100644 --- a/webcit/siteconfig.c +++ b/webcit/siteconfig.c @@ -591,6 +591,14 @@ void display_siteconfig(void) sprintf(&funambol[strlen(funambol)], "", buf); sprintf(&funambol[strlen(funambol)], "\n"); break; + case 61: + sprintf(&network[strlen(network)], ""); + sprintf(&network[strlen(network)], _("Keep original from headers in IMAP")); + sprintf(&network[strlen(network)], ""); + sprintf(&network[strlen(network)], "", + ((atoi(buf) != 0) ? "CHECKED" : "")); + sprintf(&network[strlen(network)], "\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")));