annotate src/accept.c @ 323:29de6a1c4538

Fixed an important bug with folded headers! g_strconcat() returns a *copy* of the string, but hdr->value still pointed to the old header (which probably was a memory leak, too). If the folded part had been quite small it was likely that the new string was at the same position as the old one, thus making everything go well. But if pretty long headers were folded several times it was likely that the new string was allocated somewhere else in memory, thus breaking things. In result mails to lots of recipients (folded header) were frequently only sent to the ones in the first line. Sorry for the inconvenience.
author meillo@marmaro.de
date Fri, 03 Jun 2011 09:47:27 +0200
parents d5ce2ba71e7b
children 9d49dffc3070
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
1 /* MasqMail
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
2 Copyright (C) 1999-2001 Oliver Kurth
224
996b53a50f55 added my copyright to files I worked on
meillo@marmaro.de
parents: 192
diff changeset
3 Copyright (C) 2010 markus schnalke <meillo@marmaro.de>
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
4
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
5 This program is free software; you can redistribute it and/or modify
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
6 it under the terms of the GNU General Public License as published by
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
7 the Free Software Foundation; either version 2 of the License, or
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
8 (at your option) any later version.
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
9
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
10 This program is distributed in the hope that it will be useful,
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
13 GNU General Public License for more details.
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
14
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
15 You should have received a copy of the GNU General Public License
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
16 along with this program; if not, write to the Free Software
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
18 */
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
19
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
20 #include "masqmail.h"
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
21 #include "readsock.h"
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
22
299
ca2d11aec2a3 fixed compile error; removed PROT_BSMTP; made protocol names ucase
markus schnalke <meillo@marmaro.de>
parents: 298
diff changeset
23 /* must match PROT_* in masqmail.h */
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
24 gchar *prot_names[] = {
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
25 "local",
299
ca2d11aec2a3 fixed compile error; removed PROT_BSMTP; made protocol names ucase
markus schnalke <meillo@marmaro.de>
parents: 298
diff changeset
26 "SMTP",
ca2d11aec2a3 fixed compile error; removed PROT_BSMTP; made protocol names ucase
markus schnalke <meillo@marmaro.de>
parents: 298
diff changeset
27 "ESMTP",
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
28 "(unknown)" /* should not happen, but better than crashing. */
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
29 };
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
30
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
31 static gchar*
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
32 string_base62(gchar * res, guint value, gchar len)
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
33 {
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
34 static gchar base62_chars[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
35 gchar *p = res + len;
14
a8f3424347dc replaced number 0 with character \0 where appropriate
meillo@marmaro.de
parents: 13
diff changeset
36 *p = '\0';
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
37 while (p > res) {
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
38 *(--p) = base62_chars[value % 62];
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
39 value /= 62;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
40 }
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
41 return res;
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
42 }
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
43
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
44 static gint
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
45 _g_list_addr_isequal(gconstpointer a, gconstpointer b)
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
46 {
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
47 address *addr1 = (address *) a;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
48 address *addr2 = (address *) b;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
49 int ret;
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
50
270
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
51 if ((ret = strcasecmp(addr1->domain, addr2->domain)) == 0) {
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
52 return strcmp(addr1->local_part, addr2->local_part);
270
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
53 }
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
54 return ret;
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
55 }
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
56
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
57 /* accept message from anywhere.
276
1abc1faeb45d for -t cmdline args are now added to the rcpt list instead of substracted
markus schnalke <meillo@marmaro.de>
parents: 275
diff changeset
58 A message from local is indicated by msg->recieved_host == NULL
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
59
276
1abc1faeb45d for -t cmdline args are now added to the rcpt list instead of substracted
markus schnalke <meillo@marmaro.de>
parents: 275
diff changeset
60 The -t option: With the ACC_RCPT_FROM_HEAD flag the addrs found found
1abc1faeb45d for -t cmdline args are now added to the rcpt list instead of substracted
markus schnalke <meillo@marmaro.de>
parents: 275
diff changeset
61 in To/Cc/Bcc headers are added to the recipient list.
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
62 */
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
63
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
64 accept_error
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
65 accept_message_stream(FILE * in, message * msg, guint flags)
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
66 {
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
67 gchar *line, *line1;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
68 int line_size = MAX_DATALINE;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
69 gboolean in_headers = TRUE;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
70 header *hdr = NULL;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
71 gint line_cnt = 0, data_size = 0;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
72
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
73 line = g_malloc(line_size);
14
a8f3424347dc replaced number 0 with character \0 where appropriate
meillo@marmaro.de
parents: 13
diff changeset
74 line[0] = '\0';
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
75
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
76 while (TRUE) {
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
77 int len = read_sockline1(in, &line, &line_size, 5 * 60, READSOCKL_CVT_CRLF);
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
78
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
79 line1 = line;
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
80
110
c678d0342451 changed name ACC_NODOT_TERM to ACC_DOT_IGNORE for better understanding
meillo@marmaro.de
parents: 109
diff changeset
81 if ((line[0] == '.') && (!(flags & ACC_DOT_IGNORE))) {
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
82 if (line[1] == '\n') {
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
83 g_free(line);
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
84 break;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
85 }
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
86 line1++;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
87 }
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
88
270
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
89 if ((len == -1) && (flags & (ACC_DOT_IGNORE | ACC_NODOT_RELAX))) {
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
90 /* we got an EOF, and the last line was not terminated by a CR */
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
91 gint len1 = strlen(line1);
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
92 if (len1 > 0) { /* == 0 is 'normal' (EOF after a CR) */
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
93 if (line1[len1 - 1] != '\n') { /* some mail clients allow unterminated lines */
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
94 line1[len1] = '\n';
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
95 line1[len1 + 1] = '\0';
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
96 msg->data_list = g_list_prepend(msg->data_list, g_strdup(line1));
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
97 data_size += strlen(line1);
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
98 line_cnt++;
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
99 }
270
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
100 }
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
101 break;
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
102
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
103 } else if (len == -1) {
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
104 g_free(line);
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
105 return AERR_EOF;
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
106
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
107 } else if (len == -2) {
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
108 /* should not happen any more */
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
109 g_free(line);
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
110 return AERR_OVERFLOW;
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
111
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
112 } else if (len == -3) {
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
113 g_free(line);
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
114 return AERR_TIMEOUT;
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
115
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
116 } else if (len <= 0) {
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
117 /* does not happen */
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
118 g_free(line);
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
119 DEBUG(5) debugf("read_sockline returned %d\n", len);
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
120 return AERR_UNKNOWN;
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
121
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
122 }
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
123
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
124 if (in_headers) {
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
125
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
126 /* some pop servers send the 'From ' line, skip it: */
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
127 if (!msg->hdr_list && strncmp(line1, "From ", 5) == 0) {
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
128 continue;
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
129 }
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
130
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
131 if (line1[0] == ' ' || line1[0] == '\t') {
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
132 /* continuation of 'folded' header: */
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
133 if (hdr) {
323
29de6a1c4538 Fixed an important bug with folded headers!
meillo@marmaro.de
parents: 304
diff changeset
134 char* cp;
29de6a1c4538 Fixed an important bug with folded headers!
meillo@marmaro.de
parents: 304
diff changeset
135 cp = g_strconcat(hdr->header, line1, NULL);
29de6a1c4538 Fixed an important bug with folded headers!
meillo@marmaro.de
parents: 304
diff changeset
136 hdr->value = cp + (hdr->value - hdr->header);
29de6a1c4538 Fixed an important bug with folded headers!
meillo@marmaro.de
parents: 304
diff changeset
137 free(hdr->header);
29de6a1c4538 Fixed an important bug with folded headers!
meillo@marmaro.de
parents: 304
diff changeset
138 hdr->header = cp;
270
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
139 }
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
140
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
141 } else if (line1[0] == '\n') {
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
142 /* an empty line marks end of headers */
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
143 in_headers = FALSE;
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
144 } else {
270
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
145 /* in all other cases we expect another header */
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
146 if ((hdr = get_header(line1))) {
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
147 msg->hdr_list = g_list_append(msg->hdr_list, hdr);
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
148 } else {
270
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
149 /* if get_header() returns NULL, no header was recognized,
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
150 so this seems to be the first data line of a broken mailer
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
151 which does not send an empty line after the headers */
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
152 in_headers = FALSE;
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
153 msg->data_list = g_list_prepend(msg->data_list, g_strdup(line1));
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
154 }
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
155 }
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
156 } else {
270
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
157 /* message body */
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
158 msg->data_list = g_list_prepend(msg->data_list, g_strdup(line1));
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
159 data_size += strlen(line1);
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
160 line_cnt++;
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
161 }
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
162
120
cd59a5b4d3dd added support for SMTP SIZE 0 (unlimited)
meillo@marmaro.de
parents: 117
diff changeset
163 if (conf.max_msg_size && (data_size > conf.max_msg_size)) {
117
5ec5e6637049 added server-side SMTP SIZE support (patch by Paolo)
meillo@marmaro.de
parents: 111
diff changeset
164 DEBUG(4) debugf("accept_message_stream(): "
5ec5e6637049 added server-side SMTP SIZE support (patch by Paolo)
meillo@marmaro.de
parents: 111
diff changeset
165 "received %d bytes (conf.max_msg_size=%d)\n",
5ec5e6637049 added server-side SMTP SIZE support (patch by Paolo)
meillo@marmaro.de
parents: 111
diff changeset
166 data_size, conf.max_msg_size);
5ec5e6637049 added server-side SMTP SIZE support (patch by Paolo)
meillo@marmaro.de
parents: 111
diff changeset
167 return AERR_SIZE;
5ec5e6637049 added server-side SMTP SIZE support (patch by Paolo)
meillo@marmaro.de
parents: 111
diff changeset
168 }
5ec5e6637049 added server-side SMTP SIZE support (patch by Paolo)
meillo@marmaro.de
parents: 111
diff changeset
169
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
170 }
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
171
270
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
172 DEBUG(4) debugf("received %d lines of data (%d bytes)\n", line_cnt, data_size);
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
173
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
174 if (!msg->data_list) {
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
175 /* make sure data list is not NULL: */
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
176 msg->data_list = g_list_append(NULL, g_strdup(""));
270
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
177 }
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
178 msg->data_list = g_list_reverse(msg->data_list);
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
179
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
180 /* we get here after we succesfully received the mail data */
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
181
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
182 msg->data_size = data_size;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
183 msg->received_time = time(NULL);
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
184
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
185 return AERR_OK;
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
186 }
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
187
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
188 accept_error
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
189 accept_message_prepare(message * msg, guint flags)
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
190 {
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
191 struct passwd *passwd = NULL;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
192 time_t rec_time = time(NULL);
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
193
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
194 DEBUG(5) debugf("accept_message_prepare()\n");
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
195
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
196 /* create unique message id */
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
197 msg->uid = g_malloc(14);
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
198 string_base62(msg->uid, rec_time, 6);
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
199 msg->uid[6] = '-';
298
6281ff92cb86 refactoring
markus schnalke <meillo@marmaro.de>
parents: 289
diff changeset
200 string_base62(msg->uid + 7, getpid(), 3);
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
201 msg->uid[10] = '-';
298
6281ff92cb86 refactoring
markus schnalke <meillo@marmaro.de>
parents: 289
diff changeset
202 string_base62(msg->uid + 11, msg->transfer_id, 2);
6281ff92cb86 refactoring
markus schnalke <meillo@marmaro.de>
parents: 289
diff changeset
203 msg->uid[13] = '\0';
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
204
298
6281ff92cb86 refactoring
markus schnalke <meillo@marmaro.de>
parents: 289
diff changeset
205 /* if local, get password entry and set return path if missing */
6281ff92cb86 refactoring
markus schnalke <meillo@marmaro.de>
parents: 289
diff changeset
206 if (!msg->received_host) {
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
207 passwd = g_memdup(getpwuid(geteuid()), sizeof(struct passwd));
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
208 msg->ident = g_strdup(passwd->pw_name);
298
6281ff92cb86 refactoring
markus schnalke <meillo@marmaro.de>
parents: 289
diff changeset
209 if (!msg->return_path) {
6281ff92cb86 refactoring
markus schnalke <meillo@marmaro.de>
parents: 289
diff changeset
210 gchar *path = g_strdup_printf("<%s@%s>", passwd->pw_name, conf.host_name);
6281ff92cb86 refactoring
markus schnalke <meillo@marmaro.de>
parents: 289
diff changeset
211 DEBUG(3) debugf("setting return_path for local accept: %s\n", path);
6281ff92cb86 refactoring
markus schnalke <meillo@marmaro.de>
parents: 289
diff changeset
212 msg->return_path = create_address(path, TRUE);
6281ff92cb86 refactoring
markus schnalke <meillo@marmaro.de>
parents: 289
diff changeset
213 g_free(path);
6281ff92cb86 refactoring
markus schnalke <meillo@marmaro.de>
parents: 289
diff changeset
214 }
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
215 }
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
216
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
217 /* scan headers */
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
218 {
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
219 gboolean has_id = FALSE;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
220 gboolean has_date = FALSE;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
221 gboolean has_sender = FALSE;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
222 gboolean has_from = FALSE;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
223 gboolean has_to_or_cc = FALSE;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
224 GList *hdr_node, *hdr_node_next;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
225 header *hdr;
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
226
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
227 for (hdr_node = g_list_first(msg->hdr_list);
298
6281ff92cb86 refactoring
markus schnalke <meillo@marmaro.de>
parents: 289
diff changeset
228 hdr_node;
6281ff92cb86 refactoring
markus schnalke <meillo@marmaro.de>
parents: 289
diff changeset
229 hdr_node = hdr_node_next) {
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
230 hdr_node_next = g_list_next(hdr_node);
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
231 hdr = ((header *) (hdr_node->data));
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
232 DEBUG(5) debugf("scanning headers: %s", hdr->header);
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
233 switch (hdr->id) {
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
234 case HEAD_MESSAGE_ID:
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
235 has_id = TRUE;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
236 break;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
237 case HEAD_DATE:
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
238 has_date = TRUE;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
239 break;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
240 case HEAD_FROM:
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
241 has_from = TRUE;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
242 break;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
243 case HEAD_SENDER:
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
244 has_sender = TRUE;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
245 break;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
246 case HEAD_TO:
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
247 case HEAD_CC:
106
1f0d63713a1c masqmail now *always* removes Bcc: headers
meillo@marmaro.de
parents: 105
diff changeset
248 has_to_or_cc = TRUE;
1f0d63713a1c masqmail now *always* removes Bcc: headers
meillo@marmaro.de
parents: 105
diff changeset
249 /* fall through */
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
250 case HEAD_BCC:
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
251 if (flags & ACC_RCPT_FROM_HEAD) {
109
db52c64acaa2 improved comments related to -t option
meillo@marmaro.de
parents: 106
diff changeset
252 /* -t option (see comment above) */
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
253 DEBUG(5) debugf("hdr->value = %s\n", hdr->value);
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
254 if (hdr->value) {
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
255 msg->rcpt_list = addr_list_append_rfc822(msg->rcpt_list, hdr->value, conf.host_name);
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
256 }
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
257 }
106
1f0d63713a1c masqmail now *always* removes Bcc: headers
meillo@marmaro.de
parents: 105
diff changeset
258 if (hdr->id == HEAD_BCC) {
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
259 DEBUG(3) debugf("removing 'Bcc' header\n");
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
260 msg->hdr_list = g_list_remove_link(msg->hdr_list, hdr_node);
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
261 g_list_free_1(hdr_node);
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
262 destroy_header(hdr);
106
1f0d63713a1c masqmail now *always* removes Bcc: headers
meillo@marmaro.de
parents: 105
diff changeset
263 }
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
264 break;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
265 case HEAD_ENVELOPE_TO:
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
266 if (flags & ACC_SAVE_ENVELOPE_TO) {
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
267 DEBUG(3) debugf("creating 'X-Orig-Envelope-To' header\n");
22
7c1635972aa7 small cleanups
meillo@marmaro.de
parents: 14
diff changeset
268 msg->hdr_list = g_list_prepend(msg->hdr_list, create_header(HEAD_UNKNOWN,
276
1abc1faeb45d for -t cmdline args are now added to the rcpt list instead of substracted
markus schnalke <meillo@marmaro.de>
parents: 275
diff changeset
269 "X-Orig-Envelope-To: %s", hdr->value));
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
270 }
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
271 DEBUG(3) debugf("removing 'Envelope-To' header\n");
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
272 msg->hdr_list = g_list_remove_link(msg->hdr_list, hdr_node);
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
273 g_list_free_1(hdr_node);
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
274 destroy_header(hdr);
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
275 break;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
276 case HEAD_RETURN_PATH:
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
277 if (flags & ACC_MAIL_FROM_HEAD) {
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
278 /* usually POP3 accept */
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
279 msg->return_path = create_address_qualified(hdr->value, TRUE, msg->received_host);
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
280 DEBUG(3) debugf("setting return_path to %s\n", addr_string(msg->return_path));
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
281 }
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
282 DEBUG(3) debugf("removing 'Return-Path' header\n");
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
283 msg->hdr_list = g_list_remove_link(msg->hdr_list, hdr_node);
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
284 g_list_free_1(hdr_node);
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
285 destroy_header(hdr);
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
286 break;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
287 default:
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
288 break; /* make compiler happy */
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
289 }
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
290 }
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
291
298
6281ff92cb86 refactoring
markus schnalke <meillo@marmaro.de>
parents: 289
diff changeset
292 if (!msg->return_path) {
6281ff92cb86 refactoring
markus schnalke <meillo@marmaro.de>
parents: 289
diff changeset
293 /* TODO: do we still need this as we don't fetch
6281ff92cb86 refactoring
markus schnalke <meillo@marmaro.de>
parents: 289
diff changeset
294 mail anymore? */
6281ff92cb86 refactoring
markus schnalke <meillo@marmaro.de>
parents: 289
diff changeset
295 /* this can happen for pop3 accept only and if no
6281ff92cb86 refactoring
markus schnalke <meillo@marmaro.de>
parents: 289
diff changeset
296 Return-Path: header was given */
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
297 GList *hdr_list;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
298 header *hdr;
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
299
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
300 DEBUG(3) debugf("return_path == NULL\n");
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
301
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
302 hdr_list = find_header(msg->hdr_list, HEAD_SENDER, NULL);
298
6281ff92cb86 refactoring
markus schnalke <meillo@marmaro.de>
parents: 289
diff changeset
303 if (!hdr_list) {
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
304 hdr_list = find_header(msg->hdr_list, HEAD_FROM, NULL);
298
6281ff92cb86 refactoring
markus schnalke <meillo@marmaro.de>
parents: 289
diff changeset
305 }
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
306 if (hdr_list) {
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
307 gchar *addr;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
308 hdr = (header *) (g_list_first(hdr_list)->data);
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
309
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
310 DEBUG(5) debugf("hdr->value = '%s'\n", hdr->value);
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
311
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
312 addr = g_strdup(hdr->value);
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
313 g_strchomp(addr);
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
314
299
ca2d11aec2a3 fixed compile error; removed PROT_BSMTP; made protocol names ucase
markus schnalke <meillo@marmaro.de>
parents: 298
diff changeset
315 msg->return_path = create_address_qualified(addr, FALSE, msg->received_host);
298
6281ff92cb86 refactoring
markus schnalke <meillo@marmaro.de>
parents: 289
diff changeset
316 if (msg->return_path) {
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
317 DEBUG(3) debugf("setting return_path to %s\n", addr_string(msg->return_path));
298
6281ff92cb86 refactoring
markus schnalke <meillo@marmaro.de>
parents: 289
diff changeset
318 msg->hdr_list = g_list_append( msg->hdr_list, create_header(HEAD_UNKNOWN, "X-Warning: return path set from %s address\n", hdr->id == HEAD_SENDER ? "Sender:" : "From:"));
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
319 }
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
320 g_free(addr);
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
321 }
298
6281ff92cb86 refactoring
markus schnalke <meillo@marmaro.de>
parents: 289
diff changeset
322 if (!msg->return_path) {
6281ff92cb86 refactoring
markus schnalke <meillo@marmaro.de>
parents: 289
diff changeset
323 /* no Sender: or From: or
6281ff92cb86 refactoring
markus schnalke <meillo@marmaro.de>
parents: 289
diff changeset
324 create_address_qualified failed */
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
325 msg->return_path = create_address_qualified("postmaster", TRUE, conf.host_name);
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
326 DEBUG(3) debugf("setting return_path to %s\n", addr_string(msg->return_path));
298
6281ff92cb86 refactoring
markus schnalke <meillo@marmaro.de>
parents: 289
diff changeset
327 msg->hdr_list = g_list_append(msg->hdr_list, create_header(HEAD_UNKNOWN, "X-Warning: real return path is unknown\n"));
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
328 }
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
329 }
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
330
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
331 /* here we should have our recipients, fail if not: */
276
1abc1faeb45d for -t cmdline args are now added to the rcpt list instead of substracted
markus schnalke <meillo@marmaro.de>
parents: 275
diff changeset
332 if (!msg->rcpt_list) {
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
333 logwrite(LOG_WARNING, "no recipients found in message\n");
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
334 return AERR_NORCPT;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
335 }
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
336
299
ca2d11aec2a3 fixed compile error; removed PROT_BSMTP; made protocol names ucase
markus schnalke <meillo@marmaro.de>
parents: 298
diff changeset
337 if (!has_sender && !has_from) {
298
6281ff92cb86 refactoring
markus schnalke <meillo@marmaro.de>
parents: 289
diff changeset
338 DEBUG(3) debugf("adding 'From:' header\n");
6281ff92cb86 refactoring
markus schnalke <meillo@marmaro.de>
parents: 289
diff changeset
339 if (msg->full_sender_name) {
6281ff92cb86 refactoring
markus schnalke <meillo@marmaro.de>
parents: 289
diff changeset
340 msg->hdr_list = g_list_append(msg->hdr_list, create_header(HEAD_FROM, "From: \"%s\" <%s@%s>\n", msg->full_sender_name, msg->return_path->local_part, msg->return_path->domain));
6281ff92cb86 refactoring
markus schnalke <meillo@marmaro.de>
parents: 289
diff changeset
341 } else {
6281ff92cb86 refactoring
markus schnalke <meillo@marmaro.de>
parents: 289
diff changeset
342 msg->hdr_list = g_list_append(msg->hdr_list, create_header(HEAD_FROM, "From: <%s@%s>\n", msg->return_path->local_part, msg->return_path->domain));
6281ff92cb86 refactoring
markus schnalke <meillo@marmaro.de>
parents: 289
diff changeset
343 }
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
344 }
106
1f0d63713a1c masqmail now *always* removes Bcc: headers
meillo@marmaro.de
parents: 105
diff changeset
345 if (!has_to_or_cc) {
1f0d63713a1c masqmail now *always* removes Bcc: headers
meillo@marmaro.de
parents: 105
diff changeset
346 DEBUG(3) debugf("no To: or Cc: header, hence adding `To: undisclosed recipients:;'\n");
105
47ee3fbcecd2 add `undisclosed recipients' header if no recipient headers available
meillo@marmaro.de
parents: 102
diff changeset
347 msg->hdr_list = g_list_append(msg->hdr_list, create_header(HEAD_TO, "To: undisclosed-recipients:;\n"));
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
348 }
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
349 if (!has_date) {
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
350 DEBUG(3) debugf("adding 'Date:' header\n");
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
351 msg->hdr_list = g_list_append(msg->hdr_list, create_header(HEAD_DATE, "Date: %s\n", rec_timestamp()));
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
352 }
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
353 if (!has_id) {
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
354 DEBUG(3) debugf("adding 'Message-ID:' header\n");
298
6281ff92cb86 refactoring
markus schnalke <meillo@marmaro.de>
parents: 289
diff changeset
355 msg->hdr_list = g_list_append(msg->hdr_list, create_header(HEAD_MESSAGE_ID, "Message-ID: <%s@%s>\n", msg->uid, conf.host_name));
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
356 }
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
357 }
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
358
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
359 /* Received header: */
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
360 /* At this point because we have to know the rcpts for the 'for' part */
298
6281ff92cb86 refactoring
markus schnalke <meillo@marmaro.de>
parents: 289
diff changeset
361 /* The `for' part will only be used if exactly one rcpt is present. */
102
f4719cffc48c removed the ACC_NO_RECVD_HDR because it is never set
meillo@marmaro.de
parents: 25
diff changeset
362 gchar *for_string = NULL;
f4719cffc48c removed the ACC_NO_RECVD_HDR because it is never set
meillo@marmaro.de
parents: 25
diff changeset
363 header *hdr = NULL;
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
364
102
f4719cffc48c removed the ACC_NO_RECVD_HDR because it is never set
meillo@marmaro.de
parents: 25
diff changeset
365 DEBUG(3) debugf("adding 'Received:' header\n");
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
366
102
f4719cffc48c removed the ACC_NO_RECVD_HDR because it is never set
meillo@marmaro.de
parents: 25
diff changeset
367 if (g_list_length(msg->rcpt_list) == 1) {
f4719cffc48c removed the ACC_NO_RECVD_HDR because it is never set
meillo@marmaro.de
parents: 25
diff changeset
368 address *addr = (address *) (g_list_first(msg->rcpt_list)->data);
304
d5ce2ba71e7b manual formating of Received: hdrs; changed hdr for local receival
markus schnalke <meillo@marmaro.de>
parents: 303
diff changeset
369 for_string = g_strdup_printf("\n\tfor %s", addr_string(addr));
102
f4719cffc48c removed the ACC_NO_RECVD_HDR because it is never set
meillo@marmaro.de
parents: 25
diff changeset
370 }
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
371
289
bb3005ce0837 reformating of code
markus schnalke <meillo@marmaro.de>
parents: 276
diff changeset
372 if (!msg->received_host) {
102
f4719cffc48c removed the ACC_NO_RECVD_HDR because it is never set
meillo@marmaro.de
parents: 25
diff changeset
373 /* received locally */
289
bb3005ce0837 reformating of code
markus schnalke <meillo@marmaro.de>
parents: 276
diff changeset
374 hdr = create_header(HEAD_RECEIVED,
304
d5ce2ba71e7b manual formating of Received: hdrs; changed hdr for local receival
markus schnalke <meillo@marmaro.de>
parents: 303
diff changeset
375 "Received: by %s (%s %s, from userid %d)\n\tid %s%s; %s\n",
d5ce2ba71e7b manual formating of Received: hdrs; changed hdr for local receival
markus schnalke <meillo@marmaro.de>
parents: 303
diff changeset
376 conf.host_name, PACKAGE, VERSION, geteuid(),
289
bb3005ce0837 reformating of code
markus schnalke <meillo@marmaro.de>
parents: 276
diff changeset
377 msg->uid, for_string ? for_string : "", rec_timestamp());
102
f4719cffc48c removed the ACC_NO_RECVD_HDR because it is never set
meillo@marmaro.de
parents: 25
diff changeset
378 } else {
f4719cffc48c removed the ACC_NO_RECVD_HDR because it is never set
meillo@marmaro.de
parents: 25
diff changeset
379 /* received from remote */
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
380 #ifdef ENABLE_IDENT
102
f4719cffc48c removed the ACC_NO_RECVD_HDR because it is never set
meillo@marmaro.de
parents: 25
diff changeset
381 DEBUG(5) debugf("adding 'Received:' header (5)\n");
289
bb3005ce0837 reformating of code
markus schnalke <meillo@marmaro.de>
parents: 276
diff changeset
382 hdr = create_header(HEAD_RECEIVED,
304
d5ce2ba71e7b manual formating of Received: hdrs; changed hdr for local receival
markus schnalke <meillo@marmaro.de>
parents: 303
diff changeset
383 "Received: from %s (ident=%s)\n\tby %s with %s (%s %s)\n\tid %s%s; %s\n",
289
bb3005ce0837 reformating of code
markus schnalke <meillo@marmaro.de>
parents: 276
diff changeset
384 msg->received_host, msg->ident ? msg->ident : "unknown",
bb3005ce0837 reformating of code
markus schnalke <meillo@marmaro.de>
parents: 276
diff changeset
385 conf.host_name, prot_names[msg->received_prot], PACKAGE,
bb3005ce0837 reformating of code
markus schnalke <meillo@marmaro.de>
parents: 276
diff changeset
386 VERSION, msg->uid, for_string ? for_string : "",
bb3005ce0837 reformating of code
markus schnalke <meillo@marmaro.de>
parents: 276
diff changeset
387 rec_timestamp());
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
388 #else
289
bb3005ce0837 reformating of code
markus schnalke <meillo@marmaro.de>
parents: 276
diff changeset
389 hdr = create_header(HEAD_RECEIVED,
304
d5ce2ba71e7b manual formating of Received: hdrs; changed hdr for local receival
markus schnalke <meillo@marmaro.de>
parents: 303
diff changeset
390 "Received: from %s\n\tby %s with %s (%s %s)\n\tid %s%s; %s\n",
289
bb3005ce0837 reformating of code
markus schnalke <meillo@marmaro.de>
parents: 276
diff changeset
391 msg->received_host, conf.host_name,
bb3005ce0837 reformating of code
markus schnalke <meillo@marmaro.de>
parents: 276
diff changeset
392 prot_names[msg->received_prot], PACKAGE, VERSION,
bb3005ce0837 reformating of code
markus schnalke <meillo@marmaro.de>
parents: 276
diff changeset
393 msg->uid, for_string ? for_string : "", rec_timestamp());
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
394 #endif
102
f4719cffc48c removed the ACC_NO_RECVD_HDR because it is never set
meillo@marmaro.de
parents: 25
diff changeset
395 }
f4719cffc48c removed the ACC_NO_RECVD_HDR because it is never set
meillo@marmaro.de
parents: 25
diff changeset
396 msg->hdr_list = g_list_prepend(msg->hdr_list, hdr);
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
397
102
f4719cffc48c removed the ACC_NO_RECVD_HDR because it is never set
meillo@marmaro.de
parents: 25
diff changeset
398 if (for_string)
f4719cffc48c removed the ACC_NO_RECVD_HDR because it is never set
meillo@marmaro.de
parents: 25
diff changeset
399 g_free(for_string);
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
400
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
401 return AERR_OK;
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
402 }
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
403
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
404 accept_error
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
405 accept_message(FILE * in, message * msg, guint flags)
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
406 {
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
407 accept_error err;
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
408
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
409 err = accept_message_stream(in, msg, flags);
270
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
410 if (err == AERR_OK) {
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
411 err = accept_message_prepare(msg, flags);
270
0c44b239c7fe refactoring in the small
markus schnalke <meillo@marmaro.de>
parents: 269
diff changeset
412 }
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
413
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
414 return err;
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
415 }