X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=nss%2Ffile.h;h=fb94a8f2017d29c242d484dee4c87a7bce945f81;hb=c42f577140459f548b1d7b085cd4dc2717e060c6;hp=7aac37ccc33c14e31c23da97724e30aa08b6e524;hpb=92afde4e875a96e1ab865e29b9f0d11b08d7db1c;p=nsscash%2Fnsscash.git diff --git a/nss/file.h b/nss/file.h index 7aac37c..fb94a8f 100644 --- a/nss/file.h +++ b/nss/file.h @@ -24,15 +24,44 @@ #include #include -#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")));