You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
2.8 KiB
89 lines
2.8 KiB
6 years ago
|
From aed8229c0bec5c56deaf1ea2047ca0263732477f Mon Sep 17 00:00:00 2001
|
||
|
From: Phil Sutter <psutter@redhat.com>
|
||
|
Date: Fri, 11 Aug 2017 11:11:32 +0200
|
||
|
Subject: [PATCH] Really fix get_addr() and get_prefix() error messages
|
||
|
|
||
|
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1477206
|
||
|
Upstream Status: iproute2.git commit 34705c807a389
|
||
|
|
||
|
commit 34705c807a38909247d1bb29ccdffe42e5c1dab3
|
||
|
Author: Phil Sutter <phil@nwl.cc>
|
||
|
Date: Tue Aug 1 18:36:11 2017 +0200
|
||
|
|
||
|
Really fix get_addr() and get_prefix() error messages
|
||
|
|
||
|
Both functions take the desired address family as a parameter. So using
|
||
|
that to notify the user what address family was expected is correct,
|
||
|
unlike using dst->family which will tell the user only what address
|
||
|
family was specified.
|
||
|
|
||
|
The situation which commit 334af76143368 tried to fix was when 'ip'
|
||
|
would accept addresses from multiple families. In that case, the family
|
||
|
parameter is set to AF_UNSPEC so that get_addr_1() may accept any valid
|
||
|
address.
|
||
|
|
||
|
This patch introduces a wrapper around family_name() which returns the
|
||
|
string "any valid" for AF_UNSPEC instead of the three question marks
|
||
|
unsuitable for use in error messages.
|
||
|
|
||
|
Tests for AF_UNSPEC:
|
||
|
|
||
|
| # ip a a 256.10.166.1/24 dev d0
|
||
|
| Error: any valid prefix is expected rather than "256.10.166.1/24".
|
||
|
|
||
|
| # ip neighbor add proxy 2001:db8::g dev d0
|
||
|
| Error: any valid address is expected rather than "2001:db8::g".
|
||
|
|
||
|
Tests for explicit address family:
|
||
|
|
||
|
| # ip -6 addrlabel add prefix 1.1.1.1/24 label 123
|
||
|
| Error: inet6 prefix is expected rather than "1.1.1.1/24".
|
||
|
|
||
|
| # ip -4 addrlabel add prefix dead:beef::1/24 label 123
|
||
|
| Error: inet prefix is expected rather than "dead:beef::1/24".
|
||
|
|
||
|
Reported-by: Jaroslav Aster <jaster@redhat.com>
|
||
|
Fixes: 334af76143368 ("fix get_addr() and get_prefix() error messages")
|
||
|
Signed-off-by: Phil Sutter <phil@nwl.cc>
|
||
|
---
|
||
|
lib/utils.c | 11 +++++++++--
|
||
|
1 file changed, 9 insertions(+), 2 deletions(-)
|
||
|
|
||
|
diff --git a/lib/utils.c b/lib/utils.c
|
||
|
index 6d5642f..7d6ee53 100644
|
||
|
--- a/lib/utils.c
|
||
|
+++ b/lib/utils.c
|
||
|
@@ -613,12 +613,19 @@ done:
|
||
|
return err;
|
||
|
}
|
||
|
|
||
|
+static const char *family_name_verbose(int family)
|
||
|
+{
|
||
|
+ if (family == AF_UNSPEC)
|
||
|
+ return "any valid";
|
||
|
+ return family_name(family);
|
||
|
+}
|
||
|
+
|
||
|
int get_addr(inet_prefix *dst, const char *arg, int family)
|
||
|
{
|
||
|
if (get_addr_1(dst, arg, family)) {
|
||
|
fprintf(stderr,
|
||
|
"Error: %s address is expected rather than \"%s\".\n",
|
||
|
- family_name(dst->family), arg);
|
||
|
+ family_name_verbose(family), arg);
|
||
|
exit(1);
|
||
|
}
|
||
|
return 0;
|
||
|
@@ -636,7 +643,7 @@ int get_prefix(inet_prefix *dst, char *arg, int family)
|
||
|
if (get_prefix_1(dst, arg, family)) {
|
||
|
fprintf(stderr,
|
||
|
"Error: %s prefix is expected rather than \"%s\".\n",
|
||
|
- family_name(dst->family), arg);
|
||
|
+ family_name_verbose(family), arg);
|
||
|
exit(1);
|
||
|
}
|
||
|
return 0;
|
||
|
--
|
||
|
1.8.3.1
|
||
|
|