summary refs log tree commit diff
path: root/src/nmcli/common.c
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2023-08-09 21:55:35 +0200
committerMichael Biebl <biebl@debian.org>2023-08-09 21:55:35 +0200
commit05e4a733f2141995181a551854d5df929f084adf (patch)
tree83bb937740a6667525ba0df046748ecaa829c269 /src/nmcli/common.c
parent14b0f3a9dc9ea90d60a3b057350fd4d637dc021a (diff)
New upstream version 1.44.0 upstream/1.44.0
Diffstat (limited to 'src/nmcli/common.c')
-rw-r--r--src/nmcli/common.c57
1 files changed, 7 insertions, 50 deletions
diff --git a/src/nmcli/common.c b/src/nmcli/common.c
index f31d0987..518faa2f 100644
--- a/src/nmcli/common.c
+++ b/src/nmcli/common.c
@@ -635,12 +635,6 @@ vpn_openconnect_get_secrets(NMConnection *connection, GPtrArray *secrets)
 {
     GError       *error = NULL;
     NMSettingVpn *s_vpn;
-    const char   *gw, *port;
-    gs_free char *cookie  = NULL;
-    gs_free char *gateway = NULL;
-    gs_free char *gwcert  = NULL;
-    int           status  = 0;
-    int           i;
     gboolean      ret;
 
     if (!connection)
@@ -653,54 +647,15 @@ vpn_openconnect_get_secrets(NMConnection *connection, GPtrArray *secrets)
     if (!nm_streq0(nm_setting_vpn_get_service_type(s_vpn), NM_SECRET_AGENT_VPN_TYPE_OPENCONNECT))
         return FALSE;
 
-    /* Get gateway and port */
-    gw   = nm_setting_vpn_get_data_item(s_vpn, "gateway");
-    port = gw ? strrchr(gw, ':') : NULL;
-
     /* Interactively authenticate to OpenConnect server and get secrets */
-    ret = nm_vpn_openconnect_authenticate_helper(gw, &cookie, &gateway, &gwcert, &status, &error);
+    ret = nm_vpn_openconnect_authenticate_helper(s_vpn, secrets, &error);
+
     if (!ret) {
         nmc_printerr(_("Error: openconnect failed: %s\n"), error->message);
         g_clear_error(&error);
         return FALSE;
     }
 
-    if (WIFEXITED(status)) {
-        if (WEXITSTATUS(status) != 0)
-            nmc_printerr(_("Error: openconnect failed with status %d\n"), WEXITSTATUS(status));
-    } else if (WIFSIGNALED(status))
-        nmc_printerr(_("Error: openconnect failed with signal %d\n"), WTERMSIG(status));
-
-    /* Append port to the host value */
-    if (gateway && port) {
-        gs_free char *tmp = gateway;
-
-        gateway = g_strdup_printf("%s%s", tmp, port);
-    }
-
-    /* Fill secrets to the array */
-    for (i = 0; i < secrets->len; i++) {
-        NMSecretAgentSimpleSecret *secret = secrets->pdata[i];
-
-        if (secret->secret_type != NM_SECRET_AGENT_SECRET_TYPE_VPN_SECRET)
-            continue;
-        if (!nm_streq0(secret->vpn_type, NM_SECRET_AGENT_VPN_TYPE_OPENCONNECT))
-            continue;
-
-        if (nm_streq0(secret->entry_id, NM_SECRET_AGENT_ENTRY_ID_PREFX_VPN_SECRETS "cookie")) {
-            g_free(secret->value);
-            secret->value = g_steal_pointer(&cookie);
-        } else if (nm_streq0(secret->entry_id,
-                             NM_SECRET_AGENT_ENTRY_ID_PREFX_VPN_SECRETS "gateway")) {
-            g_free(secret->value);
-            secret->value = g_steal_pointer(&gateway);
-        } else if (nm_streq0(secret->entry_id,
-                             NM_SECRET_AGENT_ENTRY_ID_PREFX_VPN_SECRETS "gwcert")) {
-            g_free(secret->value);
-            secret->value = g_steal_pointer(&gwcert);
-        }
-    }
-
     return TRUE;
 }
 
@@ -925,7 +880,8 @@ read_again:
     rl_got_line = FALSE;
     rl_callback_handler_install(prompt, readline_cb);
 
-    while (!rl_got_line && g_main_loop_is_running(loop) && !nmc_seen_sigint())
+    while (!rl_got_line && (g_main_loop_is_running(loop) || nmc_config->offline)
+           && !nmc_seen_sigint())
         g_main_context_iteration(NULL, TRUE);
 
     /* If Ctrl-C was detected, complete the line */
@@ -954,7 +910,7 @@ read_again:
         }
     } else if (!rl_string) {
         /* Ctrl-D, exit */
-        if (g_main_loop_is_running(loop))
+        if (g_main_loop_is_running(loop) || nmc_config->offline)
             nmc_exit();
     }
 
@@ -1294,6 +1250,7 @@ got_client(GObject *source_object, GAsyncResult *res, gpointer user_data)
                                 error->message);
     } else {
         nmc->client = NM_CLIENT(source_object);
+        nmc_warn_if_version_mismatch(nmc->client);
         call_cmd(nmc,
                  g_steal_pointer(&task),
                  call->cmd,
@@ -1416,7 +1373,7 @@ call_cmd(NmCli *nmc, GTask *task, const NMCCommand *cmd, int argc, const char *c
 {
     CmdCall *call;
 
-    if (nmc->offline) {
+    if (nmc->nmc_config.offline) {
         if (!cmd->supports_offline) {
             g_task_return_new_error(task,
                                     NMCLI_ERROR,