BusContainerInstance *instance = NULL;
DBusList *iter;
const char *path;
+ unsigned long uid;
if (!dbus_message_get_args (message, error,
DBUS_TYPE_OBJECT_PATH, &path,
goto failed;
}
+ if (!dbus_connection_get_unix_user (connection, &uid))
+ {
+ dbus_set_error (error, DBUS_ERROR_FAILED,
+ "Unable to determine user ID of caller");
+ goto failed;
+ }
+
+ if (uid != instance->uid)
+ {
+ dbus_set_error (error, DBUS_ERROR_ACCESS_DENIED,
+ "User %lu cannot stop a container server started by "
+ "user %lu", uid, instance->uid);
+ goto failed;
+ }
+
bus_container_instance_ref (instance);
bus_container_instance_stop_listening (instance);
BusContainers *containers;
BusContainerInstance *instance = NULL;
const char *path;
+ unsigned long uid;
if (!dbus_message_get_args (message, error,
DBUS_TYPE_OBJECT_PATH, &path,
goto failed;
}
+ if (!dbus_connection_get_unix_user (connection, &uid))
+ {
+ dbus_set_error (error, DBUS_ERROR_FAILED,
+ "Unable to determine user ID of caller");
+ goto failed;
+ }
+
+ if (uid != instance->uid)
+ {
+ dbus_set_error (error, DBUS_ERROR_ACCESS_DENIED,
+ "User %lu cannot stop a container server started by "
+ "user %lu", uid, instance->uid);
+ goto failed;
+ }
+
bus_container_instance_ref (instance);
bus_container_instance_stop_listening (instance);
bus_container_instance_unref (instance);