summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2025-03-19 22:19:25 +0100
committerDavid Lönnhager <david.l@mullvad.net>2025-03-24 16:43:29 +0100
commit192b831c6799fdb6694ff3fd353f0faba6ac3f9e (patch)
treebadfde6c30dde02fc4f12d08f2e695601fc37e1f
parent85a07b3c58a246497f738bcbf15d2ff5b7d1b577 (diff)
downloadmullvadvpn-192b831c6799fdb6694ff3fd353f0faba6ac3f9e.tar.xz
mullvadvpn-192b831c6799fdb6694ff3fd353f0faba6ac3f9e.zip
Add test for is_admin_owned
-rw-r--r--talpid-windows/Cargo.toml7
-rw-r--r--talpid-windows/src/fs.rs31
2 files changed, 38 insertions, 0 deletions
diff --git a/talpid-windows/Cargo.toml b/talpid-windows/Cargo.toml
index 594e17f9ef..fae8c72949 100644
--- a/talpid-windows/Cargo.toml
+++ b/talpid-windows/Cargo.toml
@@ -30,3 +30,10 @@ features = [
"Win32_NetworkManagement_IpHelper",
"Win32_NetworkManagement_Ndis",
]
+
+[target.'cfg(windows)'.dev-dependencies.windows-sys]
+workspace = true
+features = [
+ "Win32_Storage",
+ "Win32_Storage_FileSystem"
+]
diff --git a/talpid-windows/src/fs.rs b/talpid-windows/src/fs.rs
index eb78efa963..51d714fe6d 100644
--- a/talpid-windows/src/fs.rs
+++ b/talpid-windows/src/fs.rs
@@ -45,3 +45,34 @@ pub fn is_admin_owned<T: AsRawHandle>(handle: T) -> io::Result<bool> {
Ok(is_system_owned || is_admin_owned)
}
+
+#[cfg(test)]
+mod test {
+ use std::os::windows::fs::OpenOptionsExt;
+ use windows_sys::Win32::Storage::FileSystem::FILE_FLAG_BACKUP_SEMANTICS;
+
+ use super::is_admin_owned;
+
+ #[test]
+ pub fn test_is_admin_owned() {
+ // The kernel image is owned by "TrustedInstaller", so we expect the function to return 'false'
+ let path = std::fs::File::open(r"C:\Windows\System32\ntoskrnl.exe").unwrap();
+ let result = is_admin_owned(path);
+ assert!(
+ matches!(result, Ok(false)),
+ "expected ntoskrnl.exe to be owned by TrustedInstaller (false), got {result:?}"
+ );
+
+ // The Windows system temp directory is owned by SYSTEM, so we expect 'true'
+ let path = std::fs::File::options()
+ .read(true)
+ .custom_flags(FILE_FLAG_BACKUP_SEMANTICS)
+ .open(r"C:\Windows\Temp")
+ .unwrap();
+ let result = is_admin_owned(path);
+ assert!(
+ matches!(result, Ok(true)),
+ "expected TEMP to be owned by SYSTEM (true), got {result:?}"
+ );
+ }
+}