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