From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Gibson 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 Message-ID: <20220826045839.1112152-3-david@gibson.dropbear.id.au> In-Reply-To: <20220826045839.1112152-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============7926391408276263116==" --===============7926391408276263116== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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 --- 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) =20 name =3D getopt_long(argc, argv, optstring, options, NULL); =20 - if ((name =3D=3D 'D' || name =3D=3D 'S') && !optarg && - optind < argc && *argv[optind] && *argv[optind] !=3D '-') { - if (c->mode =3D=3D MODE_PASTA) { - if (conf_ns_opt(c, nsdir, userns, argv[optind])) - optarg =3D argv[optind++]; - } else { - optarg =3D argv[optind++]; - } - } - switch (name) { case -1: case 0: @@ -1403,7 +1393,7 @@ void conf(struct ctx *c, int argc, char **argv) usage(argv[0]); } =20 - if (!optarg) { + if (!strcmp(optarg, "none")) { c->no_dns =3D 1; break; } @@ -1430,7 +1420,7 @@ void conf(struct ctx *c, int argc, char **argv) usage(argv[0]); } =20 - if (!optarg) { + if (!strcmp(optarg, "none")) { c->no_dns_search =3D 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\f= R. -This option can be specified multiple times, and a single, empty option disa= bles +This option can be specified multiple times. Specifying \fB-D none\fR disab= les usage of DNS addresses altogether. =20 .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 sear= ch -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). =20 .TP .BR \-\-no-dhcp-dns " " \fIaddr --=20 2.37.2 --===============7926391408276263116==--