From: Lennart Poettering Date: Thu, 4 Mar 2021 15:03:07 +0000 (+0100) Subject: rm-rf: fix up chmod in the _cleanup_ rm_rf() destructors X-Git-Tag: v248-rc3~60 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4d930e87ee30e74a585c840b4642157dd6321707;p=thirdparty%2Fsystemd.git rm-rf: fix up chmod in the _cleanup_ rm_rf() destructors REMOVE_CHMOD is necessary to remove files/dirs that are owned by us but have an access mode that would not allow us to remove them. In generic destructor calls for use with `_cleanup_` that are "fire-and-forget" style we should make use of that, to maximize the chance we can actually remove the files/dirs. (Also, add in REMOVE_MISSING_OK. Just because prettier, we ignore the return codes anyway, but it' a bit nicer to ignore a bit fewer errors.) --- diff --git a/src/basic/rm-rf.h b/src/basic/rm-rf.h index 6483b30d7e0..d954146a2eb 100644 --- a/src/basic/rm-rf.h +++ b/src/basic/rm-rf.h @@ -24,7 +24,7 @@ static inline char *rm_rf_physical_and_free(char *p) { if (!p) return NULL; - (void) rm_rf(p, REMOVE_ROOT|REMOVE_PHYSICAL); + (void) rm_rf(p, REMOVE_ROOT|REMOVE_PHYSICAL|REMOVE_MISSING_OK|REMOVE_CHMOD); free(p); return NULL; } @@ -37,7 +37,7 @@ static inline char *rm_rf_subvolume_and_free(char *p) { if (!p) return NULL; - (void) rm_rf(p, REMOVE_ROOT|REMOVE_PHYSICAL|REMOVE_SUBVOLUME); + (void) rm_rf(p, REMOVE_ROOT|REMOVE_PHYSICAL|REMOVE_SUBVOLUME|REMOVE_MISSING_OK|REMOVE_CHMOD); free(p); return NULL; }