]>
Commit | Line | Data |
---|---|---|
c99e5551 | 1 | diff -Nur sendmail-8.9.3/src/conf.c sendmail-8.9.3.pld/src/conf.c |
2 | --- sendmail-8.9.3/src/conf.c Wed Feb 10 18:23:27 1999 | |
3 | +++ sendmail-8.9.3.pld/src/conf.c Wed Feb 10 18:22:45 1999 | |
4 | @@ -284,6 +284,8 @@ | |
5 | ColonOkInAddr = TRUE; | |
6 | DontLockReadFiles = TRUE; | |
7 | DoubleBounceAddr = "postmaster"; | |
8 | + DetectTelnet = FALSE; | |
9 | + ExitOnTelnet = TRUE; | |
10 | MaxHeadersLength = MAXHDRSLEN; | |
11 | snprintf(buf, sizeof buf, "%s%sdead.letter", | |
12 | _PATH_VARTMP, | |
13 | diff -Nur sendmail-8.9.3/src/err.c sendmail-8.9.3.pld/src/err.c | |
14 | --- sendmail-8.9.3/src/err.c Tue Dec 29 18:42:18 1998 | |
15 | +++ sendmail-8.9.3.pld/src/err.c Wed Feb 10 18:18:33 1999 | |
16 | @@ -543,15 +543,18 @@ | |
17 | (void) snprintf(eb, spaceleft, "%s... ", | |
18 | shortenstring(to, MAXSHORTSTR)); | |
19 | spaceleft -= strlen(eb); | |
20 | + /* | |
21 | while (*eb != '\0') | |
22 | *eb++ &= 0177; | |
23 | + */ | |
24 | } | |
25 | ||
26 | /* output the message */ | |
27 | (void) vsnprintf(eb, spaceleft, fmt, ap); | |
28 | spaceleft -= strlen(eb); | |
29 | - while (*eb != '\0') | |
30 | +/* while (*eb != '\0') | |
31 | *eb++ &= 0177; | |
32 | +*/ | |
33 | ||
34 | /* output the error code, if any */ | |
35 | if (eno != 0) | |
36 | diff -Nur sendmail-8.9.3/src/readcf.c sendmail-8.9.3.pld/src/readcf.c | |
37 | --- sendmail-8.9.3/src/readcf.c Fri Jan 29 00:28:53 1999 | |
38 | +++ sendmail-8.9.3.pld/src/readcf.c Wed Feb 10 18:18:33 1999 | |
39 | @@ -1523,6 +1523,10 @@ | |
40 | #define O_MAXMIMEHDRLEN 0xa8 | |
41 | { "MaxMimeHeaderLength", O_MAXMIMEHDRLEN, FALSE }, | |
42 | #endif | |
43 | +#define O_DETECTTELNET 0xa6 | |
44 | + { "DetectTelnet", O_DETECTTELNET, TRUE }, | |
45 | +#define O_EXITONTELNET 0xa7 | |
46 | + { "ExitOnTelnet", O_EXITONTELNET, TRUE }, | |
47 | #if _FFR_CONTROL_SOCKET | |
48 | #define O_CONTROLSOCKET 0xa9 | |
49 | { "ControlSocketName", O_CONTROLSOCKET, FALSE }, | |
50 | @@ -2479,6 +2483,13 @@ | |
51 | printf("Warning: MaxHeadersLength: headers length limit set lower than %d\n", MAXHDRSLEN); | |
52 | break; | |
53 | #endif | |
54 | + case O_DETECTTELNET: /* detect telnet */ | |
55 | + DetectTelnet = atobool(val); | |
56 | + break; | |
57 | + | |
58 | + case O_EXITONTELNET: /* exit if telnet detected */ | |
59 | + ExitOnTelnet = atobool(val); | |
60 | + break; | |
61 | ||
62 | default: | |
63 | if (tTd(37, 1)) | |
64 | diff -Nur sendmail-8.9.3/src/sendmail.h sendmail-8.9.3.pld/src/sendmail.h | |
65 | --- sendmail-8.9.3/src/sendmail.h Wed Feb 10 18:23:27 1999 | |
66 | +++ sendmail-8.9.3.pld/src/sendmail.h Wed Feb 10 18:18:33 1999 | |
67 | @@ -1182,6 +1182,8 @@ | |
68 | EXTERN bool UseNameServer; /* using DNS -- interpret h_errno & MX RRs */ | |
69 | EXTERN bool UseHesiod; /* using Hesiod -- interpret Hesiod errors */ | |
70 | EXTERN bool SevenBitInput; /* force 7-bit data on input */ | |
71 | +EXTERN bool DetectTelnet; /* force telnet detection on/off */ | |
72 | +EXTERN bool ExitOnTelnet; /* exit if telnet detected */ | |
73 | EXTERN bool HasEightBits; /* has at least one eight bit input byte */ | |
74 | EXTERN bool ConfigFileRead; /* configuration file has been read */ | |
75 | EXTERN time_t SafeAlias; /* interval to wait until @:@ in alias file */ | |
76 | diff -Nur sendmail-8.9.3/src/srvrsmtp.c sendmail-8.9.3.pld/src/srvrsmtp.c | |
77 | --- sendmail-8.9.3/src/srvrsmtp.c Tue Dec 29 18:42:21 1998 | |
78 | +++ sendmail-8.9.3.pld/src/srvrsmtp.c Wed Feb 10 18:18:33 1999 | |
79 | @@ -21,6 +21,7 @@ | |
80 | #endif /* not lint */ | |
81 | ||
82 | # include <errno.h> | |
83 | +#include <arpa/telnet.h> | |
84 | ||
85 | # if SMTP | |
86 | ||
87 | @@ -139,6 +140,9 @@ | |
88 | QUEUE_CHAR *new; | |
89 | char inp[MAXLINE]; | |
90 | char cmdbuf[MAXLINE]; | |
91 | + char telnet_request[] = {IAC, DO, TELOPT_SGA, 0}; | |
92 | + char telnet_response[] = {IAC, WILL, TELOPT_SGA, 0}; | |
93 | + char *telnet_tmp; | |
94 | extern ENVELOPE BlankEnvelope; | |
95 | extern void help __P((char *)); | |
96 | extern void settime __P((ENVELOPE *)); | |
97 | @@ -182,8 +186,15 @@ | |
98 | id = strchr(inp, ' '); | |
99 | if (id == NULL) | |
100 | id = &inp[strlen(inp)]; | |
101 | - cmd = p == NULL ? "220 %.*s ESMTP%s" : "220-%.*s ESMTP%s"; | |
102 | - message(cmd, id - inp, inp, id); | |
103 | + if (DetectTelnet) | |
104 | + { | |
105 | + cmd = p == NULL ? "220 %.*s ESMTP%s%s" : "220-%.*s ESMTP%s%s"; | |
106 | + message(cmd, id - inp, inp, id, telnet_request); | |
107 | + } else | |
108 | + { | |
109 | + cmd = p == NULL ? "220 %.*s ESMTP%s" : "220-%.*s ESMTP%s"; | |
110 | + message(cmd, id - inp, inp, id); | |
111 | + } | |
112 | ||
113 | /* output remaining lines */ | |
114 | while ((id = p) != NULL && (p = strchr(id, '\n')) != NULL) | |
115 | @@ -253,6 +264,20 @@ | |
116 | ExitStat = EX_QUIT; | |
117 | finis(TRUE, ExitStat); | |
118 | } | |
119 | + | |
120 | + if (DetectTelnet && strlen(inp) >= 3) | |
121 | + for (telnet_tmp = inp; *(telnet_tmp+2); telnet_tmp++) | |
122 | + if (!strncmp(telnet_tmp, telnet_response, 3)) | |
123 | + { | |
124 | + sm_syslog(LOG_CRIT, e->e_id, | |
125 | + "telnet detected from from %.100s (%.100s)", | |
126 | + CurSmtpClient, anynet_ntoa(&RealHostAddr)); | |
127 | + if (ExitOnTelnet) | |
128 | + { | |
129 | + message("571 Unauthorized usage prohibited"); | |
130 | + goto doquit; | |
131 | + } | |
132 | + } | |
133 | ||
134 | /* clean up end of line */ | |
135 | fixcrlf(inp, TRUE); |