|
Lines 1007-1065
populate_cipher_combo (GtkComboBox *box, const char *user_cipher)
Link Here
|
| 1007 |
#define HMACAUTH_COL_NAME 0 |
1007 |
#define HMACAUTH_COL_NAME 0 |
| 1008 |
#define HMACAUTH_COL_VALUE 1 |
1008 |
#define HMACAUTH_COL_VALUE 1 |
| 1009 |
|
1009 |
|
| 1010 |
static void |
1010 |
static gboolean |
|
|
1011 |
query_digests (GtkListStore *store, const char *hmacauth, GtkTreeIter *found_iter) |
| 1012 |
{ |
| 1013 |
const char *openvpn_binary = nm_find_openvpn (); |
| 1014 |
char *argv[3]; |
| 1015 |
gs_free gchar *tmp = NULL; |
| 1016 |
gchar **lines, **line; |
| 1017 |
GError *error = NULL; |
| 1018 |
gboolean found = FALSE; |
| 1019 |
|
| 1020 |
if (!openvpn_binary) |
| 1021 |
return FALSE; |
| 1022 |
|
| 1023 |
argv[0] = (char *) openvpn_binary; |
| 1024 |
argv[1] = "--show-digests"; |
| 1025 |
argv[2] = NULL; |
| 1026 |
|
| 1027 |
if (!g_spawn_sync ("/", argv, NULL, 0, NULL, NULL, &tmp, NULL, NULL, &error)) { |
| 1028 |
g_warning ("%s: couldn't determine digests: %s", __func__, error->message); |
| 1029 |
g_clear_error (&error); |
| 1030 |
return FALSE; |
| 1031 |
} |
| 1032 |
|
| 1033 |
lines = g_strsplit (tmp, "\n", 0); |
| 1034 |
for (line = lines; *line; line++) { |
| 1035 |
const char *name = *line; |
| 1036 |
const char *space; |
| 1037 |
const char *p; |
| 1038 |
gchar *digest; |
| 1039 |
GtkTreeIter iter; |
| 1040 |
|
| 1041 |
/* Data lines: "<NAME> <number> bit digest size" |
| 1042 |
* Skip header lines that don't have a number as second token. */ |
| 1043 |
space = strchr (name, ' '); |
| 1044 |
if (!space) |
| 1045 |
continue; |
| 1046 |
for (p = space + 1; *p && g_ascii_isdigit (*p); p++) |
| 1047 |
; |
| 1048 |
if (p == space + 1 || *p != ' ') |
| 1049 |
continue; |
| 1050 |
|
| 1051 |
digest = g_strndup (name, space - name); |
| 1052 |
gtk_list_store_append (store, &iter); |
| 1053 |
gtk_list_store_set (store, &iter, |
| 1054 |
HMACAUTH_COL_NAME, digest, |
| 1055 |
HMACAUTH_COL_VALUE, digest, |
| 1056 |
-1); |
| 1057 |
if (!found && hmacauth && !g_ascii_strcasecmp (digest, hmacauth)) { |
| 1058 |
*found_iter = iter; |
| 1059 |
found = TRUE; |
| 1060 |
} |
| 1061 |
g_free (digest); |
| 1062 |
} |
| 1063 |
g_strfreev (lines); |
| 1064 |
return found; |
| 1065 |
} |
| 1066 |
|
| 1067 |
static gboolean |
| 1011 |
populate_hmacauth_combo (GtkComboBox *box, const char *hmacauth) |
1068 |
populate_hmacauth_combo (GtkComboBox *box, const char *hmacauth) |
| 1012 |
{ |
1069 |
{ |
| 1013 |
gs_unref_object GtkListStore *store = NULL; |
1070 |
gs_unref_object GtkListStore *store = NULL; |
| 1014 |
GtkTreeIter iter; |
1071 |
GtkTreeIter iter; |
| 1015 |
gboolean active_initialized = FALSE; |
1072 |
gboolean active_initialized; |
| 1016 |
int i; |
|
|
| 1017 |
static const struct { |
| 1018 |
const char *name; |
| 1019 |
const char *pretty_name; |
| 1020 |
} items[] = { |
| 1021 |
{ NM_OPENVPN_AUTH_NONE, N_("None") }, |
| 1022 |
{ NM_OPENVPN_AUTH_RSA_MD4, N_("RSA MD-4") }, |
| 1023 |
{ NM_OPENVPN_AUTH_MD5, N_("MD-5") }, |
| 1024 |
{ NM_OPENVPN_AUTH_SHA1, N_("SHA-1") }, |
| 1025 |
{ NM_OPENVPN_AUTH_SHA224, N_("SHA-224") }, |
| 1026 |
{ NM_OPENVPN_AUTH_SHA256, N_("SHA-256") }, |
| 1027 |
{ NM_OPENVPN_AUTH_SHA384, N_("SHA-384") }, |
| 1028 |
{ NM_OPENVPN_AUTH_SHA512, N_("SHA-512") }, |
| 1029 |
{ NM_OPENVPN_AUTH_RIPEMD160, N_("RIPEMD-160") }, |
| 1030 |
}; |
| 1031 |
|
1073 |
|
| 1032 |
store = gtk_list_store_new (3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN); |
1074 |
store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING); |
| 1033 |
gtk_combo_box_set_model (box, GTK_TREE_MODEL (store)); |
1075 |
gtk_combo_box_set_model (box, GTK_TREE_MODEL (store)); |
| 1034 |
|
1076 |
|
| 1035 |
/* Add default option which won't pass --auth to openvpn */ |
1077 |
/* Add default option which won't pass --auth to openvpn */ |
| 1036 |
gtk_list_store_append (store, &iter); |
1078 |
gtk_list_store_append (store, &iter); |
| 1037 |
gtk_list_store_set (store, &iter, |
1079 |
gtk_list_store_set (store, &iter, |
| 1038 |
HMACAUTH_COL_NAME, _("Default"), |
1080 |
HMACAUTH_COL_NAME, _("Default"), |
|
|
1081 |
HMACAUTH_COL_VALUE, NULL, |
| 1039 |
-1); |
1082 |
-1); |
| 1040 |
|
1083 |
|
| 1041 |
for (i = 0; i < G_N_ELEMENTS (items); i++) { |
1084 |
active_initialized = query_digests (store, hmacauth, &iter); |
| 1042 |
const char *name = items[i].name; |
1085 |
if (active_initialized) |
| 1043 |
|
|
|
| 1044 |
gtk_list_store_append (store, &iter); |
| 1045 |
gtk_list_store_set (store, &iter, |
| 1046 |
HMACAUTH_COL_NAME, _(items[i].pretty_name), |
| 1047 |
HMACAUTH_COL_VALUE, name, |
| 1048 |
-1); |
| 1049 |
if (hmacauth && !g_ascii_strcasecmp (name, hmacauth)) { |
| 1050 |
gtk_combo_box_set_active_iter (box, &iter); |
| 1051 |
active_initialized = TRUE; |
| 1052 |
} |
| 1053 |
} |
| 1054 |
|
| 1055 |
if (!active_initialized) { |
| 1056 |
gtk_list_store_append (store, &iter); |
| 1057 |
gtk_list_store_set (store, &iter, |
| 1058 |
HMACAUTH_COL_NAME, hmacauth, |
| 1059 |
HMACAUTH_COL_VALUE, hmacauth, |
| 1060 |
-1); |
| 1061 |
gtk_combo_box_set_active_iter (box, &iter); |
1086 |
gtk_combo_box_set_active_iter (box, &iter); |
| 1062 |
} |
1087 |
else |
|
|
1088 |
gtk_combo_box_set_active (box, hmacauth ? -1 : 0); |
| 1089 |
|
| 1090 |
return active_initialized; |
| 1063 |
} |
1091 |
} |
| 1064 |
|
1092 |
|
| 1065 |
#define TLS_REMOTE_MODE_NONE "none" |
1093 |
#define TLS_REMOTE_MODE_NONE "none" |
|
Lines 1783-1789
advanced_dialog_new (GHashTable *hash, const char *contype)
Link Here
|
| 1783 |
|
1811 |
|
| 1784 |
widget = GTK_WIDGET (gtk_builder_get_object (builder, "hmacauth_combo")); |
1812 |
widget = GTK_WIDGET (gtk_builder_get_object (builder, "hmacauth_combo")); |
| 1785 |
value = g_hash_table_lookup (hash, NM_OPENVPN_KEY_AUTH); |
1813 |
value = g_hash_table_lookup (hash, NM_OPENVPN_KEY_AUTH); |
| 1786 |
populate_hmacauth_combo (GTK_COMBO_BOX (widget), value); |
1814 |
if (!populate_hmacauth_combo (GTK_COMBO_BOX (widget), value) && value) { |
|
|
1815 |
#if GTK_CHECK_VERSION(4,0,0) |
| 1816 |
entry = GTK_WIDGET (gtk_combo_box_get_child (GTK_COMBO_BOX (widget))); |
| 1817 |
#else |
| 1818 |
entry = GTK_WIDGET (gtk_bin_get_child (GTK_BIN (widget))); |
| 1819 |
#endif |
| 1820 |
gtk_editable_set_text (GTK_EDITABLE (entry), value); |
| 1821 |
} |
| 1787 |
|
1822 |
|
| 1788 |
entry = GTK_WIDGET (gtk_builder_get_object (builder, "tls_remote_entry")); |
1823 |
entry = GTK_WIDGET (gtk_builder_get_object (builder, "tls_remote_entry")); |
| 1789 |
combo = GTK_WIDGET (gtk_builder_get_object (builder, "tls_remote_mode_combo")); |
1824 |
combo = GTK_WIDGET (gtk_builder_get_object (builder, "tls_remote_mode_combo")); |
|
Lines 2267-2272
advanced_dialog_new_hash_from_dialog (GtkWidget *dialog)
Link Here
|
| 2267 |
-1); |
2302 |
-1); |
| 2268 |
if (hmacauth) |
2303 |
if (hmacauth) |
| 2269 |
g_hash_table_insert (hash, NM_OPENVPN_KEY_AUTH, hmacauth); |
2304 |
g_hash_table_insert (hash, NM_OPENVPN_KEY_AUTH, hmacauth); |
|
|
2305 |
} else { |
| 2306 |
#if GTK_CHECK_VERSION(4,0,0) |
| 2307 |
entry = GTK_WIDGET (gtk_combo_box_get_child (GTK_COMBO_BOX (widget))); |
| 2308 |
#else |
| 2309 |
entry = GTK_WIDGET (gtk_bin_get_child (GTK_BIN (widget))); |
| 2310 |
#endif |
| 2311 |
value = gtk_editable_get_text (GTK_EDITABLE (entry)); |
| 2312 |
if (value && *value) |
| 2313 |
g_hash_table_insert (hash, NM_OPENVPN_KEY_AUTH, g_strdup (value)); |
| 2270 |
} |
2314 |
} |
| 2271 |
entry = GTK_WIDGET (gtk_builder_get_object (builder, "tls_version_min")); |
2315 |
entry = GTK_WIDGET (gtk_builder_get_object (builder, "tls_version_min")); |
| 2272 |
value = gtk_editable_get_text (GTK_EDITABLE (entry)); |
2316 |
value = gtk_editable_get_text (GTK_EDITABLE (entry)); |