diff options
author | Lennart Poettering <lennart@poettering.net> | 2012-04-22 02:30:13 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2012-04-22 02:41:18 +0200 |
commit | d1122ad5e3222cc17bfb556c23273598a5fb60fa (patch) | |
tree | 0deb6b39eb1130939d2ea27c06f02b878dd5e339 | |
parent | 337eebb936be1da1215535e866965ce54c82d755 (diff) |
login: assing /dev/console logins to seat0
-rw-r--r-- | src/login/logind-dbus.c | 13 | ||||
-rw-r--r-- | src/shared/util.c | 9 | ||||
-rw-r--r-- | src/shared/util.h | 1 |
3 files changed, 21 insertions, 2 deletions
diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c index b8143b6179..3fe6c872b7 100644 --- a/src/login/logind-dbus.c +++ b/src/login/logind-dbus.c @@ -351,16 +351,25 @@ static int bus_manager_create_session(Manager *m, DBusMessage *message, DBusMess vtnr = (uint32_t) v; else if (vtnr != (uint32_t) v) return -EINVAL; + } else if (tty_is_console(tty)) { + + if (!s) + s = m->vtconsole; + else if (s != m->vtconsole) + return -EINVAL; + + if (vtnr != 0) + return -EINVAL; } else if (!isempty(tty) && s && seat_is_vtconsole(s)) return -EINVAL; if (s) { if (seat_can_multi_session(s)) { - if (vtnr <= 0 || vtnr > 63) + if (vtnr > 63) return -EINVAL; } else { - if (vtnr > 0) + if (vtnr != 0) return -EINVAL; } } diff --git a/src/shared/util.c b/src/shared/util.c index 43948ccbd8..def576de21 100644 --- a/src/shared/util.c +++ b/src/shared/util.c @@ -4287,6 +4287,15 @@ bool tty_is_vc(const char *tty) { return vtnr_from_tty(tty) >= 0; } +bool tty_is_console(const char *tty) { + assert(tty); + + if (startswith(tty, "/dev/")) + tty += 5; + + return streq(tty, "console"); +} + int vtnr_from_tty(const char *tty) { int i, r; diff --git a/src/shared/util.h b/src/shared/util.h index 76bc7b3572..35ba0057d6 100644 --- a/src/shared/util.h +++ b/src/shared/util.h @@ -415,6 +415,7 @@ char *fstab_node_to_udev_node(const char *p); bool tty_is_vc(const char *tty); bool tty_is_vc_resolve(const char *tty); +bool tty_is_console(const char *tty); int vtnr_from_tty(const char *tty); const char *default_term_for_tty(const char *tty); |