chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
unit: introduce 'banned' load state for units symlinked to /dev/null
[elogind.git]
/
src
/
systemctl.c
diff --git
a/src/systemctl.c
b/src/systemctl.c
index 1f2b43be032148a7f004af985100946115aa5924..4beec0fca594d950e6af805d4e1aabad85b64aec 100644
(file)
--- a/
src/systemctl.c
+++ b/
src/systemctl.c
@@
-31,6
+31,7
@@
#include <fcntl.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/socket.h>
#include <sys/stat.h>
+#include <stddef.h>
#include <dbus/dbus.h>
#include <dbus/dbus.h>
@@
-53,6
+54,7
@@
#include "exit-status.h"
#include "bus-errors.h"
#include "build.h"
#include "exit-status.h"
#include "bus-errors.h"
#include "build.h"
+#include "unit-name.h"
static const char *arg_type = NULL;
static char **arg_property = NULL;
static const char *arg_type = NULL;
static char **arg_property = NULL;
@@
-295,7
+297,8
@@
static void output_units_list(const struct unit_info *unit_infos, unsigned c) {
if (!output_show_job(u))
continue;
if (!output_show_job(u))
continue;
- if (!streq(u->load_state, "loaded")) {
+ if (!streq(u->load_state, "loaded") &&
+ !streq(u->load_state, "banned")) {
on_loaded = ansi_highlight(true);
off_loaded = ansi_highlight(false);
} else
on_loaded = ansi_highlight(true);
off_loaded = ansi_highlight(false);
} else
@@
-1626,7
+1629,8
@@
static void print_status_info(UnitStatusInfo *i) {
printf("\n");
printf("\n");
- if (streq_ptr(i->load_state, "failed")) {
+ if (streq_ptr(i->load_state, "failed") ||
+ streq_ptr(i->load_state, "banned")) {
on = ansi_highlight(true);
off = ansi_highlight(false);
} else
on = ansi_highlight(true);
off = ansi_highlight(false);
} else
@@
-3237,28
+3241,16
@@
static void install_info_hashmap_free(Hashmap *m) {
hashmap_free(m);
}
hashmap_free(m);
}
-static bool unit_name_valid(const char *name) {
-
- /* This is a minimal version of unit_name_valid() from
- * unit-name.c */
-
- if (!*name)
- return false;
-
- if (ignore_file(name))
- return false;
-
- return true;
-}
-
static int install_info_add(const char *name) {
InstallInfo *i;
int r;
assert(will_install);
static int install_info_add(const char *name) {
InstallInfo *i;
int r;
assert(will_install);
- if (!unit_name_valid(name))
+ if (!unit_name_is_valid_no_type(name)) {
+ log_warning("Unit name %s is not a valid unit name.", name);
return -EINVAL;
return -EINVAL;
+ }
if (hashmap_get(have_installed, name) ||
hashmap_get(will_install, name))
if (hashmap_get(have_installed, name) ||
hashmap_get(will_install, name))
@@
-3310,11
+3302,13
@@
static int config_parse_also(
if (!(n = strndup(w, l)))
return -ENOMEM;
if (!(n = strndup(w, l)))
return -ENOMEM;
- r = install_info_add(n);
- free(n);
-
- if (r < 0)
+ if ((r = install_info_add(n)) < 0) {
+ log_warning("Cannot install unit %s: %s", n, strerror(-r));
+ free(n);
return r;
return r;
+ }
+
+ free(n);
}
return 0;
}
return 0;
@@
-3639,7
+3633,7
@@
static int install_info_symlink_alias(const char *verb, InstallInfo *i, const ch
STRV_FOREACH(s, i->aliases) {
STRV_FOREACH(s, i->aliases) {
- if (!unit_name_
valid
(*s)) {
+ if (!unit_name_
is_valid_no_type
(*s)) {
log_error("Invalid name %s.", *s);
r = -EINVAL;
goto finish;
log_error("Invalid name %s.", *s);
r = -EINVAL;
goto finish;
@@
-3658,7
+3652,6
@@
static int install_info_symlink_alias(const char *verb, InstallInfo *i, const ch
if (streq(verb, "disable"))
rmdir_parents(alias_path, config_path);
}
if (streq(verb, "disable"))
rmdir_parents(alias_path, config_path);
}
-
r = 0;
finish:
r = 0;
finish:
@@
-3677,7
+3670,7
@@
static int install_info_symlink_wants(const char *verb, InstallInfo *i, const ch
assert(config_path);
STRV_FOREACH(s, i->wanted_by) {
assert(config_path);
STRV_FOREACH(s, i->wanted_by) {
- if (!unit_name_
valid
(*s)) {
+ if (!unit_name_
is_valid_no_type
(*s)) {
log_error("Invalid name %s.", *s);
r = -EINVAL;
goto finish;
log_error("Invalid name %s.", *s);
r = -EINVAL;
goto finish;
@@
-3840,8
+3833,10
@@
static int enable_unit(DBusConnection *bus, char **args, unsigned n) {
}
for (j = 1; j < n; j++)
}
for (j = 1; j < n; j++)
- if ((r = install_info_add(args[j])) < 0)
+ if ((r = install_info_add(args[j])) < 0) {
+ log_warning("Cannot install unit %s: %s", args[j], strerror(-r));
goto finish;
goto finish;
+ }
while ((i = hashmap_first(will_install))) {
int q;
while ((i = hashmap_first(will_install))) {
int q;
@@
-4883,7
+4878,7
@@
static int send_shutdownd(usec_t t, char mode, bool warn, const char *message) {
zero(msghdr);
msghdr.msg_name = &sockaddr;
zero(msghdr);
msghdr.msg_name = &sockaddr;
- msghdr.msg_namelen =
sizeof(sa_family_t
) + 1 + sizeof("/org/freedesktop/systemd1/shutdownd") - 1;
+ msghdr.msg_namelen =
offsetof(struct sockaddr_un, sun_path
) + 1 + sizeof("/org/freedesktop/systemd1/shutdownd") - 1;
msghdr.msg_iov = &iovec;
msghdr.msg_iovlen = 1;
msghdr.msg_iov = &iovec;
msghdr.msg_iovlen = 1;