} else {
_cleanup_free_ char *target = NULL;
- if (type != EXEC_DIRECTORY_CONFIGURATION &&
+ if (EXEC_DIRECTORY_TYPE_SHALL_CHOWN(type) &&
readlink_and_make_absolute(p, &target) >= 0) {
_cleanup_free_ char *q = NULL, *q_resolved = NULL, *target_resolved = NULL;
if (r != -EEXIST)
goto fail;
- if (type == EXEC_DIRECTORY_CONFIGURATION) {
+ if (!EXEC_DIRECTORY_TYPE_SHALL_CHOWN(type)) {
struct stat st;
/* Don't change the owner/access mode of the configuration directory,
* directories. */
for (ExecDirectoryType t = 0; t < _EXEC_DIRECTORY_TYPE_MAX; t++) {
- if (t == EXEC_DIRECTORY_CONFIGURATION)
+
+ if (!EXEC_DIRECTORY_TYPE_SHALL_CHOWN(t))
continue;
if (!p->prefix[t])
if (!context->dynamic_user)
return false;
- if (type == EXEC_DIRECTORY_CONFIGURATION)
+ if (!EXEC_DIRECTORY_TYPE_SHALL_CHOWN(type))
return false;
if (type == EXEC_DIRECTORY_RUNTIME && context->runtime_directory_preserve_mode == EXEC_PRESERVE_NO)
return r;
/* Also remove private directories unconditionally. */
- if (t != EXEC_DIRECTORY_CONFIGURATION) {
+ if (EXEC_DIRECTORY_TYPE_SHALL_CHOWN(t)) {
j = path_join(prefix[t], "private", i->path);
if (!j)
return -ENOMEM;
_EXEC_DIRECTORY_TYPE_INVALID = -EINVAL,
} ExecDirectoryType;
+static inline bool EXEC_DIRECTORY_TYPE_SHALL_CHOWN(ExecDirectoryType t) {
+ /* Returns true for the ExecDirectoryTypes that we shall chown()ing for the user to. We do this for
+ * all of them, except for configuration */
+ return t >= 0 && t < _EXEC_DIRECTORY_TYPE_MAX && t != EXEC_DIRECTORY_CONFIGURATION;
+}
+
typedef struct ExecDirectoryItem {
char *path;
char **symlinks;