🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

1 total messages Started by Steven M. Schultz Sat, 07 Oct 1989 18:24
/etc/hosts and multiple addresses per host (2nd try)
#39
Author: Steven M. Schultz
Date: Sat, 07 Oct 1989 18:24
161 lines
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