diff options
author | Stefano Brivio <sbrivio@redhat.com> | 2024-08-08 06:02:51 +0200 |
---|---|---|
committer | Stefano Brivio <sbrivio@redhat.com> | 2024-08-08 21:34:06 +0200 |
commit | baccfb95ce0e30f64d052f710cd5fedc8c7426c1 (patch) | |
tree | a9eb6dff8ab5eadbead4464f64d3570ee93fade7 | |
parent | 09603cab28f9883baf1d7b48bdc102d6641dc300 (diff) | |
download | passt-baccfb95ce0e30f64d052f710cd5fedc8c7426c1.tar passt-baccfb95ce0e30f64d052f710cd5fedc8c7426c1.tar.gz passt-baccfb95ce0e30f64d052f710cd5fedc8c7426c1.tar.bz2 passt-baccfb95ce0e30f64d052f710cd5fedc8c7426c1.tar.lz passt-baccfb95ce0e30f64d052f710cd5fedc8c7426c1.tar.xz passt-baccfb95ce0e30f64d052f710cd5fedc8c7426c1.tar.zst passt-baccfb95ce0e30f64d052f710cd5fedc8c7426c1.zip |
conf: Stop parsing options at first non-option argument
Given that pasta supports specifying a command to be executed on the
command line, even without the usual -- separator as long as there's
no ambiguity, we shouldn't eat up options that are not meant for us.
Paul reports, for instance, that with:
pasta --config-net ip -6 route
-6 is taken by pasta to mean --ipv6-only, and we execute 'ip route'.
That's because getopt_long(), by default, shuffles the argument list
to shift non-option arguments at the end.
Avoid that by adding '+' at the beginning of 'optstring'.
Reported-by: Paul Holzinger <pholzing@redhat.com>
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
-rw-r--r-- | conf.c | 4 | ||||
-rw-r--r-- | util.c | 2 |
2 files changed, 3 insertions, 3 deletions
@@ -1253,9 +1253,9 @@ void conf(struct ctx *c, int argc, char **argv) if (c->mode == MODE_PASTA) { c->no_dhcp_dns = c->no_dhcp_dns_search = 1; fwd_default = FWD_AUTO; - optstring = "dqfel:hF:I:p:P:m:a:n:M:g:i:o:D:S:46t:u:T:U:"; + optstring = "+dqfel:hF:I:p:P:m:a:n:M:g:i:o:D:S:46t:u:T:U:"; } else { - optstring = "dqfel:hs:F:p:P:m:a:n:M:g:i:o:D:S:461t:u:"; + optstring = "+dqfel:hs:F:p:P:m:a:n:M:g:i:o:D:S:461t:u:"; } c->tcp.fwd_in.mode = c->tcp.fwd_out.mode = FWD_UNSET; @@ -710,7 +710,7 @@ void close_open_files(int argc, char **argv) int name, rc; do { - name = getopt_long(argc, argv, ":F", optfd, NULL); + name = getopt_long(argc, argv, "+:F", optfd, NULL); if (name == 'F') { errno = 0; |