]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blob - src/patches/inetutils-1.4.2-daemon_fixes-1.patch
Merge branch 'master' of ssh://git.ipfire.org/srv/git/ipfire-2.x
[people/pmueller/ipfire-2.x.git] / src / patches / inetutils-1.4.2-daemon_fixes-1.patch
1 Submitted By: Randy McMurchy <randy_at_linuxfromscratch_dot_org>
2 Date: 2005-03-23
3 Initial Package Version: 1.4.2
4 Upstream Status: Not sure
5 Origin: Internet (URL's are now lost)
6 Description: Fix the rexecd daemon so that it understands shadow
7 passwords. Fix the rshd daemon so that it properly
8 resolves hostnames.
9
10 diff -Naur inetutils-1.4.2-orig/rexecd/rexecd.c inetutils-1.4.2/rexecd/rexecd.c
11 --- inetutils-1.4.2-orig/rexecd/rexecd.c 2002-12-11 12:38:00.000000000 +0000
12 +++ inetutils-1.4.2/rexecd/rexecd.c 2005-02-22 19:53:44.146962264 +0000
13 @@ -79,6 +79,10 @@
14 #include <varargs.h>
15 #endif
16
17 +#ifdef HAVE_SHADOW_H
18 +#include <shadow.h>
19 +#endif
20 +
21 void error __P ((const char *fmt, ...));
22 /*
23 * remote execute server:
24 @@ -127,6 +131,10 @@
25 char *cmdbuf, *cp, *namep;
26 char *user, *pass;
27 struct passwd *pwd;
28 +#ifdef HAVE_SHADOW_H
29 + struct spwd *spwd;
30 + char *pw_field;
31 +#endif
32 int s;
33 u_short port;
34 int pv[2], pid, cc;
35 @@ -186,6 +194,24 @@
36 exit(1);
37 }
38 endpwent();
39 +
40 +#ifdef HAVE_SHADOW_H
41 + // Get encrypted password from /etc/shadow if possible,
42 + // else from /etc/passwd.
43 + spwd = getspnam(user);
44 + if (spwd) {
45 + pw_field = spwd->sp_pwdp;
46 + } else {
47 + pw_field = pwd->pw_passwd;
48 + }
49 + if (*pw_field != '\0') {
50 + namep = CRYPT (pass, pw_field);
51 + if (strcmp(namep, pw_field)) {
52 + error("Password incorrect.\n");
53 + exit(1);
54 + }
55 + }
56 +#else
57 if (*pwd->pw_passwd != '\0') {
58 namep = CRYPT (pass, pwd->pw_passwd);
59 if (strcmp(namep, pwd->pw_passwd)) {
60 @@ -193,6 +219,7 @@
61 exit(1);
62 }
63 }
64 +#endif
65 write(STDERR_FILENO, "\0", 1);
66 if (port) {
67 pipe(pv);
68 diff -Naur inetutils-1.4.2-orig/rshd/rshd.c inetutils-1.4.2/rshd/rshd.c
69 --- inetutils-1.4.2-orig/rshd/rshd.c 2002-12-11 12:38:00.000000000 +0000
70 +++ inetutils-1.4.2/rshd/rshd.c 2005-02-22 19:54:33.162510768 +0000
71 @@ -443,7 +443,7 @@
72 dup2 (sockfd, STDERR_FILENO);
73 }
74
75 - /* Get the "name" of the clent form its Internet address.
76 + /* Get the "name" of the client form its Internet address.
77 * This is used for the autentication below
78 */
79 errorstr = NULL;
80 @@ -457,52 +457,49 @@
81 * in a remote net; look up the name and check that this
82 * address corresponds to the name.
83 */
84 - hostname = strdup (hp->h_name);
85 + const char *remotehost = strdup(hp->h_name);
86 #ifdef KERBEROS
87 if (!use_kerberos)
88 #endif
89 - if (check_all || local_domain (hp->h_name))
90 + if (! remotehost)
91 + errorstr = "Out of memory\n";
92 + else if (check_all || local_domain (remotehost))
93 {
94 - char *remotehost = (char *) alloca (strlen (hp->h_name) + 1);
95 - if (! remotehost)
96 - errorstr = "Out of memory\n";
97 - else
98 + errorhost = remotehost;
99 + hp = gethostbyname (remotehost);
100 + if (hp == NULL)
101 {
102 - strcpy (remotehost, hp->h_name);
103 - errorhost = remotehost;
104 - hp = gethostbyname (remotehost);
105 - if (hp == NULL)
106 + syslog (LOG_INFO,
107 + "Couldn't look up address for %s", remotehost);
108 + errorstr = "Couldn't look up address for your host (%s)\n";
109 + hostname = strdup(inet_ntoa(fromp->sin_addr));
110 + }
111 + else
112 + {
113 + for (; ; hp->h_addr_list++)
114 {
115 - syslog (LOG_INFO,
116 - "Couldn't look up address for %s", remotehost);
117 - errorstr = "Couldn't look up address for your host (%s)\n";
118 - hostname = inet_ntoa (fromp->sin_addr);
119 + if (hp->h_addr_list[0] == NULL)
120 + {
121 + syslog (LOG_NOTICE,
122 + "Host addr %s not listed for host %s",
123 + inet_ntoa (fromp->sin_addr), hp->h_name);
124 + errorstr = "Host address mismatch for %s\n";
125 + hostname = strdup(inet_ntoa(fromp->sin_addr));
126 + break;
127 + }
128 + if (!memcmp (hp->h_addr_list[0],
129 + (caddr_t)&fromp->sin_addr,
130 + sizeof fromp->sin_addr))
131 + {
132 + hostname = strdup(hp->h_name);
133 + break; /* equal, OK */
134 + }
135 }
136 - else
137 - for (; ; hp->h_addr_list++)
138 - {
139 - if (hp->h_addr_list[0] == NULL)
140 - {
141 - syslog (LOG_NOTICE,
142 - "Host addr %s not listed for host %s",
143 - inet_ntoa (fromp->sin_addr), hp->h_name);
144 - errorstr = "Host address mismatch for %s\n";
145 - hostname = inet_ntoa (fromp->sin_addr);
146 - break;
147 - }
148 - if (!memcmp (hp->h_addr_list[0],
149 - (caddr_t)&fromp->sin_addr,
150 - sizeof fromp->sin_addr))
151 - {
152 - hostname = hp->h_name;
153 - break; /* equal, OK */
154 - }
155 - }
156 - }
157 + }
158 }
159 }
160 else
161 - errorhost = hostname = inet_ntoa (fromp->sin_addr);
162 + errorhost = hostname = strdup(inet_ntoa(fromp->sin_addr));
163
164 #ifdef KERBEROS
165 if (use_kerberos)
166