From c28850ed527ee25cc8c59cedb3290b553e4023f6 Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Sun, 2 Jan 2011 17:34:23 -0600 Subject: [PATCH] wimax: fix up WiMAX radio enable/disable and add polkit permission --- libnm-glib/nm-client.c | 3 +++ libnm-glib/nm-client.h | 3 ++- policy/org.freedesktop.NetworkManager.policy.in | 9 +++++++++ src/nm-manager-auth.h | 1 + src/nm-manager.c | 17 +++++++++++------ 5 files changed, 26 insertions(+), 7 deletions(-) diff --git a/libnm-glib/nm-client.c b/libnm-glib/nm-client.c index dcfdf074b..9dc06af26 100644 --- a/libnm-glib/nm-client.c +++ b/libnm-glib/nm-client.c @@ -330,6 +330,7 @@ register_for_property_changed (NMClient *client) #define NM_AUTH_PERMISSION_ENABLE_DISABLE_NETWORK "org.freedesktop.NetworkManager.enable-disable-network" #define NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI "org.freedesktop.NetworkManager.enable-disable-wifi" #define NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN "org.freedesktop.NetworkManager.enable-disable-wwan" +#define NM_AUTH_PERMISSION_ENABLE_DISABLE_WIMAX "org.freedesktop.NetworkManager.enable-disable-wimax" #define NM_AUTH_PERMISSION_USE_USER_CONNECTIONS "org.freedesktop.NetworkManager.use-user-connections" static NMClientPermission @@ -341,6 +342,8 @@ nm_permission_to_client (const char *nm) return NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIFI; else if (!strcmp (nm, NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN)) return NM_CLIENT_PERMISSION_ENABLE_DISABLE_WWAN; + else if (!strcmp (nm, NM_AUTH_PERMISSION_ENABLE_DISABLE_WIMAX)) + return NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIMAX; else if (!strcmp (nm, NM_AUTH_PERMISSION_USE_USER_CONNECTIONS)) return NM_CLIENT_PERMISSION_USE_USER_CONNECTIONS; return NM_CLIENT_PERMISSION_NONE; diff --git a/libnm-glib/nm-client.h b/libnm-glib/nm-client.h index 3c6f73748..4153ebcad 100644 --- a/libnm-glib/nm-client.h +++ b/libnm-glib/nm-client.h @@ -59,8 +59,9 @@ typedef enum { NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIFI = 2, NM_CLIENT_PERMISSION_ENABLE_DISABLE_WWAN = 3, NM_CLIENT_PERMISSION_USE_USER_CONNECTIONS = 4, + NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIMAX = 5, - NM_CLIENT_PERMISSION_LAST = NM_CLIENT_PERMISSION_USE_USER_CONNECTIONS + NM_CLIENT_PERMISSION_LAST = NM_CLIENT_PERMISSION_ENABLE_DISABLE_WIMAX } NMClientPermission; typedef enum { diff --git a/policy/org.freedesktop.NetworkManager.policy.in b/policy/org.freedesktop.NetworkManager.policy.in index 3e7db0588..185265885 100644 --- a/policy/org.freedesktop.NetworkManager.policy.in +++ b/policy/org.freedesktop.NetworkManager.policy.in @@ -45,6 +45,15 @@ + + <_description>Enable or disable WiMAX mobile broadband devices + <_message>System policy prevents enabling or disabling WiMAX mobile broadband devices + + no + yes + + + <_description>Allow use of user-specific connections <_message>System policy prevents use of user-specific connections diff --git a/src/nm-manager-auth.h b/src/nm-manager-auth.h index 6682f91ca..35bf270f6 100644 --- a/src/nm-manager-auth.h +++ b/src/nm-manager-auth.h @@ -31,6 +31,7 @@ #define NM_AUTH_PERMISSION_SLEEP_WAKE "org.freedesktop.NetworkManager.sleep-wake" #define NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI "org.freedesktop.NetworkManager.enable-disable-wifi" #define NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN "org.freedesktop.NetworkManager.enable-disable-wwan" +#define NM_AUTH_PERMISSION_ENABLE_DISABLE_WIMAX "org.freedesktop.NetworkManager.enable-disable-wimax" #define NM_AUTH_PERMISSION_USE_USER_CONNECTIONS "org.freedesktop.NetworkManager.use-user-connections" #define NM_AUTH_PERMISSION_NETWORK_CONTROL "org.freedesktop.NetworkManager.network-control" diff --git a/src/nm-manager.c b/src/nm-manager.c index 55e4b45ba..da47f5b1b 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -2119,8 +2119,8 @@ add_device (NMManager *self, NMDevice *device) */ } else if (NM_IS_WIMAX_DEVICE (device)) { nm_manager_rfkill_update (self, RFKILL_TYPE_WIMAX); - nm_device_interface_set_enabled (NM_DEVICE_INTERFACE (device), - priv->radio_states[RFKILL_TYPE_WIMAX].enabled); + enabled = radio_enabled_for_type (self, RFKILL_TYPE_WIMAX); + nm_device_interface_set_enabled (NM_DEVICE_INTERFACE (device), enabled); } type_desc = nm_device_get_type_desc (device); @@ -3782,6 +3782,7 @@ get_permissions_done_cb (NMAuthChain *chain, get_perm_add_result (chain, results, NM_AUTH_PERMISSION_SLEEP_WAKE); get_perm_add_result (chain, results, NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI); get_perm_add_result (chain, results, NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN); + get_perm_add_result (chain, results, NM_AUTH_PERMISSION_ENABLE_DISABLE_WIMAX); get_perm_add_result (chain, results, NM_AUTH_PERMISSION_USE_USER_CONNECTIONS); get_perm_add_result (chain, results, NM_AUTH_PERMISSION_NETWORK_CONTROL); dbus_g_method_return (context, results); @@ -3809,6 +3810,7 @@ impl_manager_get_permissions (NMManager *self, nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_SLEEP_WAKE, FALSE); nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_ENABLE_DISABLE_WIFI, FALSE); nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN, FALSE); + nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_ENABLE_DISABLE_WIMAX, FALSE); nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_USE_USER_CONNECTIONS, FALSE); nm_auth_chain_add_call (chain, NM_AUTH_PERMISSION_NETWORK_CONTROL, FALSE); } @@ -4157,6 +4159,9 @@ prop_filter (DBusConnection *connection, } else if (!strcmp (propname, "WwanEnabled")) { glib_propname = NM_MANAGER_WWAN_ENABLED; permission = NM_AUTH_PERMISSION_ENABLE_DISABLE_WWAN; + } else if (!strcmp (propname, "WimaxEnabled")) { + glib_propname = NM_MANAGER_WIMAX_ENABLED; + permission = NM_AUTH_PERMISSION_ENABLE_DISABLE_WIMAX; } else return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; @@ -4467,9 +4472,9 @@ set_property (GObject *object, guint prop_id, g_value_get_boolean (value)); break; case PROP_WIMAX_ENABLED: - manager_set_radio_enabled (NM_MANAGER (object), - &priv->radio_states[RFKILL_TYPE_WIMAX], - g_value_get_boolean (value)); + manager_radio_user_toggled (NM_MANAGER (object), + &priv->radio_states[RFKILL_TYPE_WIMAX], + g_value_get_boolean (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -4508,7 +4513,7 @@ get_property (GObject *object, guint prop_id, g_value_set_boolean (value, priv->radio_states[RFKILL_TYPE_WWAN].hw_enabled); break; case PROP_WIMAX_ENABLED: - g_value_set_boolean (value, priv->radio_states[RFKILL_TYPE_WIMAX].enabled); + g_value_set_boolean (value, radio_enabled_for_type (self, RFKILL_TYPE_WIMAX)); break; case PROP_WIMAX_HARDWARE_ENABLED: g_value_set_boolean (value, priv->radio_states[RFKILL_TYPE_WIMAX].hw_enabled);