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
next prev 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).