X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flogin%2Flogind.c;h=229af714f808fe97e6d98e232356114808b237ba;hb=8caf9d6836c3ed5b7bb4c1ea8dea5241a634c298;hp=62f7914fec41d753633d9517a49dac3de4284357;hpb=8c8c43515cee56dfc2298998a9e5958308c46f99;p=elogind.git diff --git a/src/login/logind.c b/src/login/logind.c index 62f7914fe..229af714f 100644 --- a/src/login/logind.c +++ b/src/login/logind.c @@ -279,7 +279,7 @@ int manager_add_user_by_name(Manager *m, const char *name, User **_user) { assert(m); assert(name); - r = get_user_creds(&name, &uid, &gid, NULL); + r = get_user_creds(&name, &uid, &gid, NULL, NULL); if (r < 0) return r; @@ -942,16 +942,12 @@ static int vt_is_busy(int vtnr) { int manager_spawn_autovt(Manager *m, int vtnr) { int r; - DBusMessage *message = NULL, *reply = NULL; char *name = NULL; const char *mode = "fail"; - DBusError error; assert(m); assert(vtnr >= 1); - dbus_error_init(&error); - if ((unsigned) vtnr > m->n_autovts) return 0; @@ -961,47 +957,26 @@ int manager_spawn_autovt(Manager *m, int vtnr) { else if (r > 0) return -EBUSY; - message = dbus_message_new_method_call("org.freedesktop.systemd1", "/org/freedesktop/systemd1", "org.freedesktop.systemd1.Manager", "StartUnit"); - if (!message) { - log_error("Could not allocate message."); - r = -ENOMEM; - goto finish; - } - if (asprintf(&name, "autovt@tty%i.service", vtnr) < 0) { log_error("Could not allocate service name."); r = -ENOMEM; goto finish; } - - if (!dbus_message_append_args(message, - DBUS_TYPE_STRING, &name, - DBUS_TYPE_STRING, &mode, - DBUS_TYPE_INVALID)) { - log_error("Could not attach target and flag information to message."); - r = -ENOMEM; - goto finish; - } - - reply = dbus_connection_send_with_reply_and_block(m->bus, message, -1, &error); - if (!reply) { - log_error("Failed to start unit: %s", bus_error_message(&error)); - goto finish; - } - - r = 0; + r = bus_method_call_with_reply ( + m->bus, + "org.freedesktop.systemd1", + "/org/freedesktop/systemd1", + "org.freedesktop.systemd1.Manager", + "StartUnit", + NULL, + NULL, + DBUS_TYPE_STRING, &name, + DBUS_TYPE_STRING, &mode, + DBUS_TYPE_INVALID); finish: free(name); - if (message) - dbus_message_unref(message); - - if (reply) - dbus_message_unref(reply); - - dbus_error_free(&error); - return r; } @@ -1020,10 +995,8 @@ int manager_get_session_by_cgroup(Manager *m, const char *cgroup, Session **sess } p = strdup(cgroup); - if (!p) { - log_error("Out of memory."); - return -ENOMEM; - } + if (!p) + return log_oom(); for (;;) { char *e; @@ -1061,10 +1034,8 @@ int manager_get_user_by_cgroup(Manager *m, const char *cgroup, User **user) { } p = strdup(cgroup); - if (!p) { - log_error("Out of memory."); - return -ENOMEM; - } + if (!p) + return log_oom(); for (;;) { char *e; @@ -1176,8 +1147,7 @@ static int manager_connect_bus(Manager *m) { !dbus_connection_register_fallback(m->bus, "/org/freedesktop/login1/session", &bus_session_vtable, m) || !dbus_connection_register_fallback(m->bus, "/org/freedesktop/login1/user", &bus_user_vtable, m) || !dbus_connection_add_filter(m->bus, bus_message_filter, m, NULL)) { - log_error("Not enough memory"); - r = -ENOMEM; + r = log_oom(); goto fail; } @@ -1244,6 +1214,12 @@ static int manager_connect_console(Manager *m) { m->console_active_fd = open("/sys/class/tty/tty0/active", O_RDONLY|O_NOCTTY|O_CLOEXEC); if (m->console_active_fd < 0) { + + /* On some systems the device node /dev/tty0 may exist + * even though /sys/class/tty/tty0 does not. */ + if (errno == ENOENT) + return 0; + log_error("Failed to open /sys/class/tty/tty0/active: %m"); return -errno; } @@ -1605,8 +1581,7 @@ int main(int argc, char *argv[]) { m = manager_new(); if (!m) { - log_error("Out of memory"); - r = -ENOMEM; + r = log_oom(); goto finish; }