]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
core: when enabling a generated unit file, return a clean error
authorLennart Poettering <lennart@poettering.net>
Wed, 24 Feb 2016 15:02:48 +0000 (16:02 +0100)
committerLennart Poettering <lennart@poettering.net>
Tue, 12 Apr 2016 11:43:29 +0000 (13:43 +0200)
Let's be precise when the user tries to invoke an "enable" operation on a
generated unit file.

src/core/dbus-manager.c
src/libsystemd/sd-bus/bus-common-errors.c
src/libsystemd/sd-bus/bus-common-errors.h
src/shared/install.c
src/systemctl/systemctl.c

index 739bd14b9e7091299a46399ad0bb4a96873f3779..e187e19d03b6f1afdefb634f0ce86d18daaeb936 100644 (file)
@@ -1648,7 +1648,9 @@ static int method_enable_unit_files_generic(
 
         r = call(scope, runtime, NULL, l, force, &changes, &n_changes);
         if (r == -ESHUTDOWN)
-                return sd_bus_error_setf(error, BUS_ERROR_UNIT_MASKED, "Unit file is masked");
+                return sd_bus_error_setf(error, BUS_ERROR_UNIT_MASKED, "Unit file is masked.");
+        if (r == -EADDRNOTAVAIL)
+                return sd_bus_error_setf(error, BUS_ERROR_UNIT_GENERATED, "Unit file is generated.");
         if (r < 0)
                 return r;
 
@@ -1886,7 +1888,9 @@ static int method_add_dependency_unit_files(sd_bus_message *message, void *userd
 
         r = unit_file_add_dependency(scope, runtime, NULL, l, target, dep, force, &changes, &n_changes);
         if (r == -ESHUTDOWN)
-                return sd_bus_error_setf(error, BUS_ERROR_UNIT_MASKED, "Unit file is masked");
+                return sd_bus_error_setf(error, BUS_ERROR_UNIT_MASKED, "Unit file is masked.");
+        if (r == -EADDRNOTAVAIL)
+                return sd_bus_error_setf(error, BUS_ERROR_UNIT_GENERATED, "Unit file is generated.");
         if (r < 0)
                 return r;
 
index 6370061dafcc514e60d63480dc945edf281b9fca..f16878cd1a6c2fa0e69055588a6f975d33c236d8 100644 (file)
@@ -38,6 +38,7 @@ BUS_ERROR_MAP_ELF_REGISTER const sd_bus_error_map bus_common_errors[] = {
         SD_BUS_ERROR_MAP(BUS_ERROR_TRANSACTION_ORDER_IS_CYCLIC,  EDEADLK),
         SD_BUS_ERROR_MAP(BUS_ERROR_TRANSACTION_IS_DESTRUCTIVE,   EDEADLK),
         SD_BUS_ERROR_MAP(BUS_ERROR_UNIT_MASKED,                  ESHUTDOWN),
+        SD_BUS_ERROR_MAP(BUS_ERROR_UNIT_GENERATED,               EADDRNOTAVAIL),
         SD_BUS_ERROR_MAP(BUS_ERROR_JOB_TYPE_NOT_APPLICABLE,      EBADR),
         SD_BUS_ERROR_MAP(BUS_ERROR_NO_ISOLATION,                 EPERM),
         SD_BUS_ERROR_MAP(BUS_ERROR_SHUTTING_DOWN,                ECANCELED),
index 464834979a3e2918953893891f8299d6714cf532..c16605ba8722375ddf8a6bc0d6e951509a5c1473 100644 (file)
@@ -34,6 +34,7 @@
 #define BUS_ERROR_TRANSACTION_ORDER_IS_CYCLIC "org.freedesktop.systemd1.TransactionOrderIsCyclic"
 #define BUS_ERROR_TRANSACTION_IS_DESTRUCTIVE "org.freedesktop.systemd1.TransactionIsDestructive"
 #define BUS_ERROR_UNIT_MASKED "org.freedesktop.systemd1.UnitMasked"
+#define BUS_ERROR_UNIT_GENERATED "org.freedesktop.systemd1.UnitGenerated"
 #define BUS_ERROR_JOB_TYPE_NOT_APPLICABLE "org.freedesktop.systemd1.JobTypeNotApplicable"
 #define BUS_ERROR_NO_ISOLATION "org.freedesktop.systemd1.NoIsolation"
 #define BUS_ERROR_SHUTTING_DOWN "org.freedesktop.systemd1.ShuttingDown"
index 202d16e12944af36b5fb8470af4d0e83f6a9a40d..1e497d149291295016703f2470bce8a343e30db8 100644 (file)
@@ -1761,6 +1761,8 @@ int unit_file_add_dependency(
                 return r;
         if (target_info->type == UNIT_FILE_TYPE_MASKED)
                 return -ESHUTDOWN;
+        if (unit_file_is_generated(&paths, target_info->path))
+                return -EADDRNOTAVAIL;
 
         assert(target_info->type == UNIT_FILE_TYPE_REGULAR);
 
@@ -1772,6 +1774,8 @@ int unit_file_add_dependency(
                         return r;
                 if (i->type == UNIT_FILE_TYPE_MASKED)
                         return -ESHUTDOWN;
+                if (unit_file_is_generated(&paths, i->path))
+                        return -EADDRNOTAVAIL;
 
                 assert(i->type == UNIT_FILE_TYPE_REGULAR);
 
@@ -1830,6 +1834,8 @@ int unit_file_enable(
                         return r;
                 if (i->type == UNIT_FILE_TYPE_MASKED)
                         return -ESHUTDOWN;
+                if (unit_file_is_generated(&paths, i->path))
+                        return -EADDRNOTAVAIL;
 
                 assert(i->type == UNIT_FILE_TYPE_REGULAR);
         }
@@ -1957,6 +1963,8 @@ int unit_file_set_default(
                 return r;
         if (i->type == UNIT_FILE_TYPE_MASKED)
                 return -ESHUTDOWN;
+        if (unit_file_is_generated(&paths, i->path))
+                return -EADDRNOTAVAIL;
 
         path = strjoina(config_path, "/" SPECIAL_DEFAULT_TARGET);
 
@@ -2254,6 +2262,8 @@ static int preset_prepare_one(
 
                 if (i->type == UNIT_FILE_TYPE_MASKED)
                         return -ESHUTDOWN;
+                if (unit_file_is_generated(paths, i->path))
+                        return -EADDRNOTAVAIL;
         } else
                 r = install_info_discover(scope, minus, root_dir, paths, name, SEARCH_FOLLOW_CONFIG_SYMLINKS, &i);
 
index 6394b4749e510b7d1c23db5455e3491683cc3b94..4103a5da6d14b8599a2e1808376564b1ac7b5653 100644 (file)
@@ -5473,6 +5473,8 @@ static int enable_unit(int argc, char *argv[], void *userdata) {
 
                 if (r == -ESHUTDOWN)
                         return log_error_errno(r, "Unit file is masked.");
+                if (r == -EADDRNOTAVAIL)
+                        return log_error_errno(r, "Unit file is generated.");
                 if (r < 0)
                         return log_error_errno(r, "Operation failed: %m");
 
@@ -5639,6 +5641,8 @@ static int add_dependency(int argc, char *argv[], void *userdata) {
                 r = unit_file_add_dependency(arg_scope, arg_runtime, arg_root, names, target, dep, arg_force, &changes, &n_changes);
                 if (r == -ESHUTDOWN)
                         return log_error_errno(r, "Unit file is masked.");
+                if (r == -EADDRNOTAVAIL)
+                        return log_error_errno(r, "Unit file is generated.");
                 if (r < 0)
                         return log_error_errno(r, "Can't add dependency: %m");