Some cleanup for my last patch.


-- 
H.J. Lu (hjl@gnu.org)
--
--- portmap_4/pmap_check.c.hostname	Wed May 10 10:23:35 2000
+++ portmap_4/pmap_check.c	Wed May 10 11:03:22 2000
@@ -35,6 +35,7 @@
 static char sccsid[] = "@(#) pmap_check.c 1.6 93/11/21 20:58:59";
 #endif
 #include <unistd.h>
+#include <string.h>
 #include <rpc/rpc.h>
 #include <rpc/pmap_prot.h>
 #include <syslog.h>
@@ -69,8 +70,6 @@ int     deny_severity = LOG_WARNING;
 /* coming from libwrap.a (tcp_wrappers) */
 extern int hosts_ctl(char *daemon, char *name, char *addr, char *user);
 
-#define	good_client(a) hosts_ctl("portmap", "", inet_ntoa(a->sin_addr), "")
-
 #define reserved_port(p) (IPPORT_RESERVED/2 < (p) && (p) < IPPORT_RESERVED)
 
 #define unreserved_port(p) (IPPORT_RESERVED <= (p) && (p) != NFS_PORT)
@@ -88,6 +87,59 @@ extern int hosts_ctl(char *daemon, char 
 
 #define log_client(addr, proc, prog) \
   logit(allow_severity, addr, proc, prog, "")
+
+#ifdef HOSTS_ACCESS
+static int
+good_client(addr)
+struct sockaddr_in *addr;
+{
+    struct hostent *hp;
+    char **sp;
+    char *tmpname;
+
+    /* Check the IP address first. */
+    if (hosts_ctl("portmap", "", inet_ntoa(addr->sin_addr), ""))
+	return 1;
+
+    /* Check the hostname. */
+    hp = gethostbyaddr ((const char *) &(addr->sin_addr),
+			sizeof (addr->sin_addr), AF_INET);
+
+    if (!hp)
+	return 0;
+
+    /* must make sure the hostent is authorative. */
+    tmpname = alloca (strlen (hp->h_name) + 1);
+    strcpy (tmpname, hp->h_name);
+    hp = gethostbyname(tmpname);
+    if (hp) {
+	/* now make sure the "addr->sin_addr" is on the list */
+	for (sp = hp->h_addr_list ; *sp ; sp++) {
+	    if (memcmp(*sp, &(addr->sin_addr), hp->h_length)==0)
+		break;
+	}
+	if (!*sp)
+	    /* it was a FAKE. */
+	    return 0;
+    }
+    else
+	   /* never heard of it. misconfigured DNS? */
+	   return 0;
+
+   /* Check the official name first. */
+   if (hosts_ctl("portmap", "", hp->h_name, ""))
+	return 1;
+
+   /* Check aliases. */
+   for (sp = hp->h_aliases; *sp ; sp++) {
+	if (hosts_ctl("portmap", "", *sp, ""))
+	    return 1;
+   }
+
+   /* No match */
+   return 0;
+}
+#endif
 
 /* check_startup - additional startup code */
 
