-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathqmail-require_auth.patch
57 lines (47 loc) · 1.94 KB
/
qmail-require_auth.patch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
--- qmail-1.03.orig/qmail-smtpd.c 2006-11-08 21:27:14.000000000 +0100
+++ qmail-1.03/qmail-smtpd.c 2006-11-08 23:26:45.000000000 +0100
@@ -57,6 +57,9 @@
unsigned int databytes = 0;
int timeout = 1200;
unsigned int spfbehavior = 0;
+unsigned int require_auth = 0;
+int flagauth = 0;
+
const char *protocol = "SMTP";
@@ -105,6 +108,8 @@
void die_control() { out("421 unable to read controls (#4.3.0)\r\n"); flush(); _exit(1); }
void die_ipme() { out("421 unable to figure out my IP addresses (#4.3.0)\r\n"); flush(); _exit(1); }
void straynewline() { out("451 See http://pobox.com/~djb/docs/smtplf.html.\r\n"); flush(); _exit(1); }
+void die_cannot_auth() { out("421 REQUIRE_AUTH set without valid AUTH program.\r\n"); flush(); _exit(1); }
+
void err_size() { out("552 sorry, that message size exceeds my databytes limit (#5.3.4)\r\n"); }
void err_bmf() { out("553 sorry, your envelope sender has been denied (#5.7.1)\r\n"); }
@@ -138,6 +143,7 @@
int err_authabrt() { out("501 auth exchange canceled (#5.0.0)\r\n"); return -1; }
int err_input() { out("501 malformed auth input (#5.5.4)\r\n"); return -1; }
void err_authfail() { out("535 authentication failed (#5.7.1)\r\n"); }
+int err_authfirst() { out("503 AUTH first (#5.5.1)\r\n"); }
stralloc greeting = {0};
stralloc spflocal = {0};
@@ -267,6 +273,9 @@
reply554 = env_get("REPLY554");
+ x = env_get("REQUIRE_AUTH");
+ if(x) { scan_ulong(x,&u); if (u>0) require_auth = 1; }
+
#ifdef TLS
if (env_get("SMTPS")) { smtps = 1; tls_init(); }
else
@@ -508,6 +517,7 @@
if (chkuser_sender (&addr) != CHKUSER_OK) { return; }
/* end chkuser code */
+ if (require_auth) if (!flagauth) { err_authfirst(); return; }
flagsize = 0;
flagbarfspf = 0;
mailfrom_parms(arg);
@@ -872,7 +882,6 @@
static stralloc slop = {0}; /* b64 challenge */
#endif
-int flagauth = 0;
char **childargs;
char ssauthbuf[512];
substdio ssauth = SUBSTDIO_FDBUF(safewrite,3,ssauthbuf,sizeof(ssauthbuf));