syd/unshare/
idmap.rs

1use nix::libc::{gid_t, uid_t};
2use serde::{ser::SerializeMap, Serialize};
3
4/// Entry (row) in the uid map
5#[derive(Clone, Copy, PartialEq, Eq, Debug)]
6pub struct UidMap {
7    /// First uid inside the guest namespace
8    pub inside_uid: uid_t,
9    /// First uid in external (host) namespace
10    pub outside_uid: uid_t,
11    /// Number of uids that this entry allows starting from inside/outside uid
12    pub count: uid_t,
13}
14
15/// Entry (row) in the gid map
16#[derive(Clone, Copy, PartialEq, Eq, Debug)]
17pub struct GidMap {
18    /// First gid inside the guest namespace
19    pub inside_gid: gid_t,
20    /// First gid in external (host) namespace
21    pub outside_gid: gid_t,
22    /// Number of gids that this entry allows starting from inside/outside gid
23    pub count: gid_t,
24}
25
26impl Serialize for UidMap {
27    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
28    where
29        S: serde::Serializer,
30    {
31        let mut map = serializer.serialize_map(Some(3))?;
32
33        map.serialize_entry("inside_uid", &self.inside_uid)?;
34        map.serialize_entry("outside_uid", &self.outside_uid)?;
35        map.serialize_entry("count", &self.count)?;
36
37        map.end()
38    }
39}
40
41impl Serialize for GidMap {
42    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
43    where
44        S: serde::Serializer,
45    {
46        let mut map = serializer.serialize_map(Some(3))?;
47
48        map.serialize_entry("inside_gid", &self.inside_gid)?;
49        map.serialize_entry("outside_gid", &self.outside_gid)?;
50        map.serialize_entry("count", &self.count)?;
51
52        map.end()
53    }
54}