]> git.pld-linux.org Git - packages/sendmail.git/blob - sendmail-dtelnet.patch
- added %verify flags for config files,
[packages/sendmail.git] / sendmail-dtelnet.patch
1 diff -Nur sendmail-8.12.0.orig/sendmail/conf.c sendmail-8.12.0/sendmail/conf.c
2 --- sendmail-8.12.0.orig/sendmail/conf.c        Wed Sep  5 00:43:02 2001
3 +++ sendmail-8.12.0/sendmail/conf.c     Mon Sep 24 10:01:52 2001
4 @@ -326,6 +326,8 @@
5         DontLockReadFiles = true;
6         DontProbeInterfaces = DPI_PROBEALL;
7         DoubleBounceAddr = "postmaster";
8 +       DetectTelnet = 0;
9 +       ExitOnTelnet = 1;
10         MaxHeadersLength = MAXHDRSLEN;
11         MaxForwardEntries = 0;
12         FastSplit = 1;
13 diff -Nur sendmail-8.12.0.orig/sendmail/err.c sendmail-8.12.0/sendmail/err.c
14 --- sendmail-8.12.0.orig/sendmail/err.c Wed Sep  5 00:43:03 2001
15 +++ sendmail-8.12.0/sendmail/err.c      Mon Sep 24 10:02:57 2001
16 @@ -909,15 +909,17 @@
17                 (void) sm_strlcpyn(eb, spaceleft, 2,
18                                    shortenstring(to, MAXSHORTSTR), "... ");
19                 spaceleft -= strlen(eb);
20 -               while (*eb != '\0')
21 -                       *eb++ &= 0177;
22 +               if(!DetectTelnet)
23 +                       while (*eb != '\0')
24 +                               *eb++ &= 0177;
25         }
26  
27         /* output the message */
28         (void) sm_vsnprintf(eb, spaceleft, fmt, ap);
29         spaceleft -= strlen(eb);
30 -       while (*eb != '\0')
31 -               *eb++ &= 0177;
32 +       if(!DetectTelnet)
33 +               while (*eb != '\0')
34 +                       *eb++ &= 0177;
35  
36         /* output the error code, if any */
37         if (eno != 0)
38 diff -Nur sendmail-8.12.0.orig/sendmail/readcf.c sendmail-8.12.0/sendmail/readcf.c
39 --- sendmail-8.12.0.orig/sendmail/readcf.c      Wed Sep  5 00:43:05 2001
40 +++ sendmail-8.12.0/sendmail/readcf.c   Mon Sep 24 10:06:43 2001
41 @@ -2039,6 +2039,10 @@
42  # define O_SOFTBOUNCE  0xcf
43         { "SoftBounce", O_SOFTBOUNCE,   OI_NONE },
44  #endif /* _FFR_SOFT_BOUNCE */
45 +#define O_DETECTTELNET 0xd0
46 +       { "DetectTelnet",       O_DETECTTELNET,         OI_NONE },
47 +#define O_EXITONTELNET 0xd1
48 +       { "ExitOnTelnet",       O_EXITONTELNET,         OI_NONE },
49         { NULL,                         '\0',           OI_NONE }
50  };
51  
52 @@ -3462,6 +3466,14 @@
53                 break;
54  #endif /* _FFR_SOFT_BOUNCE */
55  
56 +         case O_DETECTTELNET:          /* detect telnet */
57 +               DetectTelnet = atobool(val);
58 +               break;
59 +
60 +         case O_EXITONTELNET:          /* exit if telnet detected */
61 +               ExitOnTelnet = atobool(val);
62 +               break;
63 +
64           default:
65                 if (tTd(37, 1))
66                 {
67 diff -Nur sendmail-8.12.0.orig/sendmail/sendmail.h sendmail-8.12.0/sendmail/sendmail.h
68 --- sendmail-8.12.0.orig/sendmail/sendmail.h    Wed Sep  5 00:43:05 2001
69 +++ sendmail-8.12.0/sendmail/sendmail.h Mon Sep 24 10:01:52 2001
70 @@ -2074,6 +2074,8 @@
71  EXTERN bool    WorkAroundBrokenAAAA;   /* some nameservers return SERVFAIL on AAAA queries */
72  EXTERN bool    UseErrorsTo;    /* use Errors-To: header (back compat) */
73  EXTERN bool    UseNameServer;  /* using DNS -- interpret h_errno & MX RRs */
74 +EXTERN bool    DetectTelnet;   /* force telnet detection on/off */
75 +EXTERN bool    ExitOnTelnet;   /* exit if telnet detected */
76  EXTERN char    InetMode;               /* default network for daemon mode */
77  EXTERN char    OpMode;         /* operation mode, see below */
78  EXTERN char    SpaceSub;       /* substitution for <lwsp> */
79 diff -Nur sendmail-8.12.0.orig/sendmail/srvrsmtp.c sendmail-8.12.0/sendmail/srvrsmtp.c
80 --- sendmail-8.12.0.orig/sendmail/srvrsmtp.c    Wed Sep  5 00:43:06 2001
81 +++ sendmail-8.12.0/sendmail/srvrsmtp.c Mon Sep 24 10:09:38 2001
82 @@ -12,6 +12,7 @@
83   */
84  
85  #include <sendmail.h>
86 +#include <arpa/telnet.h>
87  #if MILTER
88  # include <libmilter/mfdef.h>
89  #endif /* MILTER */
90 @@ -369,6 +370,9 @@
91         char *args[MAXSMTPARGS];
92         char inp[MAXLINE];
93         char cmdbuf[MAXLINE];
94 +       char telnet_request[] = {IAC, DO, TELOPT_SGA, 0};
95 +       char telnet_response[] = {IAC, WILL, TELOPT_SGA, 0};
96 +       char *telnet_tmp;
97  #if SASL
98         sasl_conn_t *conn;
99         volatile bool sasl_ok;
100 @@ -666,12 +669,8 @@
101         id = strchr(inp, ' ');
102         if (id == NULL)
103                 id = &inp[strlen(inp)];
104 -       if (p == NULL)
105 -               (void) sm_snprintf(cmdbuf, sizeof cmdbuf,
106 -                        "%s %%.*s ESMTP%%s", greetcode);
107 -       else
108 -               (void) sm_snprintf(cmdbuf, sizeof cmdbuf,
109 -                        "%s-%%.*s ESMTP%%s", greetcode);
110 +       sm_snprintf(cmdbuf, sizeof cmdbuf, "%s%c%%.*s ESMTP%%s%s", greetcode,
111 +               (p == NULL) ? ' ' : '-', DetectTelnet ? telnet_request : "");
112         message(cmdbuf, (int) (id - inp), inp, id);
113  
114         /* output remaining lines */
115 @@ -764,6 +763,20 @@
116                         goto doquit;
117                 }
118  
119 +               if (DetectTelnet && strlen(inp) >= 3)
120 +                       for (telnet_tmp = inp; *(telnet_tmp+2); telnet_tmp++)
121 +                               if (!strncmp(telnet_tmp, telnet_response, 3))
122 +                               {
123 +                                       sm_syslog(LOG_NOTICE, e->e_id,
124 +                                         "telnet detected from %.100s (%.100s)",
125 +                                         CurSmtpClient, anynet_ntoa(&RealHostAddr));
126 +                                       if (ExitOnTelnet)
127 +                                       {
128 +                                               message("571 Unauthorized usage prohibited");
129 +                                               goto doquit;
130 +                                       }
131 +                               }
132 +
133  #if _FFR_ADAPTIVE_EOL
134                 if (first)
135                 {
This page took 0.062011 seconds and 3 git commands to generate.