]> git.pld-linux.org Git - packages/sendmail.git/blob - sendmail-dtelnet.patch
- updated smrsh-paths and dtelnet patches
[packages/sendmail.git] / sendmail-dtelnet.patch
1 diff -Nur sendmail-8.11.2.orig/sendmail/conf.c sendmail-8.11.2/sendmail/conf.c
2 --- sendmail-8.11.2.orig/sendmail/conf.c        Fri Dec 29 00:51:54 2000
3 +++ sendmail-8.11.2/sendmail/conf.c     Thu Jan  4 21:17:50 2001
4 @@ -317,6 +317,8 @@
5         ColonOkInAddr = TRUE;
6         DontLockReadFiles = TRUE;
7         DoubleBounceAddr = "postmaster";
8 +       DetectTelnet = FALSE;
9 +       ExitOnTelnet = TRUE;
10         MaxHeadersLength = MAXHDRSLEN;
11         MaxForwardEntries = 0;
12  #if SASL
13 diff -Nur sendmail-8.11.2.orig/sendmail/err.c sendmail-8.11.2/sendmail/err.c
14 --- sendmail-8.11.2.orig/sendmail/err.c Fri May 26 02:08:29 2000
15 +++ sendmail-8.11.2/sendmail/err.c      Thu Jan  4 21:19:05 2001
16 @@ -786,15 +786,17 @@
17                 (void) snprintf(eb, spaceleft, "%s... ",
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) 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.11.2.orig/sendmail/readcf.c sendmail-8.11.2/sendmail/readcf.c
39 --- sendmail-8.11.2.orig/sendmail/readcf.c      Tue Dec 19 04:18:30 2000
40 +++ sendmail-8.11.2/sendmail/readcf.c   Thu Jan  4 21:22:52 2001
41 @@ -1739,6 +1739,10 @@
42  # endif /* _FFR_TLS_1 */
43  # define O_RANDFILE    0xc1
44         { "RandFile",                   O_RANDFILE,     OI_NONE },
45 +#define O_DETECTTELNET 0xc2
46 +       { "DetectTelnet",               O_DETECTTELNET, OI_NONE },
47 +#define O_EXITONTELNET 0xc3
48 +       { "ExitOnTelnet",               O_EXITONTELNET, OI_NONE },
49         { NULL,                         '\0',           OI_NONE }
50  };
51  
52 @@ -2990,6 +2994,14 @@
53                 QueueFileMode = atooct(val) & 0777;
54                 break;
55  #endif /* _FFR_QUEUE_FILE_MODE */
56 +
57 +         case O_DETECTTELNET:          /* detect telnet */
58 +               DetectTelnet = atobool(val);
59 +               break;
60 +
61 +         case O_EXITONTELNET:          /* exit if telnet detected */
62 +               ExitOnTelnet = atobool(val);
63 +               break;
64  
65           default:
66                 if (tTd(37, 1))
67 diff -Nur sendmail-8.11.2.orig/sendmail/sendmail.h sendmail-8.11.2/sendmail/sendmail.h
68 --- sendmail-8.11.2.orig/sendmail/sendmail.h    Fri Dec 29 00:52:07 2000
69 +++ sendmail-8.11.2/sendmail/sendmail.h Thu Jan  4 21:24:09 2001
70 @@ -1695,6 +1695,8 @@
71  EXTERN bool    UseErrorsTo;    /* use Errors-To: header (back compat) */
72  EXTERN bool    UseHesiod;      /* using Hesiod -- interpret Hesiod errors */
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.11.2.orig/sendmail/srvrsmtp.c sendmail-8.11.2/sendmail/srvrsmtp.c
80 --- sendmail-8.11.2.orig/sendmail/srvrsmtp.c    Tue Dec 19 04:18:30 2000
81 +++ sendmail-8.11.2/sendmail/srvrsmtp.c Thu Jan  4 21:30:38 2001
82 @@ -13,6 +13,7 @@
83  
84  
85  #include <sendmail.h>
86 +#include <arpa/telnet.h>
87  
88  #ifndef lint
89  # if SMTP
90 @@ -214,6 +215,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 @@ -437,12 +441,8 @@
101         id = strchr(inp, ' ');
102         if (id == NULL)
103                 id = &inp[strlen(inp)];
104 -       if (p == NULL)
105 -               snprintf(cmdbuf, sizeof cmdbuf,
106 -                        "%s %%.*s ESMTP%%s", greetcode);
107 -       else
108 -               snprintf(cmdbuf, sizeof cmdbuf,
109 -                        "%s-%%.*s ESMTP%%s", greetcode);
110 +       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 @@ -528,6 +528,20 @@
116                                 e->e_sendqueue = NULL;
117                         goto doquit;
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_NOTICE, e->e_id,
125 +                                         "telnet detected 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.0662 seconds and 3 git commands to generate.