diff options
Diffstat (limited to 'src/settings/plugins/ifupdown/nms-ifupdown-parser.c')
| -rw-r--r-- | src/settings/plugins/ifupdown/nms-ifupdown-parser.c | 452 |
1 files changed, 223 insertions, 229 deletions
diff --git a/src/settings/plugins/ifupdown/nms-ifupdown-parser.c b/src/settings/plugins/ifupdown/nms-ifupdown-parser.c index 884c6591..369fa70d 100644 --- a/src/settings/plugins/ifupdown/nms-ifupdown-parser.c +++ b/src/settings/plugins/ifupdown/nms-ifupdown-parser.c @@ -37,42 +37,64 @@ #include "nms-ifupdown-plugin.h" #include "nms-ifupdown-parser.h" -static const gchar* +/*****************************************************************************/ + +#define _NMLOG_PREFIX_NAME "ifupdown" +#define _NMLOG_DOMAIN LOGD_SETTINGS +#define _NMLOG(level, ...) \ + nm_log ((level), _NMLOG_DOMAIN, NULL, NULL, \ + "%s" _NM_UTILS_MACRO_FIRST (__VA_ARGS__), \ + _NMLOG_PREFIX_NAME": " \ + _NM_UTILS_MACRO_REST (__VA_ARGS__)) + +/*****************************************************************************/ + +#define _str_has_prefix(val, prefix, require_suffix) \ + ({ \ + const char *_val = (val); \ + \ + (strncmp (_val, ""prefix"", NM_STRLEN (prefix)) == 0) \ + && ( !(require_suffix) \ + || _val[NM_STRLEN (prefix)] != '\0'); \ + }) + +static const char* _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; - } + const char *ret_type = NULL; - while(!ret_type && curr) { - if(!strncmp("wireless-", curr->key, strlen("wireless-")) || - !strncmp("wpa-", curr->key, strlen("wpa-"))) { - ret_type = NM_SETTING_WIRELESS_SETTING_NAME; + if(nm_streq0 (ifparser_getkey (block, "inet"), "ppp")) + ret_type = NM_SETTING_PPP_SETTING_NAME; + else { + if_data *ifb; + + c_list_for_each_entry (ifb, &block->data_lst_head, data_lst) { + if ( _str_has_prefix (ifb->key, "wireless-", FALSE) + || _str_has_prefix (ifb->key, "wpa-", FALSE)) { + ret_type = NM_SETTING_WIRELESS_SETTING_NAME; + break; + } } - curr = curr->next; + if(!ret_type) + ret_type = NM_SETTING_WIRED_SETTING_NAME; } - if(!ret_type) - ret_type = NM_SETTING_WIRED_SETTING_NAME; - - nm_log_info (LOGD_SETTINGS, "guessed connection type (%s) = %s", block->name, ret_type); + _LOGI ("guessed connection type (%s) = %s", block->name, ret_type); return ret_type; } struct _Mapping { - const gchar *domain; + const char *domain; const gpointer target; }; static gpointer -map_by_mapping(struct _Mapping *mapping, const gchar *key) +map_by_mapping (struct _Mapping *mapping, const char *key) { struct _Mapping *curr = mapping; - while(curr->domain) { - if(!strcmp(curr->domain, key)) + + while (curr->domain) { + if (nm_streq (curr->domain, key)) return curr->target; curr++; } @@ -80,14 +102,11 @@ map_by_mapping(struct _Mapping *mapping, const gchar *key) } static void -update_wireless_setting_from_if_block(NMConnection *connection, - if_block *block) +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"); + if_data *curr; + const char *value = ifparser_getkey (block, "inet"); struct _Mapping mapping[] = { {"ssid", "ssid"}, {"essid", "ssid"}, @@ -97,27 +116,26 @@ update_wireless_setting_from_if_block(NMConnection *connection, NMSettingWireless *wireless_setting = NULL; - if(value && !strcmp("ppp", value)) { + if (nm_streq0 (value, "ppp")) return; - } - nm_log_info (LOGD_SETTINGS, "update wireless settings (%s).", block->name); - wireless_setting = NM_SETTING_WIRELESS(nm_setting_wireless_new()); + _LOGI ("update wireless settings (%s).", block->name); + wireless_setting = NM_SETTING_WIRELESS (nm_setting_wireless_new ()); + + c_list_for_each_entry (curr, &block->data_lst_head, data_lst) { + if (_str_has_prefix (curr->key, "wireless-", TRUE)) { + const char* newkey = map_by_mapping (mapping, curr->key + NM_STRLEN ("wireless-")); - 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)) { + _LOGI ("wireless setting key: %s='%s'", newkey, curr->data); + if (nm_streq0 (newkey, "ssid")) { GBytes *ssid; - gint len = strlen(curr->data); + int 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)) { + _LOGI ("setting wireless ssid = %d", len); + } else if (nm_streq0 (newkey, "mode")) { 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")) @@ -125,39 +143,37 @@ update_wireless_setting_from_if_block(NMConnection *connection, 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); + _LOGW ("Invalid mode '%s' (not 'Ad-Hoc', 'Ap', 'Managed', or 'Auto')", curr->data); } else { - g_object_set(wireless_setting, - newkey, curr->data, - NULL); + 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); + } else if (_str_has_prefix (curr->key, "wpa-", TRUE)) { + const char* newkey = map_by_mapping (mapping, curr->key + NM_STRLEN ("wpa-")); - if(newkey && !strcmp("ssid", newkey)) { + if (nm_streq0 (newkey, "ssid")) { GBytes *ssid; - gint len = strlen(curr->data); + int 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) { + _LOGI ("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); + g_object_set (wireless_setting, + newkey, curr->data, + NULL); + _LOGI ("setting wpa newkey(%s)=data(%s)", newkey, curr->data); } } - curr = curr->next; } - nm_connection_add_setting(connection, (NMSetting*) wireless_setting); + nm_connection_add_setting (connection, (NMSetting*) wireless_setting); } -typedef gchar* (*IfupdownStrDupeFunc) (gpointer value, gpointer data); -typedef gpointer (*IfupdownStrToTypeFunc) (const gchar* value); +typedef char* (*IfupdownStrDupeFunc) (gconstpointer value, gpointer data); +typedef gpointer (*IfupdownStrToTypeFunc) (const char* value); static char* normalize_dupe_wireless_key (gpointer value, gpointer data) { @@ -177,7 +193,7 @@ normalize_dupe_wireless_key (gpointer value, gpointer data) { result_cur += next - delim; delim = next + 1; } - if (*delim && strlen (valuec) > GPOINTER_TO_UINT(delim - valuec)) { + if (*delim && strlen (valuec) > GPOINTER_TO_UINT (delim - valuec)) { strncpy (result_cur, delim, endc - delim); result_cur += endc - delim; } @@ -187,12 +203,12 @@ normalize_dupe_wireless_key (gpointer value, gpointer data) { static char* normalize_dupe (gpointer value, gpointer data) { - return g_strdup(value); + return g_strdup (value); } static char* normalize_tolower (gpointer value, gpointer data) { - return g_ascii_strdown(value, -1); + return g_ascii_strdown (value, -1); } static char *normalize_psk (gpointer value, gpointer data) @@ -203,25 +219,25 @@ static char *normalize_psk (gpointer value, gpointer data) } static gpointer -string_to_gpointerint(const gchar* data) +string_to_gpointerint (const char* data) { - gint result = (gint) strtol (data, NULL, 10); - return GINT_TO_POINTER(result); + int result = (int) strtol (data, NULL, 10); + return GINT_TO_POINTER (result); } static gpointer -string_to_glist_of_strings(const gchar* data) +string_to_glist_of_strings (const char* 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); + char *string = (char*) data; + while (string) { + char* next = NULL; + if ( (next = strchr (string, ' ')) || + (next = strchr (string, '\t')) || + (next = strchr (string, '\0')) ) { + + char *part = g_strndup (string, (next - string)); + ret = g_slist_append (ret, part); if (*next) string = next+1; else @@ -234,19 +250,17 @@ string_to_glist_of_strings(const gchar* data) } static void -slist_free_all(gpointer slist) +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) +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"); + if_data *curr; + const char* value = ifparser_getkey (block, "inet"); struct _Mapping mapping[] = { {"psk", "psk"}, {"identity", "leap-username"}, @@ -302,101 +316,93 @@ update_wireless_security_setting_from_if_block(NMConnection *connection, NMSettingWireless *s_wireless; gboolean security = FALSE; - if(value && !strcmp("ppp", value)) { + if (nm_streq0 (value, "ppp")) 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()); + s_wireless = nm_connection_get_setting_wireless (connection); + g_return_if_fail (s_wireless); - while(curr) { - if(strlen(curr->key) > wireless_l && - !strncmp("wireless-", curr->key, wireless_l)) { + _LOGI ("update wireless security settings (%s).", block->name); + wireless_security_setting = NM_SETTING_WIRELESS_SECURITY (nm_setting_wireless_security_new ()); - gchar *property_value = NULL; + c_list_for_each_entry (curr, &block->data_lst_head, data_lst) { + if (_str_has_prefix (curr->key, "wireless-", TRUE)) { + const char *key = curr->key + NM_STRLEN ("wireless-"); + char *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) + const char* newkey = map_by_mapping (mapping, key); + IfupdownStrDupeFunc dupe_func = map_by_mapping (dupe_mapping, key); + IfupdownStrToTypeFunc type_map_func = map_by_mapping (type_mapping, key); + GFreeFunc free_func = map_by_mapping (free_type_mapping, key); + 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); + _LOGI ("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) + if (errno) goto wireless_next; } - g_object_set(wireless_security_setting, - newkey, typed_property_value ?: property_value, - NULL); + g_object_set (wireless_security_setting, + newkey, typed_property_value ?: property_value, + NULL); security = TRUE; - wireless_next: - g_free(property_value); +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; + } else if (_str_has_prefix (curr->key, "wpa-", TRUE)) { + const char *key = curr->key + NM_STRLEN ("wpa-"); + char *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) + const char* newkey = map_by_mapping (mapping, key); + IfupdownStrDupeFunc dupe_func = map_by_mapping (dupe_mapping, key); + IfupdownStrToTypeFunc type_map_func = map_by_mapping (type_mapping, key); + GFreeFunc free_func = map_by_mapping (free_type_mapping, key); + 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 */ - ); + _LOGI ("setting wpa security key: %s=%s", + newkey, + NM_IN_STRSET (newkey, "key", + "leap-password", + "pin", + "psk", + "wep-key0", + "wep-key1", + "wep-key2", + "wep-key3") + ? "<omitted>" + : property_value + ); if (type_map_func) { errno = 0; typed_property_value = (*type_map_func) (property_value); - if(errno) + if (errno) goto wpa_next; } - g_object_set(wireless_security_setting, - newkey, typed_property_value ?: property_value, - NULL); + g_object_set (wireless_security_setting, + newkey, typed_property_value ?: property_value, + NULL); security = TRUE; - wpa_next: - g_free(property_value); +wpa_next: + g_free (property_value); if (free_func && typed_property_value) (*free_func) (typed_property_value); } - next: - curr = curr->next; +next: + ; } if (security) @@ -404,51 +410,52 @@ update_wireless_security_setting_from_if_block(NMConnection *connection, } static void -update_wired_setting_from_if_block(NMConnection *connection, - if_block *block) +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)); + 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; + gs_strfreev char **list = NULL; + char **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])) + if ((*iter)[0] == '\0') continue; if (!inet_pton (AF_INET, *iter, &addr)) { - nm_log_warn (LOGD_SETTINGS, " ignoring invalid nameserver '%s'", *iter); + _LOGW (" 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); + _LOGW (" duplicate DNS domain '%s'", *iter); } - g_strfreev (list); } static gboolean -update_ip4_setting_from_if_block(NMConnection *connection, - if_block *block, - GError **error) +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); + gs_unref_object NMSettingIPConfig *s_ip4 = NM_SETTING_IP_CONFIG (nm_setting_ip4_config_new ()); + const char *type = ifparser_getkey (block, "inet"); - if (!is_static) { - g_object_set (s_ip4, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP4_CONFIG_METHOD_AUTO, NULL); + if (!nm_streq0 (type, "static")) { + g_object_set (s_ip4, + NM_SETTING_IP_CONFIG_METHOD, + NM_SETTING_IP4_CONFIG_METHOD_AUTO, + NULL); } else { guint32 tmp_mask; NMIPAddress *addr; @@ -458,7 +465,6 @@ update_ip4_setting_from_if_block(NMConnection *connection, const char *nameserver_v; const char *nameservers_v; const char *search_v; - char **list, **iter; guint32 netmask_int = 32; /* Address */ @@ -466,7 +472,7 @@ update_ip4_setting_from_if_block(NMConnection *connection, if (!address_v) { g_set_error (error, NM_SETTINGS_ERROR, NM_SETTINGS_ERROR_INVALID_CONNECTION, "Missing IPv4 address"); - goto error; + return FALSE; } /* mask/prefix */ @@ -476,8 +482,8 @@ update_ip4_setting_from_if_block(NMConnection *connection, 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; + "Invalid IPv4 netmask '%s'", netmask_v); + return FALSE; } else { netmask_int = nm_utils_ip4_netmask_to_prefix (tmp_mask); } @@ -486,13 +492,13 @@ update_ip4_setting_from_if_block(NMConnection *connection, /* Add the new address to the setting */ addr = nm_ip_address_new (AF_INET, address_v, netmask_int, error); if (!addr) - goto error; + return FALSE; 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)); + _LOGI ("addresses count: %d", + nm_setting_ip_config_get_num_addresses (s_ip4)); } else { - nm_log_info (LOGD_SETTINGS, "ignoring duplicate IP4 address"); + _LOGI ("ignoring duplicate IP4 address"); } nm_ip_address_unref (addr); @@ -502,7 +508,7 @@ update_ip4_setting_from_if_block(NMConnection *connection, 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; + return FALSE; } if (!nm_setting_ip_config_get_gateway (s_ip4)) g_object_set (s_ip4, NM_SETTING_IP_CONFIG_GATEWAY, gateway_v, NULL); @@ -515,70 +521,67 @@ update_ip4_setting_from_if_block(NMConnection *connection, 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"); + _LOGI ("No dns-nameserver configured in /etc/network/interfaces"); /* DNS searches */ search_v = ifparser_getkey (block, "dns-search"); if (search_v) { + gs_strfreev char **list = NULL; + char **iter; + list = g_strsplit_set (search_v, " \t", -1); for (iter = list; iter && *iter; iter++) { - g_strstrip (*iter); - if (g_ascii_isspace (*iter[0])) + if ((*iter)[0] == '\0') continue; if (!nm_setting_ip_config_add_dns_search (s_ip4, *iter)) - nm_log_warn (LOGD_SETTINGS, " duplicate DNS domain '%s'", *iter); + _LOGW (" 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)); + nm_connection_add_setting (connection, NM_SETTING (g_steal_pointer (&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; + gs_strfreev char **list = NULL; + char **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])) + if ((*iter)[0] == '\0') continue; if (!inet_pton (AF_INET6, *iter, &addr)) { - nm_log_warn (LOGD_SETTINGS, " ignoring invalid nameserver '%s'", *iter); + _LOGW (" 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); + _LOGW (" duplicate DNS domain '%s'", *iter); } - g_strfreev (list); } static gboolean -update_ip6_setting_from_if_block(NMConnection *connection, - if_block *block, - GError **error) +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)); + gs_unref_object NMSettingIPConfig *s_ip6 = NM_SETTING_IP_CONFIG (nm_setting_ip6_config_new ()); + const char *type = ifparser_getkey (block, "inet6"); - if (!is_static) { - g_object_set(s_ip6, NM_SETTING_IP_CONFIG_METHOD, NM_SETTING_IP6_CONFIG_METHOD_AUTO, NULL); + if (!NM_IN_STRSET (type, "static", "v4tunnel")) { + g_object_set (s_ip6, + NM_SETTING_IP_CONFIG_METHOD, + NM_SETTING_IP6_CONFIG_METHOD_AUTO, + NULL); } else { NMIPAddress *addr; const char *address_v; @@ -588,31 +591,30 @@ update_ip6_setting_from_if_block(NMConnection *connection, const char *nameservers_v; const char *search_v; int prefix_int = 128; - char **list, **iter; /* Address */ - address_v = ifparser_getkey(block, "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; + return FALSE; } /* Prefix */ - prefix_v = ifparser_getkey(block, "netmask"); + 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; + return FALSE; if (nm_setting_ip_config_add_address (s_ip6, addr)) { - nm_log_info (LOGD_SETTINGS, "addresses count: %d", + _LOGI ("addresses count: %d", nm_setting_ip_config_get_num_addresses (s_ip6)); } else { - nm_log_info (LOGD_SETTINGS, "ignoring duplicate IP6 address"); + _LOGI ("ignoring duplicate IP6 address"); } nm_ip_address_unref (addr); @@ -622,33 +624,34 @@ update_ip6_setting_from_if_block(NMConnection *connection, 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; + return FALSE; } 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"); + nameserver_v = ifparser_getkey (block, "dns-nameserver"); ifupdown_ip6_add_dns (s_ip6, nameserver_v); - nameservers_v = ifparser_getkey(block, "dns-nameservers"); + 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"); + _LOGI ("No dns-nameserver configured in /etc/network/interfaces"); /* DNS searches */ search_v = ifparser_getkey (block, "dns-search"); if (search_v) { + gs_strfreev char **list = NULL; + char **iter; + list = g_strsplit_set (search_v, " \t", -1); for (iter = list; iter && *iter; iter++) { - g_strstrip (*iter); - if (isblank (*iter[0])) + if ((*iter)[0] == '\0') continue; if (!nm_setting_ip_config_add_dns_search (s_ip6, *iter)) - nm_log_warn (LOGD_SETTINGS, " duplicate DNS domain '%s'", *iter); + _LOGW (" duplicate DNS domain '%s'", *iter); } - g_strfreev (list); } g_object_set (s_ip6, @@ -656,12 +659,8 @@ update_ip6_setting_from_if_block(NMConnection *connection, NULL); } - nm_connection_add_setting (connection, NM_SETTING (s_ip6)); + nm_connection_add_setting (connection, NM_SETTING (g_steal_pointer (&s_ip6))); return TRUE; - -error: - g_object_unref (s_ip6); - return FALSE; } gboolean @@ -669,25 +668,22 @@ 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; + const char *type; + gs_free char *idstr = NULL; + gs_free 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); + if (!s_con) { + s_con = NM_SETTING_CONNECTION (nm_setting_connection_new ()); 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); + uuid = nm_utils_uuid_generate_from_string (idstr, -1, NM_UTILS_UUID_TYPE_LEGACY, NULL); g_object_set (s_con, NM_SETTING_CONNECTION_TYPE, type, NM_SETTING_CONNECTION_INTERFACE_NAME, block->name, @@ -696,19 +692,18 @@ ifupdown_update_connection_from_if_block (NMConnection *connection, 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)); + _LOGI ("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)) + if (nm_streq (type, NM_SETTING_WIRED_SETTING_NAME)) update_wired_setting_from_if_block (connection, block); - else if (!strcmp (NM_SETTING_WIRELESS_SETTING_NAME, type)) { + else if (nm_streq (type, NM_SETTING_WIRELESS_SETTING_NAME)) { update_wireless_setting_from_if_block (connection, block); update_wireless_security_setting_from_if_block (connection, block); } - if (ifparser_haskey(block, "inet6")) + 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); @@ -716,6 +711,5 @@ ifupdown_update_connection_from_if_block (NMConnection *connection, if (success == TRUE) success = nm_connection_verify (connection, error); - g_free (idstr); return success; } |