diff options
author | Petr Vorel <pvorel@suse.cz> | 2023-10-19 18:07:23 +0200 |
---|---|---|
committer | Petr Vorel <pvorel@suse.cz> | 2023-12-11 11:20:46 +0100 |
commit | dd5a81a9b59f8cb8c6ded41b80b9ae1b6f5c6044 (patch) | |
tree | c8d695ccd1228cf3329c030733f9db4e5f805d28 | |
parent | cfc54e9180a3d0b200ecba854057813903aad11f (diff) | |
download | iputils-dd5a81a9b59f8cb8c6ded41b80b9ae1b6f5c6044.tar.gz |
ping: Add option -H to force reverse DNS resolution
Forcing DNS name resolution is useful for numeric destination,
or -f option, which by default do not perform it.
-H overrides previously defined -n, -n overrides previously defined -H
(useful, when one of them is in alias it can still be overridden).
Fixes: https://github.com/iputils/iputils/issues/421
Fixes: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=650479
Closes: https://github.com/iputils/iputils/pull/494
Reported-by: Vincent Lefevre <vincent@vinc17.net>
Reported-by: Michele Guerini Rocco <rnhmjoj@inventati.org>
Reviewed-by: Vincent Lefevre <vincent@vinc17.net>
Reviewed-by: Cyril Hrubis <chrubis@suse.cz>
Reviewed-by: Guillaume Nault <guillaume.nault@wanadoo.fr>
Signed-off-by: Petr Vorel <pvorel@suse.cz>
-rw-r--r-- | doc/ping.xml | 16 | ||||
-rw-r--r-- | ping/ping.c | 8 | ||||
-rw-r--r-- | ping/ping.h | 1 | ||||
-rw-r--r-- | ping/ping_common.c | 4 |
4 files changed, 24 insertions, 5 deletions
diff --git a/doc/ping.xml b/doc/ping.xml index 3bc0767..9e3a0f9 100644 --- a/doc/ping.xml +++ b/doc/ping.xml @@ -24,7 +24,7 @@ xml:id="man.ping"> <cmdsynopsis sepchar=" "> <command>ping</command> <arg choice="opt" rep="norepeat"> - <option>-aAbBdCDfhLnOqrRUvV46</option> + <option>-aAbBdCDfhHLnOqrRUvV46</option> </arg> <arg choice="opt" rep="norepeat"> <option>-c @@ -274,6 +274,17 @@ xml:id="man.ping"> </varlistentry> <varlistentry> <term> + <option>-H</option> + </term> + <listitem> + <para>Force DNS name resolution for the output. Useful for numeric + destination, or <option>-f</option> option, which by default do not + perform it. Override previously defined <option>-n</option> option. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term> <option>-i</option> <emphasis remap="I">interval</emphasis> </term> @@ -526,7 +537,8 @@ xml:id="man.ping"> <para>Numeric output only. No attempt will be made to lookup symbolic names for host addresses (no reverse DNS resolution). This is the default for numeric destination or <option>-f</option> - option.</para> + option. Override previously defined <option>-H</option> option. + </para> </listitem> </varlistentry> <varlistentry> diff --git a/ping/ping.c b/ping/ping.c index 0ff5a48..32b50cf 100644 --- a/ping/ping.c +++ b/ping/ping.c @@ -363,7 +363,7 @@ main(int argc, char **argv) hints.ai_family = AF_INET6; /* Parse command line options */ - while ((ch = getopt(argc, argv, "h?" "4bRT:" "6F:N:" "aABc:CdDe:fi:I:l:Lm:M:nOp:qQ:rs:S:t:UvVw:W:")) != EOF) { + while ((ch = getopt(argc, argv, "h?" "4bRT:" "6F:N:" "aABc:CdDe:fHi:I:l:Lm:M:nOp:qQ:rs:S:t:UvVw:W:")) != EOF) { switch(ch) { /* IPv4 specific options */ case '4': @@ -433,6 +433,9 @@ main(int argc, char **argv) case 'D': rts.opt_ptimeofday = 1; break; + case 'H': + rts.opt_force_lookup = 1; + break; case 'i': { double optval; @@ -496,6 +499,7 @@ main(int argc, char **argv) break; case 'n': rts.opt_numeric = 1; + rts.opt_force_lookup = 0; break; case 'O': rts.opt_outstanding = 1; @@ -1780,7 +1784,7 @@ char *_pr_addr(struct ping_rts *rts, void *sa, socklen_t salen, int resolve_name rts->in_pr_addr = !setjmp(rts->pr_addr_jmp); getnameinfo(sa, salen, address, sizeof address, NULL, 0, getnameinfo_flags | NI_NUMERICHOST); - if (!rts->exiting && resolve_name && !rts->opt_numeric) + if (!rts->exiting && resolve_name && (rts->opt_force_lookup || !rts->opt_numeric)) getnameinfo(sa, salen, name, sizeof name, NULL, 0, getnameinfo_flags); if (*name && strncmp(name, address, NI_MAXHOST)) diff --git a/ping/ping.h b/ping/ping.h index 7799395..a40c8f8 100644 --- a/ping/ping.h +++ b/ping/ping.h @@ -236,6 +236,7 @@ struct ping_rts { opt_flood:1, opt_flood_poll:1, opt_flowinfo:1, + opt_force_lookup:1, opt_interval:1, opt_latency:1, opt_mark:1, diff --git a/ping/ping_common.c b/ping/ping_common.c index ac656ba..c8b868b 100644 --- a/ping/ping_common.c +++ b/ping/ping_common.c @@ -62,13 +62,15 @@ void usage(void) " Imply using SOCK_RAW (for IPv4 only for identifier 0)\n" " -f flood ping\n" " -h print help and exit\n" + " -H force reverse DNS name resolution (useful for numeric\n" + " destinations or for -f), override -n\n" " -I <interface> either interface name or address\n" " -i <interval> seconds between sending each packet\n" " -L suppress loopback of multicast packets\n" " -l <preload> send <preload> number of packages while waiting replies\n" " -m <mark> tag the packets going out\n" " -M <pmtud opt> define mtu discovery, can be one of <do|dont|want|probe>\n" - " -n no reverse DNS name resolution\n" + " -n no reverse DNS name resolution, override -H\n" " -O report outstanding replies\n" " -p <pattern> contents of padding byte\n" " -q quiet output\n" |