aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPetr Vorel <pvorel@suse.cz>2023-10-19 18:07:23 +0200
committerPetr Vorel <pvorel@suse.cz>2023-12-11 11:20:46 +0100
commitdd5a81a9b59f8cb8c6ded41b80b9ae1b6f5c6044 (patch)
treec8d695ccd1228cf3329c030733f9db4e5f805d28
parentcfc54e9180a3d0b200ecba854057813903aad11f (diff)
downloadiputils-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.xml16
-rw-r--r--ping/ping.c8
-rw-r--r--ping/ping.h1
-rw-r--r--ping/ping_common.c4
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"