]> ruderich.org/simon Gitweb - nsscash/nsscash.git/blobdiff - nss/pw.c
nss: gr/pw: re-used variable
[nsscash/nsscash.git] / nss / pw.c
index 813b4f5cbbe433a4788deec326932fbc790eada1..c772bb10133e2d7c29feb4565f6327739cb2497e 100644 (file)
--- a/nss/pw.c
+++ b/nss/pw.c
@@ -18,8 +18,6 @@
  */
 
 #include <errno.h>
-#include <nss.h>
-#include <pwd.h>
 #include <stddef.h>
 #include <stdio.h>
 #include <stdlib.h>
 
 #include <pthread.h>
 
-#include "cash.h"
+#include "cash_nss.h"
 #include "file.h"
 #include "search.h"
 
 
+// NOTE: This file is very similar to gr.c, keep in sync!
+
 struct passwd_entry {
     uint64_t uid;
     uint64_t gid;
@@ -48,7 +48,7 @@ struct passwd_entry {
      * concatenated, with their trailing NUL. The off_* variables point to
      * beginning of each string.
      */
-    char data[];
+    const char data[];
 } __attribute__((packed));
 
 static bool entry_to_passwd(const struct passwd_entry *e, struct passwd *p, char *tmp, size_t space) {
@@ -140,9 +140,9 @@ static enum nss_status internal_getpw(struct search_key *key, struct passwd *res
     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);
@@ -151,7 +151,7 @@ static enum nss_status internal_getpw(struct search_key *key, struct passwd *res
         return NSS_STATUS_NOTFOUND;
     }
 
-    const char *e = h->data + h->off_data + *off;
+    const char *e = key->data + *off;
     if (!entry_to_passwd((struct passwd_entry *)e, result, buffer, buflen)) {
         unmap_file(&f);
         errno = ERANGE;