1use crate::error::CSDError;
2use users::get_current_username;
3
4use std::process::Command;
5
6pub fn call_ceph(cmd: &str) -> Result<String, CSDError> {
7 debug!("calling ceph {} -f json", cmd);
8 let ceph = Command::new("/usr/bin/env")
9 .args(&["sh", "-c", &format!("ceph {} -f json", cmd)])
10 .output()?;
11 if ceph.status.success() {
12 let stdout = String::from_utf8(ceph.stdout)?;
13 trace!("ceph_cmd stdout: {}", stdout.trim_start());
14 Ok(stdout.trim_start().to_string())
15 } else {
16 let stderr = String::from_utf8(ceph.stderr)?;
17 Err(CSDError::CephExecError(stderr))
18 }
19}
20
21pub fn check_user() -> Result<(), CSDError> {
23 match get_current_username() {
24 Some(user) => {
25 let user = user.to_string_lossy();
26 match user.as_ref() {
27 "ceph" => Ok(()),
28 "root" => Ok(()),
29 _ => Err(CSDError::ExecError),
30 }
31 }
32 None => Err(CSDError::ExecError),
33 }
34}
35
36#[cfg(test)]
37mod tests {
38 use super::*;
39
40 #[test]
41 #[should_panic]
42 fn check_user_panic() {
43 assert!(check_user().is_ok());
44 }
45}