23#define WHO "qmail-qmtpd"
25#define PORT_QMTPS "6209"
26#define QMTP_SIZE 200000000
27#define QMTP_TIMEOUT 3600
33void badproto() { logmsg(
WHO,100,ERROR,
"client does not talk QMTP"); }
52 if (r == -1)
if (errno == ETIMEDOUT) { buffer_flush(&
bo);
_exit(1); }
62 unsigned long len = 0;
65 buffer_get(&
bi,&ch,1);
66 if (ch ==
':')
return len;
69 len = 10 * len + (ch -
'0');
76 buffer_get(&
bi,&ch,1);
118 cipher = env_get(
"SSL_CIPHER");
120 cipherperm = env_get(
"SSL_CIPHER_ALGKEYSIZE");
122 cipherused = env_get(
"SSL_CIPHER_USEKEYSIZE");
124 clientdn = env_get(
"SSL_CLIENT_S_DN");
144 clientcn = env_get(
"SSL_CLIENT_S_DN_CN");
146 dnemail = env_get(
"SSL_CLIENT_S_DN_Email");
158 unsigned long biglen;
178 x = env_get(
"DATABYTES");
179 if (x) { scan_ulong(x,&u);
databytes = u; }
192 local = env_get(
"TCP6LOCALHOST");
219 buffer_get(&
bi,&ch,1);
221 if (ch == 10) flagdos = 0;
222 else if (ch == 13) flagdos = 1;
233 buffer_get(&
bi,&ch,1);
235 while ((ch == 13) && len) {
236 buffer_get(&
bi,&ch,1);
253 buffer_get(&
bi,&ch,1);
266 for (i = 0; i < len; ++i)
267 buffer_get(&
bi,&ch,1);
270 for (i = 0; i < len; ++i) {
271 buffer_get(&
bi,
buf + i,1);
272 if (!
buf[i]) flagsenderok = 0;
289 buffer_get(&
bi,&ch,1);
291 if (ch ==
':')
break;
294 len = 10 * len + (ch -
'0');
299 for (i = 0; i < len; ++i)
300 buffer_get(&
bi,&ch,1);
303 for (i = 0; i < len; ++i) {
304 buffer_get(&
bi,
buf + i,1);
329 if (!flagsenderok) result =
"D Unacceptable sender (#5.1.7)";
333 len = str_len(result);
337 len += fmt_str(
buf2 + len,
"K Ok ");
338 len += fmt_ulong(
buf2 + len,(
unsigned long)
now());
339 len += fmt_str(
buf2 + len,
" qp ");
340 len += fmt_ulong(
buf2 + len,
qp);
345 len = fmt_ulong(
buf,len);
347 len += fmt_str(
buf + len,result);
350 for (i = 0; i <
failure.len; ++i)
353 buffer_put(&
bo,
buf,len);
356 buffer_puts(&
bo,
"67:D Sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1),");
359 buffer_puts(&
bo,
"47:D Sorry, I can't handle that recipient (#5.1.3),");
368 else logmsg(
WHO,0,0,B(
"pid ",
strnum,
" done."));
int control_readint(unsigned long *i, char *fn)
int stralloc_copys(stralloc *, char const *)
ssize_t saferead(int fd, char *buf, int len)
unsigned int bytestooverflow
char outbuf[BUFSIZE_LINE]
ssize_t safewrite(int fd, char *buf, int len)
void qmail_to(struct qmail *, char *)
void qmail_from(struct qmail *, char *)
void qmail_put(struct qmail *, char *, int)
char * qmail_close(struct qmail *)
unsigned long qmail_qp(struct qmail *)
int qmail_open(struct qmail *)
void qmail_fail(struct qmail *)
int rcpthosts(char *, int)