nmcli: fix nmcli parsing

Fixes the parsing for correct and incorrect commands.
e.g.:
nmcli connection down id <conn>
nmcli -t
...

Fixes: 16902a2be6
(cherry picked from commit ef0d0d08eb)
This commit is contained in:
Francesco Giudici
2017-03-29 12:02:14 +02:00
parent 9a38eb4c66
commit f7c72045b7
4 changed files with 80 additions and 73 deletions

View File

@@ -1713,13 +1713,13 @@ get_connection (NmCli *nmc, int *argc, char ***argv, int *pos, GError **error)
|| strcmp (**argv, "uuid") == 0
|| strcmp (**argv, "path") == 0) {
selector = **argv;
(*argc)--;
(*argv)++;
if (!*argc) {
g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT,
_("%s argument is missing"), selector);
return NULL;
}
(*argc)--;
(*argv)++;
}
connections = nm_client_get_connections (nmc->client);
@@ -1760,13 +1760,13 @@ do_connections_show (NmCli *nmc, int argc, char **argv)
active_only = TRUE;
next_arg (nmc, &argc, &argv);
} else if (!order && nmc_arg_is_option (*argv, "order")) {
argc--;
argv++;
if (!argc) {
g_set_error_literal (&err, NMCLI_ERROR, 0,
_("'--order' argument is missing"));
goto finish;
}
argc--;
argv++;
/* TODO: complete --order */
order = parse_preferred_connection_order (*argv, &err);
if (err)
@@ -1853,6 +1853,8 @@ do_connections_show (NmCli *nmc, int argc, char **argv)
|| strcmp (*argv, "path") == 0
|| strcmp (*argv, "apath") == 0) {
selector = *argv;
argc--;
argv++;
if (!argc) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
@@ -2593,37 +2595,37 @@ do_connection_up (NmCli *nmc, int argc, char **argv)
nmc_complete_strings (*argv, "ifname", "ap", "passwd-file", NULL);
if (strcmp (*argv, "ifname") == 0) {
argc--;
argv++;
if (!argc) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
return NMC_RESULT_ERROR_USER_INPUT;
}
argc--;
argv++;
ifname = *argv;
if (argc == 1 && nmc->complete)
nmc_complete_device (nmc->client, ifname, ap != NULL);
}
else if (strcmp (*argv, "ap") == 0) {
argc--;
argv++;
if (!argc) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
return NMC_RESULT_ERROR_USER_INPUT;
}
argc--;
argv++;
ap = *argv;
if (argc == 1 && nmc->complete)
nmc_complete_bssid (nmc->client, ifname, ap);
}
else if (strcmp (*argv, "passwd-file") == 0) {
argc--;
argv++;
if (!argc) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
return NMC_RESULT_ERROR_USER_INPUT;
}
argc--;
argv++;
if (argc == 1 && nmc->complete)
nmc->return_value = NMC_RESULT_COMPLETE_FILE;
@@ -2789,13 +2791,13 @@ do_connection_down (NmCli *nmc, int argc, char **argv)
|| strcmp (*arg_ptr, "apath") == 0) {
selector = *arg_ptr;
if (!argc) {
arg_num--;
arg_ptr++;
if (!arg_num) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), selector);
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
goto finish;
}
argc--;
argv++;
}
connections = nm_client_get_connections (nmc->client);
@@ -4954,6 +4956,8 @@ read_properties:
/* It would be better if "save" was a separate argument and not
* mixed with properties, but there's not much we can do about it now. */
g_clear_error (&error);
argc--;
argv++;
if (!argc) {
g_string_printf (nmc->return_text,
_("Error: value for '%s' argument is required."),
@@ -4961,8 +4965,6 @@ read_properties:
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
goto finish;
}
argc--;
argv++;
if (!nmc_string_to_bool (*argv, &save_bool, &error)) {
g_string_printf (nmc->return_text, _("Error: 'save': %s."),
error->message);
@@ -8595,14 +8597,14 @@ do_connection_import (NmCli *nmc, int argc, char **argv)
}
if (strcmp (*argv, "type") == 0) {
argc--;
argv++;
if (!argc) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
goto finish;
}
argc--;
argv++;
if (argc == 1 && nmc->complete)
nmc_complete_vpn_service (*argv);
@@ -8612,13 +8614,13 @@ do_connection_import (NmCli *nmc, int argc, char **argv)
g_printerr (_("Warning: 'type' already specified, ignoring extra one.\n"));
} else if (strcmp (*argv, "file") == 0) {
argc--;
argv++;
if (!argc) {
g_string_printf (nmc->return_text, _("Error: %s argument is missing."), *(argv-1));
nmc->return_value = NMC_RESULT_ERROR_USER_INPUT;
goto finish;
}
argc--;
argv++;
if (argc == 1 && nmc->complete)
nmc->return_value = NMC_RESULT_COMPLETE_FILE;
if (!filename)