summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeffrey Stedfast <fejj@ximian.com>2003-02-24 03:48:31 +0000
committerJeffrey Stedfast <fejj@src.gnome.org>2003-02-24 03:48:31 +0000
commitbadf78dc9bb6d34646e1bb4f863a5d9251dbd600 (patch)
tree82910afdf392173a26c80357b010740d4a290e7c
parent2695db713598155e1ab9b13273ba69b46be8c4c7 (diff)
downloadevolution-data-server-badf78dc9bb6d34646e1bb4f863a5d9251dbd600.tar.gz
Remove all Bcc headers before sending to sendmail and restore them after
2003-02-22 Jeffrey Stedfast <fejj@ximian.com> * providers/sendmail/camel-sendmail-transport.c (sendmail_send_to): Remove all Bcc headers before sending to sendmail and restore them after it has been sent.
-rw-r--r--camel/ChangeLog6
-rw-r--r--camel/providers/sendmail/camel-sendmail-transport.c36
2 files changed, 41 insertions, 1 deletions
diff --git a/camel/ChangeLog b/camel/ChangeLog
index 3f8767178..5989b9407 100644
--- a/camel/ChangeLog
+++ b/camel/ChangeLog
@@ -1,3 +1,9 @@
+2003-02-22 Jeffrey Stedfast <fejj@ximian.com>
+
+ * providers/sendmail/camel-sendmail-transport.c
+ (sendmail_send_to): Remove all Bcc headers before sending to
+ sendmail and restore them after it has been sent.
+
2003-02-19 Jeffrey Stedfast <fejj@ximian.com>
* camel-tcp-stream-ssl.c (stream_connect): Fixed a type-o in the
diff --git a/camel/providers/sendmail/camel-sendmail-transport.c b/camel/providers/sendmail/camel-sendmail-transport.c
index 1af237f23..70abc6802 100644
--- a/camel/providers/sendmail/camel-sendmail-transport.c
+++ b/camel/providers/sendmail/camel-sendmail-transport.c
@@ -85,12 +85,13 @@ sendmail_send_to (CamelTransport *transport, CamelMimeMessage *message,
CamelAddress *from, CamelAddress *recipients,
CamelException *ex)
{
+ struct _header_raw *header, *savedbcc, *n, *tail;
const char *from_addr, *addr, **argv;
int i, len, fd[2], nullfd, wstat;
sigset_t mask, omask;
CamelStream *out;
pid_t pid;
-
+
if (!camel_internet_address_get (CAMEL_INTERNET_ADDRESS (from), 0, NULL, &from_addr))
return FALSE;
@@ -115,11 +116,34 @@ sendmail_send_to (CamelTransport *transport, CamelMimeMessage *message,
argv[i + 5] = NULL;
+ /* unlink the bcc headers */
+ savedbcc = NULL;
+ tail = (struct _header_raw *) &savedbcc;
+
+ header = (struct _header_raw *) &CAMEL_MIME_PART (message)->headers;
+ n = header->next;
+ while (n != NULL) {
+ if (!strcasecmp (header->name, "Bcc")) {
+ header->next = n->next;
+ tail->next = n;
+ n->next = NULL;
+ tail = n;
+ } else {
+ header = n;
+ }
+
+ n = header->next;
+ }
+
if (pipe (fd) == -1) {
camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
_("Could not create pipe to sendmail: "
"%s: mail not sent"),
g_strerror (errno));
+
+ /* restore the bcc headers */
+ header->next = savedbcc;
+
return FALSE;
}
@@ -139,6 +163,10 @@ sendmail_send_to (CamelTransport *transport, CamelMimeMessage *message,
g_strerror (errno));
sigprocmask (SIG_SETMASK, &omask, NULL);
g_free (argv);
+
+ /* restore the bcc headers */
+ header->next = savedbcc;
+
return FALSE;
case 0:
/* Child process */
@@ -170,6 +198,9 @@ sendmail_send_to (CamelTransport *transport, CamelMimeMessage *message,
sigprocmask (SIG_SETMASK, &omask, NULL);
+ /* restore the bcc headers */
+ header->next = savedbcc;
+
return FALSE;
}
@@ -181,6 +212,9 @@ sendmail_send_to (CamelTransport *transport, CamelMimeMessage *message,
sigprocmask (SIG_SETMASK, &omask, NULL);
+ /* restore the bcc headers */
+ header->next = savedbcc;
+
if (!WIFEXITED (wstat)) {
camel_exception_setv (ex, CAMEL_EXCEPTION_SYSTEM,
_("sendmail exited with signal %s: "