-
Notifications
You must be signed in to change notification settings - Fork 3
/
sudo.rs
39 lines (31 loc) · 1.18 KB
/
sudo.rs
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
use std::env;
use std::process::Command;
use nix::unistd::{fork, ForkResult};
use lib::config::read_config;
use lib::errors::*;
use lib::init::init;
use lib::notifier;
pub fn handle_sudo() -> Result<()> {
let pam_type = env::var("PAM_TYPE")
.chain_err(|| "PAM_TYPE not set. If you are running this by `watchdog sudo`, please don't. It's an internal command, intended to be used by PAM.")?;
let pam_ruser = env::var("PAM_RUSER")
.chain_err(|| "PAM_RUSER not set. If you are running this by `watchdog sudo`, please don't. It's an internal command, intended to be used by PAM.")?;
if pam_type == "open_session" {
let config = read_config()?;
init(&config)?;
match fork() {
Ok(ForkResult::Parent { .. }) => {}
Ok(ForkResult::Child) => {
notifier::post_sudo_summary(&config, pam_ruser)?;
}
Err(_) => println!("Fork failed"),
}
}
Ok(())
}
pub fn handle_sudo_logs() {
Command::new("less")
.arg("/opt/watchdog/logs/sudo.logs")
.status()
.expect("Something went wrong. Is `less` command present in your environment?");
}