X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=nss%2Ffile.h;h=15647242de60e3e3c57679b1d390791204447d58;hb=278c50be3d8a8c433aa862d602492112b9f26a67;hp=7aac37ccc33c14e31c23da97724e30aa08b6e524;hpb=92afde4e875a96e1ab865e29b9f0d11b08d7db1c;p=nsscash%2Fnsscash.git diff --git a/nss/file.h b/nss/file.h index 7aac37c..1564724 100644 --- a/nss/file.h +++ b/nss/file.h @@ -1,7 +1,7 @@ /* * Load and unload nsscash files (header) * - * Copyright (C) 2019 Simon Ruderich + * Copyright (C) 2019-2021 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 @@ -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")));