1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//! Error definitions

use derive_more::{Display, From};
use std::{borrow::Cow, env, io, num};

/// Common errors of the `privsep` crate.
#[derive(Debug, Display, From)]
pub enum Error {
    #[display(fmt = "I/O error: {}", "_0")]
    IoError(io::Error),
    #[display(fmt = "Permission denied, must run as root")]
    PermissionDenied,
    #[display(fmt = "{}", "_0")]
    UnixError(nix::Error),
    #[display(fmt = "{:?}", "_0")]
    Error(&'static str),
    #[display(fmt = "{}", "_0")]
    InvalidArgument(num::ParseIntError),
    #[display(fmt = "Invalid process: {}", "_0")]
    #[from(ignore)]
    InvalidProcess(Cow<'static, str>),
    #[display(fmt = "Missing parent declaration")]
    MissingParent,
    #[display(fmt = "{}", "_0")]
    VarError(env::VarError),
    #[display(fmt = "{}", "_0")]
    JoinError(tokio::task::JoinError),
    #[display(fmt = "Username '{}' for dropping privileges not found", "_0")]
    UserNotFound(Cow<'static, str>),
    #[display(fmt = "Failed to drop privileges ({}) - {}", "_0", "_1")]
    Privdrop(&'static str, Box<dyn std::error::Error>),
    #[display(fmt = "General error: {}", "_0")]
    GeneralError(Box<dyn std::error::Error>),
    #[display(fmt = "Lost {}, terminated", "_0")]
    #[from(ignore)]
    Terminated(&'static str),
}

impl std::error::Error for Error {}