systemctl: check if unit is masked in unit_find_paths()

When operating in client-side mode (force_client_side=true), unit_find_paths()
now checks if the unit file is masked (symlinked to /dev/null or empty) and
returns -ERFKILL, matching the behavior of the server-side path.

This centralizes masked unit detection in one place, making it consistent
across both client-side and server-side operations.
This commit is contained in:
gvenugo3
2025-11-11 09:55:59 -07:00
parent cedc98c581
commit 423a8ffccc

View File

@@ -29,6 +29,7 @@
#include "reboot-util.h"
#include "runtime-scope.h"
#include "set.h"
#include "stat-util.h"
#include "string-util.h"
#include "strv.h"
#include "systemctl.h"
@@ -589,6 +590,13 @@ int unit_find_paths(
return log_error_errno(r, "Failed to find fragment for '%s': %m", unit_name);
if (_path) {
/* Check if unit is masked (symlinked to /dev/null or empty) */
r = null_or_empty_path(_path);
if (r < 0)
return log_error_errno(r, "Failed to check if '%s' is masked: %m", unit_name);
if (r > 0)
return -ERFKILL; /* special case: no logging */
path = strdup(_path);
if (!path)
return log_oom();