From 767afeffd8bcd1b87ce1ed974b6629c7ff72a4a3 Mon Sep 17 00:00:00 2001 From: Lubomir Rintel Date: Wed, 4 May 2022 09:56:10 +0200 Subject: [PATCH] nmcli/devices: make get_device_list() terminate on "--" Don't consider "--" a device name. Instead, treat it as a signal to stop reading the device list. If a caller expects nothing beyond the device names, it now has to check. --- src/nmcli/devices.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/nmcli/devices.c b/src/nmcli/devices.c index 1ed253ff94..eb18199199 100644 --- a/src/nmcli/devices.c +++ b/src/nmcli/devices.c @@ -1140,6 +1140,12 @@ get_device_list(NmCli *nmc, int *argc, const char *const **argv) devices = nmc_get_devices_sorted(nmc->client); while (*argc > 0) { + if (strcmp(**argv, "--") == 0) { + (*argc)--; + (*argv)++; + break; + } + if (*argc == 1 && nmc->complete) complete_device(devices, **argv, FALSE); @@ -2627,6 +2633,11 @@ do_devices_disconnect(const NMCCommand *cmd, NmCli *nmc, int argc, const char *c next_arg(nmc, &argc, &argv, NULL); queue = get_device_list(nmc, &argc, &argv); + if (argc) { + g_string_printf(nmc->return_text, _("Error: invalid extra argument '%s'."), *argv); + nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; + return; + } if (!queue) return; if (nmc->complete) @@ -2695,6 +2706,11 @@ do_devices_delete(const NMCCommand *cmd, NmCli *nmc, int argc, const char *const next_arg(nmc, &argc, &argv, NULL); queue = get_device_list(nmc, &argc, &argv); + if (argc) { + g_string_printf(nmc->return_text, _("Error: invalid extra argument '%s'."), *argv); + nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; + return; + } if (!queue) return; if (nmc->complete) @@ -2907,6 +2923,12 @@ do_devices_monitor(const NMCCommand *cmd, NmCli *nmc, int argc, const char *cons GSList *queue = get_device_list(nmc, &argc, &argv); GSList *iter; + if (argc) { + g_string_printf(nmc->return_text, _("Error: invalid extra argument '%s'."), *argv); + nmc->return_value = NMC_RESULT_ERROR_USER_INPUT; + return; + } + /* Monitor the specified devices. */ for (iter = queue; iter; iter = g_slist_next(iter)) device_watch(nmc, NM_DEVICE(iter->data));