X-Git-Url: http://git.marmaro.de/?a=blobdiff_plain;f=zotnet%2Fmts%2Fclient.c;h=009595901fb9a5feaf0346381cd2b8fd78225deb;hb=278a48ef53b5dde10d7c88f67f51ce15ad11c0c0;hp=b9679e9a8d38df7390c9ef28b7df36c045d462cb;hpb=910f3846bb30636fe25bdc6e06e72d50c6779bd9;p=mmh diff --git a/zotnet/mts/client.c b/zotnet/mts/client.c index b9679e9..0095959 100644 --- a/zotnet/mts/client.c +++ b/zotnet/mts/client.c @@ -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;