[PATCH ipvsadm 2/5] ipvsadm: fix ambiguous usage error message

Jeremy Sowden <[email protected]>
Newsgroups org.kernel.vger.lvs-devel
Message-ID <[email protected]>
If `-6` is used without `-f`, the usage error message is "-6 used before -f",
which can be misconstrued as warning that both options were used but in the
wrong order.

Change the option-parsing to allow `-6` to appear before `-f` and the error-
message in the case that `-6` was used without `-f`.

Link: http://bugs.debian.org/610596
Signed-off-by: Jeremy Sowden <[email protected]>
---
 ipvsadm.c | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/ipvsadm.c b/ipvsadm.c
index 42f31a20e596..889128017bd1 100644
--- a/ipvsadm.c
+++ b/ipvsadm.c
@@ -523,7 +523,7 @@ static int
 parse_options(int argc, char **argv, struct ipvs_command_entry *ce,
 	      unsigned long long *options, unsigned int *format)
 {
-	int c, parse;
+	int c, parse, ipv6 = 0;
 	poptContext context;
 	char *optarg = NULL, sched_flags_arg[128];
 	struct poptOption options_table[] = {
@@ -829,12 +829,7 @@ parse_options(int argc, char **argv, struct ipvs_command_entry *ce,
 			*format |= FMT_EXACT;
 			break;
 		case '6':
-			if (ce->svc.fwmark) {
-				ce->svc.af = AF_INET6;
-				ce->svc.netmask = 128;
-			} else {
-				fail(2, "-6 used before -f\n");
-			}
+			ipv6 = 1;
 			break;
 		case 'o':
 			set_option(options, OPTC_ONEPACKET);
@@ -935,6 +930,14 @@ parse_options(int argc, char **argv, struct ipvs_command_entry *ce,
 		return -1;
 	}
 
+	if (ipv6) {
+		if (ce->svc.fwmark) {
+			ce->svc.af = AF_INET6;
+			ce->svc.netmask = 128;
+		} else
+			fail(2, "-6 used without -f\n");
+	}
+
 	if (ce->cmd == CMD_TIMEOUT) {
 		char *optarg1, *optarg2;
 
-- 
2.45.2
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.