2008-07-01 Dan Williams <dcbw@redhat.com>

Fix mobile broadband username/password issues.  NM was never requesting
	mobile broadband secrets, nor was it passing back the username and password
	if it had them.

	* marshallers/nm-marshal.list
		- Add some new types for activation request objects

	* src/nm-activation-request.c
	  src/nm-activation-request.h
		- (get_secrets_cb): pass the caller type in the signal
		- (nm_act_request_request_connection_secrets): take a caller type, so
			that GetSecrets() reply handlers know who asked for the secrets in
			the first place; use secret hints too so the settings service can
			figure out exactly what NM wants (ie, PIN or the PPP password)

	* src/ppp-manager/nm-ppp-manager.c
	  src/ppp-manager/nm-ppp-manager.h
		- (impl_ppp_manager_need_secrets): nm_connection_need_secrets() won't
			detect needed secrets when the secret could be blank, like GSM/CDMA
			passwords.  So always ask for secrets, and send a hint as to what
			secret we really want.
		- (nm_ppp_manager_update_secrets): make function more generic by making
			the device specific class figure out the username and password, and
			accept an error argument to return back over D-Bus

	* src/nm-device-wifi.c
		- (link_timeout_cb, handle_auth_or_fail): update for changes to
			nm_act_request_request_connection_secrets()
		- (real_connection_secrets_updated): update for 'caller' changes

	* src/nm-device.c
	  src/nm-device.h
		- (connection_secrets_updated_cb, connection_secrets_failed_cb): update
			for 'caller' changes

	* src/nm-device-ethernet.c
		- (real_connection_secrets_updated): update for 'caller' changes and
			move logic for getting PPPoE username and password here before
			calling nm_ppp_manager_update_secrets()
		- (link_timeout_cb, handle_auth_or_fail): update for changes to
			nm_act_request_request_connection_secrets()

	* src/nm-cdma-device.c
		- (real_connection_secrets_updated): pass username and password back
			to the PPP manager when required

	* src/nm-gsm-device.c
		- (enter_pin): send the required secret name to the settings service
		- (real_connection_secrets_updated): pass username and password back
			to the PPP manager when required



git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@3794 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
This commit is contained in:
Dan Williams
2008-07-01 20:21:31 +00:00
parent 2ed3b011d8
commit 8c79f16f5d
12 changed files with 276 additions and 65 deletions

View File

@@ -311,9 +311,9 @@ nm_act_request_class_init (NMActRequestClass *req_class)
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMActRequestClass, connection_secrets_updated),
NULL, NULL,
nm_marshal_VOID__OBJECT_POINTER,
G_TYPE_NONE, 2,
G_TYPE_OBJECT, G_TYPE_POINTER);
nm_marshal_VOID__OBJECT_POINTER_UINT,
G_TYPE_NONE, 3,
G_TYPE_OBJECT, G_TYPE_POINTER, G_TYPE_UINT);
signals[CONNECTION_SECRETS_FAILED] =
g_signal_new ("connection-secrets-failed",
@@ -321,9 +321,9 @@ nm_act_request_class_init (NMActRequestClass *req_class)
G_SIGNAL_RUN_FIRST,
G_STRUCT_OFFSET (NMActRequestClass, connection_secrets_failed),
NULL, NULL,
nm_marshal_VOID__OBJECT_STRING,
G_TYPE_NONE, 2,
G_TYPE_OBJECT, G_TYPE_STRING);
nm_marshal_VOID__OBJECT_STRING_UINT,
G_TYPE_NONE, 3,
G_TYPE_OBJECT, G_TYPE_STRING, G_TYPE_UINT);
signals[PROPERTIES_CHANGED] =
nm_properties_changed_signal_new (object_class,
@@ -371,6 +371,7 @@ device_state_changed (NMDevice *device, NMDeviceState state, gpointer user_data)
typedef struct GetSecretsInfo {
NMActRequest *req;
char *setting_name;
RequestSecretsCaller caller;
} GetSecretsInfo;
static void
@@ -480,7 +481,8 @@ get_secrets_cb (DBusGProxy *proxy, DBusGProxyCall *call, gpointer user_data)
signals[CONNECTION_SECRETS_FAILED],
0,
priv->connection,
info->setting_name);
info->setting_name,
info->caller);
return;
}
@@ -511,7 +513,8 @@ get_secrets_cb (DBusGProxy *proxy, DBusGProxyCall *call, gpointer user_data)
signals[CONNECTION_SECRETS_UPDATED],
0,
priv->connection,
updated);
updated,
info->caller);
} else {
nm_warning ("No secrets updated because not valid settings were received!");
}
@@ -524,7 +527,10 @@ out:
gboolean
nm_act_request_request_connection_secrets (NMActRequest *req,
const char *setting_name,
gboolean request_new)
gboolean request_new,
RequestSecretsCaller caller,
const char *hint1,
const char *hint2)
{
DBusGProxy *proxy;
DBusGProxyCall *call;
@@ -555,9 +561,15 @@ nm_act_request_request_connection_secrets (NMActRequest *req,
}
/* Empty for now */
hints = g_ptr_array_new ();
hints = g_ptr_array_sized_new (2);
if (hint1)
g_ptr_array_add (hints, g_strdup (hint1));
if (hint2)
g_ptr_array_add (hints, g_strdup (hint2));
info->req = req;
info->caller = caller;
call = dbus_g_proxy_begin_call_with_timeout (proxy, "GetSecrets",
get_secrets_cb,
info,