#![deny(warnings)]
#![deny(clippy::complexity)]
#![deny(clippy::unwrap_used)]
#![deny(clippy::expect_used)]
#![deny(clippy::panic)]
#![deny(clippy::needless_pass_by_value)]
#![deny(clippy::trivially_copy_pass_by_ref)]
extern crate libc;
extern crate nix;
use snafu::Snafu;
pub mod ffi;
pub mod user;
pub mod group;
pub mod stdio;
pub mod daemon;
#[derive(Debug, Snafu)]
pub enum DaemonError {
UnsupportedOnOS,
Fork,
ChDir,
OpenDevNull,
CloseFp,
InvalidUser,
InvalidGroup,
InvalidUserGroupPair,
InvalidCstr,
InitGroups,
SetUid,
SetGid,
ChownPid,
OpenPid,
WritePid,
RedirectStream,
InvalidUmaskBits,
SetSid,
GetGrRecord,
GetPasswdRecord,
SetProcName,
InvalidProcName,
#[doc(hidden)]
__Nonexhaustive,
}
pub type Result<T> = std::result::Result<T, DaemonError>;
#[cfg(test)]
mod tests {
extern crate nix;
use std::convert::TryFrom;
use crate::daemon::Daemon;
use crate::user::User;
#[test]
fn test_uname_to_uid_resolution() {
let daemon = Daemon::new().user(User::try_from("root").unwrap());
assert!(daemon.user.is_some());
let uid = match daemon.user.unwrap() {
User::Id(id) => id,
};
assert_eq!(uid, 0)
}
}