summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2010-10-13 03:13:23 +0200
committerLennart Poettering <lennart@poettering.net>2010-10-13 03:13:23 +0200
commit560d8f23811162542c1748f711ea6dce269d2720 (patch)
tree30bd7488e08ad02714066b8cb617378805537511
parent2cccbca4fdf1cc6b46da105f6588a6bbdcbbb4df (diff)
systemctl: warn if user enables unit with no installation instructions
-rw-r--r--TODO2
-rw-r--r--src/systemctl.c33
2 files changed, 21 insertions, 14 deletions
diff --git a/TODO b/TODO
index e09d4d3e5e..bda29da583 100644
--- a/TODO
+++ b/TODO
@@ -36,8 +36,6 @@
* if a service fails too often, make the service enter failed mode, and the socket, too.
-* systemctl enable - warn about empty [Install] section
-
* bash completion a la gdbus
* systemctl list-jobs - show dependencies
diff --git a/src/systemctl.c b/src/systemctl.c
index a4a76558bd..671745b7d0 100644
--- a/src/systemctl.c
+++ b/src/systemctl.c
@@ -3227,6 +3227,7 @@ typedef struct {
static Hashmap *will_install = NULL, *have_installed = NULL;
static Set *remove_symlinks_to = NULL;
+static unsigned n_symlinks = 0;
static void install_info_free(InstallInfo *i) {
assert(i);
@@ -3759,6 +3760,9 @@ static int install_info_apply(const char *verb, LookupPaths *paths, InstallInfo
return r;
}
+ n_symlinks += strv_length(i->aliases);
+ n_symlinks += strv_length(i->wanted_by);
+
fclose(f);
if ((r = install_info_symlink_alias(verb, i, config_path)) != 0)
@@ -3859,19 +3863,24 @@ static int enable_unit(DBusConnection *bus, char **args, unsigned n) {
if (streq(verb, "is-enabled"))
r = r > 0 ? 0 : -ENOENT;
- else if (bus &&
- /* Don't try to reload anything if the user asked us to not do this */
- !arg_no_reload &&
- /* Don't try to reload anything when updating a unit globally */
- !arg_global &&
- /* Don't try to reload anything if we are called for system changes but the system wasn't booted with systemd */
- (arg_session || sd_booted() > 0) &&
- /* Don't try to reload anything if we are running in a chroot environment */
- (arg_session || running_in_chroot() <= 0) ) {
- int q;
+ else {
+ if (n_symlinks <= 0)
+ log_warning("Unit files contain no applicable installation information. Ignoring.");
+
+ if (bus &&
+ /* Don't try to reload anything if the user asked us to not do this */
+ !arg_no_reload &&
+ /* Don't try to reload anything when updating a unit globally */
+ !arg_global &&
+ /* Don't try to reload anything if we are called for system changes but the system wasn't booted with systemd */
+ (arg_session || sd_booted() > 0) &&
+ /* Don't try to reload anything if we are running in a chroot environment */
+ (arg_session || running_in_chroot() <= 0) ) {
+ int q;
- if ((q = daemon_reload(bus, args, n)) < 0)
- r = q;
+ if ((q = daemon_reload(bus, args, n)) < 0)
+ r = q;
+ }
}
finish: