summary refs log tree commit diff
path: root/src/settings/plugins/ifupdown/parser.c
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2017-01-17 20:25:09 +0100
committerMichael Biebl <biebl@debian.org>2017-01-17 20:25:09 +0100
commit58f8be580039b0575b197b9573a1c92745d96d30 (patch)
tree2c226233f623a0dcb529be0eb8cdf97e4a2ae0c0 /src/settings/plugins/ifupdown/parser.c
parent45cb5bb3c0e6edb887cf69b417fcaf7053814a9b (diff)
New upstream version 1.5.90 upstream/1.5.90
Diffstat (limited to 'src/settings/plugins/ifupdown/parser.c')
-rw-r--r--src/settings/plugins/ifupdown/parser.c726
1 files changed, 0 insertions, 726 deletions
diff --git a/src/settings/plugins/ifupdown/parser.c b/src/settings/plugins/ifupdown/parser.c
deleted file mode 100644
index 109018dd..00000000
--- a/src/settings/plugins/ifupdown/parser.c
+++ /dev/null
@@ -1,726 +0,0 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
-
-/* NetworkManager system settings service (ifupdown)
- *
- * Alexander Sack <asac@ubuntu.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * (C) Copyright 2008 Canonical Ltd.
- */
-
-#include "nm-default.h"
-
-#include <string.h>
-#include <arpa/inet.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <ctype.h>
-
-#include "nm-core-internal.h"
-#include "nm-settings-plugin.h"
-
-#include "parser.h"
-#include "plugin.h"
-
-
-#define WPA_PMK_LEN 32
-
-#include "parser.h"
-
-static const gchar*
-_ifupdownplugin_guess_connection_type (if_block *block)
-{
-	if_data *curr = block->info;
-	const gchar* ret_type = NULL;
-	const gchar* value = ifparser_getkey(block, "inet");
-	if(value && !strcmp("ppp", value)) {
-		ret_type = NM_SETTING_PPP_SETTING_NAME;
-	}
-
-	while(!ret_type && curr) {
-		if(!strncmp("wireless-", curr->key, strlen("wireless-")) ||
-		   !strncmp("wpa-", curr->key, strlen("wpa-"))) {
-			ret_type = NM_SETTING_WIRELESS_SETTING_NAME;
-		}
-		curr = curr->next;
-	}
-
-	if(!ret_type)
-		ret_type = NM_SETTING_WIRED_SETTING_NAME;
-
-	nm_log_info (LOGD_SETTINGS, "guessed connection type (%s) = %s", block->name, ret_type);
-	return ret_type;
-}
-
-
-struct _Mapping {
-	const gchar *domain;
-	const gpointer target;
-};
-
-static gpointer
-map_by_mapping(struct _Mapping *mapping, const gchar *key)
-{
-	struct _Mapping *curr = mapping;
-	while(curr->domain) {
-		if(!strcmp(curr->domain, key))
-			return curr->target;
-		curr++;
-	}
-	return NULL;
-}
-
-static void
-update_wireless_setting_from_if_block(NMConnection *connection,
-							   if_block *block)
-{
-	gint wpa_l= strlen("wpa-");
-	gint wireless_l= strlen("wireless-");
-
-	if_data *curr = block->info;
-	const gchar* value = ifparser_getkey (block, "inet");
-	struct _Mapping mapping[] = {
-		{"ssid", "ssid"},
-		{"essid", "ssid"},
-		{"mode", "mode"},
-		{ NULL, NULL}
-	};
-
-	NMSettingWireless *wireless_setting = NULL;
-
-	if(value && !strcmp("ppp", value)) {
-		return;
-	}
-
-	nm_log_info (LOGD_SETTINGS, "update wireless settings (%s).", block->name);
-	wireless_setting = NM_SETTING_WIRELESS(nm_setting_wireless_new());
-
-	while(curr) {
-		if(strlen(curr->key) > wireless_l &&
-		   !strncmp("wireless-", curr->key, wireless_l)) {
-			const gchar* newkey = map_by_mapping(mapping, curr->key+wireless_l);
-			nm_log_info (LOGD_SETTINGS, "wireless setting key: %s='%s'", newkey, curr->data);
-			if(newkey && !strcmp("ssid", newkey)) {
-				GBytes *ssid;
-				gint len = strlen(curr->data);
-
-				ssid = g_bytes_new (curr->data, len);
-				g_object_set (wireless_setting, NM_SETTING_WIRELESS_SSID, ssid, NULL);
-				g_bytes_unref (ssid);
-				nm_log_info (LOGD_SETTINGS, "setting wireless ssid = %d", len);
-			} else if(newkey && !strcmp("mode", newkey)) {
-				if (!g_ascii_strcasecmp (curr->data, "Managed") || !g_ascii_strcasecmp (curr->data, "Auto"))
-					g_object_set (wireless_setting, NM_SETTING_WIRELESS_MODE, NM_SETTING_WIRELESS_MODE_INFRA, NULL);
-				else if (!g_ascii_strcasecmp (curr->data, "Ad-Hoc"))
-					g_object_set (wireless_setting, NM_SETTING_WIRELESS_MODE, NM_SETTING_WIRELESS_MODE_ADHOC, NULL);
-				else if (!g_ascii_strcasecmp (curr->data, "Master"))
-					g_object_set (wireless_setting, NM_SETTING_WIRELESS_MODE, NM_SETTING_WIRELESS_MODE_AP, NULL);
-				else
-					nm_log_warn (LOGD_SETTINGS, "Invalid mode '%s' (not 'Ad-Hoc', 'Ap', 'Managed', or 'Auto')", curr->data);
-			} else {
-				g_object_set(wireless_setting,
-					   newkey, curr->data,
-					   NULL);
-			}
-		} else if(strlen(curr->key) > wpa_l &&
-				!strncmp("wpa-", curr->key, wpa_l)) {
-			const gchar* newkey = map_by_mapping(mapping, curr->key+wpa_l);
-
-			if(newkey && !strcmp("ssid", newkey)) {
-				GBytes *ssid;
-				gint len = strlen(curr->data);
-
-				ssid = g_bytes_new (curr->data, len);
-				g_object_set (wireless_setting, NM_SETTING_WIRELESS_SSID, ssid, NULL);
-				g_bytes_unref (ssid);
-				nm_log_info (LOGD_SETTINGS, "setting wpa ssid = %d", len);
-			} else if(newkey) {
-
-				g_object_set(wireless_setting,
-						   newkey, curr->data,
-						   NULL);
-				nm_log_info (LOGD_SETTINGS, "setting wpa newkey(%s)=data(%s)", newkey, curr->data);
-			}
-		}
-		curr = curr->next;
-	}
-	nm_connection_add_setting(connection, (NMSetting*) wireless_setting);
-}
-
-typedef gchar* (*IfupdownStrDupeFunc) (gpointer value, gpointer data);
-typedef gpointer (*IfupdownStrToTypeFunc) (const gchar* value);
-
-static char*
-normalize_dupe_wireless_key (gpointer value, gpointer data) {
-	char* valuec = value;
-	char* endc = valuec + strlen (valuec);
-	char* delim = valuec;
-	char* next = delim;
-	char* result = malloc (strlen (valuec) + 1);
-	char* result_cur = result;
-
-	while (*delim && (next = strchr (delim, '-')) != NULL) {
-		if (next == delim) {
-			delim++;
-			continue;
-		}
-		strncpy (result_cur, delim, next - delim);
-		result_cur += next - delim;
-		delim = next + 1;
-	}
-	if (*delim && strlen (valuec) > GPOINTER_TO_UINT(delim - valuec)) {
-		strncpy (result_cur, delim, endc - delim);
-		result_cur += endc - delim;
-	}
-	*result_cur = '\0';
-	return result;
-}
-
-static char*
-normalize_dupe (gpointer value, gpointer data) {
-	return g_strdup(value);
-}
-
-static char*
-normalize_tolower (gpointer value, gpointer data) {
-	return g_ascii_strdown(value, -1);
-}
-
-static char *normalize_psk (gpointer value, gpointer data)
-{
-	if (strlen (value) >= 8 && strlen (value) <= 64)
-		return g_strdup (value);
-	return NULL;
-}
-
-static gpointer
-string_to_gpointerint(const gchar* data)
-{
-	gint result = (gint) strtol (data, NULL, 10);
-	return GINT_TO_POINTER(result);
-}
-	
-static gpointer
-string_to_glist_of_strings(const gchar* data)
-{
-	GSList *ret = NULL;
-	gchar *string = (gchar*) data;
-	while(string) {
-		gchar* next = NULL;
-		if( (next = strchr(string, ' '))  ||
-		    (next = strchr(string, '\t')) ||
-		    (next = strchr(string, '\0')) ) {
-
-			gchar *part = g_strndup(string, (next - string));
-			ret = g_slist_append(ret, part);
-			if (*next)
-				string = next+1;
-			else
-				string = NULL;
-		} else {
-			string = NULL;
-		}
-	}
-	return ret;
-}
-
-static void
-slist_free_all(gpointer slist)
-{
-	g_slist_free_full ((GSList *) slist, g_free);
-}
-
-static void
-update_wireless_security_setting_from_if_block(NMConnection *connection,
-									  if_block *block)
-{
-	gint wpa_l= strlen("wpa-");
-	gint wireless_l= strlen("wireless-");
-	if_data *curr = block->info;
-	const gchar* value = ifparser_getkey (block, "inet");
-	struct _Mapping mapping[] = {
-		{"psk", "psk"},
-		{"identity", "leap-username"},
-		{"password", "leap-password"},
-		{"key", "wep-key0"},
-		{"key-mgmt", "key-mgmt"},
-		{"group", "group"},
-		{"pairwise", "pairwise"},
-		{"proto", "proto"},
-		{"pin", "pin"},
-		{"wep-key0", "wep-key0"},
-		{"wep-key1", "wep-key1"},
-		{"wep-key2", "wep-key2"},
-		{"wep-key3", "wep-key3"},
-		{"wep-tx-keyidx", "wep-tx-keyidx"},
-		{ NULL, NULL}
-	};
-
-	struct _Mapping dupe_mapping[] = {
-		{"psk", normalize_psk},
-		{"identity", normalize_dupe},
-		{"password", normalize_dupe},
-		{"key", normalize_dupe_wireless_key},
-		{"key-mgmt", normalize_tolower},
-		{"group", normalize_tolower},
-		{"pairwise", normalize_tolower},
-		{"proto", normalize_tolower},
-		{"pin", normalize_dupe},
-		{"wep-key0", normalize_dupe_wireless_key},
-		{"wep-key1", normalize_dupe_wireless_key},
-		{"wep-key2", normalize_dupe_wireless_key},
-		{"wep-key3", normalize_dupe_wireless_key},
-		{"wep-tx-keyidx", normalize_dupe},
-		{ NULL, NULL}
-	};
-
-	struct _Mapping type_mapping[] = {
-		{"group", string_to_glist_of_strings},
-		{"pairwise", string_to_glist_of_strings},
-		{"proto", string_to_glist_of_strings},
-		{"wep-tx-keyidx", string_to_gpointerint},
-		{ NULL, NULL}
-	};
-
-	struct _Mapping free_type_mapping[] = {
-		{"group", slist_free_all},
-		{"pairwise", slist_free_all},
-		{"proto", slist_free_all},
-		{ NULL, NULL}
-	};
-
-	NMSettingWirelessSecurity *wireless_security_setting;
-	NMSettingWireless *s_wireless;
-	gboolean security = FALSE;
-
-	if(value && !strcmp("ppp", value)) {
-		return;
-	}
-
-	s_wireless = nm_connection_get_setting_wireless(connection);
-	g_return_if_fail(s_wireless);
-
-	nm_log_info (LOGD_SETTINGS, "update wireless security settings (%s).", block->name);
-	wireless_security_setting =
-		NM_SETTING_WIRELESS_SECURITY(nm_setting_wireless_security_new());
-
-	while(curr) {
-		if(strlen(curr->key) > wireless_l &&
-		   !strncmp("wireless-", curr->key, wireless_l)) {
-
-			gchar *property_value = NULL;
-			gpointer typed_property_value = NULL;
-			const gchar* newkey = map_by_mapping(mapping, curr->key+wireless_l);
-			IfupdownStrDupeFunc dupe_func = map_by_mapping (dupe_mapping, curr->key+wireless_l);
-			IfupdownStrToTypeFunc type_map_func = map_by_mapping (type_mapping, curr->key+wireless_l);
-			GFreeFunc free_func = map_by_mapping (free_type_mapping, curr->key+wireless_l);
-			if(!newkey || !dupe_func)
-				goto next;
-
-			property_value = (*dupe_func) (curr->data, connection);
-			nm_log_info (LOGD_SETTINGS, "setting wireless security key: %s=%s",
-			             newkey, property_value);
-
-			if (type_map_func) {
-				errno = 0;
-				typed_property_value = (*type_map_func) (property_value);
-				if(errno)
-					goto wireless_next;
-			}
-		    
-			g_object_set(wireless_security_setting,
-					   newkey, typed_property_value ? typed_property_value : property_value,
-					   NULL);
-			security = TRUE;
-
-		wireless_next:
-			g_free(property_value);
-			if (typed_property_value && free_func)
-				(*free_func) (typed_property_value);
-
-		} else if(strlen(curr->key) > wpa_l &&
-				!strncmp("wpa-", curr->key, wpa_l)) {
-
-			gchar *property_value = NULL;
-			gpointer typed_property_value = NULL;
-			const gchar* newkey = map_by_mapping(mapping, curr->key+wpa_l);
-			IfupdownStrDupeFunc dupe_func = map_by_mapping (dupe_mapping, curr->key+wpa_l);
-			IfupdownStrToTypeFunc type_map_func = map_by_mapping (type_mapping, curr->key+wpa_l);
-			GFreeFunc free_func = map_by_mapping (free_type_mapping, curr->key+wpa_l);
-			if(!newkey || !dupe_func)
-				goto next;
-
-			property_value = (*dupe_func) (curr->data, connection);
-			nm_log_info (LOGD_SETTINGS, "setting wpa security key: %s=%s",
-			             newkey,
-#ifdef DEBUG_SECRETS
-			             property_value
-#else /* DEBUG_SECRETS */
-			             !strcmp("key", newkey) ||
-			             !strcmp("leap-password", newkey) ||
-			             !strcmp("pin", newkey) ||
-			             !strcmp("psk", newkey) ||
-			             !strcmp("wep-key0", newkey) ||
-			             !strcmp("wep-key1", newkey) ||
-			             !strcmp("wep-key2", newkey) ||
-			             !strcmp("wep-key3", newkey) ||
-			             NULL ?
-			             "<omitted>" : property_value
-#endif /* DEBUG_SECRETS */
-			             );
-
-			if (type_map_func) {
-				errno = 0;
-				typed_property_value = (*type_map_func) (property_value);
-				if(errno)
-					goto wpa_next;
-			}
-		    
-			g_object_set(wireless_security_setting,
-					   newkey, typed_property_value ? typed_property_value : property_value,
-					   NULL);
-			security = TRUE;
-
-		wpa_next:
-			g_free(property_value);
-			if (free_func && typed_property_value)
-				(*free_func) (typed_property_value);
-		}
-	next:
-		curr = curr->next;
-	}
-
-
-	if (security)
-		nm_connection_add_setting (connection, NM_SETTING (wireless_security_setting));
-}
-
-static void
-update_wired_setting_from_if_block(NMConnection *connection,
-							if_block *block)
-{
-	NMSettingWired *s_wired = NULL;
-	s_wired = NM_SETTING_WIRED(nm_setting_wired_new());
-	nm_connection_add_setting(connection, NM_SETTING(s_wired));
-}
-
-static void
-ifupdown_ip4_add_dns (NMSettingIPConfig *s_ip4, const char *dns)
-{
-	guint32 addr;
-	char **list, **iter;
-
-	if (dns == NULL)
-		return;
-
-	list = g_strsplit_set (dns, " \t", -1);
-	for (iter = list; iter && *iter; iter++) {
-		g_strstrip (*iter);
-		if (g_ascii_isspace (*iter[0]))
-			continue;
-		if (!inet_pton (AF_INET, *iter, &addr)) {
-			nm_log_warn (LOGD_SETTINGS, "    ignoring invalid nameserver '%s'", *iter);
-			continue;
-		}
-
-		if (!nm_setting_ip_config_add_dns (s_ip4, *iter))
-			nm_log_warn (LOGD_SETTINGS, "    duplicate DNS domain '%s'", *iter);
-	}
-	g_strfreev (list);
-}
-
-static gboolean
-update_ip4_setting_from_if_block(NMConnection *connection,
-						   if_block *block,
-						   GError **error)
-{
-
-	NMSettingIPConfig *s_ip4 = NM_SETTING_IP_CONFIG (nm_setting_ip4_config_new());
-	const char *type = ifparser_getkey(block, "inet");
-	gboolean is_static = type && !strcmp("static", type);
-
-	if (!is_static) {
-		g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL);
-	} else {
-		guint32 tmp_mask;
-		NMIPAddress *addr;
-		const char *address_v;
-		const char *netmask_v;
-		const char *gateway_v;
-		const char *nameserver_v;
-		const char *nameservers_v;
-		const char *search_v;
-		char **list, **iter;
-		guint32 netmask_int = 32;
-
-		/* Address */
-		address_v = ifparser_getkey (block, "address");
-		if (!address_v) {
-			g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
-			             "Missing IPv4 address");
-			goto error;
-		}
-
-		/* mask/prefix */
-		netmask_v = ifparser_getkey (block, "netmask");
-		if (netmask_v) {
-			if (strlen (netmask_v) < 7) {
-				netmask_int = atoi (netmask_v);
-			} else if (!inet_pton (AF_INET, netmask_v, &tmp_mask)) {
-				g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
-						   "Invalid IPv4 netmask '%s'", netmask_v);
-				goto error;
-			} else {
-				netmask_int = nm_utils_ip4_netmask_to_prefix (tmp_mask);
-			}
-		}
-
-		/* Add the new address to the setting */
-		addr = nm_ip_address_new (AF_INET, address_v, netmask_int, error);
-		if (!addr)
-			goto error;
-
-		if (nm_setting_ip_config_add_address (s_ip4, addr)) {
-			nm_log_info (LOGD_SETTINGS, "addresses count: %d",
-			             nm_setting_ip_config_get_num_addresses (s_ip4));
-		} else {
-			nm_log_info (LOGD_SETTINGS, "ignoring duplicate IP4 address");
-		}
-		nm_ip_address_unref (addr);
-
-		/* gateway */
-		gateway_v = ifparser_getkey (block, "gateway");
-		if (gateway_v) {
-			if (!nm_utils_ipaddr_valid (AF_INET, gateway_v)) {
-				g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
-				             "Invalid IPv4 gateway '%s'", gateway_v);
-				goto error;
-			}
-			if (!nm_setting_ip_config_get_gateway (s_ip4))
-				g_object_set (s_ip4, NM_SETTING_IP_CONFIG_GATEWAY, gateway_v, NULL);
-		}
-
-		nameserver_v = ifparser_getkey (block, "dns-nameserver");
-		ifupdown_ip4_add_dns (s_ip4, nameserver_v);
-
-		nameservers_v = ifparser_getkey (block, "dns-nameservers");
-		ifupdown_ip4_add_dns (s_ip4, nameservers_v);
-
-		if (!nm_setting_ip_config_get_num_dns (s_ip4))
-			nm_log_info (LOGD_SETTINGS, "No dns-nameserver configured in /etc/network/interfaces");
-
-		/* DNS searches */
-		search_v = ifparser_getkey (block, "dns-search");
-		if (search_v) {
-			list = g_strsplit_set (search_v, " \t", -1);
-			for (iter = list; iter && *iter; iter++) {
-				g_strstrip (*iter);
-				if (g_ascii_isspace (*iter[0]))
-					continue;
-				if (!nm_setting_ip_config_add_dns_search (s_ip4, *iter))
-					nm_log_warn (LOGD_SETTINGS, "    duplicate DNS domain '%s'", *iter);
-			}
-			g_strfreev (list);
-		}
-
-		g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_MANUAL, NULL);
-	}
-
-	nm_connection_add_setting (connection, NM_SETTING (s_ip4));
-	return TRUE;
-
-error:
-	g_object_unref (s_ip4);
-	return FALSE;
-}
-
-static void
-ifupdown_ip6_add_dns (NMSettingIPConfig *s_ip6, const char *dns)
-{
-	struct in6_addr addr;
-	char **list, **iter;
-
-	if (dns == NULL)
-		return;
-
-	list = g_strsplit_set (dns, " \t", -1);
-	for (iter = list; iter && *iter; iter++) {
-		g_strstrip (*iter);
-		if (g_ascii_isspace (*iter[0]))
-			continue;
-		if (!inet_pton (AF_INET6, *iter, &addr)) {
-			nm_log_warn (LOGD_SETTINGS, "    ignoring invalid nameserver '%s'", *iter);
-			continue;
-		}
-
-		if (!nm_setting_ip_config_add_dns (s_ip6, *iter))
-			nm_log_warn (LOGD_SETTINGS, "    duplicate DNS domain '%s'", *iter);
-	}
-	g_strfreev (list);
-}
-
-static gboolean
-update_ip6_setting_from_if_block(NMConnection *connection,
-						   if_block *block,
-						   GError **error)
-{
-	NMSettingIPConfig *s_ip6 = NM_SETTING_IP_CONFIG (nm_setting_ip6_config_new());
-	const char *type = ifparser_getkey(block, "inet6");
-	gboolean is_static = type && (!strcmp("static", type) ||
-							!strcmp("v4tunnel", type));
-
-	if (!is_static) {
-		g_object_set(s_ip6, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO, NULL);
-	} else {
-		NMIPAddress *addr;
-		const char *address_v;
-		const char *prefix_v;
-		const char *gateway_v;
-		const char *nameserver_v;
-		const char *nameservers_v;
-		const char *search_v;
-		int prefix_int = 128;
-		char **list, **iter;
-
-		/* Address */
-		address_v = ifparser_getkey(block, "address");
-		if (!address_v) {
-			g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
-			             "Missing IPv6 address");
-			goto error;
-		}
-
-		/* Prefix */
-		prefix_v = ifparser_getkey(block, "netmask");
-		if (prefix_v)
-			prefix_int = g_ascii_strtoll (prefix_v, NULL, 10);
-
-		/* Add the new address to the setting */
-		addr = nm_ip_address_new (AF_INET6, address_v, prefix_int, error);
-		if (!addr)
-			goto error;
-
-		if (nm_setting_ip_config_add_address (s_ip6, addr)) {
-			nm_log_info (LOGD_SETTINGS, "addresses count: %d",
-			             nm_setting_ip_config_get_num_addresses (s_ip6));
-		} else {
-			nm_log_info (LOGD_SETTINGS, "ignoring duplicate IP6 address");
-		}
-		nm_ip_address_unref (addr);
-
-		/* gateway */
-		gateway_v = ifparser_getkey (block, "gateway");
-		if (gateway_v) {
-			if (!nm_utils_ipaddr_valid (AF_INET6, gateway_v)) {
-				g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION,
-				             "Invalid IPv6 gateway '%s'", gateway_v);
-				goto error;
-			}
-			if (!nm_setting_ip_config_get_gateway (s_ip6))
-				g_object_set (s_ip6, NM_SETTING_IP_CONFIG_GATEWAY, gateway_v, NULL);
-		}
-
-		nameserver_v = ifparser_getkey(block, "dns-nameserver");
-		ifupdown_ip6_add_dns (s_ip6, nameserver_v);
-
-		nameservers_v = ifparser_getkey(block, "dns-nameservers");
-		ifupdown_ip6_add_dns (s_ip6, nameservers_v);
-
-		if (!nm_setting_ip_config_get_num_dns (s_ip6))
-			nm_log_info (LOGD_SETTINGS, "No dns-nameserver configured in /etc/network/interfaces");
-
-		/* DNS searches */
-		search_v = ifparser_getkey (block, "dns-search");
-		if (search_v) {
-			list = g_strsplit_set (search_v, " \t", -1);
-			for (iter = list; iter && *iter; iter++) {
-				g_strstrip (*iter);
-				if (isblank (*iter[0]))
-					continue;
-				if (!nm_setting_ip_config_add_dns_search (s_ip6, *iter))
-					nm_log_warn (LOGD_SETTINGS, "    duplicate DNS domain '%s'", *iter);
-			}
-			g_strfreev (list);
-		}
-
-		g_object_set (s_ip6,
-		              NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_MANUAL,
-		              NULL);
-	}
-
-	nm_connection_add_setting (connection, NM_SETTING (s_ip6));
-	return TRUE;
-
-error:
-	g_object_unref (s_ip6);
-	return FALSE;
-}
-
-gboolean
-ifupdown_update_connection_from_if_block (NMConnection *connection,
-                                          if_block *block,
-                                          GError **error)
-{
-	const char *type = NULL;
-	char *idstr = NULL;
-	char *uuid_base = NULL;
-	char *uuid = NULL;
-	NMSettingConnection *s_con;
-	gboolean success = FALSE;
-
-	s_con = nm_connection_get_setting_connection (connection);
-	if(!s_con) {
-		s_con = NM_SETTING_CONNECTION (nm_setting_connection_new());
-		g_assert (s_con);
-		nm_connection_add_setting (connection, NM_SETTING (s_con));
-	}
-
-	type = _ifupdownplugin_guess_connection_type (block);
-	idstr = g_strconcat ("Ifupdown (", block->name, ")", NULL);
-	uuid_base = idstr;
-
-	uuid = nm_utils_uuid_generate_from_string (uuid_base, -1, NM_UTILS_UUID_TYPE_LEGACY, NULL);
-	g_object_set (s_con,
-	              NM_SETTING_CONNECTION_TYPE, type,
-	              NM_SETTING_CONNECTION_INTERFACE_NAME, block->name,
-	              NM_SETTING_CONNECTION_ID, idstr,
-	              NM_SETTING_CONNECTION_UUID, uuid,
-	              NM_SETTING_CONNECTION_READ_ONLY, TRUE,
-	              NM_SETTING_CONNECTION_AUTOCONNECT, FALSE,
-	              NULL);
-	g_free (uuid);
-
-	nm_log_info (LOGD_SETTINGS, "update_connection_setting_from_if_block: name:%s, type:%s, id:%s, uuid: %s",
-	             block->name, type, idstr, nm_setting_connection_get_uuid (s_con));
-
-	if (!strcmp (NM_SETTING_WIRED_SETTING_NAME, type))
-		update_wired_setting_from_if_block (connection, block);
-	else if (!strcmp (NM_SETTING_WIRELESS_SETTING_NAME, type)) {
-		update_wireless_setting_from_if_block (connection, block);
-		update_wireless_security_setting_from_if_block (connection, block);
-	}
-
-	if (ifparser_haskey(block, "inet6"))
-		success = update_ip6_setting_from_if_block (connection, block, error);
-	else
-		success = update_ip4_setting_from_if_block (connection, block, error);
-
-	if (success == TRUE)
-		success = nm_connection_verify (connection, error);
-
-	g_free (idstr);
-	return success;
-}