Hi, Enable gcc warnings for arp, rarpd, ndp and fix findings.
ok? bluhm Index: usr.sbin/arp/Makefile =================================================================== RCS file: /data/mirror/openbsd/cvs/src/usr.sbin/arp/Makefile,v retrieving revision 1.3 diff -u -p -u -p -r1.3 Makefile --- usr.sbin/arp/Makefile 29 Mar 2005 23:56:30 -0000 1.3 +++ usr.sbin/arp/Makefile 19 Jul 2013 22:35:30 -0000 @@ -2,6 +2,7 @@ PROG= arp MAN= arp.4 arp.8 -CFLAGS+= -Wall + +WARNINGS= Yes .include <bsd.prog.mk> Index: usr.sbin/arp/arp.c =================================================================== RCS file: /data/mirror/openbsd/cvs/src/usr.sbin/arp/arp.c,v retrieving revision 1.52 diff -u -p -u -p -r1.52 arp.c --- usr.sbin/arp/arp.c 21 Mar 2013 04:43:17 -0000 1.52 +++ usr.sbin/arp/arp.c 19 Jul 2013 22:35:30 -0000 @@ -82,7 +82,7 @@ static pid_t pid; static int replace; /* replace entries when adding */ static int nflag; /* no reverse dns lookups */ static int aflag; /* do it for all entries */ -static int s = -1; +static int rsock = -1; static int rdomain = 0; extern int h_errno; @@ -238,11 +238,11 @@ file(char *name) void getsocket(void) { - if (s >= 0) + if (rsock >= 0) return; - s = socket(PF_ROUTE, SOCK_RAW, 0); - if (s < 0) - err(1, "socket"); + rsock = socket(PF_ROUTE, SOCK_RAW, 0); + if (rsock < 0) + err(1, "routing socket"); } struct sockaddr_in so_mask = { 8, 0, 0, { 0xffffffff } }; @@ -285,10 +285,10 @@ set(int argc, char *argv[]) doing_proxy = flags = export_only = expire_time = 0; while (argc-- > 0) { if (strncmp(argv[0], "temp", 4) == 0) { - struct timeval time; + struct timeval now; - gettimeofday(&time, 0); - expire_time = time.tv_sec + 20 * 60; + gettimeofday(&now, 0); + expire_time = now.tv_sec + 20 * 60; if (flags & RTF_PERMANENT_ARP) { /* temp or permanent, not both */ usage(); @@ -622,14 +622,14 @@ doit: l = rtm->rtm_msglen; rtm->rtm_seq = ++seq; rtm->rtm_type = cmd; - if (write(s, (char *)&m_rtmsg, l) < 0) + if (write(rsock, (char *)&m_rtmsg, l) < 0) if (errno != ESRCH || cmd != RTM_DELETE) { warn("writing to routing socket"); return (-1); } do { - l = read(s, (char *)&m_rtmsg, sizeof(m_rtmsg)); + l = read(rsock, (char *)&m_rtmsg, sizeof(m_rtmsg)); } while (l > 0 && (rtm->rtm_version != RTM_VERSION || rtm->rtm_seq != seq || rtm->rtm_pid != pid)); Index: usr.sbin/ndp/Makefile =================================================================== RCS file: /data/mirror/openbsd/cvs/src/usr.sbin/ndp/Makefile,v retrieving revision 1.2 diff -u -p -u -p -r1.2 Makefile --- usr.sbin/ndp/Makefile 25 Jan 2004 20:45:13 -0000 1.2 +++ usr.sbin/ndp/Makefile 19 Jul 2013 22:28:57 -0000 @@ -6,4 +6,6 @@ MAN= ndp.8 # ndp.4 CPPFLAGS+=-DINET6 -I${.CURDIR} +WARNINGS= Yes + .include <bsd.prog.mk> Index: usr.sbin/ndp/ndp.c =================================================================== RCS file: /data/mirror/openbsd/cvs/src/usr.sbin/ndp/ndp.c,v retrieving revision 1.48 diff -u -p -u -p -r1.48 ndp.c --- usr.sbin/ndp/ndp.c 19 Jul 2013 09:12:51 -0000 1.48 +++ usr.sbin/ndp/ndp.c 19 Jul 2013 22:22:26 -0000 @@ -116,7 +116,7 @@ static pid_t pid; static int nflag; static int tflag; static int32_t thiszone; /* time difference with gmt */ -static int s = -1; +static int rsock = -1; static int repeat = 0; char ntop_buf[INET6_ADDRSTRLEN]; /* inet_ntop() */ @@ -154,12 +154,11 @@ static char *rtpref_str[] = { }; #endif -int mode = 0; -char *arg = NULL; - int main(int argc, char *argv[]) { + char *arg = NULL; + int mode = 0; int ch; pid = getpid(); @@ -323,13 +322,11 @@ file(char *name) void getsocket(void) { - if (s < 0) { - s = socket(PF_ROUTE, SOCK_RAW, 0); - if (s < 0) { - err(1, "socket"); - /* NOTREACHED */ - } - } + if (rsock >= 0) + return; + rsock = socket(PF_ROUTE, SOCK_RAW, 0); + if (rsock < 0) + err(1, "routing socket"); } struct sockaddr_in6 so_mask = {sizeof(so_mask), AF_INET6 }; @@ -384,10 +381,10 @@ set(int argc, char **argv) flags = 0; while (argc-- > 0) { if (strncmp(argv[0], "temp", 4) == 0) { - struct timeval time; + struct timeval now; - gettimeofday(&time, 0); - expire_time = time.tv_sec + 20 * 60; + gettimeofday(&now, 0); + expire_time = now.tv_sec + 20 * 60; } else if (strncmp(argv[0], "proxy", 5) == 0) flags |= RTF_ANNOUNCE; argv++; @@ -546,12 +543,12 @@ dump(struct in6_addr *addr, int cflag) { int mib[6]; size_t needed; - char *lim, *buf = NULL, *next; + char *lim = NULL, *buf = NULL, *next; struct rt_msghdr *rtm; struct sockaddr_in6 *sin; struct sockaddr_dl *sdl; struct in6_nbrinfo *nbi; - struct timeval time; + struct timeval now; int addrwidth; int llwidth; int ifwidth; @@ -645,9 +642,9 @@ again:; #endif continue; } - gettimeofday(&time, 0); + gettimeofday(&now, 0); if (tflag) - ts_print(&time); + ts_print(&now); addrwidth = strlen(host_buf); if (addrwidth < W_ADDR) @@ -668,9 +665,9 @@ again:; /* Print neighbor discovery specific informations */ nbi = getnbrinfo(&sin->sin6_addr, sdl->sdl_index, 1); if (nbi) { - if (nbi->expire > time.tv_sec) { + if (nbi->expire > now.tv_sec) { printf(" %-9.9s", - sec2str(nbi->expire - time.tv_sec)); + sec2str(nbi->expire - now.tv_sec)); } else if (nbi->expire == 0) printf(" %-9.9s", "permanent"); else @@ -871,14 +868,14 @@ doit: l = rtm->rtm_msglen; rtm->rtm_seq = ++seq; rtm->rtm_type = cmd; - if ((rlen = write(s, (char *)&m_rtmsg, l)) < 0) { + if ((rlen = write(rsock, (char *)&m_rtmsg, l)) < 0) { if (errno != ESRCH || cmd != RTM_DELETE) { err(1, "writing to routing socket"); /* NOTREACHED */ } } do { - l = read(s, (char *)&m_rtmsg, sizeof(m_rtmsg)); + l = read(rsock, (char *)&m_rtmsg, sizeof(m_rtmsg)); } while (l > 0 && (rtm->rtm_version != RTM_VERSION || rtm->rtm_seq != seq || rtm->rtm_pid != pid)); if (l < 0) @@ -1011,7 +1008,7 @@ rtrlist(void) char *buf; struct in6_defrouter *p, *ep; size_t l; - struct timeval time; + struct timeval now; if (sysctl(mib, sizeof(mib) / sizeof(mib[0]), NULL, &l, NULL, 0) < 0) { err(1, "sysctl(ICMPV6CTL_ND6_DRLIST)"); @@ -1046,18 +1043,18 @@ rtrlist(void) rtpref = ((p->flags & ND_RA_FLAG_RTPREF_MASK) >> 3) & 0xff; printf(", pref=%s", rtpref_str[rtpref]); - gettimeofday(&time, 0); + gettimeofday(&now, 0); if (p->expire == 0) printf(", expire=Never\n"); else printf(", expire=%s\n", - sec2str(p->expire - time.tv_sec)); + sec2str(p->expire - now.tv_sec)); } free(buf); #else struct in6_drlist dr; int s, i; - struct timeval time; + struct timeval now; if ((s = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) { err(1, "socket"); @@ -1086,12 +1083,12 @@ rtrlist(void) printf(", flags=%s%s", DR.flags & ND_RA_FLAG_MANAGED ? "M" : "", DR.flags & ND_RA_FLAG_OTHER ? "O" : ""); - gettimeofday(&time, 0); + gettimeofday(&now, 0); if (DR.expire == 0) printf(", expire=Never\n"); else printf(", expire=%s\n", - sec2str(DR.expire - time.tv_sec)); + sec2str(DR.expire - now.tv_sec)); } #undef DR close(s); @@ -1107,7 +1104,7 @@ plist(void) struct in6_prefix *p, *ep, *n; struct sockaddr_in6 *advrtr; size_t l; - struct timeval time; + struct timeval now; const int niflags = NI_NUMERICHOST; int ninflags = nflag ? NI_NUMERICHOST : 0; char namebuf[NI_MAXHOST]; @@ -1138,7 +1135,7 @@ plist(void) printf("%s/%d if=%s\n", namebuf, p->prefixlen, if_indextoname(p->if_index, ifix_buf)); - gettimeofday(&time, 0); + gettimeofday(&now, 0); /* * meaning of fields, especially flags, is very different * by origin. notify the difference to the users. @@ -1164,9 +1161,9 @@ plist(void) printf(", pltime=%lu", (unsigned long)p->pltime); if (p->expire == 0) printf(", expire=Never"); - else if (p->expire >= time.tv_sec) + else if (p->expire >= now.tv_sec) printf(", expire=%s", - sec2str(p->expire - time.tv_sec)); + sec2str(p->expire - now.tv_sec)); else printf(", expired"); printf(", ref=%d", p->refcnt); @@ -1214,9 +1211,9 @@ plist(void) #else struct in6_prlist pr; int s, i; - struct timeval time; + struct timeval now; - gettimeofday(&time, 0); + gettimeofday(&now, 0); if ((s = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) { err(1, "socket"); @@ -1268,7 +1265,7 @@ plist(void) printf("%s/%d if=%s\n", namebuf, PR.prefixlen, if_indextoname(PR.if_index, ifix_buf)); - gettimeofday(&time, 0); + gettimeofday(&now, 0); /* * meaning of fields, especially flags, is very different * by origin. notify the difference to the users. @@ -1304,9 +1301,9 @@ plist(void) printf(", pltime=%lu", PR.pltime); if (PR.expire == 0) printf(", expire=Never"); - else if (PR.expire >= time.tv_sec) + else if (PR.expire >= now.tv_sec) printf(", expire=%s", - sec2str(PR.expire - time.tv_sec)); + sec2str(PR.expire - now.tv_sec)); else printf(", expired"); #ifdef NDPRF_ONLINK Index: usr.sbin/rarpd/Makefile =================================================================== RCS file: /data/mirror/openbsd/cvs/src/usr.sbin/rarpd/Makefile,v retrieving revision 1.6 diff -u -p -u -p -r1.6 Makefile --- usr.sbin/rarpd/Makefile 15 May 2003 14:52:12 -0000 1.6 +++ usr.sbin/rarpd/Makefile 19 Jul 2013 22:28:37 -0000 @@ -10,4 +10,6 @@ DPADD+= ${LIBUTIL} # to exist for a rarp reply to be sent. # CFLAGS+=-DREQUIRE_TFTPBOOT +WARNINGS= Yes + .include <bsd.prog.mk> Index: usr.sbin/rarpd/arptab.c =================================================================== RCS file: /data/mirror/openbsd/cvs/src/usr.sbin/rarpd/arptab.c,v retrieving revision 1.18 diff -u -p -u -p -r1.18 arptab.c --- usr.sbin/rarpd/arptab.c 27 Oct 2009 23:59:54 -0000 1.18 +++ usr.sbin/rarpd/arptab.c 19 Jul 2013 22:24:03 -0000 @@ -61,15 +61,7 @@ #include <err.h> static pid_t pid; -static int s = -1; - -void -getsocket(void) -{ - s = socket(PF_ROUTE, SOCK_RAW, 0); - if (s < 0) - err(1, "arp: socket"); -} +static int rsock = -1; struct sockaddr_in so_mask = {8, 0, 0, { 0xffffffff}}; struct sockaddr_inarp blank_sin = {sizeof(blank_sin), AF_INET }, sin_m; @@ -81,9 +73,20 @@ struct { char m_space[512]; } m_rtmsg; +void getsocket(void); int arptab_set(u_char *, u_int32_t); int rtmsg(int); +void +getsocket(void) +{ + if (rsock >= 0) + return; + rsock = socket(PF_ROUTE, SOCK_RAW, 0); + if (rsock < 0) + err(1, "routing socket"); +} + /* * Set an individual arp entry */ @@ -93,7 +96,7 @@ arptab_set(u_char *eaddr, u_int32_t host struct sockaddr_inarp *sin = &sin_m; struct rt_msghdr *rtm = &(m_rtmsg.m_rtm); struct sockaddr_dl *sdl; - struct timeval time; + struct timeval now; int rt; getsocket(); @@ -105,14 +108,14 @@ arptab_set(u_char *eaddr, u_int32_t host memcpy((u_char *)LLADDR(&sdl_m), (char *)eaddr, 6); sdl_m.sdl_alen = 6; doing_proxy = flags = export_only = expire_time = 0; - gettimeofday(&time, 0); - expire_time = time.tv_sec + 20 * 60; + gettimeofday(&now, 0); + expire_time = now.tv_sec + 20 * 60; tryagain: if (rtmsg(RTM_GET) < 0) { syslog(LOG_ERR,"%s: %m", inet_ntoa(sin->sin_addr)); - close(s); - s = -1; + close(rsock); + rsock = -1; return (1); } sin = (struct sockaddr_inarp *)((char *)rtm + rtm->rtm_hdrlen); @@ -134,15 +137,15 @@ tryagain: if (doing_proxy == 0) { syslog(LOG_ERR, "arptab_set: can only proxy for %s", inet_ntoa(sin->sin_addr)); - close(s); - s = -1; + close(rsock); + rsock = -1; return (1); } if (sin_m.sin_other & SIN_PROXY) { syslog(LOG_ERR, "arptab_set: proxy entry exists for non 802 device"); - close(s); - s = -1; + close(rsock); + rsock = -1; return(1); } sin_m.sin_other = SIN_PROXY; @@ -154,15 +157,15 @@ overwrite: syslog(LOG_ERR, "arptab_set: cannot intuit interface index and type for %s", inet_ntoa(sin->sin_addr)); - close(s); - s = -1; + close(rsock); + rsock = -1; return (1); } sdl_m.sdl_type = sdl->sdl_type; sdl_m.sdl_index = sdl->sdl_index; rt = rtmsg(RTM_ADD); - close(s); - s = -1; + close(rsock); + rsock = -1; return (rt); } @@ -218,14 +221,14 @@ doit: l = rtm->rtm_msglen; rtm->rtm_seq = ++seq; rtm->rtm_type = cmd; - if (write(s, (char *)&m_rtmsg, l) < 0) { + if (write(rsock, (char *)&m_rtmsg, l) < 0) { if (errno != ESRCH && errno != EEXIST) { syslog(LOG_ERR, "writing to routing socket: %m"); return (-1); } } do { - l = read(s, (char *)&m_rtmsg, sizeof(m_rtmsg)); + l = read(rsock, (char *)&m_rtmsg, sizeof(m_rtmsg)); } while (l > 0 && (rtm->rtm_version != RTM_VERSION || rtm->rtm_seq != seq || rtm->rtm_pid != pid)); if (l < 0) Index: usr.sbin/rarpd/rarpd.c =================================================================== RCS file: /data/mirror/openbsd/cvs/src/usr.sbin/rarpd/rarpd.c,v retrieving revision 1.53 diff -u -p -u -p -r1.53 rarpd.c --- usr.sbin/rarpd/rarpd.c 6 Apr 2012 18:03:52 -0000 1.53 +++ usr.sbin/rarpd/rarpd.c 19 Jul 2013 21:46:51 -0000 @@ -353,7 +353,7 @@ rarp_check(u_char *p, int len) (void) debug("got a packet"); - if (len < sizeof(*ep) + sizeof(*ap)) { + if (len < (int)sizeof(*ep) + (int)sizeof(*ap)) { error(NONFATAL, "truncated request"); return 0; } @@ -763,6 +763,7 @@ ipaddrtonetmask(u_int32_t addr) return IN_CLASSC_NET; error(FATAL, "unknown IP address class: %08X", addr); /* NOTREACHED */ + exit(1); /* silence gcc warning */ } void