diff options
Diffstat (limited to 'nslcd/db_passwd.c')
-rw-r--r-- | nslcd/db_passwd.c | 47 |
1 files changed, 24 insertions, 23 deletions
diff --git a/nslcd/db_passwd.c b/nslcd/db_passwd.c index 743f4bc..ed57098 100644 --- a/nslcd/db_passwd.c +++ b/nslcd/db_passwd.c @@ -84,9 +84,10 @@ static int write_passwd(TFILE *fp, struct passwd *entry, uid_t calleruid) NSLCD_HANDLE_UID(PASSWD, BYNAME ,/* decls */ char name[BUFLEN_NAME]; - ,/* read */ + ,/* int read(TFILE *fp) */ READ_STRING(fp, name); log_setrequest("passwd=\"%s\"", name); + return 0; ,/* check */ if (!isvalidname(name)) { @@ -94,21 +95,19 @@ NSLCD_HANDLE_UID(PASSWD, BYNAME return -1; } nsswitch_check_reload(); - ,/* search */ + ,/* tentry *search(struct session *session, int *rcp, bool *more) */ struct passwd, - static size_t i = 0; - for (; i < session->cnt; i++) + *more = false; + for (size_t i = 0; i < session->cnt; i++) { if (session->users[i].pw_uid != UID_INVALID && STR_CMP(name, session->users[i].pw_name)==0) { *rcp = 0; - size_t n = i; - i = session->cnt; - return &(session->users[n]); + return &(session->users[i]); } } return NULL; - ,/* write */ + ,/* int write(TFILE *fp, tentry *entry) */ return write_passwd(fp, entry, calleruid); ,/* cleanup */ ) @@ -116,46 +115,47 @@ NSLCD_HANDLE_UID(PASSWD, BYNAME NSLCD_HANDLE_UID(PASSWD, BYUID ,/* decls */ uid_t uid; - ,/* read */ + ,/* int read(TFILe *fp) */ READ_INT32(fp, uid); log_setrequest("passwd=%lu", (unsigned long int)uid); + return 0; ,/* check */ if (uid < nslcd_cfg->nss_min_uid) { /* return an empty result */ - WRITE_INT32(fp, NSLCD_VERSION); - WRITE_INT32(fp, NSLCD_ACTION_PASSWD_BYUID); - WRITE_INT32(fp, NSLCD_RESULT_END); + WRITE_INT32(_handle_fp, NSLCD_VERSION); + WRITE_INT32(_handle_fp, NSLCD_ACTION_PASSWD_BYUID); + WRITE_INT32(_handle_fp, NSLCD_RESULT_END); return 0; } nsswitch_check_reload(); - ,/* search */ + ,/* tentry *search(struct session *session, int *rcp, bool *more) */ struct passwd, - static size_t i = 0; - for (; i < session->cnt; i++) + *more = false; + for (size_t i = 0; i < session->cnt; i++) { if (uid == session->users[i].pw_uid) { *rcp = 0; - size_t n = i; - i = session->cnt; - return &(session->users[n]); + return &(session->users[i]); } } return NULL; - ,/* write */ + ,/* int write(TFILe *fp, tentry *entry */ return write_passwd(fp, entry, calleruid); ,/* cleanup */ ) NSLCD_HANDLE_UID(PASSWD, ALL ,/* decls */ - ,/* read */ + ,/* int read(TFILE *fp) */ log_setrequest("passwd(all)"); + return 0; ,/* check */ nsswitch_check_reload(); - ,/* search */ + ,/* tentry *search(struct session *session, int *rcp, bool *more) */ struct passwd, - static size_t i = 0; + static __thread size_t i = 0; + *more = true; for (; i < session->cnt; i++) { if (session->users[i].pw_uid != UID_INVALID) { @@ -163,8 +163,9 @@ NSLCD_HANDLE_UID(PASSWD, ALL return &(session->users[i]); } } + i = 0; return NULL; - ,/* write */ + ,/* int write(TFILE *fp, tentry *entry) */ return write_passwd(fp, entry, calleruid); ,/* cleanup */ ) |