Function set_permissions

1.1.0 · Source
pub fn set_permissions<P: AsRef<Path>>(path: P, perm: Permissions) -> Result<()>
Expand description

Changes the permissions found on a file or a directory.

§Platform-specific behavior

This function currently corresponds to the chmod function on Unix and the SetFileAttributes function on Windows. Note that, this may change in the future.

On UNIX-like systems, this function will update the permission bits of the file pointed to by the symlink.

Note that this behavior can lead to privalage escalation vulnerabilites, where the ability to create a symlink in one directory allows you to cause the permissions of another file or directory to be modified.

For this reason, using this function with symlinks should be avoided. When possible, permissions should be set at creation time instead.

§Rationale

POSIX does not specify an lchown function, and symlinks can be followed regardless of what permission bits are set.

§Errors

This function will return an error in the following situations, but is not limited to just these cases:

  • path does not exist.
  • The user lacks the permission to change attributes of the file.

§Examples

use std::fs;

fn main() -> std::io::Result<()> {
    let mut perms = fs::metadata("foo.txt")?.permissions();
    perms.set_readonly(true);
    fs::set_permissions("foo.txt", perms)?;
    Ok(())
}