]>
Commit | Line | Data |
---|---|---|
8efdcb48 JB |
1 | diff -Nur sendmail-8.11.0.orig/sendmail/conf.c sendmail-8.11.0/sendmail/conf.c |
2 | --- sendmail-8.11.0.orig/sendmail/conf.c Sat Jul 15 19:35:18 2000 | |
3 | +++ sendmail-8.11.0/sendmail/conf.c Sat Dec 23 00:58:26 2000 | |
4 | @@ -311,6 +311,8 @@ | |
c99e5551 | 5 | ColonOkInAddr = TRUE; |
6 | DontLockReadFiles = TRUE; | |
7 | DoubleBounceAddr = "postmaster"; | |
8 | + DetectTelnet = FALSE; | |
9 | + ExitOnTelnet = TRUE; | |
10 | MaxHeadersLength = MAXHDRSLEN; | |
8efdcb48 JB |
11 | MaxForwardEntries = 0; |
12 | #if SASL | |
13 | diff -Nur sendmail-8.11.0.orig/sendmail/err.c sendmail-8.11.0/sendmail/err.c | |
14 | --- sendmail-8.11.0.orig/sendmail/err.c Fri May 26 02:08:29 2000 | |
15 | +++ sendmail-8.11.0/sendmail/err.c Sat Dec 23 01:00:25 2000 | |
16 | @@ -786,15 +786,15 @@ | |
c99e5551 | 17 | (void) snprintf(eb, spaceleft, "%s... ", |
18 | shortenstring(to, MAXSHORTSTR)); | |
19 | spaceleft -= strlen(eb); | |
8efdcb48 JB |
20 | - while (*eb != '\0') |
21 | - *eb++ &= 0177; | |
22 | +/* while (*eb != '\0') | |
23 | + *eb++ &= 0177; */ | |
c99e5551 | 24 | } |
25 | ||
26 | /* output the message */ | |
27 | (void) vsnprintf(eb, spaceleft, fmt, ap); | |
28 | spaceleft -= strlen(eb); | |
29 | - while (*eb != '\0') | |
8efdcb48 | 30 | - *eb++ &= 0177; |
c99e5551 | 31 | +/* while (*eb != '\0') |
8efdcb48 | 32 | + *eb++ &= 0177; */ |
c99e5551 | 33 | |
34 | /* output the error code, if any */ | |
35 | if (eno != 0) | |
8efdcb48 JB |
36 | diff -Nur sendmail-8.11.0.orig/sendmail/readcf.c sendmail-8.11.0/sendmail/readcf.c |
37 | --- sendmail-8.11.0.orig/sendmail/readcf.c Wed Jul 12 18:44:09 2000 | |
38 | +++ sendmail-8.11.0/sendmail/readcf.c Sat Dec 23 01:08:28 2000 | |
39 | @@ -1709,6 +1709,10 @@ | |
40 | # endif /* _FFR_TLS_1 */ | |
41 | # define O_RANDFILE 0xc1 | |
42 | { "RandFile", O_RANDFILE, OI_NONE }, | |
43 | +#define O_DETECTTELNET 0xc2 | |
44 | + { "DetectTelnet", O_DETECTTELNET, OI_NONE }, | |
45 | +#define O_EXITONTELNET 0xc3 | |
46 | + { "ExitOnTelnet", O_EXITONTELNET, OI_NONE }, | |
47 | { NULL, '\0', OI_NONE } | |
48 | }; | |
49 | ||
50 | @@ -2943,6 +2947,14 @@ | |
51 | QueueFileMode = atooct(val) & 0777; | |
c99e5551 | 52 | break; |
8efdcb48 JB |
53 | #endif /* _FFR_QUEUE_FILE_MODE */ |
54 | + | |
c99e5551 | 55 | + case O_DETECTTELNET: /* detect telnet */ |
56 | + DetectTelnet = atobool(val); | |
57 | + break; | |
58 | + | |
59 | + case O_EXITONTELNET: /* exit if telnet detected */ | |
60 | + ExitOnTelnet = atobool(val); | |
61 | + break; | |
62 | ||
63 | default: | |
64 | if (tTd(37, 1)) | |
8efdcb48 JB |
65 | diff -Nur sendmail-8.11.0.orig/sendmail/sendmail.h sendmail-8.11.0/sendmail/sendmail.h |
66 | --- sendmail-8.11.0.orig/sendmail/sendmail.h Tue Jul 18 04:24:47 2000 | |
67 | +++ sendmail-8.11.0/sendmail/sendmail.h Sat Dec 23 01:12:30 2000 | |
68 | @@ -1682,6 +1682,8 @@ | |
69 | EXTERN bool UseErrorsTo; /* use Errors-To: header (back compat) */ | |
c99e5551 | 70 | EXTERN bool UseHesiod; /* using Hesiod -- interpret Hesiod errors */ |
8efdcb48 | 71 | EXTERN bool UseNameServer; /* using DNS -- interpret h_errno & MX RRs */ |
c99e5551 | 72 | +EXTERN bool DetectTelnet; /* force telnet detection on/off */ |
73 | +EXTERN bool ExitOnTelnet; /* exit if telnet detected */ | |
8efdcb48 JB |
74 | EXTERN char InetMode; /* default network for daemon mode */ |
75 | EXTERN char OpMode; /* operation mode, see below */ | |
76 | EXTERN char SpaceSub; /* substitution for <lwsp> */ | |
77 | diff -Nur sendmail-8.11.0.orig/sendmail/srvrsmtp.c sendmail-8.11.0/sendmail/srvrsmtp.c | |
78 | --- sendmail-8.11.0.orig/sendmail/srvrsmtp.c Wed Jul 19 22:21:35 2000 | |
79 | +++ sendmail-8.11.0/sendmail/srvrsmtp.c Sat Dec 23 01:41:30 2000 | |
80 | @@ -13,6 +13,7 @@ | |
81 | ||
c99e5551 | 82 | |
8efdcb48 | 83 | #include <sendmail.h> |
c99e5551 | 84 | +#include <arpa/telnet.h> |
85 | ||
8efdcb48 | 86 | #ifndef lint |
c99e5551 | 87 | # if SMTP |
8efdcb48 JB |
88 | @@ -207,6 +208,9 @@ |
89 | char *args[MAXSMTPARGS]; | |
c99e5551 | 90 | char inp[MAXLINE]; |
91 | char cmdbuf[MAXLINE]; | |
92 | + char telnet_request[] = {IAC, DO, TELOPT_SGA, 0}; | |
93 | + char telnet_response[] = {IAC, WILL, TELOPT_SGA, 0}; | |
94 | + char *telnet_tmp; | |
8efdcb48 JB |
95 | # if SASL |
96 | sasl_conn_t *conn; | |
97 | volatile bool sasl_ok; | |
98 | @@ -429,12 +433,8 @@ | |
c99e5551 | 99 | id = strchr(inp, ' '); |
100 | if (id == NULL) | |
101 | id = &inp[strlen(inp)]; | |
8efdcb48 JB |
102 | - if (p == NULL) |
103 | - snprintf(cmdbuf, sizeof cmdbuf, | |
104 | - "%s %%.*s ESMTP%%s", greetcode); | |
105 | - else | |
106 | - snprintf(cmdbuf, sizeof cmdbuf, | |
107 | - "%s-%%.*s ESMTP%%s", greetcode); | |
108 | + snprintf(cmdbuf,sizeof cmdbuf,"%s%c%%.*s ESMTP%%s%s", greetcode, | |
109 | + (p == NULL)? ' ' : '-', DetectTelnet ? telnet_request : ""); | |
110 | message(cmdbuf, id - inp, inp, id); | |
c99e5551 | 111 | |
112 | /* output remaining lines */ | |
8efdcb48 JB |
113 | @@ -520,6 +520,20 @@ |
114 | e->e_sendqueue = NULL; | |
115 | goto doquit; | |
c99e5551 | 116 | } |
117 | + | |
118 | + if (DetectTelnet && strlen(inp) >= 3) | |
8efdcb48 JB |
119 | + for (telnet_tmp = inp; *(telnet_tmp+2); telnet_tmp++) |
120 | + if (!strncmp(telnet_tmp, telnet_response, 3)) | |
121 | + { | |
122 | + sm_syslog(LOG_NOTICE, e->e_id, | |
123 | + "telnet detected from %.100s (%.100s)", | |
124 | + CurSmtpClient, anynet_ntoa(&RealHostAddr)); | |
125 | + if (ExitOnTelnet) | |
126 | + { | |
127 | + message("571 Unauthorized usage prohibited"); | |
128 | + goto doquit; | |
129 | + } | |
130 | + } | |
c99e5551 | 131 | |
132 | /* clean up end of line */ | |
133 | fixcrlf(inp, TRUE); |