Mercurial > masqmail-0.2
comparison src/accept.c @ 106:1f0d63713a1c
masqmail now *always* removes Bcc: headers
this is the most simple way and taken by other MTAs (courier, postfix) too
author | meillo@marmaro.de |
---|---|
date | Tue, 29 Jun 2010 10:37:18 +0200 |
parents | 47ee3fbcecd2 |
children | db52c64acaa2 |
comparison
equal
deleted
inserted
replaced
105:47ee3fbcecd2 | 106:1f0d63713a1c |
---|---|
212 { | 212 { |
213 gboolean has_id = FALSE; | 213 gboolean has_id = FALSE; |
214 gboolean has_date = FALSE; | 214 gboolean has_date = FALSE; |
215 gboolean has_sender = FALSE; | 215 gboolean has_sender = FALSE; |
216 gboolean has_from = FALSE; | 216 gboolean has_from = FALSE; |
217 gboolean has_rcpt = FALSE; | |
218 gboolean has_to_or_cc = FALSE; | 217 gboolean has_to_or_cc = FALSE; |
219 GList *hdr_node, *hdr_node_next; | 218 GList *hdr_node, *hdr_node_next; |
220 header *hdr; | 219 header *hdr; |
221 | 220 |
222 for (hdr_node = g_list_first(msg->hdr_list); | 221 for (hdr_node = g_list_first(msg->hdr_list); |
237 case HEAD_SENDER: | 236 case HEAD_SENDER: |
238 has_sender = TRUE; | 237 has_sender = TRUE; |
239 break; | 238 break; |
240 case HEAD_TO: | 239 case HEAD_TO: |
241 case HEAD_CC: | 240 case HEAD_CC: |
241 has_to_or_cc = TRUE; | |
242 /* fall through */ | |
242 case HEAD_BCC: | 243 case HEAD_BCC: |
243 has_rcpt = TRUE; | |
244 if (flags & ACC_RCPT_FROM_HEAD) { | 244 if (flags & ACC_RCPT_FROM_HEAD) { |
245 DEBUG(5) debugf("hdr->value = %s\n", hdr->value); | 245 DEBUG(5) debugf("hdr->value = %s\n", hdr->value); |
246 if (hdr->value) { | 246 if (hdr->value) { |
247 msg->rcpt_list = addr_list_append_rfc822(msg->rcpt_list, hdr->value, conf.host_name); | 247 msg->rcpt_list = addr_list_append_rfc822(msg->rcpt_list, hdr->value, conf.host_name); |
248 } | 248 } |
249 } | 249 } |
250 if ((flags & ACC_DEL_BCC) && (hdr->id == HEAD_BCC)) { | 250 if (hdr->id == HEAD_BCC) { |
251 DEBUG(3) debugf("removing 'Bcc' header\n"); | 251 DEBUG(3) debugf("removing 'Bcc' header\n"); |
252 msg->hdr_list = g_list_remove_link(msg->hdr_list, hdr_node); | 252 msg->hdr_list = g_list_remove_link(msg->hdr_list, hdr_node); |
253 g_list_free_1(hdr_node); | 253 g_list_free_1(hdr_node); |
254 destroy_header(hdr); | 254 destroy_header(hdr); |
255 } else | 255 } |
256 has_to_or_cc = TRUE; | |
257 break; | 256 break; |
258 case HEAD_ENVELOPE_TO: | 257 case HEAD_ENVELOPE_TO: |
259 if (flags & ACC_SAVE_ENVELOPE_TO) { | 258 if (flags & ACC_SAVE_ENVELOPE_TO) { |
260 DEBUG(3) debugf("creating 'X-Orig-Envelope-To' header\n"); | 259 DEBUG(3) debugf("creating 'X-Orig-Envelope-To' header\n"); |
261 msg->hdr_list = g_list_prepend(msg->hdr_list, create_header(HEAD_UNKNOWN, | 260 msg->hdr_list = g_list_prepend(msg->hdr_list, create_header(HEAD_UNKNOWN, |
347 : | 346 : |
348 create_header(HEAD_FROM, "From: <%s@%s>\n", | 347 create_header(HEAD_FROM, "From: <%s@%s>\n", |
349 msg->return_path->local_part, msg->return_path->domain) | 348 msg->return_path->local_part, msg->return_path->domain) |
350 ); | 349 ); |
351 } | 350 } |
352 if ((flags & ACC_HEAD_FROM_RCPT) && !has_rcpt) { | 351 if (!has_to_or_cc) { |
353 DEBUG(3) debugf("no To: or Cc: header, hence adding `undisclosed recipients' header\n"); | 352 DEBUG(3) debugf("no To: or Cc: header, hence adding `To: undisclosed recipients:;'\n"); |
354 msg->hdr_list = g_list_append(msg->hdr_list, create_header(HEAD_TO, "To: undisclosed-recipients:;\n")); | 353 msg->hdr_list = g_list_append(msg->hdr_list, create_header(HEAD_TO, "To: undisclosed-recipients:;\n")); |
355 } | |
356 if ((flags & ACC_DEL_BCC) && !has_to_or_cc) { | |
357 /* Bcc headers have been removed, and there are no remaining rcpt headers */ | |
358 DEBUG(3) debugf("adding empty 'Bcc:' header\n"); | |
359 msg->hdr_list = g_list_append(msg->hdr_list, create_header(HEAD_BCC, "Bcc:\n")); | |
360 } | 354 } |
361 if (!has_date) { | 355 if (!has_date) { |
362 DEBUG(3) debugf("adding 'Date:' header\n"); | 356 DEBUG(3) debugf("adding 'Date:' header\n"); |
363 msg->hdr_list = g_list_append(msg->hdr_list, create_header(HEAD_DATE, "Date: %s\n", rec_timestamp())); | 357 msg->hdr_list = g_list_append(msg->hdr_list, create_header(HEAD_DATE, "Date: %s\n", rec_timestamp())); |
364 } | 358 } |