Module Name: src Committed By: ozaki-r Date: Wed Nov 11 07:48:41 UTC 2015
Modified Files: src/distrib/sets/lists/base: mi src/distrib/sets/lists/debug: mi src/usr.sbin/rtadvd: Makefile advcap.c config.c dump.c if.c rrenum.c rtadvd.c timer.c Log Message: Introduce rump.rtadvd It is used to write ATF tests for RA. >From s-yamaguchi@IIJ. To generate a diff of this commit: cvs rdiff -u -r1.1116 -r1.1117 src/distrib/sets/lists/base/mi cvs rdiff -u -r1.133 -r1.134 src/distrib/sets/lists/debug/mi cvs rdiff -u -r1.17 -r1.18 src/usr.sbin/rtadvd/Makefile cvs rdiff -u -r1.15 -r1.16 src/usr.sbin/rtadvd/advcap.c cvs rdiff -u -r1.34 -r1.35 src/usr.sbin/rtadvd/config.c cvs rdiff -u -r1.12 -r1.13 src/usr.sbin/rtadvd/dump.c \ src/usr.sbin/rtadvd/timer.c cvs rdiff -u -r1.23 -r1.24 src/usr.sbin/rtadvd/if.c cvs rdiff -u -r1.18 -r1.19 src/usr.sbin/rtadvd/rrenum.c cvs rdiff -u -r1.50 -r1.51 src/usr.sbin/rtadvd/rtadvd.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/distrib/sets/lists/base/mi diff -u src/distrib/sets/lists/base/mi:1.1116 src/distrib/sets/lists/base/mi:1.1117 --- src/distrib/sets/lists/base/mi:1.1116 Sun Nov 8 20:00:22 2015 +++ src/distrib/sets/lists/base/mi Wed Nov 11 07:48:41 2015 @@ -1,4 +1,4 @@ -# $NetBSD: mi,v 1.1116 2015/11/08 20:00:22 christos Exp $ +# $NetBSD: mi,v 1.1117 2015/11/11 07:48:41 ozaki-r Exp $ # # Note: Don't delete entries from here - mark them as "obsolete" instead, # unless otherwise stated below. @@ -1828,6 +1828,7 @@ ./usr/sbin/rpc.yppasswdd base-nis-bin yp ./usr/sbin/rpcbind base-rpcbind-bin ./usr/sbin/rtadvd base-router-bin use_inet6 +./usr/sbin/rump.rtadvd base-router-bin use_inet6,rump ./usr/sbin/rtquery base-netutil-bin ./usr/sbin/rtsold base-obsolete obsolete ./usr/sbin/rump.arp base-netutil-bin rump Index: src/distrib/sets/lists/debug/mi diff -u src/distrib/sets/lists/debug/mi:1.133 src/distrib/sets/lists/debug/mi:1.134 --- src/distrib/sets/lists/debug/mi:1.133 Sun Nov 8 20:00:22 2015 +++ src/distrib/sets/lists/debug/mi Wed Nov 11 07:48:41 2015 @@ -1,4 +1,4 @@ -# $NetBSD: mi,v 1.133 2015/11/08 20:00:22 christos Exp $ +# $NetBSD: mi,v 1.134 2015/11/11 07:48:41 ozaki-r Exp $ ./etc/mtree/set.debug comp-sys-root ./usr/lib comp-sys-usr compatdir ./usr/lib/i18n/libBIG5_g.a comp-c-debuglib debuglib,compatfile @@ -1199,6 +1199,7 @@ ./usr/libdata/debug/usr/sbin/rpc.yppasswdd.debug comp-nis-debug yp,debug ./usr/libdata/debug/usr/sbin/rpcbind.debug comp-rpcbind-debug debug ./usr/libdata/debug/usr/sbin/rtadvd.debug comp-router-debug use_inet6,debug +./usr/libdata/debug/usr/sbin/rump.rtadvd.debug comp-router-debug use_inet6,debug,rump ./usr/libdata/debug/usr/sbin/rtquery.debug comp-netutil-debug debug ./usr/libdata/debug/usr/sbin/rtsold.debug comp-obsolete obsolete ./usr/libdata/debug/usr/sbin/rump.arp.debug comp-netutil-debug debug,rump Index: src/usr.sbin/rtadvd/Makefile diff -u src/usr.sbin/rtadvd/Makefile:1.17 src/usr.sbin/rtadvd/Makefile:1.18 --- src/usr.sbin/rtadvd/Makefile:1.17 Fri Aug 10 12:10:30 2012 +++ src/usr.sbin/rtadvd/Makefile Wed Nov 11 07:48:41 2015 @@ -1,24 +1,31 @@ -# $NetBSD: Makefile,v 1.17 2012/08/10 12:10:30 joerg Exp $ +# $NetBSD: Makefile,v 1.18 2015/11/11 07:48:41 ozaki-r Exp $ WARNS?= 4 .include <bsd.own.mk> -USE_FORT?= yes # network server +USE_FORT?= yes # network server -PROG= rtadvd -SRCS= rtadvd.c rrenum.c advcap.c if.c config.c timer.c dump.c - -CPPFLAGS+=-DINET6 -MAN= rtadvd.8 rtadvd.conf.5 -LDADD+= -lutil -DPADD+= ${LIBUTIL} +RUMPPRG= rtadvd +SRCS= rtadvd.c rrenum.c advcap.c if.c config.c timer.c dump.c +MAN= rtadvd.8 rtadvd.conf.5 + +CPPFLAGS+= -DINET6 +LDADD+= -lutil +DPADD+= ${LIBUTIL} .if ${MKSHARE} != "no" FILESDIR= /usr/share/examples/rtadvd FILES= rtadvd.conf .endif +.PATH: ${.CURDIR}/../../lib/libc/net +RUMPSRCS= getifaddrs.c getnameinfo.c if_indextoname.c if_nametoindex.c +.if (${MKRUMP} != "no") +CPPFLAGS+= -DRUMP_ACTION +.endif + + .include <bsd.prog.mk> .if defined(HAVE_GCC) || defined(HAVE_LLVM) Index: src/usr.sbin/rtadvd/advcap.c diff -u src/usr.sbin/rtadvd/advcap.c:1.15 src/usr.sbin/rtadvd/advcap.c:1.16 --- src/usr.sbin/rtadvd/advcap.c:1.15 Fri Jun 5 15:41:59 2015 +++ src/usr.sbin/rtadvd/advcap.c Wed Nov 11 07:48:41 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: advcap.c,v 1.15 2015/06/05 15:41:59 roy Exp $ */ +/* $NetBSD: advcap.c,v 1.16 2015/11/11 07:48:41 ozaki-r Exp $ */ /* $KAME: advcap.c,v 1.11 2003/05/19 09:46:50 keiichi Exp $ */ /* @@ -46,6 +46,7 @@ #include <errno.h> #include <string.h> #include "pathnames.h" +#include "prog_ops.h" #ifndef __UNCONST #define __UNCONST(a) ((void *)(unsigned long)(const void *)(a)) @@ -159,7 +160,7 @@ getent(char *bp, char *name, char *cp) break; } if (cp >= bp + BUFSIZ) { - write(2,"Remcap entry too long\n", 23); + prog_write(2,"Remcap entry too long\n", 23); break; } else *cp++ = c; @@ -195,7 +196,7 @@ tnchktc(void) p = tbuf + strlen(tbuf) - 2; /* before the last colon */ while (*--p != ':') if (p < tbuf) { - write(2, "Bad remcap entry\n", 18); + prog_write(2, "Bad remcap entry\n", 18); return (0); } p++; @@ -208,7 +209,7 @@ tnchktc(void) q++; *q = 0; if (++hopcount > MAXHOP) { - write(2, "Infinite tc= loop\n", 18); + prog_write(2, "Infinite tc= loop\n", 18); return (0); } if (getent(tcbuf, tcname, remotefile) != 1) { @@ -218,7 +219,7 @@ tnchktc(void) ; l = p - holdtbuf + strlen(q); if (l > BUFSIZ) { - write(2, "Remcap entry too long\n", 23); + prog_write(2, "Remcap entry too long\n", 23); q[BUFSIZ - (p-holdtbuf)] = 0; } strcpy(p, q); Index: src/usr.sbin/rtadvd/config.c diff -u src/usr.sbin/rtadvd/config.c:1.34 src/usr.sbin/rtadvd/config.c:1.35 --- src/usr.sbin/rtadvd/config.c:1.34 Fri Jun 5 14:09:20 2015 +++ src/usr.sbin/rtadvd/config.c Wed Nov 11 07:48:41 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: config.c,v 1.34 2015/06/05 14:09:20 roy Exp $ */ +/* $NetBSD: config.c,v 1.35 2015/11/11 07:48:41 ozaki-r Exp $ */ /* $KAME: config.c,v 1.93 2005/10/17 14:40:02 suz Exp $ */ /* @@ -67,6 +67,7 @@ #include "timer.h" #include "if.h" #include "config.h" +#include "prog_ops.h" #ifndef __arraycount #define __arraycount(__x) (sizeof(__x) / sizeof(__x[0])) @@ -445,7 +446,7 @@ getconfig(const char *intface, int exith makeentry(entbuf, sizeof(entbuf), i, "vltimedecr"); if (agetflag(entbuf)) { struct timespec now; - clock_gettime(CLOCK_MONOTONIC, &now); + prog_clock_gettime(CLOCK_MONOTONIC, &now); pfx->vltimeexpire = now.tv_sec + pfx->validlifetime; } @@ -465,7 +466,7 @@ getconfig(const char *intface, int exith makeentry(entbuf, sizeof(entbuf), i, "pltimedecr"); if (agetflag(entbuf)) { struct timespec now; - clock_gettime(CLOCK_MONOTONIC, &now); + prog_clock_gettime(CLOCK_MONOTONIC, &now); pfx->pltimeexpire = now.tv_sec + pfx->preflifetime; } @@ -502,13 +503,13 @@ getconfig(const char *intface, int exith struct in6_ndireq ndi; int s; - if ((s = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) { + if ((s = prog_socket(AF_INET6, SOCK_DGRAM, 0)) < 0) { syslog(LOG_ERR, "<%s> socket: %m", __func__); goto errexit; } memset(&ndi, 0, sizeof(ndi)); strncpy(ndi.ifname, intface, IFNAMSIZ); - if (ioctl(s, SIOCGIFINFO_IN6, &ndi) < 0) { + if (prog_ioctl(s, SIOCGIFINFO_IN6, &ndi) < 0) { syslog(LOG_INFO, "<%s> ioctl:SIOCGIFINFO_IN6 at %s: %m", __func__, intface); } @@ -517,11 +518,11 @@ getconfig(const char *intface, int exith ndi.ndi.chlim = tmp->hoplimit; ndi.ndi.retrans = tmp->retranstimer; ndi.ndi.basereachable = tmp->reachabletime; - if (ioctl(s, SIOCSIFINFO_IN6, &ndi) < 0) { + if (prog_ioctl(s, SIOCSIFINFO_IN6, &ndi) < 0) { syslog(LOG_INFO, "<%s> ioctl:SIOCSIFINFO_IN6 at %s: %m", __func__, intface); } - close(s); + prog_close(s); } #endif @@ -1027,12 +1028,12 @@ init_prefix(struct in6_prefixreq *ipr) #if 0 int s; - if ((s = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) { + if ((s = prog_socket(AF_INET6, SOCK_DGRAM, 0)) < 0) { syslog(LOG_ERR, "<%s> socket: %m", __func__); exit(1); } - if (ioctl(s, SIOCGIFPREFIX_IN6, ipr) < 0) { + if (prog_ioctl(s, SIOCGIFPREFIX_IN6, ipr) < 0) { syslog(LOG_INFO, "<%s> ioctl:SIOCGIFPREFIX: %m", __func__); ipr->ipr_vltime = DEF_ADVVALIDLIFETIME; @@ -1049,11 +1050,11 @@ init_prefix(struct in6_prefixreq *ipr) "This should not happen if I am router", __func__, inet_ntop(AF_INET6, &ipr->ipr_prefix.sin6_addr, ntopbuf, sizeof(ntopbuf)), ipr->ipr_origin); - close(s); + prog_close(s); return 1; } - close(s); + prog_close(s); return 0; #else ipr->ipr_vltime = DEF_ADVVALIDLIFETIME; @@ -1218,7 +1219,7 @@ make_packet(struct rainfo *rainfo) vltime = 0; else { if (pfx->vltimeexpire || pfx->pltimeexpire) - clock_gettime(CLOCK_MONOTONIC, &now); + prog_clock_gettime(CLOCK_MONOTONIC, &now); if (pfx->vltimeexpire == 0) vltime = pfx->validlifetime; else @@ -1313,7 +1314,7 @@ getinet6sysctl(int code) size_t size; size = sizeof(value); - if (sysctl(mib, __arraycount(mib), &value, &size, NULL, 0) + if (prog_sysctl(mib, __arraycount(mib), &value, &size, NULL, 0) < 0) { syslog(LOG_ERR, "<%s>: failed to get ip6 sysctl(%d): %m", __func__, code); Index: src/usr.sbin/rtadvd/dump.c diff -u src/usr.sbin/rtadvd/dump.c:1.12 src/usr.sbin/rtadvd/dump.c:1.13 --- src/usr.sbin/rtadvd/dump.c:1.12 Fri Jun 5 14:09:20 2015 +++ src/usr.sbin/rtadvd/dump.c Wed Nov 11 07:48:41 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: dump.c,v 1.12 2015/06/05 14:09:20 roy Exp $ */ +/* $NetBSD: dump.c,v 1.13 2015/11/11 07:48:41 ozaki-r Exp $ */ /* $KAME: dump.c,v 1.34 2004/06/14 05:35:59 itojun Exp $ */ /* @@ -59,6 +59,7 @@ #include "timer.h" #include "if.h" #include "dump.h" +#include "prog_ops.h" static FILE *fp; @@ -101,7 +102,7 @@ if_dump(void) char prefixbuf[INET6_ADDRSTRLEN]; struct timespec now; - clock_gettime(CLOCK_MONOTONIC, &now); /* XXX: unused in most cases */ + prog_clock_gettime(CLOCK_MONOTONIC, &now); /* XXX: unused in most cases */ TAILQ_FOREACH(rai, &ralist, next) { fprintf(fp, "%s:\n", rai->ifname); Index: src/usr.sbin/rtadvd/timer.c diff -u src/usr.sbin/rtadvd/timer.c:1.12 src/usr.sbin/rtadvd/timer.c:1.13 --- src/usr.sbin/rtadvd/timer.c:1.12 Fri Jun 5 14:09:20 2015 +++ src/usr.sbin/rtadvd/timer.c Wed Nov 11 07:48:41 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: timer.c,v 1.12 2015/06/05 14:09:20 roy Exp $ */ +/* $NetBSD: timer.c,v 1.13 2015/11/11 07:48:41 ozaki-r Exp $ */ /* $KAME: timer.c,v 1.11 2005/04/14 06:22:35 suz Exp $ */ /* @@ -40,6 +40,7 @@ #include <string.h> #include <search.h> #include "timer.h" +#include "prog_ops.h" struct rtadvd_timer_head_t ra_timer = TAILQ_HEAD_INITIALIZER(ra_timer); static struct timespec tm_limit = { LONG_MAX, 1000000000L - 1 }; @@ -102,7 +103,7 @@ rtadvd_set_timer(struct timespec *tm, st struct timespec now; /* reset the timer */ - clock_gettime(CLOCK_MONOTONIC, &now); + prog_clock_gettime(CLOCK_MONOTONIC, &now); timespecadd(&now, tm, &timer->tm); /* upate the next expiration time */ @@ -122,7 +123,7 @@ rtadvd_check_timer(void) struct timespec now; struct rtadvd_timer *tm, *tmn; - clock_gettime(CLOCK_MONOTONIC, &now); + prog_clock_gettime(CLOCK_MONOTONIC, &now); tm_max = tm_limit; TAILQ_FOREACH_SAFE(tm, &ra_timer, next, tmn) { @@ -153,7 +154,7 @@ rtadvd_timer_rest(struct rtadvd_timer *t static struct timespec returnval; struct timespec now; - clock_gettime(CLOCK_MONOTONIC, &now); + prog_clock_gettime(CLOCK_MONOTONIC, &now); if (timespeccmp(&timer->tm, &now, <=)) { syslog(LOG_DEBUG, "<%s> a timer must be expired, but not yet", Index: src/usr.sbin/rtadvd/if.c diff -u src/usr.sbin/rtadvd/if.c:1.23 src/usr.sbin/rtadvd/if.c:1.24 --- src/usr.sbin/rtadvd/if.c:1.23 Fri Jun 5 15:41:59 2015 +++ src/usr.sbin/rtadvd/if.c Wed Nov 11 07:48:41 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: if.c,v 1.23 2015/06/05 15:41:59 roy Exp $ */ +/* $NetBSD: if.c,v 1.24 2015/11/11 07:48:41 ozaki-r Exp $ */ /* $KAME: if.c,v 1.36 2004/11/30 22:32:01 suz Exp $ */ /* @@ -55,6 +55,7 @@ #include "rtadvd.h" #include "if.h" +#include "prog_ops.h" #ifndef RT_ROUNDUP #define RT_ROUNDUP(a) \ @@ -111,17 +112,17 @@ if_getmtu(const char *name) struct ifreq ifr; int s, mtu; - if ((s = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) + if ((s = prog_socket(AF_INET6, SOCK_DGRAM, 0)) < 0) return 0; memset(&ifr, 0, sizeof(ifr)); ifr.ifr_addr.sa_family = AF_INET6; strncpy(ifr.ifr_name, name, sizeof(ifr.ifr_name)); - if (ioctl(s, SIOCGIFMTU, &ifr) != -1) + if (prog_ioctl(s, SIOCGIFMTU, &ifr) != -1) mtu = ifr.ifr_mtu; else mtu = 0; - close(s); + prog_close(s); return mtu; } @@ -133,20 +134,20 @@ if_getflags(int ifindex, int oifflags) struct ifreq ifr; int s; - if ((s = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) { + if ((s = prog_socket(AF_INET6, SOCK_DGRAM, 0)) < 0) { syslog(LOG_ERR, "<%s> socket: %m", __func__); return (oifflags & ~IFF_UP); } memset(&ifr, 0, sizeof(ifr)); if_indextoname(ifindex, ifr.ifr_name); - if (ioctl(s, SIOCGIFFLAGS, &ifr) < 0) { + if (prog_ioctl(s, SIOCGIFFLAGS, &ifr) < 0) { syslog(LOG_ERR, "<%s> ioctl:SIOCGIFFLAGS: failed for %s", __func__, ifr.ifr_name); - close(s); + prog_close(s); return (oifflags & ~IFF_UP); } - close(s); + prog_close(s); return (ifr.ifr_flags); } Index: src/usr.sbin/rtadvd/rrenum.c diff -u src/usr.sbin/rtadvd/rrenum.c:1.18 src/usr.sbin/rtadvd/rrenum.c:1.19 --- src/usr.sbin/rtadvd/rrenum.c:1.18 Fri Jun 5 15:41:59 2015 +++ src/usr.sbin/rtadvd/rrenum.c Wed Nov 11 07:48:41 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: rrenum.c,v 1.18 2015/06/05 15:41:59 roy Exp $ */ +/* $NetBSD: rrenum.c,v 1.19 2015/11/11 07:48:41 ozaki-r Exp $ */ /* $KAME: rrenum.c,v 1.14 2004/06/14 05:36:00 itojun Exp $ */ /* @@ -53,6 +53,7 @@ #include "rtadvd.h" #include "rrenum.h" #include "if.h" +#include "prog_ops.h" #define RR_ISSET_SEGNUM(segnum_bits, segnum) \ ((((segnum_bits)[(segnum) >> 5]) & (1 << ((segnum) & 31))) != 0) @@ -163,7 +164,7 @@ do_use_prefix(int len, struct rr_pco_mat irr->irr_useprefix.sin6_len = 0; /* let it mean, no addition */ irr->irr_useprefix.sin6_family = 0; irr->irr_useprefix.sin6_addr = in6addr_any; - if (ioctl(s, rrcmd2pco[rpm->rpm_code], irr) < 0 && + if (prog_ioctl(s, rrcmd2pco[rpm->rpm_code], irr) < 0 && errno != EADDRNOTAVAIL) syslog(LOG_ERR, "<%s> ioctl: %m", __func__); return; @@ -194,7 +195,7 @@ do_use_prefix(int len, struct rr_pco_mat irr->irr_useprefix.sin6_family = AF_INET6; irr->irr_useprefix.sin6_addr = rpu->rpu_prefix; - if (ioctl(s, rrcmd2pco[rpm->rpm_code], irr) < 0 && + if (prog_ioctl(s, rrcmd2pco[rpm->rpm_code], irr) < 0 && errno != EADDRNOTAVAIL) syslog(LOG_ERR, "<%s> ioctl: %m", __func__); @@ -216,14 +217,14 @@ do_use_prefix(int len, struct rr_pco_mat pp->validlifetime = ntohl(rpu->rpu_vltime); pp->preflifetime = ntohl(rpu->rpu_pltime); if (irr->irr_rrf_decrvalid) { - clock_gettime(CLOCK_MONOTONIC, + prog_clock_gettime(CLOCK_MONOTONIC, &now); pp->vltimeexpire = now.tv_sec + pp->validlifetime; } else pp->vltimeexpire = 0; if (irr->irr_rrf_decrprefd) { - clock_gettime(CLOCK_MONOTONIC, + prog_clock_gettime(CLOCK_MONOTONIC, &now); pp->pltimeexpire = now.tv_sec + pp->preflifetime; @@ -249,7 +250,7 @@ do_pco(struct icmp6_router_renum *rr, in if ((rr_pco_check(len, rpm) != 0)) return 1; - if (s == -1 && (s = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) { + if (s == -1 && (s = prog_socket(AF_INET6, SOCK_DGRAM, 0)) < 0) { syslog(LOG_ERR, "<%s> socket: %m", __func__); exit(1); } Index: src/usr.sbin/rtadvd/rtadvd.c diff -u src/usr.sbin/rtadvd/rtadvd.c:1.50 src/usr.sbin/rtadvd/rtadvd.c:1.51 --- src/usr.sbin/rtadvd/rtadvd.c:1.50 Mon Jun 15 04:15:33 2015 +++ src/usr.sbin/rtadvd/rtadvd.c Wed Nov 11 07:48:41 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: rtadvd.c,v 1.50 2015/06/15 04:15:33 ozaki-r Exp $ */ +/* $NetBSD: rtadvd.c,v 1.51 2015/11/11 07:48:41 ozaki-r Exp $ */ /* $KAME: rtadvd.c,v 1.92 2005/10/17 14:40:02 suz Exp $ */ /* @@ -67,6 +67,7 @@ #include "if.h" #include "config.h" #include "dump.h" +#include "prog_ops.h" struct msghdr rcvmhdr; static unsigned char *rcvcmsgbuf; @@ -220,6 +221,10 @@ main(int argc, char *argv[]) exit(1); } + if (prog_init && prog_init() == -1) { + err(1, "init failed"); + } + logopt = LOG_NDELAY | LOG_PID; if (fflag) logopt |= LOG_PERROR; @@ -251,7 +256,7 @@ main(int argc, char *argv[]) getconfig(*argv++, 1); if (!fflag) - daemon(1, 0); + prog_daemon(1, 0); sock_open(); @@ -274,17 +279,17 @@ main(int argc, char *argv[]) set[1].fd = -1; syslog(LOG_INFO, "dropping privileges to %s", RTADVD_USER); - if (chroot(pw->pw_dir) == -1) { + if (prog_chroot(pw->pw_dir) == -1) { syslog(LOG_ERR, "chroot: %s: %m", pw->pw_dir); exit(1); } - if (chdir("/") == -1) { + if (prog_chdir("/") == -1) { syslog(LOG_ERR, "chdir: /: %m"); exit(1); } - if (setgroups(1, &pw->pw_gid) == -1 || - setgid(pw->pw_gid) == -1 || - setuid(pw->pw_uid) == -1) + if (prog_setgroups(1, &pw->pw_gid) == -1 || + prog_setgid(pw->pw_gid) == -1 || + prog_setuid(pw->pw_uid) == -1) { syslog(LOG_ERR, "failed to drop privileges: %m"); exit(1); @@ -331,7 +336,7 @@ main(int argc, char *argv[]) __func__); } - if ((i = poll(set, 2, timeout ? (timeout->tv_sec * 1000 + + if ((i = prog_poll(set, 2, timeout ? (timeout->tv_sec * 1000 + (timeout->tv_nsec + 999999) / 1000000) : INFTIM)) < 0) { /* EINTR would occur upon SIGUSR1 for status dump */ @@ -446,7 +451,7 @@ rtmsg_input(void) int prefixchange = 0, argc; memset(&buffer, 0, sizeof(buffer)); - n = read(rtsock, &buffer, sizeof(buffer)); + n = prog_read(rtsock, &buffer, sizeof(buffer)); /* We read the buffer first to clear the FD */ if (do_die) @@ -716,7 +721,7 @@ rtadvd_input(void) * receive options. */ rcvmhdr.msg_controllen = rcvcmsgbuflen; - if ((i = recvmsg(sock, &rcvmhdr, 0)) < 0) + if ((i = prog_recvmsg(sock, &rcvmhdr, 0)) < 0) return; /* We read the buffer first to clear the FD */ @@ -1017,7 +1022,7 @@ ra_timer_set_short_delay(struct rainfo * * MIN_DELAY_BETWEEN_RAS plus the random value after the * previous advertisement was sent. */ - clock_gettime(CLOCK_MONOTONIC, &now); + prog_clock_gettime(CLOCK_MONOTONIC, &now); timespecsub(&now, &rai->lastsent, &tm_tmp); min_delay.tv_sec = MIN_DELAY_BETWEEN_RAS; min_delay.tv_nsec = 0; @@ -1245,7 +1250,7 @@ prefix_check(struct nd_opt_prefix_info * * XXX: can we really expect that all routers on the link * have synchronized clocks? */ - clock_gettime(CLOCK_MONOTONIC, &now); + prog_clock_gettime(CLOCK_MONOTONIC, &now); preferred_time += now.tv_sec; if (!pp->timer && rai->clockskew && @@ -1281,7 +1286,7 @@ prefix_check(struct nd_opt_prefix_info * valid_time = ntohl(pinfo->nd_opt_pi_valid_time); if (pp->vltimeexpire) { - clock_gettime(CLOCK_MONOTONIC, &now); + prog_clock_gettime(CLOCK_MONOTONIC, &now); valid_time += now.tv_sec; if (!pp->timer && rai->clockskew && @@ -1510,14 +1515,14 @@ sock_open(void) exit(1); } - if ((sock = socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6)) < 0) { + if ((sock = prog_socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6)) < 0) { syslog(LOG_ERR, "<%s> socket: %m", __func__); exit(1); } /* RFC 4861 Section 4.2 */ on = 255; - if (setsockopt(sock, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, &on, + if (prog_setsockopt(sock, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, &on, sizeof(on)) == -1) { syslog(LOG_ERR, "<%s> IPV6_MULTICAST_HOPS: %m", __func__); exit(1); @@ -1526,13 +1531,13 @@ sock_open(void) /* specify to tell receiving interface */ on = 1; #ifdef IPV6_RECVPKTINFO - if (setsockopt(sock, IPPROTO_IPV6, IPV6_RECVPKTINFO, &on, + if (prog_setsockopt(sock, IPPROTO_IPV6, IPV6_RECVPKTINFO, &on, sizeof(on)) < 0) { syslog(LOG_ERR, "<%s> IPV6_RECVPKTINFO: %m", __func__); exit(1); } #else /* old adv. API */ - if (setsockopt(sock, IPPROTO_IPV6, IPV6_PKTINFO, &on, + if (prog_setsockopt(sock, IPPROTO_IPV6, IPV6_PKTINFO, &on, sizeof(on)) < 0) { syslog(LOG_ERR, "<%s> IPV6_PKTINFO: %m", __func__); exit(1); @@ -1542,13 +1547,13 @@ sock_open(void) on = 1; /* specify to tell value of hoplimit field of received IP6 hdr */ #ifdef IPV6_RECVHOPLIMIT - if (setsockopt(sock, IPPROTO_IPV6, IPV6_RECVHOPLIMIT, &on, + if (prog_setsockopt(sock, IPPROTO_IPV6, IPV6_RECVHOPLIMIT, &on, sizeof(on)) < 0) { syslog(LOG_ERR, "<%s> IPV6_RECVHOPLIMIT: %m", __func__); exit(1); } #else /* old adv. API */ - if (setsockopt(sock, IPPROTO_IPV6, IPV6_HOPLIMIT, &on, + if (prog_setsockopt(sock, IPPROTO_IPV6, IPV6_HOPLIMIT, &on, sizeof(on)) < 0) { syslog(LOG_ERR, "<%s> IPV6_HOPLIMIT: %m", __func__); exit(1); @@ -1560,7 +1565,7 @@ sock_open(void) ICMP6_FILTER_SETPASS(ND_ROUTER_ADVERT, &filt); if (accept_rr) ICMP6_FILTER_SETPASS(ICMP6_ROUTER_RENUMBERING, &filt); - if (setsockopt(sock, IPPROTO_ICMPV6, ICMP6_FILTER, &filt, + if (prog_setsockopt(sock, IPPROTO_ICMPV6, ICMP6_FILTER, &filt, sizeof(filt)) < 0) { syslog(LOG_ERR, "<%s> IICMP6_FILTER: %m", __func__); exit(1); @@ -1578,7 +1583,7 @@ sock_open(void) } TAILQ_FOREACH(ra, &ralist, next) { mreq.ipv6mr_interface = ra->ifindex; - if (setsockopt(sock, IPPROTO_IPV6, IPV6_JOIN_GROUP, &mreq, + if (prog_setsockopt(sock, IPPROTO_IPV6, IPV6_JOIN_GROUP, &mreq, sizeof(mreq)) < 0) { syslog(LOG_ERR, "<%s> IPV6_JOIN_GROUP(link) on %s: %m", __func__, ra->ifname); @@ -1609,7 +1614,7 @@ sock_open(void) } } else mreq.ipv6mr_interface = ra->ifindex; - if (setsockopt(sock, IPPROTO_IPV6, IPV6_JOIN_GROUP, + if (prog_setsockopt(sock, IPPROTO_IPV6, IPV6_JOIN_GROUP, &mreq, sizeof(mreq)) < 0) { syslog(LOG_ERR, "<%s> IPV6_JOIN_GROUP(site) on %s: %m", @@ -1643,7 +1648,7 @@ sock_open(void) static void rtsock_open(void) { - if ((rtsock = socket(PF_ROUTE, SOCK_RAW, 0)) < 0) { + if ((rtsock = prog_socket(PF_ROUTE, SOCK_RAW, 0)) < 0) { syslog(LOG_ERR, "<%s> socket: %m", __func__); exit(1); } @@ -1695,7 +1700,7 @@ ra_output(struct rainfo *rai) "<%s> send RA on %s, # of waitings = %d", __func__, rai->ifname, rai->waiting); - i = sendmsg(sock, &sndmhdr, 0); + i = prog_sendmsg(sock, &sndmhdr, 0); if (i < 0 || (size_t)i != rai->ra_datalen) { if (i < 0) { @@ -1753,7 +1758,7 @@ ra_output(struct rainfo *rai) rai->raoutput++; /* update timestamp */ - clock_gettime(CLOCK_MONOTONIC, &rai->lastsent); + prog_clock_gettime(CLOCK_MONOTONIC, &rai->lastsent); /* reset waiting conter */ rai->waiting = 0;