summarylogtreecommitdiffstats
path: root/467432-write_bcc.patch
blob: 3b68d2fc880660ef42443cf56bef19b235ea5cbe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
From: Antonio Radici <antonio@debian.org>
Date: Thu, 27 Feb 2014 16:22:51 +0100
Subject: 467432-write_bcc
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

The purpose of this patch is to alter the behavior of the write_bcc option
because exim4, the default SMTP in Debian, does not strip the Bcc headers; by
default write_bcc is set so this could cause a privacy leak.

The behavior that this patch introduces is: never write the Bcc header when the
message is sent, otherwise, if the message is sent to Fcc, then this optin
will be evaluated and the Bcc header will be written based on that.

Background discussion on this is in the following bugs:
http://bugs.debian.org/304718
http://bugs.debian.org/467432

This patch is a slightly modified version of the patch provided by
Stefan Völkel <stefan@bc-bd.org> in the second bug.

Gbp-Pq: Topic debian-specific
---
 headers.c |  2 +-
 init.h    | 11 +++--------
 protos.h  |  2 +-
 send.c    |  4 ++--
 sendlib.c |  6 +++---
 5 files changed, 10 insertions(+), 15 deletions(-)

diff --git a/headers.c b/headers.c
index 578b33d..f701c8e 100644
--- a/headers.c
+++ b/headers.c
@@ -52,7 +52,7 @@ void mutt_edit_headers (const char *editor,
   }
   
   mutt_env_to_local (msg->env);
-  mutt_write_rfc822_header (ofp, msg->env, NULL, 1, 0);
+  mutt_write_rfc822_header (ofp, msg->env, NULL, 1, 0, 1);
   fputc ('\n', ofp);	/* tie off the header. */
 
   /* now copy the body of the message. */
diff --git a/init.h b/init.h
index ec88f92..e370b3a 100644
--- a/init.h
+++ b/init.h
@@ -3539,14 +3539,9 @@ struct option_t MuttVars[] = {
   { "write_bcc",	DT_BOOL, R_NONE, OPTWRITEBCC, 1},
   /*
   ** .pp
-  ** Controls whether mutt writes out the ``Bcc:'' header when preparing
-  ** messages to be sent.  Exim users may wish to unset this. If mutt
-  ** is set to deliver directly via SMTP (see $$smtp_url), this
-  ** option does nothing: mutt will never write out the ``Bcc:'' header
-  ** in this case.
-  ** .pp
-  ** \fBNote:\fP On Debian systems, exim4 and postfix strip BCC headers by
-  ** default. The above warning applies to exim3 users, see /etc/Muttrc.
+  ** Controls whether mutt writes out the Bcc header when saving
+  ** messages to FCC. Bcc headers will never be written to a message
+  ** when sending it. Note: this behavior is Debian specific.
   */
   { "write_inc",	DT_NUM,	 R_NONE, UL &WriteInc, 10 },
   /*
diff --git a/protos.h b/protos.h
index 2ba4d1d..799ac9b 100644
--- a/protos.h
+++ b/protos.h
@@ -368,7 +368,7 @@ int mutt_write_fcc (const char *path, HEADER *hdr, const char *msgid, int, char
 int mutt_write_mime_body (BODY *, FILE *);
 int mutt_write_mime_header (BODY *, FILE *);
 int mutt_write_one_header (FILE *fp, const char *tag, const char *value, const char *pfx, int wraplen, int flags);
-int mutt_write_rfc822_header (FILE *, ENVELOPE *, BODY *, int, int);
+int mutt_write_rfc822_header (FILE *, ENVELOPE *, BODY *, int, int, int);
 void mutt_write_references (LIST *, FILE *, int);
 int mutt_yesorno (const char *, int);
 void mutt_set_header_color(CONTEXT *, HEADER *);
diff --git a/send.c b/send.c
index d4e2a79..6dd26c0 100644
--- a/send.c
+++ b/send.c
@@ -994,10 +994,10 @@ static int send_message (HEADER *msg)
     unset_option (OPTWRITEBCC);
 #endif
 #ifdef MIXMASTER
-  mutt_write_rfc822_header (tempfp, msg->env, msg->content, 0, msg->chain ? 1 : 0);
+  mutt_write_rfc822_header (tempfp, msg->env, msg->content, 0, msg->chain ? 1 : 0, 0);
 #endif
 #ifndef MIXMASTER
-  mutt_write_rfc822_header (tempfp, msg->env, msg->content, 0, 0);
+  mutt_write_rfc822_header (tempfp, msg->env, msg->content, 0, 0, 0);
 #endif
 #ifdef USE_SMTP
   if (old_write_bcc)
diff --git a/sendlib.c b/sendlib.c
index a74874d..689a112 100644
--- a/sendlib.c
+++ b/sendlib.c
@@ -1936,7 +1936,7 @@ out:
 
 
 int mutt_write_rfc822_header (FILE *fp, ENVELOPE *env, BODY *attach,
-			      int mode, int privacy)
+			      int mode, int privacy, int should_write_bcc)
 {
   char buffer[LONG_STRING];
   char *p, *q;
@@ -1979,7 +1979,7 @@ int mutt_write_rfc822_header (FILE *fp, ENVELOPE *env, BODY *attach,
   else if (mode > 0)
     fputs ("Cc: \n", fp);
 
-  if (env->bcc)
+  if (env->bcc && should_write_bcc)
   {
     if(mode != 0 || option(OPTWRITEBCC))
     {
@@ -2738,7 +2738,7 @@ int mutt_write_fcc (const char *path, HEADER *hdr, const char *msgid, int post,
   /* post == 1 => postpone message. Set mode = -1 in mutt_write_rfc822_header()
    * post == 0 => Normal mode. Set mode = 0 in mutt_write_rfc822_header()
    * */
-  mutt_write_rfc822_header (msg->fp, hdr->env, hdr->content, post ? -post : 0, 0);
+  mutt_write_rfc822_header (msg->fp, hdr->env, hdr->content, post ? -post : 0, 0, 1);
 
   /* (postponment) if this was a reply of some sort, <msgid> contians the
    * Message-ID: of message replied to.  Save it using a special X-Mutt-