]> glassweightruler.freedombox.rocks Git - waydroid.git/blobdiff - tools/actions/container_manager.py
session: Also log dbus connection exceptions
[waydroid.git] / tools / actions / container_manager.py
index cbd62988b6a0d61d8cc8a2b120287228fe2449d8..38b0040b92e07eee15a14b1af18545b1f7173c2f 100644 (file)
@@ -22,13 +22,18 @@ class DbusContainerManager(dbus.service.Object):
         self.looper = looper
         dbus.service.Object.__init__(self, bus, object_path)
 
         self.looper = looper
         dbus.service.Object.__init__(self, bus, object_path)
 
-    @dbus.service.method("id.waydro.ContainerManager", in_signature='a{ss}', out_signature='')
-    def Start(self, session):
+    @dbus.service.method("id.waydro.ContainerManager", in_signature='a{ss}', out_signature='', sender_keyword="sender", connection_keyword="conn")
+    def Start(self, session, sender, conn):
+        if session["user_id"] != "0":
+            dbus_info = dbus.Interface(conn.get_object("org.freedesktop.DBus", "/org/freedesktop/DBus/Bus", False), "org.freedesktop.DBus")
+            uid = dbus_info.GetConnectionUnixUser(sender)
+            if str(uid) != session["user_id"]:
+                raise RuntimeError("Cannot start a session on behalf of another user")
         do_start(self.args, session)
 
         do_start(self.args, session)
 
-    @dbus.service.method("id.waydro.ContainerManager", in_signature='', out_signature='')
-    def Stop(self):
-        stop(self.args)
+    @dbus.service.method("id.waydro.ContainerManager", in_signature='b', out_signature='')
+    def Stop(self, quit_session):
+        stop(self.args, quit_session)
 
     @dbus.service.method("id.waydro.ContainerManager", in_signature='', out_signature='')
     def Freeze(self):
 
     @dbus.service.method("id.waydro.ContainerManager", in_signature='', out_signature='')
     def Freeze(self):
@@ -128,7 +133,7 @@ def do_start(args, session):
     # Networking
     command = [tools.config.tools_src +
                "/data/scripts/waydroid-net.sh", "start"]
     # Networking
     command = [tools.config.tools_src +
                "/data/scripts/waydroid-net.sh", "start"]
-    tools.helpers.run.user(args, command, check=False)
+    tools.helpers.run.user(args, command)
 
     # Sensors
     if which("waydroid-sensord"):
 
     # Sensors
     if which("waydroid-sensord"):
@@ -166,7 +171,7 @@ def do_start(args, session):
 
     args.session = session
 
 
     args.session = session
 
-def stop(args):
+def stop(args, quit_session=True):
     try:
         services.hardware_manager.stop(args)
         status = helpers.lxc.status(args)
     try:
         services.hardware_manager.stop(args)
         status = helpers.lxc.status(args)
@@ -200,10 +205,11 @@ def stop(args):
         helpers.mount.umount_all(args, tools.config.defaults["data"])
 
         if "session" in args:
         helpers.mount.umount_all(args, tools.config.defaults["data"])
 
         if "session" in args:
-            try:
-                os.kill(int(args.session["pid"]), signal.SIGUSR1)
-            except:
-                pass
+            if quit_session:
+                try:
+                    os.kill(int(args.session["pid"]), signal.SIGUSR1)
+                except:
+                    pass
             del args.session
     except:
         pass
             del args.session
     except:
         pass