diff options
| author | binarycat <binarycat@envs.net> | 2025-04-08 12:27:33 -0500 |
|---|---|---|
| committer | binarycat <binarycat@envs.net> | 2025-04-08 12:27:33 -0500 |
| commit | 8808d5a2b20e45f9947a3362a20383d8f5d29ef6 (patch) | |
| tree | 37762ee0e16a7d0f60a9f5e681c7a2f943442559 /library/std/src/fs.rs | |
| parent | ae9173d7dd4a31806c950c90dcc331f1508b4d17 (diff) | |
| download | rust-8808d5a2b20e45f9947a3362a20383d8f5d29ef6.tar.gz rust-8808d5a2b20e45f9947a3362a20383d8f5d29ef6.zip | |
std(docs): clarify how std::fs::set_permisions works with symlinks
fixes https://github.com/rust-lang/rust/issues/75942 fixes https://github.com/rust-lang/rust/issues/124201
Diffstat (limited to 'library/std/src/fs.rs')
| -rw-r--r-- | library/std/src/fs.rs | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/library/std/src/fs.rs b/library/std/src/fs.rs index 801baf3d990..1fe180066ce 100644 --- a/library/std/src/fs.rs +++ b/library/std/src/fs.rs @@ -2980,6 +2980,19 @@ pub fn read_dir<P: AsRef<Path>>(path: P) -> io::Result<ReadDir> { /// /// [changes]: io#platform-specific-behavior /// +/// # Symlinks +/// On UNIX systems, it is impossible to manipulate the permission bits of a symlink itself[^1]. +/// Because of this, on those 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 write a symlink in one directory allows you to +/// cause the permissions of another 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. +/// +/// [^1]: even if it were possible, the permissions on a symlink are ignored. /// # Errors /// /// This function will return an error in the following situations, but is not |
