+designed to be very simple and uses the data prepared by `nsscash` for
+lookups. To support quick lookups, in O(log n), the files utilize indices.
+
+Nsscash is very careful when deploying the changes:
+- All files are updated using the standard "write to temporary file", "sync",
+ "rename" steps which is atomic on UNIX file systems.
+- All errors cause an immediate abort ("fail fast") with a proper error
+ message and a non-zero exit status. This prevents hiding possibly important
+ errors. In addition all files are fetched first and then deployed to try to
+ prevent inconsistent state if only one file can be downloaded. The state
+ file (containing last file modification and content hash) is only updated
+ when all operations were successful.
+- To prevent unexpected permissions, `nsscash` does not create new files. The
+ user must create them first and `nsscash` will then re-use the permissions
+ (without the write bits to discourage manual modifications) and owner/group
+ when updating the file (see examples below).
+- To prevent misconfigurations, empty files (no users/groups) are not
+ permitted and will not be written to disk. This is designed to prevent the
+ accidental loss of all users/groups on a system.
+
+The passwd/group files have the following size restrictions:
+- maximum number of entries: '2^64-1' (uint64_t)
+- maximum passwd entry size: 65543 bytes (including newline)
+- maximum group entry size: 65535 bytes (including newline, only one member)
+- maximum members per group: depends on the user name length,
+ with 9 bytes per user: 5460 users
+- `nsscash` checks for these restrictions and aborts with an error if they are
+ violated