|
@@ -309,19 +309,25 @@ impl<'dir> File<'dir> {
|
|
|
|
|
|
|
|
/// This file’s permissions, with flags for each bit.
|
|
/// This file’s permissions, with flags for each bit.
|
|
|
pub fn permissions(&self) -> f::Permissions {
|
|
pub fn permissions(&self) -> f::Permissions {
|
|
|
- let bits = self.metadata.permissions().mode();
|
|
|
|
|
|
|
+ let bits = self.metadata.mode();
|
|
|
let has_bit = |bit| { bits & bit == bit };
|
|
let has_bit = |bit| { bits & bit == bit };
|
|
|
|
|
|
|
|
f::Permissions {
|
|
f::Permissions {
|
|
|
user_read: has_bit(modes::USER_READ),
|
|
user_read: has_bit(modes::USER_READ),
|
|
|
user_write: has_bit(modes::USER_WRITE),
|
|
user_write: has_bit(modes::USER_WRITE),
|
|
|
user_execute: has_bit(modes::USER_EXECUTE),
|
|
user_execute: has_bit(modes::USER_EXECUTE),
|
|
|
|
|
+
|
|
|
group_read: has_bit(modes::GROUP_READ),
|
|
group_read: has_bit(modes::GROUP_READ),
|
|
|
group_write: has_bit(modes::GROUP_WRITE),
|
|
group_write: has_bit(modes::GROUP_WRITE),
|
|
|
group_execute: has_bit(modes::GROUP_EXECUTE),
|
|
group_execute: has_bit(modes::GROUP_EXECUTE),
|
|
|
|
|
+
|
|
|
other_read: has_bit(modes::OTHER_READ),
|
|
other_read: has_bit(modes::OTHER_READ),
|
|
|
other_write: has_bit(modes::OTHER_WRITE),
|
|
other_write: has_bit(modes::OTHER_WRITE),
|
|
|
other_execute: has_bit(modes::OTHER_EXECUTE),
|
|
other_execute: has_bit(modes::OTHER_EXECUTE),
|
|
|
|
|
+
|
|
|
|
|
+ sticky: has_bit(modes::STICKY),
|
|
|
|
|
+ setgid: has_bit(modes::SETGID),
|
|
|
|
|
+ setuid: has_bit(modes::SETUID),
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -437,12 +443,18 @@ mod modes {
|
|
|
pub const USER_READ: Mode = libc::S_IRUSR as Mode;
|
|
pub const USER_READ: Mode = libc::S_IRUSR as Mode;
|
|
|
pub const USER_WRITE: Mode = libc::S_IWUSR as Mode;
|
|
pub const USER_WRITE: Mode = libc::S_IWUSR as Mode;
|
|
|
pub const USER_EXECUTE: Mode = libc::S_IXUSR as Mode;
|
|
pub const USER_EXECUTE: Mode = libc::S_IXUSR as Mode;
|
|
|
|
|
+
|
|
|
pub const GROUP_READ: Mode = libc::S_IRGRP as Mode;
|
|
pub const GROUP_READ: Mode = libc::S_IRGRP as Mode;
|
|
|
pub const GROUP_WRITE: Mode = libc::S_IWGRP as Mode;
|
|
pub const GROUP_WRITE: Mode = libc::S_IWGRP as Mode;
|
|
|
pub const GROUP_EXECUTE: Mode = libc::S_IXGRP as Mode;
|
|
pub const GROUP_EXECUTE: Mode = libc::S_IXGRP as Mode;
|
|
|
|
|
+
|
|
|
pub const OTHER_READ: Mode = libc::S_IROTH as Mode;
|
|
pub const OTHER_READ: Mode = libc::S_IROTH as Mode;
|
|
|
pub const OTHER_WRITE: Mode = libc::S_IWOTH as Mode;
|
|
pub const OTHER_WRITE: Mode = libc::S_IWOTH as Mode;
|
|
|
pub const OTHER_EXECUTE: Mode = libc::S_IXOTH as Mode;
|
|
pub const OTHER_EXECUTE: Mode = libc::S_IXOTH as Mode;
|
|
|
|
|
+
|
|
|
|
|
+ pub const STICKY: Mode = libc::S_ISVTX as Mode;
|
|
|
|
|
+ pub const SETGID: Mode = libc::S_ISGID as Mode;
|
|
|
|
|
+ pub const SETUID: Mode = libc::S_ISUID as Mode;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|