# HG changeset patch # User meillo@marmaro.de # Date 1277800638 -7200 # Node ID 1f0d63713a1c59bd883b7d5c8795a0270820eddb # Parent 47ee3fbcecd29ce7ffd3525dc9d8c74ca6ed0195 masqmail now *always* removes Bcc: headers this is the most simple way and taken by other MTAs (courier, postfix) too diff -r 47ee3fbcecd2 -r 1f0d63713a1c man/masqmail.8 --- a/man/masqmail.8 Tue Jun 29 10:20:09 2010 +0200 +++ b/man/masqmail.8 Tue Jun 29 10:37:18 2010 +0200 @@ -214,6 +214,7 @@ Read recipients from headers. Delete `Bcc:' headers. +(Since 0.2.25, masqmail deletes Bcc: headers in all cases.) If any arguments are given, these are interpreted as recipient addresses and the message will not be sent to these, although they might appear in To:, Cc:, or Bcc: headers. diff -r 47ee3fbcecd2 -r 1f0d63713a1c src/accept.c --- a/src/accept.c Tue Jun 29 10:20:09 2010 +0200 +++ b/src/accept.c Tue Jun 29 10:37:18 2010 +0200 @@ -214,7 +214,6 @@ gboolean has_date = FALSE; gboolean has_sender = FALSE; gboolean has_from = FALSE; - gboolean has_rcpt = FALSE; gboolean has_to_or_cc = FALSE; GList *hdr_node, *hdr_node_next; header *hdr; @@ -239,21 +238,21 @@ break; case HEAD_TO: case HEAD_CC: + has_to_or_cc = TRUE; + /* fall through */ case HEAD_BCC: - has_rcpt = TRUE; if (flags & ACC_RCPT_FROM_HEAD) { DEBUG(5) debugf("hdr->value = %s\n", hdr->value); if (hdr->value) { msg->rcpt_list = addr_list_append_rfc822(msg->rcpt_list, hdr->value, conf.host_name); } } - if ((flags & ACC_DEL_BCC) && (hdr->id == HEAD_BCC)) { + if (hdr->id == HEAD_BCC) { DEBUG(3) debugf("removing 'Bcc' header\n"); msg->hdr_list = g_list_remove_link(msg->hdr_list, hdr_node); g_list_free_1(hdr_node); destroy_header(hdr); - } else - has_to_or_cc = TRUE; + } break; case HEAD_ENVELOPE_TO: if (flags & ACC_SAVE_ENVELOPE_TO) { @@ -349,15 +348,10 @@ msg->return_path->local_part, msg->return_path->domain) ); } - if ((flags & ACC_HEAD_FROM_RCPT) && !has_rcpt) { - DEBUG(3) debugf("no To: or Cc: header, hence adding `undisclosed recipients' header\n"); + if (!has_to_or_cc) { + DEBUG(3) debugf("no To: or Cc: header, hence adding `To: undisclosed recipients:;'\n"); msg->hdr_list = g_list_append(msg->hdr_list, create_header(HEAD_TO, "To: undisclosed-recipients:;\n")); } - if ((flags & ACC_DEL_BCC) && !has_to_or_cc) { - /* Bcc headers have been removed, and there are no remaining rcpt headers */ - DEBUG(3) debugf("adding empty 'Bcc:' header\n"); - msg->hdr_list = g_list_append(msg->hdr_list, create_header(HEAD_BCC, "Bcc:\n")); - } if (!has_date) { DEBUG(3) debugf("adding 'Date:' header\n"); msg->hdr_list = g_list_append(msg->hdr_list, create_header(HEAD_DATE, "Date: %s\n", rec_timestamp())); diff -r 47ee3fbcecd2 -r 1f0d63713a1c src/masqmail.c --- a/src/masqmail.c Tue Jun 29 10:20:09 2010 +0200 +++ b/src/masqmail.c Tue Jun 29 10:37:18 2010 +0200 @@ -813,7 +813,7 @@ case MODE_ACCEPT: { - guint accept_flags = (opt_t ? ACC_DEL_RCPTS | ACC_DEL_BCC | ACC_RCPT_FROM_HEAD : ACC_HEAD_FROM_RCPT) + guint accept_flags = (opt_t ? ACC_DEL_RCPTS | ACC_RCPT_FROM_HEAD : ACC_HEAD_FROM_RCPT) | (opt_i ? ACC_NODOT_TERM : ACC_NODOT_RELAX); mode_accept(return_path, full_sender_name, accept_flags, &(argv[arg]), argc - arg); exit(exit_failure ? EXIT_FAILURE : EXIT_SUCCESS); diff -r 47ee3fbcecd2 -r 1f0d63713a1c src/masqmail.h --- a/src/masqmail.h Tue Jun 29 10:20:09 2010 +0200 +++ b/src/masqmail.h Tue Jun 29 10:37:18 2010 +0200 @@ -311,7 +311,6 @@ /*#define ACC_LOCAL 0x01 (we better use received_host == NULL) */ #define ACC_HEAD_FROM_RCPT 0x01 /* create To: Header from rcpt_list (cmd line) */ #define ACC_DEL_RCPTS 0x02 /* -t option, delete rcpts */ -#define ACC_DEL_BCC 0x04 /* -t option, delete Bcc header */ #define ACC_RCPT_FROM_HEAD 0x08 /* -t option, get rcpts from headers */ #define ACC_NODOT_TERM 0x10 /* a dot on a line itself does not end the message (-oi option) */ #define ACC_MAIL_FROM_HEAD 0x40 /* get return path from header */