Merge from vendor branch GDB:
[dragonfly.git] / contrib / sendmail-8.13.4 / contrib / rmail.oldsys.patch
1 From: Bill Gianopoulos <wag@sccux1.msd.ray.com>
2 Message-Id: <199405191527.LAA03463@sccux1.msd.ray.com>
3 Subject: Patch to rmail to elliminate need for snprintf
4 To: sendmail@CS.Berkeley.EDU
5 Date: Thu, 19 May 1994 11:27:16 -0400 (EDT)
6
7 I have written the following patch to rmail which removes the requirement
8 for snprintf while maintaining the protection from buffer overruns.  It also
9 fixes it to compile with compilers which don't understand ANSI function
10 prototypes.  Perhaps this should be included in the next version?
11
12 *** rmail/rmail.c.orig  Mon May 31 18:10:44 1993
13 --- rmail/rmail.c       Thu May 19 11:04:50 1994
14 ***************
15 *** 78,86 ****
16 --- 78,109 ----
17   #include <sysexits.h>
18   #include <unistd.h>
19   
20 + #ifdef __STDC__
21   void err __P((int, const char *, ...));
22   void usage __P((void));
23 + #else
24 + void err ();
25 + void usage ();
26 + #endif
27   
28 + #define strdup(s)     strcpy(xalloc(strlen(s) + 1), s)
29
30 + char *
31 + xalloc(sz)
32 +       register int sz;
33 + {
34 +       register char *p;
35
36 +       /* some systems can't handle size zero mallocs */
37 +       if (sz <= 0)
38 +               sz = 1;
39
40 +       p = malloc((unsigned) sz);
41 +       if (p == NULL)
42 +               err(EX_UNAVAILABLE, "Out of memory!!");
43 +       return (p);
44 + }
45
46   int
47   main(argc, argv)
48         int argc;
49 ***************
50 *** 230,250 ****
51         args[i++] = "-oi";              /* Ignore '.' on a line by itself. */
52   
53         if (from_sys != NULL) {         /* Set sender's host name. */
54 !               if (strchr(from_sys, '.') == NULL)
55 !                       (void)snprintf(buf, sizeof(buf),
56                             "-oMs%s.%s", from_sys, domain);
57 !               else
58 !                       (void)snprintf(buf, sizeof(buf), "-oMs%s", from_sys);
59                 if ((args[i++] = strdup(buf)) == NULL)
60                          err(EX_TEMPFAIL, NULL);
61         }
62                                         /* Set protocol used. */
63 !       (void)snprintf(buf, sizeof(buf), "-oMr%s", domain);
64         if ((args[i++] = strdup(buf)) == NULL)
65                 err(EX_TEMPFAIL, NULL);
66   
67                                         /* Set name of ``from'' person. */
68 !       (void)snprintf(buf, sizeof(buf), "-f%s%s",
69             from_path ? from_path : "", from_user);
70         if ((args[i++] = strdup(buf)) == NULL)
71                 err(EX_TEMPFAIL, NULL);
72 --- 253,285 ----
73         args[i++] = "-oi";              /* Ignore '.' on a line by itself. */
74   
75         if (from_sys != NULL) {         /* Set sender's host name. */
76 !               if (strchr(from_sys, '.') == NULL) {
77 !                       if ((strlen(from_sys) + strlen(domain) + 6)
78 !                           > sizeof(buf))
79 !                               err(EX_DATAERR, "sender hostname too long");
80 !                       (void)sprintf(buf,
81                             "-oMs%s.%s", from_sys, domain);
82 !               }
83 !               else {
84 !                       if ((strlen(from_sys) + 5) > sizeof(buf))
85 !                               err(EX_DATAERR ,"sender hostname too long");
86 !                       (void)sprintf(buf, "-oMs%s", from_sys);
87 !               }
88                 if ((args[i++] = strdup(buf)) == NULL)
89                          err(EX_TEMPFAIL, NULL);
90         }
91                                         /* Set protocol used. */
92 !       if ((strlen(domain) + 5) > sizeof(buf))
93 !               err(EX_DATAERR, "protocol name too long");
94 !       (void)sprintf(buf, "-oMr%s", domain);
95         if ((args[i++] = strdup(buf)) == NULL)
96                 err(EX_TEMPFAIL, NULL);
97   
98                                         /* Set name of ``from'' person. */
99 !       if (((from_path ? strlen(from_path) : 0) + strlen(from_user) + 3) 
100 !           > sizeof(buf))
101 !               err(EX_DATAERR, "from address too long");
102 !       (void)sprintf(buf, "-f%s%s",
103             from_path ? from_path : "", from_user);
104         if ((args[i++] = strdup(buf)) == NULL)
105                 err(EX_TEMPFAIL, NULL);
106 -- 
107 William A. Gianopoulos; Raytheon Missile Systems Division
108 wag@sccux1.msd.ray.com