chiark / gitweb /
logind: return -EINVAL when PID is wrong
[elogind.git] / src / login / logind.c
index 89e4eeea16db1dbdcd8121bc32ff241d48bea839..8bf520a2db63d2b27d562c7088c71072ffe6bb92 100644 (file)
@@ -391,11 +391,21 @@ int manager_watch_busname(Manager *m, const char *name) {
 }
 
 void manager_drop_busname(Manager *m, const char *name) {
+        Session *session;
+        Iterator i;
         char *key;
 
         assert(m);
         assert(name);
 
+        if (!hashmap_get(m->busnames, name))
+                return;
+
+        /* keep it if the name still owns a controller */
+        HASHMAP_FOREACH(session, m->sessions, i)
+                if (session_is_controller(session, name))
+                        return;
+
         key = hashmap_remove(m->busnames, name);
         if (key)
                 free(key);
@@ -848,7 +858,7 @@ int manager_dispatch_vcsa_udev(Manager *m) {
          * VTs, to make sure our auto VTs never go away. */
 
         if (name && startswith(name, "vcsa") && streq_ptr(udev_device_get_action(d), "remove"))
-                r = seat_preallocate_vts(m->vtconsole);
+                r = seat_preallocate_vts(m->seat0);
 
         udev_device_unref(d);
 
@@ -873,9 +883,9 @@ int manager_dispatch_button_udev(Manager *m) {
 
 int manager_dispatch_console(Manager *m) {
         assert(m);
+        assert(m->seat0);
 
-        if (m->vtconsole)
-                seat_read_active_vt(m->vtconsole);
+        seat_read_active_vt(m->seat0);
 
         return 0;
 }
@@ -983,9 +993,11 @@ int manager_get_session_by_pid(Manager *m, pid_t pid, Session **session) {
         int r;
 
         assert(m);
-        assert(pid >= 1);
         assert(session);
 
+        if (pid < 1)
+                return -EINVAL;
+
         r = cg_pid_get_unit(pid, &unit);
         if (r < 0)
                 return r;
@@ -1004,9 +1016,11 @@ int manager_get_user_by_pid(Manager *m, pid_t pid, User **user) {
         int r;
 
         assert(m);
-        assert(pid >= 1);
         assert(user);
 
+        if (pid < 1)
+                return -EINVAL;
+
         r = cg_pid_get_slice(pid, &unit);
         if (r < 0)
                 return r;
@@ -1533,7 +1547,7 @@ int manager_startup(Manager *m) {
                 return r;
 
         /* Instantiate magic seat 0 */
-        r = manager_add_seat(m, "seat0", &m->vtconsole);
+        r = manager_add_seat(m, "seat0", &m->seat0);
         if (r < 0)
                 return r;