char *PrincipalHostname();
#endif /* KPOP */
-#if defined(BIND) && !defined(h_addr)
+#if !defined(h_addr)
# define h_addr h_addr_list[0]
#endif
char *arguments[MAXARGS];
register struct hostent *hp;
register struct servent *sp;
-#ifndef BIND
+#ifndef HAVE_GETHOSTBYNAME
register struct netent *np;
#endif
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)) {
break;
}
}
-#endif
+#endif /* don't HAVE_GETHOSTBYNAME */
continue;
}
#ifdef KPOP
int rem;
+ struct hostent *hp2;
#endif /* KPOP */
for (ap = nets; ap < n1; ap++)
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;