X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=nss%2Fgr.c;h=db822094990c34044f6533c0f564ed9be90d36b6;hb=06dfc130f0f152ef11c3113f7237e822b3e45b5b;hp=c49ef4799be15db6e4996b4c01042eb5965d8a75;hpb=839f07d7b3130efc613d7d3fa8ed71a7d8d5fd7f;p=nsscash%2Fnsscash.git diff --git a/nss/gr.c b/nss/gr.c index c49ef47..db82209 100644 --- a/nss/gr.c +++ b/nss/gr.c @@ -25,7 +25,6 @@ #include -#include "cash.h" #include "cash_nss.h" #include "file.h" #include "search.h" @@ -36,7 +35,7 @@ struct group_entry { uint64_t gid; - // off_name = 0 + // off_name = 0, not stored on disk uint16_t off_passwd; uint16_t off_mem_off; @@ -52,11 +51,12 @@ struct group_entry { * * All offsets are relative to the beginning of data. */ - uint16_t data_size; - char data[]; + uint16_t data_size; // size of data in bytes + const char data[]; } __attribute__((packed)); static bool entry_to_group(const struct group_entry *e, struct group *g, char *tmp, size_t space) { + // Space required for the gr_mem array const size_t mem_size = (size_t)(e->mem_count + 1) * sizeof(char *); if (space < e->data_size + mem_size) { @@ -155,9 +155,9 @@ static enum nss_status internal_getgr(struct search_key *key, struct group *resu const struct header *h = f.header; key->data = h->data + h->off_data; - uint64_t off_index = (key->id != NULL) - ? h->off_id_index - : h->off_name_index; + uint64_t off_index = (key->name != NULL) + ? h->off_name_index + : h->off_id_index; uint64_t *off = search(key, h->data + off_index, h->count); if (off == NULL) { unmap_file(&f); @@ -166,7 +166,7 @@ static enum nss_status internal_getgr(struct search_key *key, struct group *resu return NSS_STATUS_NOTFOUND; } - const char *e = h->data + h->off_data + *off; + const char *e = key->data + *off; if (!entry_to_group((struct group_entry *)e, result, buffer, buflen)) { unmap_file(&f); errno = ERANGE;