[PATCH:xdm 5/5] Simplify FailedLogin code
Alan Coopersmith
alan.coopersmith at oracle.com
Thu Jun 2 22:10:12 PDT 2011
Relies on username going out of scope to discard the pointer returned by
pam_get_item that pam_end frees at the bottom of the loop.
Signed-off-by: Alan Coopersmith <alan.coopersmith at oracle.com>
---
greeter/greet.c | 50 +++++++++++++++++++++++---------------------------
1 files changed, 23 insertions(+), 27 deletions(-)
diff --git a/greeter/greet.c b/greeter/greet.c
index 8426a65..87d2a83 100644
--- a/greeter/greet.c
+++ b/greeter/greet.c
@@ -402,11 +402,9 @@ Greet (struct display *d, struct greet_info *greet)
static void
-FailedLogin (struct display *d, struct greet_info *greet)
+FailedLogin (struct display *d, const char *username)
{
#ifdef USE_SYSLOG
- const char *username = greet->name;
-
if (username == NULL)
username = "username unavailable";
@@ -415,10 +413,6 @@ FailedLogin (struct display *d, struct greet_info *greet)
d->name, username);
#endif
DrawFail (login);
-#ifndef USE_PAM
- bzero (greet->name, strlen(greet->name));
- bzero (greet->password, strlen(greet->password));
-#endif
}
_X_EXPORT
@@ -500,7 +494,6 @@ greet_user_rtn GreetUser(
struct myconv_data pcd = { d, greet, NULL };
struct pam_conv pc = { pamconv, &pcd };
const char * pam_fname;
- char * username = NULL;
const char * login_prompt;
@@ -586,12 +579,16 @@ greet_user_rtn GreetUser(
RUN_AND_CHECK_PAM_ERROR(pam_setcred,
(*pamhp, 0));
- RUN_AND_CHECK_PAM_ERROR(pam_get_item,
- (*pamhp, PAM_USER, (void *) &username));
- if (username != NULL) {
- Debug("PAM_USER: %s\n", username);
- greet->name = username;
- greet->password = NULL;
+ {
+ char *username = NULL;
+
+ RUN_AND_CHECK_PAM_ERROR(pam_get_item,
+ (*pamhp, PAM_USER, (void *) &username));
+ if (username != NULL) {
+ Debug("PAM_USER: %s\n", username);
+ greet->name = username;
+ greet->password = NULL;
+ }
}
pam_done:
@@ -606,19 +603,14 @@ greet_user_rtn GreetUser(
break;
} else {
/* Try to fill in username for failed login error log */
- if (greet->name == NULL) {
- if (username == NULL) {
- RUN_AND_CHECK_PAM_ERROR(pam_get_item,
- (*pamhp, PAM_USER,
- (void *) &username));
- }
- greet->name = username;
- }
- FailedLogin (d, greet);
- if (greet->name == username) {
- /* pam_end frees the value returned by pam_get_item */
- greet->name = NULL;
+ char *username = greet->name;
+
+ if (username == NULL) {
+ RUN_AND_CHECK_PAM_ERROR(pam_get_item,
+ (*pamhp, PAM_USER,
+ (void *) &username));
}
+ FailedLogin (d, username);
RUN_AND_CHECK_PAM_ERROR(pam_end,
(*pamhp, pam_error));
}
@@ -638,7 +630,11 @@ greet_user_rtn GreetUser(
if (Verify (d, greet, verify))
break;
else
- FailedLogin (d, greet);
+ {
+ FailedLogin (d, greet->name);
+ bzero (greet->name, strlen(greet->name));
+ bzero (greet->password, strlen(greet->password));
+ }
#endif
}
DeleteXloginResources (d, *dpy);
--
1.7.3.2
More information about the xorg-devel
mailing list