add remaining offsets

This commit is contained in:
Motiejus Jakštys 2022-02-12 23:01:16 +02:00 committed by Motiejus Jakštys
parent 7c63c7ab3b
commit bece7e9464

View File

@ -78,24 +78,28 @@ relative to the beginning of the file.
```
const File = struct {
magic: [4]u8,
version: u3,
shells_oob: u1,
version: u4,
padding: u4,
num_shells: u8,
num_users: u32,
num_groups: u32,
<... TBD ...>
offset_cmph_gid2group: u26,
offset_cmph_uid2user: u26,
offset_cmph_groupname2group: u26,
offset_cmph_username2user: u26,
offset_sorted_groups: u26,
offset_sorted_users: u26,
offset_groupmembers: u26,
offset_additional_gids: u26,
}
```
`magic` must be 0xf09fa4b7, and `version` must be `0`. The remaining fields are
indices to further sections of the file with their sizes in bytes. All numbers
are little-endian.
`magic` is 0xf09fa4b7, and `version` must be `0`. Offsets are indices to
further sections of the file, with zero being the first block (the magic
number). As all blobs are 64-byte aligned, the offsets are pointing to the
beginning of the 64-byte "block" (thus u26). All numbers are little-endian.
What's remaining, variable-length:
1. A lookup list of shells (if `shells_oob` is True).
2. 4 indices mentioned above.
3. <...>
As of writing the file header is 40 bytes.
Primitive types:
@ -116,8 +120,9 @@ const User = struct {
gid: u32,
// pointer to a separate structure that contains a list of gids
additional_gids_offset: u29,
padding: u1,
shell_len: u6,
// shell is a different story, documented elsewhere.
shell_here: u1,
shell_len_or_place: u6,
home_len: u6,
username_len: u6,
gecos_len: u8,
@ -127,5 +132,10 @@ const User = struct {
}
```
TODO explain:
- shells
- `additional_gids`
- `members`
[git-subtrac]: https://github.com/apenwarr/git-subtrac/
[cmph]: http://cmph.sourceforge.net/