]> git.proxmox.com Git - proxmox-backup.git/blame - src/pxar.rs
xattr: use checked_mul to increase size
[proxmox-backup.git] / src / pxar.rs
CommitLineData
60864b1b 1//! *pxar* Implementation (proxmox file archive format)
4fa71e05 2//!
8968258b
DM
3//! This code implements a slightly modified version of the *catar*
4//! format used in the [casync](https://github.com/systemd/casync)
60864b1b 5//! toolkit (we are not 100\% binary compatible). It is a file archive
8968258b
DM
6//! format defined by 'Lennart Poettering', specially defined for
7//! efficent deduplication.
4fa71e05
DM
8
9//! Every archive contains items in the following order:
60864b1b
DM
10//! * `ENTRY` -- containing general stat() data and related bits
11//! * `USER` -- user name as text, if enabled
12//! * `GROUP` -- group name as text, if enabled
13//! * `XATTR` -- one extended attribute
14//! * ... -- more of these when there are multiple defined
15//! * `ACL_USER` -- one `USER ACL` entry
16//! * ... -- more of these when there are multiple defined
17//! * `ACL_GROUP` -- one `GROUP ACL` entry
18//! * ... -- more of these when there are multiple defined
19//! * `ACL_GROUP_OBJ` -- The `ACL_GROUP_OBJ`
20//! * `ACL_DEFAULT` -- The various default ACL fields if there's one defined
21//! * `ACL_DEFAULT_USER` -- one USER ACL entry
22//! * ... -- more of these when multiple are defined
23//! * `ACL_DEFAULT_GROUP` -- one GROUP ACL entry
24//! * ... -- more of these when multiple are defined
25//! * `FCAPS` -- file capability in Linux disk format
26//! * `QUOTA_PROJECT_ID` -- the ext4/xfs quota project ID
27//! * `PAYLOAD` -- file contents, if it is one
28//! * `SYMLINK` -- symlink target, if it is one
29//! * `DEVICE` -- device major/minor, if it is a block/char device
4fa71e05
DM
30//!
31//! If we are serializing a directory, then this is followed by:
32//!
60864b1b
DM
33//! * `FILENAME` -- name of the first directory entry (strictly ordered!)
34//! * `<archive>` -- serialization of the first directory entry's metadata and contents,
4fa71e05 35//! following the exact same archive format
60864b1b
DM
36//! * `FILENAME` -- name of the second directory entry (strictly ordered!)
37//! * `<archive>` -- serialization of the second directory entry
4fa71e05 38//! * ...
60864b1b 39//! * `GOODBYE` -- lookup table at the end of a list of directory entries
4fa71e05 40
60864b1b
DM
41//!
42//! The original format has no way to deal with hardlinks, so we
43//! extended the format by a special `HARDLINK` tag, which can replace
44//! an `ENTRY` tag. The `HARDLINK` tag contains an 64bit offset which
45//! points to the linked `ENTRY` inside the archive, followed by the
46//! full path name of that `ENTRY`. `HARDLINK`s may not have further data
47//! (user, group, acl, ...) because this is already defined by the
48//! linked `ENTRY`.
af572aaa 49
3dbfe5b1 50mod binary_search_tree;
7dfa17c7 51pub use binary_search_tree::*;
4fa71e05 52
47651f95
CE
53pub mod flags;
54pub use flags::*;
55
3dbfe5b1
DM
56mod format_definition;
57pub use format_definition::*;
58
59mod encoder;
60pub use encoder::*;
61
0e21b87b
DM
62mod sequential_decoder;
63pub use sequential_decoder::*;
46cfe7ab
DM
64
65mod decoder;
66pub use decoder::*;
ab87f167 67
4d142ea7
CE
68mod match_pattern;
69pub use match_pattern::*;
cd7dc879 70
fe076c82
CE
71mod dir_stack;
72pub use dir_stack::*;
6a584cfd 73
02ba8a5d
DM
74pub mod fuse;
75pub use fuse::*;
76
aea0815d
DM
77pub mod catalog;
78
ab87f167 79mod helper;