X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Flogin%2Flogind-dbus.c;h=d8f4d89474642ef93fdac075508f66d17635838e;hp=7794ab917e4b95b3d987b257b0b97b7acd0d4542;hb=55efac6cbcea0d8edda9c6820620ceb390009e7a;hpb=6edd7ca1624f89c9a36067b721a0280e748acb17 diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c index 7794ab917..d8f4d8947 100644 --- a/src/login/logind-dbus.c +++ b/src/login/logind-dbus.c @@ -62,6 +62,7 @@ " \n" \ " \n" \ " \n" \ + " \n" \ " \n" \ " \n" \ " \n" \ @@ -222,11 +223,12 @@ static int bus_manager_append_idle_hint_since(DBusMessageIter *i, const char *pr static int bus_manager_create_session(Manager *m, DBusMessage *message, DBusMessage **_reply) { Session *session = NULL; User *user = NULL; - const char *type, *seat, *tty, *display, *remote_user, *remote_host, *service; + const char *type, *class, *seat, *tty, *display, *remote_user, *remote_host, *service; uint32_t uid, leader, audit_id = 0; dbus_bool_t remote, kill_processes; char **controllers = NULL, **reset_controllers = NULL; SessionType t; + SessionClass c; Seat *s; DBusMessageIter iter; int r; @@ -271,6 +273,17 @@ static int bus_manager_create_session(Manager *m, DBusMessage *message, DBusMess dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING) return -EINVAL; + dbus_message_iter_get_basic(&iter, &class); + if (isempty(class)) + c = SESSION_USER; + else + c = session_class_from_string(class); + + if (c < 0 || + !dbus_message_iter_next(&iter) || + dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_STRING) + return -EINVAL; + dbus_message_iter_get_basic(&iter, &seat); if (isempty(seat)) @@ -467,6 +480,7 @@ static int bus_manager_create_session(Manager *m, DBusMessage *message, DBusMess session->leader = leader; session->audit_id = audit_id; session->type = t; + session->class = c; session->remote = remote; session->controllers = controllers; session->reset_controllers = reset_controllers;