diff --git a/src/cache.rs b/src/cache.rs
index b12bc6cc3a7e8e9290b4f05387331e7c2336b066..81f603ed1adcb2acc2eaf46690f3b4b8488bb998 100644
--- a/src/cache.rs
+++ b/src/cache.rs
@@ -54,6 +54,11 @@ impl Cache {
     }
 
     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()) {
             Ok(nam) => nam,
             Err(_) => return Err("Invalid username in lookup")
@@ -63,7 +68,7 @@ impl Cache {
             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);
             return Ok(self.original_euid);
         } else if self.original_euid == 0 {
@@ -85,9 +90,18 @@ impl Cache {
     }
 
     fn restore_privileges(&self) {
-        debug!("Restoring privileges");
+        let current_euid;
         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");
         }
     }