diff options
Diffstat (limited to 'nslcd/db_pam.c')
-rw-r--r-- | nslcd/db_pam.c | 65 |
1 files changed, 25 insertions, 40 deletions
diff --git a/nslcd/db_pam.c b/nslcd/db_pam.c index c617573..857c023 100644 --- a/nslcd/db_pam.c +++ b/nslcd/db_pam.c @@ -79,7 +79,7 @@ NSLCD_HANDLE_UID(PAM, AUTHC char tty[64]; char password[BUFLEN_PASSWORD]; struct authc _entry; - ,/* read */ + ,/* int read(TFILE *fp) */ READ_STRING(fp, username); READ_STRING(fp, service); READ_STRING(fp, ruser); @@ -89,25 +89,23 @@ NSLCD_HANDLE_UID(PAM, AUTHC log_setrequest("authc=\"%s\"", username); log_log(LOG_DEBUG, "nslcd_pam_authc(\"%s\",\"%s\",\"%s\")", username, service, *password ? "***" : ""); + return 0; ,/* check */ if (!isvalidname(username)) { log_log(LOG_WARNING, "request denied by validnames option"); return -1; } - ,/* search(int *rcp) */ + ,/* search(int *rcp, bool *more) */ struct authc, - static size_t i = 0; struct passwd *user = NULL; struct authc *entry = &_entry; - - for (; i < session->cnt; i++) + *more = false; + for (size_t i = 0; i < session->cnt; i++) { if (STR_CMP(username, session->users[i].pw_name)==0) { *rcp = 0; - size_t n = i; - i = session->cnt; - user = &(session->users[n]); + user = &(session->users[i]); } } if (user == NULL) @@ -129,7 +127,7 @@ NSLCD_HANDLE_UID(PAM, AUTHC } return entry; - ,/* write */ + ,/* write(TFILE *fp, tentry *entry) */ WRITE_INT32(fp, NSLCD_RESULT_BEGIN); WRITE_INT32( fp, entry->authc_rc); WRITE_STRING(fp, username); @@ -149,29 +147,28 @@ NSLCD_HANDLE(PAM, AUTHZ char rhost[HOST_NAME_MAX+1]; char tty[64]; struct authz _entry; - ,/* read */ + ,/* int read(TFILE *fp) */ READ_STRING(fp, username); READ_STRING(fp, service); READ_STRING(fp, ruser); READ_STRING(fp, rhost); READ_STRING(fp, tty); + return 0; /* log call */ log_setrequest("authz=\"%s\"", username); log_log(LOG_DEBUG, "nslcd_pam_authz(\"%s\",\"%s\",\"%s\",\"%s\",\"%s\")", username, service, ruser, rhost, tty); ,/* check */ - ,/* search(int *rcp) */ + ,/* search(int *rcp, bool *more) */ struct authz, struct passwd *user = NULL; struct authz *entry = &_entry; - + *more = false; for (size_t i = 0; i < session->cnt; i++) { if (STR_CMP(username, session->users[i].pw_name)==0) { *rcp = 0; - size_t n = i; - i = session->cnt; - user = &(session->users[n]); + user = &(session->users[i]); } } if (user == NULL) @@ -191,7 +188,7 @@ NSLCD_HANDLE(PAM, AUTHZ } return entry; - ,/* write response */ + ,/* write(TFILE *fp, tentry *entry) */ WRITE_INT32(fp, NSLCD_RESULT_BEGIN); WRITE_INT32( fp, entry->authz_rc); WRITE_STRING(fp, entry->authz_msg); @@ -211,12 +208,13 @@ NSLCD_HANDLE(PAM, SESS_O "abcdefghijklmnopqrstuvwxyz" "01234567890"; size_t i; - ,/* read */ + ,/* int read(TFILE *fp) */ READ_STRING(fp, username); READ_STRING(fp, service); READ_STRING(fp, ruser); READ_STRING(fp, rhost); READ_STRING(fp, tty); + return 0; /* generate pseudo-random session id */ for (i = 0; i < (sizeof(sessionid) - 1); i++) sessionid[i] = alphabet[rand() % (sizeof(alphabet) - 1)]; @@ -226,18 +224,11 @@ NSLCD_HANDLE(PAM, SESS_O log_log(LOG_DEBUG, "nslcd_pam_sess_o(\"%s\",\"%s\",\"%s\",\"%s\",\"%s\"): %s", username, service, tty, rhost, ruser, sessionid); ,/* check */ - ,/* search */ + ,/* search(int *rcp, bool *more) */ void, - if (*rcp != 0) /* first time through, set success=0 (no errors), return non-NULL */ - { - return (void*)1; - *rcp = 0; - } - else /* second time through, exit by returning NULL */ - { - return NULL; - } - ,/* write */ + *more = false; + return (void*)1; /* return non-NULL */ + ,/* write(TFILE *fp, tentry *entry) */ WRITE_INT32(fp, NSLCD_RESULT_BEGIN); WRITE_STRING(fp, sessionid); return 0; @@ -252,7 +243,7 @@ NSLCD_HANDLE(PAM, SESS_C char rhost[HOST_NAME_MAX+1]; char tty[64]; char sessionid[64]; - ,/* read */ + ,/* int read(TFILE *fp) */ READ_STRING(fp, username); READ_STRING(fp, service); READ_STRING(fp, ruser); @@ -262,19 +253,13 @@ NSLCD_HANDLE(PAM, SESS_C log_setrequest("sess_c=\"%s\"", username); log_log(LOG_DEBUG, "nslcd_pam_sess_c(\"%s\",\"%s\",%s)", username, service, sessionid); + return 0; ,/* check */ - ,/* search */ + ,/* tentry *search(struct session *session, int *rcp, bool *more) */ void, - if (*rcp != 0) /* first time through, set success=0 (no errors), return non-NULL */ - { - return (void*)1; - *rcp = 0; - } - else /* second time through, exit by returning NULL */ - { - return NULL; - } - ,/* write */ + *more = false; + return (void*)1; /* return non-NULL */ + ,/* int write(TFILE *fp, tentry *entry) */ WRITE_INT32(fp, NSLCD_RESULT_BEGIN); return 0; ,/* cleanup */ |