tags 642136 + patch thanks I agree with Joey Hess: "Available to alle users" should not be the default for new wifi connections, so that unprivileged users can connect to new networks without needing a sudo or root password, or additional policykit privileges.
The attached patch to the network-manager-applet (!) source modifies nm-applet such that a new wifi connection created through the applet belongs to the user, and not the system. If a wifi connection is to be made available to all users, this has to be done in a separate step, e.g. using nm-connection-editor. I've tested this successfully with an open and a WPA2 secured network, but I haven't had a chance to check if 802.1x networks have additional settings that need to be set to "agent owned". Florian
--- a/src/applet-device-wifi.c +++ b/src/applet-device-wifi.c @@ -393,6 +393,23 @@ } static void +mark_secret_agent_owned (NMSetting *setting, + const char *key, + const GValue *value, + GParamFlags flags, + gpointer user_data) +{ + NMSettingSecretFlags secret_flags = NM_SETTING_SECRET_FLAG_NONE; + + if (!(flags & NM_SETTING_PARAM_SECRET)) + return; + + nm_setting_get_secret_flags (setting, key, &secret_flags, NULL); + secret_flags |= NM_SETTING_SECRET_FLAG_AGENT_OWNED; + nm_setting_set_secret_flags (setting, key, secret_flags, NULL); +} + +static void _do_new_auto_connection (NMApplet *applet, NMDevice *device, NMAccessPoint *ap, @@ -462,6 +479,21 @@ nm_connection_add_setting (connection, NM_SETTING (s_8021x)); } + /* Add user to the connection's permission list and mark all secrets as + * owned by a user secret agent (as opposed to the system). + * This enables unprivileged users to add and connect to new wifi networks (#642136). + * As a consequence, new wifi connections created through nm-applet are no longer + * system-wide by default. They are owned by the individual user, and have to be + * expicitly made "available to all users", e.g. by using nm-connection-editor. + */ + if (!s_con) { + s_con = (NMSettingConnection *) nm_setting_connection_new (); + nm_connection_add_setting (connection, NM_SETTING (s_con)); + } + g_object_set (G_OBJECT (s_con), NM_SETTING_CONNECTION_PERMISSIONS, NULL, NULL); + nm_setting_connection_add_permission (s_con, "user", g_get_user_name (), NULL); + nm_connection_for_each_setting_value (connection, mark_secret_agent_owned, NULL); + /* If it's an 802.1x connection, we need more information, so pop up the * Dialog Of Doom. */