diff options
author | Dan Winship <danw@gnome.org> | 2014-07-30 10:57:45 -0400 |
---|---|---|
committer | Dan Winship <danw@gnome.org> | 2014-09-04 09:20:10 -0400 |
commit | 3a54d050985d6ef2067b025571910a8ccd3cbd57 (patch) | |
tree | 1a226c3f91ec851fd7e55d519142ff1de24dc650 | |
parent | f4957eb0b7b0c6c28121d728e8ab2da30bd49ac7 (diff) | |
download | NetworkManager-3a54d050985d6ef2067b025571910a8ccd3cbd57.tar.gz |
libnm-core: change all mac-address properties to G_TYPE_STRING
Make all mac-address properties (including NMSettingBluetooth:bdaddr,
NMSettingOlpcMesh:dhcp-anycast-addr, and NMSettingWireless:bssid) be
strings, using _nm_setting_class_transform_property() to handle
translating to/from binary form when dealing with D-Bus.
Update everything accordingly for the change, and also add a test for
transformed setting properties to test-general.
71 files changed, 867 insertions, 1278 deletions
diff --git a/clients/cli/connections.c b/clients/cli/connections.c index 1a8bcd0d9e..74279bec1c 100644 --- a/clients/cli/connections.c +++ b/clients/cli/connections.c @@ -2456,34 +2456,23 @@ is_setting_mandatory (NMConnection *connection, NMSetting *setting) /*----------------------------------------------------------------------------*/ static gboolean -check_and_convert_mac (const char *mac, - GByteArray **mac_array, - int type, - const char *keyword, - GError **error) +check_mac (const char *mac, + int type, + const char *keyword, + GError **error) { - GByteArray *local_mac_array = NULL; - - g_return_val_if_fail (mac_array == NULL || *mac_array == NULL, FALSE); g_return_val_if_fail (type == ARPHRD_ETHER || type == ARPHRD_INFINIBAND, FALSE); if (!mac) return TRUE; - local_mac_array = nm_utils_hwaddr_atoba (mac, nm_utils_hwaddr_len (type)); - if (!local_mac_array) { + if (!nm_utils_hwaddr_valid (mac, type)) { g_set_error (error, NMCLI_ERROR, NMC_RESULT_ERROR_USER_INPUT, _("Error: '%s': '%s' is not a valid %s MAC address."), keyword, mac, type == ARPHRD_INFINIBAND ? _("InfiniBand") : _("Ethernet")); return FALSE; } - if (mac_array) - *mac_array = local_mac_array; - else - if (local_mac_array) - g_byte_array_free (local_mac_array, TRUE); - return TRUE; } @@ -2879,7 +2868,7 @@ do_questionnaire_ethernet (gboolean ethernet, char **mtu, char **mac, char **clo if (!*mac) { do { *mac = nmc_readline (_("MAC [none]: ")); - once_more = !check_and_convert_mac (*mac, NULL, ARPHRD_ETHER, "mac", &error); + once_more = !check_mac (*mac, ARPHRD_ETHER, "mac", &error); if (once_more) { printf ("%s\n", error->message); g_clear_error (&error); @@ -2890,7 +2879,7 @@ do_questionnaire_ethernet (gboolean ethernet, char **mtu, char **mac, char **clo if (!*cloned_mac) { do { *cloned_mac = nmc_readline (_("Cloned MAC [none]: ")); - once_more = !check_and_convert_mac (*cloned_mac, NULL, ARPHRD_ETHER, "cloned-mac", &error); + once_more = !check_mac (*cloned_mac, ARPHRD_ETHER, "cloned-mac", &error); if (once_more) { printf ("%s\n", error->message); g_clear_error (&error); @@ -2927,7 +2916,7 @@ do_questionnaire_infiniband (char **mtu, char **mac, char **mode, char **parent, if (!*mac) { do { *mac = nmc_readline (_("MAC [none]: ")); - once_more = !check_and_convert_mac (*mac, NULL, ARPHRD_INFINIBAND, "mac", &error); + once_more = !check_mac (*mac, ARPHRD_INFINIBAND, "mac", &error); if (once_more) { printf ("%s\n", error->message); g_clear_error (&error); @@ -2997,7 +2986,7 @@ do_questionnaire_wimax (char **mac) if (!*mac) { do { *mac = nmc_readline (_("MAC [none]: ")); - once_more = !check_and_convert_mac (*mac, NULL, ARPHRD_ETHER, "mac", &error); + once_more = !check_mac (*mac, ARPHRD_ETHER, "mac", &error); if (once_more) { printf ("%s\n", error->message); g_clear_error (&error); @@ -3036,7 +3025,7 @@ do_questionnaire_pppoe (char **password, char **service, char **mtu, char **mac) if (!*mac) { do { *mac = nmc_readline (_("MAC [none]: ")); - once_more = !check_and_convert_mac (*mac, NULL, ARPHRD_ETHER, "mac", &error); + once_more = !check_mac (*mac, ARPHRD_ETHER, "mac", &error); if (once_more) { printf ("%s\n", error->message); g_clear_error (&error); @@ -3391,7 +3380,7 @@ do_questionnaire_bridge (char **stp, char **priority, char **fwd_delay, char **h if (!*mac) { do { *mac = nmc_get_user_input (_("MAC [none]: ")); - once_more = !check_and_convert_mac (*mac, NULL, ARPHRD_ETHER, "mac", &error); + once_more = !check_mac (*mac, ARPHRD_ETHER, "mac", &error); if (once_more) { printf ("%s\n", error->message); g_clear_error (&error); @@ -3490,7 +3479,7 @@ do_questionnaire_olpc (char **channel, char **dhcp_anycast) if (!*dhcp_anycast) { do { *dhcp_anycast = nmc_readline (_("DHCP anycast MAC address [none]: ")); - once_more = !check_and_convert_mac (*dhcp_anycast, NULL, ARPHRD_ETHER, "dhcp-anycast", &error); + once_more = !check_mac (*dhcp_anycast, ARPHRD_ETHER, "dhcp-anycast", &error); if (once_more) { printf ("%s\n", error->message); g_clear_error (&error); @@ -3635,8 +3624,6 @@ complete_connection_by_type (NMConnection *connection, char *mac = NULL; const char *cloned_mac_c = NULL; char *cloned_mac = NULL; - GByteArray *array = NULL; - GByteArray *cloned_array = NULL; nmc_arg_t exp_args[] = { {"mtu", TRUE, &mtu_c, FALSE}, {"mac", TRUE, &mac_c, FALSE}, {"cloned-mac", TRUE, &cloned_mac_c, FALSE}, @@ -3654,9 +3641,9 @@ complete_connection_by_type (NMConnection *connection, if (!check_and_convert_mtu (mtu, &mtu_int, error)) goto cleanup_wired; - if (!check_and_convert_mac (mac, &array, ARPHRD_ETHER, "mac", error)) + if (!check_mac (mac, ARPHRD_ETHER, "mac", error)) goto cleanup_wired; - if (!check_and_convert_mac (cloned_mac, &cloned_array, ARPHRD_ETHER, "cloned-mac", error)) + if (!check_mac (cloned_mac, ARPHRD_ETHER, "cloned-mac", error)) goto cleanup_wired; /* Add ethernet setting */ @@ -3665,20 +3652,16 @@ complete_connection_by_type (NMConnection *connection, if (mtu) g_object_set (s_wired, NM_SETTING_WIRED_MTU, mtu_int, NULL); - if (array) - g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, array, NULL); - if (cloned_array) - g_object_set (s_wired, NM_SETTING_WIRED_CLONED_MAC_ADDRESS, cloned_array, NULL); + if (mac) + g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, mac, NULL); + if (cloned_mac) + g_object_set (s_wired, NM_SETTING_WIRED_CLONED_MAC_ADDRESS, cloned_mac, NULL); success = TRUE; cleanup_wired: g_free (mtu); g_free (mac); g_free (cloned_mac); - if (array) - g_byte_array_free (array, TRUE); - if (cloned_array) - g_byte_array_free (cloned_array, TRUE); if (!success) return FALSE; @@ -3690,7 +3673,6 @@ cleanup_wired: guint32 mtu_int = 0; const char *mac_c = NULL; char *mac = NULL; - GByteArray *array = NULL; const char *mode_c = NULL; char *mode = NULL; const char *parent_c = NULL; @@ -3719,7 +3701,7 @@ cleanup_wired: if (!check_and_convert_mtu (mtu, &mtu_int, error)) goto cleanup_ib; - if (!check_and_convert_mac (mac, &array, ARPHRD_INFINIBAND, "mac", error)) + if (!check_mac (mac, ARPHRD_INFINIBAND, "mac", error)) goto cleanup_ib; if (!check_infiniband_mode (&mode, error)) goto cleanup_ib; @@ -3741,10 +3723,8 @@ cleanup_wired: g_object_set (s_infiniband, NM_SETTING_INFINIBAND_TRANSPORT_MODE, mode ? mode : "datagram", NULL); if (mtu) g_object_set (s_infiniband, NM_SETTING_INFINIBAND_MTU, mtu_int, NULL); - if (array) { - g_object_set (s_infiniband, NM_SETTING_INFINIBAND_MAC_ADDRESS, array, NULL); - g_byte_array_free (array, TRUE); - } + if (mac) + g_object_set (s_infiniband, NM_SETTING_INFINIBAND_MAC_ADDRESS, mac, NULL); if (p_key) g_object_set (s_infiniband, NM_SETTING_INFINIBAND_P_KEY, p_key_int, NULL); if (parent) @@ -3772,10 +3752,8 @@ cleanup_ib: guint32 mtu_int = 0; const char *mac_c = NULL; char *mac = NULL; - GByteArray *mac_array = NULL; const char *cloned_mac_c = NULL; char *cloned_mac = NULL; - GByteArray *cloned_mac_array = NULL; nmc_arg_t exp_args[] = { {"ssid", TRUE, &ssid, !ask}, {"mtu", TRUE, &mtu_c, FALSE}, {"mac", TRUE, &mac_c, FALSE}, @@ -3802,9 +3780,9 @@ cleanup_ib: if (!check_and_convert_mtu (mtu, &mtu_int, error)) goto cleanup_wifi; - if (!check_and_convert_mac (mac, &mac_array, ARPHRD_ETHER, "mac", error)) + if (!check_mac (mac, ARPHRD_ETHER, "mac", error)) goto cleanup_wifi; - if (!check_and_convert_mac (cloned_mac, &cloned_mac_array, ARPHRD_ETHER, "cloned-mac", error)) + if (!check_mac (cloned_mac, ARPHRD_ETHER, "cloned-mac", error)) goto cleanup_wifi; /* Add wifi setting */ @@ -3817,10 +3795,10 @@ cleanup_ib: if (mtu) g_object_set (s_wifi, NM_SETTING_WIRELESS_MTU, mtu_int, NULL); - if (mac_array) - g_object_set (s_wifi, NM_SETTING_WIRELESS_MAC_ADDRESS, mac_array, NULL); - if (cloned_mac_array) - g_object_set (s_wifi, NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, cloned_mac_array, NULL); + if (mac) + g_object_set (s_wifi, NM_SETTING_WIRELESS_MAC_ADDRESS, mac, NULL); + if (cloned_mac) + g_object_set (s_wifi, NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, cloned_mac, NULL); success = TRUE; cleanup_wifi: @@ -3830,10 +3808,6 @@ cleanup_wifi: g_free (cloned_mac); if (ssid_arr) g_byte_array_free (ssid_arr, TRUE); - if (mac_array) - g_byte_array_free (mac_array, TRUE); - if (cloned_mac_array) - g_byte_array_free (cloned_mac_array, TRUE); if (!success) return FALSE; @@ -3844,7 +3818,6 @@ cleanup_wifi: char *nsp_name_ask = NULL; const char *mac_c = NULL; char *mac = NULL; - GByteArray *mac_array = NULL; nmc_arg_t exp_args[] = { {"nsp", TRUE, &nsp_name, !ask}, {"mac", TRUE, &mac_c, FALSE}, {NULL} }; @@ -3865,7 +3838,7 @@ cleanup_wifi: if (ask) do_questionnaire_wimax (&mac); - if (!check_and_convert_mac (mac, &mac_array, ARPHRD_ETHER, "mac", error)) + if (!check_mac (mac, ARPHRD_ETHER, "mac", error)) goto cleanup_wimax; /* Add 'wimax' setting */ @@ -3873,10 +3846,8 @@ cleanup_wifi: nm_connection_add_setting (connection, NM_SETTING (s_wimax)); g_object_set (s_wimax, NM_SETTING_WIMAX_NETWORK_NAME, nsp_name, NULL); - if (mac_array) { - g_object_set (s_wimax, NM_SETTING_WIMAX_MAC_ADDRESS, mac_array, NULL); - g_byte_array_free (mac_array, TRUE); - } + if (mac) + g_object_set (s_wimax, NM_SETTING_WIMAX_MAC_ADDRESS, mac, NULL); success = TRUE; cleanup_wimax: @@ -3899,7 +3870,6 @@ cleanup_wimax: guint32 mtu_int = 0; const char *mac_c = NULL; char *mac = NULL; - GByteArray *mac_array = NULL; nmc_arg_t exp_args[] = { {"username", TRUE, &username, !ask}, {"password", TRUE, &password_c, FALSE}, {"service", TRUE, &service_c, FALSE}, @@ -3928,7 +3898,7 @@ cleanup_wimax: if (!check_and_convert_mtu (mtu, &mtu_int, error)) goto cleanup_pppoe; - if (!check_and_convert_mac (mac, &mac_array, ARPHRD_ETHER, "mac", error)) + if (!check_mac (mac, ARPHRD_ETHER, "mac", error)) goto cleanup_pppoe; /* Add 'pppoe' setting */ @@ -3943,8 +3913,8 @@ cleanup_wimax: nm_connection_add_setting (connection, NM_SETTING (s_wired)); if (mtu) g_object_set (s_wired, NM_SETTING_WIRED_MTU, mtu_int, NULL); - if (mac_array) - g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, mac_array, NULL); + if (mac) + g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, mac, NULL); success = TRUE; cleanup_pppoe: @@ -3953,8 +3923,6 @@ cleanup_pppoe: g_free (service); g_free (mtu); g_free (mac); - if (mac_array) - g_byte_array_free (mac_array, TRUE); if (!success) return FALSE; @@ -4038,7 +4006,6 @@ cleanup_mobile: char *addr_ask = NULL; const char *bt_type_c = NULL; char *bt_type = NULL; - GByteArray *array = NULL; nmc_arg_t exp_args[] = { {"addr", TRUE, &addr, !ask}, {"bt-type", TRUE, &bt_type_c, FALSE}, {NULL} }; @@ -4053,7 +4020,7 @@ cleanup_mobile: _("Error: 'addr' is required.")); return FALSE; } - if (!check_and_convert_mac (addr, &array, ARPHRD_ETHER, "addr", error)) + if (!check_mac (addr, ARPHRD_ETHER, "addr", error)) goto cleanup_bt; /* Also ask for all optional arguments if '--ask' is specified. */ @@ -4069,10 +4036,8 @@ cleanup_mobile: s_bt = (NMSettingBluetooth *) nm_setting_bluetooth_new (); nm_connection_add_setting (connection, NM_SETTING (s_bt)); - if (array) { - g_object_set (s_bt, NM_SETTING_BLUETOOTH_BDADDR, array, NULL); - g_byte_array_free (array, TRUE); - } + if (addr) + g_object_set (s_bt, NM_SETTING_BLUETOOTH_BDADDR, addr, NULL); /* 'dun' type requires adding 'gsm' or 'cdma' setting */ if ( !strcmp (bt_type, NM_SETTING_BLUETOOTH_TYPE_DUN) @@ -4517,7 +4482,6 @@ cleanup_team_slave: max_age_int, ageing_time_int; const char *mac_c = NULL; char *mac = NULL; - GByteArray *mac_array = NULL; nmc_arg_t exp_args[] = { {"stp", TRUE, &stp_c, FALSE}, {"priority", TRUE, &priority_c, FALSE}, {"forward-delay", TRUE, &fwd_delay_c, FALSE}, @@ -4588,7 +4552,7 @@ cleanup_team_slave: if (!bridge_prop_string_to_uint (ageing_time, "ageing-time", NM_TYPE_SETTING_BRIDGE, NM_SETTING_BRIDGE_AGEING_TIME, &ageing_time_int, error)) goto cleanup_bridge; - if (!check_and_convert_mac (mac, &mac_array, ARPHRD_ETHER, "mac", error)) + if (!check_mac (mac, ARPHRD_ETHER, "mac", error)) goto cleanup_bridge; /* Set bridge options */ @@ -4604,8 +4568,8 @@ cleanup_team_slave: g_object_set (s_bridge, NM_SETTING_BRIDGE_MAX_AGE, max_age_int, NULL); if (ageing_time) g_object_set (s_bridge, NM_SETTING_BRIDGE_AGEING_TIME, ageing_time_int, NULL); - if (mac_array) - g_object_set (s_bridge, NM_SETTING_BRIDGE_MAC_ADDRESS, mac_array, NULL); + if (mac) + g_object_set (s_bridge, NM_SETTING_BRIDGE_MAC_ADDRESS, mac, NULL); success = TRUE; cleanup_bridge: @@ -4616,8 +4580,6 @@ cleanup_bridge: g_free (max_age); g_free (ageing_time); g_free (mac); - if (mac_array) - g_byte_array_free (mac_array, TRUE); if (!success) return FALSE; @@ -4785,7 +4747,6 @@ cleanup_vpn: unsigned long chan; const char *dhcp_anycast_c = NULL; char *dhcp_anycast = NULL; - GByteArray *array = NULL; nmc_arg_t exp_args[] = { {"ssid", TRUE, &ssid, !ask}, {"channel", TRUE, &channel_c, FALSE}, {"dhcp-anycast", TRUE, &dhcp_anycast_c, FALSE}, @@ -4816,7 +4777,7 @@ cleanup_vpn: goto cleanup_olpc; } } - if (!check_and_convert_mac (dhcp_anycast, &array, ARPHRD_ETHER, "dhcp-anycast", error)) + if (!check_mac (dhcp_anycast, ARPHRD_ETHER, "dhcp-anycast", error)) goto cleanup_olpc; /* Add OLPC mesh setting */ @@ -4830,10 +4791,8 @@ cleanup_vpn: g_object_set (s_olpc_mesh, NM_SETTING_OLPC_MESH_CHANNEL, chan, NULL); else g_object_set (s_olpc_mesh, NM_SETTING_OLPC_MESH_CHANNEL, 1, NULL); - if (array) { - g_object_set (s_olpc_mesh, NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS, array, NULL); - g_byte_array_free (array, TRUE); - } + if (dhcp_anycast) + g_object_set (s_olpc_mesh, NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS, dhcp_anycast, NULL); g_byte_array_free (ssid_arr, TRUE); success = TRUE; diff --git a/clients/cli/settings.c b/clients/cli/settings.c index f91fe9ba31..678b786545 100644 --- a/clients/cli/settings.c +++ b/clients/cli/settings.c @@ -810,22 +810,6 @@ vpn_data_item (const char *key, const char *value, gpointer user_data) return secret_flags_to_string (v); \ } -#define DEFINE_HWADDR_GETTER(func_name, property_name) \ - static char * \ - func_name (NMSetting *setting) \ - { \ - GValue val = G_VALUE_INIT; \ - GArray *array; \ - char *hwaddr = NULL; \ - g_value_init (&val, DBUS_TYPE_G_UCHAR_ARRAY); \ - g_object_get_property (G_OBJECT (setting), property_name, &val); \ - array = g_value_get_boxed (&val); \ - if (array && array->len) \ - hwaddr = nm_utils_hwaddr_ntoa (array->data, array->len); \ - g_value_unset (&val); \ - return hwaddr; \ - } - /* --- NM_SETTING_802_1X_SETTING_NAME property get functions --- */ DEFINE_GETTER (nmc_property_802_1X_get_eap, NM_SETTING_802_1X_EAP) DEFINE_GETTER (nmc_property_802_1X_get_identity, NM_SETTING_802_1X_IDENTITY) @@ -966,7 +950,7 @@ DEFINE_GETTER (nmc_property_adsl_get_vpi, NM_SETTING_ADSL_VPI) DEFINE_GETTER (nmc_property_adsl_get_vci, NM_SETTING_ADSL_VCI) /* --- NM_SETTING_BLUETOOTH_SETTING_NAME property get functions --- */ -DEFINE_HWADDR_GETTER (nmc_property_bluetooth_get_bdaddr, NM_SETTING_BLUETOOTH_BDADDR) +DEFINE_GETTER (nmc_property_bluetooth_get_bdaddr, NM_SETTING_BLUETOOTH_BDADDR) DEFINE_GETTER (nmc_property_bluetooth_get_type, NM_SETTING_BLUETOOTH_TYPE) static char * @@ -989,7 +973,7 @@ nmc_property_bond_get_options (NMSetting *setting) } /* --- NM_SETTING_BRIDGE_SETTING_NAME property get functions --- */ -DEFINE_HWADDR_GETTER (nmc_property_bridge_get_mac_address, NM_SETTING_BRIDGE_MAC_ADDRESS) +DEFINE_GETTER (nmc_property_bridge_get_mac_address, NM_SETTING_BRIDGE_MAC_ADDRESS) DEFINE_GETTER (nmc_property_bridge_get_stp, NM_SETTING_BRIDGE_STP) DEFINE_GETTER (nmc_property_bridge_get_priority, NM_SETTING_BRIDGE_PRIORITY) DEFINE_GETTER (nmc_property_bridge_get_forward_delay, NM_SETTING_BRIDGE_FORWARD_DELAY) @@ -1181,7 +1165,7 @@ DEFINE_SECRET_FLAGS_GETTER (nmc_property_gsm_get_pin_flags, NM_SETTING_GSM_PIN_F DEFINE_GETTER (nmc_property_gsm_get_home_only, NM_SETTING_GSM_HOME_ONLY) /* --- NM_SETTING_INFINIBAND_SETTING_NAME property get functions --- */ -DEFINE_HWADDR_GETTER (nmc_property_ib_get_mac_address, NM_SETTING_INFINIBAND_MAC_ADDRESS) +DEFINE_GETTER (nmc_property_ib_get_mac_address, NM_SETTING_INFINIBAND_MAC_ADDRESS) DEFINE_GETTER (nmc_property_ib_get_transport_mode, NM_SETTING_INFINIBAND_TRANSPORT_MODE) static char * @@ -1247,7 +1231,7 @@ nmc_property_ipv6_get_ip6_privacy (NMSetting *setting) /* --- NM_SETTING_OLPC_MESH_SETTING_NAME property get functions --- */ DEFINE_GETTER (nmc_property_olpc_get_channel, NM_SETTING_OLPC_MESH_CHANNEL) -DEFINE_HWADDR_GETTER (nmc_property_olpc_get_anycast_address, NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS) +DEFINE_GETTER (nmc_property_olpc_get_anycast_address, NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS) static char * nmc_property_olpc_get_ssid (NMSetting *setting) @@ -1352,15 +1336,15 @@ nmc_property_vpn_get_secrets (NMSetting *setting) /* --- NM_SETTING_WIMAX_SETTING_NAME property get functions --- */ DEFINE_GETTER (nmc_property_wimax_get_network_name, NM_SETTING_WIMAX_NETWORK_NAME) -DEFINE_HWADDR_GETTER (nmc_property_wimax_get_mac_address, NM_SETTING_WIMAX_MAC_ADDRESS) +DEFINE_GETTER (nmc_property_wimax_get_mac_address, NM_SETTING_WIMAX_MAC_ADDRESS) /* --- NM_SETTING_WIRED_SETTING_NAME property get functions --- */ DEFINE_GETTER (nmc_property_wired_get_port, NM_SETTING_WIRED_PORT) DEFINE_GETTER (nmc_property_wired_get_speed, NM_SETTING_WIRED_SPEED) DEFINE_GETTER (nmc_property_wired_get_duplex, NM_SETTING_WIRED_DUPLEX) DEFINE_GETTER (nmc_property_wired_get_auto_negotiate, NM_SETTING_WIRED_AUTO_NEGOTIATE) -DEFINE_HWADDR_GETTER (nmc_property_wired_get_mac_address, NM_SETTING_WIRED_MAC_ADDRESS) -DEFINE_HWADDR_GETTER (nmc_property_wired_get_cloned_mac_address, NM_SETTING_WIRED_CLONED_MAC_ADDRESS) +DEFINE_GETTER (nmc_property_wired_get_mac_address, NM_SETTING_WIRED_MAC_ADDRESS) +DEFINE_GETTER (nmc_property_wired_get_cloned_mac_address, NM_SETTING_WIRED_CLONED_MAC_ADDRESS) DEFINE_GETTER (nmc_property_wired_get_mac_address_blacklist, NM_SETTING_WIRED_MAC_ADDRESS_BLACKLIST) DEFINE_GETTER (nmc_property_wired_get_s390_subchannels, NM_SETTING_WIRED_S390_SUBCHANNELS) DEFINE_GETTER (nmc_property_wired_get_s390_nettype, NM_SETTING_WIRED_S390_NETTYPE) @@ -1383,11 +1367,11 @@ nmc_property_wired_get_mtu (NMSetting *setting) DEFINE_GETTER (nmc_property_wireless_get_mode, NM_SETTING_WIRELESS_MODE) DEFINE_GETTER (nmc_property_wireless_get_band, NM_SETTING_WIRELESS_BAND) DEFINE_GETTER (nmc_property_wireless_get_channel, NM_SETTING_WIRELESS_CHANNEL) -DEFINE_HWADDR_GETTER (nmc_property_wireless_get_bssid, NM_SETTING_WIRELESS_BSSID) +DEFINE_GETTER (nmc_property_wireless_get_bssid, NM_SETTING_WIRELESS_BSSID) DEFINE_GETTER (nmc_property_wireless_get_rate, NM_SETTING_WIRELESS_RATE) DEFINE_GETTER (nmc_property_wireless_get_tx_power, NM_SETTING_WIRELESS_TX_POWER) -DEFINE_HWADDR_GETTER (nmc_property_wireless_get_mac_address, NM_SETTING_WIRELESS_MAC_ADDRESS) -DEFINE_HWADDR_GETTER (nmc_property_wireless_get_cloned_mac_address, NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS) +DEFINE_GETTER (nmc_property_wireless_get_mac_address, NM_SETTING_WIRELESS_MAC_ADDRESS) +DEFINE_GETTER (nmc_property_wireless_get_cloned_mac_address, NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS) DEFINE_GETTER (nmc_property_wireless_get_mac_address_blacklist, NM_SETTING_WIRELESS_MAC_ADDRESS_BLACKLIST) DEFINE_GETTER (nmc_property_wireless_get_seen_bssids, NM_SETTING_WIRELESS_SEEN_BSSIDS) DEFINE_GETTER (nmc_property_wireless_get_hidden, NM_SETTING_WIRELESS_HIDDEN) @@ -2061,18 +2045,14 @@ nmc_property_set_ssid (NMSetting *setting, const char *prop, const char *val, GE static gboolean nmc_property_set_mac (NMSetting *setting, const char *prop, const char *val, GError **error) { - GByteArray *array; - g_return_val_if_fail (error == NULL || *error == NULL, FALSE); - array = nm_utils_hwaddr_atoba (val, ETH_ALEN); - if (!array) { + if (!nm_utils_hwaddr_valid (val, ETH_ALEN)) { g_set_error (error, 1, 0, _("'%s' is not a valid Ethernet MAC"), val); return FALSE; } - g_object_set (setting, prop, array, NULL); - g_byte_array_free (array, TRUE); + g_object_set (setting, prop, val, NULL); return TRUE; } @@ -2830,18 +2810,14 @@ nmc_property_bond_allowed_options (NMSetting *setting, const char *prop) static gboolean nmc_property_ib_set_mac (NMSetting *setting, const char *prop, const char *val, GError **error) { - GByteArray *array; - g_return_val_if_fail (error == NULL || *error == NULL, FALSE); - array = nm_utils_hwaddr_atoba (val, INFINIBAND_ALEN); - if (!array) { + if (!nm_utils_hwaddr_valid (val, INFINIBAND_ALEN)) { g_set_error (error, 1, 0, _("'%s' is not a valid InfiniBand MAC"), val); return FALSE; } - g_object_set (setting, prop, array, NULL); - g_byte_array_free (array, TRUE); + g_object_set (setting, prop, val, NULL); return TRUE; } diff --git a/clients/tui/nmt-device-entry.c b/clients/tui/nmt-device-entry.c index 4c5b88d119..b8db86869f 100644 --- a/clients/tui/nmt-device-entry.c +++ b/clients/tui/nmt-device-entry.c @@ -57,7 +57,7 @@ typedef struct { int arptype; char *interface_name; - GByteArray *mac_address; + char *mac_address; char *label; NmtNewtEntry *entry; @@ -259,8 +259,8 @@ update_entry (NmtDeviceEntry *deventry) } if (priv->mac_address) { - mac = nm_utils_hwaddr_ntoa (priv->mac_address->data, priv->mac_address->len); - mac_device = find_device_by_mac_address (deventry, mac); + mac = g_strdup (priv->mac_address); + mac_device = find_device_by_mac_address (deventry, priv->mac_address); } else { mac = NULL; mac_device = NULL; @@ -312,25 +312,21 @@ nmt_device_entry_set_interface_name (NmtDeviceEntry *deventry, static gboolean nmt_device_entry_set_mac_address (NmtDeviceEntry *deventry, - GByteArray *mac_address) + const char *mac_address) { NmtDeviceEntryPrivate *priv = NMT_DEVICE_ENTRY_GET_PRIVATE (deventry); gboolean changed; - if (mac_address) - g_return_val_if_fail (mac_address->len == nm_utils_hwaddr_len (priv->arptype), FALSE); - if (mac_address && !priv->mac_address) { - priv->mac_address = g_boxed_copy (DBUS_TYPE_G_UCHAR_ARRAY, mac_address); + priv->mac_address = g_strdup (mac_address); changed = TRUE; } else if (!mac_address && priv->mac_address) { - g_clear_pointer (&priv->mac_address, g_byte_array_unref); + g_clear_pointer (&priv->mac_address, g_free); changed = TRUE; } else if ( mac_address && priv->mac_address - && !nm_utils_hwaddr_matches (mac_address->data, mac_address->len, - priv->mac_address->data, priv->mac_address->len)) { - g_byte_array_unref (priv->mac_address); - priv->mac_address = g_boxed_copy (DBUS_TYPE_G_UCHAR_ARRAY, mac_address); + && !nm_utils_hwaddr_matches (mac_address, -1, priv->mac_address, -1)) { + g_free (priv->mac_address); + priv->mac_address = g_strdup (mac_address); changed = TRUE; } else changed = FALSE; @@ -356,21 +352,11 @@ entry_text_changed (GObject *object, if (!device_entry_parse (deventry, text, &ifname, &mac)) return; - if (ifname) { - nmt_device_entry_set_interface_name (deventry, ifname); - g_free (ifname); - } else - nmt_device_entry_set_interface_name (deventry, NULL); - - if (mac) { - GByteArray *mac_address; + nmt_device_entry_set_interface_name (deventry, ifname); + g_free (ifname); - mac_address = nm_utils_hwaddr_atoba (mac, nm_utils_hwaddr_len (priv->arptype)); - nmt_device_entry_set_mac_address (deventry, mac_address); - g_byte_array_unref (mac_address); - g_free (mac); - } else - nmt_device_entry_set_mac_address (deventry, NULL); + nmt_device_entry_set_mac_address (deventry, mac); + g_free (mac); } static void @@ -410,8 +396,7 @@ nmt_device_entry_finalize (GObject *object) NmtDeviceEntryPrivate *priv = NMT_DEVICE_ENTRY_GET_PRIVATE (object); g_free (priv->interface_name); - if (priv->mac_address) - g_byte_array_unref (priv->mac_address); + g_free (priv->mac_address); G_OBJECT_CLASS (nmt_device_entry_parent_class)->finalize (object); } @@ -461,7 +446,7 @@ nmt_device_entry_set_property (GObject *object, NmtDeviceEntry *deventry = NMT_DEVICE_ENTRY (object); NmtDeviceEntryPrivate *priv = NMT_DEVICE_ENTRY_GET_PRIVATE (deventry); const char *interface_name; - GByteArray *mac_address; + const char *mac_address; switch (prop_id) { case PROP_LABEL: @@ -480,7 +465,7 @@ nmt_device_entry_set_property (GObject *object, update_entry (deventry); break; case PROP_MAC_ADDRESS: - mac_address = g_value_get_boxed (value); + mac_address = g_value_get_string (value); if (nmt_device_entry_set_mac_address (deventry, mac_address)) update_entry (deventry); break; @@ -512,7 +497,7 @@ nmt_device_entry_get_property (GObject *object, g_value_set_string (value, priv->interface_name); break; case PROP_MAC_ADDRESS: - g_value_set_boxed (value, priv->mac_address); + g_value_set_string (value, priv->mac_address); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -587,8 +572,8 @@ nmt_device_entry_class_init (NmtDeviceEntryClass *deventry_class) */ g_object_class_install_property (object_class, PROP_MAC_ADDRESS, - g_param_spec_boxed ("mac-address", "", "", - DBUS_TYPE_G_UCHAR_ARRAY, - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_string ("mac-address", "", "", + NULL, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); } diff --git a/clients/tui/nmt-mac-entry.c b/clients/tui/nmt-mac-entry.c index 8feb382288..013ab22a1a 100644 --- a/clients/tui/nmt-mac-entry.c +++ b/clients/tui/nmt-mac-entry.c @@ -152,8 +152,6 @@ nmt_mac_entry_set_property (GObject *object, GParamSpec *pspec) { NmtMacEntryPrivate *priv = NMT_MAC_ENTRY_GET_PRIVATE (object); - GByteArray *addr; - char *addr_str; switch (prop_id) { case PROP_MAC_LENGTH: @@ -161,13 +159,7 @@ nmt_mac_entry_set_property (GObject *object, priv->mac_str_length = priv->mac_length * 3 - 1; break; case PROP_MAC_ADDRESS: - addr = g_value_get_boxed (value); - if (addr) { - addr_str = nm_utils_hwaddr_ntoa (addr->data, addr->len); - nmt_newt_entry_set_text (NMT_NEWT_ENTRY (object), addr_str); - g_free (addr_str); - } else - nmt_newt_entry_set_text (NMT_NEWT_ENTRY (object), ""); + nmt_newt_entry_set_text (NMT_NEWT_ENTRY (object), g_value_get_string (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -182,15 +174,13 @@ nmt_mac_entry_get_property (GObject *object, GParamSpec *pspec) { NmtMacEntryPrivate *priv = NMT_MAC_ENTRY_GET_PRIVATE (object); - GByteArray *addr; switch (prop_id) { case PROP_MAC_LENGTH: g_value_set_int (value, priv->mac_length); break; case PROP_MAC_ADDRESS: - addr = nm_utils_hwaddr_atoba (nmt_newt_entry_get_text (NMT_NEWT_ENTRY (object)), ETH_ALEN); - g_value_take_boxed (value, addr); + g_value_set_boxed (value, nmt_newt_entry_get_text (NMT_NEWT_ENTRY (object))); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -225,13 +215,13 @@ nmt_mac_entry_class_init (NmtMacEntryClass *entry_class) /** * NmtMacEntry:mac-address: * - * The MAC address, in binary (in the same format used by the various - * #NMSetting "mac-address" properties). + * The MAC address, as a string (as with the various #NMSetting + * "mac-address" properties). */ g_object_class_install_property (object_class, PROP_MAC_ADDRESS, - g_param_spec_boxed ("mac-address", "", "", - DBUS_TYPE_G_UCHAR_ARRAY, - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_string ("mac-address", "", "", + NULL, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); } diff --git a/libnm-core/nm-setting-bluetooth.c b/libnm-core/nm-setting-bluetooth.c index 3f828beabf..44e71e06da 100644 --- a/libnm-core/nm-setting-bluetooth.c +++ b/libnm-core/nm-setting-bluetooth.c @@ -29,6 +29,8 @@ #include "nm-setting-cdma.h" #include "nm-setting-gsm.h" #include "nm-setting-private.h" +#include "nm-utils.h" +#include "nm-utils-private.h" /** * SECTION:nm-setting-bluetooth @@ -65,7 +67,7 @@ NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_BLUETOOTH) #define NM_SETTING_BLUETOOTH_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_BLUETOOTH, NMSettingBluetoothPrivate)) typedef struct { - GByteArray *bdaddr; + char *bdaddr; char *type; } NMSettingBluetoothPrivate; @@ -115,7 +117,7 @@ nm_setting_bluetooth_get_connection_type (NMSettingBluetooth *setting) * * Returns: the Bluetooth address **/ -const GByteArray * +const char * nm_setting_bluetooth_get_bdaddr (NMSettingBluetooth *setting) { g_return_val_if_fail (NM_IS_SETTING_BLUETOOTH (setting), NULL); @@ -137,7 +139,7 @@ verify (NMSetting *setting, GSList *all_settings, GError **error) return FALSE; } - if (priv->bdaddr && priv->bdaddr->len != ETH_ALEN) { + if (!nm_utils_hwaddr_valid (priv->bdaddr, ETH_ALEN)) { g_set_error_literal (error, NM_SETTING_BLUETOOTH_ERROR, NM_SETTING_BLUETOOTH_ERROR_INVALID_PROPERTY, @@ -199,8 +201,7 @@ finalize (GObject *object) { NMSettingBluetoothPrivate *priv = NM_SETTING_BLUETOOTH_GET_PRIVATE (object); - if (priv->bdaddr) - g_byte_array_free (priv->bdaddr, TRUE); + g_free (priv->bdaddr); g_free (priv->type); G_OBJECT_CLASS (nm_setting_bluetooth_parent_class)->finalize (object); @@ -214,9 +215,8 @@ set_property (GObject *object, guint prop_id, switch (prop_id) { case PROP_BDADDR: - if (priv->bdaddr) - g_byte_array_free (priv->bdaddr, TRUE); - priv->bdaddr = g_value_dup_boxed (value); + g_free (priv->bdaddr); + priv->bdaddr = g_value_dup_string (value); break; case PROP_TYPE: g_free (priv->type); @@ -236,7 +236,7 @@ get_property (GObject *object, guint prop_id, switch (prop_id) { case PROP_BDADDR: - g_value_set_boxed (value, nm_setting_bluetooth_get_bdaddr (setting)); + g_value_set_string (value, nm_setting_bluetooth_get_bdaddr (setting)); break; case PROP_TYPE: g_value_set_string (value, nm_setting_bluetooth_get_connection_type (setting)); @@ -270,11 +270,15 @@ nm_setting_bluetooth_class_init (NMSettingBluetoothClass *setting_class) **/ g_object_class_install_property (object_class, PROP_BDADDR, - g_param_spec_boxed (NM_SETTING_BLUETOOTH_BDADDR, "", "", - DBUS_TYPE_G_UCHAR_ARRAY, - G_PARAM_READWRITE | - NM_SETTING_PARAM_INFERRABLE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_string (NM_SETTING_BLUETOOTH_BDADDR, "", "", + NULL, + G_PARAM_READWRITE | + NM_SETTING_PARAM_INFERRABLE | + G_PARAM_STATIC_STRINGS)); + _nm_setting_class_transform_property (parent_class, NM_SETTING_BLUETOOTH_BDADDR, + DBUS_TYPE_G_UCHAR_ARRAY, + _nm_utils_hwaddr_to_dbus, + _nm_utils_hwaddr_from_dbus); /** * NMSettingBluetooth:type: diff --git a/libnm-core/nm-setting-bluetooth.h b/libnm-core/nm-setting-bluetooth.h index eaf97f0fef..d030f9760c 100644 --- a/libnm-core/nm-setting-bluetooth.h +++ b/libnm-core/nm-setting-bluetooth.h @@ -93,7 +93,7 @@ typedef struct { GType nm_setting_bluetooth_get_type (void); NMSetting * nm_setting_bluetooth_new (void); -const GByteArray *nm_setting_bluetooth_get_bdaddr (NMSettingBluetooth *setting); +const char * nm_setting_bluetooth_get_bdaddr (NMSettingBluetooth *setting); const char * nm_setting_bluetooth_get_connection_type (NMSettingBluetooth *setting); G_END_DECLS diff --git a/libnm-core/nm-setting-bridge.c b/libnm-core/nm-setting-bridge.c index dfcb0ed091..cd682a49d8 100644 --- a/libnm-core/nm-setting-bridge.c +++ b/libnm-core/nm-setting-bridge.c @@ -29,7 +29,6 @@ #include "nm-setting-private.h" #include "nm-utils.h" #include "nm-utils-private.h" -#include "nm-dbus-glib-types.h" /** * SECTION:nm-setting-bridge @@ -64,7 +63,7 @@ NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_BRIDGE) #define NM_SETTING_BRIDGE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_BRIDGE, NMSettingBridgePrivate)) typedef struct { - GByteArray *mac_address; + char * mac_address; gboolean stp; guint16 priority; guint16 forward_delay; @@ -104,7 +103,7 @@ nm_setting_bridge_new (void) * * Returns: the #NMSettingBridge:mac-address property of the setting **/ -const GByteArray * +const char * nm_setting_bridge_get_mac_address (NMSettingBridge *setting) { g_return_val_if_fail (NM_IS_SETTING_BRIDGE (setting), NULL); @@ -234,7 +233,7 @@ verify (NMSetting *setting, GSList *all_settings, GError **error) { NMSettingBridgePrivate *priv = NM_SETTING_BRIDGE_GET_PRIVATE (setting); - if (priv->mac_address && priv->mac_address->len != ETH_ALEN) { + if (priv->mac_address && !nm_utils_hwaddr_valid (priv->mac_address, ETH_ALEN)) { g_set_error_literal (error, NM_SETTING_BRIDGE_ERROR, NM_SETTING_BRIDGE_ERROR_INVALID_PROPERTY, @@ -284,8 +283,7 @@ finalize (GObject *object) { NMSettingBridgePrivate *priv = NM_SETTING_BRIDGE_GET_PRIVATE (object); - if (priv->mac_address) - g_byte_array_free (priv->mac_address, TRUE); + g_free (priv->mac_address); G_OBJECT_CLASS (nm_setting_bridge_parent_class)->finalize (object); } @@ -298,9 +296,8 @@ set_property (GObject *object, guint prop_id, switch (prop_id) { case PROP_MAC_ADDRESS: - if (priv->mac_address) - g_byte_array_free (priv->mac_address, TRUE); - priv->mac_address = g_value_dup_boxed (value); + g_free (priv->mac_address); + priv->mac_address = g_value_dup_string (value); break; case PROP_STP: priv->stp = g_value_get_boolean (value); @@ -335,7 +332,7 @@ get_property (GObject *object, guint prop_id, switch (prop_id) { case PROP_MAC_ADDRESS: - g_value_set_boxed (value, nm_setting_bridge_get_mac_address (setting)); + g_value_set_string (value, nm_setting_bridge_get_mac_address (setting)); break; case PROP_STP: g_value_set_boolean (value, priv->stp); @@ -385,11 +382,15 @@ nm_setting_bridge_class_init (NMSettingBridgeClass *setting_class) **/ g_object_class_install_property (object_class, PROP_MAC_ADDRESS, - g_param_spec_boxed (NM_SETTING_BRIDGE_MAC_ADDRESS, "", "", - DBUS_TYPE_G_UCHAR_ARRAY, - G_PARAM_READWRITE | - NM_SETTING_PARAM_INFERRABLE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_string (NM_SETTING_BRIDGE_MAC_ADDRESS, "", "", + NULL, + G_PARAM_READWRITE | + NM_SETTING_PARAM_INFERRABLE | + G_PARAM_STATIC_STRINGS)); + _nm_setting_class_transform_property (parent_class, NM_SETTING_BRIDGE_MAC_ADDRESS, + DBUS_TYPE_G_UCHAR_ARRAY, + _nm_utils_hwaddr_to_dbus, + _nm_utils_hwaddr_from_dbus); /** * NMSettingBridge:stp: diff --git a/libnm-core/nm-setting-bridge.h b/libnm-core/nm-setting-bridge.h index 80cfe995c5..6fca58a3a2 100644 --- a/libnm-core/nm-setting-bridge.h +++ b/libnm-core/nm-setting-bridge.h @@ -78,7 +78,7 @@ GType nm_setting_bridge_get_type (void); NMSetting * nm_setting_bridge_new (void); -const GByteArray *nm_setting_bridge_get_mac_address (NMSettingBridge *setting); +const char * nm_setting_bridge_get_mac_address (NMSettingBridge *setting); gboolean nm_setting_bridge_get_stp (NMSettingBridge *setting); diff --git a/libnm-core/nm-setting-infiniband.c b/libnm-core/nm-setting-infiniband.c index 02e837eda3..a5bbf92664 100644 --- a/libnm-core/nm-setting-infiniband.c +++ b/libnm-core/nm-setting-infiniband.c @@ -61,7 +61,7 @@ NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_INFINIBAND) #define NM_SETTING_INFINIBAND_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_SETTING_INFINIBAND, NMSettingInfinibandPrivate)) typedef struct { - GByteArray *mac_address; + char *mac_address; char *transport_mode; guint32 mtu; int p_key; @@ -98,7 +98,7 @@ nm_setting_infiniband_new (void) * * Returns: the #NMSettingInfiniband:mac-address property of the setting **/ -const GByteArray * +const char * nm_setting_infiniband_get_mac_address (NMSettingInfiniband *setting) { g_return_val_if_fail (NM_IS_SETTING_INFINIBAND (setting), NULL); @@ -202,7 +202,7 @@ verify (NMSetting *setting, GSList *all_settings, GError **error) NMSettingInfinibandPrivate *priv = NM_SETTING_INFINIBAND_GET_PRIVATE (setting); guint32 normerr_max_mtu = 0; - if (priv->mac_address && priv->mac_address->len != INFINIBAND_ALEN) { + if (priv->mac_address && !nm_utils_hwaddr_valid (priv->mac_address, INFINIBAND_ALEN)) { g_set_error_literal (error, NM_SETTING_INFINIBAND_ERROR, NM_SETTING_INFINIBAND_ERROR_INVALID_PROPERTY, @@ -320,8 +320,7 @@ finalize (GObject *object) NMSettingInfinibandPrivate *priv = NM_SETTING_INFINIBAND_GET_PRIVATE (object); g_free (priv->transport_mode); - if (priv->mac_address) - g_byte_array_free (priv->mac_address, TRUE); + g_free (priv->mac_address); g_free (priv->parent); g_free (priv->virtual_iface_name); @@ -336,9 +335,8 @@ set_property (GObject *object, guint prop_id, switch (prop_id) { case PROP_MAC_ADDRESS: - if (priv->mac_address) - g_byte_array_free (priv->mac_address, TRUE); - priv->mac_address = g_value_dup_boxed (value); + g_free (priv->mac_address); + priv->mac_address = g_value_dup_string (value); break; case PROP_MTU: priv->mtu = g_value_get_uint (value); @@ -370,7 +368,7 @@ get_property (GObject *object, guint prop_id, switch (prop_id) { case PROP_MAC_ADDRESS: - g_value_set_boxed (value, nm_setting_infiniband_get_mac_address (setting)); + g_value_set_string (value, nm_setting_infiniband_get_mac_address (setting)); break; case PROP_MTU: g_value_set_uint (value, nm_setting_infiniband_get_mtu (setting)); @@ -415,11 +413,15 @@ nm_setting_infiniband_class_init (NMSettingInfinibandClass *setting_class) **/ g_object_class_install_property (object_class, PROP_MAC_ADDRESS, - g_param_spec_boxed (NM_SETTING_INFINIBAND_MAC_ADDRESS, "", "", - DBUS_TYPE_G_UCHAR_ARRAY, - G_PARAM_READWRITE | - NM_SETTING_PARAM_INFERRABLE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_string (NM_SETTING_INFINIBAND_MAC_ADDRESS, "", "", + NULL, + G_PARAM_READWRITE | + NM_SETTING_PARAM_INFERRABLE | + G_PARAM_STATIC_STRINGS)); + _nm_setting_class_transform_property (parent_class, NM_SETTING_INFINIBAND_MAC_ADDRESS, + DBUS_TYPE_G_UCHAR_ARRAY, + _nm_utils_hwaddr_to_dbus, + _nm_utils_hwaddr_from_dbus); /** * NMSettingInfiniband:mtu: diff --git a/libnm-core/nm-setting-infiniband.h b/libnm-core/nm-setting-infiniband.h index 10899de257..2b8aabd106 100644 --- a/libnm-core/nm-setting-infiniband.h +++ b/libnm-core/nm-setting-infiniband.h @@ -75,7 +75,7 @@ typedef struct { GType nm_setting_infiniband_get_type (void); NMSetting * nm_setting_infiniband_new (void); -const GByteArray *nm_setting_infiniband_get_mac_address (NMSettingInfiniband *setting); +const char * nm_setting_infiniband_get_mac_address (NMSettingInfiniband *setting); guint32 nm_setting_infiniband_get_mtu (NMSettingInfiniband *setting); const char * nm_setting_infiniband_get_transport_mode (NMSettingInfiniband *setting); int nm_setting_infiniband_get_p_key (NMSettingInfiniband *setting); diff --git a/libnm-core/nm-setting-olpc-mesh.c b/libnm-core/nm-setting-olpc-mesh.c index 8f83c15d65..df1771e294 100644 --- a/libnm-core/nm-setting-olpc-mesh.c +++ b/libnm-core/nm-setting-olpc-mesh.c @@ -52,7 +52,7 @@ NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_OLPC_MESH) typedef struct { GByteArray *ssid; guint32 channel; - GByteArray *dhcp_anycast_addr; + char *dhcp_anycast_addr; } NMSettingOlpcMeshPrivate; enum { @@ -97,7 +97,7 @@ nm_setting_olpc_mesh_get_channel (NMSettingOlpcMesh *setting) return NM_SETTING_OLPC_MESH_GET_PRIVATE (setting)->channel; } -const GByteArray * +const char * nm_setting_olpc_mesh_get_dhcp_anycast_address (NMSettingOlpcMesh *setting) { g_return_val_if_fail (NM_IS_SETTING_OLPC_MESH (setting), NULL); @@ -138,7 +138,7 @@ verify (NMSetting *setting, GSList *all_settings, GError **error) return FALSE; } - if (priv->dhcp_anycast_addr && priv->dhcp_anycast_addr->len != ETH_ALEN) { + if (priv->dhcp_anycast_addr && !nm_utils_hwaddr_valid (priv->dhcp_anycast_addr, ETH_ALEN)) { g_set_error_literal (error, NM_SETTING_OLPC_MESH_ERROR, NM_SETTING_OLPC_MESH_ERROR_INVALID_PROPERTY, @@ -157,8 +157,7 @@ finalize (GObject *object) if (priv->ssid) g_byte_array_free (priv->ssid, TRUE); - if (priv->dhcp_anycast_addr) - g_byte_array_free (priv->dhcp_anycast_addr, TRUE); + g_free (priv->dhcp_anycast_addr); G_OBJECT_CLASS (nm_setting_olpc_mesh_parent_class)->finalize (object); } @@ -179,9 +178,8 @@ set_property (GObject *object, guint prop_id, priv->channel = g_value_get_uint (value); break; case PROP_DHCP_ANYCAST_ADDRESS: - if (priv->dhcp_anycast_addr) - g_byte_array_free (priv->dhcp_anycast_addr, TRUE); - priv->dhcp_anycast_addr = g_value_dup_boxed (value); + g_free (priv->dhcp_anycast_addr); + priv->dhcp_anycast_addr = g_value_dup_string (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -203,7 +201,7 @@ get_property (GObject *object, guint prop_id, g_value_set_uint (value, nm_setting_olpc_mesh_get_channel (setting)); break; case PROP_DHCP_ANYCAST_ADDRESS: - g_value_set_boxed (value, nm_setting_olpc_mesh_get_dhcp_anycast_address (setting)); + g_value_set_string (value, nm_setting_olpc_mesh_get_dhcp_anycast_address (setting)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -262,8 +260,12 @@ nm_setting_olpc_mesh_class_init (NMSettingOlpcMeshClass *setting_class) **/ g_object_class_install_property (object_class, PROP_DHCP_ANYCAST_ADDRESS, - g_param_spec_boxed (NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS, "", "", - DBUS_TYPE_G_UCHAR_ARRAY, - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_string (NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS, "", "", + NULL, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); + _nm_setting_class_transform_property (parent_class, NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS, + DBUS_TYPE_G_UCHAR_ARRAY, + _nm_utils_hwaddr_to_dbus, + _nm_utils_hwaddr_from_dbus); } diff --git a/libnm-core/nm-setting-olpc-mesh.h b/libnm-core/nm-setting-olpc-mesh.h index 67c0981fc9..28d9dcfba6 100644 --- a/libnm-core/nm-setting-olpc-mesh.h +++ b/libnm-core/nm-setting-olpc-mesh.h @@ -76,7 +76,7 @@ GType nm_setting_olpc_mesh_get_type (void); NMSetting * nm_setting_olpc_mesh_new (void); const GByteArray *nm_setting_olpc_mesh_get_ssid (NMSettingOlpcMesh *setting); guint32 nm_setting_olpc_mesh_get_channel (NMSettingOlpcMesh *setting); -const GByteArray *nm_setting_olpc_mesh_get_dhcp_anycast_address (NMSettingOlpcMesh *setting); +const char * nm_setting_olpc_mesh_get_dhcp_anycast_address (NMSettingOlpcMesh *setting); G_END_DECLS diff --git a/libnm-core/nm-setting-wimax.c b/libnm-core/nm-setting-wimax.c index a14548286a..467e1f617c 100644 --- a/libnm-core/nm-setting-wimax.c +++ b/libnm-core/nm-setting-wimax.c @@ -27,6 +27,8 @@ #include "nm-setting-wimax.h" #include "nm-setting-private.h" +#include "nm-utils.h" +#include "nm-utils-private.h" /** * SECTION:nm-setting-wimax @@ -62,7 +64,7 @@ NM_SETTING_REGISTER_TYPE (NM_TYPE_SETTING_WIMAX) typedef struct { char *network_name; - GByteArray *mac_address; + char *mac_address; } NMSettingWimaxPrivate; enum { @@ -112,7 +114,7 @@ nm_setting_wimax_get_network_name (NMSettingWimax *setting) * * Returns: the MAC address **/ -const GByteArray * +const char * nm_setting_wimax_get_mac_address (NMSettingWimax *setting) { g_return_val_if_fail (NM_IS_SETTING_WIMAX (setting), NULL); @@ -143,7 +145,7 @@ verify (NMSetting *setting, GSList *all_settings, GError **error) return FALSE; } - if (priv->mac_address && priv->mac_address->len != ETH_ALEN) { + if (priv->mac_address && !nm_utils_hwaddr_valid (priv->mac_address, ETH_ALEN)) { g_set_error_literal (error, NM_SETTING_WIMAX_ERROR, NM_SETTING_WIMAX_ERROR_INVALID_PROPERTY, @@ -166,8 +168,7 @@ finalize (GObject *object) NMSettingWimaxPrivate *priv = NM_SETTING_WIMAX_GET_PRIVATE (object); g_free (priv->network_name); - if (priv->mac_address) - g_byte_array_free (priv->mac_address, TRUE); + g_free (priv->mac_address); G_OBJECT_CLASS (nm_setting_wimax_parent_class)->finalize (object); } @@ -184,9 +185,8 @@ set_property (GObject *object, guint prop_id, priv->network_name = g_value_dup_string (value); break; case PROP_MAC_ADDRESS: - if (priv->mac_address) - g_byte_array_free (priv->mac_address, TRUE); - priv->mac_address = g_value_dup_boxed (value); + g_free (priv->mac_address); + priv->mac_address = g_value_dup_string (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -205,7 +205,7 @@ get_property (GObject *object, guint prop_id, g_value_set_string (value, nm_setting_wimax_get_network_name (setting)); break; case PROP_MAC_ADDRESS: - g_value_set_boxed (value, nm_setting_wimax_get_mac_address (setting)); + g_value_set_string (value, nm_setting_wimax_get_mac_address (setting)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -250,8 +250,12 @@ nm_setting_wimax_class_init (NMSettingWimaxClass *setting_class) **/ g_object_class_install_property (object_class, PROP_MAC_ADDRESS, - g_param_spec_boxed (NM_SETTING_WIMAX_MAC_ADDRESS, "", "", - DBUS_TYPE_G_UCHAR_ARRAY, - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_string (NM_SETTING_WIMAX_MAC_ADDRESS, "", "", + NULL, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); + _nm_setting_class_transform_property (parent_class, NM_SETTING_WIMAX_MAC_ADDRESS, + DBUS_TYPE_G_UCHAR_ARRAY, + _nm_utils_hwaddr_to_dbus, + _nm_utils_hwaddr_from_dbus); } diff --git a/libnm-core/nm-setting-wimax.h b/libnm-core/nm-setting-wimax.h index e70c135ae8..68a7df93a1 100644 --- a/libnm-core/nm-setting-wimax.h +++ b/libnm-core/nm-setting-wimax.h @@ -73,7 +73,7 @@ GType nm_setting_wimax_get_type (void); NMSetting *nm_setting_wimax_new (void); const char *nm_setting_wimax_get_network_name (NMSettingWimax *setting); -const GByteArray *nm_setting_wimax_get_mac_address (NMSettingWimax *setting); +const char *nm_setting_wimax_get_mac_address (NMSettingWimax *setting); G_END_DECLS diff --git a/libnm-core/nm-setting-wired.c b/libnm-core/nm-setting-wired.c index 3e20c8b846..683180937c 100644 --- a/libnm-core/nm-setting-wired.c +++ b/libnm-core/nm-setting-wired.c @@ -68,8 +68,8 @@ typedef struct { guint32 speed; char *duplex; gboolean auto_negotiate; - GByteArray *device_mac_address; - GByteArray *cloned_mac_address; + char *device_mac_address; + char *cloned_mac_address; GSList *mac_address_blacklist; guint32 mtu; GPtrArray *s390_subchannels; @@ -179,7 +179,7 @@ nm_setting_wired_get_auto_negotiate (NMSettingWired *setting) * * Returns: the #NMSettingWired:mac-address property of the setting **/ -const GByteArray * +const char * nm_setting_wired_get_mac_address (NMSettingWired *setting) { g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), NULL); @@ -193,7 +193,7 @@ nm_setting_wired_get_mac_address (NMSettingWired *setting) * * Returns: the #NMSettingWired:cloned-mac-address property of the setting **/ -const GByteArray * +const char * nm_setting_wired_get_cloned_mac_address (NMSettingWired *setting) { g_return_val_if_fail (NM_IS_SETTING_WIRED (setting), NULL); @@ -205,7 +205,7 @@ nm_setting_wired_get_cloned_mac_address (NMSettingWired *setting) * nm_setting_wired_get_mac_address_blacklist: * @setting: the #NMSettingWired * - * Returns: (element-type GLib.ByteArray): the #NMSettingWired:mac-address-blacklist + * Returns: (element-type utf8): the #NMSettingWired:mac-address-blacklist * property of the setting **/ const GSList * @@ -606,7 +606,7 @@ verify (NMSetting *setting, GSList *all_settings, GError **error) return FALSE; } - if (priv->device_mac_address && priv->device_mac_address->len != ETH_ALEN) { + if (priv->device_mac_address && !nm_utils_hwaddr_valid (priv->device_mac_address, ETH_ALEN)) { g_set_error_literal (error, NM_SETTING_WIRED_ERROR, NM_SETTING_WIRED_ERROR_INVALID_PROPERTY, @@ -662,7 +662,7 @@ verify (NMSetting *setting, GSList *all_settings, GError **error) } } - if (priv->cloned_mac_address && priv->cloned_mac_address->len != ETH_ALEN) { + if (priv->cloned_mac_address && !nm_utils_hwaddr_valid (priv->cloned_mac_address, ETH_ALEN)) { g_set_error_literal (error, NM_SETTING_WIRED_ERROR, NM_SETTING_WIRED_ERROR_INVALID_PROPERTY, @@ -693,12 +693,8 @@ finalize (GObject *object) g_hash_table_destroy (priv->s390_options); - if (priv->device_mac_address) - g_byte_array_free (priv->device_mac_address, TRUE); - - if (priv->cloned_mac_address) - g_byte_array_free (priv->cloned_mac_address, TRUE); - + g_free (priv->device_mac_address); + g_free (priv->cloned_mac_address); g_slist_free_full (priv->mac_address_blacklist, g_free); if (priv->s390_subchannels) { @@ -738,14 +734,12 @@ set_property (GObject *object, guint prop_id, priv->auto_negotiate = g_value_get_boolean (value); break; case PROP_MAC_ADDRESS: - if (priv->device_mac_address) - g_byte_array_free (priv->device_mac_address, TRUE); - priv->device_mac_address = g_value_dup_boxed (value); + g_free (priv->device_mac_address); + priv->device_mac_address = g_value_dup_string (value); break; case PROP_CLONED_MAC_ADDRESS: - if (priv->cloned_mac_address) - g_byte_array_free (priv->cloned_mac_address, TRUE); - priv->cloned_mac_address = g_value_dup_boxed (value); + g_free (priv->cloned_mac_address); + priv->cloned_mac_address = g_value_dup_string (value); break; case PROP_MAC_ADDRESS_BLACKLIST: g_slist_free_full (priv->mac_address_blacklist, g_free); @@ -799,10 +793,10 @@ get_property (GObject *object, guint prop_id, g_value_set_boolean (value, nm_setting_wired_get_auto_negotiate (setting)); break; case PROP_MAC_ADDRESS: - g_value_set_boxed (value, nm_setting_wired_get_mac_address (setting)); + g_value_set_string (value, nm_setting_wired_get_mac_address (setting)); break; case PROP_CLONED_MAC_ADDRESS: - g_value_set_boxed (value, nm_setting_wired_get_cloned_mac_address (setting)); + g_value_set_string (value, nm_setting_wired_get_cloned_mac_address (setting)); break; case PROP_MAC_ADDRESS_BLACKLIST: g_value_set_boxed (value, nm_setting_wired_get_mac_address_blacklist (setting)); @@ -906,11 +900,15 @@ nm_setting_wired_class_init (NMSettingWiredClass *setting_class) **/ g_object_class_install_property (object_class, PROP_MAC_ADDRESS, - g_param_spec_boxed (NM_SETTING_WIRED_MAC_ADDRESS, "", "", - DBUS_TYPE_G_UCHAR_ARRAY, - G_PARAM_READWRITE | - NM_SETTING_PARAM_INFERRABLE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_string (NM_SETTING_WIRED_MAC_ADDRESS, "", "", + NULL, + G_PARAM_READWRITE | + NM_SETTING_PARAM_INFERRABLE | + G_PARAM_STATIC_STRINGS)); + _nm_setting_class_transform_property (parent_class, NM_SETTING_WIRED_MAC_ADDRESS, + DBUS_TYPE_G_UCHAR_ARRAY, + _nm_utils_hwaddr_to_dbus, + _nm_utils_hwaddr_from_dbus); /** * NMSettingWired:cloned-mac-address: @@ -920,12 +918,16 @@ nm_setting_wired_class_init (NMSettingWiredClass *setting_class) **/ g_object_class_install_property (object_class, PROP_CLONED_MAC_ADDRESS, - g_param_spec_boxed (NM_SETTING_WIRED_CLONED_MAC_ADDRESS, "", "", - DBUS_TYPE_G_UCHAR_ARRAY, - G_PARAM_READWRITE | - NM_SETTING_PARAM_INFERRABLE | - G_PARAM_STATIC_STRINGS)); - + g_param_spec_string (NM_SETTING_WIRED_CLONED_MAC_ADDRESS, "", "", + NULL, + G_PARAM_READWRITE | + NM_SETTING_PARAM_INFERRABLE | + G_PARAM_STATIC_STRINGS)); + _nm_setting_class_transform_property (parent_class, NM_SETTING_WIRED_CLONED_MAC_ADDRESS, + DBUS_TYPE_G_UCHAR_ARRAY, + _nm_utils_hwaddr_to_dbus, + _nm_utils_hwaddr_from_dbus); + /** * NMSettingWired:mac-address-blacklist: * diff --git a/libnm-core/nm-setting-wired.h b/libnm-core/nm-setting-wired.h index c635d6008c..b395f2e3be 100644 --- a/libnm-core/nm-setting-wired.h +++ b/libnm-core/nm-setting-wired.h @@ -86,8 +86,8 @@ const char * nm_setting_wired_get_port (NMSettingWired *setting guint32 nm_setting_wired_get_speed (NMSettingWired *setting); const char * nm_setting_wired_get_duplex (NMSettingWired *setting); gboolean nm_setting_wired_get_auto_negotiate (NMSettingWired *setting); -const GByteArray *nm_setting_wired_get_mac_address (NMSettingWired *setting); -const GByteArray *nm_setting_wired_get_cloned_mac_address (NMSettingWired *setting); +const char * nm_setting_wired_get_mac_address (NMSettingWired *setting); +const char * nm_setting_wired_get_cloned_mac_address (NMSettingWired *setting); const GSList *nm_setting_wired_get_mac_address_blacklist (NMSettingWired *setting); guint32 nm_setting_wired_get_num_mac_blacklist_items (NMSettingWired *setting); diff --git a/libnm-core/nm-setting-wireless.c b/libnm-core/nm-setting-wireless.c index e96d557b73..d3a35af1b4 100644 --- a/libnm-core/nm-setting-wireless.c +++ b/libnm-core/nm-setting-wireless.c @@ -69,11 +69,11 @@ typedef struct { char *mode; char *band; guint32 channel; - GByteArray *bssid; + char *bssid; guint32 rate; guint32 tx_power; - GByteArray *device_mac_address; - GByteArray *cloned_mac_address; + char *device_mac_address; + char *cloned_mac_address; GSList *mac_address_blacklist; guint32 mtu; GSList *seen_bssids; @@ -371,7 +371,7 @@ nm_setting_wireless_get_channel (NMSettingWireless *setting) * * Returns: the #NMSettingWireless:bssid property of the setting **/ -const GByteArray * +const char * nm_setting_wireless_get_bssid (NMSettingWireless *setting) { g_return_val_if_fail (NM_IS_SETTING_WIRELESS (setting), NULL); @@ -413,7 +413,7 @@ nm_setting_wireless_get_tx_power (NMSettingWireless *setting) * * Returns: the #NMSettingWireless:mac-address property of the setting **/ -const GByteArray * +const char * nm_setting_wireless_get_mac_address (NMSettingWireless *setting) { g_return_val_if_fail (NM_IS_SETTING_WIRELESS (setting), NULL); @@ -427,7 +427,7 @@ nm_setting_wireless_get_mac_address (NMSettingWireless *setting) * * Returns: the #NMSettingWireless:cloned-mac-address property of the setting **/ -const GByteArray * +const char * nm_setting_wireless_get_cloned_mac_address (NMSettingWireless *setting) { g_return_val_if_fail (NM_IS_SETTING_WIRELESS (setting), NULL); @@ -439,7 +439,7 @@ nm_setting_wireless_get_cloned_mac_address (NMSettingWireless *setting) * nm_setting_wireless_get_mac_address_blacklist: * @setting: the #NMSettingWireless * - * Returns: (element-type GLib.ByteArray): the + * Returns: (element-type utf8): the * #NMSettingWireless:mac-address-blacklist property of the setting **/ const GSList * @@ -764,7 +764,7 @@ verify (NMSetting *setting, GSList *all_settings, GError **error) } } - if (priv->bssid && priv->bssid->len != ETH_ALEN) { + if (priv->bssid && !nm_utils_hwaddr_valid (priv->bssid, ETH_ALEN)) { g_set_error_literal (error, NM_SETTING_WIRELESS_ERROR, NM_SETTING_WIRELESS_ERROR_INVALID_PROPERTY, @@ -773,7 +773,7 @@ verify (NMSetting *setting, GSList *all_settings, GError **error) return FALSE; } - if (priv->device_mac_address && priv->device_mac_address->len != ETH_ALEN) { + if (priv->device_mac_address && !nm_utils_hwaddr_valid (priv->device_mac_address, ETH_ALEN)) { g_set_error_literal (error, NM_SETTING_WIRELESS_ERROR, NM_SETTING_WIRELESS_ERROR_INVALID_PROPERTY, @@ -782,7 +782,7 @@ verify (NMSetting *setting, GSList *all_settings, GError **error) return FALSE; } - if (priv->cloned_mac_address && priv->cloned_mac_address->len != ETH_ALEN) { + if (priv->cloned_mac_address && !nm_utils_hwaddr_valid (priv->cloned_mac_address, ETH_ALEN)) { g_set_error_literal (error, NM_SETTING_WIRELESS_ERROR, NM_SETTING_WIRELESS_ERROR_INVALID_PROPERTY, @@ -846,12 +846,9 @@ finalize (GObject *object) if (priv->ssid) g_byte_array_free (priv->ssid, TRUE); - if (priv->bssid) - g_byte_array_free (priv->bssid, TRUE); - if (priv->device_mac_address) - g_byte_array_free (priv->device_mac_address, TRUE); - if (priv->cloned_mac_address) - g_byte_array_free (priv->cloned_mac_address, TRUE); + g_free (priv->bssid); + g_free (priv->device_mac_address); + g_free (priv->cloned_mac_address); g_slist_free_full (priv->mac_address_blacklist, g_free); g_slist_free_full (priv->seen_bssids, g_free); @@ -882,9 +879,8 @@ set_property (GObject *object, guint prop_id, priv->channel = g_value_get_uint (value); break; case PROP_BSSID: - if (priv->bssid) - g_byte_array_free (priv->bssid, TRUE); - priv->bssid = g_value_dup_boxed (value); + g_free (priv->bssid); + priv->bssid = g_value_dup_string (value); break; case PROP_RATE: priv->rate = g_value_get_uint (value); @@ -893,14 +889,12 @@ set_property (GObject *object, guint prop_id, priv->tx_power = g_value_get_uint (value); break; case PROP_MAC_ADDRESS: - if (priv->device_mac_address) - g_byte_array_free (priv->device_mac_address, TRUE); - priv->device_mac_address = g_value_dup_boxed (value); + g_free (priv->device_mac_address); + priv->device_mac_address = g_value_dup_string (value); break; case PROP_CLONED_MAC_ADDRESS: - if (priv->cloned_mac_address) - g_byte_array_free (priv->cloned_mac_address, TRUE); - priv->cloned_mac_address = g_value_dup_boxed (value); + g_free (priv->cloned_mac_address); + priv->cloned_mac_address = g_value_dup_string (value); break; case PROP_MAC_ADDRESS_BLACKLIST: g_slist_free_full (priv->mac_address_blacklist, g_free); @@ -942,7 +936,7 @@ get_property (GObject *object, guint prop_id, g_value_set_uint (value, nm_setting_wireless_get_channel (setting)); break; case PROP_BSSID: - g_value_set_boxed (value, nm_setting_wireless_get_bssid (setting)); + g_value_set_string (value, nm_setting_wireless_get_bssid (setting)); break; case PROP_RATE: g_value_set_uint (value, nm_setting_wireless_get_rate (setting)); @@ -951,10 +945,10 @@ get_property (GObject *object, guint prop_id, g_value_set_uint (value, nm_setting_wireless_get_tx_power (setting)); break; case PROP_MAC_ADDRESS: - g_value_set_boxed (value, nm_setting_wireless_get_mac_address (setting)); + g_value_set_string (value, nm_setting_wireless_get_mac_address (setting)); break; case PROP_CLONED_MAC_ADDRESS: - g_value_set_boxed (value, nm_setting_wireless_get_cloned_mac_address (setting)); + g_value_set_string (value, nm_setting_wireless_get_cloned_mac_address (setting)); break; case PROP_MAC_ADDRESS_BLACKLIST: g_value_set_boxed (value, nm_setting_wireless_get_mac_address_blacklist (setting)); @@ -1057,10 +1051,14 @@ nm_setting_wireless_class_init (NMSettingWirelessClass *setting_class) **/ g_object_class_install_property (object_class, PROP_BSSID, - g_param_spec_boxed (NM_SETTING_WIRELESS_BSSID, "", "", - DBUS_TYPE_G_UCHAR_ARRAY, - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_string (NM_SETTING_WIRELESS_BSSID, "", "", + NULL, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); + _nm_setting_class_transform_property (parent_class, NM_SETTING_WIRELESS_BSSID, + DBUS_TYPE_G_UCHAR_ARRAY, + _nm_utils_hwaddr_to_dbus, + _nm_utils_hwaddr_from_dbus); /** * NMSettingWireless:rate: @@ -1104,10 +1102,14 @@ nm_setting_wireless_class_init (NMSettingWirelessClass *setting_class) **/ g_object_class_install_property (object_class, PROP_MAC_ADDRESS, - g_param_spec_boxed (NM_SETTING_WIRELESS_MAC_ADDRESS, "", "", - DBUS_TYPE_G_UCHAR_ARRAY, - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_string (NM_SETTING_WIRELESS_MAC_ADDRESS, "", "", + NULL, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); + _nm_setting_class_transform_property (parent_class, NM_SETTING_WIRELESS_MAC_ADDRESS, + DBUS_TYPE_G_UCHAR_ARRAY, + _nm_utils_hwaddr_to_dbus, + _nm_utils_hwaddr_from_dbus); /** * NMSettingWireless:cloned-mac-address: @@ -1117,10 +1119,14 @@ nm_setting_wireless_class_init (NMSettingWirelessClass *setting_class) **/ g_object_class_install_property (object_class, PROP_CLONED_MAC_ADDRESS, - g_param_spec_boxed (NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, "", "", - DBUS_TYPE_G_UCHAR_ARRAY, - G_PARAM_READWRITE | - G_PARAM_STATIC_STRINGS)); + g_param_spec_string (NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, "", "", + NULL, + G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS)); + _nm_setting_class_transform_property (parent_class, NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, + DBUS_TYPE_G_UCHAR_ARRAY, + _nm_utils_hwaddr_to_dbus, + _nm_utils_hwaddr_from_dbus); /** * NMSettingWireless:mac-address-blacklist: diff --git a/libnm-core/nm-setting-wireless.h b/libnm-core/nm-setting-wireless.h index 54dc6af3a8..9f74b3c785 100644 --- a/libnm-core/nm-setting-wireless.h +++ b/libnm-core/nm-setting-wireless.h @@ -120,11 +120,11 @@ const GByteArray *nm_setting_wireless_get_ssid (NMSettingWireless const char *nm_setting_wireless_get_mode (NMSettingWireless *setting); const char *nm_setting_wireless_get_band (NMSettingWireless *setting); guint32 nm_setting_wireless_get_channel (NMSettingWireless *setting); -const GByteArray *nm_setting_wireless_get_bssid (NMSettingWireless *setting); +const char *nm_setting_wireless_get_bssid (NMSettingWireless *setting); guint32 nm_setting_wireless_get_rate (NMSettingWireless *setting); guint32 nm_setting_wireless_get_tx_power (NMSettingWireless *setting); -const GByteArray *nm_setting_wireless_get_mac_address (NMSettingWireless *setting); -const GByteArray *nm_setting_wireless_get_cloned_mac_address (NMSettingWireless *setting); +const char *nm_setting_wireless_get_mac_address (NMSettingWireless *setting); +const char *nm_setting_wireless_get_cloned_mac_address (NMSettingWireless *setting); const GSList *nm_setting_wireless_get_mac_address_blacklist (NMSettingWireless *setting); guint32 nm_setting_wireless_get_num_mac_blacklist_items (NMSettingWireless *setting); diff --git a/libnm-core/nm-utils-private.h b/libnm-core/nm-utils-private.h index 0e7be21e28..580ced77f3 100644 --- a/libnm-core/nm-utils-private.h +++ b/libnm-core/nm-utils-private.h @@ -34,4 +34,9 @@ gboolean _nm_utils_gvalue_array_validate (GValueArray *elements, void _nm_value_transforms_register (void); +void _nm_utils_hwaddr_to_dbus (const GValue *prop_value, + GValue *dbus_value); +void _nm_utils_hwaddr_from_dbus (const GValue *dbus_value, + GValue *prop_value); + #endif diff --git a/libnm-core/nm-utils.c b/libnm-core/nm-utils.c index fd99bfd206..7bc1aad9c6 100644 --- a/libnm-core/nm-utils.c +++ b/libnm-core/nm-utils.c @@ -2230,6 +2230,28 @@ nm_utils_hwaddr_matches (gconstpointer hwaddr1, return !memcmp (hwaddr1, hwaddr2, hwaddr1_len); } +void +_nm_utils_hwaddr_to_dbus (const GValue *prop_value, + GValue *dbus_value) +{ + const char *str = g_value_get_string (prop_value); + GByteArray *array; + + array = str ? nm_utils_hwaddr_atoba (str, hwaddr_binary_len (str)) : NULL; + g_value_take_boxed (dbus_value, array); +} + +void +_nm_utils_hwaddr_from_dbus (const GValue *dbus_value, + GValue *prop_value) +{ + GByteArray *array = g_value_get_boxed (dbus_value); + char *str; + + str = array ? nm_utils_hwaddr_ntoa (array->data, array->len) : NULL; + g_value_take_string (prop_value, str); +} + /** * nm_utils_bin2hexstr: * @bytes: an array of bytes diff --git a/libnm-core/tests/test-general.c b/libnm-core/tests/test-general.c index 44812d1cb1..122d12afaa 100644 --- a/libnm-core/tests/test-general.c +++ b/libnm-core/tests/test-general.c @@ -749,6 +749,42 @@ test_setting_to_dbus_only_secrets (void) } static void +test_setting_to_dbus_transform (void) +{ + NMSetting *s_wired; + GHashTable *hash; + GValue *val; + const char *test_mac_address = "11:22:33:44:55:66"; + GByteArray *dbus_mac_address; + GByteArray *cmp_mac_address; + + s_wired = nm_setting_wired_new (); + g_object_set (s_wired, + NM_SETTING_WIRED_MAC_ADDRESS, test_mac_address, + NULL); + + g_assert_cmpstr (nm_setting_wired_get_mac_address (NM_SETTING_WIRED (s_wired)), ==, test_mac_address); + + hash = _nm_setting_to_dbus (s_wired, NULL, NM_CONNECTION_SERIALIZE_ALL); + g_assert (hash != NULL); + + val = g_hash_table_lookup (hash, NM_SETTING_WIRED_MAC_ADDRESS); + g_assert (val != NULL); + g_assert (G_VALUE_HOLDS (val, DBUS_TYPE_G_UCHAR_ARRAY)); + + dbus_mac_address = g_value_get_boxed (val); + + cmp_mac_address = nm_utils_hwaddr_atoba (test_mac_address, ETH_ALEN); + + g_assert_cmpint (dbus_mac_address->len, ==, cmp_mac_address->len); + g_assert (memcmp (dbus_mac_address->data, cmp_mac_address->data, ETH_ALEN) == 0); + + g_byte_array_unref (cmp_mac_address); + g_hash_table_unref (hash); + g_object_unref (s_wired); +} + +static void test_connection_to_dbus_setting_name (void) { NMConnection *connection; @@ -845,6 +881,32 @@ test_setting_new_from_dbus (void) g_object_unref (s_wsec); } +static void +test_setting_new_from_dbus_transform (void) +{ + NMSetting *s_wired; + GHashTable *hash; + GValue val = { 0, }; + const char *test_mac_address = "11:22:33:44:55:66"; + GByteArray *dbus_mac_address; + GError *error = NULL; + + hash = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, (GDestroyNotify) g_value_unset); + + dbus_mac_address = nm_utils_hwaddr_atoba (test_mac_address, ETH_ALEN); + g_value_init (&val, DBUS_TYPE_G_UCHAR_ARRAY); + g_value_take_boxed (&val, dbus_mac_address); + g_hash_table_insert (hash, NM_SETTING_WIRED_MAC_ADDRESS, &val); + + s_wired = _nm_setting_new_from_dbus (NM_TYPE_SETTING_WIRED, hash, NULL, &error); + g_assert_no_error (error); + + g_assert_cmpstr (nm_setting_wired_get_mac_address (NM_SETTING_WIRED (s_wired)), ==, test_mac_address); + + g_hash_table_unref (hash); + g_object_unref (s_wired); +} + static NMConnection * new_test_connection (void) { @@ -1739,7 +1801,7 @@ test_connection_good_base_types (void) gboolean success; GError *error = NULL; GByteArray *array; - const guint8 bdaddr[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 }; + const char *bdaddr = "11:22:33:44:55:66"; /* Try a basic wired connection */ connection = nm_simple_connection_new (); @@ -1788,13 +1850,10 @@ test_connection_good_base_types (void) add_generic_settings (connection, NM_SETTING_BLUETOOTH_SETTING_NAME); setting = nm_setting_bluetooth_new (); - array = g_byte_array_new (); - g_byte_array_append (array, bdaddr, sizeof (bdaddr)); g_object_set (setting, - NM_SETTING_BLUETOOTH_BDADDR, array, + NM_SETTING_BLUETOOTH_BDADDR, bdaddr, NM_SETTING_CONNECTION_TYPE, NM_SETTING_BLUETOOTH_TYPE_PANU, NULL); - g_byte_array_free (array, TRUE); nm_connection_add_setting (connection, setting); success = nm_connection_verify (connection, &error); @@ -2861,13 +2920,11 @@ static NMSetting * _add_setting_fcn_bluetooth (NMConnection *con) { NMSetting *setting; - GByteArray *bdaddr = nm_utils_hwaddr_atoba ("11:22:33:44:55:66", ETH_ALEN); setting = g_object_new (NM_TYPE_SETTING_BLUETOOTH, - NM_SETTING_BLUETOOTH_BDADDR, bdaddr, + NM_SETTING_BLUETOOTH_BDADDR, "11:22:33:44:55:66", NM_SETTING_BLUETOOTH_TYPE, NM_SETTING_BLUETOOTH_TYPE_PANU, NULL); - g_byte_array_free (bdaddr, TRUE); nm_connection_add_setting (con, setting); return setting; @@ -3033,12 +3090,9 @@ _add_setting_fcn_wireless (NMConnection *con) static void _prepare_normalizable_fcn_vlan (NMConnection *con) { - GByteArray *mac_addr = nm_utils_hwaddr_atoba ("11:22:33:44:55:66", ETH_ALEN); - nm_connection_add_setting (con, g_object_new (NM_TYPE_SETTING_WIRED, - NM_SETTING_WIRED_MAC_ADDRESS, mac_addr, + NM_SETTING_WIRED_MAC_ADDRESS, "11:22:33:44:55:66", NULL)); - g_byte_array_free (mac_addr, TRUE); } static void @@ -3203,6 +3257,7 @@ int main (int argc, char **argv) g_test_add_func ("/core/general/test_setting_to_dbus_all", test_setting_to_dbus_all); g_test_add_func ("/core/general/test_setting_to_dbus_no_secrets", test_setting_to_dbus_no_secrets); g_test_add_func ("/core/general/test_setting_to_dbus_only_secrets", test_setting_to_dbus_only_secrets); + g_test_add_func ("/core/general/test_setting_to_dbus_transform", test_setting_to_dbus_transform); g_test_add_func ("/core/general/test_setting_compare_id", test_setting_compare_id); #define ADD_FUNC(func, secret_flags, comp_flags, remove_secret) \ g_test_add_data_func_full ("/core/general/" G_STRINGIFY (func), \ @@ -3221,6 +3276,7 @@ int main (int argc, char **argv) g_test_add_func ("/core/general/test_connection_to_dbus_setting_name", test_connection_to_dbus_setting_name); g_test_add_func ("/core/general/test_connection_to_dbus_deprecated_props", test_connection_to_dbus_deprecated_props); g_test_add_func ("/core/general/test_setting_new_from_dbus", test_setting_new_from_dbus); + g_test_add_func ("/core/general/test_setting_new_from_dbus_transform", test_setting_new_from_dbus_transform); g_test_add_func ("/core/general/test_connection_replace_settings", test_connection_replace_settings); g_test_add_func ("/core/general/test_connection_replace_settings_from_connection", test_connection_replace_settings_from_connection); g_test_add_func ("/core/general/test_connection_replace_settings_bad", test_connection_replace_settings_bad); diff --git a/libnm/nm-access-point.c b/libnm/nm-access-point.c index 652cb6a892..03af73022f 100644 --- a/libnm/nm-access-point.c +++ b/libnm/nm-access-point.c @@ -238,7 +238,7 @@ nm_access_point_connection_valid (NMAccessPoint *ap, NMConnection *connection) const char *ctype, *ap_bssid; const GByteArray *setting_ssid; const GByteArray *ap_ssid; - const GByteArray *setting_bssid; + const char *setting_bssid; const char *setting_mode; NM80211Mode ap_mode; const char *setting_band; @@ -268,7 +268,7 @@ nm_access_point_connection_valid (NMAccessPoint *ap, NMConnection *connection) g_warn_if_fail (ap_bssid); setting_bssid = nm_setting_wireless_get_bssid (s_wifi); if (setting_bssid && ap_bssid) { - if (!nm_utils_hwaddr_matches (ap_bssid, -1, setting_bssid->data, setting_bssid->len)) + if (!nm_utils_hwaddr_matches (ap_bssid, -1, setting_bssid, -1)) return FALSE; } diff --git a/libnm/nm-device-bt.c b/libnm/nm-device-bt.c index 40fc767097..925442e524 100644 --- a/libnm/nm-device-bt.c +++ b/libnm/nm-device-bt.c @@ -146,8 +146,7 @@ connection_compatible (NMDevice *device, NMConnection *connection, GError **erro NMSettingConnection *s_con; NMSettingBluetooth *s_bt; const char *ctype; - const GByteArray *mac; - const char *hw_addr; + const char *hw_addr, *setting_addr; NMBluetoothCapabilities dev_caps; NMBluetoothCapabilities bt_type; @@ -176,8 +175,8 @@ connection_compatible (NMDevice *device, NMConnection *connection, GError **erro "Invalid device MAC address."); return FALSE; } - mac = nm_setting_bluetooth_get_bdaddr (s_bt); - if (mac && !nm_utils_hwaddr_matches (mac->data, mac->len, hw_addr, -1)) { + setting_addr = nm_setting_bluetooth_get_bdaddr (s_bt); + if (setting_addr && !nm_utils_hwaddr_matches (setting_addr, -1, hw_addr, -1)) { g_set_error (error, NM_DEVICE_BT_ERROR, NM_DEVICE_BT_ERROR_MAC_MISMATCH, "The MACs of the device and the connection didn't match."); return FALSE; diff --git a/libnm/nm-device-ethernet.c b/libnm/nm-device-ethernet.c index 65906913ff..118cda17d6 100644 --- a/libnm/nm-device-ethernet.c +++ b/libnm/nm-device-ethernet.c @@ -168,8 +168,7 @@ connection_compatible (NMDevice *device, NMConnection *connection, GError **erro } if (s_wired) { - const GByteArray *mac; - const char *perm_addr; + const char *perm_addr, *setting_addr; /* FIXME: filter using s390 subchannels when they are exported over the bus */ @@ -181,8 +180,8 @@ connection_compatible (NMDevice *device, NMConnection *connection, GError **erro "Invalid device MAC address."); return FALSE; } - mac = nm_setting_wired_get_mac_address (s_wired); - if (mac && !nm_utils_hwaddr_matches (mac->data, mac->len, perm_addr, -1)) { + setting_addr = nm_setting_wired_get_mac_address (s_wired); + if (setting_addr && !nm_utils_hwaddr_matches (setting_addr, -1, perm_addr, -1)) { g_set_error (error, NM_DEVICE_ETHERNET_ERROR, NM_DEVICE_ETHERNET_ERROR_MAC_MISMATCH, "The MACs of the device and the connection didn't match."); return FALSE; diff --git a/libnm/nm-device-infiniband.c b/libnm/nm-device-infiniband.c index c196b0b84b..478c6e8c18 100644 --- a/libnm/nm-device-infiniband.c +++ b/libnm/nm-device-infiniband.c @@ -105,8 +105,7 @@ connection_compatible (NMDevice *device, NMConnection *connection, GError **erro { NMSettingConnection *s_con; NMSettingInfiniband *s_infiniband; - const char *ctype, *hwaddr; - const GByteArray *mac; + const char *ctype, *hwaddr, *setting_hwaddr; s_con = nm_connection_get_setting_connection (connection); g_assert (s_con); @@ -132,9 +131,9 @@ connection_compatible (NMDevice *device, NMConnection *connection, GError **erro "Invalid device MAC address."); return FALSE; } - mac = nm_setting_infiniband_get_mac_address (s_infiniband); - if (mac && !nm_utils_hwaddr_matches (mac->data, mac->len, hwaddr, -1)) { + setting_hwaddr = nm_setting_infiniband_get_mac_address (s_infiniband); + if (setting_hwaddr && !nm_utils_hwaddr_matches (setting_hwaddr, -1, hwaddr, -1)) { g_set_error (error, NM_DEVICE_INFINIBAND_ERROR, NM_DEVICE_INFINIBAND_ERROR_MAC_MISMATCH, "The MACs of the device and the connection didn't match."); return FALSE; diff --git a/libnm/nm-device-vlan.c b/libnm/nm-device-vlan.c index e94e580582..b0deb1b089 100644 --- a/libnm/nm-device-vlan.c +++ b/libnm/nm-device-vlan.c @@ -123,8 +123,7 @@ connection_compatible (NMDevice *device, NMConnection *connection, GError **erro NMSettingVlan *s_vlan; NMSettingWired *s_wired; const char *ctype, *dev_iface_name, *vlan_iface_name; - const GByteArray *mac_address; - char *mac_address_str; + const char *setting_hwaddr; s_con = nm_connection_get_setting_connection (connection); g_assert (s_con); @@ -159,16 +158,15 @@ connection_compatible (NMDevice *device, NMConnection *connection, GError **erro s_wired = nm_connection_get_setting_wired (connection); if (s_wired) - mac_address = nm_setting_wired_get_mac_address (s_wired); + setting_hwaddr = nm_setting_wired_get_mac_address (s_wired); else - mac_address = NULL; - if (mac_address) { - mac_address_str = nm_utils_hwaddr_ntoa (mac_address->data, mac_address->len); - if (!g_strcmp0 (mac_address_str, NM_DEVICE_VLAN_GET_PRIVATE (device)->hw_address)) { + setting_hwaddr = NULL; + if (setting_hwaddr) { + if (!nm_utils_hwaddr_matches (setting_hwaddr, -1, + NM_DEVICE_VLAN_GET_PRIVATE (device)->hw_address, -1)) { g_set_error (error, NM_DEVICE_VLAN_ERROR, NM_DEVICE_VLAN_ERROR_MAC_MISMATCH, "The hardware address of the device and the connection didn't match."); } - g_free (mac_address_str); } return NM_DEVICE_CLASS (nm_device_vlan_parent_class)->connection_compatible (device, connection, error); diff --git a/libnm/nm-device-wifi.c b/libnm/nm-device-wifi.c index d9a14efdee..f06232c374 100644 --- a/libnm/nm-device-wifi.c +++ b/libnm/nm-device-wifi.c @@ -418,8 +418,7 @@ connection_compatible (NMDevice *device, NMConnection *connection, GError **erro NMSettingWireless *s_wifi; NMSettingWirelessSecurity *s_wsec; const char *ctype; - const GByteArray *mac; - const char *hw_addr; + const char *hwaddr, *setting_hwaddr; NMDeviceWifiCapabilities wifi_caps; const char *key_mgmt; @@ -441,15 +440,15 @@ connection_compatible (NMDevice *device, NMConnection *connection, GError **erro } /* Check MAC address */ - hw_addr = nm_device_wifi_get_permanent_hw_address (NM_DEVICE_WIFI (device)); - if (hw_addr) { - if (!nm_utils_hwaddr_valid (hw_addr, ETH_ALEN)) { + hwaddr = nm_device_wifi_get_permanent_hw_address (NM_DEVICE_WIFI (device)); + if (hwaddr) { + if (!nm_utils_hwaddr_valid (hwaddr, ETH_ALEN)) { g_set_error (error, NM_DEVICE_WIFI_ERROR, NM_DEVICE_WIFI_ERROR_INVALID_DEVICE_MAC, "Invalid device MAC address."); return FALSE; } - mac = nm_setting_wireless_get_mac_address (s_wifi); - if (mac && !nm_utils_hwaddr_matches (mac->data, mac->len, hw_addr, -1)) { + setting_hwaddr = nm_setting_wireless_get_mac_address (s_wifi); + if (setting_hwaddr && !nm_utils_hwaddr_matches (setting_hwaddr, -1, hwaddr, -1)) { g_set_error (error, NM_DEVICE_WIFI_ERROR, NM_DEVICE_WIFI_ERROR_MAC_MISMATCH, "The MACs of the device and the connection didn't match."); return FALSE; diff --git a/libnm/nm-device-wimax.c b/libnm/nm-device-wimax.c index f842b83c89..72b25c2b6d 100644 --- a/libnm/nm-device-wimax.c +++ b/libnm/nm-device-wimax.c @@ -322,8 +322,7 @@ connection_compatible (NMDevice *device, NMConnection *connection, GError **erro NMSettingConnection *s_con; NMSettingWimax *s_wimax; const char *ctype; - const GByteArray *mac; - const char *hw_addr; + const char *hwaddr, *setting_hwaddr; s_con = nm_connection_get_setting_connection (connection); g_assert (s_con); @@ -343,15 +342,15 @@ connection_compatible (NMDevice *device, NMConnection *connection, GError **erro } /* Check MAC address */ - hw_addr = nm_device_wimax_get_hw_address (NM_DEVICE_WIMAX (device)); - if (hw_addr) { - if (!nm_utils_hwaddr_valid (hw_addr, ETH_ALEN)) { + hwaddr = nm_device_wimax_get_hw_address (NM_DEVICE_WIMAX (device)); + if (hwaddr) { + if (!nm_utils_hwaddr_valid (hwaddr, ETH_ALEN)) { g_set_error (error, NM_DEVICE_WIMAX_ERROR, NM_DEVICE_WIMAX_ERROR_INVALID_DEVICE_MAC, "Invalid device MAC address."); return FALSE; } - mac = nm_setting_wimax_get_mac_address (s_wimax); - if (mac && !nm_utils_hwaddr_matches (mac->data, mac->len, hw_addr, -1)) { + setting_hwaddr = nm_setting_wimax_get_mac_address (s_wimax); + if (setting_hwaddr && !nm_utils_hwaddr_matches (setting_hwaddr, -1, hwaddr, -1)) { g_set_error (error, NM_DEVICE_WIMAX_ERROR, NM_DEVICE_WIMAX_ERROR_MAC_MISMATCH, "The MACs of the device and the connection didn't match."); return FALSE; diff --git a/src/NetworkManagerUtils.c b/src/NetworkManagerUtils.c index 827bc55ab4..8320862efb 100644 --- a/src/NetworkManagerUtils.c +++ b/src/NetworkManagerUtils.c @@ -63,30 +63,37 @@ * */ gboolean -nm_ethernet_address_is_valid (const guint8 *test_addr) +nm_ethernet_address_is_valid (gconstpointer addr, gsize len) { guint8 invalid_addr1[ETH_ALEN] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; guint8 invalid_addr2[ETH_ALEN] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; guint8 invalid_addr3[ETH_ALEN] = {0x44, 0x44, 0x44, 0x44, 0x44, 0x44}; guint8 invalid_addr4[ETH_ALEN] = {0x00, 0x30, 0xb4, 0x00, 0x00, 0x00}; /* prism54 dummy MAC */ + guchar first_octet; - g_return_val_if_fail (test_addr != NULL, FALSE); + g_return_val_if_fail (addr != NULL, FALSE); + g_return_val_if_fail (len == ETH_ALEN || len == -1, FALSE); /* Compare the AP address the card has with invalid ethernet MAC addresses. */ - if (!memcmp (test_addr, invalid_addr1, ETH_ALEN)) + if (nm_utils_hwaddr_matches (addr, len, invalid_addr1, ETH_ALEN)) return FALSE; - if (!memcmp (test_addr, invalid_addr2, ETH_ALEN)) + if (nm_utils_hwaddr_matches (addr, len, invalid_addr2, ETH_ALEN)) return FALSE; - if (!memcmp (test_addr, invalid_addr3, ETH_ALEN)) + if (nm_utils_hwaddr_matches (addr, len, invalid_addr3, ETH_ALEN)) return FALSE; - if (!memcmp (test_addr, invalid_addr4, ETH_ALEN)) + if (nm_utils_hwaddr_matches (addr, len, invalid_addr4, ETH_ALEN)) return FALSE; - if (test_addr[0] & 1) /* Multicast addresses */ - return FALSE; + /* Check for multicast address */ + if (len == -1) + first_octet = strtoul (addr, NULL, 16); + else + first_octet = ((guint8 *)addr)[0]; + if (first_octet & 0x01) + return FALSE; return TRUE; } @@ -1237,7 +1244,7 @@ check_connection_mac_address (NMConnection *orig, GHashTable *settings) { GHashTable *props; - const GByteArray *orig_mac = NULL, *cand_mac = NULL; + const char *orig_mac = NULL, *cand_mac = NULL; NMSettingWired *s_wired_orig, *s_wired_cand; props = check_property_in_hash (settings, diff --git a/src/NetworkManagerUtils.h b/src/NetworkManagerUtils.h index 1a9859f003..3d0753d987 100644 --- a/src/NetworkManagerUtils.h +++ b/src/NetworkManagerUtils.h @@ -28,7 +28,7 @@ #include "nm-connection.h" #include "nm-platform.h" -gboolean nm_ethernet_address_is_valid (const guint8 *test_addr); +gboolean nm_ethernet_address_is_valid (gconstpointer addr, gsize len); in_addr_t nm_utils_ip4_address_clear_host_address (in_addr_t addr, guint8 plen); void nm_utils_ip6_address_clear_host_address (struct in6_addr *dst, const struct in6_addr *src, guint8 plen); diff --git a/src/devices/bluetooth/nm-bluez-device.c b/src/devices/bluetooth/nm-bluez-device.c index fb596321df..8e6091150c 100644 --- a/src/devices/bluetooth/nm-bluez-device.c +++ b/src/devices/bluetooth/nm-bluez-device.c @@ -54,7 +54,6 @@ typedef struct { NMBluetoothCapabilities connection_bt_type; char *address; - guint8 bin_address[ETH_ALEN]; char *name; guint32 capabilities; gboolean connected; @@ -166,7 +165,6 @@ pan_connection_check_create (NMBluezDevice *self) NMConnection *added; NMSetting *setting; char *uuid, *id; - GByteArray *bdaddr_array; GError *error = NULL; NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (self); @@ -200,15 +198,12 @@ pan_connection_check_create (NMBluezDevice *self) nm_connection_add_setting (connection, setting); /* Setting: Bluetooth */ - bdaddr_array = g_byte_array_sized_new (sizeof (priv->bin_address)); - g_byte_array_append (bdaddr_array, priv->bin_address, sizeof (priv->bin_address)); setting = nm_setting_bluetooth_new (); g_object_set (G_OBJECT (setting), - NM_SETTING_BLUETOOTH_BDADDR, bdaddr_array, + NM_SETTING_BLUETOOTH_BDADDR, priv->address, NM_SETTING_BLUETOOTH_TYPE, NM_SETTING_BLUETOOTH_TYPE_PANU, NULL); nm_connection_add_setting (connection, setting); - g_byte_array_free (bdaddr_array, TRUE); /* Setting: IPv4 */ setting = nm_setting_ip4_config_new (); @@ -300,7 +295,7 @@ connection_compatible (NMBluezDevice *self, NMConnection *connection) NMBluezDevicePrivate *priv = NM_BLUEZ_DEVICE_GET_PRIVATE (self); NMSettingBluetooth *s_bt; const char *bt_type; - const GByteArray *bdaddr; + const char *bdaddr; if (!nm_connection_is_type (connection, NM_SETTING_BLUETOOTH_SETTING_NAME)) return FALSE; @@ -309,14 +304,13 @@ connection_compatible (NMBluezDevice *self, NMConnection *connection) if (!s_bt) return FALSE; - if (!priv->address) { - /* unless address is set, bin_address is not initialized. */ + if (!priv->address) return FALSE; - } + bdaddr = nm_setting_bluetooth_get_bdaddr (s_bt); if (!bdaddr) return FALSE; - if (!nm_utils_hwaddr_matches (bdaddr->data, bdaddr->len, priv->bin_address, ETH_ALEN)) + if (!nm_utils_hwaddr_matches (bdaddr, -1, priv->address, -1)) return FALSE; bt_type = nm_setting_bluetooth_get_connection_type (s_bt); @@ -611,8 +605,6 @@ _set_property_capabilities (NMBluezDevice *self, const char **uuids) /** * priv->address can only be set one to a certain (non NULL) value. Every later attempt * to reset it to another value will be ignored and a warning will be logged. - * - * When setting the address for the first time, we also set bin_address. **/ static void _set_property_address (NMBluezDevice *self, const char *addr) @@ -632,13 +624,11 @@ _set_property_address (NMBluezDevice *self, const char *addr) return; } - if (!nm_utils_hwaddr_aton (addr, priv->bin_address, ETH_ALEN)) { - if (priv->address) - nm_log_warn (LOGD_BT, "bluez[%s] cannot reset address from '%s' to '%s' (invalid value)", priv->path, priv->address, addr); - else - nm_log_warn (LOGD_BT, "bluez[%s] cannot reset address from NULL to '%s' (invalid value)", priv->path, addr); + if (!nm_utils_hwaddr_valid (addr, ETH_ALEN)) { + nm_log_warn (LOGD_BT, "bluez[%s] cannot set address to '%s' (invalid value)", priv->path, addr); return; } + priv->address = g_strdup (addr); g_object_notify (G_OBJECT (self), NM_BLUEZ_DEVICE_ADDRESS); } diff --git a/src/devices/bluetooth/nm-device-bt.c b/src/devices/bluetooth/nm-device-bt.c index 9edcf28cdb..e08064b120 100644 --- a/src/devices/bluetooth/nm-device-bt.c +++ b/src/devices/bluetooth/nm-device-bt.c @@ -158,7 +158,7 @@ check_connection_compatible (NMDevice *device, NMConnection *connection) NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (device); NMSettingConnection *s_con; NMSettingBluetooth *s_bt; - const GByteArray *array; + const char *bdaddr; guint32 bt_type; if (!NM_DEVICE_CLASS (nm_device_bt_parent_class)->check_connection_compatible (device, connection)) @@ -178,10 +178,10 @@ check_connection_compatible (NMDevice *device, NMConnection *connection) if (!(bt_type & priv->capabilities)) return FALSE; - array = nm_setting_bluetooth_get_bdaddr (s_bt); - if (!array) + bdaddr = nm_setting_bluetooth_get_bdaddr (s_bt); + if (!bdaddr) return FALSE; - if (!nm_utils_hwaddr_matches (priv->bdaddr, -1, array->data, array->len)) + if (!nm_utils_hwaddr_matches (priv->bdaddr, -1, bdaddr, -1)) return FALSE; return TRUE; @@ -215,7 +215,7 @@ complete_connection (NMDevice *device, { NMDeviceBtPrivate *priv = NM_DEVICE_BT_GET_PRIVATE (device); NMSettingBluetooth *s_bt; - const GByteArray *setting_bdaddr; + const char *setting_bdaddr; const char *ctype; gboolean is_dun = FALSE, is_pan = FALSE; NMSettingGsm *s_gsm; @@ -324,7 +324,7 @@ complete_connection (NMDevice *device, setting_bdaddr = nm_setting_bluetooth_get_bdaddr (s_bt); if (setting_bdaddr) { /* Make sure the setting BT Address (if any) matches the device's */ - if (!nm_utils_hwaddr_matches (setting_bdaddr->data, setting_bdaddr->len, priv->bdaddr, -1)) { + if (!nm_utils_hwaddr_matches (setting_bdaddr, -1, priv->bdaddr, -1)) { g_set_error_literal (error, NM_SETTING_BLUETOOTH_ERROR, NM_SETTING_BLUETOOTH_ERROR_INVALID_PROPERTY, @@ -332,14 +332,9 @@ complete_connection (NMDevice *device, return FALSE; } } else { - GByteArray *bdaddr; - /* Lock the connection to this device by default */ - if (!nm_utils_hwaddr_matches (priv->bdaddr, -1, NULL, ETH_ALEN)) { - bdaddr = nm_utils_hwaddr_atoba (priv->bdaddr, ETH_ALEN); - g_object_set (G_OBJECT (s_bt), NM_SETTING_BLUETOOTH_BDADDR, bdaddr, NULL); - g_byte_array_free (bdaddr, TRUE); - } + if (!nm_utils_hwaddr_matches (priv->bdaddr, -1, NULL, ETH_ALEN)) + g_object_set (G_OBJECT (s_bt), NM_SETTING_BLUETOOTH_BDADDR, priv->bdaddr, NULL); } return TRUE; diff --git a/src/devices/nm-device-bridge.c b/src/devices/nm-device-bridge.c index 63bde86075..76a9c89bcd 100644 --- a/src/devices/nm-device-bridge.c +++ b/src/devices/nm-device-bridge.c @@ -101,7 +101,7 @@ check_connection_compatible (NMDevice *device, NMConnection *connection) { const char *iface; NMSettingBridge *s_bridge; - const GByteArray *mac_address; + const char *mac_address; if (!NM_DEVICE_CLASS (nm_device_bridge_parent_class)->check_connection_compatible (device, connection)) return FALSE; @@ -120,8 +120,7 @@ check_connection_compatible (NMDevice *device, NMConnection *connection) const char *hw_addr; hw_addr = nm_device_get_hw_address (device); - if ( !hw_addr - || !nm_utils_hwaddr_matches (hw_addr, -1, mac_address->data, mac_address->len)) + if (!hw_addr || !nm_utils_hwaddr_matches (hw_addr, -1, mac_address, -1)) return FALSE; } @@ -424,7 +423,8 @@ nm_device_bridge_new_for_connection (NMConnection *connection) { const char *iface; NMSettingBridge *s_bridge; - const GByteArray *mac_address; + const char *mac_address_str; + guint8 mac_address[NM_UTILS_HWADDR_LEN_MAX]; g_return_val_if_fail (connection != NULL, NULL); @@ -434,11 +434,15 @@ nm_device_bridge_new_for_connection (NMConnection *connection) s_bridge = nm_connection_get_setting_bridge (connection); g_return_val_if_fail (s_bridge, NULL); - mac_address = nm_setting_bridge_get_mac_address (s_bridge); + mac_address_str = nm_setting_bridge_get_mac_address (s_bridge); + if (mac_address_str) { + if (!nm_utils_hwaddr_aton (mac_address_str, mac_address, ETH_ALEN)) + mac_address_str = NULL; + } if ( !nm_platform_bridge_add (iface, - mac_address ? mac_address->data : NULL, - mac_address ? mac_address->len : 0) + mac_address_str ? mac_address : NULL, + mac_address_str ? ETH_ALEN : 0) && nm_platform_get_error () != NM_PLATFORM_ERROR_EXISTS) { nm_log_warn (LOGD_DEVICE | LOGD_BRIDGE, "(%s): failed to create bridge master interface for '%s': %s", iface, nm_connection_get_id (connection), diff --git a/src/devices/nm-device-ethernet.c b/src/devices/nm-device-ethernet.c index 5b27999c8c..9ce629e81c 100644 --- a/src/devices/nm-device-ethernet.c +++ b/src/devices/nm-device-ethernet.c @@ -101,8 +101,8 @@ typedef enum { } DcbWait; typedef struct { - char * perm_hw_addr; /* Permanent MAC address */ - guint8 initial_hw_addr[ETH_ALEN]; /* Initial MAC address (as seen when NM starts) */ + char * perm_hw_addr; /* Permanent MAC address */ + char * initial_hw_addr; /* Initial MAC address (as seen when NM starts) */ guint32 speed; @@ -361,7 +361,7 @@ update_permanent_hw_address (NMDevice *dev) errno = 0; ret = ioctl (fd, SIOCETHTOOL, &req); errsv = errno; - if ((ret < 0) || !nm_ethernet_address_is_valid (epaddr->data)) { + if ((ret < 0) || !nm_ethernet_address_is_valid (epaddr->data, ETH_ALEN)) { _LOGD (LOGD_HW | LOGD_ETHER, "unable to read permanent MAC address (error %d)", errsv); /* Fall back to current address */ mac = nm_device_get_hw_address (dev); @@ -382,16 +382,13 @@ update_initial_hw_address (NMDevice *dev) { NMDeviceEthernet *self = NM_DEVICE_ETHERNET (dev); NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self); - const char *mac; /* This sets initial MAC address from current MAC address. It should only * be called from NMDevice constructor() to really get the initial address. */ - mac = nm_device_get_hw_address (dev); - if (mac) - nm_utils_hwaddr_aton (mac, priv->initial_hw_addr, ETH_ALEN); + priv->initial_hw_addr = g_strdup (nm_device_get_hw_address (dev)); - _LOGD (LOGD_DEVICE | LOGD_ETHER, "read initial MAC address %s", mac); + _LOGD (LOGD_DEVICE | LOGD_ETHER, "read initial MAC address %s", priv->initial_hw_addr); } static guint32 @@ -462,7 +459,7 @@ check_connection_compatible (NMDevice *device, NMConnection *connection) return FALSE; if (s_wired) { - const GByteArray *mac; + const char *mac; gboolean try_mac = TRUE; const GSList *mac_blacklist, *mac_blacklist_iter; @@ -470,21 +467,19 @@ check_connection_compatible (NMDevice *device, NMConnection *connection) return FALSE; mac = nm_setting_wired_get_mac_address (s_wired); - if (try_mac && mac && !nm_utils_hwaddr_matches (mac->data, mac->len, priv->perm_hw_addr, -1)) + if (try_mac && mac && !nm_utils_hwaddr_matches (mac, -1, priv->perm_hw_addr, -1)) return FALSE; /* Check for MAC address blacklist */ mac_blacklist = nm_setting_wired_get_mac_address_blacklist (s_wired); for (mac_blacklist_iter = mac_blacklist; mac_blacklist_iter; mac_blacklist_iter = g_slist_next (mac_blacklist_iter)) { - guint8 addr[ETH_ALEN]; - - if (!nm_utils_hwaddr_aton (mac_blacklist_iter->data, addr, ETH_ALEN)) { + if (!nm_utils_hwaddr_valid (mac_blacklist_iter->data, ETH_ALEN)) { g_warn_if_reached (); return FALSE; } - if (nm_utils_hwaddr_matches (addr, ETH_ALEN, priv->perm_hw_addr, -1)) + if (nm_utils_hwaddr_matches (mac_blacklist_iter->data, -1, priv->perm_hw_addr, -1)) return FALSE; } } @@ -911,7 +906,7 @@ act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason) NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self); NMActRequest *req; NMSettingWired *s_wired; - const GByteArray *cloned_mac; + const char *cloned_mac; NMActStageReturn ret = NM_ACT_STAGE_RETURN_SUCCESS; g_return_val_if_fail (reason != NULL, NM_ACT_STAGE_RETURN_FAILURE); @@ -925,8 +920,8 @@ act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason) if (s_wired) { /* Set device MAC address if the connection wants to change it */ cloned_mac = nm_setting_wired_get_cloned_mac_address (s_wired); - if (cloned_mac && (cloned_mac->len == ETH_ALEN)) - nm_device_set_hw_addr (dev, cloned_mac->data, "set", LOGD_ETHER); + if (cloned_mac) + nm_device_set_hw_addr (dev, cloned_mac, "set", LOGD_ETHER); } /* If we're re-activating a PPPoE connection a short while after @@ -1430,7 +1425,7 @@ complete_connection (NMDevice *device, NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (device); NMSettingWired *s_wired; NMSettingPppoe *s_pppoe; - const GByteArray *setting_mac; + const char *setting_mac; s_pppoe = nm_connection_get_setting_pppoe (connection); @@ -1460,7 +1455,7 @@ complete_connection (NMDevice *device, setting_mac = nm_setting_wired_get_mac_address (s_wired); if (setting_mac) { /* Make sure the setting MAC (if any) matches the device's permanent MAC */ - if (!nm_utils_hwaddr_matches (setting_mac->data, setting_mac->len, priv->perm_hw_addr, -1)) { + if (!nm_utils_hwaddr_matches (setting_mac, -1, priv->perm_hw_addr, -1)) { g_set_error_literal (error, NM_SETTING_WIRED_ERROR, NM_SETTING_WIRED_ERROR_INVALID_PROPERTY, @@ -1468,13 +1463,10 @@ complete_connection (NMDevice *device, return FALSE; } } else { - GByteArray *mac; - - /* Lock the connection to this device by default */ if (!nm_utils_hwaddr_matches (priv->perm_hw_addr, -1, NULL, ETH_ALEN)) { - mac = nm_utils_hwaddr_atoba (priv->perm_hw_addr, ETH_ALEN); - g_object_set (G_OBJECT (s_wired), NM_SETTING_WIRED_MAC_ADDRESS, mac, NULL); - g_byte_array_free (mac, TRUE); + g_object_set (G_OBJECT (s_wired), + NM_SETTING_WIRED_MAC_ADDRESS, priv->perm_hw_addr, + NULL); } } @@ -1499,7 +1491,6 @@ update_connection (NMDevice *device, NMConnection *connection) NMSettingWired *s_wired = nm_connection_get_setting_wired (connection); const char *mac = nm_device_get_hw_address (device); const char *mac_prop = NM_SETTING_WIRED_MAC_ADDRESS; - GByteArray *array; GHashTableIter iter; gpointer key, value; @@ -1512,20 +1503,15 @@ update_connection (NMDevice *device, NMConnection *connection) * and the current MAC, if different, is the cloned MAC. */ if (!nm_utils_hwaddr_matches (priv->perm_hw_addr, -1, NULL, ETH_ALEN)) { - array = nm_utils_hwaddr_atoba (priv->perm_hw_addr, ETH_ALEN); - g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, array, NULL); - g_byte_array_unref (array); + g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, priv->perm_hw_addr, NULL); mac_prop = NULL; if (mac && !nm_utils_hwaddr_matches (priv->perm_hw_addr, -1, mac, -1)) mac_prop = NM_SETTING_WIRED_CLONED_MAC_ADDRESS; } - if (mac_prop && mac && nm_utils_hwaddr_valid (mac, ETH_ALEN)) { - array = nm_utils_hwaddr_atoba (mac, ETH_ALEN); - g_object_set (s_wired, mac_prop, array, NULL); - g_byte_array_unref (array); - } + if (mac_prop && mac && nm_utils_hwaddr_valid (mac, ETH_ALEN)) + g_object_set (s_wired, mac_prop, mac, NULL); /* We don't set the MTU as we don't know whether it was set explicitly */ @@ -1628,6 +1614,7 @@ finalize (GObject *object) NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self); g_free (priv->perm_hw_addr); + g_free (priv->initial_hw_addr); g_clear_object (&priv->supplicant.mgr); g_free (priv->subchan1); g_free (priv->subchan2); diff --git a/src/devices/nm-device-infiniband.c b/src/devices/nm-device-infiniband.c index 81a9017075..bbb12dff92 100644 --- a/src/devices/nm-device-infiniband.c +++ b/src/devices/nm-device-infiniband.c @@ -195,7 +195,6 @@ static gboolean check_connection_compatible (NMDevice *device, NMConnection *connection) { NMSettingInfiniband *s_infiniband; - const GByteArray *mac; if (!NM_DEVICE_CLASS (nm_device_infiniband_parent_class)->check_connection_compatible (device, connection)) return FALSE; @@ -208,9 +207,10 @@ check_connection_compatible (NMDevice *device, NMConnection *connection) return FALSE; if (s_infiniband) { + const char *mac; + mac = nm_setting_infiniband_get_mac_address (s_infiniband); - if (mac && !nm_utils_hwaddr_matches (mac->data, mac->len, - nm_device_get_hw_address (device), -1)) + if (mac && !nm_utils_hwaddr_matches (mac, -1, nm_device_get_hw_address (device), -1)) return FALSE; } @@ -225,7 +225,7 @@ complete_connection (NMDevice *device, GError **error) { NMSettingInfiniband *s_infiniband; - const GByteArray *setting_mac; + const char *setting_mac; const char *hw_address; nm_utils_complete_generic (connection, @@ -246,7 +246,7 @@ complete_connection (NMDevice *device, hw_address = nm_device_get_hw_address (device); if (setting_mac) { /* Make sure the setting MAC (if any) matches the device's MAC */ - if (!nm_utils_hwaddr_matches (setting_mac->data, setting_mac->len, hw_address, INFINIBAND_ALEN)) { + if (!nm_utils_hwaddr_matches (setting_mac, -1, hw_address, -1)) { g_set_error_literal (error, NM_SETTING_INFINIBAND_ERROR, NM_SETTING_INFINIBAND_ERROR_INVALID_PROPERTY, @@ -254,12 +254,8 @@ complete_connection (NMDevice *device, return FALSE; } } else { - GByteArray *mac; - /* Lock the connection to this device by default */ - mac = nm_utils_hwaddr_atoba (hw_address, INFINIBAND_ALEN); - g_object_set (G_OBJECT (s_infiniband), NM_SETTING_INFINIBAND_MAC_ADDRESS, mac, NULL); - g_byte_array_free (mac, TRUE); + g_object_set (G_OBJECT (s_infiniband), NM_SETTING_INFINIBAND_MAC_ADDRESS, hw_address, NULL); } if (!nm_setting_infiniband_get_transport_mode (s_infiniband)) @@ -273,7 +269,6 @@ update_connection (NMDevice *device, NMConnection *connection) { NMSettingInfiniband *s_infiniband = nm_connection_get_setting_infiniband (connection); const char *mac = nm_device_get_hw_address (device); - GByteArray *array; char *mode_path, *contents = NULL; const char *transport_mode = "datagram"; @@ -282,11 +277,8 @@ update_connection (NMDevice *device, NMConnection *connection) nm_connection_add_setting (connection, (NMSetting *) s_infiniband); } - if (mac && !nm_utils_hwaddr_matches (mac, -1, NULL, INFINIBAND_ALEN)) { - array = nm_utils_hwaddr_atoba (mac, INFINIBAND_ALEN); - g_object_set (s_infiniband, NM_SETTING_INFINIBAND_MAC_ADDRESS, array, NULL); - g_byte_array_unref (array); - } + if (mac && !nm_utils_hwaddr_matches (mac, -1, NULL, INFINIBAND_ALEN)) + g_object_set (s_infiniband, NM_SETTING_INFINIBAND_MAC_ADDRESS, mac, NULL); mode_path = g_strdup_printf ("/sys/class/net/%s/mode", ASSERT_VALID_PATH_COMPONENT (nm_device_get_iface (device))); diff --git a/src/devices/nm-device-private.h b/src/devices/nm-device-private.h index 21776d47aa..16c4d03885 100644 --- a/src/devices/nm-device-private.h +++ b/src/devices/nm-device-private.h @@ -52,7 +52,7 @@ gboolean nm_device_bring_up (NMDevice *self, gboolean wait, gboolean *no_firmwar void nm_device_take_down (NMDevice *self, gboolean block); -gboolean nm_device_set_hw_addr (NMDevice *device, const guint8 *addr, +gboolean nm_device_set_hw_addr (NMDevice *device, const char *addr, const char *detail, guint64 hw_log_domain); gboolean nm_device_ip_config_should_fail (NMDevice *self, gboolean ip6); @@ -75,7 +75,7 @@ gboolean nm_device_activate_ip6_state_in_conf (NMDevice *device); gboolean nm_device_activate_ip6_state_in_wait (NMDevice *device); void nm_device_set_dhcp_timeout (NMDevice *device, guint32 timeout); -void nm_device_set_dhcp_anycast_address (NMDevice *device, guint8 *addr); +void nm_device_set_dhcp_anycast_address (NMDevice *device, const char *addr); gboolean nm_device_dhcp4_renew (NMDevice *device, gboolean release); gboolean nm_device_dhcp6_renew (NMDevice *device, gboolean release); diff --git a/src/devices/nm-device-vlan.c b/src/devices/nm-device-vlan.c index 817e3d2ac0..2b2e5711e1 100644 --- a/src/devices/nm-device-vlan.c +++ b/src/devices/nm-device-vlan.c @@ -51,7 +51,7 @@ G_DEFINE_TYPE (NMDeviceVlan, nm_device_vlan, NM_TYPE_DEVICE) #define NM_VLAN_ERROR (nm_vlan_error_quark ()) typedef struct { - guint8 initial_hw_addr[ETH_ALEN]; + char *initial_hw_addr; gboolean disposed; gboolean invalid; @@ -88,12 +88,9 @@ update_initial_hw_address (NMDevice *dev) { NMDeviceVlan *self = NM_DEVICE_VLAN (dev); NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (self); - const char *mac_str; - mac_str = nm_device_get_hw_address (dev); - nm_utils_hwaddr_aton (mac_str, priv->initial_hw_addr, ETH_ALEN); - - _LOGD (LOGD_DEVICE | LOGD_VLAN, "read initial MAC address %s", mac_str); + priv->initial_hw_addr = g_strdup (nm_device_get_hw_address (dev)); + _LOGD (LOGD_DEVICE | LOGD_VLAN, "read initial MAC address %s", priv->initial_hw_addr); } static guint32 @@ -157,20 +154,20 @@ static gboolean match_hwaddr (NMDevice *device, NMConnection *connection, gboolean fail_if_no_hwaddr) { NMSettingWired *s_wired; - const GByteArray *mac; + const char *setting_mac; const char *device_mac; s_wired = nm_connection_get_setting_wired (connection); if (!s_wired) return !fail_if_no_hwaddr; - mac = nm_setting_wired_get_mac_address (s_wired); - if (!mac) + setting_mac = nm_setting_wired_get_mac_address (s_wired); + if (!setting_mac) return !fail_if_no_hwaddr; device_mac = nm_device_get_hw_address (device); - return nm_utils_hwaddr_matches (mac->data, mac->len, device_mac, -1); + return nm_utils_hwaddr_matches (setting_mac, -1, device_mac, -1); } static gboolean @@ -333,7 +330,7 @@ act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason) NMConnection *connection; NMSettingVlan *s_vlan; NMSettingWired *s_wired; - const GByteArray *cloned_mac; + const char *cloned_mac; NMActStageReturn ret; g_return_val_if_fail (reason != NULL, NM_ACT_STAGE_RETURN_FAILURE); @@ -352,8 +349,8 @@ act_stage1_prepare (NMDevice *dev, NMDeviceStateReason *reason) if (s_wired) { /* Set device MAC address if the connection wants to change it */ cloned_mac = nm_setting_wired_get_cloned_mac_address (s_wired); - if (cloned_mac && (cloned_mac->len == ETH_ALEN)) - nm_device_set_hw_addr (dev, (const guint8 *) cloned_mac->data, "set", LOGD_VLAN); + if (cloned_mac) + nm_device_set_hw_addr (dev, cloned_mac, "set", LOGD_VLAN); } s_vlan = nm_connection_get_setting_vlan (connection); @@ -606,6 +603,17 @@ dispose (GObject *object) } static void +finalize (GObject *object) +{ + NMDeviceVlan *self = NM_DEVICE_VLAN (object); + NMDeviceVlanPrivate *priv = NM_DEVICE_VLAN_GET_PRIVATE (self); + + g_free (priv->initial_hw_addr); + + G_OBJECT_CLASS (nm_device_vlan_parent_class)->finalize (object); +} + +static void nm_device_vlan_class_init (NMDeviceVlanClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); @@ -620,6 +628,7 @@ nm_device_vlan_class_init (NMDeviceVlanClass *klass) object_class->get_property = get_property; object_class->set_property = set_property; object_class->dispose = dispose; + object_class->finalize = finalize; parent_class->update_initial_hw_address = update_initial_hw_address; parent_class->get_generic_capabilities = get_generic_capabilities; diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c index 5996a779ac..ef10d0c239 100644 --- a/src/devices/nm-device.c +++ b/src/devices/nm-device.c @@ -232,7 +232,7 @@ typedef struct { /* Generic DHCP stuff */ guint32 dhcp_timeout; - GByteArray * dhcp_anycast_address; + char * dhcp_anycast_address; /* IP4 configuration info */ NMIP4Config * ip4_config; /* Combined config from VPN, settings, and device */ @@ -6076,23 +6076,17 @@ nm_device_set_dhcp_timeout (NMDevice *self, guint32 timeout) } void -nm_device_set_dhcp_anycast_address (NMDevice *self, guint8 *addr) +nm_device_set_dhcp_anycast_address (NMDevice *self, const char *addr) { NMDevicePrivate *priv; g_return_if_fail (NM_IS_DEVICE (self)); + g_return_if_fail (!addr || nm_utils_hwaddr_valid (addr, ETH_ALEN)); priv = NM_DEVICE_GET_PRIVATE (self); - if (priv->dhcp_anycast_address) { - g_byte_array_free (priv->dhcp_anycast_address, TRUE); - priv->dhcp_anycast_address = NULL; - } - - if (addr) { - priv->dhcp_anycast_address = g_byte_array_sized_new (ETH_ALEN); - g_byte_array_append (priv->dhcp_anycast_address, addr, ETH_ALEN); - } + g_free (priv->dhcp_anycast_address); + priv->dhcp_anycast_address = g_strdup (addr); } /** @@ -6984,46 +6978,47 @@ nm_device_update_hw_address (NMDevice *self) } gboolean -nm_device_set_hw_addr (NMDevice *self, const guint8 *addr, +nm_device_set_hw_addr (NMDevice *self, const char *addr, const char *detail, guint64 hw_log_domain) { NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self); - char *mac_str = NULL; gboolean success = FALSE; const char *cur_addr = nm_device_get_hw_address (self); + guint8 addr_bytes[NM_UTILS_HWADDR_LEN_MAX]; g_return_val_if_fail (addr != NULL, FALSE); /* Do nothing if current MAC is same */ - if (cur_addr && nm_utils_hwaddr_matches (cur_addr, -1, addr, priv->hw_addr_len)) { + if (cur_addr && nm_utils_hwaddr_matches (cur_addr, -1, addr, -1)) { _LOGD (LOGD_DEVICE | hw_log_domain, "no MAC address change needed"); return TRUE; } - - mac_str = nm_utils_hwaddr_ntoa (addr, priv->hw_addr_len); + if (!nm_utils_hwaddr_aton (addr, addr_bytes, priv->hw_addr_len)) { + _LOGW (LOGD_DEVICE | hw_log_domain, "invalid MAC address %s", addr); + return FALSE; + } /* Can't change MAC address while device is up */ nm_device_take_down (self, FALSE); - success = nm_platform_link_set_address (nm_device_get_ip_ifindex (self), addr, priv->hw_addr_len); + success = nm_platform_link_set_address (nm_device_get_ip_ifindex (self), addr_bytes, priv->hw_addr_len); if (success) { /* MAC address succesfully changed; update the current MAC to match */ nm_device_update_hw_address (self); cur_addr = nm_device_get_hw_address (self); - if (cur_addr && nm_utils_hwaddr_matches (cur_addr, -1, addr, priv->hw_addr_len)) { + if (cur_addr && nm_utils_hwaddr_matches (cur_addr, -1, addr, -1)) { _LOGI (LOGD_DEVICE | hw_log_domain, "%s MAC address to %s", - detail, mac_str); + detail, addr); } else { _LOGW (LOGD_DEVICE | hw_log_domain, - "new MAC address %s not successfully set", mac_str); + "new MAC address %s not successfully set", addr); success = FALSE; } } else { _LOGW (LOGD_DEVICE | hw_log_domain, "failed to %s MAC address to %s", - detail, mac_str); + detail, addr); } nm_device_bring_up (self, TRUE, NULL); - g_free (mac_str); return success; } @@ -7316,8 +7311,7 @@ finalize (GObject *object) g_free (priv->driver_version); g_free (priv->firmware_version); g_free (priv->type_desc); - if (priv->dhcp_anycast_address) - g_byte_array_free (priv->dhcp_anycast_address, TRUE); + g_free (priv->dhcp_anycast_address); G_OBJECT_CLASS (nm_device_parent_class)->finalize (object); } diff --git a/src/devices/wifi/nm-device-olpc-mesh.c b/src/devices/wifi/nm-device-olpc-mesh.c index 94e7eb7721..077ec10e9d 100644 --- a/src/devices/wifi/nm-device-olpc-mesh.c +++ b/src/devices/wifi/nm-device-olpc-mesh.c @@ -150,12 +150,9 @@ complete_connection (NMDevice *device, } if (!nm_setting_olpc_mesh_get_dhcp_anycast_address (s_mesh)) { - const guint8 anycast[ETH_ALEN] = { 0xC0, 0x27, 0xC0, 0x27, 0xC0, 0x27 }; + const char *anycast = "c0:27:c0:27:c0:27"; - tmp = g_byte_array_sized_new (ETH_ALEN); - g_byte_array_append (tmp, anycast, sizeof (anycast)); - g_object_set (G_OBJECT (s_mesh), NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS, tmp, NULL); - g_byte_array_free (tmp, TRUE); + g_object_set (G_OBJECT (s_mesh), NM_SETTING_OLPC_MESH_DHCP_ANYCAST_ADDRESS, anycast, NULL); } @@ -225,8 +222,7 @@ act_stage2_config (NMDevice *device, NMDeviceStateReason *reason) NMConnection *connection; NMSettingOlpcMesh *s_mesh; guint32 channel; - const GByteArray *anycast_addr_array; - guint8 *anycast_addr = NULL; + const char *anycast_addr; connection = nm_device_get_connection (device); g_assert (connection); @@ -240,11 +236,9 @@ act_stage2_config (NMDevice *device, NMDeviceStateReason *reason) nm_platform_mesh_set_ssid (nm_device_get_ifindex (device), nm_setting_olpc_mesh_get_ssid (s_mesh)); - anycast_addr_array = nm_setting_olpc_mesh_get_dhcp_anycast_address (s_mesh); - if (anycast_addr_array) - anycast_addr = anycast_addr_array->data; - + anycast_addr = nm_setting_olpc_mesh_get_dhcp_anycast_address (s_mesh); nm_device_set_dhcp_anycast_address (device, anycast_addr); + return NM_ACT_STAGE_RETURN_SUCCESS; } diff --git a/src/devices/wifi/nm-device-wifi.c b/src/devices/wifi/nm-device-wifi.c index e22b785f17..c3941e1142 100644 --- a/src/devices/wifi/nm-device-wifi.c +++ b/src/devices/wifi/nm-device-wifi.c @@ -116,8 +116,8 @@ static guint signals[LAST_SIGNAL] = { 0 }; struct _NMDeviceWifiPrivate { gboolean disposed; - char * perm_hw_addr; /* Permanent MAC address */ - guint8 initial_hw_addr[ETH_ALEN]; /* Initial MAC address (as seen when NM starts) */ + char * perm_hw_addr; /* Permanent MAC address */ + char * initial_hw_addr; /* Initial MAC address (as seen when NM starts) */ gint8 invalid_strength_counter; @@ -377,7 +377,7 @@ find_active_ap (NMDeviceWifi *self, _LOGD (LOGD_WIFI, "active BSSID: %02x:%02x:%02x:%02x:%02x:%02x", bssid[0], bssid[1], bssid[2], bssid[3], bssid[4], bssid[5]); - if (!nm_ethernet_address_is_valid (bssid)) + if (!nm_ethernet_address_is_valid (bssid, ETH_ALEN)) return NULL; ssid = nm_platform_wifi_get_ssid (ifindex); @@ -399,24 +399,23 @@ find_active_ap (NMDeviceWifi *self, /* Find this SSID + BSSID in the device's AP list */ for (iter = priv->ap_list; iter; iter = g_slist_next (iter)) { NMAccessPoint *ap = NM_AP (iter->data); - const guint8 *ap_bssid = nm_ap_get_address (ap); + const char *ap_bssid = nm_ap_get_address (ap); const GByteArray *ap_ssid = nm_ap_get_ssid (ap); NM80211Mode apmode; guint32 apfreq; - _LOGD (LOGD_WIFI, " AP: %s%s%s %02x:%02x:%02x:%02x:%02x:%02x", + _LOGD (LOGD_WIFI, " AP: %s%s%s %s", ap_ssid ? "'" : "", ap_ssid ? nm_utils_escape_ssid (ap_ssid->data, ap_ssid->len) : "(none)", ap_ssid ? "'" : "", - ap_bssid[0], ap_bssid[1], ap_bssid[2], - ap_bssid[3], ap_bssid[4], ap_bssid[5]); + ap_bssid); if (ap == ignore_ap) { _LOGD (LOGD_WIFI, " ignored"); continue; } - if (!nm_utils_hwaddr_matches (bssid, ETH_ALEN, ap_bssid, ETH_ALEN)) { + if (!nm_utils_hwaddr_matches (bssid, ETH_ALEN, ap_bssid, -1)) { _LOGD (LOGD_WIFI, " BSSID mismatch"); continue; } @@ -468,14 +467,14 @@ find_active_ap (NMDeviceWifi *self, * we can't match the AP based on frequency at all, just give up. */ if (match_nofreq && ((found_a_band != found_bg_band) || (devfreq == 0))) { - const guint8 *ap_bssid = nm_ap_get_address (match_nofreq); + const char *ap_bssid = nm_ap_get_address (match_nofreq); const GByteArray *ap_ssid = nm_ap_get_ssid (match_nofreq); - _LOGD (LOGD_WIFI, " matched %s%s%s %02x:%02x:%02x:%02x:%02x:%02x", + _LOGD (LOGD_WIFI, " matched %s%s%s %s", ap_ssid ? "'" : "", ap_ssid ? nm_utils_escape_ssid (ap_ssid->data, ap_ssid->len) : "(none)", ap_ssid ? "'" : "", - ap_bssid[0], ap_bssid[1], ap_bssid[2], ap_bssid[3], ap_bssid[4], ap_bssid[5]); + ap_bssid); active_ap = match_nofreq; goto done; @@ -602,8 +601,11 @@ periodic_update (NMDeviceWifi *self, NMAccessPoint *ignore_ap) /* 0x02 means "locally administered" and should be OR-ed into * the first byte of IBSS BSSIDs. */ - if ((bssid[0] & 0x02) && nm_ethernet_address_is_valid (bssid)) - nm_ap_set_address (priv->current_ap, bssid); + if ((bssid[0] & 0x02) && nm_ethernet_address_is_valid (bssid, ETH_ALEN)) { + char *bssid_str = nm_utils_hwaddr_ntoa (bssid, ETH_ALEN); + nm_ap_set_address (priv->current_ap, bssid_str); + g_free (bssid_str); + } } new_ap = find_active_ap (self, ignore_ap, FALSE); @@ -619,31 +621,26 @@ periodic_update (NMDeviceWifi *self, NMAccessPoint *ignore_ap) } if (new_ap != priv->current_ap) { - const guint8 *new_bssid = NULL; + const char *new_bssid = NULL; const GByteArray *new_ssid = NULL; - const guint8 *old_bssid = NULL; + const char *old_bssid = NULL; const GByteArray *old_ssid = NULL; - char *old_addr = NULL, *new_addr = NULL; if (new_ap) { new_bssid = nm_ap_get_address (new_ap); - new_addr = nm_utils_hwaddr_ntoa (new_bssid, ETH_ALEN); new_ssid = nm_ap_get_ssid (new_ap); } if (priv->current_ap) { old_bssid = nm_ap_get_address (priv->current_ap); - old_addr = nm_utils_hwaddr_ntoa (old_bssid, ETH_ALEN); old_ssid = nm_ap_get_ssid (priv->current_ap); } _LOGI (LOGD_WIFI, "roamed from BSSID %s (%s) to %s (%s)", - old_addr ? old_addr : "(none)", + old_bssid ? old_bssid : "(none)", old_ssid ? nm_utils_escape_ssid (old_ssid->data, old_ssid->len) : "(none)", - new_addr ? new_addr : "(none)", + new_bssid ? new_bssid : "(none)", new_ssid ? nm_utils_escape_ssid (new_ssid->data, new_ssid->len) : "(none)"); - g_free (old_addr); - g_free (new_addr); set_current_ap (self, new_ap, TRUE, FALSE); } @@ -810,7 +807,7 @@ check_connection_compatible (NMDevice *device, NMConnection *connection) NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self); NMSettingConnection *s_con; NMSettingWireless *s_wireless; - const GByteArray *mac; + const char *mac; const GSList *mac_blacklist, *mac_blacklist_iter; const char *mode; @@ -828,21 +825,19 @@ check_connection_compatible (NMDevice *device, NMConnection *connection) return FALSE; mac = nm_setting_wireless_get_mac_address (s_wireless); - if (mac && !nm_utils_hwaddr_matches (mac->data, mac->len, priv->perm_hw_addr, -1)) + if (mac && !nm_utils_hwaddr_matches (mac, -1, priv->perm_hw_addr, -1)) return FALSE; /* Check for MAC address blacklist */ mac_blacklist = nm_setting_wireless_get_mac_address_blacklist (s_wireless); for (mac_blacklist_iter = mac_blacklist; mac_blacklist_iter; mac_blacklist_iter = g_slist_next (mac_blacklist_iter)) { - guint8 addr[ETH_ALEN]; - - if (!nm_utils_hwaddr_aton (mac_blacklist_iter->data, addr, ETH_ALEN)) { + if (!nm_utils_hwaddr_valid (mac_blacklist_iter->data, ETH_ALEN)) { g_warn_if_reached (); return FALSE; } - if (nm_utils_hwaddr_matches (addr, ETH_ALEN, priv->perm_hw_addr, -1)) + if (nm_utils_hwaddr_matches (mac_blacklist_iter->data, -1, priv->perm_hw_addr, -1)) return FALSE; } @@ -980,7 +975,7 @@ complete_connection (NMDevice *device, NMSettingWireless *s_wifi; NMSettingWirelessSecurity *s_wsec; NMSetting8021x *s_8021x; - const GByteArray *setting_mac; + const char *setting_mac; char *str_ssid = NULL; NMAccessPoint *ap = NULL; const GByteArray *ssid = NULL; @@ -1119,7 +1114,7 @@ complete_connection (NMDevice *device, setting_mac = nm_setting_wireless_get_mac_address (s_wifi); if (setting_mac) { /* Make sure the setting MAC (if any) matches the device's permanent MAC */ - if (!nm_utils_hwaddr_matches (setting_mac->data, setting_mac->len, priv->perm_hw_addr, -1)) { + if (!nm_utils_hwaddr_matches (setting_mac, -1, priv->perm_hw_addr, -1)) { g_set_error (error, NM_SETTING_WIRELESS_ERROR, NM_SETTING_WIRELESS_ERROR_INVALID_PROPERTY, @@ -1127,7 +1122,6 @@ complete_connection (NMDevice *device, return FALSE; } } else { - GByteArray *mac; guint8 perm_hw_addr[ETH_ALEN]; /* Lock the connection to this device by default if it uses a @@ -1136,9 +1130,9 @@ complete_connection (NMDevice *device, nm_utils_hwaddr_aton (priv->perm_hw_addr, perm_hw_addr, ETH_ALEN); if ( !(perm_hw_addr[0] & 0x02) && !nm_utils_hwaddr_matches (perm_hw_addr, ETH_ALEN, NULL, ETH_ALEN)) { - mac = nm_utils_hwaddr_atoba (priv->perm_hw_addr, ETH_ALEN); - g_object_set (G_OBJECT (s_wifi), NM_SETTING_WIRELESS_MAC_ADDRESS, mac, NULL); - g_byte_array_free (mac, TRUE); + g_object_set (G_OBJECT (s_wifi), + NM_SETTING_WIRELESS_MAC_ADDRESS, priv->perm_hw_addr, + NULL); } } @@ -1389,7 +1383,6 @@ scanning_allowed (NMDeviceWifi *self) if (connection) { NMSettingWireless *s_wifi; const char *ip4_method = NULL; - const GByteArray *bssid; /* Don't scan when a shared connection is active; it makes drivers mad */ ip4_method = nm_utils_get_ip_config_method (connection, NM_TYPE_SETTING_IP4_CONFIG); @@ -1403,8 +1396,7 @@ scanning_allowed (NMDeviceWifi *self) */ s_wifi = nm_connection_get_setting_wireless (connection); g_assert (s_wifi); - bssid = nm_setting_wireless_get_bssid (s_wifi); - if (bssid && bssid->len == ETH_ALEN) + if (nm_setting_wireless_get_bssid (s_wifi)) return FALSE; } @@ -1639,7 +1631,7 @@ supplicant_iface_scan_done_cb (NMSupplicantInterface *iface, static void try_fill_ssid_for_hidden_ap (NMAccessPoint *ap) { - const guint8 *bssid; + const char *bssid; const GSList *connections, *iter; g_return_if_fail (nm_ap_get_ssid (ap) == NULL); @@ -1664,9 +1656,6 @@ try_fill_ssid_for_hidden_ap (NMAccessPoint *ap) } } -#define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x" -#define MAC_ARG(x) ((guint8*)(x))[0],((guint8*)(x))[1],((guint8*)(x))[2],((guint8*)(x))[3],((guint8*)(x))[4],((guint8*)(x))[5] - /* * merge_scanned_ap * @@ -1686,7 +1675,7 @@ merge_scanned_ap (NMDeviceWifi *self, NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self); NMAccessPoint *found_ap = NULL; const GByteArray *ssid; - const guint8 *bssid; + const char *bssid; gboolean strict_match = TRUE; /* Let the manager try to fill in the SSID from seen-bssids lists */ @@ -1699,14 +1688,13 @@ merge_scanned_ap (NMDeviceWifi *self, ssid = nm_ap_get_ssid (merge_ap); if (ssid && (nm_utils_is_empty_ssid (ssid->data, ssid->len) == FALSE)) { /* Yay, matched it, no longer treat as hidden */ - _LOGD (LOGD_WIFI_SCAN, "matched hidden AP " MAC_FMT " => '%s'", - MAC_ARG (bssid), - nm_utils_escape_ssid (ssid->data, ssid->len)); + _LOGD (LOGD_WIFI_SCAN, "matched hidden AP %s => '%s'", + bssid, nm_utils_escape_ssid (ssid->data, ssid->len)); nm_ap_set_broadcast (merge_ap, FALSE); } else { /* Didn't have an entry for this AP in the database */ - _LOGD (LOGD_WIFI_SCAN, "failed to match hidden AP " MAC_FMT, - MAC_ARG (bssid)); + _LOGD (LOGD_WIFI_SCAN, "failed to match hidden AP %s", + bssid); } } @@ -1723,9 +1711,9 @@ merge_scanned_ap (NMDeviceWifi *self, if (!found_ap) found_ap = nm_ap_match_in_list (merge_ap, priv->ap_list, strict_match); if (found_ap) { - _LOGD (LOGD_WIFI_SCAN, "merging AP '%s' " MAC_FMT " (%p) with existing (%p)", + _LOGD (LOGD_WIFI_SCAN, "merging AP '%s' %s (%p) with existing (%p)", ssid ? nm_utils_escape_ssid (ssid->data, ssid->len) : "(none)", - MAC_ARG (bssid), + bssid, merge_ap, found_ap); @@ -1745,10 +1733,9 @@ merge_scanned_ap (NMDeviceWifi *self, nm_ap_set_fake (found_ap, FALSE); } else { /* New entry in the list */ - _LOGD (LOGD_WIFI_SCAN, "adding new AP '%s' " MAC_FMT " (%p)", + _LOGD (LOGD_WIFI_SCAN, "adding new AP '%s' %s (%p)", ssid ? nm_utils_escape_ssid (ssid->data, ssid->len) : "(none)", - MAC_ARG (bssid), - merge_ap); + bssid, merge_ap); g_object_ref (merge_ap); priv->ap_list = g_slist_prepend (priv->ap_list, merge_ap); @@ -1804,14 +1791,14 @@ cull_scan_list (NMDeviceWifi *self) /* Remove outdated APs */ for (elt = outdated_list; elt; elt = g_slist_next (elt)) { NMAccessPoint *outdated_ap = NM_AP (elt->data); - const guint8 *bssid; + const char *bssid; const GByteArray *ssid; bssid = nm_ap_get_address (outdated_ap); ssid = nm_ap_get_ssid (outdated_ap); _LOGD (LOGD_WIFI_SCAN, - " removing %02x:%02x:%02x:%02x:%02x:%02x (%s%s%s)", - bssid[0], bssid[1], bssid[2], bssid[3], bssid[4], bssid[5], + " removing %s (%s%s%s)", + bssid, ssid ? "'" : "", ssid ? nm_utils_escape_ssid (ssid->data, ssid->len) : "(none)", ssid ? "'" : ""); @@ -2533,7 +2520,7 @@ update_permanent_hw_address (NMDevice *device) errno = 0; ret = ioctl (fd, SIOCETHTOOL, &req); errsv = errno; - if ((ret < 0) || !nm_ethernet_address_is_valid (epaddr->data)) { + if ((ret < 0) || !nm_ethernet_address_is_valid (epaddr->data, ETH_ALEN)) { _LOGD (LOGD_HW | LOGD_ETHER, "unable to read permanent MAC address (error %d)", errsv); /* Fall back to current address */ @@ -2551,15 +2538,13 @@ update_initial_hw_address (NMDevice *device) { NMDeviceWifi *self = NM_DEVICE_WIFI (device); NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self); - const char *mac_str; /* This sets initial MAC address from current MAC address. It should only * be called from NMDevice constructor() to really get the initial address. */ - mac_str = nm_device_get_hw_address (device); - nm_utils_hwaddr_aton (mac_str, priv->initial_hw_addr, ETH_ALEN); + priv->initial_hw_addr = g_strdup (nm_device_get_hw_address (device)); - _LOGD (LOGD_DEVICE | LOGD_ETHER, "read initial MAC address %s", mac_str); + _LOGD (LOGD_DEVICE | LOGD_ETHER, "read initial MAC address %s", priv->initial_hw_addr); } static NMActStageReturn @@ -2572,7 +2557,7 @@ act_stage1_prepare (NMDevice *device, NMDeviceStateReason *reason) NMActRequest *req; NMConnection *connection; NMSettingWireless *s_wireless; - const GByteArray *cloned_mac; + const char *cloned_mac; GSList *iter; const char *mode; const char *ap_path; @@ -2615,8 +2600,8 @@ act_stage1_prepare (NMDevice *device, NMDeviceStateReason *reason) /* Set spoof MAC to the interface */ cloned_mac = nm_setting_wireless_get_cloned_mac_address (s_wireless); - if (cloned_mac && (cloned_mac->len == ETH_ALEN)) - nm_device_set_hw_addr (device, (const guint8 *) cloned_mac->data, "set", LOGD_WIFI); + if (cloned_mac) + nm_device_set_hw_addr (device, cloned_mac, "set", LOGD_WIFI); /* AP mode never uses a specific object or existing scanned AP */ if (priv->mode != NM_802_11_MODE_AP) { @@ -2653,12 +2638,8 @@ act_stage1_prepare (NMDevice *device, NMDeviceStateReason *reason) if (nm_ap_get_mode (ap) == NM_802_11_MODE_INFRA) nm_ap_set_broadcast (ap, FALSE); - else if (nm_ap_is_hotspot (ap)) { - guint8 addr[ETH_ALEN]; - - nm_utils_hwaddr_aton (nm_device_get_hw_address (device), addr, ETH_ALEN); - nm_ap_set_address (ap, addr); - } + else if (nm_ap_is_hotspot (ap)) + nm_ap_set_address (ap, nm_device_get_hw_address (device)); priv->ap_list = g_slist_prepend (priv->ap_list, ap); nm_ap_export_to_dbus (ap); @@ -3021,8 +3002,11 @@ activation_success_handler (NMDevice *device) * the BSSID off the card and fill in the BSSID of the activation AP. */ nm_platform_wifi_get_bssid (ifindex, bssid); - if (!nm_ethernet_address_is_valid (nm_ap_get_address (ap))) - nm_ap_set_address (ap, bssid); + if (!nm_ethernet_address_is_valid (nm_ap_get_address (ap), -1)) { + char *bssid_str = nm_utils_hwaddr_ntoa (bssid, ETH_ALEN); + nm_ap_set_address (ap, bssid_str); + g_free (bssid_str); + } if (!nm_ap_get_freq (ap)) nm_ap_set_freq (ap, nm_platform_wifi_get_frequency (ifindex)); if (!nm_ap_get_max_bitrate (ap)) @@ -3255,6 +3239,7 @@ finalize (GObject *object) NMDeviceWifiPrivate *priv = NM_DEVICE_WIFI_GET_PRIVATE (self); g_free (priv->perm_hw_addr); + g_free (priv->initial_hw_addr); G_OBJECT_CLASS (nm_device_wifi_parent_class)->finalize (object); } diff --git a/src/devices/wifi/nm-wifi-ap-utils.c b/src/devices/wifi/nm-wifi-ap-utils.c index a390e2d523..403093c8fa 100644 --- a/src/devices/wifi/nm-wifi-ap-utils.c +++ b/src/devices/wifi/nm-wifi-ap-utils.c @@ -466,7 +466,7 @@ verify_adhoc (NMSettingWirelessSecurity *s_wsec, gboolean nm_ap_utils_complete_connection (const GByteArray *ap_ssid, - const guint8 *ap_bssid, + const char *bssid, NM80211Mode ap_mode, guint32 ap_flags, guint32 ap_wpa_flags, @@ -500,14 +500,8 @@ nm_ap_utils_complete_connection (const GByteArray *ap_ssid, return FALSE; } - if (lock_bssid && !nm_setting_wireless_get_bssid (s_wifi)) { - GByteArray *bssid; - - bssid = g_byte_array_sized_new (ETH_ALEN); - g_byte_array_append (bssid, ap_bssid, ETH_ALEN); + if (lock_bssid && !nm_setting_wireless_get_bssid (s_wifi)) g_object_set (G_OBJECT (s_wifi), NM_SETTING_WIRELESS_BSSID, bssid, NULL); - g_byte_array_free (bssid, TRUE); - } /* And mode */ mode = nm_setting_wireless_get_mode (s_wifi); diff --git a/src/devices/wifi/nm-wifi-ap-utils.h b/src/devices/wifi/nm-wifi-ap-utils.h index d64d9dd53b..31c12cd7b2 100644 --- a/src/devices/wifi/nm-wifi-ap-utils.h +++ b/src/devices/wifi/nm-wifi-ap-utils.h @@ -29,7 +29,7 @@ #include <nm-setting-8021x.h> gboolean nm_ap_utils_complete_connection (const GByteArray *ssid, - const guint8 *bssid, + const char *bssid, NM80211Mode mode, guint32 flags, guint32 wpa_flags, diff --git a/src/devices/wifi/nm-wifi-ap.c b/src/devices/wifi/nm-wifi-ap.c index f387dacd2f..82340cbc80 100644 --- a/src/devices/wifi/nm-wifi-ap.c +++ b/src/devices/wifi/nm-wifi-ap.c @@ -44,7 +44,7 @@ typedef struct /* Scanned or cached values */ GByteArray * ssid; - guint8 address[ETH_ALEN]; + char * address; NM80211Mode mode; gint8 strength; guint32 freq; /* Frequency in MHz; ie 2412 (== 2.412 GHz) */ @@ -101,6 +101,7 @@ finalize (GObject *object) g_free (priv->supplicant_path); if (priv->ssid) g_byte_array_free (priv->ssid, TRUE); + g_free (priv->address); G_OBJECT_CLASS (nm_ap_parent_class)->finalize (object); } @@ -175,7 +176,7 @@ get_property (GObject *object, guint prop_id, g_value_set_uint (value, priv->freq); break; case PROP_HW_ADDRESS: - g_value_take_string (value, nm_utils_hwaddr_ntoa (&priv->address, ETH_ALEN)); + g_value_set_string (value, priv->address); break; case PROP_MODE: g_value_set_uint (value, priv->mode); @@ -407,9 +408,13 @@ foreach_property_cb (gpointer key, gpointer value, gpointer user_data) nm_ap_set_ssid (ap, ssid); g_byte_array_free (ssid, TRUE); } else if (!strcmp (key, "BSSID")) { + char *addr; + if (array->len != ETH_ALEN) return; - nm_ap_set_address (ap, (guint8 *) array->data); + addr = nm_utils_hwaddr_ntoa (array->data, array->len); + nm_ap_set_address (ap, addr); + g_free (addr); } else if (!strcmp (key, "Rates")) { guint32 maxrate = 0; int i; @@ -469,7 +474,7 @@ NMAccessPoint * nm_ap_new_from_properties (const char *supplicant_path, GHashTable *properties) { NMAccessPoint *ap; - const guint8 *addr; + const char *addr; const char bad_bssid1[ETH_ALEN] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; const char bad_bssid2[ETH_ALEN] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; @@ -484,8 +489,8 @@ nm_ap_new_from_properties (const char *supplicant_path, GHashTable *properties) /* ignore APs with invalid BSSIDs */ addr = nm_ap_get_address (ap); - if ( !(memcmp (addr, bad_bssid1, ETH_ALEN)) - || !(memcmp (addr, bad_bssid2, ETH_ALEN))) { + if ( nm_utils_hwaddr_matches (addr, -1, bad_bssid1, ETH_ALEN) + || nm_utils_hwaddr_matches (addr, -1, bad_bssid2, ETH_ALEN)) { g_object_unref (ap); return NULL; } @@ -706,10 +711,6 @@ error: return NULL; } - -#define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x" -#define MAC_ARG(x) ((guint8*)(x))[0],((guint8*)(x))[1],((guint8*)(x))[2],((guint8*)(x))[3],((guint8*)(x))[4],((guint8*)(x))[5] - void nm_ap_dump (NMAccessPoint *ap, const char *prefix) { @@ -723,7 +724,7 @@ nm_ap_dump (NMAccessPoint *ap, const char *prefix) prefix, priv->ssid ? nm_utils_escape_ssid (priv->ssid->data, priv->ssid->len) : "(none)", ap); - nm_log_dbg (LOGD_WIFI_SCAN, " BSSID " MAC_FMT, MAC_ARG (priv->address)); + nm_log_dbg (LOGD_WIFI_SCAN, " BSSID %s", priv->address); nm_log_dbg (LOGD_WIFI_SCAN, " mode %d", priv->mode); nm_log_dbg (LOGD_WIFI_SCAN, " flags 0x%X", priv->flags); nm_log_dbg (LOGD_WIFI_SCAN, " wpa flags 0x%X", priv->wpa_flags); @@ -883,7 +884,7 @@ nm_ap_set_rsn_flags (NMAccessPoint *ap, NM80211ApSecurityFlags flags) * Get/set functions for address * */ -const guint8 * +const char * nm_ap_get_address (const NMAccessPoint *ap) { g_return_val_if_fail (NM_IS_AP (ap), NULL); @@ -892,17 +893,19 @@ nm_ap_get_address (const NMAccessPoint *ap) } void -nm_ap_set_address (NMAccessPoint *ap, const guint8 *addr) +nm_ap_set_address (NMAccessPoint *ap, const char *addr) { NMAccessPointPrivate *priv; g_return_if_fail (NM_IS_AP (ap)); g_return_if_fail (addr != NULL); + g_return_if_fail (nm_utils_hwaddr_valid (addr, ETH_ALEN)); priv = NM_AP_GET_PRIVATE (ap); - if (!nm_utils_hwaddr_matches (addr, ETH_ALEN, priv->address, sizeof (priv->address))) { - memcpy (NM_AP_GET_PRIVATE (ap)->address, addr, sizeof (priv->address)); + if (!priv->address || !nm_utils_hwaddr_matches (addr, -1, priv->address, -1)) { + g_free (priv->address); + priv->address = g_strdup (addr); g_object_notify (G_OBJECT (ap), NM_AP_HW_ADDRESS); } } @@ -1108,7 +1111,7 @@ nm_ap_check_compatible (NMAccessPoint *self, NMSettingWirelessSecurity *s_wireless_sec; const char *mode; const char *band; - const GByteArray *bssid; + const char *bssid; guint32 channel; g_return_val_if_fail (NM_IS_AP (self), FALSE); @@ -1124,7 +1127,7 @@ nm_ap_check_compatible (NMAccessPoint *self, return FALSE; bssid = nm_setting_wireless_get_bssid (s_wireless); - if (bssid && !nm_utils_hwaddr_matches (bssid->data, bssid->len, priv->address, ETH_ALEN)) + if (bssid && !nm_utils_hwaddr_matches (bssid, -1, priv->address, -1)) return FALSE; mode = nm_setting_wireless_get_mode (s_wireless); @@ -1221,10 +1224,10 @@ nm_ap_match_in_list (NMAccessPoint *find_ap, for (iter = ap_list; iter; iter = g_slist_next (iter)) { NMAccessPoint * list_ap = NM_AP (iter->data); const GByteArray * list_ssid = nm_ap_get_ssid (list_ap); - const guint8 * list_addr = nm_ap_get_address (list_ap); + const char * list_addr = nm_ap_get_address (list_ap); const GByteArray * find_ssid = nm_ap_get_ssid (find_ap); - const guint8 * find_addr = nm_ap_get_address (find_ap); + const char * find_addr = nm_ap_get_address (find_ap); /* SSID match; if both APs are hiding their SSIDs, * let matching continue on BSSID and other properties @@ -1235,9 +1238,9 @@ nm_ap_match_in_list (NMAccessPoint *find_ap, continue; /* BSSID match */ - if ( (strict_match || nm_ethernet_address_is_valid (find_addr)) - && nm_ethernet_address_is_valid (list_addr) - && !nm_utils_hwaddr_matches (list_addr, ETH_ALEN, find_addr, ETH_ALEN)) + if ( (strict_match || nm_ethernet_address_is_valid (find_addr, -1)) + && nm_ethernet_address_is_valid (list_addr, -1) + && !nm_utils_hwaddr_matches (list_addr, -1, find_addr, -1)) continue; /* mode match */ diff --git a/src/devices/wifi/nm-wifi-ap.h b/src/devices/wifi/nm-wifi-ap.h index c9175821b5..d6701fdc92 100644 --- a/src/devices/wifi/nm-wifi-ap.h +++ b/src/devices/wifi/nm-wifi-ap.h @@ -78,8 +78,8 @@ void nm_ap_set_wpa_flags (NMAccessPoint *ap, NM80211ApSecurity NM80211ApSecurityFlags nm_ap_get_rsn_flags (NMAccessPoint *ap); void nm_ap_set_rsn_flags (NMAccessPoint *ap, NM80211ApSecurityFlags flags); -const guint8 *nm_ap_get_address (const NMAccessPoint *ap); -void nm_ap_set_address (NMAccessPoint *ap, const guint8 *addr); +const char *nm_ap_get_address (const NMAccessPoint *ap); +void nm_ap_set_address (NMAccessPoint *ap, const char *addr); NM80211Mode nm_ap_get_mode (NMAccessPoint *ap); void nm_ap_set_mode (NMAccessPoint *ap, const NM80211Mode mode); diff --git a/src/devices/wifi/tests/test-wifi-ap-utils.c b/src/devices/wifi/tests/test-wifi-ap-utils.c index 89b3d1644c..c9f7def6c4 100644 --- a/src/devices/wifi/tests/test-wifi-ap-utils.c +++ b/src/devices/wifi/tests/test-wifi-ap-utils.c @@ -67,7 +67,7 @@ static gboolean complete_connection (const char *ssid, - const guint8 bssid[ETH_ALEN], + const char *bssid, NM80211Mode mode, guint32 flags, guint32 wpa_flags, @@ -218,7 +218,7 @@ fill_8021x (NMConnection *connection, const KeyData items[]) static NMConnection * create_basic (const char *ssid, - const guint8 *bssid, + const char *bssid, NM80211Mode mode) { NMConnection *connection; @@ -237,12 +237,8 @@ create_basic (const char *ssid, g_byte_array_free (tmp, TRUE); /* BSSID */ - if (bssid) { - tmp = g_byte_array_sized_new (ETH_ALEN); - g_byte_array_append (tmp, bssid, ETH_ALEN); - g_object_set (G_OBJECT (s_wifi), NM_SETTING_WIRELESS_BSSID, tmp, NULL); - g_byte_array_free (tmp, TRUE); - } + if (bssid) + g_object_set (G_OBJECT (s_wifi), NM_SETTING_WIRELESS_BSSID, bssid, NULL); if (mode == NM_802_11_MODE_INFRA) g_object_set (G_OBJECT (s_wifi), NM_SETTING_WIRELESS_MODE, "infrastructure", NULL); @@ -260,7 +256,7 @@ static void test_lock_bssid (void) { NMConnection *src, *expected; - const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + const char *bssid = "01:02:03:04:05:06"; const char *ssid = "blahblah"; gboolean success; GError *error = NULL; @@ -284,7 +280,7 @@ static void test_open_ap_empty_connection (void) { NMConnection *src, *expected; - const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + const char *bssid = "01:02:03:04:05:06"; const char *ssid = "blahblah"; gboolean success; GError *error = NULL; @@ -312,7 +308,7 @@ static void test_open_ap_leap_connection_1 (gconstpointer add_wifi) { NMConnection *src; - const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + const char *bssid = "01:02:03:04:05:06"; const KeyData src_wsec[] = { { NM_SETTING_WIRELESS_SECURITY_LEAP_USERNAME, "Bill Smith", 0 }, { NULL } }; gboolean success; GError *error = NULL; @@ -344,7 +340,7 @@ static void test_open_ap_leap_connection_2 (void) { NMConnection *src; - const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + const char *bssid = "01:02:03:04:05:06"; const KeyData src_wsec[] = { { NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "ieee8021x", 0 }, { NULL } }; gboolean success; GError *error = NULL; @@ -374,7 +370,7 @@ static void test_open_ap_wep_connection (gconstpointer add_wifi) { NMConnection *src; - const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + const char *bssid = "01:02:03:04:05:06"; const KeyData src_wsec[] = { { NM_SETTING_WIRELESS_SECURITY_WEP_KEY0, "11111111111111111111111111", 0 }, { NM_SETTING_WIRELESS_SECURITY_WEP_TX_KEYIDX, NULL, 0 }, @@ -415,7 +411,7 @@ test_ap_wpa_psk_connection_base (const char *key_mgmt, { NMConnection *src; const char *ssid = "blahblah"; - const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + const char *bssid = "01:02:03:04:05:06"; const KeyData exp_wifi[] = { { NM_SETTING_WIRELESS_SSID, ssid, 0 }, { NM_SETTING_WIRELESS_MODE, "infrastructure", 0 }, @@ -525,7 +521,7 @@ test_ap_wpa_eap_connection_base (const char *key_mgmt, guint error_code) { NMConnection *src; - const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + const char *bssid = "01:02:03:04:05:06"; const KeyData src_empty[] = { { NULL } }; const KeyData src_wsec[] = { { NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, key_mgmt, 0 }, @@ -731,7 +727,7 @@ static void test_priv_ap_empty_connection (void) { NMConnection *src, *expected; - const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + const char *bssid = "01:02:03:04:05:06"; const char *ssid = "blahblah"; const KeyData exp_wsec[] = { { NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "none", 0 }, @@ -766,7 +762,7 @@ test_priv_ap_leap_connection_1 (gconstpointer add_wifi) { NMConnection *src, *expected; const char *ssid = "blahblah"; - const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + const char *bssid = "01:02:03:04:05:06"; const char *leap_username = "Bill Smith"; const KeyData src_wsec[] = { { NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "ieee8021x", 0 }, @@ -811,7 +807,7 @@ static void test_priv_ap_leap_connection_2 (void) { NMConnection *src; - const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + const char *bssid = "01:02:03:04:05:06"; const KeyData src_wsec[] = { { NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "ieee8021x", 0 }, { NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "leap", 0 }, @@ -845,7 +841,7 @@ test_priv_ap_dynamic_wep_1 (void) { NMConnection *src, *expected; const char *ssid = "blahblah"; - const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + const char *bssid = "01:02:03:04:05:06"; const KeyData src_wsec[] = { { NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "ieee8021x", 0 }, { NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "open", 0 }, @@ -893,7 +889,7 @@ test_priv_ap_dynamic_wep_2 (void) { NMConnection *src, *expected; const char *ssid = "blahblah"; - const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + const char *bssid = "01:02:03:04:05:06"; const KeyData src_wsec[] = { { NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "open", 0 }, { NULL } }; @@ -939,7 +935,7 @@ static void test_priv_ap_dynamic_wep_3 (void) { NMConnection *src; - const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + const char *bssid = "01:02:03:04:05:06"; const KeyData src_wsec[] = { { NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "shared", 0 }, { NULL } }; @@ -1052,7 +1048,7 @@ test_wpa_ap_empty_connection (gconstpointer data) { guint idx = GPOINTER_TO_UINT (data); NMConnection *src, *expected; - const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + const char *bssid = "01:02:03:04:05:06"; const char *ssid = "blahblah"; const KeyData exp_wsec[] = { { NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "wpa-psk", 0 }, @@ -1090,7 +1086,7 @@ test_wpa_ap_leap_connection_1 (gconstpointer data) guint idx = GPOINTER_TO_UINT (data); NMConnection *src; const char *ssid = "blahblah"; - const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + const char *bssid = "01:02:03:04:05:06"; const char *leap_username = "Bill Smith"; const KeyData src_wsec[] = { { NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "ieee8021x", 0 }, @@ -1125,7 +1121,7 @@ test_wpa_ap_leap_connection_2 (gconstpointer data) { guint idx = GPOINTER_TO_UINT (data); NMConnection *src; - const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + const char *bssid = "01:02:03:04:05:06"; const KeyData src_wsec[] = { { NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "ieee8021x", 0 }, { NM_SETTING_WIRELESS_SECURITY_AUTH_ALG, "leap", 0 }, @@ -1159,7 +1155,7 @@ test_wpa_ap_dynamic_wep_connection (gconstpointer data) { guint idx = GPOINTER_TO_UINT (data); NMConnection *src; - const guint8 bssid[ETH_ALEN] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 }; + const char *bssid = "01:02:03:04:05:06"; const KeyData src_wsec[] = { { NM_SETTING_WIRELESS_SECURITY_KEY_MGMT, "ieee8021x", 0 }, { NULL } }; diff --git a/src/devices/wimax/nm-device-wimax.c b/src/devices/wimax/nm-device-wimax.c index 9ffbd89fa6..d428f1d2eb 100644 --- a/src/devices/wimax/nm-device-wimax.c +++ b/src/devices/wimax/nm-device-wimax.c @@ -315,7 +315,7 @@ check_connection_compatible (NMDevice *device, NMConnection *connection) NMSettingConnection *s_con; NMSettingWimax *s_wimax; const char *connection_type; - const GByteArray *mac; + const char *mac; if (!NM_DEVICE_CLASS (nm_device_wimax_parent_class)->check_connection_compatible (device, connection)) return FALSE; @@ -332,7 +332,7 @@ check_connection_compatible (NMDevice *device, NMConnection *connection) return FALSE; mac = nm_setting_wimax_get_mac_address (s_wimax); - if (mac && !nm_utils_hwaddr_matches (mac->data, mac->len, nm_device_get_hw_address (device), -1)) + if (mac && !nm_utils_hwaddr_matches (mac, -1, nm_device_get_hw_address (device), -1)) return FALSE; return TRUE; @@ -371,7 +371,7 @@ complete_connection (NMDevice *device, NMDeviceWimax *self = NM_DEVICE_WIMAX (device); NMDeviceWimaxPrivate *priv = NM_DEVICE_WIMAX_GET_PRIVATE (self); NMSettingWimax *s_wimax; - const GByteArray *setting_mac; + const char *setting_mac; const char *hw_address; const char *nsp_name = NULL; NMWimaxNsp *nsp = NULL; @@ -450,7 +450,7 @@ complete_connection (NMDevice *device, hw_address = nm_device_get_hw_address (device); if (setting_mac) { /* Make sure the setting MAC (if any) matches the device's permanent MAC */ - if (!nm_utils_hwaddr_matches (setting_mac->data, setting_mac->len, hw_address, -1)) { + if (!nm_utils_hwaddr_matches (setting_mac, -1, hw_address, -1)) { g_set_error (error, NM_SETTING_WIMAX_ERROR, NM_SETTING_WIMAX_ERROR_INVALID_PROPERTY, @@ -458,14 +458,9 @@ complete_connection (NMDevice *device, return FALSE; } } else { - GByteArray *mac; - /* Lock the connection to this device by default */ - if (!nm_utils_hwaddr_matches (hw_address, -1, NULL, ETH_ALEN)) { - mac = nm_utils_hwaddr_atoba (hw_address, ETH_ALEN); - g_object_set (G_OBJECT (s_wimax), NM_SETTING_WIMAX_MAC_ADDRESS, mac, NULL); - g_byte_array_free (mac, TRUE); - } + if (!nm_utils_hwaddr_matches (hw_address, -1, NULL, ETH_ALEN)) + g_object_set (G_OBJECT (s_wimax), NM_SETTING_WIMAX_MAC_ADDRESS, hw_address, NULL); } return TRUE; diff --git a/src/dhcp-manager/nm-dhcp-client.c b/src/dhcp-manager/nm-dhcp-client.c index dc23490a79..ded7060bbc 100644 --- a/src/dhcp-manager/nm-dhcp-client.c +++ b/src/dhcp-manager/nm-dhcp-client.c @@ -348,7 +348,7 @@ nm_dhcp_client_watch_child (NMDhcpClient *self, pid_t pid) gboolean nm_dhcp_client_start_ip4 (NMDhcpClient *self, const char *dhcp_client_id, - GByteArray *dhcp_anycast_addr, + const char *dhcp_anycast_addr, const char *hostname) { NMDhcpClientPrivate *priv; @@ -480,7 +480,7 @@ get_duid (NMDhcpClient *self) gboolean nm_dhcp_client_start_ip6 (NMDhcpClient *self, - GByteArray *dhcp_anycast_addr, + const char *dhcp_anycast_addr, const char *hostname, gboolean info_only, NMSettingIP6ConfigPrivacy privacy) diff --git a/src/dhcp-manager/nm-dhcp-client.h b/src/dhcp-manager/nm-dhcp-client.h index f458b13ff8..89fe821db5 100644 --- a/src/dhcp-manager/nm-dhcp-client.h +++ b/src/dhcp-manager/nm-dhcp-client.h @@ -65,11 +65,11 @@ typedef struct { gboolean (*ip4_start) (NMDhcpClient *self, const char *dhcp_client_id, - GByteArray *anycast_addr, + const char *anycast_addr, const char *hostname); gboolean (*ip6_start) (NMDhcpClient *self, - GByteArray *anycast_addr, + const char *anycast_addr, const char *hostname, gboolean info_only, NMSettingIP6ConfigPrivacy privacy, @@ -117,11 +117,11 @@ guint32 nm_dhcp_client_get_priority (NMDhcpClient *self); gboolean nm_dhcp_client_start_ip4 (NMDhcpClient *self, const char *dhcp_client_id, - GByteArray *dhcp_anycast_addr, + const char *dhcp_anycast_addr, const char *hostname); gboolean nm_dhcp_client_start_ip6 (NMDhcpClient *self, - GByteArray *dhcp_anycast_addr, + const char *dhcp_anycast_addr, const char *hostname, gboolean info_only, NMSettingIP6ConfigPrivacy privacy); diff --git a/src/dhcp-manager/nm-dhcp-dhclient-utils.c b/src/dhcp-manager/nm-dhcp-dhclient-utils.c index 7991181f90..6c5be77cb8 100644 --- a/src/dhcp-manager/nm-dhcp-dhclient-utils.c +++ b/src/dhcp-manager/nm-dhcp-dhclient-utils.c @@ -129,7 +129,7 @@ char * nm_dhcp_dhclient_create_config (const char *interface, gboolean is_ip6, const char *dhcp_client_id, - GByteArray *anycast_addr, + const char *anycast_addr, const char *hostname, const char *orig_path, const char *orig_contents) @@ -138,6 +138,8 @@ nm_dhcp_dhclient_create_config (const char *interface, GPtrArray *alsoreq; int i; + g_return_val_if_fail (!anycast_addr || nm_utils_hwaddr_valid (anycast_addr, ETH_ALEN), NULL); + new_contents = g_string_new (_("# Created by NetworkManager\n")); alsoreq = g_ptr_array_sized_new (5); @@ -246,22 +248,14 @@ nm_dhcp_dhclient_create_config (const char *interface, g_string_append_c (new_contents, '\n'); - if (anycast_addr && anycast_addr->len == 6) { - const guint8 *p_anycast_addr = anycast_addr->data; - + if (anycast_addr) { g_string_append_printf (new_contents, "interface \"%s\" {\n" " initial-interval 1; \n" - " anycast-mac ethernet %02x:%02x:%02x:%02x:%02x:%02x;\n" + " anycast-mac ethernet %s;\n" "}\n", - interface, - p_anycast_addr[0], p_anycast_addr[1], - p_anycast_addr[2], p_anycast_addr[3], - p_anycast_addr[4], p_anycast_addr[5]); + interface, anycast_addr); } - /* Finally, assert that anycast_addr was unset or a 48 bit mac address. */ - g_return_val_if_fail (!anycast_addr || anycast_addr->len == 6, g_string_free (new_contents, FALSE)); - return g_string_free (new_contents, FALSE); } diff --git a/src/dhcp-manager/nm-dhcp-dhclient-utils.h b/src/dhcp-manager/nm-dhcp-dhclient-utils.h index 61da24877d..3b786a65a6 100644 --- a/src/dhcp-manager/nm-dhcp-dhclient-utils.h +++ b/src/dhcp-manager/nm-dhcp-dhclient-utils.h @@ -28,7 +28,7 @@ char *nm_dhcp_dhclient_create_config (const char *interface, gboolean is_ip6, const char *dhcp_client_id, - GByteArray *anycast_addr, + const char *anycast_addr, const char *hostname, const char *orig_path, const char *orig_contents); diff --git a/src/dhcp-manager/nm-dhcp-dhclient.c b/src/dhcp-manager/nm-dhcp-dhclient.c index f2fe29057d..d5ea6a5486 100644 --- a/src/dhcp-manager/nm-dhcp-dhclient.c +++ b/src/dhcp-manager/nm-dhcp-dhclient.c @@ -166,7 +166,7 @@ merge_dhclient_config (const char *iface, const char *conf_file, gboolean is_ip6, const char *dhcp_client_id, - GByteArray *anycast_addr, + const char *anycast_addr, const char *hostname, const char *orig_path, GError **error) @@ -272,7 +272,7 @@ create_dhclient_config (const char *iface, gboolean is_ip6, const char *uuid, const char *dhcp_client_id, - GByteArray *dhcp_anycast_addr, + const char *dhcp_anycast_addr, const char *hostname) { char *orig = NULL, *new = NULL; @@ -482,7 +482,7 @@ dhclient_start (NMDhcpClient *client, static gboolean ip4_start (NMDhcpClient *client, const char *dhcp_client_id, - GByteArray *dhcp_anycast_addr, + const char *dhcp_anycast_addr, const char *hostname) { NMDhcpDhclientPrivate *priv = NM_DHCP_DHCLIENT_GET_PRIVATE (client); @@ -502,7 +502,7 @@ ip4_start (NMDhcpClient *client, static gboolean ip6_start (NMDhcpClient *client, - GByteArray *dhcp_anycast_addr, + const char *dhcp_anycast_addr, const char *hostname, gboolean info_only, NMSettingIP6ConfigPrivacy privacy, diff --git a/src/dhcp-manager/nm-dhcp-dhcpcd.c b/src/dhcp-manager/nm-dhcp-dhcpcd.c index 646fea9fd9..8345034b84 100644 --- a/src/dhcp-manager/nm-dhcp-dhcpcd.c +++ b/src/dhcp-manager/nm-dhcp-dhcpcd.c @@ -88,7 +88,7 @@ dhcpcd_child_setup (gpointer user_data G_GNUC_UNUSED) static gboolean ip4_start (NMDhcpClient *client, const char *dhcp_client_id, - GByteArray *dhcp_anycast_addr, + const char *dhcp_anycast_addr, const char *hostname) { NMDhcpDhcpcdPrivate *priv = NM_DHCP_DHCPCD_GET_PRIVATE (client); @@ -171,7 +171,7 @@ ip4_start (NMDhcpClient *client, static gboolean ip6_start (NMDhcpClient *client, - GByteArray *dhcp_anycast_addr, + const char *dhcp_anycast_addr, const char *hostname, gboolean info_only, NMSettingIP6ConfigPrivacy privacy, diff --git a/src/dhcp-manager/nm-dhcp-manager.c b/src/dhcp-manager/nm-dhcp-manager.c index 332be3b012..a1bbbef50f 100644 --- a/src/dhcp-manager/nm-dhcp-manager.c +++ b/src/dhcp-manager/nm-dhcp-manager.c @@ -377,7 +377,7 @@ client_start (NMDhcpManager *self, gboolean ipv6, const char *dhcp_client_id, guint32 timeout, - GByteArray *dhcp_anycast_addr, + const char *dhcp_anycast_addr, const char *hostname, gboolean info_only, NMSettingIP6ConfigPrivacy privacy) @@ -452,7 +452,7 @@ nm_dhcp_manager_start_ip4 (NMDhcpManager *self, const char *dhcp_hostname, const char *dhcp_client_id, guint32 timeout, - GByteArray *dhcp_anycast_addr) + const char *dhcp_anycast_addr) { const char *hostname = NULL; @@ -475,7 +475,7 @@ nm_dhcp_manager_start_ip6 (NMDhcpManager *self, guint priority, const char *dhcp_hostname, guint32 timeout, - GByteArray *dhcp_anycast_addr, + const char *dhcp_anycast_addr, gboolean info_only, NMSettingIP6ConfigPrivacy privacy) { diff --git a/src/dhcp-manager/nm-dhcp-manager.h b/src/dhcp-manager/nm-dhcp-manager.h index 23b1fa10f6..16af333274 100644 --- a/src/dhcp-manager/nm-dhcp-manager.h +++ b/src/dhcp-manager/nm-dhcp-manager.h @@ -71,7 +71,7 @@ NMDhcpClient * nm_dhcp_manager_start_ip4 (NMDhcpManager *manager, const char *dhcp_hostname, const char *dhcp_client_id, guint32 timeout, - GByteArray *dhcp_anycast_addr); + const char *dhcp_anycast_addr); NMDhcpClient * nm_dhcp_manager_start_ip6 (NMDhcpManager *manager, const char *iface, @@ -81,7 +81,7 @@ NMDhcpClient * nm_dhcp_manager_start_ip6 (NMDhcpManager *manager, guint priority, const char *dhcp_hostname, guint32 timeout, - GByteArray *dhcp_anycast_addr, + const char *dhcp_anycast_addr, gboolean info_only, NMSettingIP6ConfigPrivacy privacy); diff --git a/src/dhcp-manager/tests/test-dhcp-dhclient.c b/src/dhcp-manager/tests/test-dhcp-dhclient.c index 7b8bcef2ca..39a898a925 100644 --- a/src/dhcp-manager/tests/test-dhcp-dhclient.c +++ b/src/dhcp-manager/tests/test-dhcp-dhclient.c @@ -35,7 +35,7 @@ test_config (const char *orig, const char *hostname, const char *dhcp_client_id, const char *iface, - GByteArray *anycast_addr) + const char *anycast_addr) { char *new; diff --git a/src/nm-manager.c b/src/nm-manager.c index 8597e3b533..bee2c55f11 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -842,7 +842,7 @@ nm_manager_get_state (NMManager *manager) /*******************************************************************/ static NMDevice * -get_device_from_hwaddr (NMManager *self, const GByteArray *setting_mac) +get_device_from_hwaddr (NMManager *self, const char *setting_mac) { NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self); const char *device_mac; @@ -857,7 +857,7 @@ get_device_from_hwaddr (NMManager *self, const GByteArray *setting_mac) device_mac = nm_device_get_hw_address (iter->data); if (!device_mac) continue; - if (nm_utils_hwaddr_matches (setting_mac->data, setting_mac->len, device_mac, -1)) + if (nm_utils_hwaddr_matches (setting_mac, -1, device_mac, -1)) return device; } return NULL; @@ -873,7 +873,7 @@ find_vlan_parent (NMManager *self, NMConnection *parent_connection; const char *parent_iface; NMDevice *parent = NULL; - const GByteArray *setting_mac; + const char *setting_mac; GSList *iter; /* The 'parent' property could be given by an interface name, a @@ -926,7 +926,7 @@ find_infiniband_parent (NMManager *self, NMSettingInfiniband *s_infiniband; const char *parent_iface; NMDevice *parent = NULL; - const GByteArray *setting_mac; + const char *setting_mac; s_infiniband = nm_connection_get_setting_infiniband (connection); g_return_val_if_fail (s_infiniband != NULL, NULL); diff --git a/src/settings/nm-settings-connection.c b/src/settings/nm-settings-connection.c index 0b821ecb9b..d22cdd493a 100644 --- a/src/settings/nm-settings-connection.c +++ b/src/settings/nm-settings-connection.c @@ -1703,31 +1703,6 @@ nm_settings_connection_read_and_fill_timestamp (NMSettingsConnection *connection g_key_file_free (timestamps_file); } -static guint -mac_hash (gconstpointer v) -{ - const guint8 *p = v; - guint32 i, h = 5381; - - for (i = 0; i < ETH_ALEN; i++) - h = (h << 5) + h + p[i]; - return h; -} - -static gboolean -mac_equal (gconstpointer a, gconstpointer b) -{ - return memcmp (a, b, ETH_ALEN) == 0; -} - -static guint8 * -mac_dup (const guint8 *old) -{ - g_return_val_if_fail (old != NULL, NULL); - - return g_memdup (old, ETH_ALEN); -} - /** * nm_settings_connection_get_seen_bssids: * @connection: the #NMSettingsConnection @@ -1754,7 +1729,7 @@ nm_settings_connection_get_seen_bssids (NMSettingsConnection *connection) **/ gboolean nm_settings_connection_has_seen_bssid (NMSettingsConnection *connection, - const guint8 *bssid) + const char *bssid) { g_return_val_if_fail (NM_IS_SETTINGS_CONNECTION (connection), FALSE); g_return_val_if_fail (bssid != NULL, FALSE); @@ -1772,7 +1747,7 @@ nm_settings_connection_has_seen_bssid (NMSettingsConnection *connection, **/ void nm_settings_connection_add_seen_bssid (NMSettingsConnection *connection, - const guint8 *seen_bssid) + const char *seen_bssid) { NMSettingsConnectionPrivate *priv = NM_SETTINGS_CONNECTION_GET_PRIVATE (connection); const char *connection_uuid; @@ -1790,8 +1765,8 @@ nm_settings_connection_add_seen_bssid (NMSettingsConnection *connection, return; /* Already in the list */ /* Add the new BSSID; let the hash take ownership of the allocated BSSID string */ - bssid_str = nm_utils_hwaddr_ntoa (seen_bssid, ETH_ALEN); - g_hash_table_insert (priv->seen_bssids, mac_dup (seen_bssid), bssid_str); + bssid_str = g_strdup (seen_bssid); + g_hash_table_insert (priv->seen_bssids, bssid_str, bssid_str); /* Build up a list of all the BSSIDs in string form */ n = 0; @@ -1829,19 +1804,6 @@ nm_settings_connection_add_seen_bssid (NMSettingsConnection *connection, } } -static void -add_seen_bssid_string (NMSettingsConnection *self, const char *bssid) -{ - guint8 mac[ETH_ALEN]; - - g_return_if_fail (bssid != NULL); - if (nm_utils_hwaddr_aton (bssid, mac, ETH_ALEN)) { - g_hash_table_insert (NM_SETTINGS_CONNECTION_GET_PRIVATE (self)->seen_bssids, - mac_dup (mac), - g_strdup (bssid)); - } -} - /** * nm_settings_connection_read_and_fill_seen_bssids: * @connection: the #NMSettingsConnection @@ -1872,8 +1834,8 @@ nm_settings_connection_read_and_fill_seen_bssids (NMSettingsConnection *connecti if (tmp_strv) { g_hash_table_remove_all (priv->seen_bssids); for (i = 0; i < len; i++) - add_seen_bssid_string (connection, tmp_strv[i]); - g_strfreev (tmp_strv); + g_hash_table_insert (priv->seen_bssids, tmp_strv[i], tmp_strv[i]); + g_free (tmp_strv); } else { /* If this connection didn't have an entry in the seen-bssids database, * maybe this is the first time we've read it in, so populate the @@ -1883,8 +1845,11 @@ nm_settings_connection_read_and_fill_seen_bssids (NMSettingsConnection *connecti s_wifi = nm_connection_get_setting_wireless (NM_CONNECTION (connection)); if (s_wifi) { len = nm_setting_wireless_get_num_seen_bssids (s_wifi); - for (i = 0; i < len; i++) - add_seen_bssid_string (connection, nm_setting_wireless_get_seen_bssid (s_wifi, i)); + for (i = 0; i < len; i++) { + char *bssid_dup = g_strdup (nm_setting_wireless_get_seen_bssid (s_wifi, i)); + + g_hash_table_insert (priv->seen_bssids, bssid_dup, bssid_dup); + } } } } @@ -2011,7 +1976,7 @@ nm_settings_connection_init (NMSettingsConnection *self) priv->agent_mgr = nm_agent_manager_get (); - priv->seen_bssids = g_hash_table_new_full (mac_hash, mac_equal, g_free, g_free); + priv->seen_bssids = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); priv->autoconnect_retries = AUTOCONNECT_RETRIES_DEFAULT; priv->autoconnect_blocked_reason = NM_DEVICE_STATE_REASON_NONE; diff --git a/src/settings/nm-settings-connection.h b/src/settings/nm-settings-connection.h index 8e29adc2a1..32a8128550 100644 --- a/src/settings/nm-settings-connection.h +++ b/src/settings/nm-settings-connection.h @@ -141,10 +141,10 @@ void nm_settings_connection_read_and_fill_timestamp (NMSettingsConnection *conne GSList *nm_settings_connection_get_seen_bssids (NMSettingsConnection *connection); gboolean nm_settings_connection_has_seen_bssid (NMSettingsConnection *connection, - const guint8 *bssid); + const char *bssid); void nm_settings_connection_add_seen_bssid (NMSettingsConnection *connection, - const guint8 *seen_bssid); + const char *seen_bssid); void nm_settings_connection_read_and_fill_seen_bssids (NMSettingsConnection *connection); diff --git a/src/settings/nm-settings.c b/src/settings/nm-settings.c index 5499f43bb8..2957a21004 100644 --- a/src/settings/nm-settings.c +++ b/src/settings/nm-settings.c @@ -1472,12 +1472,12 @@ have_connection_for_device (NMSettings *self, NMDevice *device) gpointer data; NMSettingConnection *s_con; NMSettingWired *s_wired; - const GByteArray *setting_mac; - const char *hwaddr; + const char *setting_hwaddr; + const char *device_hwaddr; g_return_val_if_fail (NM_IS_SETTINGS (self), FALSE); - hwaddr = nm_device_get_hw_address (device); + device_hwaddr = nm_device_get_hw_address (device); /* Find a wired connection locked to the given MAC address, if any */ g_hash_table_iter_init (&iter, priv->connections); @@ -1505,10 +1505,10 @@ have_connection_for_device (NMSettings *self, NMDevice *device) g_assert (s_wired != NULL); - setting_mac = nm_setting_wired_get_mac_address (s_wired); - if (setting_mac && hwaddr) { + setting_hwaddr = nm_setting_wired_get_mac_address (s_wired); + if (setting_hwaddr) { /* A connection mac-locked to this device */ - if (nm_utils_hwaddr_matches (setting_mac->data, setting_mac->len, hwaddr, -1)) + if (nm_utils_hwaddr_matches (setting_hwaddr, -1, device_hwaddr, -1)) return TRUE; } else { /* A connection that applies to any wired device */ diff --git a/src/settings/plugins/ibft/reader.c b/src/settings/plugins/ibft/reader.c index 908ba69016..d5db7c70b4 100644 --- a/src/settings/plugins/ibft/reader.c +++ b/src/settings/plugins/ibft/reader.c @@ -489,29 +489,26 @@ wired_setting_add_from_block (const GPtrArray *block, GError **error) { NMSetting *s_wired = NULL; - const char *hwaddr_str = NULL; - GByteArray *hwaddr; + const char *hwaddr = NULL; g_assert (block); g_assert (connection); - if (!parse_ibft_config (block, NULL, ISCSI_HWADDR_TAG, &hwaddr_str, NULL)) { + if (!parse_ibft_config (block, NULL, ISCSI_HWADDR_TAG, &hwaddr, NULL)) { g_set_error_literal (error, IBFT_PLUGIN_ERROR, 0, "iBFT: malformed iscsiadm record: missing " ISCSI_HWADDR_TAG); return FALSE; } - hwaddr = nm_utils_hwaddr_atoba (hwaddr_str, ETH_ALEN); - if (!hwaddr) { + if (!nm_utils_hwaddr_valid (hwaddr, ETH_ALEN)) { g_set_error (error, IBFT_PLUGIN_ERROR, 0, "iBFT: malformed iscsiadm record: invalid " ISCSI_HWADDR_TAG " '%s'.", - hwaddr_str); + hwaddr); return FALSE; } s_wired = nm_setting_wired_new (); g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, hwaddr, NULL); - g_byte_array_unref (hwaddr); nm_connection_add_setting (connection, s_wired); return TRUE; diff --git a/src/settings/plugins/ibft/tests/test-ibft.c b/src/settings/plugins/ibft/tests/test-ibft.c index 185e0f690b..1fe2be27c0 100644 --- a/src/settings/plugins/ibft/tests/test-ibft.c +++ b/src/settings/plugins/ibft/tests/test-ibft.c @@ -79,7 +79,7 @@ test_read_ibft_dhcp (void) NMSettingWired *s_wired; NMSettingIP4Config *s_ip4; GError *error = NULL; - const GByteArray *array; + const char *mac_address; const char *expected_mac_address = "00:33:21:98:b9:f1"; GPtrArray *block; @@ -103,9 +103,9 @@ test_read_ibft_dhcp (void) /* ===== WIRED SETTING ===== */ s_wired = nm_connection_get_setting_wired (connection); g_assert (s_wired); - array = nm_setting_wired_get_mac_address (s_wired); - g_assert (array); - nmtst_assert_hwaddr_equals (array->data, array->len, expected_mac_address); + mac_address = nm_setting_wired_get_mac_address (s_wired); + g_assert (mac_address); + g_assert (nm_utils_hwaddr_matches (mac_address, -1, expected_mac_address, -1)); g_assert_cmpint (nm_setting_wired_get_mtu (s_wired), ==, 0); /* ===== IPv4 SETTING ===== */ @@ -124,7 +124,7 @@ test_read_ibft_static (void) NMSettingWired *s_wired; NMSettingIP4Config *s_ip4; GError *error = NULL; - const GByteArray *array; + const char *mac_address; const char *expected_mac_address = "00:33:21:98:b9:f0"; NMIP4Address *ip4_addr; GPtrArray *block; @@ -149,9 +149,9 @@ test_read_ibft_static (void) /* ===== WIRED SETTING ===== */ s_wired = nm_connection_get_setting_wired (connection); g_assert (s_wired); - array = nm_setting_wired_get_mac_address (s_wired); - g_assert (array); - nmtst_assert_hwaddr_equals (array->data, array->len, expected_mac_address); + mac_address = nm_setting_wired_get_mac_address (s_wired); + g_assert (mac_address); + g_assert (nm_utils_hwaddr_matches (mac_address, -1, expected_mac_address, -1)); g_assert_cmpint (nm_setting_wired_get_mtu (s_wired), ==, 0); /* ===== IPv4 SETTING ===== */ @@ -224,7 +224,7 @@ test_read_ibft_vlan (void) NMSettingWired *s_wired; NMSettingVlan *s_vlan; NMSettingIP4Config *s_ip4; - const GByteArray *array; + const char *mac_address; const char *expected_mac_address = "00:33:21:98:b9:f0"; NMIP4Address *ip4_addr; GError *error = NULL; @@ -243,9 +243,9 @@ test_read_ibft_vlan (void) /* ===== WIRED SETTING ===== */ s_wired = nm_connection_get_setting_wired (connection); g_assert (s_wired); - array = nm_setting_wired_get_mac_address (s_wired); - g_assert (array); - nmtst_assert_hwaddr_equals (array->data, array->len, expected_mac_address); + mac_address = nm_setting_wired_get_mac_address (s_wired); + g_assert (mac_address); + g_assert (nm_utils_hwaddr_matches (mac_address, -1, expected_mac_address, -1)); /* ===== VLAN SETTING ===== */ s_vlan = nm_connection_get_setting_vlan (connection); diff --git a/src/settings/plugins/ifcfg-rh/reader.c b/src/settings/plugins/ifcfg-rh/reader.c index 4a8a686733..95ea7c2dea 100644 --- a/src/settings/plugins/ifcfg-rh/reader.c +++ b/src/settings/plugins/ifcfg-rh/reader.c @@ -244,36 +244,6 @@ make_connection_setting (const char *file, return NM_SETTING (s_con); } -static gboolean -read_mac_address (shvarFile *ifcfg, const char *key, gsize len, - GByteArray **array, GError **error) -{ - char *value = NULL; - - g_return_val_if_fail (ifcfg != NULL, FALSE); - g_return_val_if_fail (array != NULL, FALSE); - g_return_val_if_fail (*array == NULL, FALSE); - if (error) - g_return_val_if_fail (*error == NULL, FALSE); - - value = svGetValue (ifcfg, key, FALSE); - if (!value || !strlen (value)) { - g_free (value); - return TRUE; - } - - *array = nm_utils_hwaddr_atoba (value, len); - if (!*array) { - g_set_error (error, IFCFG_PLUGIN_ERROR, 0, - "%s: the MAC address '%s' was invalid.", key, value); - g_free (value); - return FALSE; - } - - g_free (value); - return TRUE; -} - /* Returns TRUE on missing address or valid address */ static gboolean read_ip4_address (shvarFile *ifcfg, @@ -3282,29 +3252,22 @@ make_wireless_setting (shvarFile *ifcfg, NMSettingWireless *s_wireless; GByteArray *array = NULL; GSList *macaddr_blacklist = NULL; - char *value; + char *value = NULL; s_wireless = NM_SETTING_WIRELESS (nm_setting_wireless_new ()); - if (read_mac_address (ifcfg, "HWADDR", ETH_ALEN, &array, error)) { - if (array) { - g_object_set (s_wireless, NM_SETTING_WIRELESS_MAC_ADDRESS, array, NULL); - g_byte_array_free (array, TRUE); - } - } else { - g_object_unref (s_wireless); - return NULL; + value = svGetValue (ifcfg, "HWADDR", FALSE); + if (value) { + value = g_strstrip (value); + g_object_set (s_wireless, NM_SETTING_WIRELESS_MAC_ADDRESS, value, NULL); + g_free (value); } - array = NULL; - if (read_mac_address (ifcfg, "MACADDR", ETH_ALEN, &array, error)) { - if (array) { - g_object_set (s_wireless, NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, array, NULL); - g_byte_array_free (array, TRUE); - } - } else { - PARSE_WARNING ("%s", (*error)->message); - g_clear_error (error); + value = svGetValue (ifcfg, "MACADDR", FALSE); + if (value) { + value = g_strstrip (value); + g_object_set (s_wireless, NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, value, NULL); + g_free (value); } value = svGetValue (ifcfg, "HWADDR_BLACKLIST", FALSE); @@ -3415,18 +3378,8 @@ make_wireless_setting (shvarFile *ifcfg, value = svGetValue (ifcfg, "BSSID", FALSE); if (value) { - GByteArray *bssid; - - bssid = nm_utils_hwaddr_atoba (value, ETH_ALEN); - if (!bssid) { - g_set_error (error, IFCFG_PLUGIN_ERROR, 0, - "Invalid BSSID '%s'", value); - g_free (value); - goto error; - } - - g_object_set (s_wireless, NM_SETTING_WIRELESS_BSSID, bssid, NULL); - g_byte_array_free (bssid, TRUE); + value = g_strstrip (value); + g_object_set (s_wireless, NM_SETTING_WIRELESS_BSSID, value, NULL); g_free (value); } @@ -3557,7 +3510,6 @@ make_wired_setting (shvarFile *ifcfg, NMSettingWired *s_wired; char *value = NULL; int mtu; - GByteArray *mac = NULL; GSList *macaddr_blacklist = NULL; char *nettype; @@ -3575,14 +3527,11 @@ make_wired_setting (shvarFile *ifcfg, g_free (value); } - if (read_mac_address (ifcfg, "HWADDR", ETH_ALEN, &mac, error)) { - if (mac) { - g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, mac, NULL); - g_byte_array_free (mac, TRUE); - } - } else { - g_object_unref (s_wired); - return NULL; + value = svGetValue (ifcfg, "HWADDR", FALSE); + if (value) { + value = g_strstrip (value); + g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, value, NULL); + g_free (value); } value = svGetValue (ifcfg, "SUBCHANNELS", FALSE); @@ -3666,15 +3615,11 @@ make_wired_setting (shvarFile *ifcfg, } g_free (value); - mac = NULL; - if (read_mac_address (ifcfg, "MACADDR", ETH_ALEN, &mac, error)) { - if (mac) { - g_object_set (s_wired, NM_SETTING_WIRED_CLONED_MAC_ADDRESS, mac, NULL); - g_byte_array_free (mac, TRUE); - } - } else { - PARSE_WARNING ("%s", (*error)->message); - g_clear_error (error); + value = svGetValue (ifcfg, "MACADDR", FALSE); + if (value) { + value = g_strstrip (value); + g_object_set (s_wired, NM_SETTING_WIRED_CLONED_MAC_ADDRESS, value, NULL); + g_free (value); } value = svGetValue (ifcfg, "HWADDR_BLACKLIST", FALSE); @@ -3834,7 +3779,6 @@ make_infiniband_setting (shvarFile *ifcfg, { NMSettingInfiniband *s_infiniband; char *value = NULL; - GByteArray *mac = NULL; int mtu; s_infiniband = NM_SETTING_INFINIBAND (nm_setting_infiniband_new ()); @@ -3851,14 +3795,11 @@ make_infiniband_setting (shvarFile *ifcfg, g_free (value); } - if (read_mac_address (ifcfg, "HWADDR", INFINIBAND_ALEN, &mac, error)) { - if (mac) { - g_object_set (s_infiniband, NM_SETTING_INFINIBAND_MAC_ADDRESS, mac, NULL); - g_byte_array_free (mac, TRUE); - } - } else { - g_object_unref (s_infiniband); - return NULL; + value = svGetValue (ifcfg, "HWADDR", FALSE); + if (value) { + value = g_strstrip (value); + g_object_set (s_infiniband, NM_SETTING_INFINIBAND_MAC_ADDRESS, value, NULL); + g_free (value); } if (svTrueValue (ifcfg, "CONNECTED_MODE", FALSE)) @@ -4221,7 +4162,6 @@ make_bridge_setting (shvarFile *ifcfg, guint32 u; gboolean stp = FALSE; gboolean stp_set = FALSE; - GByteArray *array = NULL; s_bridge = NM_SETTING_BRIDGE (nm_setting_bridge_new ()); @@ -4232,14 +4172,11 @@ make_bridge_setting (shvarFile *ifcfg, } g_free (value); - if (read_mac_address (ifcfg, "MACADDR", ETH_ALEN, &array, error)) { - if (array) { - g_object_set (s_bridge, NM_SETTING_BRIDGE_MAC_ADDRESS, array, NULL); - g_byte_array_free (array, TRUE); - } - } else { - PARSE_WARNING ("%s", (*error)->message); - g_clear_error (error); + value = svGetValue (ifcfg, "MACADDR", FALSE); + if (value) { + value = g_strstrip (value); + g_object_set (s_bridge, NM_SETTING_BRIDGE_MAC_ADDRESS, value, NULL); + g_free (value); } value = svGetValue (ifcfg, "STP", FALSE); diff --git a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c index 467ac3b453..d557ed9c7f 100644 --- a/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c +++ b/src/settings/plugins/ifcfg-rh/tests/test-ifcfg-rh.c @@ -186,7 +186,7 @@ test_read_basic (void) NMSettingIP4Config *s_ip4; NMSettingIP6Config *s_ip6; GError *error = NULL; - const GByteArray *array; + const char *mac; char expected_mac_address[ETH_ALEN] = { 0x00, 0x16, 0x41, 0x11, 0x22, 0x33 }; const char *expected_id = "System test-minimal"; guint64 expected_timestamp = 0; @@ -218,10 +218,9 @@ test_read_basic (void) g_assert_cmpint (nm_setting_wired_get_mtu (s_wired), ==, 0); /* MAC address */ - array = nm_setting_wired_get_mac_address (s_wired); - g_assert (array); - g_assert_cmpint (array->len, ==, ETH_ALEN); - g_assert (memcmp (array->data, &expected_mac_address[0], ETH_ALEN) == 0); + mac = nm_setting_wired_get_mac_address (s_wired); + g_assert (mac); + g_assert (nm_utils_hwaddr_matches (mac, -1, expected_mac_address, ETH_ALEN)); /* ===== IPv4 SETTING ===== */ s_ip4 = nm_connection_get_setting_ip4_config (connection); @@ -246,7 +245,7 @@ test_read_variables_corner_cases (void) NMSettingWired *s_wired; NMSettingIP4Config *s_ip4; GError *error = NULL; - const GByteArray *array; + const char *mac; char expected_mac_address[ETH_ALEN] = { 0x00, 0x16, 0x41, 0x11, 0x22, 0x33 }; const char *expected_zone = "'"; const char *expected_id = "\""; @@ -275,10 +274,9 @@ test_read_variables_corner_cases (void) g_assert_cmpint (nm_setting_wired_get_mtu (s_wired), ==, 0); /* MAC address */ - array = nm_setting_wired_get_mac_address (s_wired); - g_assert (array); - g_assert_cmpint (array->len, ==, ETH_ALEN); - g_assert (memcmp (array->data, &expected_mac_address[0], ETH_ALEN) == 0); + mac = nm_setting_wired_get_mac_address (s_wired); + g_assert (mac); + g_assert (nm_utils_hwaddr_matches (mac, -1, expected_mac_address, ETH_ALEN)); /* ===== IPv4 SETTING ===== */ s_ip4 = nm_connection_get_setting_ip4_config (connection); @@ -396,7 +394,7 @@ test_read_wired_static (const char *file, NMSettingIP6Config *s_ip6; char *unmanaged = NULL; GError *error = NULL; - const GByteArray *array; + const char *mac; char expected_mac_address[ETH_ALEN] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0xee }; const char *expected_dns1 = "4.2.2.1"; const char *expected_dns2 = "4.2.2.2"; @@ -432,10 +430,9 @@ test_read_wired_static (const char *file, g_assert_cmpint (nm_setting_wired_get_mtu (s_wired), ==, 1492); /* MAC address */ - array = nm_setting_wired_get_mac_address (s_wired); - g_assert (array); - g_assert_cmpint (array->len, ==, ETH_ALEN); - g_assert (memcmp (array->data, &expected_mac_address[0], ETH_ALEN) == 0); + mac = nm_setting_wired_get_mac_address (s_wired); + g_assert (mac); + g_assert (nm_utils_hwaddr_matches (mac, -1, expected_mac_address, ETH_ALEN)); /* ===== IPv4 SETTING ===== */ s_ip4 = nm_connection_get_setting_ip4_config (connection); @@ -552,7 +549,7 @@ test_read_wired_dhcp (void) char *route6file = NULL; gboolean ignore_error = FALSE; GError *error = NULL; - const GByteArray *array; + const char *mac; char expected_mac_address[ETH_ALEN] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0xee }; const char *tmp; const char *expected_id = "System test-wired-dhcp"; @@ -623,18 +620,13 @@ test_read_wired_dhcp (void) NM_SETTING_WIRED_SETTING_NAME); /* MAC address */ - array = nm_setting_wired_get_mac_address (s_wired); - ASSERT (array != NULL, + mac = nm_setting_wired_get_mac_address (s_wired); + ASSERT (mac != NULL, "wired-dhcp-verify-wired", "failed to verify %s: missing %s / %s key", TEST_IFCFG_WIRED_DHCP, NM_SETTING_WIRED_SETTING_NAME, NM_SETTING_WIRED_MAC_ADDRESS); - ASSERT (array->len == ETH_ALEN, - "wired-dhcp-verify-wired", "failed to verify %s: unexpected %s / %s key value length", - TEST_IFCFG_WIRED_DHCP, - NM_SETTING_WIRED_SETTING_NAME, - NM_SETTING_WIRED_MAC_ADDRESS); - ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0, + ASSERT (nm_utils_hwaddr_matches (mac, -1, expected_mac_address, sizeof (expected_mac_address)), "wired-dhcp-verify-wired", "failed to verify %s: unexpected %s / %s key value", TEST_IFCFG_WIRED_DHCP, NM_SETTING_WIRED_SETTING_NAME, @@ -2843,6 +2835,7 @@ test_read_wifi_open (void) GError *error = NULL; const char *tmp; const GByteArray *array; + const char *mac; char expected_mac_address[ETH_ALEN] = { 0x00, 0x16, 0x41, 0x11, 0x22, 0x33 }; const char *expected_id = "System blahblah (test-wifi-open)"; guint64 expected_timestamp = 0; @@ -2914,18 +2907,13 @@ test_read_wifi_open (void) NM_SETTING_WIRELESS_SETTING_NAME); /* MAC address */ - array = nm_setting_wireless_get_mac_address (s_wireless); - ASSERT (array != NULL, + mac = nm_setting_wireless_get_mac_address (s_wireless); + ASSERT (mac != NULL, "wifi-open-verify-wireless", "failed to verify %s: missing %s / %s key", TEST_IFCFG_WIFI_OPEN, NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_WIRELESS_MAC_ADDRESS); - ASSERT (array->len == ETH_ALEN, - "wifi-open-verify-wireless", "failed to verify %s: unexpected %s / %s key value length", - TEST_IFCFG_WIFI_OPEN, - NM_SETTING_WIRELESS_SETTING_NAME, - NM_SETTING_WIRELESS_MAC_ADDRESS); - ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0, + ASSERT (nm_utils_hwaddr_matches (mac, -1, expected_mac_address, sizeof (expected_mac_address)), "wifi-open-verify-wireless", "failed to verify %s: unexpected %s / %s key value", TEST_IFCFG_WIFI_OPEN, NM_SETTING_WIRELESS_SETTING_NAME, @@ -3309,6 +3297,7 @@ test_read_wifi_wep (void) GError *error = NULL; const char *tmp; const GByteArray *array; + const char *mac; char expected_mac_address[ETH_ALEN] = { 0x00, 0x16, 0x41, 0x11, 0x22, 0x33 }; const char *expected_id = "System blahblah (test-wifi-wep)"; guint64 expected_timestamp = 0; @@ -3382,18 +3371,13 @@ test_read_wifi_wep (void) NM_SETTING_WIRELESS_SETTING_NAME); /* MAC address */ - array = nm_setting_wireless_get_mac_address (s_wireless); - ASSERT (array != NULL, + mac = nm_setting_wireless_get_mac_address (s_wireless); + ASSERT (mac != NULL, "wifi-wep-verify-wireless", "failed to verify %s: missing %s / %s key", TEST_IFCFG_WIFI_WEP, NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_WIRELESS_MAC_ADDRESS); - ASSERT (array->len == ETH_ALEN, - "wifi-wep-verify-wireless", "failed to verify %s: unexpected %s / %s key value length", - TEST_IFCFG_WIFI_WEP, - NM_SETTING_WIRELESS_SETTING_NAME, - NM_SETTING_WIRELESS_MAC_ADDRESS); - ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0, + ASSERT (nm_utils_hwaddr_matches (mac, -1, expected_mac_address, sizeof (expected_mac_address)), "wifi-wep-verify-wireless", "failed to verify %s: unexpected %s / %s key value", TEST_IFCFG_WIFI_WEP, NM_SETTING_WIRELESS_SETTING_NAME, @@ -4376,6 +4360,7 @@ test_read_wifi_wpa_psk (void) GError *error = NULL; const char *tmp; const GByteArray *array; + const char *mac; char expected_mac_address[ETH_ALEN] = { 0x00, 0x16, 0x41, 0x11, 0x22, 0x33 }; const char *expected_id = "System blahblah (test-wifi-wpa-psk)"; guint64 expected_timestamp = 0; @@ -4458,18 +4443,13 @@ test_read_wifi_wpa_psk (void) NM_SETTING_WIRELESS_SETTING_NAME); /* MAC address */ - array = nm_setting_wireless_get_mac_address (s_wireless); - ASSERT (array != NULL, + mac = nm_setting_wireless_get_mac_address (s_wireless); + ASSERT (mac != NULL, "wifi-wpa-psk-verify-wireless", "failed to verify %s: missing %s / %s key", TEST_IFCFG_WIFI_WPA_PSK, NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_WIRELESS_MAC_ADDRESS); - ASSERT (array->len == ETH_ALEN, - "wifi-wpa-psk-verify-wireless", "failed to verify %s: unexpected %s / %s key value length", - TEST_IFCFG_WIFI_WPA_PSK, - NM_SETTING_WIRELESS_SETTING_NAME, - NM_SETTING_WIRELESS_MAC_ADDRESS); - ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0, + ASSERT (nm_utils_hwaddr_matches (mac, -1, expected_mac_address, sizeof (expected_mac_address)), "wifi-wpa-psk-verify-wireless", "failed to verify %s: unexpected %s / %s key value", TEST_IFCFG_WIFI_WPA_PSK, NM_SETTING_WIRELESS_SETTING_NAME, @@ -5866,7 +5846,7 @@ test_read_wired_qeth_static (void) GError *error = NULL; const char *tmp; const char *expected_id = "System test-wired-qeth-static"; - const GByteArray *array; + const char *mac; const char *expected_channel0 = "0.0.0600"; const char *expected_channel1 = "0.0.0601"; const char *expected_channel2 = "0.0.0602"; @@ -5920,8 +5900,8 @@ test_read_wired_qeth_static (void) NM_SETTING_WIRED_SETTING_NAME); /* MAC address */ - array = nm_setting_wired_get_mac_address (s_wired); - ASSERT (array == NULL, + mac = nm_setting_wired_get_mac_address (s_wired); + ASSERT (mac == NULL, "wired-qeth-static-verify-wired", "failed to verify %s: unexpected %s / %s key", TEST_IFCFG_WIRED_QETH_STATIC, NM_SETTING_WIRED_SETTING_NAME, @@ -6354,8 +6334,7 @@ test_write_wired_static (void) NMSettingWired *s_wired; NMSettingIP4Config *s_ip4, *reread_s_ip4; NMSettingIP6Config *s_ip6, *reread_s_ip6; - static unsigned char tmpmac[] = { 0x31, 0x33, 0x33, 0x37, 0xbe, 0xcd }; - GByteArray *mac; + static const char *mac = "31:33:33:37:be:cd"; guint32 mtu = 1492; char *uuid; const guint32 ip1 = htonl (0x01010103); @@ -6414,14 +6393,10 @@ test_write_wired_static (void) s_wired = (NMSettingWired *) nm_setting_wired_new (); nm_connection_add_setting (connection, NM_SETTING (s_wired)); - mac = g_byte_array_sized_new (sizeof (tmpmac)); - g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac)); - g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, mac, NM_SETTING_WIRED_MTU, mtu, NULL); - g_byte_array_free (mac, TRUE); /* IP4 setting */ s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new (); @@ -6797,8 +6772,7 @@ test_write_wired_static_ip6_only (void) NMSettingWired *s_wired; NMSettingIP4Config *s_ip4; NMSettingIP6Config *s_ip6; - static unsigned char tmpmac[] = { 0x31, 0x33, 0x33, 0x37, 0xbe, 0xcd }; - GByteArray *mac; + static const char *mac = "31:33:33:37:be:cd"; char *uuid; struct in6_addr ip6; struct in6_addr dns6; @@ -6834,10 +6808,7 @@ test_write_wired_static_ip6_only (void) s_wired = (NMSettingWired *) nm_setting_wired_new (); nm_connection_add_setting (connection, NM_SETTING (s_wired)); - mac = g_byte_array_sized_new (sizeof (tmpmac)); - g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac)); g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, mac, NULL); - g_byte_array_free (mac, TRUE); /* IP4 setting */ s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new (); @@ -6934,8 +6905,7 @@ test_write_wired_static_ip6_only_gw (gconstpointer user_data) NMSettingWired *s_wired; NMSettingIP4Config *s_ip4; NMSettingIP6Config *s_ip6; - static unsigned char tmpmac[] = { 0x31, 0x33, 0x33, 0x37, 0xbe, 0xcd }; - GByteArray *mac; + static const char *mac = "31:33:33:37:be:cd"; char *uuid; struct in6_addr ip6; struct in6_addr dns6; @@ -6983,10 +6953,7 @@ test_write_wired_static_ip6_only_gw (gconstpointer user_data) s_wired = (NMSettingWired *) nm_setting_wired_new (); nm_connection_add_setting (connection, NM_SETTING (s_wired)); - mac = g_byte_array_sized_new (sizeof (tmpmac)); - g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac)); g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, mac, NULL); - g_byte_array_free (mac, TRUE); /* IP4 setting */ s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new (); @@ -7234,8 +7201,7 @@ test_write_wired_static_routes (void) NMSettingWired *s_wired; NMSettingIP4Config *s_ip4; NMSettingIP6Config *s_ip6; - static unsigned char tmpmac[] = { 0x31, 0x33, 0x33, 0x37, 0xbe, 0xcd }; - GByteArray *mac; + static const char *mac = "31:33:33:37:be:cd"; guint32 mtu = 1492; char *uuid; const guint32 ip1 = htonl (0x01010103); @@ -7280,14 +7246,10 @@ test_write_wired_static_routes (void) s_wired = (NMSettingWired *) nm_setting_wired_new (); nm_connection_add_setting (connection, NM_SETTING (s_wired)); - mac = g_byte_array_sized_new (sizeof (tmpmac)); - g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac)); - g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, mac, NM_SETTING_WIRED_MTU, mtu, NULL); - g_byte_array_free (mac, TRUE); /* IP4 setting */ s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new (); @@ -8128,11 +8090,9 @@ test_write_wifi_open (void) gboolean ignore_error = FALSE; GByteArray *ssid; const unsigned char ssid_data[] = { 0x54, 0x65, 0x73, 0x74, 0x20, 0x53, 0x53, 0x49, 0x44 }; - GByteArray *bssid; - const unsigned char bssid_data[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 }; + const char *bssid = "11:22:33:44:55:66"; guint32 channel = 9, mtu = 1345; - GByteArray *mac; - const unsigned char mac_data[] = { 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff }; + const char *mac = "aa:bb:cc:dd:ee:ff"; shvarFile *ifcfg; char *tmp; @@ -8157,10 +8117,6 @@ test_write_wifi_open (void) ssid = g_byte_array_sized_new (sizeof (ssid_data)); g_byte_array_append (ssid, ssid_data, sizeof (ssid_data)); - bssid = g_byte_array_sized_new (sizeof (bssid_data)); - g_byte_array_append (bssid, bssid_data, sizeof (bssid_data)); - mac = g_byte_array_sized_new (sizeof (mac_data)); - g_byte_array_append (mac, mac_data, sizeof (mac_data)); g_object_set (s_wifi, NM_SETTING_WIRELESS_SSID, ssid, @@ -8173,8 +8129,6 @@ test_write_wifi_open (void) NULL); g_byte_array_free (ssid, TRUE); - g_byte_array_free (bssid, TRUE); - g_byte_array_free (mac, TRUE); /* IP4 setting */ s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new (); @@ -11448,7 +11402,7 @@ test_read_bridge_main (void) { NMConnection *connection; NMSettingBridge *s_bridge; - const GByteArray *array; + const char *mac; char expected_mac_address[ETH_ALEN] = { 0x00, 0x16, 0x41, 0x11, 0x22, 0x33 }; char *unmanaged = NULL; char *keyfile = NULL; @@ -11482,11 +11436,11 @@ test_read_bridge_main (void) g_assert_cmpuint (nm_setting_bridge_get_hello_time (s_bridge), ==, 7); g_assert_cmpuint (nm_setting_bridge_get_max_age (s_bridge), ==, 39); g_assert_cmpuint (nm_setting_bridge_get_ageing_time (s_bridge), ==, 235352); + /* MAC address */ - array = nm_setting_bridge_get_mac_address (s_bridge); - g_assert (array); - g_assert_cmpint (array->len, ==, ETH_ALEN); - g_assert (memcmp (array->data, &expected_mac_address[0], ETH_ALEN) == 0); + mac = nm_setting_bridge_get_mac_address (s_bridge); + g_assert (mac); + g_assert (nm_utils_hwaddr_matches (mac, -1, expected_mac_address, ETH_ALEN)); g_free (unmanaged); g_free (keyfile); @@ -11509,8 +11463,7 @@ test_write_bridge_main (void) const guint32 gw = htonl (0x01010101); const guint32 prefix = 24; NMIP4Address *addr; - static unsigned char bridge_mac[] = { 0x31, 0x33, 0x33, 0x37, 0xbe, 0xcd }; - GByteArray *mac_array; + static const char *mac = "31:33:33:37:be:cd"; gboolean success; GError *error = NULL; char *testfile = NULL; @@ -11543,12 +11496,9 @@ test_write_bridge_main (void) g_assert (s_bridge); nm_connection_add_setting (connection, NM_SETTING (s_bridge)); - mac_array = g_byte_array_sized_new (sizeof (bridge_mac)); - g_byte_array_append (mac_array, bridge_mac, sizeof (bridge_mac)); g_object_set (s_bridge, - NM_SETTING_BRIDGE_MAC_ADDRESS, mac_array, + NM_SETTING_BRIDGE_MAC_ADDRESS, mac, NULL); - g_byte_array_free (mac_array, TRUE); /* IP4 setting */ s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new (); @@ -11672,8 +11622,7 @@ test_write_bridge_component (void) NMSettingConnection *s_con; NMSettingWired *s_wired; NMSetting *s_port; - static unsigned char tmpmac[] = { 0x31, 0x33, 0x33, 0x37, 0xbe, 0xcd }; - GByteArray *mac; + static const char *mac = "31:33:33:37:be:cd"; guint32 mtu = 1492; char *uuid; gboolean success; @@ -11709,14 +11658,10 @@ test_write_bridge_component (void) g_assert (s_wired); nm_connection_add_setting (connection, NM_SETTING (s_wired)); - mac = g_byte_array_sized_new (sizeof (tmpmac)); - g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac)); - g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, mac, NM_SETTING_WIRED_MTU, mtu, NULL); - g_byte_array_free (mac, TRUE); /* Bridge port */ s_port = nm_setting_bridge_port_new (); @@ -12468,8 +12413,7 @@ test_write_bond_slave (void) NMConnection *reread; NMSettingConnection *s_con; NMSettingWired *s_wired; - static unsigned char tmpmac[] = { 0x31, 0x33, 0x33, 0x37, 0xbe, 0xcd }; - GByteArray *mac; + static const char *mac = "31:33:33:37:be:cd"; guint32 mtu = 1492; char *uuid; gboolean success; @@ -12502,14 +12446,10 @@ test_write_bond_slave (void) s_wired = (NMSettingWired *) nm_setting_wired_new (); nm_connection_add_setting (connection, NM_SETTING (s_wired)); - mac = g_byte_array_sized_new (sizeof (tmpmac)); - g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac)); - g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, mac, NM_SETTING_WIRED_MTU, mtu, NULL); - g_byte_array_free (mac, TRUE); ASSERT (nm_connection_verify (connection, &error) == TRUE, "bond-slave-write", "failed to verify connection: %s", @@ -12576,7 +12516,7 @@ test_read_infiniband (void) char *route6file = NULL; gboolean ignore_error = FALSE; GError *error = NULL; - const GByteArray *array; + const char *mac; char expected_mac_address[INFINIBAND_ALEN] = { 0x80, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x00, 0x11, 0x22 }; const char *transport_mode; @@ -12607,18 +12547,13 @@ test_read_infiniband (void) NM_SETTING_INFINIBAND_SETTING_NAME); /* MAC address */ - array = nm_setting_infiniband_get_mac_address (s_infiniband); - ASSERT (array != NULL, + mac = nm_setting_infiniband_get_mac_address (s_infiniband); + ASSERT (mac != NULL, "infiniband-verify-infiniband", "failed to verify %s: missing %s / %s key", TEST_IFCFG_INFINIBAND, NM_SETTING_INFINIBAND_SETTING_NAME, NM_SETTING_INFINIBAND_MAC_ADDRESS); - ASSERT (array->len == INFINIBAND_ALEN, - "infiniband-verify-infiniband", "failed to verify %s: unexpected %s / %s key value length", - TEST_IFCFG_INFINIBAND, - NM_SETTING_INFINIBAND_SETTING_NAME, - NM_SETTING_INFINIBAND_MAC_ADDRESS); - ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0, + ASSERT (nm_utils_hwaddr_matches (mac, -1, expected_mac_address, sizeof (expected_mac_address)), "infiniband-verify-infiniband", "failed to verify %s: unexpected %s / %s key value", TEST_IFCFG_INFINIBAND, NM_SETTING_INFINIBAND_SETTING_NAME, @@ -12653,8 +12588,7 @@ test_write_infiniband (void) NMSettingInfiniband *s_infiniband; NMSettingIP4Config *s_ip4; NMSettingIP6Config *s_ip6; - unsigned char tmpmac[INFINIBAND_ALEN] = { 0x80, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x00, 0x11, 0x22 }; - GByteArray *mac; + const char *mac = "80:00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:00:11:22"; guint32 mtu = 65520; char *uuid; const guint32 ip1 = htonl (0x01010103); @@ -12689,15 +12623,11 @@ test_write_infiniband (void) s_infiniband = (NMSettingInfiniband *) nm_setting_infiniband_new (); nm_connection_add_setting (connection, NM_SETTING (s_infiniband)); - mac = g_byte_array_sized_new (sizeof (tmpmac)); - g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac)); - g_object_set (s_infiniband, NM_SETTING_INFINIBAND_MAC_ADDRESS, mac, NM_SETTING_INFINIBAND_MTU, mtu, NM_SETTING_INFINIBAND_TRANSPORT_MODE, "connected", NULL); - g_byte_array_free (mac, TRUE); /* IP4 setting */ s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new (); @@ -12830,11 +12760,7 @@ test_write_bond_slave_ib (void) NMConnection *reread; NMSettingConnection *s_con; NMSettingInfiniband *s_infiniband; - static unsigned char tmpmac[] = { - 0x80, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, - 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x00, 0x11, 0x22 - }; - GByteArray *mac; + static const char *mac = "80:00:11:22:33:44:55:66:77:88:99:aa:bb:cc:dd:ee:ff:00:11:22"; char *uuid; gboolean success; GError *error = NULL; @@ -12866,15 +12792,11 @@ test_write_bond_slave_ib (void) s_infiniband = (NMSettingInfiniband *) nm_setting_infiniband_new (); nm_connection_add_setting (connection, NM_SETTING (s_infiniband)); - mac = g_byte_array_sized_new (sizeof (tmpmac)); - g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac)); - g_object_set (s_infiniband, NM_SETTING_INFINIBAND_MAC_ADDRESS, mac, NM_SETTING_INFINIBAND_MTU, 2044, NM_SETTING_INFINIBAND_TRANSPORT_MODE, "datagram", NULL); - g_byte_array_free (mac, TRUE); ASSERT (nm_connection_verify (connection, &error) == TRUE, "bond-slave-write-ib", "failed to verify connection: %s", diff --git a/src/settings/plugins/ifcfg-rh/writer.c b/src/settings/plugins/ifcfg-rh/writer.c index c0a93909fc..0ddaca528e 100644 --- a/src/settings/plugins/ifcfg-rh/writer.c +++ b/src/settings/plugins/ifcfg-rh/writer.c @@ -51,13 +51,6 @@ static void -svSetValue_free (shvarFile *s, const char *key, char *value, gboolean verbatim) -{ - svSetValue (s, key, value, verbatim); - g_free (value); -} - -static void save_secret_flags (shvarFile *ifcfg, const char *key, NMSettingSecretFlags flags) @@ -807,8 +800,9 @@ write_wireless_setting (NMConnection *connection, { NMSettingWireless *s_wireless; char *tmp, *tmp2; - const GByteArray *ssid, *device_mac, *cloned_mac, *bssid; - const char *mode; + const GByteArray *ssid; + const char *mode, *bssid; + const char *device_mac, *cloned_mac; char buf[33]; guint32 mtu, chan, i; gboolean adhoc = FALSE, hex_ssid = FALSE; @@ -821,19 +815,11 @@ write_wireless_setting (NMConnection *connection, return FALSE; } - svSetValue (ifcfg, "HWADDR", NULL, FALSE); device_mac = nm_setting_wireless_get_mac_address (s_wireless); - if (device_mac) { - svSetValue_free (ifcfg, "HWADDR", - nm_utils_hwaddr_ntoa (device_mac->data, device_mac->len), FALSE); - } + svSetValue (ifcfg, "HWADDR", device_mac, FALSE); - svSetValue (ifcfg, "MACADDR", NULL, FALSE); cloned_mac = nm_setting_wireless_get_cloned_mac_address (s_wireless); - if (cloned_mac) { - svSetValue_free (ifcfg, "MACADDR", - nm_utils_hwaddr_ntoa (cloned_mac->data, cloned_mac->len), FALSE); - } + svSetValue (ifcfg, "MACADDR", cloned_mac, FALSE); svSetValue (ifcfg, "HWADDR_BLACKLIST", NULL, FALSE); macaddr_blacklist = nm_setting_wireless_get_mac_address_blacklist (s_wireless); @@ -931,12 +917,8 @@ write_wireless_setting (NMConnection *connection, g_free (tmp); } - svSetValue (ifcfg, "BSSID", NULL, FALSE); bssid = nm_setting_wireless_get_bssid (s_wireless); - if (bssid) { - svSetValue_free (ifcfg, "BSSID", - nm_utils_hwaddr_ntoa (bssid->data, bssid->len), FALSE); - } + svSetValue (ifcfg, "BSSID", bssid, FALSE); /* Ensure DEFAULTKEY and SECURITYMODE are cleared unless there's security; * otherwise there's no way to detect WEP vs. open when WEP keys aren't @@ -993,9 +975,8 @@ static gboolean write_infiniband_setting (NMConnection *connection, shvarFile *ifcfg, GError **error) { NMSettingInfiniband *s_infiniband; - const GByteArray *mac; char *tmp; - const char *transport_mode, *parent; + const char *mac, *transport_mode, *parent; guint32 mtu; int p_key; @@ -1006,13 +987,8 @@ write_infiniband_setting (NMConnection *connection, shvarFile *ifcfg, GError **e return FALSE; } - svSetValue (ifcfg, "HWADDR", NULL, FALSE); mac = nm_setting_infiniband_get_mac_address (s_infiniband); - if (mac) { - tmp = nm_utils_hwaddr_ntoa (mac->data, mac->len); - svSetValue (ifcfg, "HWADDR", tmp, FALSE); - g_free (tmp); - } + svSetValue (ifcfg, "HWADDR", mac, FALSE); svSetValue (ifcfg, "MTU", NULL, FALSE); mtu = nm_setting_infiniband_get_mtu (s_infiniband); @@ -1048,7 +1024,7 @@ static gboolean write_wired_setting (NMConnection *connection, shvarFile *ifcfg, GError **error) { NMSettingWired *s_wired; - const GByteArray *device_mac, *cloned_mac; + const char *device_mac, *cloned_mac; char *tmp; const char *nettype, *portname, *ctcprot, *s390_key, *s390_val; guint32 mtu, num_opts, i; @@ -1063,19 +1039,11 @@ write_wired_setting (NMConnection *connection, shvarFile *ifcfg, GError **error) return FALSE; } - svSetValue (ifcfg, "HWADDR", NULL, FALSE); device_mac = nm_setting_wired_get_mac_address (s_wired); - if (device_mac) { - svSetValue_free (ifcfg, "HWADDR", - nm_utils_hwaddr_ntoa (device_mac->data, device_mac->len), FALSE); - } + svSetValue (ifcfg, "HWADDR", device_mac, FALSE); - svSetValue (ifcfg, "MACADDR", NULL, FALSE); cloned_mac = nm_setting_wired_get_cloned_mac_address (s_wired); - if (cloned_mac) { - svSetValue_free (ifcfg, "MACADDR", - nm_utils_hwaddr_ntoa (cloned_mac->data, cloned_mac->len), FALSE); - } + svSetValue (ifcfg, "MACADDR", cloned_mac, FALSE); svSetValue (ifcfg, "HWADDR_BLACKLIST", NULL, FALSE); macaddr_blacklist = nm_setting_wired_get_mac_address_blacklist (s_wired); @@ -1245,24 +1213,18 @@ write_vlan_setting (NMConnection *connection, shvarFile *ifcfg, gboolean *wired, s_wired = nm_connection_get_setting_wired (connection); if (s_wired) { - const GByteArray *device_mac, *cloned_mac; + const char *device_mac, *cloned_mac; guint32 mtu; *wired = TRUE; device_mac = nm_setting_wired_get_mac_address (s_wired); - if (device_mac) { - tmp = nm_utils_hwaddr_ntoa (device_mac->data, device_mac->len); - svSetValue (ifcfg, "HWADDR", tmp, FALSE); - g_free (tmp); - } + if (device_mac) + svSetValue (ifcfg, "HWADDR", device_mac, FALSE); cloned_mac = nm_setting_wired_get_cloned_mac_address (s_wired); - if (cloned_mac) { - tmp = nm_utils_hwaddr_ntoa (cloned_mac->data, device_mac->len); - svSetValue (ifcfg, "MACADDR", tmp, FALSE); - g_free (tmp); - } + if (cloned_mac) + svSetValue (ifcfg, "MACADDR", cloned_mac, FALSE); mtu = nm_setting_wired_get_mtu (s_wired); if (mtu) { @@ -1378,7 +1340,7 @@ write_bridge_setting (NMConnection *connection, shvarFile *ifcfg, GError **error const char *iface; guint32 i; GString *opts; - const GByteArray *mac; + const char *mac; char *s; s_bridge = nm_connection_get_setting_bridge (connection); @@ -1398,11 +1360,9 @@ write_bridge_setting (NMConnection *connection, shvarFile *ifcfg, GError **error svSetValue (ifcfg, "BRIDGING_OPTS", NULL, FALSE); svSetValue (ifcfg, "STP", "no", FALSE); svSetValue (ifcfg, "DELAY", NULL, FALSE); - svSetValue (ifcfg, "MACADDR", NULL, FALSE); mac = nm_setting_bridge_get_mac_address (s_bridge); - if (mac) - svSetValue_free (ifcfg, "MACADDR", nm_utils_hwaddr_ntoa (mac->data, mac->len), FALSE); + svSetValue (ifcfg, "MACADDR", mac, FALSE); /* Bridge options */ opts = g_string_sized_new (32); diff --git a/src/settings/plugins/ifnet/connection_parser.c b/src/settings/plugins/ifnet/connection_parser.c index a9383a65fb..adfafdaa02 100644 --- a/src/settings/plugins/ifnet/connection_parser.c +++ b/src/settings/plugins/ifnet/connection_parser.c @@ -498,20 +498,20 @@ guess_connection_type (const char *conn_name) /* Reading mac address for setting connection option. * Unmanaged device mac address is required by NetworkManager*/ static gboolean -read_mac_address (const char *conn_name, GByteArray **array, GError **error) +read_mac_address (const char *conn_name, const char **mac, GError **error) { const char *value = ifnet_get_data (conn_name, "mac"); if (!value || !strlen (value)) return TRUE; - *array = nm_utils_hwaddr_atoba (value, ETH_ALEN); - if (!*array) { + if (!nm_utils_hwaddr_valid (value, ETH_ALEN)) { g_set_error (error, ifnet_plugin_error_quark (), 0, - "The MAC address '%s' was invalid.", value); + "The MAC address '%s' was invalid.", value); return FALSE; } + *mac = value; return TRUE; } @@ -520,7 +520,7 @@ make_wired_connection_setting (NMConnection *connection, const char *conn_name, GError **error) { - GByteArray *mac = NULL; + const char *mac = NULL; NMSettingWired *s_wired = NULL; const char *value = NULL; @@ -544,7 +544,6 @@ make_wired_connection_setting (NMConnection *connection, if (mac) { g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, mac, NULL); - g_byte_array_free (mac, TRUE); } } else { g_object_unref (s_wired); @@ -881,7 +880,8 @@ make_wireless_connection_setting (const char *conn_name, NMSetting8021x **s_8021x, GError **error) { - GByteArray *array, *mac = NULL; + GByteArray *array; + const char *mac = NULL; NMSettingWireless *wireless_setting = NULL; gboolean adhoc = FALSE; const char *value; @@ -903,8 +903,6 @@ make_wireless_connection_setting (const char *conn_name, g_object_set (wireless_setting, NM_SETTING_WIRELESS_MAC_ADDRESS, mac, NULL); - g_byte_array_free (mac, TRUE); - } } else { g_object_unref (wireless_setting); @@ -979,18 +977,14 @@ make_wireless_connection_setting (const char *conn_name, /* BSSID setting */ value = wpa_get_value (conn_name, "bssid"); if (value) { - GByteArray *bssid; - - bssid = nm_utils_hwaddr_atoba (value, ETH_ALEN); - if (!bssid) { + if (!nm_utils_hwaddr_valid (value, ETH_ALEN)) { g_set_error (error, ifnet_plugin_error_quark (), 0, "Invalid BSSID '%s'", value); goto error; } g_object_set (wireless_setting, NM_SETTING_WIRELESS_BSSID, - bssid, NULL); - g_byte_array_free (bssid, TRUE); + value, NULL); } @@ -2230,8 +2224,8 @@ write_wireless_setting (NMConnection *connection, GError **error) { NMSettingWireless *s_wireless; - const GByteArray *ssid, *mac, *bssid; - const char *mode; + const GByteArray *ssid; + const char *mac, *bssid, *mode; char buf[33]; guint32 mtu, i; gboolean adhoc = FALSE, hex_ssid = FALSE; @@ -2291,11 +2285,8 @@ write_wireless_setting (NMConnection *connection, ifnet_set_data (ssid_str, "mac", NULL); mac = nm_setting_wireless_get_mac_address (s_wireless); - if (mac) { - tmp = nm_utils_hwaddr_ntoa (mac->data, mac->len); - ifnet_set_data (ssid_str, "mac", tmp); - g_free (tmp); - } + if (mac) + ifnet_set_data (ssid_str, "mac", mac); ifnet_set_data (ssid_str, "mtu", NULL); mtu = nm_setting_wireless_get_mtu (s_wireless); @@ -2320,11 +2311,8 @@ write_wireless_setting (NMConnection *connection, wpa_set_data (ssid_str, "bssid", NULL); bssid = nm_setting_wireless_get_bssid (s_wireless); - if (bssid) { - tmp = nm_utils_hwaddr_ntoa (bssid->data, bssid->len); - wpa_set_data (ssid_str, "bssid", tmp); - g_free (tmp); - } + if (bssid) + wpa_set_data (ssid_str, "bssid", bssid); if (nm_connection_get_setting_wireless_security (connection)) { if (!write_wireless_security_setting @@ -2345,7 +2333,7 @@ write_wired_setting (NMConnection *connection, GError **error) { NMSettingWired *s_wired; - const GByteArray *mac; + const char *mac; char *tmp; guint32 mtu; @@ -2359,11 +2347,8 @@ write_wired_setting (NMConnection *connection, ifnet_set_data (conn_name, "mac", NULL); mac = nm_setting_wired_get_mac_address (s_wired); - if (mac) { - tmp = nm_utils_hwaddr_ntoa (mac->data, mac->len); - ifnet_set_data (conn_name, "mac", tmp); - g_free (tmp); - } + if (mac) + ifnet_set_data (conn_name, "mac", mac); ifnet_set_data (conn_name, "mtu", NULL); mtu = nm_setting_wired_get_mtu (s_wired); diff --git a/src/settings/plugins/ifupdown/plugin.c b/src/settings/plugins/ifupdown/plugin.c index ba15c3e3fa..20928c6826 100644 --- a/src/settings/plugins/ifupdown/plugin.c +++ b/src/settings/plugins/ifupdown/plugin.c @@ -185,7 +185,6 @@ bind_device_to_connection (SCPluginIfupdown *self, GUdevDevice *device, NMIfupdownConnection *exported) { - GByteArray *mac_address; NMSettingWired *s_wired; NMSettingWireless *s_wifi; const char *iface, *address; @@ -202,8 +201,7 @@ bind_device_to_connection (SCPluginIfupdown *self, return; } - mac_address = nm_utils_hwaddr_atoba (address, ETH_ALEN); - if (!mac_address) { + if (!nm_utils_hwaddr_valid (address, ETH_ALEN)) { nm_log_warn (LOGD_SETTINGS, "failed to parse MAC address '%s' for %s", address, iface); return; @@ -213,12 +211,11 @@ bind_device_to_connection (SCPluginIfupdown *self, s_wifi = nm_connection_get_setting_wireless (NM_CONNECTION (exported)); if (s_wired) { nm_log_info (LOGD_SETTINGS, "locking wired connection setting"); - g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, mac_address, NULL); + g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, address, NULL); } else if (s_wifi) { nm_log_info (LOGD_SETTINGS, "locking wireless connection setting"); - g_object_set (s_wifi, NM_SETTING_WIRELESS_MAC_ADDRESS, mac_address, NULL); + g_object_set (s_wifi, NM_SETTING_WIRELESS_MAC_ADDRESS, address, NULL); } - g_byte_array_free (mac_address, TRUE); nm_settings_connection_commit_changes (NM_SETTINGS_CONNECTION (exported), NULL, NULL); } diff --git a/src/settings/plugins/keyfile/reader.c b/src/settings/plugins/keyfile/reader.c index 098d7706d3..5bfcca0b49 100644 --- a/src/settings/plugins/keyfile/reader.c +++ b/src/settings/plugins/keyfile/reader.c @@ -534,7 +534,7 @@ static void mac_address_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, const char *keyfile_path, gsize enforce_length) { const char *setting_name = nm_setting_get_name (setting); - char *tmp_string = NULL, *p; + char *tmp_string = NULL, *p, *mac_str; gint *tmp_list; GByteArray *array = NULL; gsize length; @@ -587,13 +587,16 @@ mac_address_parser (NMSetting *setting, const char *key, GKeyFile *keyfile, cons g_free (tmp_list); } - if (array) { - g_object_set (setting, key, array, NULL); - g_byte_array_free (array, TRUE); - } else { + if (!array) { nm_log_warn (LOGD_SETTINGS, "%s: ignoring invalid MAC address for %s / %s", __func__, setting_name, key); + return; } + + mac_str = nm_utils_hwaddr_ntoa (array->data, array->len); + g_object_set (setting, key, mac_str, NULL); + g_free (mac_str); + g_byte_array_free (array, TRUE); } static void diff --git a/src/settings/plugins/keyfile/tests/test-keyfile.c b/src/settings/plugins/keyfile/tests/test-keyfile.c index 3d5fce5367..cba3e67bb2 100644 --- a/src/settings/plugins/keyfile/tests/test-keyfile.c +++ b/src/settings/plugins/keyfile/tests/test-keyfile.c @@ -139,7 +139,7 @@ test_read_valid_wired_connection (void) NMSettingIP4Config *s_ip4; NMSettingIP6Config *s_ip6; GError *error = NULL; - const GByteArray *array; + const char *mac; char expected_mac_address[ETH_ALEN] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55 }; const char *tmp; const char *expected_id = "Test Wired Connection"; @@ -250,18 +250,13 @@ test_read_valid_wired_connection (void) NM_SETTING_WIRED_SETTING_NAME); /* MAC address */ - array = nm_setting_wired_get_mac_address (s_wired); - ASSERT (array != NULL, + mac = nm_setting_wired_get_mac_address (s_wired); + ASSERT (mac != NULL, "connection-verify-wired", "failed to verify %s: missing %s / %s key", TEST_WIRED_FILE, NM_SETTING_WIRED_SETTING_NAME, NM_SETTING_WIRED_MAC_ADDRESS); - ASSERT (array->len == ETH_ALEN, - "connection-verify-wired", "failed to verify %s: unexpected %s / %s key value length", - TEST_WIRED_FILE, - NM_SETTING_WIRED_SETTING_NAME, - NM_SETTING_WIRED_MAC_ADDRESS); - ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0, + ASSERT (nm_utils_hwaddr_matches (mac, -1, expected_mac_address, sizeof (expected_mac_address)), "connection-verify-wired", "failed to verify %s: unexpected %s / %s key value", TEST_WIRED_FILE, NM_SETTING_WIRED_SETTING_NAME, @@ -539,8 +534,7 @@ test_write_wired_connection (void) NMSettingIP4Config *s_ip4; NMSettingIP6Config *s_ip6; char *uuid; - GByteArray *mac; - unsigned char tmpmac[] = { 0x99, 0x88, 0x77, 0x66, 0x55, 0x44 }; + const char *mac = "99:88:77:66:55:44"; gboolean success; NMConnection *reread; char *testfile = NULL; @@ -599,13 +593,10 @@ test_write_wired_connection (void) s_wired = NM_SETTING_WIRED (nm_setting_wired_new ()); nm_connection_add_setting (connection, NM_SETTING (s_wired)); - mac = g_byte_array_sized_new (ETH_ALEN); - g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac)); g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, mac, NM_SETTING_WIRED_MTU, 900, NULL); - g_byte_array_free (mac, TRUE); /* IP4 setting */ @@ -899,7 +890,7 @@ test_read_wired_mac_case (void) NMSettingConnection *s_con; NMSettingWired *s_wired; GError *error = NULL; - const GByteArray *array; + const char *mac; char expected_mac_address[ETH_ALEN] = { 0x00, 0x11, 0xaa, 0xbb, 0xcc, 0x55 }; const char *tmp; const char *expected_id = "Test Wired Connection MAC Case"; @@ -962,18 +953,13 @@ test_read_wired_mac_case (void) NM_SETTING_WIRED_SETTING_NAME); /* MAC address */ - array = nm_setting_wired_get_mac_address (s_wired); - ASSERT (array != NULL, + mac = nm_setting_wired_get_mac_address (s_wired); + ASSERT (mac != NULL, "connection-verify-wired", "failed to verify %s: missing %s / %s key", TEST_WIRED_MAC_CASE_FILE, NM_SETTING_WIRED_SETTING_NAME, NM_SETTING_WIRED_MAC_ADDRESS); - ASSERT (array->len == ETH_ALEN, - "connection-verify-wired", "failed to verify %s: unexpected %s / %s key value length", - TEST_WIRED_MAC_CASE_FILE, - NM_SETTING_WIRED_SETTING_NAME, - NM_SETTING_WIRED_MAC_ADDRESS); - ASSERT (memcmp (array->data, &expected_mac_address[0], sizeof (expected_mac_address)) == 0, + ASSERT (nm_utils_hwaddr_matches (mac, -1, expected_mac_address, sizeof (expected_mac_address)), "connection-verify-wired", "failed to verify %s: unexpected %s / %s key value", TEST_WIRED_MAC_CASE_FILE, NM_SETTING_WIRED_SETTING_NAME, @@ -991,7 +977,7 @@ test_read_mac_old_format (void) NMSettingWired *s_wired; GError *error = NULL; gboolean success; - const GByteArray *array; + const char *mac; char expected_mac[ETH_ALEN] = { 0x00, 0x11, 0xaa, 0xbb, 0xcc, 0x55 }; char expected_cloned_mac[ETH_ALEN] = { 0x00, 0x16, 0xaa, 0xbb, 0xcc, 0xfe }; @@ -1007,16 +993,14 @@ test_read_mac_old_format (void) g_assert (s_wired); /* MAC address */ - array = nm_setting_wired_get_mac_address (s_wired); - g_assert (array); - g_assert_cmpint (array->len, ==, ETH_ALEN); - g_assert (memcmp (array->data, expected_mac, ETH_ALEN) == 0); + mac = nm_setting_wired_get_mac_address (s_wired); + g_assert (mac); + g_assert (nm_utils_hwaddr_matches (mac, -1, expected_mac, ETH_ALEN)); /* Cloned MAC address */ - array = nm_setting_wired_get_cloned_mac_address (s_wired); - g_assert (array); - g_assert_cmpint (array->len, ==, ETH_ALEN); - g_assert (memcmp (array->data, expected_cloned_mac, ETH_ALEN) == 0); + mac = nm_setting_wired_get_cloned_mac_address (s_wired); + g_assert (mac); + g_assert (nm_utils_hwaddr_matches (mac, -1, expected_cloned_mac, ETH_ALEN)); g_object_unref (connection); } @@ -1030,7 +1014,7 @@ test_read_mac_ib_old_format (void) NMSettingInfiniband *s_ib; GError *error = NULL; gboolean success; - const GByteArray *array; + const char *mac; guint8 expected_mac[INFINIBAND_ALEN] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x01, 0x12, 0x23, 0x34, 0x45, 0x56, 0x67, 0x78, 0x89, 0x90 }; @@ -1047,10 +1031,9 @@ test_read_mac_ib_old_format (void) g_assert (s_ib); /* MAC address */ - array = nm_setting_infiniband_get_mac_address (s_ib); - g_assert (array); - g_assert_cmpint (array->len, ==, INFINIBAND_ALEN); - g_assert_cmpint (memcmp (array->data, expected_mac, sizeof (expected_mac)), ==, 0); + mac = nm_setting_infiniband_get_mac_address (s_ib); + g_assert (mac); + g_assert (nm_utils_hwaddr_matches (mac, -1, expected_mac, sizeof (expected_mac))); g_object_unref (connection); } @@ -1063,8 +1046,8 @@ test_read_valid_wireless_connection (void) NMSettingWireless *s_wireless; NMSettingIP4Config *s_ip4; GError *error = NULL; - const GByteArray *array; - char expected_bssid[ETH_ALEN] = { 0x00, 0x1a, 0x33, 0x44, 0x99, 0x82 }; + const char *bssid; + const guint8 expected_bssid[ETH_ALEN] = { 0x00, 0x1a, 0x33, 0x44, 0x99, 0x82 }; const char *tmp; const char *expected_id = "Test Wireless Connection"; const char *expected_uuid = "2f962388-e5f3-45af-a62c-ac220b8f7baa"; @@ -1136,18 +1119,13 @@ test_read_valid_wireless_connection (void) NM_SETTING_WIRED_SETTING_NAME); /* BSSID */ - array = nm_setting_wireless_get_bssid (s_wireless); - ASSERT (array != NULL, + bssid = nm_setting_wireless_get_bssid (s_wireless); + ASSERT (bssid != NULL, "connection-verify-wireless", "failed to verify %s: missing %s / %s key", TEST_WIRELESS_FILE, NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_WIRELESS_BSSID); - ASSERT (array->len == ETH_ALEN, - "connection-verify-wireless", "failed to verify %s: unexpected %s / %s key value length", - TEST_WIRELESS_FILE, - NM_SETTING_WIRELESS_SETTING_NAME, - NM_SETTING_WIRELESS_BSSID); - ASSERT (memcmp (array->data, &expected_bssid[0], sizeof (expected_bssid)) == 0, + ASSERT (nm_utils_hwaddr_matches (bssid, -1, expected_bssid, sizeof (expected_bssid)), "connection-verify-wireless", "failed to verify %s: unexpected %s / %s key value", TEST_WIRELESS_FILE, NM_SETTING_WIRELESS_SETTING_NAME, @@ -1181,8 +1159,7 @@ test_write_wireless_connection (void) NMSettingIP4Config *s_ip4; NMSettingIP6Config *s_ip6; char *uuid; - GByteArray *bssid; - unsigned char tmpbssid[] = { 0xaa, 0xb9, 0xa1, 0x74, 0x55, 0x44 }; + const char *bssid = "aa:b9:a1:74:55:44"; GByteArray *ssid; unsigned char tmpssid[] = { 0x31, 0x33, 0x33, 0x37 }; gboolean success; @@ -1215,9 +1192,6 @@ test_write_wireless_connection (void) s_wireless = NM_SETTING_WIRELESS (nm_setting_wireless_new ()); nm_connection_add_setting (connection, NM_SETTING (s_wireless)); - bssid = g_byte_array_sized_new (ETH_ALEN); - g_byte_array_append (bssid, &tmpbssid[0], sizeof (tmpbssid)); - ssid = g_byte_array_sized_new (sizeof (tmpssid)); g_byte_array_append (ssid, &tmpssid[0], sizeof (tmpssid)); @@ -1227,7 +1201,6 @@ test_write_wireless_connection (void) NM_SETTING_WIRED_MTU, 1000, NULL); - g_byte_array_free (bssid, TRUE); g_byte_array_free (ssid, TRUE); /* IP4 setting */ @@ -1775,8 +1748,8 @@ test_read_bt_dun_connection (void) NMSettingSerial *s_serial; NMSettingGsm *s_gsm; GError *error = NULL; - const GByteArray *array; - char expected_bdaddr[ETH_ALEN] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55 }; + const char *bdaddr; + const guint8 expected_bdaddr[ETH_ALEN] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55 }; const char *tmp; const char *expected_id = "AT&T Data Connect BT"; const char *expected_uuid = "089130ab-ce28-46e4-ad77-d44869b03d19"; @@ -1834,18 +1807,13 @@ test_read_bt_dun_connection (void) NM_SETTING_WIRED_SETTING_NAME); /* BDADDR */ - array = nm_setting_bluetooth_get_bdaddr (s_bluetooth); - ASSERT (array != NULL, + bdaddr = nm_setting_bluetooth_get_bdaddr (s_bluetooth); + ASSERT (bdaddr != NULL, "connection-verify-bt", "failed to verify %s: missing %s / %s key", TEST_BT_DUN_FILE, NM_SETTING_BLUETOOTH_SETTING_NAME, NM_SETTING_BLUETOOTH_BDADDR); - ASSERT (array->len == ETH_ALEN, - "connection-verify-bt", "failed to verify %s: unexpected %s / %s key value length", - TEST_BT_DUN_FILE, - NM_SETTING_BLUETOOTH_SETTING_NAME, - NM_SETTING_BLUETOOTH_BDADDR); - ASSERT (memcmp (array->data, &expected_bdaddr[0], sizeof (expected_bdaddr)) == 0, + ASSERT (nm_utils_hwaddr_matches (bdaddr, -1, expected_bdaddr, sizeof (expected_bdaddr)), "connection-verify-bt", "failed to verify %s: unexpected %s / %s key value", TEST_BT_DUN_FILE, NM_SETTING_BLUETOOTH_SETTING_NAME, @@ -1931,8 +1899,7 @@ test_write_bt_dun_connection (void) NMSettingIP4Config *s_ip4; NMSettingGsm *s_gsm; char *uuid; - GByteArray *bdaddr; - unsigned char tmpbdaddr[] = { 0xaa, 0xb9, 0xa1, 0x74, 0x55, 0x44 }; + const char *bdaddr = "aa:b9:a1:74:55:44"; gboolean success; NMConnection *reread; char *testfile = NULL; @@ -1963,16 +1930,11 @@ test_write_bt_dun_connection (void) s_bt = NM_SETTING_BLUETOOTH (nm_setting_bluetooth_new ()); nm_connection_add_setting (connection, NM_SETTING (s_bt)); - bdaddr = g_byte_array_sized_new (ETH_ALEN); - g_byte_array_append (bdaddr, &tmpbdaddr[0], sizeof (tmpbdaddr)); - g_object_set (s_bt, NM_SETTING_BLUETOOTH_BDADDR, bdaddr, NM_SETTING_BLUETOOTH_TYPE, NM_SETTING_BLUETOOTH_TYPE_DUN, NULL); - g_byte_array_free (bdaddr, TRUE); - /* IP4 setting */ s_ip4 = NM_SETTING_IP4_CONFIG (nm_setting_ip4_config_new ()); @@ -2776,7 +2738,7 @@ test_read_infiniband_connection (void) NMSettingConnection *s_con; NMSettingInfiniband *s_ib; GError *error = NULL; - const GByteArray *array; + const char *mac; guint8 expected_mac[INFINIBAND_ALEN] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x01, 0x12, 0x23, 0x34, 0x45, 0x56, 0x67, 0x78, 0x89, 0x90 }; @@ -2801,10 +2763,9 @@ test_read_infiniband_connection (void) s_ib = nm_connection_get_setting_infiniband (connection); g_assert (s_ib); - array = nm_setting_infiniband_get_mac_address (s_ib); - g_assert (array); - g_assert_cmpint (array->len, ==, INFINIBAND_ALEN); - g_assert_cmpint (memcmp (array->data, expected_mac, sizeof (expected_mac)), ==, 0); + mac = nm_setting_infiniband_get_mac_address (s_ib); + g_assert (mac); + g_assert (nm_utils_hwaddr_matches (mac, -1, expected_mac, sizeof (expected_mac))); g_object_unref (connection); } @@ -2818,10 +2779,7 @@ test_write_infiniband_connection (void) NMSettingIP4Config *s_ip4; NMSettingIP6Config *s_ip6; char *uuid; - GByteArray *mac; - guint8 tmpmac[] = { 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0xab, 0xbc, - 0xcd, 0xde, 0xef, 0xf0, 0x0a, 0x1b, 0x2c, 0x3d, 0x4e, 0x5f, 0x6f, 0xba - }; + const char *mac = "99:88:77:66:55:44:ab:bc:cd:de:ef:f0:0a:1b:2c:3d:4e:5f:6f:ba"; gboolean success; NMConnection *reread; char *testfile = NULL; @@ -2852,14 +2810,11 @@ test_write_infiniband_connection (void) g_assert (s_ib); nm_connection_add_setting (connection, NM_SETTING (s_ib)); - mac = g_byte_array_sized_new (sizeof (tmpmac)); - g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac)); g_object_set (s_ib, NM_SETTING_INFINIBAND_MAC_ADDRESS, mac, NM_SETTING_INFINIBAND_MTU, 900, NM_SETTING_INFINIBAND_TRANSPORT_MODE, "datagram", NULL); - g_byte_array_free (mac, TRUE); /* IP4 setting */ s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new (); @@ -3028,7 +2983,7 @@ test_read_bridge_component (void) NMSettingConnection *s_con; NMSettingBridgePort *s_port; NMSettingWired *s_wired; - const GByteArray *array; + const char *mac; guint8 expected_mac[ETH_ALEN] = { 0x00, 0x22, 0x15, 0x59, 0x62, 0x97 }; GError *error = NULL; const char *expected_id = "Test Bridge Component"; @@ -3053,10 +3008,9 @@ test_read_bridge_component (void) /* Wired setting */ s_wired = nm_connection_get_setting_wired (connection); g_assert (s_wired); - array = nm_setting_wired_get_mac_address (s_wired); - g_assert (array); - g_assert_cmpint (array->len, ==, ETH_ALEN); - g_assert_cmpint (memcmp (array->data, expected_mac, sizeof (expected_mac)), ==, 0); + mac = nm_setting_wired_get_mac_address (s_wired); + g_assert (mac); + g_assert (nm_utils_hwaddr_matches (mac, -1, expected_mac, sizeof (expected_mac))); /* BridgePort setting */ s_port = nm_connection_get_setting_bridge_port (connection); @@ -3076,8 +3030,7 @@ test_write_bridge_component (void) NMSettingBridgePort *s_port; NMSettingWired *s_wired; char *uuid; - GByteArray *mac; - guint8 tmpmac[] = { 0x99, 0x88, 0x77, 0x66, 0x55, 0x44 }; + const char *mac = "99:88:77:66:55:44"; gboolean success; NMConnection *reread; char *testfile = NULL; @@ -3109,13 +3062,10 @@ test_write_bridge_component (void) g_assert (s_wired); nm_connection_add_setting (connection, NM_SETTING (s_wired)); - mac = g_byte_array_sized_new (ETH_ALEN); - g_byte_array_append (mac, &tmpmac[0], sizeof (tmpmac)); g_object_set (s_wired, NM_SETTING_WIRED_MAC_ADDRESS, mac, NM_SETTING_WIRED_MTU, 1300, NULL); - g_byte_array_free (mac, TRUE); /* BridgePort setting */ s_port = (NMSettingBridgePort *) nm_setting_bridge_port_new (); @@ -3154,7 +3104,7 @@ test_read_new_wired_group_name (void) { NMConnection *connection; NMSettingWired *s_wired; - const GByteArray *array; + const char *mac; guint8 expected_mac[ETH_ALEN] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55 }; GError *error = NULL; gboolean success; @@ -3171,10 +3121,9 @@ test_read_new_wired_group_name (void) g_assert (s_wired); g_assert_cmpint (nm_setting_wired_get_mtu (s_wired), ==, 1400); - array = nm_setting_wired_get_mac_address (s_wired); - g_assert (array); - g_assert_cmpint (array->len, ==, ETH_ALEN); - g_assert_cmpint (memcmp (array->data, expected_mac, sizeof (expected_mac)), ==, 0); + mac = nm_setting_wired_get_mac_address (s_wired); + g_assert (mac); + g_assert (nm_utils_hwaddr_matches (mac, -1, expected_mac, sizeof (expected_mac))); g_object_unref (connection); } diff --git a/src/settings/plugins/keyfile/writer.c b/src/settings/plugins/keyfile/writer.c index 0813290324..711271b057 100644 --- a/src/settings/plugins/keyfile/writer.c +++ b/src/settings/plugins/keyfile/writer.c @@ -403,29 +403,6 @@ ip6_route_writer (GKeyFile *file, static void -mac_address_writer (GKeyFile *file, - const char *keyfile_dir, - const char *uuid, - NMSetting *setting, - const char *key, - const GValue *value) -{ - GByteArray *array; - const char *setting_name = nm_setting_get_name (setting); - char *mac; - - g_return_if_fail (G_VALUE_HOLDS (value, DBUS_TYPE_G_UCHAR_ARRAY)); - - array = (GByteArray *) g_value_get_boxed (value); - if (!array || !array->len) - return; - - mac = nm_utils_hwaddr_ntoa (array->data, array->len); - nm_keyfile_plugin_kf_set_string (file, setting_name, key, mac); - g_free (mac); -} - -static void write_hash_of_string (GKeyFile *file, NMSetting *setting, const char *key, @@ -773,9 +750,6 @@ static KeyWriter key_writers[] = { { NM_SETTING_CONNECTION_SETTING_NAME, NM_SETTING_CONNECTION_TYPE, setting_alias_writer }, - { NM_SETTING_BRIDGE_SETTING_NAME, - NM_SETTING_BRIDGE_MAC_ADDRESS, - mac_address_writer }, { NM_SETTING_IP4_CONFIG_SETTING_NAME, NM_SETTING_IP4_CONFIG_ADDRESSES, ip4_addr_writer }, @@ -797,30 +771,6 @@ static KeyWriter key_writers[] = { { NM_SETTING_IP6_CONFIG_SETTING_NAME, NM_SETTING_IP6_CONFIG_DNS, ip6_dns_writer }, - { NM_SETTING_WIRED_SETTING_NAME, - NM_SETTING_WIRED_MAC_ADDRESS, - mac_address_writer }, - { NM_SETTING_WIRED_SETTING_NAME, - NM_SETTING_WIRED_CLONED_MAC_ADDRESS, - mac_address_writer }, - { NM_SETTING_WIRELESS_SETTING_NAME, - NM_SETTING_WIRELESS_MAC_ADDRESS, - mac_address_writer }, - { NM_SETTING_WIRELESS_SETTING_NAME, - NM_SETTING_WIRELESS_CLONED_MAC_ADDRESS, - mac_address_writer }, - { NM_SETTING_WIRELESS_SETTING_NAME, - NM_SETTING_WIRELESS_BSSID, - mac_address_writer }, - { NM_SETTING_BLUETOOTH_SETTING_NAME, - NM_SETTING_BLUETOOTH_BDADDR, - mac_address_writer }, - { NM_SETTING_INFINIBAND_SETTING_NAME, - NM_SETTING_INFINIBAND_MAC_ADDRESS, - mac_address_writer }, - { NM_SETTING_WIMAX_SETTING_NAME, - NM_SETTING_WIMAX_MAC_ADDRESS, - mac_address_writer }, { NM_SETTING_WIRELESS_SETTING_NAME, NM_SETTING_WIRELESS_SSID, ssid_writer }, diff --git a/src/supplicant-manager/nm-supplicant-config.c b/src/supplicant-manager/nm-supplicant-config.c index 3f7fd721c0..6a207ce2e9 100644 --- a/src/supplicant-manager/nm-supplicant-config.c +++ b/src/supplicant-manager/nm-supplicant-config.c @@ -327,9 +327,6 @@ nm_supplicant_config_get_blobs (NMSupplicantConfig * self) return NM_SUPPLICANT_CONFIG_GET_PRIVATE (self)->blobs; } -#define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x" -#define MAC_ARG(x) ((guint8*)(x))[0],((guint8*)(x))[1],((guint8*)(x))[2],((guint8*)(x))[3],((guint8*)(x))[4],((guint8*)(x))[5] - #define TWO_GHZ_FREQS "2412,2417,2422,2427,2432,2437,2442,2447,2452,2457,2462,2467,2472,2484" #define FIVE_GHZ_FREQS "4915,4920,4925,4935,4940,4945,4960,4980,5035,5040,5045,5055,5060,5080," \ "5170,5180,5190,5200,5210,5220,5230,5240,5260,5280,5300,5320,5500," \ @@ -345,7 +342,8 @@ nm_supplicant_config_add_setting_wireless (NMSupplicantConfig * self, NMSupplicantConfigPrivate *priv; gboolean is_adhoc, is_ap; const char *mode, *band; - const GByteArray *id; + const GByteArray *ssid; + const char *bssid; g_return_val_if_fail (NM_IS_SUPPLICANT_CONFIG (self), FALSE); g_return_val_if_fail (setting != NULL, FALSE); @@ -360,8 +358,8 @@ nm_supplicant_config_add_setting_wireless (NMSupplicantConfig * self, else priv->ap_scan = 1; - id = nm_setting_wireless_get_ssid (setting); - if (!nm_supplicant_config_add_option (self, "ssid", (char *) id->data, id->len, FALSE)) { + ssid = nm_setting_wireless_get_ssid (setting); + if (!nm_supplicant_config_add_option (self, "ssid", (char *) ssid->data, ssid->len, FALSE)) { nm_log_warn (LOGD_SUPPLICANT, "Error adding SSID to supplicant config."); return FALSE; } @@ -400,19 +398,14 @@ nm_supplicant_config_add_setting_wireless (NMSupplicantConfig * self, return FALSE; } - id = nm_setting_wireless_get_bssid (setting); - if (id && id->len) { - char *str_bssid; - - str_bssid = g_strdup_printf (MAC_FMT, MAC_ARG (id->data)); + bssid = nm_setting_wireless_get_bssid (setting); + if (bssid) { if (!nm_supplicant_config_add_option (self, "bssid", - str_bssid, strlen (str_bssid), + bssid, strlen (bssid), FALSE)) { - g_free (str_bssid); nm_log_warn (LOGD_SUPPLICANT, "Error adding BSSID to supplicant config."); return FALSE; } - g_free (str_bssid); } band = nm_setting_wireless_get_band (setting); diff --git a/src/supplicant-manager/tests/test-supplicant-config.c b/src/supplicant-manager/tests/test-supplicant-config.c index 73f199cf5b..fd316e6ba0 100644 --- a/src/supplicant-manager/tests/test-supplicant-config.c +++ b/src/supplicant-manager/tests/test-supplicant-config.c @@ -122,8 +122,6 @@ test_wifi_open (void) GError *error = NULL; GByteArray *ssid; const unsigned char ssid_data[] = { 0x54, 0x65, 0x73, 0x74, 0x20, 0x53, 0x53, 0x49, 0x44 }; - GByteArray *bssid; - const unsigned char bssid_data[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 }; const char *bssid_str = "11:22:33:44:55:66"; connection = nm_simple_connection_new (); @@ -147,18 +145,15 @@ test_wifi_open (void) ssid = g_byte_array_sized_new (sizeof (ssid_data)); g_byte_array_append (ssid, ssid_data, sizeof (ssid_data)); - bssid = g_byte_array_sized_new (sizeof (bssid_data)); - g_byte_array_append (bssid, bssid_data, sizeof (bssid_data)); g_object_set (s_wifi, NM_SETTING_WIRELESS_SSID, ssid, - NM_SETTING_WIRELESS_BSSID, bssid, + NM_SETTING_WIRELESS_BSSID, bssid_str, NM_SETTING_WIRELESS_MODE, "infrastructure", NM_SETTING_WIRELESS_BAND, "bg", NULL); g_byte_array_free (ssid, TRUE); - g_byte_array_free (bssid, TRUE); /* IP4 setting */ s_ip4 = (NMSettingIP4Config *) nm_setting_ip4_config_new (); @@ -223,8 +218,6 @@ test_wifi_wep_key (const char *detail, GError *error = NULL; GByteArray *ssid; const unsigned char ssid_data[] = { 0x54, 0x65, 0x73, 0x74, 0x20, 0x53, 0x53, 0x49, 0x44 }; - GByteArray *bssid; - const unsigned char bssid_data[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 }; const char *bssid_str = "11:22:33:44:55:66"; connection = nm_simple_connection_new (); @@ -248,18 +241,15 @@ test_wifi_wep_key (const char *detail, ssid = g_byte_array_sized_new (sizeof (ssid_data)); g_byte_array_append (ssid, ssid_data, sizeof (ssid_data)); - bssid = g_byte_array_sized_new (sizeof (bssid_data)); - g_byte_array_append (bssid, bssid_data, sizeof (bssid_data)); g_object_set (s_wifi, NM_SETTING_WIRELESS_SSID, ssid, - NM_SETTING_WIRELESS_BSSID, bssid, + NM_SETTING_WIRELESS_BSSID, bssid_str, NM_SETTING_WIRELESS_MODE, "infrastructure", NM_SETTING_WIRELESS_BAND, "bg", NULL); g_byte_array_free (ssid, TRUE); - g_byte_array_free (bssid, TRUE); /* Wifi Security setting */ s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new (); @@ -366,8 +356,6 @@ test_wifi_wpa_psk (const char *detail, GError *error = NULL; GByteArray *ssid; const unsigned char ssid_data[] = { 0x54, 0x65, 0x73, 0x74, 0x20, 0x53, 0x53, 0x49, 0x44 }; - GByteArray *bssid; - const unsigned char bssid_data[] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 }; const char *bssid_str = "11:22:33:44:55:66"; connection = nm_simple_connection_new (); @@ -391,18 +379,15 @@ test_wifi_wpa_psk (const char *detail, ssid = g_byte_array_sized_new (sizeof (ssid_data)); g_byte_array_append (ssid, ssid_data, sizeof (ssid_data)); - bssid = g_byte_array_sized_new (sizeof (bssid_data)); - g_byte_array_append (bssid, bssid_data, sizeof (bssid_data)); g_object_set (s_wifi, NM_SETTING_WIRELESS_SSID, ssid, - NM_SETTING_WIRELESS_BSSID, bssid, + NM_SETTING_WIRELESS_BSSID, bssid_str, NM_SETTING_WIRELESS_MODE, "infrastructure", NM_SETTING_WIRELESS_BAND, "bg", NULL); g_byte_array_free (ssid, TRUE); - g_byte_array_free (bssid, TRUE); /* Wifi Security setting */ s_wsec = (NMSettingWirelessSecurity *) nm_setting_wireless_security_new (); |