annotate src/smtp_in.c @ 91:3e7136221104

correct masqmail path in rmail script; remove docs on uninstall on install the correct path to the masqmail executable gets inserted into the rmail script now. now documentation, examples, and the templates are removed on uninstall. Empty directories are the only thing that may remain if one installs masqmail into an unusual path.
author meillo@marmaro.de
date Mon, 21 Jun 2010 09:40:16 +0200
parents 71ce3a1568e9
children 5ec5e6637049
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
80
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
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
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
23 /*
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
24 I always forget these rfc numbers:
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
25 RFC 821 (SMTP)
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
26 RFC 1869 (ESMTP)
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
27 RFC 1870 (ESMTP SIZE)
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
28 RFC 2197 (ESMTP PIPELINE)
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
29 RFC 2554 (ESMTP AUTH)
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
30 */
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
31
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
32 #ifdef ENABLE_SMTP_SERVER
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 smtp_cmd smtp_cmds[] = {
15
f671821d8222 code beautifying; 0 -> \0 if appropriate
meillo@marmaro.de
parents: 10
diff changeset
35 {SMTP_HELO, "HELO",},
f671821d8222 code beautifying; 0 -> \0 if appropriate
meillo@marmaro.de
parents: 10
diff changeset
36 {SMTP_EHLO, "EHLO",},
f671821d8222 code beautifying; 0 -> \0 if appropriate
meillo@marmaro.de
parents: 10
diff changeset
37 {SMTP_MAIL_FROM, "MAIL FROM:",},
f671821d8222 code beautifying; 0 -> \0 if appropriate
meillo@marmaro.de
parents: 10
diff changeset
38 {SMTP_RCPT_TO, "RCPT TO:",},
f671821d8222 code beautifying; 0 -> \0 if appropriate
meillo@marmaro.de
parents: 10
diff changeset
39 {SMTP_DATA, "DATA",},
f671821d8222 code beautifying; 0 -> \0 if appropriate
meillo@marmaro.de
parents: 10
diff changeset
40 {SMTP_QUIT, "QUIT",},
f671821d8222 code beautifying; 0 -> \0 if appropriate
meillo@marmaro.de
parents: 10
diff changeset
41 {SMTP_RSET, "RSET",},
f671821d8222 code beautifying; 0 -> \0 if appropriate
meillo@marmaro.de
parents: 10
diff changeset
42 {SMTP_NOOP, "NOOP",},
f671821d8222 code beautifying; 0 -> \0 if appropriate
meillo@marmaro.de
parents: 10
diff changeset
43 {SMTP_HELP, "HELP"},
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
44 };
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
45
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
46 static smtp_cmd_id
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
47 get_id(const gchar * line)
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
48 {
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
49 gint i;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
50 for (i = 0; i < SMTP_NUM_IDS; i++) {
80
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
51 if (strncasecmp(smtp_cmds[i].cmd, line, strlen(smtp_cmds[i].cmd)) == 0) {
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
52 return (smtp_cmd_id) i;
80
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
53 }
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
54 }
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
55 return SMTP_ERROR;
0
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
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
58 /* this is a quick hack: we expect the address to be syntactically correct
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
59 and containing the mailbox only:
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
60 */
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
61 static gboolean
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
62 get_address(gchar * line, gchar * addr)
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
63 {
80
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
64 gchar *p = line;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
65 gchar *q = addr;
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 /* skip MAIL FROM: and RCPT TO: */
80
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
68 while (*p && (*p != ':')) {
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
69 p++;
80
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
70 }
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
71 p++;
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
72
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
73 /* skip spaces: */
80
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
74 while (*p && isspace(*p)) {
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
75 p++;
80
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
76 }
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
77
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
78 /* get address: */
80
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
79 while (*p && !isspace(*p) && (q < addr + MAX_ADDRESS - 1)) {
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
80 *(q++) = *(p++);
80
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
81 }
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
82 *q = 0;
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
83
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
84 return TRUE;
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
85 }
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
86
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
87 static smtp_connection*
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
88 create_base(gchar * remote_host)
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
89 {
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
90 smtp_connection *base = g_malloc(sizeof(smtp_connection));
80
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
91 if (!base) {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
92 return NULL;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
93 }
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
94
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
95 base->remote_host = g_strdup(remote_host);
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
96
80
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
97 base->prot = PROT_SMTP;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
98 base->next_id = 0;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
99 base->helo_seen = 0;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
100 base->from_seen = 0;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
101 base->rcpt_seen = 0;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
102 base->msg = NULL;
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
103
80
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
104 return base;
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
105 }
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
106
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
107 static void
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
108 smtp_printf(FILE * out, gchar * fmt, ...)
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
109 {
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
110 va_list args;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
111 va_start(args, fmt);
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
112
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
113 DEBUG(4) {
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
114 gchar buf[256];
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
115 va_list args_copy;
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
116
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
117 va_copy(args_copy, args);
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
118 vsnprintf(buf, 255, fmt, args_copy);
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
119 va_end(args_copy);
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
120
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
121 debugf(">>>%s", buf);
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
122 }
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
123
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
124 vfprintf(out, fmt, args);
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
125 fflush(out);
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
126
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
127 va_end(args);
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
128 }
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
129
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
130 void
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
131 smtp_in(FILE * in, FILE * out, gchar * remote_host, gchar * ident)
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
132 {
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
133 gchar *buffer;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
134 smtp_cmd_id cmd_id;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
135 message *msg = NULL;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
136 smtp_connection *psc;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
137 int len;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
138
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
139 DEBUG(5) debugf("smtp_in entered, remote_host = %s\n", remote_host);
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
140
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
141 psc = create_base(remote_host);
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
142 psc->msg = msg;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
143
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
144 buffer = (gchar *) g_malloc(BUF_LEN);
80
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
145 if (!buffer) {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
146 /* this check is actually unneccessary as g_malloc()
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
147 aborts on failure */
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
148 return;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
149 }
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
150
80
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
151 /* send greeting string, containing ESMTP: */
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
152 smtp_printf(out, "220 %s MasqMail %s ESMTP\r\n", conf.host_name, VERSION);
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
153
80
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
154 while ((len = read_sockline(in, buffer, BUF_LEN, 5 * 60, READSOCKL_CHUG)) >= 0) {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
155 cmd_id = get_id(buffer);
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
156
80
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
157 switch (cmd_id) {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
158 case SMTP_EHLO:
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
159 psc->prot = PROT_ESMTP;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
160 /* fall through */
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
161 case SMTP_HELO:
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
162 psc->helo_seen = TRUE;
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
163
80
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
164 if (conf.defer_all) { /* I need this to debug delivery failures */
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
165 smtp_printf(out, "421 %s service temporarily unavailable.\r\n", conf.host_name);
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
166 break;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
167 }
80
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
168
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
169 if (psc->prot == PROT_ESMTP) {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
170 smtp_printf(out, "250-%s Nice to meet you with ESMTP\r\n", conf.host_name);
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
171 /* not yet: fprintf(out, "250-SIZE\r\n"); */
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
172 smtp_printf(out, "250-PIPELINING\r\n" "250 HELP\r\n");
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
173 } else {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
174 smtp_printf(out, "250 %s pretty old mailer, huh?\r\n", conf.host_name);
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
175 }
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
176 break;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
177
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
178 case SMTP_MAIL_FROM:
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
179 {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
180 gchar buf[MAX_ADDRESS];
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
181 address *addr;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
182
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
183 if (!psc->helo_seen) {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
184 smtp_printf(out, "503 need HELO or EHLO\r\n");
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
185 break;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
186 }
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
187 if (psc->from_seen) {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
188 smtp_printf(out, "503 MAIL FROM: already given.\r\n");
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
189 break;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
190 }
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
191
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
192 msg = create_message();
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
193 msg->received_host = remote_host ? g_strdup(remote_host) : NULL;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
194 msg->received_prot = psc->prot;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
195 msg->ident = ident ? g_strdup(ident) : NULL;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
196 /* get transfer id and increment for next one */
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
197 msg->transfer_id = (psc->next_id)++;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
198
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
199 get_address(buffer, buf);
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
200 if (remote_host) {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
201 addr = create_address(buf, TRUE);
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
202 } else {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
203 addr = create_address_qualified(buf, TRUE, conf.host_name);
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
204 }
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
205 if (!addr) {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
206 smtp_printf(out, "501 %s: syntax error.\r\n", buf);
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
207 } else if (!addr->domain) {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
208 smtp_printf(out, "501 return path must be qualified.\r\n", buf);
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
209 } else {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
210 psc->from_seen = TRUE;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
211 msg->return_path = addr;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
212 smtp_printf(out, "250 OK %s is a nice guy.\r\n", addr->address);
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
213 }
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
214 }
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
215 break;
80
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
216
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
217 case SMTP_RCPT_TO:
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
218 {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
219 char buf[MAX_ADDRESS];
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
220 address *addr;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
221
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
222 if (!psc->helo_seen) {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
223 smtp_printf(out, "503 need HELO or EHLO.\r\n");
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
224 break;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
225 }
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
226 if (!psc->from_seen) {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
227 smtp_printf(out, "503 need MAIL FROM: before RCPT TO:\r\n");
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
228 break;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
229 }
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
230
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
231 get_address(buffer, buf);
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
232 if (remote_host) {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
233 addr = create_address(buf, TRUE);
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
234 } else {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
235 addr = create_address_qualified(buf, TRUE, conf.host_name);
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
236 }
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
237 if (!addr) {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
238 smtp_printf(out, "501 %s: syntax error in address.\r\n", buf);
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
239 break;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
240 }
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
241 if (addr->local_part[0] == '|') {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
242 smtp_printf(out, "501 %s: no pipe allowed for SMTP connections\r\n", buf);
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
243 break;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
244 }
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
245 if (!addr->domain) {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
246 smtp_printf(out, "501 recipient address must be qualified.\r\n", buf);
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
247 break;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
248 }
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
249 gboolean do_relay = conf.do_relay;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
250 if (!do_relay) {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
251 do_relay = addr_is_local(msg->return_path);
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
252 if (!do_relay) {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
253 do_relay = addr_is_local(addr);
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
254 }
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
255 }
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
256 if (!do_relay) {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
257 smtp_printf(out, "550 relaying to %s denied.\r\n", addr_string(addr));
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
258 break;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
259 }
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
260 psc->rcpt_seen = TRUE;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
261 msg->rcpt_list = g_list_append(msg->rcpt_list, addr);
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
262 smtp_printf(out, "250 OK %s is our friend.\r\n", addr->address);
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
263 }
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
264 break;
80
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
265
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
266 case SMTP_DATA:
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
267 if (!psc->helo_seen) {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
268 smtp_printf(out, "503 need HELO or EHLO.\r\n");
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
269 break;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
270 }
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
271 if (!psc->rcpt_seen) {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
272 smtp_printf(out, "503 need RCPT TO: before DATA\r\n");
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
273 break;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
274 }
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
275 accept_error err;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
276
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
277 smtp_printf(out, "354 okay, and do not forget the dot\r\n");
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
278
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
279 err = accept_message(in, msg, conf.do_save_envelope_to ? ACC_SAVE_ENVELOPE_TO : 0);
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
280 if (err != AERR_OK) {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
281 if (err == AERR_TIMEOUT || err == AERR_EOF) {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
282 return;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
283 }
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
284 /* should never happen: */
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
285 smtp_printf(out, "451 Unknown error\r\n");
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
286 return;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
287 }
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
288
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
289
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
290 if (!spool_write(msg, TRUE)) {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
291 smtp_printf(out, "451 Could not write spool file\r\n");
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
292 return;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
293 }
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
294 pid_t pid;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
295 smtp_printf(out, "250 OK id=%s\r\n", msg->uid);
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
296
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
297 if (remote_host != NULL) {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
298 logwrite(LOG_NOTICE, "%s <= <%s@%s> host=%s with %s\n", msg->uid,
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
299 msg->return_path->local_part, msg->return_path->domain,
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
300 remote_host, prot_names[psc->prot]);
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
301 } else {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
302 logwrite(LOG_NOTICE, "%s <= <%s@%s> with %s\n", msg->uid,
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
303 msg->return_path->local_part, msg->return_path->domain,
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
304 prot_names[psc->prot]);
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
305 }
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
306
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
307 if (conf.do_queue) {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
308 DEBUG(1) debugf("queuing forced by configuration or option.\n");
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
309 } else {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
310 pid = fork();
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
311 if (pid == 0) {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
312 _exit(deliver(msg));
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
313 } else if (pid < 0) {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
314 logwrite(LOG_ALERT, "could not fork for delivery, id = %s", msg->uid);
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
315 }
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
316 }
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
317 psc->rcpt_seen = psc->from_seen = FALSE;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
318 destroy_message(msg);
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
319 msg = NULL;
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
320 break;
80
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
321
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
322 case SMTP_QUIT:
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
323 smtp_printf(out, "221 goodbye\r\n");
81
71ce3a1568e9 moved check for NULL into destroy_message()
meillo@marmaro.de
parents: 80
diff changeset
324 destroy_message(msg);
71ce3a1568e9 moved check for NULL into destroy_message()
meillo@marmaro.de
parents: 80
diff changeset
325 msg = NULL;
80
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
326 return;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
327
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
328 case SMTP_RSET:
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
329 psc->from_seen = psc->rcpt_seen = FALSE;
81
71ce3a1568e9 moved check for NULL into destroy_message()
meillo@marmaro.de
parents: 80
diff changeset
330 destroy_message(msg);
71ce3a1568e9 moved check for NULL into destroy_message()
meillo@marmaro.de
parents: 80
diff changeset
331 msg = NULL;
80
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
332 smtp_printf(out, "250 OK\r\n");
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
333 break;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
334
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
335 case SMTP_NOOP:
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
336 smtp_printf(out, "250 OK\r\n");
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
337 break;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
338
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
339 case SMTP_HELP:
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
340 {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
341 int i;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
342
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
343 smtp_printf(out, "214-supported commands:\r\n");
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
344 for (i = 0; i < SMTP_NUM_IDS - 1; i++) {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
345 smtp_printf(out, "214-%s\r\n", smtp_cmds[i].cmd);
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
346 }
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
347 smtp_printf(out, "214 %s\r\n", smtp_cmds[i].cmd);
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
348 }
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
349 break;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
350
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
351 default:
80
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
352 smtp_printf(out, "501 command not recognized\r\n");
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
353 DEBUG(1) debugf("command not recognized, was '%s'\n", buffer);
10
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
354 break;
26e34ae9a3e3 changed indention and line wrapping to a more consistent style
meillo@marmaro.de
parents: 0
diff changeset
355 }
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
356 }
80
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
357 switch (len) {
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
358 case -3:
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
359 logwrite(LOG_NOTICE, "connection timed out\n");
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
360 break;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
361 case -2:
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
362 logwrite(LOG_NOTICE, "line overflow\n");
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
363 break;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
364 case -1:
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
365 logwrite(LOG_NOTICE, "received EOF\n");
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
366 break;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
367 default:
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
368 break;
e5090ac234cf refactoring plus one small bugfix
meillo@marmaro.de
parents: 15
diff changeset
369 }
0
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
370 }
08114f7dcc23 this is masqmail-0.2.21 from oliver kurth
meillo@marmaro.de
parents:
diff changeset
371 #endif