From b0fb4800528cde06f3cd8c672f3851fa78b876ed Mon Sep 17 00:00:00 2001 From: roam Date: Mon, 11 Jun 2001 09:29:34 +0000 Subject: WARNS=2 cleanup, ANSIfication, manpage mdoc(7) cleanup. Once again, as explained in my messages to -audit, the ANSIfication comes as part of the preparation to add a new -d command-line flag to send output to stdout/stderr. That commit will come in a week, pending any further comments/objections. For those who have missed the -audit mails, it's at http://people.FreeBSD.org/~roam/bsd/rarpd/usr.sbin-rarpd-d.patch Asbestos suit: on ;) Reviewed by: dd, silence on -audit MFC after: 1 month --- usr.sbin/rarpd/Makefile | 2 + usr.sbin/rarpd/rarpd.8 | 33 ++++---- usr.sbin/rarpd/rarpd.c | 210 ++++++++++++++++++++++-------------------------- 3 files changed, 117 insertions(+), 128 deletions(-) (limited to 'usr.sbin') diff --git a/usr.sbin/rarpd/Makefile b/usr.sbin/rarpd/Makefile index 7cf9693..8f3042e 100644 --- a/usr.sbin/rarpd/Makefile +++ b/usr.sbin/rarpd/Makefile @@ -5,5 +5,7 @@ PROG= rarpd MAN= rarpd.8 CFLAGS+= -DTFTP_DIR=\"/tftpboot\" +WARNS?= 2 +FORMAT_AUDIT?= 1 .include diff --git a/usr.sbin/rarpd/rarpd.8 b/usr.sbin/rarpd/rarpd.8 index 07593b9..0511ecb 100644 --- a/usr.sbin/rarpd/rarpd.8 +++ b/usr.sbin/rarpd/rarpd.8 @@ -30,15 +30,15 @@ .Op Fl afsv .Op Ar interface .Sh DESCRIPTION -.Nm Rarpd +.Nm services Reverse ARP requests on the Ethernet connected to .Ar interface . -Upon receiving a request, +Upon receiving a request, .Nm -maps the target hardware address to an IP address via its name, which +maps the target hardware address to an IP address via its name, which must be present in both the .Xr ethers 5 -and +and .Xr hosts 5 databases. If a host does not exist in both databases, the translation cannot @@ -63,10 +63,10 @@ This requirement can be overridden with the .Fl s flag (see below). .Pp -In normal operation, +In normal operation, .Nm -forks a copy of itself and runs in -the background. Anomalies and errors are reported via +forks a copy of itself and runs in the background. +Anomalies and errors are reported via .Xr syslog 3 . .Pp The following options are available: @@ -93,9 +93,15 @@ Enable verbose sysloging. .El .Sh SEE ALSO .Xr bpf 4 -.Pp -RFC 903: Finlayson, R.; Mann, T.; Mogul, J.C.; Theimer, M. Reverse Address -Resolution Protocol. 1984 June; 4 p. +.Rs +.%A "Finlayson, R." +.%A "Mann, T." +.%A "Mogul, J.C." +.%A "Theimer, M." +.%T "RFC 903: Reverse Address Resolution Protocol" +.%D "June 1984" +.%O "4 p" +.Re .Sh AUTHORS .An -nosplit .An Craig Leres Aq leres@ee.lbl.gov @@ -103,14 +109,13 @@ and .An Steven McCanne Aq mccanne@ee.lbl.gov . Lawrence Berkeley Laboratory, University of California, Berkeley, CA. .Sh BUGS -.Nm Rarpd +.Nm can depend on the DNS to resolve the name discovered from .Pa /etc/ethers . If this name is not in the DNS but is in .Pa /etc/hosts , -the DNS lookup -can cause a delayed RARP response, so in this situation it is reccommended to -configure +the DNS lookup can cause a delayed RARP response, so in this situation +it is recommended to configure .Xr nsswitch.conf 5 to read .Pa /etc/hosts diff --git a/usr.sbin/rarpd/rarpd.c b/usr.sbin/rarpd/rarpd.c index 8e50090..6d7780d 100644 --- a/usr.sbin/rarpd/rarpd.c +++ b/usr.sbin/rarpd/rarpd.c @@ -46,6 +46,7 @@ static const char rcsid[] = #include #include +#include #include #include #include @@ -131,7 +132,7 @@ struct if_info *iflist; int verbose; /* verbose messages */ int s; /* inet datagram socket */ -char *tftp_dir = TFTP_DIR; /* tftp directory */ +const char *tftp_dir = TFTP_DIR; /* tftp directory */ #ifndef __P #define __P(protos) () @@ -141,29 +142,29 @@ char *tftp_dir = TFTP_DIR; /* tftp directory */ extern char *malloc(); extern void exit(); #endif -extern int ether_ntohost(); - -void init __P((char *)); -void init_one __P((struct ifreq *, char *)); -char *intoa __P((u_long)); -u_long ipaddrtonetmask __P((u_long)); -char *eatoa __P((u_char *)); -int rarp_bootable __P((u_long)); -void rarp_loop __P((void)); -int rarp_open __P((char *)); -void rarp_process __P((struct if_info *, u_char *, u_int)); -void rarp_reply __P((struct if_info *, struct ether_header *, u_long, u_int)); -void update_arptab __P((u_char *, u_long)); -static void usage __P((void)); + +int sflag; /* ignore /tftpboot */ static u_char zero[6]; -int sflag = 0; /* ignore /tftpboot */ +static int bpf_open(void); +static u_long choose_ipaddr(u_long **, u_long, u_long); +static char *eatoa(u_char *); +static void init(char *); +static void init_one(struct ifreq *, char *); +static char *intoa(u_long); +static u_long ipaddrtonetmask(u_long); +static int rarp_bootable(u_long); +static int rarp_check(u_char *, u_int); +static void rarp_loop(void); +static int rarp_open(char *); +static void rarp_process(struct if_info *, u_char *, u_int); +static void rarp_reply(struct if_info *, struct ether_header *, u_long, u_int); +static void update_arptab(u_char *, u_long); +static void usage(void); int -main(argc, argv) - int argc; - char **argv; +main(int argc, char *argv[]) { int op; char *ifname, *hostname, *name; @@ -231,12 +232,10 @@ main(argc, argv) * Add to the interface list. */ void -init_one(ifrp, target) - register struct ifreq *ifrp; - register char *target; +init_one(struct ifreq *ifrp, char *target) { - register struct if_info *ii; - register struct sockaddr_dl *ll; + struct if_info *ii; + struct sockaddr_dl *ll; int family; struct ifreq ifr; @@ -249,10 +248,10 @@ init_one(ifrp, target) #endif (void)strncpy(ifr.ifr_name, ifrp->ifr_name, sizeof(ifrp->ifr_name)); - if (ioctl(s, SIOCGIFFLAGS, (char *)&ifr) < 0) { + if (ioctl(s, SIOCGIFFLAGS, (char *)&ifr) == -1) { syslog(LOG_ERR, "SIOCGIFFLAGS: %.*s: %m", - sizeof(ifrp->ifr_name), ifrp->ifr_name); + (int)sizeof(ifrp->ifr_name), ifrp->ifr_name); exit(1); } if ((ifr.ifr_flags & IFF_UP) == 0 || @@ -295,13 +294,13 @@ init_one(ifrp, target) switch (family) { case AF_INET: - if (ioctl(s, SIOCGIFADDR, (char *)&ifr) < 0) { + if (ioctl(s, SIOCGIFADDR, (char *)&ifr) == -1) { syslog(LOG_ERR, "ipaddr SIOCGIFADDR: %s: %m", ii->ii_ifname); exit(1); } ii->ii_ipaddr = SATOSIN(&ifr.ifr_addr)->sin_addr.s_addr; - if (ioctl(s, SIOCGIFNETMASK, (char *)&ifr) < 0) { + if (ioctl(s, SIOCGIFNETMASK, (char *)&ifr) == -1) { syslog(LOG_ERR, "SIOCGIFNETMASK: %m"); exit(1); } @@ -312,7 +311,7 @@ init_one(ifrp, target) ii->ii_fd = rarp_open(ii->ii_ifname); #if BSD < 199100 /* Use BPF descriptor to get ethernet address. */ - if (ioctl(ii->ii_fd, SIOCGIFADDR, (char *)&ifr) < 0) { + if (ioctl(ii->ii_fd, SIOCGIFADDR, (char *)&ifr) == -1) { syslog(LOG_ERR, "eaddr SIOCGIFADDR: %s: %m", ii->ii_ifname); exit(1); @@ -337,23 +336,22 @@ init_one(ifrp, target) * point to point. */ void -init(target) - char *target; +init(char *target) { - register int n; - register struct ifreq *ifrp, *ifend; - register struct if_info *ii, *nii, *lii; + unsigned n; + struct ifreq *ifrp, *ifend; + struct if_info *ii, *nii, *lii; struct ifconf ifc; struct ifreq ibuf[16]; - if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { + if ((s = socket(AF_INET, SOCK_DGRAM, 0)) == -1) { syslog(LOG_ERR, "socket: %m"); exit(1); } ifc.ifc_len = sizeof ibuf; ifc.ifc_buf = (caddr_t)ibuf; - if (ioctl(s, SIOCGIFCONF, (char *)&ifc) < 0 || - (u_int)ifc.ifc_len < sizeof(struct ifreq)) { + if ((ioctl(s, SIOCGIFCONF, (char *)&ifc) == -1) || + ((u_int)ifc.ifc_len < sizeof(struct ifreq))) { syslog(LOG_ERR, "SIOCGIFCONF: %m"); exit(1); } @@ -393,20 +391,20 @@ init(target) /* Verbose stuff */ if (verbose) for (ii = iflist; ii != NULL; ii = ii->ii_next) - syslog(LOG_DEBUG, "%s %s 0x%08x %s", + syslog(LOG_DEBUG, "%s %s 0x%08lx %s", ii->ii_ifname, intoa(ntohl(ii->ii_ipaddr)), ntohl(ii->ii_netmask), eatoa(ii->ii_eaddr)); } -static void -usage() +void +usage(void) { (void)fprintf(stderr, "usage: rarpd [-afsv] [interface]\n"); exit(1); } -static int -bpf_open() +int +bpf_open(void) { int fd; int n = 0; @@ -418,9 +416,9 @@ bpf_open() do { (void)sprintf(device, "/dev/bpf%d", n++); fd = open(device, O_RDWR); - } while (fd < 0 && errno == EBUSY); + } while ((fd == -1) && (errno == EBUSY)); - if (fd < 0) { + if (fd == -1) { syslog(LOG_ERR, "%s: %m", device); exit(1); } @@ -432,8 +430,7 @@ bpf_open() * Set immediate mode, and set a filter that accepts only RARP requests. */ int -rarp_open(device) - char *device; +rarp_open(char *device) { int fd; struct ifreq ifr; @@ -459,12 +456,12 @@ rarp_open(device) * Set immediate mode so packets are processed as they arrive. */ immediate = 1; - if (ioctl(fd, BIOCIMMEDIATE, &immediate) < 0) { + if (ioctl(fd, BIOCIMMEDIATE, &immediate) == -1) { syslog(LOG_ERR, "BIOCIMMEDIATE: %m"); exit(1); } (void)strncpy(ifr.ifr_name, device, sizeof ifr.ifr_name); - if (ioctl(fd, BIOCSETIF, (caddr_t)&ifr) < 0) { + if (ioctl(fd, BIOCSETIF, (caddr_t)&ifr) == -1) { syslog(LOG_ERR, "BIOCSETIF: %m"); exit(1); } @@ -472,7 +469,7 @@ rarp_open(device) * Check that the data link layer is an Ethernet; this code won't * work with anything else. */ - if (ioctl(fd, BIOCGDLT, (caddr_t)&dlt) < 0) { + if (ioctl(fd, BIOCGDLT, (caddr_t)&dlt) == -1) { syslog(LOG_ERR, "BIOCGDLT: %m"); exit(1); } @@ -483,7 +480,7 @@ rarp_open(device) /* * Set filter program. */ - if (ioctl(fd, BIOCSETF, (caddr_t)&filter) < 0) { + if (ioctl(fd, BIOCSETF, (caddr_t)&filter) == -1) { syslog(LOG_ERR, "BIOCSETF: %m"); exit(1); } @@ -494,10 +491,8 @@ rarp_open(device) * Perform various sanity checks on the RARP request packet. Return * false on failure and log the reason. */ -static int -rarp_check(p, len) - u_char *p; - u_int len; +int +rarp_check(u_char *p, u_int len) { struct ether_header *ep = (struct ether_header *)p; struct ether_arp *ap = (struct ether_arp *)(p + sizeof(*ep)); @@ -540,7 +535,7 @@ rarp_check(p, len) * interfaces in 'iflist'. */ void -rarp_loop() +rarp_loop(void) { u_char *buf, *bp, *ep; int cc, fd; @@ -552,7 +547,7 @@ rarp_loop() syslog(LOG_ERR, "no interfaces"); exit(1); } - if (ioctl(iflist->ii_fd, BIOCGBLEN, (caddr_t)&bufsize) < 0) { + if (ioctl(iflist->ii_fd, BIOCGBLEN, (caddr_t)&bufsize) == -1) { syslog(LOG_ERR, "BIOCGBLEN: %m"); exit(1); } @@ -574,7 +569,7 @@ rarp_loop() maxfd = ii->ii_fd; } listeners = fds; - if (select(maxfd + 1, &listeners, NULL, NULL, NULL) < 0) { + if (select(maxfd + 1, &listeners, NULL, NULL, NULL) == -1) { /* Don't choke when we get ptraced */ if (errno == EINTR) continue; @@ -588,7 +583,7 @@ rarp_loop() again: cc = read(fd, (char *)buf, bufsize); /* Don't choke when we get ptraced */ - if (cc < 0 && errno == EINTR) + if ((cc == -1) && (errno == EINTR)) goto again; #if defined(SUNOS3) || defined(SUNOS4) /* @@ -596,7 +591,7 @@ rarp_loop() * file offset overflows and read fails with * EINVAL. The lseek() to 0 will fix things. */ - if (cc < 0) { + if (cc == -1) { if (errno == EINVAL && (long)(tell(fd) + bufsize) < 0) { (void)lseek(fd, 0, 0); @@ -612,7 +607,7 @@ rarp_loop() bp = buf; ep = bp + cc; while (bp < ep) { - register u_int caplen, hdrlen; + u_int caplen, hdrlen; caplen = bhp->bh_caplen; hdrlen = bhp->bh_hdrlen; @@ -631,15 +626,14 @@ rarp_loop() * configuration file. */ int -rarp_bootable(addr) - u_long addr; +rarp_bootable(u_long addr) { #ifdef HAVE_DIRENT_H - register struct dirent *dent; + struct dirent *dent; #else - register struct direct *dent; + struct direct *dent; #endif - register DIR *d; + DIR *d; char ipname[9]; static DIR *dd = NULL; @@ -674,10 +668,7 @@ rarp_bootable(addr) * of the address. */ u_long -choose_ipaddr(alist, net, netmask) - u_long **alist; - u_long net; - u_long netmask; +choose_ipaddr(u_long **alist, u_long net, u_long netmask) { for (; *alist; ++alist) if ((**alist & netmask) == net) @@ -690,10 +681,7 @@ choose_ipaddr(alist, net, netmask) * already been checked for validity. The reply is overlaid on the request. */ void -rarp_process(ii, pkt, len) - struct if_info *ii; - u_char *pkt; - u_int len; +rarp_process(struct if_info *ii, u_char *pkt, u_int len) { struct ether_header *ep; struct hostent *hp; @@ -702,7 +690,7 @@ rarp_process(ii, pkt, len) ep = (struct ether_header *)pkt; /* should this be arp_tha? */ - if (ether_ntohost(ename, &ep->ether_shost) != 0) { + if (ether_ntohost(ename, (struct ether_addr *)&ep->ether_shost) != 0) { syslog(LOG_ERR, "cannot map %s to name", eatoa(ep->ether_shost)); return; @@ -745,33 +733,35 @@ rarp_process(ii, pkt, len) * address of the guy being booted (he cannot answer the ARP). */ #if BSD >= 199200 -static struct sockaddr_inarp sin_inarp = { - sizeof(struct sockaddr_inarp), AF_INET +struct sockaddr_inarp sin_inarp = { + sizeof(struct sockaddr_inarp), AF_INET, 0, + {0}, + {0}, + 0, 0 }; -static struct sockaddr_dl sin_dl = { - sizeof(struct sockaddr_dl), AF_LINK, 0, IFT_ETHER, 0, 6 +struct sockaddr_dl sin_dl = { + sizeof(struct sockaddr_dl), AF_LINK, 0, IFT_ETHER, 0, 6, + 0, "", 0, {0} }; -static struct { +struct { struct rt_msghdr rthdr; char rtspace[512]; } rtmsg; void -update_arptab(ep, ipaddr) - u_char *ep; - u_long ipaddr; +update_arptab(u_char *ep, u_long ipaddr) { - register int cc; - register struct sockaddr_inarp *ar, *ar2; - register struct sockaddr_dl *ll, *ll2; - register struct rt_msghdr *rt; - register int xtype, xindex; + int cc; + struct sockaddr_inarp *ar, *ar2; + struct sockaddr_dl *ll, *ll2; + struct rt_msghdr *rt; + int xtype, xindex; static pid_t pid; int r; - static seq; + static int seq; r = socket(PF_ROUTE, SOCK_RAW, 0); - if (r < 0) { + if (r == -1) { syslog(LOG_ERR, "raw route socket: %m"); exit(1); } @@ -793,7 +783,7 @@ update_arptab(ep, ipaddr) bcopy(ar, ar2, sizeof(*ar)); rt->rtm_msglen = sizeof(*rt) + sizeof(*ar); errno = 0; - if (write(r, rt, rt->rtm_msglen) < 0 && errno != ESRCH) { + if ((write(r, rt, rt->rtm_msglen) == -1) && (errno != ESRCH)) { syslog(LOG_ERR, "rtmsg get write: %m"); close(r); return; @@ -801,7 +791,7 @@ update_arptab(ep, ipaddr) do { cc = read(r, rt, sizeof(rtmsg)); } while (cc > 0 && (rt->rtm_seq != seq || rt->rtm_pid != pid)); - if (cc < 0) { + if (cc == -1) { syslog(LOG_ERR, "rtmsg get read: %m"); close(r); return; @@ -813,7 +803,7 @@ update_arptab(ep, ipaddr) * directly connected network (the family is AF_INET in * this case). */ - syslog(LOG_ERR, "bogus link family (%d) wrong net for %08X?\n", + syslog(LOG_ERR, "bogus link family (%d) wrong net for %08lX?\n", ll2->sdl_family, ipaddr); close(r); return; @@ -840,7 +830,7 @@ update_arptab(ep, ipaddr) rt->rtm_msglen = sizeof(*rt) + sizeof(*ar2) + sizeof(*ll2); errno = 0; - if (write(r, rt, rt->rtm_msglen) < 0 && errno != EEXIST) { + if ((write(r, rt, rt->rtm_msglen) == -1) && (errno != EEXIST)) { syslog(LOG_ERR, "rtmsg add write: %m"); close(r); return; @@ -849,16 +839,14 @@ update_arptab(ep, ipaddr) cc = read(r, rt, sizeof(rtmsg)); } while (cc > 0 && (rt->rtm_seq != seq || rt->rtm_pid != pid)); close(r); - if (cc < 0) { + if (cc == -1) { syslog(LOG_ERR, "rtmsg add read: %m"); return; } } #else void -update_arptab(ep, ipaddr) - u_char *ep; - u_long ipaddr; +update_arptab(u_char *ep, u_long ipaddr) { struct arpreq request; struct sockaddr_in *sin; @@ -870,7 +858,7 @@ update_arptab(ep, ipaddr) request.arp_ha.sa_family = AF_UNSPEC; bcopy((char *)ep, (char *)request.arp_ha.sa_data, 6); - if (ioctl(s, SIOCSARP, (caddr_t)&request) < 0) + if (ioctl(s, SIOCSARP, (caddr_t)&request) == -1) syslog(LOG_ERR, "SIOCSARP: %m"); } #endif @@ -909,13 +897,10 @@ update_arptab(ep, ipaddr) * ARP request. */ void -rarp_reply(ii, ep, ipaddr, len) - struct if_info *ii; - struct ether_header *ep; - u_long ipaddr; - u_int len; +rarp_reply(struct if_info *ii, struct ether_header *ep, u_long ipaddr, + u_int len) { - int n; + u_int n; struct ether_arp *ap = (struct ether_arp *)(ep + 1); update_arptab((u_char *)&ap->arp_sha, ipaddr); @@ -953,8 +938,7 @@ rarp_reply(ii, ep, ipaddr, len) * SIOCGIFNETMASK doesn't work. */ u_long -ipaddrtonetmask(addr) - u_long addr; +ipaddrtonetmask(u_long addr) { addr = ntohl(addr); if (IN_CLASSA(addr)) @@ -963,7 +947,7 @@ ipaddrtonetmask(addr) return htonl(IN_CLASSB_NET); if (IN_CLASSC(addr)) return htonl(IN_CLASSC_NET); - syslog(LOG_DEBUG, "unknown IP address class: %08X", addr); + syslog(LOG_DEBUG, "unknown IP address class: %08lX", addr); return htonl(0xffffffff); } @@ -971,12 +955,11 @@ ipaddrtonetmask(addr) * A faster replacement for inet_ntoa(). */ char * -intoa(addr) - u_long addr; +intoa(u_long addr) { - register char *cp; - register u_int byte; - register int n; + char *cp; + u_int byte; + int n; static char buf[sizeof(".xxx.xxx.xxx.xxx")]; cp = &buf[sizeof buf]; @@ -1001,8 +984,7 @@ intoa(addr) } char * -eatoa(ea) - register u_char *ea; +eatoa(u_char *ea) { static char buf[sizeof("xx:xx:xx:xx:xx:xx")]; -- cgit v1.1