[systemd-devel] [PATCH] core: don't allow enabling if unit is masked

Lennart Poettering lennart at poettering.net
Wed Oct 8 02:54:19 PDT 2014


On Tue, 07.10.14 13:35, Jan Synacek (jsynacek at redhat.com) wrote:

> ---
>  src/shared/install.c | 13 +++++++++++++
>  1 file changed, 13 insertions(+)
> 
> diff --git a/src/shared/install.c b/src/shared/install.c
> index fa064c2..945bb27 100644
> --- a/src/shared/install.c
> +++ b/src/shared/install.c
> @@ -1516,6 +1516,19 @@ int unit_file_enable(
>                  return r;
>  
>          STRV_FOREACH(i, files) {
> +                UnitFileState state;
> +
> +                state = unit_file_get_state(scope, root_dir, *i);
> +                if (state < 0) {
> +                        log_error("Failed to get unit file state for %s: %s", *i, strerror(-state));
> +                        return state;
> +                }
> +
> +                if (state == UNIT_FILE_MASKED || state == UNIT_FILE_MASKED_RUNTIME) {
> +                        log_error("Failed to enable unit: Unit %s is masked", *i);
> +                        return -ENOTSUP;
> +                }
> +

Looks mostly OK. However, we should probably use a more useful error
here. Maybe EADDRNOTAVAIL or so. Even better though would be to
actually change the call to take an sd_bus_error argument and then
return a proper error message that can be passed back to the bus
clients with a real explanation.

Logging about this with log_error() is probably not a good idea.

Also, the same logic should be added to unit_file_link() and
unit_file_preset() I figure.

Lennart

-- 
Lennart Poettering, Red Hat


More information about the systemd-devel mailing list