mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager
synced 2024-10-06 16:21:50 +00:00
2008-08-04 Dan Williams <dcbw@redhat.com>
* src/ppp-manager/nm-ppp-manager.c - (impl_ppp_manager_need_secrets): rework to handle secrets better; since the GSM and CDMA settings now implement need_secrets, we can rely on them to do the right thing. Where secrets are not required, just pass empty strings back to the pppd plugin. - (nm_ppp_manager_update_secrets): leak fix; don't need to dup the strings - (impl_ppp_manager_set_ip4_config): clear the secrets tries counter on successful IP4 config receipt git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@3893 4912f4e0-d625-0410-9fb7-b9a5a253dbdc
This commit is contained in:
parent
e2aa087281
commit
9ee4038c96
11
ChangeLog
11
ChangeLog
|
@ -1,3 +1,14 @@
|
|||
2008-08-04 Dan Williams <dcbw@redhat.com>
|
||||
|
||||
* src/ppp-manager/nm-ppp-manager.c
|
||||
- (impl_ppp_manager_need_secrets): rework to handle secrets better;
|
||||
since the GSM and CDMA settings now implement need_secrets, we can
|
||||
rely on them to do the right thing. Where secrets are not required,
|
||||
just pass empty strings back to the pppd plugin.
|
||||
- (nm_ppp_manager_update_secrets): leak fix; don't need to dup the strings
|
||||
- (impl_ppp_manager_set_ip4_config): clear the secrets tries counter
|
||||
on successful IP4 config receipt
|
||||
|
||||
2008-08-04 Dan Williams <dcbw@redhat.com>
|
||||
|
||||
* libnm-util/nm-setting-cdma.c
|
||||
|
|
|
@ -257,10 +257,10 @@ impl_ppp_manager_need_secrets (NMPPPManager *manager,
|
|||
NMPPPManagerPrivate *priv = NM_PPP_MANAGER_GET_PRIVATE (manager);
|
||||
NMConnection *connection;
|
||||
NMSettingConnection *s_con;
|
||||
NMSetting *setting;
|
||||
const char *setting_name;
|
||||
guint32 tries;
|
||||
char *hint1 = NULL;
|
||||
GPtrArray *hints = NULL;
|
||||
const char *hint1 = NULL, *hint2 = NULL;
|
||||
|
||||
remove_timeout_handler (manager);
|
||||
|
||||
|
@ -271,47 +271,67 @@ impl_ppp_manager_need_secrets (NMPPPManager *manager,
|
|||
g_assert (s_con->type);
|
||||
|
||||
nm_connection_clear_secrets (connection);
|
||||
setting_name = nm_connection_need_secrets (connection, NULL);
|
||||
if (setting_name) {
|
||||
setting = nm_connection_get_setting_by_name (connection, setting_name);
|
||||
} else {
|
||||
/* Always ask for secrets unless the connection's type setting doesn't
|
||||
* even exist (which shouldn't happen). Empty username and password are
|
||||
* valid, but we need to tell the pppd plugin that this is valid by
|
||||
* sending back blank secrets.
|
||||
*/
|
||||
setting_name = nm_connection_need_secrets (connection, &hints);
|
||||
if (!setting_name) {
|
||||
NMSetting *setting;
|
||||
|
||||
setting = nm_connection_get_setting_by_name (connection, s_con->type);
|
||||
if (!setting) {
|
||||
if (setting) {
|
||||
const char *username = NULL;
|
||||
const char *password = NULL;
|
||||
|
||||
/* FIXME: push this down to the settings and keep PPP manager generic */
|
||||
if (NM_IS_SETTING_PPPOE (setting)) {
|
||||
username = NM_SETTING_PPPOE (setting)->username;
|
||||
password = NM_SETTING_PPPOE (setting)->password;
|
||||
} else if (NM_IS_SETTING_GSM (setting)) {
|
||||
username = NM_SETTING_GSM (setting)->username;
|
||||
password = NM_SETTING_GSM (setting)->password;
|
||||
} else if (NM_IS_SETTING_CDMA (setting)) {
|
||||
username = NM_SETTING_CDMA (setting)->username;
|
||||
password = NM_SETTING_CDMA (setting)->password;
|
||||
}
|
||||
|
||||
/* If secrets are not required, send the existing username and password
|
||||
* back to the PPP plugin immediately.
|
||||
*/
|
||||
priv->pending_secrets_context = context;
|
||||
nm_ppp_manager_update_secrets (manager,
|
||||
NULL, /* FIXME: pass device name */
|
||||
username ? username : "",
|
||||
password ? password : "",
|
||||
NULL);
|
||||
} else {
|
||||
GError *err = NULL;
|
||||
|
||||
g_set_error (&err, NM_PPP_MANAGER_ERROR, NM_PPP_MANAGER_ERROR_UNKOWN,
|
||||
"Missing type-specific setting; no secrets could be found.");
|
||||
nm_warning ("%s", err->message);
|
||||
dbus_g_method_return_error (context, err);
|
||||
return;
|
||||
}
|
||||
setting_name = nm_setting_get_name (setting);
|
||||
return;
|
||||
}
|
||||
|
||||
/* FIXME: figure out some way of pushing this down to the settings
|
||||
* themselves and keeping the PPP Manager generic.
|
||||
*/
|
||||
if (NM_IS_SETTING_PPPOE (setting))
|
||||
hint1 = NM_SETTING_PPPOE_PASSWORD;
|
||||
else if (NM_IS_SETTING_GSM (setting))
|
||||
hint1 = NM_SETTING_GSM_PASSWORD;
|
||||
else if (NM_IS_SETTING_CDMA (setting))
|
||||
hint1 = NM_SETTING_CDMA_PASSWORD;
|
||||
/* Extract hints */
|
||||
if (hints) {
|
||||
if (hints->len > 0)
|
||||
hint1 = g_ptr_array_index (hints, 0);
|
||||
if (hints->len > 1)
|
||||
hint2 = g_ptr_array_index (hints, 1);
|
||||
}
|
||||
|
||||
tries = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (connection), PPP_MANAGER_SECRET_TRIES));
|
||||
nm_act_request_request_connection_secrets (priv->act_req,
|
||||
setting_name,
|
||||
tries == 0 ? TRUE : FALSE,
|
||||
tries ? TRUE : FALSE,
|
||||
SECRETS_CALLER_PPP,
|
||||
hint1,
|
||||
NULL);
|
||||
hint2);
|
||||
g_object_set_data (G_OBJECT (connection), PPP_MANAGER_SECRET_TRIES, GUINT_TO_POINTER (++tries));
|
||||
priv->pending_secrets_context = context;
|
||||
|
||||
if (hints)
|
||||
g_ptr_array_free (hints, TRUE);
|
||||
}
|
||||
|
||||
static gboolean impl_ppp_manager_set_state (NMPPPManager *manager,
|
||||
|
@ -329,6 +349,8 @@ impl_ppp_manager_set_ip4_config (NMPPPManager *manager,
|
|||
GHashTable *config_hash,
|
||||
GError **err)
|
||||
{
|
||||
NMPPPManagerPrivate *priv = NM_PPP_MANAGER_GET_PRIVATE (manager);
|
||||
NMConnection *connection;
|
||||
NMIP4Config *config;
|
||||
NMSettingIP4Address *addr;
|
||||
GValue *val;
|
||||
|
@ -381,6 +403,12 @@ impl_ppp_manager_set_ip4_config (NMPPPManager *manager,
|
|||
goto out;
|
||||
}
|
||||
|
||||
/* Got successful IP4 config; obviously the secrets worked */
|
||||
connection = nm_act_request_get_connection (priv->act_req);
|
||||
g_assert (connection);
|
||||
g_object_set_data (G_OBJECT (connection), PPP_MANAGER_SECRET_TRIES, NULL);
|
||||
|
||||
/* Push the IP4 config up to the device */
|
||||
g_signal_emit (manager, signals[IP4_CONFIG], 0, iface, config);
|
||||
|
||||
monitor_stats (manager, iface);
|
||||
|
@ -820,10 +848,7 @@ nm_ppp_manager_update_secrets (NMPPPManager *manager,
|
|||
the plugin would need to link against libnm-util just to parse this.
|
||||
So instead, let's just send what it needs */
|
||||
|
||||
/* FIXME: Do we have to strdup the values here? */
|
||||
dbus_g_method_return (priv->pending_secrets_context,
|
||||
g_strdup (username),
|
||||
g_strdup (password));
|
||||
dbus_g_method_return (priv->pending_secrets_context, username, password);
|
||||
}
|
||||
priv->pending_secrets_context = NULL;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue