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 }