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):
args.session = session
-def stop(args):
+def stop(args, quit_session=True):
try:
services.hardware_manager.stop(args)
status = helpers.lxc.status(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