]> git.pld-linux.org Git - packages/sendmail.git/blame - sendmail-dtelnet.patch
multi sourc'o-plombo-sysconfigi ;)
[packages/sendmail.git] / sendmail-dtelnet.patch
CommitLineData
c99e5551 1diff -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,
13diff -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)
36diff -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))
64diff -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 */
76diff -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);
This page took 0.091213 seconds and 4 git commands to generate.