| //! Manipulate securebits flags. |
| //! |
| //! This module exposes methods to get and set per-thread securebits |
| //! flags, which can be used to disable special handling of capabilities |
| //! for UID 0 (root). |
| |
| use crate::errors::CapsError; |
| use crate::nr; |
| use std::io::Error; |
| |
| /// Return whether the current thread's "keep capabilities" flag is set. |
| pub fn has_keepcaps() -> Result<bool, CapsError> { |
| let ret = unsafe { libc::prctl(nr::PR_GET_KEEPCAPS, 0, 0, 0) }; |
| match ret { |
| 0 => Ok(false), |
| 1 => Ok(true), |
| _ => Err(CapsError::from(format!( |
| "PR_GET_KEEPCAPS failure: {}", |
| Error::last_os_error() |
| ))), |
| } |
| } |
| |
| /// Set the value of the current thread's "keep capabilities" flag. |
| pub fn set_keepcaps(keep_caps: bool) -> Result<(), CapsError> { |
| let flag = if keep_caps { 1 } else { 0 }; |
| let ret = unsafe { libc::prctl(nr::PR_SET_KEEPCAPS, flag, 0, 0) }; |
| match ret { |
| 0 => Ok(()), |
| _ => Err(CapsError::from(format!( |
| "PR_SET_KEEPCAPS failure: {}", |
| Error::last_os_error() |
| ))), |
| } |
| } |