* Applied wesley.craig@umich.edu's KPOP patches. According to him:
[mmh] / zotnet / mts / client.c
index b9679e9..0095959 100644 (file)
@@ -61,7 +61,7 @@ char krb_realm[REALM_SZ];
 char *PrincipalHostname();
 #endif /* KPOP */
 
-#if defined(BIND) && !defined(h_addr)
+#if !defined(h_addr)
 # define h_addr h_addr_list[0]
 #endif
 
@@ -92,7 +92,7 @@ client (char *args, char *protocol, char *service, int rproto,
     char *arguments[MAXARGS];
     register struct hostent *hp;
     register struct servent *sp;
-#ifndef        BIND
+#ifndef        HAVE_GETHOSTBYNAME
     register struct netent *np;
 #endif
 
@@ -143,9 +143,18 @@ client (char *args, char *protocol, char *service, int rproto,
 
     for (ap = arguments; *ap; ap++) {
        if (**ap == '\01') {
-#ifndef        BIND
+/*
+ * the assumption here is that if the system doesn't have a
+ * gethostbyname() function, it must not use DNS. So we need to look
+ * into the /etc/hosts using gethostent(). There probablly aren't any
+ * systems still like this, but you never know. On every system I have
+ * access to, this section is ignored.
+ */
+#ifndef        HAVE_GETHOSTBYNAME
            if ((np = getnetbyname (*ap + 1))) {
+#ifdef HAVE_SETHOSTENT
                sethostent (1);
+#endif /* HAVE_SETHOSTENT */
                while ((hp = gethostent()))
                    if (np->n_addrtype == hp->h_addrtype
                            && inet (hp, np->n_net)) {
@@ -163,7 +172,7 @@ client (char *args, char *protocol, char *service, int rproto,
                        break;
                    }
            }
-#endif
+#endif /* don't HAVE_GETHOSTBYNAME */
            continue;
        }
 
@@ -199,6 +208,7 @@ rcaux (struct servent *sp, struct hostent *hp, int rproto,
 
 #ifdef KPOP
     int rem;
+    struct hostent *hp2;
 #endif /* KPOP */
 
     for (ap = nets; ap < n1; ap++)
@@ -247,7 +257,11 @@ rcaux (struct servent *sp, struct hostent *hp, int rproto,
     if (kservice) {    /* "pop" */
        char *instance;
 
-       if ((instance = strdup (hp->h_name)) == NULL) {
+       if (( hp2 = gethostbyaddr( hp->h_addr, hp->h_length, hp->h_addrtype ))
+               == NULL ) {
+           return NOTOK;
+       }
+       if ((instance = strdup (hp2->h_name)) == NULL) {
            close (sd);
            strncpy (response, "Out of memory.", len_response);
            return OOPS2;