From aba3a4ce1b9b62bb4aeb58db96162554322460c3 Mon Sep 17 00:00:00 2001 From: Bill Fenner Date: Tue, 13 Aug 1996 16:28:59 +0000 Subject: [PATCH] Fix last commit (and PR bin/1489) by creating both sockets before setuid(). --- usr.sbin/traceroute/traceroute.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/usr.sbin/traceroute/traceroute.c b/usr.sbin/traceroute/traceroute.c index ccdc7fdf11ed..e39be381b597 100644 --- a/usr.sbin/traceroute/traceroute.c +++ b/usr.sbin/traceroute/traceroute.c @@ -1,6 +1,6 @@ #ifndef lint static char *rcsid = - "@(#)$Header: /home/ncvs/src/usr.sbin/traceroute/traceroute.c,v 1.5 1996/03/13 08:04:29 pst Exp $ (LBL)"; + "@(#)$Header: /home/ncvs/src/usr.sbin/traceroute/traceroute.c,v 1.6 1996/08/09 06:00:53 fenner Exp $ (LBL)"; #endif /* @@ -303,8 +303,10 @@ main(int argc, char **argv) */ pe = getprotobyname("icmp"); if (pe) { - s = socket(AF_INET, SOCK_RAW, pe->p_proto); - sockerrno = errno; + if ((s = socket(AF_INET, SOCK_RAW, pe->p_proto)) < 0) + sockerrno = errno; + else if ((sndsock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) + sockerrno = errno; } setuid(getuid()); @@ -476,7 +478,8 @@ main(int argc, char **argv) (void) setsockopt(s, SOL_SOCKET, SO_DONTROUTE, (char *)&on, sizeof(on)); - if ((sndsock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) < 0) { + if (sndsock < 0) { + errno = sockerrno; perror("traceroute: raw socket"); exit(5); }