diff options
Diffstat (limited to 'vpn')
-rw-r--r-- | vpn/vpn-provider.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/vpn/vpn-provider.c b/vpn/vpn-provider.c index 5dd18d63..bb89ccf9 100644 --- a/vpn/vpn-provider.c +++ b/vpn/vpn-provider.c @@ -834,7 +834,16 @@ static int vpn_provider_save(struct vpn_provider *provider) { GKeyFile *keyfile; - DBG("provider %p", provider); + DBG("provider %p immutable %s", provider, + provider->immutable ? "yes" : "no"); + + if (provider->immutable == TRUE) { + /* + * Do not save providers that are provisioned via .config + * file. + */ + return -EPERM; + } keyfile = g_key_file_new(); if (keyfile == NULL) @@ -2004,8 +2013,7 @@ int __vpn_provider_create_from_config(GHashTable *settings, provider->config_file = g_strdup(config_ident); provider->config_entry = g_strdup(config_entry); - if (provider_register(provider) == 0) - vpn_provider_load(provider); + provider_register(provider); provider_resolv_host_addr(provider); } @@ -2021,6 +2029,8 @@ int __vpn_provider_create_from_config(GHashTable *settings, while (g_hash_table_iter_next(&hash, &key, &value) == TRUE) __vpn_provider_set_string_immutable(provider, key, value); + provider->immutable = TRUE; + vpn_provider_save(provider); err = provider_register(provider); |