sysknife-daemon 0.10.0

Policy-enforced, audit-logged Linux action daemon for SysKnife
Documentation
use super::{command_mechanism, ActionSpec};
use sysknife_types::RiskLevel;

pub fn specs() -> Vec<ActionSpec> {
    vec![
        get_datetime(),
        set_hostname("sysknife-lab"),
        set_timezone("America/Mexico_City"),
        set_locale("en_US.UTF-8"),
        set_ntp(true),
    ]
}

pub fn get_datetime() -> ActionSpec {
    ActionSpec {
        action_name: "GetDateTime",
        mechanism: command_mechanism("timedatectl", [""; 0]),
        risk_level: RiskLevel::Low,
        reboot_required: false,
        rollback_available: false,
    }
}

pub fn set_hostname(hostname: &str) -> ActionSpec {
    ActionSpec {
        action_name: "SetHostname",
        mechanism: command_mechanism("sudo", ["hostnamectl", "set-hostname", hostname]),
        risk_level: RiskLevel::Medium,
        reboot_required: false,
        rollback_available: false,
    }
}

pub fn set_timezone(timezone: &str) -> ActionSpec {
    ActionSpec {
        action_name: "SetTimezone",
        mechanism: command_mechanism("sudo", ["timedatectl", "set-timezone", timezone]),
        risk_level: RiskLevel::Medium,
        reboot_required: false,
        rollback_available: false,
    }
}

pub fn set_locale(locale: &str) -> ActionSpec {
    ActionSpec {
        action_name: "SetLocale",
        mechanism: command_mechanism("sudo", ["localectl", "set-locale", locale]),
        risk_level: RiskLevel::Medium,
        reboot_required: false,
        rollback_available: false,
    }
}

pub fn set_ntp(enabled: bool) -> ActionSpec {
    ActionSpec {
        action_name: "SetNtp",
        mechanism: command_mechanism(
            "sudo",
            [
                "timedatectl",
                "set-ntp",
                if enabled { "true" } else { "false" },
            ],
        ),
        risk_level: RiskLevel::Medium,
        reboot_required: false,
        rollback_available: false,
    }
}