public inbox for passt-dev@passt.top
 help / color / mirror / code / Atom feed
From: David Gibson <david@gibson.dropbear.id.au>
To: passt-dev@passt.top
Subject: [PATCH 2/8] conf: Use "-D none" and "-S none" instead of missing empty option arguments
Date: Fri, 26 Aug 2022 14:58:33 +1000	[thread overview]
Message-ID: <20220826045839.1112152-3-david@gibson.dropbear.id.au> (raw)
In-Reply-To: <20220826045839.1112152-1-david@gibson.dropbear.id.au>

[-- Attachment #1: Type: text/plain, Size: 3405 bytes --]

Both the -D (--dns) and -S (--search) options take an optional argument.
If the argument is omitted the option is disabled entirely.  However,
handling the optional argument requires some ugly special case handling if
it's the last option on the command line, and has potential ambiguity with
non-option arguments used with pasta.  It can also make it more confusing
to read command lines.

Simplify the logic here by replacing the non-argument versions with an
explicit "-D none" or "-S none".

Signed-off-by: David Gibson <david(a)gibson.dropbear.id.au>
---
 conf.c  | 18 ++++--------------
 passt.1 |  7 ++++---
 2 files changed, 8 insertions(+), 17 deletions(-)

diff --git a/conf.c b/conf.c
index 4eb9e3d..6770be9 100644
--- a/conf.c
+++ b/conf.c
@@ -1022,8 +1022,8 @@ void conf(struct ctx *c, int argc, char **argv)
 		{"mac-addr",	required_argument,	NULL,		'M' },
 		{"gateway",	required_argument,	NULL,		'g' },
 		{"interface",	required_argument,	NULL,		'i' },
-		{"dns",		optional_argument,	NULL,		'D' },
-		{"search",	optional_argument,	NULL,		'S' },
+		{"dns",		required_argument,	NULL,		'D' },
+		{"search",	required_argument,	NULL,		'S' },
 		{"no-tcp",	no_argument,		&c->no_tcp,	1 },
 		{"no-udp",	no_argument,		&c->no_udp,	1 },
 		{"no-icmp",	no_argument,		&c->no_icmp,	1 },
@@ -1077,16 +1077,6 @@ void conf(struct ctx *c, int argc, char **argv)
 
 		name = getopt_long(argc, argv, optstring, options, NULL);
 
-		if ((name == 'D' || name == 'S') && !optarg &&
-		    optind < argc && *argv[optind] && *argv[optind] != '-') {
-			if (c->mode == MODE_PASTA) {
-				if (conf_ns_opt(c, nsdir, userns, argv[optind]))
-					optarg = argv[optind++];
-			} else {
-				optarg = argv[optind++];
-			}
-		}
-
 		switch (name) {
 		case -1:
 		case 0:
@@ -1403,7 +1393,7 @@ void conf(struct ctx *c, int argc, char **argv)
 				usage(argv[0]);
 			}
 
-			if (!optarg) {
+			if (!strcmp(optarg, "none")) {
 				c->no_dns = 1;
 				break;
 			}
@@ -1430,7 +1420,7 @@ void conf(struct ctx *c, int argc, char **argv)
 				usage(argv[0]);
 			}
 
-			if (!optarg) {
+			if (!strcmp(optarg, "none")) {
 				c->no_dns_search = 1;
 				break;
 			}
diff --git a/passt.1 b/passt.1
index 9bed946..14b01b2 100644
--- a/passt.1
+++ b/passt.1
@@ -171,7 +171,7 @@ version.
 Use \fIaddr\fR (IPv4 or IPv6) for DHCP, DHCPv6, NDP or DNS forwarding, as
 configured (see options \fB--no-dhcp-dns\fR, \fB--dhcp-dns\fR,
 \fB--dns-forward\fR) instead of reading addresses from \fI/etc/resolv.conf\fR.
-This option can be specified multiple times, and a single, empty option disables
+This option can be specified multiple times.  Specifying \fB-D none\fR disables
 usage of DNS addresses altogether.
 
 .TP
@@ -186,8 +186,9 @@ This option can be specified zero to two times (once for IPv4, once for IPv6).
 .BR \-S ", " \-\-search " " \fIlist
 Use space-separated \fIlist\fR for DHCP, DHCPv6, and NDP purposes, instead of
 reading entries from \fI/etc/resolv.conf\fR. See options \fB--no-dhcp-search\fR
-and \fB--dhcp-search\fR. A single, empty option disables the DNS domain search
-list altogether.
+and \fB--dhcp-search\fR. \fB--search none\fR disables the DNS domain search
+list altogether (if you need to search a domain called "none" you can use
+\fB--search none.\fR).
 
 .TP
 .BR \-\-no-dhcp-dns " " \fIaddr
-- 
@@ -171,7 +171,7 @@ version.
 Use \fIaddr\fR (IPv4 or IPv6) for DHCP, DHCPv6, NDP or DNS forwarding, as
 configured (see options \fB--no-dhcp-dns\fR, \fB--dhcp-dns\fR,
 \fB--dns-forward\fR) instead of reading addresses from \fI/etc/resolv.conf\fR.
-This option can be specified multiple times, and a single, empty option disables
+This option can be specified multiple times.  Specifying \fB-D none\fR disables
 usage of DNS addresses altogether.
 
 .TP
@@ -186,8 +186,9 @@ This option can be specified zero to two times (once for IPv4, once for IPv6).
 .BR \-S ", " \-\-search " " \fIlist
 Use space-separated \fIlist\fR for DHCP, DHCPv6, and NDP purposes, instead of
 reading entries from \fI/etc/resolv.conf\fR. See options \fB--no-dhcp-search\fR
-and \fB--dhcp-search\fR. A single, empty option disables the DNS domain search
-list altogether.
+and \fB--dhcp-search\fR. \fB--search none\fR disables the DNS domain search
+list altogether (if you need to search a domain called "none" you can use
+\fB--search none.\fR).
 
 .TP
 .BR \-\-no-dhcp-dns " " \fIaddr
-- 
2.37.2


  parent reply	other threads:[~2022-08-26  4:58 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-26  4:58 [PATCH 0/8] Allow pasta to take a command to spawn instead of shell David Gibson
2022-08-26  4:58 ` [PATCH 1/8] conf: Make the argument to --pcap option mandatory David Gibson
2022-08-26  4:58 ` David Gibson [this message]
2022-08-30 17:41   ` [PATCH 2/8] conf: Use "-D none" and "-S none" instead of missing empty option arguments Stefano Brivio
2022-08-26  4:58 ` [PATCH 3/8] Correct manpage for --userns David Gibson
2022-08-26  4:58 ` [PATCH 4/8] Remove --nsrun-dir option David Gibson
2022-08-26  4:58 ` [PATCH 5/8] Move ENOENT error message into conf_ns_opt() David Gibson
2022-08-26  4:58 ` [PATCH 6/8] More deterministic detection of whether argument is a PID, PATH or NAME David Gibson
2022-08-26  4:58 ` [PATCH 7/8] Use explicit --netns option rather than multiplexing with PID David Gibson
2022-08-29 19:16   ` Stefano Brivio
2022-08-30  1:12     ` David Gibson
2022-08-30  8:25       ` Stefano Brivio
2022-08-26  4:58 ` [PATCH 8/8] Allow pasta to take a command to execute David Gibson
2022-08-29 19:16   ` Stefano Brivio
2022-08-30  1:16     ` David Gibson
2022-08-30  8:26       ` Stefano Brivio
2022-08-30 17:41         ` Stefano Brivio
2022-09-01 10:07 ` [PATCH 0/8] Allow pasta to take a command to spawn instead of shell Stefano Brivio

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220826045839.1112152-3-david@gibson.dropbear.id.au \
    --to=david@gibson.dropbear.id.au \
    --cc=passt-dev@passt.top \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://passt.top/passt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for IMAP folder(s).