summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Ancell <robert.ancell@canonical.com>2012-08-24 17:29:40 +1200
committerRobert Ancell <robert.ancell@canonical.com>2012-08-24 17:29:40 +1200
commit9d625de065a3553f19c498a7918c94fac19857e2 (patch)
tree46b8d1713090c07b0ebe793c3bb1a03bf48b40e0
parent909b576f956fd36ff50e8ee500dac04ff074c34b (diff)
downloadlightdm-9d625de065a3553f19c498a7918c94fac19857e2.tar.gz
Fix small bugs in remote authentication prompts not coming back
-rw-r--r--src/greeter.c10
-rw-r--r--tests/src/libsystem.c14
2 files changed, 19 insertions, 5 deletions
diff --git a/src/greeter.c b/src/greeter.c
index 00303ac0..a7cd43a4 100644
--- a/src/greeter.c
+++ b/src/greeter.c
@@ -392,10 +392,13 @@ handle_login_remote (Greeter *greeter, const gchar *session_name, const gchar *u
{
gchar *service;
- if (username)
- g_debug ("Greeter start authentication for remote session %s as user %s", session_name, username);
- else
+ if (username[0] == '\0')
+ {
g_debug ("Greeter start authentication for remote session %s", session_name);
+ username = NULL;
+ }
+ else
+ g_debug ("Greeter start authentication for remote session %s as user %s", session_name, username);
reset_session (greeter);
@@ -406,6 +409,7 @@ handle_login_remote (Greeter *greeter, const gchar *session_name, const gchar *u
return;
}
+ greeter->priv->authentication_sequence_number = sequence_number;
g_signal_emit (greeter, signals[START_AUTHENTICATION], 0, username, &greeter->priv->authentication_session);
if (greeter->priv->authentication_session)
{
diff --git a/tests/src/libsystem.c b/tests/src/libsystem.c
index e6038d42..693c91e1 100644
--- a/tests/src/libsystem.c
+++ b/tests/src/libsystem.c
@@ -26,6 +26,7 @@ struct pam_handle
{
char *service_name;
char *user;
+ char *authtok;
char *ruser;
char *tty;
char **envlist;
@@ -522,11 +523,14 @@ pam_authenticate (pam_handle_t *pamh, int flags)
free (resp);
return PAM_CONV_ERR;
}
-
- password_matches = strcmp (pamh->ruser, "remote-user") == 0 && strcmp (resp[0].resp, "password") == 0;
+ if (pamh->authtok)
+ free (pamh->authtok);
+ pamh->authtok = strdup (resp[0].resp);
free (resp[0].resp);
free (resp);
+ password_matches = strcmp (pamh->ruser, "remote-user") == 0 && strcmp (pamh->authtok, "password") == 0;
+
if (password_matches)
return PAM_SUCCESS;
else
@@ -798,6 +802,10 @@ pam_get_item (const pam_handle_t *pamh, int item_type, const void **item)
*item = pamh->user;
return PAM_SUCCESS;
+ case PAM_AUTHTOK:
+ *item = pamh->authtok;
+ return PAM_SUCCESS;
+
case PAM_RUSER:
*item = pamh->ruser;
return PAM_SUCCESS;
@@ -974,6 +982,8 @@ pam_end (pam_handle_t *pamh, int pam_status)
free (pamh->service_name);
if (pamh->user)
free (pamh->user);
+ if (pamh->authtok)
+ free (pamh->authtok);
if (pamh->ruser)
free (pamh->ruser);
if (pamh->tty)