mirror of
https://github.com/fish-shell/fish-shell
synced 2024-12-26 21:03:12 +00:00
Preserve existing file permissions when rewriting a history file
Fixes #2335
This commit is contained in:
parent
abeaac6632
commit
871a2088db
1 changed files with 14 additions and 0 deletions
|
@ -1443,6 +1443,20 @@ bool history_t::save_internal_via_rewrite()
|
|||
else
|
||||
{
|
||||
wcstring new_name = history_filename(name, wcstring());
|
||||
|
||||
/* Ensure we maintain the ownership and permissions of the original (#2355).
|
||||
* If the stat fails, we assume (hope) our default permissions are correct. This
|
||||
* corresponds to e.g. someone running sudo -E as the very first command. If they
|
||||
* did, it would be tricky to set the permissions correctly. (bash doesn't get this
|
||||
* case right either). */
|
||||
struct stat sbuf;
|
||||
if (wstat(new_name, &sbuf) >= 0)
|
||||
{
|
||||
/* Success */
|
||||
fchown(out_fd, sbuf.st_uid, sbuf.st_gid);
|
||||
fchmod(out_fd, sbuf.st_mode);
|
||||
}
|
||||
|
||||
if (0 > wrename(tmp_name, new_name))
|
||||
{
|
||||
debug(2, L"Error when renaming history file");
|
||||
|
|
Loading…
Reference in a new issue