diff options
Diffstat (limited to 'src/sss_client')
-rw-r--r-- | src/sss_client/nss_mc.h | 2 | ||||
-rw-r--r-- | src/sss_client/nss_mc_common.c | 13 | ||||
-rw-r--r-- | src/sss_client/nss_mc_group.c | 8 | ||||
-rw-r--r-- | src/sss_client/nss_mc_passwd.c | 8 |
4 files changed, 23 insertions, 8 deletions
diff --git a/src/sss_client/nss_mc.h b/src/sss_client/nss_mc.h index f3abaab9..685cc41c 100644 --- a/src/sss_client/nss_mc.h +++ b/src/sss_client/nss_mc.h @@ -58,6 +58,8 @@ errno_t sss_nss_mc_get_record(struct sss_cli_mc_ctx *ctx, uint32_t slot, struct sss_mc_rec **_rec); errno_t sss_nss_str_ptr_from_buffer(char **str, void **cookie, char *buf, size_t len); +uint32_t sss_nss_mc_next_slot_with_hash(struct sss_mc_rec *rec, + uint32_t hash); /* passwd db */ errno_t sss_nss_mc_getpwnam(const char *name, size_t name_len, diff --git a/src/sss_client/nss_mc_common.c b/src/sss_client/nss_mc_common.c index a0a70abc..db9be94b 100644 --- a/src/sss_client/nss_mc_common.c +++ b/src/sss_client/nss_mc_common.c @@ -291,3 +291,16 @@ errno_t sss_nss_str_ptr_from_buffer(char **str, void **cookie, return 0; } +uint32_t sss_nss_mc_next_slot_with_hash(struct sss_mc_rec *rec, + uint32_t hash) +{ + if (rec->hash1 == hash) { + return rec->next1; + } else if (rec->hash2 == hash) { + return rec->next2; + } else { + /* it should never happen. */ + return MC_INVALID_VAL; + } + +} diff --git a/src/sss_client/nss_mc_group.c b/src/sss_client/nss_mc_group.c index 4e3d9fb0..5610233e 100644 --- a/src/sss_client/nss_mc_group.c +++ b/src/sss_client/nss_mc_group.c @@ -130,7 +130,7 @@ errno_t sss_nss_mc_getgrnam(const char *name, size_t name_len, /* check record matches what we are searching for */ if (hash != rec->hash1) { /* if name hash does not match we can skip this immediately */ - slot = rec->next; + slot = sss_nss_mc_next_slot_with_hash(rec, hash); continue; } @@ -152,7 +152,7 @@ errno_t sss_nss_mc_getgrnam(const char *name, size_t name_len, break; } - slot = rec->next; + slot = sss_nss_mc_next_slot_with_hash(rec, hash); } if (!MC_SLOT_WITHIN_BOUNDS(slot, gr_mc_ctx.dt_size)) { @@ -205,7 +205,7 @@ errno_t sss_nss_mc_getgrgid(gid_t gid, /* check record matches what we are searching for */ if (hash != rec->hash2) { /* if uid hash does not match we can skip this immediately */ - slot = rec->next; + slot = sss_nss_mc_next_slot_with_hash(rec, hash); continue; } @@ -214,7 +214,7 @@ errno_t sss_nss_mc_getgrgid(gid_t gid, break; } - slot = rec->next; + slot = sss_nss_mc_next_slot_with_hash(rec, hash); } if (!MC_SLOT_WITHIN_BOUNDS(slot, gr_mc_ctx.dt_size)) { diff --git a/src/sss_client/nss_mc_passwd.c b/src/sss_client/nss_mc_passwd.c index a0a8d87f..95b8a040 100644 --- a/src/sss_client/nss_mc_passwd.c +++ b/src/sss_client/nss_mc_passwd.c @@ -131,7 +131,7 @@ errno_t sss_nss_mc_getpwnam(const char *name, size_t name_len, /* check record matches what we are searching for */ if (hash != rec->hash1) { /* if name hash does not match we can skip this immediately */ - slot = rec->next; + slot = sss_nss_mc_next_slot_with_hash(rec, hash); continue; } @@ -154,7 +154,7 @@ errno_t sss_nss_mc_getpwnam(const char *name, size_t name_len, break; } - slot = rec->next; + slot = sss_nss_mc_next_slot_with_hash(rec, hash); } if (!MC_SLOT_WITHIN_BOUNDS(slot, pw_mc_ctx.dt_size)) { @@ -207,7 +207,7 @@ errno_t sss_nss_mc_getpwuid(uid_t uid, /* check record matches what we are searching for */ if (hash != rec->hash2) { /* if uid hash does not match we can skip this immediately */ - slot = rec->next; + slot = sss_nss_mc_next_slot_with_hash(rec, hash); continue; } @@ -216,7 +216,7 @@ errno_t sss_nss_mc_getpwuid(uid_t uid, break; } - slot = rec->next; + slot = sss_nss_mc_next_slot_with_hash(rec, hash); } if (!MC_SLOT_WITHIN_BOUNDS(slot, pw_mc_ctx.dt_size)) { |