Patch from Gyepi SAM <gyepi@praxis-sw.com>:
Fixed up domain removal for local domains. GNU traceroute does not do this. I don't know why we do. Fixed incorrect argument for reverse resolution. Clean up cruft that appears when CONFIG_FEATURE_TRACEROUTE_VERBOSE is defined
This commit is contained in:
parent
77d22c4abd
commit
ad79c0b629
@ -233,15 +233,12 @@ inetname(struct sockaddr_in *from)
|
|||||||
|
|
||||||
if (first && !nflag) {
|
if (first && !nflag) {
|
||||||
first = 0;
|
first = 0;
|
||||||
if (gethostname(domain, MAXHOSTNAMELEN) == 0 &&
|
if (getdomainname(domain, MAXHOSTNAMELEN) != 0)
|
||||||
(cp = strchr(domain, '.')))
|
|
||||||
(void) strcpy(domain, cp + 1);
|
|
||||||
else
|
|
||||||
domain[0] = 0;
|
domain[0] = 0;
|
||||||
}
|
}
|
||||||
cp = 0;
|
cp = 0;
|
||||||
if (!nflag && from->sin_addr.s_addr != INADDR_ANY) {
|
if (!nflag && from->sin_addr.s_addr != INADDR_ANY) {
|
||||||
if(INET_rresolve(name, sizeof(name), from, 0, 0xffffffff) >= 0) {
|
if(INET_rresolve(name, sizeof(name), from, 0x4000, 0xffffffff) >= 0) {
|
||||||
if ((cp = strchr(name, '.')) &&
|
if ((cp = strchr(name, '.')) &&
|
||||||
!strcmp(cp + 1, domain))
|
!strcmp(cp + 1, domain))
|
||||||
*cp = 0;
|
*cp = 0;
|
||||||
@ -321,8 +318,7 @@ wait_for_reply(int sock, struct sockaddr_in *from, int reset_timer)
|
|||||||
* Convert an ICMP "type" field to a printable string.
|
* Convert an ICMP "type" field to a printable string.
|
||||||
*/
|
*/
|
||||||
static inline const char *
|
static inline const char *
|
||||||
pr_type(t)
|
pr_type(u_char t)
|
||||||
u_char t;
|
|
||||||
{
|
{
|
||||||
static const char * const ttab[] = {
|
static const char * const ttab[] = {
|
||||||
"Echo Reply", "ICMP 1", "ICMP 2", "Dest Unreachable",
|
"Echo Reply", "ICMP 1", "ICMP 2", "Dest Unreachable",
|
||||||
@ -546,12 +542,12 @@ traceroute_main(argc, argv)
|
|||||||
if (setsockopt(sndsock, SOL_SOCKET, SO_SNDBUF, (char *)&datalen,
|
if (setsockopt(sndsock, SOL_SOCKET, SO_SNDBUF, (char *)&datalen,
|
||||||
sizeof(datalen)) < 0)
|
sizeof(datalen)) < 0)
|
||||||
perror_msg_and_die("SO_SNDBUF");
|
perror_msg_and_die("SO_SNDBUF");
|
||||||
#endif SO_SNDBUF
|
#endif
|
||||||
#ifdef IP_HDRINCL
|
#ifdef IP_HDRINCL
|
||||||
if (setsockopt(sndsock, IPPROTO_IP, IP_HDRINCL, (char *)&on,
|
if (setsockopt(sndsock, IPPROTO_IP, IP_HDRINCL, (char *)&on,
|
||||||
sizeof(on)) < 0)
|
sizeof(on)) < 0)
|
||||||
perror_msg_and_die("IP_HDRINCL");
|
perror_msg_and_die("IP_HDRINCL");
|
||||||
#endif IP_HDRINCL
|
#endif
|
||||||
#ifdef CONFIG_FEATURE_TRACEROUTE_SO_DEBUG
|
#ifdef CONFIG_FEATURE_TRACEROUTE_SO_DEBUG
|
||||||
if (options & SO_DEBUG)
|
if (options & SO_DEBUG)
|
||||||
(void) setsockopt(sndsock, SOL_SOCKET, SO_DEBUG,
|
(void) setsockopt(sndsock, SOL_SOCKET, SO_DEBUG,
|
||||||
@ -571,7 +567,7 @@ traceroute_main(argc, argv)
|
|||||||
#ifndef IP_HDRINCL
|
#ifndef IP_HDRINCL
|
||||||
if (bind(sndsock, (struct sockaddr *)&from, sizeof(from)) < 0)
|
if (bind(sndsock, (struct sockaddr *)&from, sizeof(from)) < 0)
|
||||||
perror_msg_and_die("bind");
|
perror_msg_and_die("bind");
|
||||||
#endif IP_HDRINCL
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(stderr, "traceroute to %s (%s)", hostname,
|
fprintf(stderr, "traceroute to %s (%s)", hostname,
|
||||||
|
Loading…
Reference in New Issue
Block a user