Skip to content
Snippets Groups Projects
Verified Commit c4339731 authored by Nik | Klampfradler's avatar Nik | Klampfradler
Browse files

[Cache] Do not needlessly push euid around

parent b009c807
No related branches found
No related tags found
No related merge requests found
...@@ -54,6 +54,11 @@ impl Cache { ...@@ -54,6 +54,11 @@ impl Cache {
} }
fn drop_privileges(&self, username: &String) -> Result<uid_t, &str> { fn drop_privileges(&self, username: &String) -> Result<uid_t, &str> {
let current_euid;
unsafe {
current_euid = geteuid();
};
let nam = match CString::new(username.as_str()) { let nam = match CString::new(username.as_str()) {
Ok(nam) => nam, Ok(nam) => nam,
Err(_) => return Err("Invalid username in lookup") Err(_) => return Err("Invalid username in lookup")
...@@ -63,7 +68,7 @@ impl Cache { ...@@ -63,7 +68,7 @@ impl Cache {
target_euid = (*getpwnam(nam.as_ptr())).pw_uid; target_euid = (*getpwnam(nam.as_ptr())).pw_uid;
}; };
if target_euid == self.original_euid { if target_euid == current_euid {
debug!("No need to drop privileges, already running as {}", username); debug!("No need to drop privileges, already running as {}", username);
return Ok(self.original_euid); return Ok(self.original_euid);
} else if self.original_euid == 0 { } else if self.original_euid == 0 {
...@@ -85,9 +90,18 @@ impl Cache { ...@@ -85,9 +90,18 @@ impl Cache {
} }
fn restore_privileges(&self) { fn restore_privileges(&self) {
debug!("Restoring privileges"); let current_euid;
unsafe { unsafe {
seteuid(self.original_euid); current_euid = geteuid();
};
if current_euid != self.original_euid {
debug!("Restoring privileges");
unsafe {
seteuid(self.original_euid);
};
} else {
debug!("No need to restore privileges, already running as original user");
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment