cli: cleanup nm_vpn_openconnect_authenticate_helper()

This commit is contained in:
Thomas Haller
2019-04-08 15:14:49 +02:00
parent b33e2b72da
commit c9ca7d0637

View File

@@ -181,18 +181,17 @@ _extract_variable_value (char *line, const char *tag, char **value)
{
char *p1, *p2;
if (g_str_has_prefix (line, tag)) {
p1 = line + strlen (tag);
p2 = line + strlen (line) - 1;
if ((*p1 == '\'' || *p1 == '"') && (*p1 == *p2)) {
p1++;
*p2 = '\0';
}
if (value)
*value = g_strdup (p1);
return TRUE;
if (!g_str_has_prefix (line, tag))
return FALSE;
p1 = line + strlen (tag);
p2 = line + strlen (line) - 1;
if ((*p1 == '\'' || *p1 == '"') && (*p1 == *p2)) {
p1++;
*p2 = '\0';
}
return FALSE;
NM_SET_OUT (value, g_strdup (p1));
return TRUE;
}
gboolean
@@ -204,9 +203,8 @@ nm_vpn_openconnect_authenticate_helper (const char *host,
GError **error)
{
gs_free char *output = NULL;
gboolean ret;
char **strv = NULL, **iter;
char *argv[4];
gs_free const char **output_v = NULL;
const char *const*iter;
const char *path;
const char *const DEFAULT_PATHS[] = {
"/sbin/",
@@ -223,17 +221,17 @@ nm_vpn_openconnect_authenticate_helper (const char *host,
if (!path)
return FALSE;
argv[0] = (char *) path;
argv[1] = "--authenticate";
argv[2] = (char *) host;
argv[3] = NULL;
ret = g_spawn_sync (NULL, argv, NULL,
G_SPAWN_SEARCH_PATH | G_SPAWN_CHILD_INHERITS_STDIN,
NULL, NULL, &output, NULL,
status, error);
if (!ret)
if (!g_spawn_sync (NULL,
(char **) NM_MAKE_STRV (path, "--authenticate", host),
NULL,
G_SPAWN_SEARCH_PATH
| G_SPAWN_CHILD_INHERITS_STDIN,
NULL,
NULL,
&output,
NULL,
status,
error))
return FALSE;
/* Parse output and set cookie, gateway and gwcert
@@ -242,13 +240,14 @@ nm_vpn_openconnect_authenticate_helper (const char *host,
* HOST='1.2.3.4'
* FINGERPRINT='sha1:32bac90cf09a722e10ecc1942c67fe2ac8c21e2e'
*/
strv = g_strsplit_set (output ?: "", "\r\n", 0);
for (iter = strv; iter && *iter; iter++) {
_extract_variable_value (*iter, "COOKIE=", cookie);
_extract_variable_value (*iter, "HOST=", gateway);
_extract_variable_value (*iter, "FINGERPRINT=", gwcert);
output_v = nm_utils_strsplit_set_with_empty (output, "\r\n");
for (iter = output_v; iter && *iter; iter++) {
char *s_mutable = (char *) *iter;
_extract_variable_value (s_mutable, "COOKIE=", cookie);
_extract_variable_value (s_mutable, "HOST=", gateway);
_extract_variable_value (s_mutable, "FINGERPRINT=", gwcert);
}
g_strfreev (strv);
return TRUE;
}