summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Winship <danw@gnome.org>2014-07-17 16:09:42 -0400
committerDan Winship <danw@gnome.org>2014-07-23 10:56:26 -0400
commit2b2faf9c28a0a3442942681ecf4ad9b31b7a49ae (patch)
tree7fb3969a7ee0b70fb33cee21f3c50623f61295c5
parent4308a8305ac6f57f2a42992931a7da3bc85fdbd4 (diff)
config: move some spec-match-list handling from config to core
NMConfig accepted no-auto-default and ignore-carrier lists with untagged specs (ie, interface names not prefixed with "interface-name:" and hardware addresses not prefixed with "mac:"). Move that handling into nm_match_spec_interface_name() and nm_match_spec_hwaddr() instead.
-rw-r--r--src/NetworkManagerUtils.c6
-rw-r--r--src/config/nm-config-device.c22
-rw-r--r--src/config/tests/Makefile.am1
-rw-r--r--src/config/tests/nm-test-device.c12
4 files changed, 13 insertions, 28 deletions
diff --git a/src/NetworkManagerUtils.c b/src/NetworkManagerUtils.c
index d2ae0573d1..888141c65c 100644
--- a/src/NetworkManagerUtils.c
+++ b/src/NetworkManagerUtils.c
@@ -589,6 +589,9 @@ nm_match_spec_hwaddr (const GSList *specs, const char *hwaddr)
g_return_val_if_fail (hwaddr != NULL, FALSE);
+ if (nm_match_spec_string (specs, hwaddr))
+ return TRUE;
+
hwaddr_match = g_strdup_printf ("mac:%s", hwaddr);
matched = nm_match_spec_string (specs, hwaddr_match);
g_free (hwaddr_match);
@@ -603,6 +606,9 @@ nm_match_spec_interface_name (const GSList *specs, const char *interface_name)
g_return_val_if_fail (interface_name != NULL, FALSE);
+ if (nm_match_spec_string (specs, interface_name))
+ return TRUE;
+
iface_match = g_strdup_printf ("interface-name:%s", interface_name);
matched = nm_match_spec_string (specs, iface_match);
g_free (iface_match);
diff --git a/src/config/nm-config-device.c b/src/config/nm-config-device.c
index 6914f033a2..b1b9e61fef 100644
--- a/src/config/nm-config-device.c
+++ b/src/config/nm-config-device.c
@@ -38,7 +38,6 @@ nm_config_device_spec_match_list (NMConfigDevice *self, const char **config_spec
{
GSList *specs = NULL;
gboolean match;
- char buf[NM_UTILS_HWADDR_LEN_MAX + 1], *tmp;
int i;
g_return_val_if_fail (NM_IS_CONFIG_DEVICE (self), FALSE);
@@ -46,28 +45,13 @@ nm_config_device_spec_match_list (NMConfigDevice *self, const char **config_spec
if (!config_specs)
return FALSE;
- /* For compatibility, we allow an untagged MAC address, and for convenience,
- * we allow untagged interface names as well.
- */
- for (i = 0; config_specs[i]; i++) {
- if (g_strcmp0 (config_specs[i], "*") == 0)
- specs = g_slist_prepend (specs, g_strdup (config_specs[i]));
- else if (nm_utils_iface_valid_name (config_specs[i]))
- specs = g_slist_prepend (specs, g_strdup_printf ("interface-name:%s", config_specs[i]));
- else if ( nm_utils_hwaddr_aton (config_specs[i], ARPHRD_ETHER, buf)
- || nm_utils_hwaddr_aton (config_specs[i], ARPHRD_INFINIBAND, buf)) {
- tmp = g_ascii_strdown (config_specs[i], -1);
- specs = g_slist_prepend (specs, g_strdup_printf ("mac:%s", tmp));
- g_free (tmp);
- } else
- specs = g_slist_prepend (specs, g_strdup (config_specs[i]));
- }
-
+ for (i = 0; config_specs[i]; i++)
+ specs = g_slist_prepend (specs, (char *) config_specs[i]);
specs = g_slist_reverse (specs);
match = NM_CONFIG_DEVICE_GET_INTERFACE (self)->spec_match_list (self, specs);
- g_slist_free_full (specs, g_free);
+ g_slist_free (specs);
return match;
}
diff --git a/src/config/tests/Makefile.am b/src/config/tests/Makefile.am
index 8d5a5b6d99..3dac9cfb48 100644
--- a/src/config/tests/Makefile.am
+++ b/src/config/tests/Makefile.am
@@ -2,6 +2,7 @@ AM_CPPFLAGS = \
-I$(top_srcdir)/include \
-I$(top_srcdir)/libnm-util \
-I$(top_builddir)/libnm-util \
+ -I$(top_srcdir)/src/ \
-I$(top_srcdir)/src/config \
-DG_LOG_DOMAIN=\""NetworkManager"\" \
-DNM_VERSION_MAX_ALLOWED=NM_VERSION_NEXT_STABLE \
diff --git a/src/config/tests/nm-test-device.c b/src/config/tests/nm-test-device.c
index b671f2558e..799d98c7da 100644
--- a/src/config/tests/nm-test-device.c
+++ b/src/config/tests/nm-test-device.c
@@ -26,6 +26,7 @@
#include "nm-test-device.h"
#include "nm-config-device.h"
#include "nm-utils.h"
+#include "NetworkManagerUtils.h"
static void nm_test_device_config_device_interface_init (NMConfigDeviceInterface *iface);
@@ -60,15 +61,8 @@ static gboolean
spec_match_list (NMConfigDevice *device, const GSList *specs)
{
NMTestDevice *self = NM_TEST_DEVICE (device);
- const GSList *iter;
- const char *spec;
-
- for (iter = specs; iter; iter = iter->next) {
- spec = iter->data;
- if (g_str_has_prefix (spec, "mac:") && !strcmp (spec + 4, self->hwaddr))
- return TRUE;
- }
- return FALSE;
+
+ return nm_match_spec_hwaddr (specs, self->hwaddr);
}
static const guint8 *