summaryrefslogtreecommitdiff
path: root/nslcd/db_pam.c
diff options
context:
space:
mode:
Diffstat (limited to 'nslcd/db_pam.c')
-rw-r--r--nslcd/db_pam.c65
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 */