Author: jim
Date: 2005-03-23 16:12:38 -0700 (Wed, 23 Mar 2005)
New Revision: 891

Added:
   trunk/inetutils/inetutils-1.4.2-daemon_fixes-1.patch
Log:
Added: inetutils-1.4.2-daemon_fixes-1.patch

Added: trunk/inetutils/inetutils-1.4.2-daemon_fixes-1.patch
===================================================================
--- trunk/inetutils/inetutils-1.4.2-daemon_fixes-1.patch        2005-03-23 
21:36:30 UTC (rev 890)
+++ trunk/inetutils/inetutils-1.4.2-daemon_fixes-1.patch        2005-03-23 
23:12:38 UTC (rev 891)
@@ -0,0 +1,166 @@
+Submitted By:            Randy McMurchy <randy_at_linuxfromscratch_dot_org>
+Date:                    2005-03-23
+Initial Package Version: 1.4.2
+Upstream Status:         Not sure
+Origin:                  Internet (URL's are now lost)
+Description:             Fix the rexecd daemon so that it understands shadow
+                         passwords. Fix the rshd daemon so that it properly
+                         resolves hostnames.
+
+diff -Naur inetutils-1.4.2-orig/rexecd/rexecd.c inetutils-1.4.2/rexecd/rexecd.c
+--- inetutils-1.4.2-orig/rexecd/rexecd.c       2002-12-11 12:38:00.000000000 
+0000
++++ inetutils-1.4.2/rexecd/rexecd.c    2005-02-22 19:53:44.146962264 +0000
+@@ -79,6 +79,10 @@
+ #include <varargs.h>
+ #endif
+ 
++#ifdef HAVE_SHADOW_H
++#include <shadow.h>
++#endif
++
+ void error __P ((const char *fmt, ...));
+ /*
+  * remote execute server:
+@@ -127,6 +131,10 @@
+       char *cmdbuf, *cp, *namep;
+       char *user, *pass;
+       struct passwd *pwd;
++#ifdef HAVE_SHADOW_H
++      struct spwd *spwd;
++      char *pw_field;
++#endif
+       int s;
+       u_short port;
+       int pv[2], pid, cc;
+@@ -186,6 +194,24 @@
+               exit(1);
+       }
+       endpwent();
++
++#ifdef HAVE_SHADOW_H
++      // Get encrypted password from /etc/shadow if possible,
++      // else from /etc/passwd.
++      spwd = getspnam(user);
++      if (spwd) {
++              pw_field = spwd->sp_pwdp;
++      } else {
++              pw_field = pwd->pw_passwd;
++      }
++      if (*pw_field != '\0') {
++              namep = CRYPT (pass, pw_field);
++              if (strcmp(namep, pw_field)) {
++                      error("Password incorrect.\n");
++                      exit(1);
++              }
++      }
++#else
+       if (*pwd->pw_passwd != '\0') {
+               namep = CRYPT (pass, pwd->pw_passwd);
+               if (strcmp(namep, pwd->pw_passwd)) {
+@@ -193,6 +219,7 @@
+                       exit(1);
+               }
+       }
++#endif
+       write(STDERR_FILENO, "\0", 1);
+       if (port) {
+               pipe(pv);
+diff -Naur inetutils-1.4.2-orig/rshd/rshd.c inetutils-1.4.2/rshd/rshd.c
+--- inetutils-1.4.2-orig/rshd/rshd.c   2002-12-11 12:38:00.000000000 +0000
++++ inetutils-1.4.2/rshd/rshd.c        2005-02-22 19:54:33.162510768 +0000
+@@ -443,7 +443,7 @@
+       dup2 (sockfd, STDERR_FILENO);
+     }
+ 
+-  /* Get the "name" of the clent form its Internet address.
++  /* Get the "name" of the client form its Internet address.
+    * This is used for the autentication below
+    */
+   errorstr = NULL;
+@@ -457,52 +457,49 @@
+        * in a remote net; look up the name and check that this
+        * address corresponds to the name.
+        */
+-      hostname = strdup (hp->h_name);
++      const char *remotehost = strdup(hp->h_name);
+ #ifdef        KERBEROS
+       if (!use_kerberos)
+ #endif
+-      if (check_all || local_domain (hp->h_name))
++       if (! remotehost)
++           errorstr = "Out of memory\n";
++       else if (check_all || local_domain (remotehost))
+         {
+-          char *remotehost = (char *) alloca (strlen (hp->h_name) + 1);
+-          if (! remotehost)
+-            errorstr = "Out of memory\n";
+-          else
++           errorhost = remotehost;
++           hp = gethostbyname (remotehost);
++           if (hp == NULL)
+             {
+-              strcpy (remotehost, hp->h_name);
+-              errorhost = remotehost;
+-              hp = gethostbyname (remotehost);
+-              if (hp == NULL)
++               syslog (LOG_INFO,
++                       "Couldn't look up address for %s", remotehost);
++                       errorstr = "Couldn't look up address for your host 
(%s)\n";
++                       hostname = strdup(inet_ntoa(fromp->sin_addr));
++             }
++           else
++              {
++               for (; ; hp->h_addr_list++)
+                 {
+-                  syslog (LOG_INFO,
+-                          "Couldn't look up address for %s", remotehost);
+-                  errorstr = "Couldn't look up address for your host (%s)\n";
+-                  hostname = inet_ntoa (fromp->sin_addr);
++                   if (hp->h_addr_list[0] == NULL)
++                     {
++                       syslog (LOG_NOTICE,
++                               "Host addr %s not listed for host %s",
++                               inet_ntoa (fromp->sin_addr), hp->h_name);
++                       errorstr = "Host address mismatch for %s\n";
++                       hostname = strdup(inet_ntoa(fromp->sin_addr));
++                       break;
++                     }
++                   if (!memcmp (hp->h_addr_list[0],
++                               (caddr_t)&fromp->sin_addr,
++                               sizeof fromp->sin_addr))
++                     {
++                       hostname = strdup(hp->h_name);
++                       break; /* equal, OK */
++                     }
+                 }
+-              else
+-                for (; ; hp->h_addr_list++)
+-                  {
+-                    if (hp->h_addr_list[0] == NULL)
+-                      {
+-                        syslog (LOG_NOTICE,
+-                                "Host addr %s not listed for host %s",
+-                                inet_ntoa (fromp->sin_addr), hp->h_name);
+-                        errorstr = "Host address mismatch for %s\n";
+-                        hostname = inet_ntoa (fromp->sin_addr);
+-                        break;
+-                      }
+-                    if (!memcmp (hp->h_addr_list[0],
+-                                 (caddr_t)&fromp->sin_addr,
+-                                 sizeof fromp->sin_addr))
+-                      {
+-                        hostname = hp->h_name;
+-                        break; /* equal, OK */
+-                      }
+-                  }
+-            }
++              }
+         }
+     }
+   else
+-    errorhost = hostname = inet_ntoa (fromp->sin_addr);
++    errorhost = hostname = strdup(inet_ntoa(fromp->sin_addr));
+ 
+ #ifdef        KERBEROS
+   if (use_kerberos)
+

-- 
http://linuxfromscratch.org/mailman/listinfo/patches
FAQ: http://www.linuxfromscratch.org/faq/
Unsubscribe: See the above information page

Reply via email to