main: properly fallback to rescue.target if default.target is hosed

This commit is contained in:
Lennart Poettering 2010-08-17 20:42:53 +02:00
parent 7f17ef2201
commit 1c27d3f3fd
2 changed files with 8 additions and 5 deletions

4
fixme
View File

@ -1,9 +1,5 @@
* systemd.log_level=debug should overwrite 'quiet' ?
* implicit 'default.target' ?
systemd currently fails to boot when the link is dangling, like
after the move of the runlevel targets from /etc to /lib
* dot output for --test showing the 'initial transaction'
* check 'disable'

View File

@ -851,7 +851,6 @@ fail:
int main(int argc, char *argv[]) {
Manager *m = NULL;
Unit *target = NULL;
int r, retval = 1;
FDSet *fds = NULL;
bool reexecute = false;
@ -1004,6 +1003,7 @@ int main(int argc, char *argv[]) {
serialization = NULL;
} else {
DBusError error;
Unit *target = NULL;
dbus_error_init(&error);
@ -1012,12 +1012,19 @@ int main(int argc, char *argv[]) {
if ((r = manager_load_unit(m, arg_default_unit, NULL, &error, &target)) < 0) {
log_error("Failed to load default target: %s", bus_error(&error, r));
dbus_error_free(&error);
} else if (target->meta.load_state != UNIT_LOADED)
log_error("Failed to load default target: %s", strerror(-target->meta.load_error));
if (!target || target->meta.load_state != UNIT_LOADED) {
log_info("Trying to load rescue target...");
if ((r = manager_load_unit(m, SPECIAL_RESCUE_TARGET, NULL, &error, &target)) < 0) {
log_error("Failed to load rescue target: %s", bus_error(&error, r));
dbus_error_free(&error);
goto finish;
} else if (target->meta.load_state != UNIT_LOADED) {
log_error("Failed to load rescue target: %s", strerror(-target->meta.load_error));
goto finish;
}
}