Skip to content

Commit 05c439d

Browse files
committed
OverrideImmutableRename() new file inherits immutable flag of old
When renaming a file using the OverrideImmutableRename() function, the immutable bit is temporarily removed from both the old and new (if it already exists). The immutable bit is then inherited from old to new file. Signed-off-by: Lars Erik Wik <lars.erik.wik@northern.tech>
1 parent dfec2a3 commit 05c439d

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

libpromises/override_fsattrs.c

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -168,22 +168,26 @@ bool OverrideImmutableRename(
168168
assert(old_filename != NULL);
169169
assert(new_filename != NULL);
170170

171-
bool is_immutable;
172-
FSAttrsResult res =
173-
TemporarilyClearImmutableBit(new_filename, override, &is_immutable);
171+
bool new_is_immutable;
172+
TemporarilyClearImmutableBit(new_filename, override, &new_is_immutable);
173+
174+
bool old_is_immutable;
175+
FSAttrsResult res_old = TemporarilyClearImmutableBit(
176+
old_filename, override, &old_is_immutable);
174177

175178
if (rename(old_filename, new_filename) == -1)
176179
{
177180
Log(LOG_LEVEL_ERR,
178-
"Failed to replace original file '%s' with copy '%s'",
181+
"Failed to replace original file '%s' with copy '%s': %s",
179182
new_filename,
180-
old_filename);
183+
old_filename,
184+
GetErrorStr());
181185
unlink(old_filename);
182186
return false;
183187
}
184188

185189
ResetTemporarilyClearedImmutableBit(
186-
new_filename, override, res, is_immutable);
190+
new_filename, override, res_old, old_is_immutable);
187191

188192
return true;
189193
}

0 commit comments

Comments
 (0)