mirror of
https://github.com/fish-shell/fish-shell
synced 2024-12-27 05:13:10 +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
|
else
|
||||||
{
|
{
|
||||||
wcstring new_name = history_filename(name, wcstring());
|
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))
|
if (0 > wrename(tmp_name, new_name))
|
||||||
{
|
{
|
||||||
debug(2, L"Error when renaming history file");
|
debug(2, L"Error when renaming history file");
|
||||||
|
|
Loading…
Reference in a new issue