]> ruderich.org/simon Gitweb - nsscash/nsscash.git/blobdiff - nss/file.h
Update copyright years
[nsscash/nsscash.git] / nss / file.h
index 7aac37ccc33c14e31c23da97724e30aa08b6e524..ac04ce3c30ec6973e5c80b3400e4ecdb3199679f 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Load and unload nsscash files (header)
  *
- * Copyright (C) 2019  Simon Ruderich
+ * Copyright (C) 2019-2020  Simon Ruderich
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Affero General Public License as published by
 #include <stdint.h>
 #include <stdlib.h>
 
-#include "cash.h"
 
+// Magic value at the beginning of each nsscash file (8 byte, without the
+// trailing NUL)
+#define MAGIC "NSS-CASH"
 
+// Defined in Makefile
+#ifndef NSSCASH_PASSWD_FILE
+# define NSSCASH_PASSWD_FILE "/etc/passwd.nsscash"
+#endif
+#ifndef NSSCASH_GROUP_FILE
+# define NSSCASH_GROUP_FILE "/etc/group.nsscash"
+#endif
+
+
+// header describes the on-disk (and, after loading via mmap, in-memory)
+// structure of nsscash files.
+struct header {
+    char magic[8]; // magic string
+    uint64_t version; // also doubles as byte-order check
+
+    uint64_t count; // number of entries in this file
+
+    // All offsets are relative to data
+    uint64_t off_orig_index;
+    uint64_t off_id_index;
+    uint64_t off_name_index;
+    uint64_t off_data;
+
+    char data[];
+} __attribute__((packed));
+
+// file represents an open nsscash file.
 struct file {
     int fd;
     size_t size;
-    uint64_t next_index; // used by getpwent (pw.c)
 
     const struct header *header;
+    uint64_t next_index; // used by getpwent (pw.c)
 };
 
 bool map_file(const char *path, struct file *f) __attribute__((visibility("hidden")));