syd 3.52.0

rock-solid application kernel
Documentation
use nix::sys::{
    resource::rlim_t,
    signal::{Signal, SIGKILL},
};

use crate::landlock::{AccessFs, AccessNet};

#[derive(Debug, Copy, Clone)]
pub struct Config {
    pub death_sig: Option<Signal>,
    pub restore_sigmask: bool,
    pub deny_tsc: bool,
    pub keep: bool,
    pub stop: bool,
    pub ssb: bool,
    pub append_only: bool,
    pub restrict_kptr: bool,
    pub restrict_prlimit: bool,
    pub rlimit_as: Option<rlim_t>,
    pub rlimit_core: Option<rlim_t>,
    pub rlimit_cpu: Option<rlim_t>,
    pub rlimit_data: Option<rlim_t>,
    pub rlimit_fsize: Option<rlim_t>,
    pub rlimit_memlock: Option<rlim_t>,
    pub rlimit_msgqueue: Option<rlim_t>,
    pub rlimit_nice: Option<rlim_t>,
    pub rlimit_nofile: Option<rlim_t>,
    pub rlimit_nproc: Option<rlim_t>,
    pub rlimit_rtprio: Option<rlim_t>,
    pub rlimit_rttime: Option<rlim_t>,
    pub rlimit_sigpending: Option<rlim_t>,
    pub rlimit_stack: Option<rlim_t>,
    pub landlock_access_fs: AccessFs,
    pub landlock_access_net: AccessNet,
    pub landlock_scoped_abs: bool,
}

impl Default for Config {
    fn default() -> Config {
        Config {
            death_sig: Some(SIGKILL),
            restore_sigmask: true,
            deny_tsc: false,
            keep: false,
            stop: false,
            ssb: false,
            append_only: false,
            restrict_kptr: false,
            restrict_prlimit: false,
            rlimit_as: None,
            rlimit_core: None,
            rlimit_cpu: None,
            rlimit_data: None,
            rlimit_fsize: None,
            rlimit_memlock: None,
            rlimit_msgqueue: None,
            rlimit_nice: None,
            rlimit_nofile: None,
            rlimit_nproc: None,
            rlimit_rtprio: None,
            rlimit_rttime: None,
            rlimit_sigpending: None,
            rlimit_stack: None,
            landlock_access_fs: AccessFs::EMPTY,
            landlock_access_net: AccessNet::EMPTY,
            landlock_scoped_abs: false,
        }
    }
}

#[cfg(test)]
mod tests {
    use nix::sys::signal::SIGKILL;

    use super::*;

    #[test]
    fn test_config_1() {
        let config = Config::default();
        assert_eq!(config.death_sig, Some(SIGKILL));
    }

    #[test]
    fn test_config_2() {
        let config = Config::default();
        assert!(config.restore_sigmask);
    }

    #[test]
    fn test_config_3() {
        let config = Config::default();
        assert!(!config.deny_tsc);
    }

    #[test]
    fn test_config_4() {
        let config = Config::default();
        assert!(!config.keep);
    }

    #[test]
    fn test_config_5() {
        let config = Config::default();
        assert!(config.rlimit_as.is_none());
        assert!(config.rlimit_core.is_none());
        assert!(config.rlimit_nofile.is_none());
    }

    #[test]
    fn test_config_6() {
        let config = Config::default();
        assert!(!config.landlock_scoped_abs);
    }
}