X-Git-Url: https://glassweightruler.freedombox.rocks/gitweb/waydroid.git/blobdiff_plain/eabe5d6c3b31360a33621284f2dcc98e9d03b81d..ebe075c0d1a4924329386fd29341d08af1c59f33:/tools/actions/container_manager.py?ds=sidebyside diff --git a/tools/actions/container_manager.py b/tools/actions/container_manager.py index cbd6298..38b0040 100644 --- a/tools/actions/container_manager.py +++ b/tools/actions/container_manager.py @@ -22,13 +22,18 @@ class DbusContainerManager(dbus.service.Object): 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) - @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): @@ -128,7 +133,7 @@ def do_start(args, session): # 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"): @@ -166,7 +171,7 @@ def do_start(args, session): args.session = session -def stop(args): +def stop(args, quit_session=True): 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: - 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