Thread View: comp.bugs.2bsd
1 messages
1 total messages
Started by Steven M. Schultz
Sat, 07 Oct 1989 18:24
/etc/hosts and multiple addresses per host (2nd try)
Author: Steven M. Schultz
Date: Sat, 07 Oct 1989 18:24
Date: Sat, 07 Oct 1989 18:24
161 lines
4927 bytes
4927 bytes
Subject: /etc/hosts and multiple addresses (2nd try)
Index: lib/libc/net/hosttable/gethnamadr.c 2.10BSD
Description:
The /etc/hosts file does not correctly handle the
case where a host has more than one address - only the
first is returned when a gethostbyaddr() is performed.
Repeat-By:
Do a gethostbyname() on a host with multiple addresses, print the
addresses returned in h_addr_list, note there will be only one.
Fix:
Apply the patches below to gethostent.c and gethnamadr.c, replace
gethnamadr.o and gethostent.o in libc.a and libc_p.a.
install in /etc.
This is the second (and hopefully last) correction,
I blew it in the earlier patch to gethnamadr.c
The latest versions of rlogind(8) and rshd(8) were the reason
for making changes to mkhosts(8) - if a host has more than one
address, the authentication performed by rshd(8) and rlogind(8)
would fail.
It turns out that a static area is required after all.
To help save some D-space the maximum number of aliases is reduced
from 35 to 20 (still seems way too high - i've never seen more
than 5 or 6 aliases) the maximum line length is reduced to 160
from 256 and the address buffer in gethostent.c is down sized
as well.
*** gethnamadr.old Tue Aug 23 14:45:14 1988
--- gethnamadr.c Sat Oct 7 14:02:26 1989
***************
*** 15,26 ****
#include <ndbm.h>
#include <ctype.h>
! #define MAXALIASES 35
static struct hostent host;
static char *host_aliases[MAXALIASES];
! static char hostbuf[256+1];
! static char *host_addrs[2];
int h_errno;
--- 15,27 ----
#include <ndbm.h>
#include <ctype.h>
! #define MAXALIASES 20
! #define MAXADDRS 10
static struct hostent host;
+ static char hostbuf[256];
static char *host_aliases[MAXALIASES];
! static char *host_addrs[MAXADDRS];
int h_errno;
***************
*** 36,42 ****
datum key;
{
register char *cp, *tp, **ap;
! int naliases;
if (key.dptr == 0)
return ((struct hostent *)NULL);
--- 37,43 ----
datum key;
{
register char *cp, *tp, **ap;
! int naliases, naddrs;
if (key.dptr == 0)
return ((struct hostent *)NULL);
***************
*** 43,54 ****
key = dbm_fetch(_host_db, key);
if (key.dptr == 0)
return ((struct hostent *)NULL);
! cp = key.dptr;
! tp = hostbuf;
host.h_name = tp;
while (*tp++ = *cp++)
;
! bcopy(cp, (char *)&naliases, sizeof(int)); cp += sizeof (int);
for (ap = host_aliases; naliases > 0; naliases--) {
*ap++ = tp;
while (*tp++ = *cp++)
--- 44,56 ----
key = dbm_fetch(_host_db, key);
if (key.dptr == 0)
return ((struct hostent *)NULL);
! cp = key.dptr;
! tp = hostbuf;
host.h_name = tp;
while (*tp++ = *cp++)
;
! bcopy(cp, (char *)&naliases, sizeof(int));
! cp += sizeof (int);
for (ap = host_aliases; naliases > 0; naliases--) {
*ap++ = tp;
while (*tp++ = *cp++)
***************
*** 61,68 ****
bcopy(cp, (char *)&host.h_length, sizeof (int));
cp += sizeof (int);
host.h_addr_list = host_addrs;
! host.h_addr = tp;
! bcopy(cp, tp, host.h_length);
return (&host);
}
--- 63,78 ----
bcopy(cp, (char *)&host.h_length, sizeof (int));
cp += sizeof (int);
host.h_addr_list = host_addrs;
! naddrs = (key.dsize - (cp - key.dptr)) / host.h_length;
! if (naddrs > MAXADDRS)
! naddrs = MAXADDRS;
! for (ap = host_addrs; naddrs; naddrs--) {
! *ap++ = tp;
! bcopy(cp, tp, host.h_length);
! cp += host.h_length;
! tp += host.h_length;
! }
! *ap = (char *)NULL;
return (&host);
}
*** gethostent.old Sat Oct 7 14:08:14 1989
--- gethostent.c Sat Oct 7 14:03:41 1989
***************
*** 19,29 ****
/*
* Internet version.
*/
! #define MAXALIASES 35
! #define MAXADDRSIZE 14
static FILE *hostf = NULL;
! static char line[256+1];
static char hostaddr[MAXADDRSIZE];
static struct hostent host;
static char *host_aliases[MAXALIASES];
--- 19,29 ----
/*
* Internet version.
*/
! #define MAXALIASES 20
! #define MAXADDRSIZE (sizeof (u_long))
static FILE *hostf = NULL;
! static char line[160+1];
static char hostaddr[MAXADDRSIZE];
static struct hostent host;
static char *host_aliases[MAXALIASES];
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads