X-Git-Url: https://git.saurik.com/apple/network_cmds.git/blobdiff_plain/fdfd5971fdda9c24d576337643161018a5281167..e0b07f2d5ba2222268f5d1293221b413eb7c2655:/traceroute.tproj/traceroute.c diff --git a/traceroute.tproj/traceroute.c b/traceroute.tproj/traceroute.c index ec6b958..a411d0a 100644 --- a/traceroute.tproj/traceroute.c +++ b/traceroute.tproj/traceroute.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004-2009 Apple Inc. All rights reserved. + * Copyright (c) 2004-2015 Apple Inc. All rights reserved. * * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ * @@ -47,16 +47,12 @@ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ +#include + #ifndef lint -static const char copyright[] = +__unused static const char copyright[] = "@(#) Copyright (c) 1988, 1989, 1991, 1994, 1995, 1996, 1997, 1998, 1999, 2000\n\ The Regents of the University of California. All rights reserved.\n"; -#if 0 -static const char rcsid[] = - "@(#)$Id: traceroute.c,v 1.4 2006/02/07 06:22:57 lindak Exp $ (LBL)"; -#endif -static const char rcsid[] = - "$FreeBSD: src/contrib/traceroute/traceroute.c,v 1.35 2008/02/20 23:29:52 rpaulo Exp $"; #endif /* @@ -521,6 +517,13 @@ main(int argc, char **argv) int sump = 0; int sockerrno = 0; + if (argv[0] == NULL) + prog = "traceroute"; + else if ((cp = strrchr(argv[0], '/')) != NULL) + prog = cp + 1; + else + prog = argv[0]; + /* Insure the socket fds won't be 0, 1 or 2 */ if (open(devnull, O_RDONLY) < 0 || open(devnull, O_RDONLY) < 0 || @@ -559,13 +562,6 @@ main(int argc, char **argv) max_ttl = 30; #endif - if (argv[0] == NULL) - prog = "traceroute"; - else if ((cp = strrchr(argv[0], '/')) != NULL) - prog = cp + 1; - else - prog = argv[0]; - opterr = 0; while ((op = getopt(argc, argv, "aA:edDFInrSvxf:g:i:M:m:P:p:q:s:t:w:z:")) != EOF) switch (op) { @@ -792,6 +788,8 @@ main(int argc, char **argv) Fprintf(stderr, "%s: icmp socket: %s\n", prog, strerror(errno)); exit(1); } + (void) setsockopt(s, SOL_SOCKET, SO_RECV_ANYIF, (char *)&on, + sizeof(on)); if (options & SO_DEBUG) (void)setsockopt(s, SOL_SOCKET, SO_DEBUG, (char *)&on, sizeof(on)); @@ -1186,9 +1184,9 @@ wait_for_reply(register int sock, register struct sockaddr_in *fromp, socklen_t fromlen = sizeof(*fromp); nfds = howmany(sock + 1, NFDBITS); - if ((fdsp = malloc(nfds * sizeof(fd_mask))) == NULL) + if ((fdsp = malloc(nfds * sizeof(fd_set))) == NULL) err(1, "malloc"); - memset(fdsp, 0, nfds * sizeof(fd_mask)); + memset(fdsp, 0, nfds * sizeof(fd_set)); FD_SET(sock, fdsp); wait.tv_sec = tp->tv_sec + waittime; @@ -1623,8 +1621,7 @@ inetname(struct in_addr in) domain[0] = '\0'; else { ++cp; - (void)strncpy(domain, cp, sizeof(domain) - 1); - domain[sizeof(domain) - 1] = '\0'; + memmove(domain, cp, strlen(cp) + 1); } } } @@ -1634,8 +1631,7 @@ inetname(struct in_addr in) if ((cp = strchr(hp->h_name, '.')) != NULL && strcmp(cp + 1, domain) == 0) *cp = '\0'; - (void)strncpy(line, hp->h_name, sizeof(line) - 1); - line[sizeof(line) - 1] = '\0'; + (void)strlcpy(line, hp->h_name, sizeof(line)); return (line); } }