Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 5 Feb 1997 15:28:57 +0100 (MET)
From:      Jean-Luc Richier <Jean-Luc.Richier@imag.fr>
To:        FreeBSD-gnats@freefall.freebsd.org, freebsd-bugs@freefall.freebsd.org
Subject:   Re: bin/2668: modification suggested for rarpd
Message-ID:  <199702051428.PAA14155@horus.imag.fr>
In-Reply-To: Jean-Luc Richier's message as of Feb  5, 15:22.

next in thread | raw e-mail | index | archive | help
In your mail dated 5 Feb  5:40 you write :
>Thank you very much for your problem report.
>It has the internal identification `bin/2668'.
>The individual assigned to look at your
>bug is: freebsd-bugs. 
>
>>Category:       bin
>>Responsible:    freebsd-bugs
>>Synopsis:       modification suggested for rarpd
>>Arrival-Date:   Wed Feb  5 05:40:02 PST 1997

First an apology : The previous message was about NetBSD and not FreeBSD.
This one is the correct.

Following a remark of Theo de Raadt <deraadt@theos.com> about a memory leak
in my suggested patch, here is a updated version for FreeBSD

I hope this will help you

*** rarpd.c.DIST	Wed Jun  5 04:57:54 1996
--- rarpd.c	Wed Feb  5 15:15:55 1997
***************
*** 114,119 ****
--- 114,122 ----
  void lookup_eaddr();
  void lookup_ipaddr();
  
+ int aflag = 0;		/* listen on "all" interfaces  */
+ int fflag = 0;		/* don't fork */
+ 
  void
  main(argc, argv)
  	int argc;
***************
*** 122,130 ****
  	int op, pid;
  	char *ifname, *hostname, *name;
  
- 	int aflag = 0;		/* listen on "all" interfaces  */
- 	int fflag = 0;		/* don't fork */
- 
  	extern char *optarg;
  	extern int optind, opterr;
  
--- 125,130 ----
***************
*** 183,195 ****
  	char *ifname;
  {
  	struct if_info *p;
  
  
  	p = (struct if_info *)malloc(sizeof(*p));
  	p->ii_next = iflist;
  	iflist = p;
  
! 	p->ii_fd = rarp_open(ifname);
  	lookup_eaddr(p->ii_fd, p->ii_eaddr);
  	lookup_ipaddr(ifname, &p->ii_ipaddr, &p->ii_netmask);
  }
--- 183,199 ----
  	char *ifname;
  {
  	struct if_info *p;
+ 	int fd;
  
+ 	fd = rarp_open(ifname);
+ 	if (fd < 0)
+ 		return;
  
  	p = (struct if_info *)malloc(sizeof(*p));
  	p->ii_next = iflist;
  	iflist = p;
  
! 	p->ii_next = fd;
  	lookup_eaddr(p->ii_fd, p->ii_eaddr);
  	lookup_ipaddr(ifname, &p->ii_ipaddr, &p->ii_netmask);
  }
***************
*** 305,310 ****
--- 309,318 ----
  	}
  	(void)strncpy(ifr.ifr_name, device, sizeof ifr.ifr_name);
  	if (ioctl(fd, BIOCSETIF, (caddr_t)&ifr) < 0) {
+ 		if (aflag) {	/* for -a skip not ethernet interfaces */
+ 			close(fd);
+ 			return -1;
+ 		}
  		syslog(LOG_ERR, "BIOCSETIF: %m");
  		exit(1);
  	}
***************
*** 317,322 ****
--- 325,334 ----
  		exit(1);
  	}
  	if (link_type != DLT_EN10MB) {
+ 		if (aflag) {	/* for -a skip not ethernet interfaces */
+ 			close(fd);
+ 			return -1;
+ 		}
  		syslog(LOG_ERR, "%s not on ethernet", device);
  		exit(1);
  	}

-- 
Jean-Luc RICHIER (Jean-Luc.Richier@Imag.Fr  richier@imag.fr)
Laboratoire Logiciels, Systemes et Reseaux (LSR-IMAG)
IMAG-CAMPUS, BP 53, F-38041 GRENOBLE Cedex 9
Tel : (33) 4 76 82 72 32 Fax : (33) 4 76 82 72 87



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199702051428.PAA14155>