使用 PolicyKit 进行身份认证(中)
PolicyKit 的运作流程 在上次的图中,我们可以看出 PolicyKit 运作过程中的几个要素:请求发出者(gnome-mount),请求目标(磁盘),请求的动作(挂载)。下面我们来看一下 PolicyKit 的运作流程。 图一:用户点击了磁盘图标,系统通过 DBus 发送请求给 HAL。 图二:HAL收到并验证请求(请求被包装在一个叫做 PolKitCaller 的对象中,包含 uid 、 pid 、会话标识符、会话是否为活动状态、是否远程、远程地址和其他可选信息),并据此构建了 PolKitCaller 对象,之后,HAL 会调用 libpolkit 中的函数 polkit_context_can_caller_do_action () ,并把以上两个结构体作为参数。 根据这个函数传递来的参数,系统会到 PolicyKit 的配置文件(关于配置文件,会在下次说明)中进行验证,根据配置文件的返回值和验证数据库中的内容决定是否允许请求的操作。 可能的返回值有三种:通过(POLKIT_RESULT_YES)、拒绝(POLKIT_RESULT_NO)、需要验证(POLKIT_RESULT_AUTH 系列)。返回值被包含在一个叫做 PolKitResult 的结构体中。 图三:当返回值不是 POLKIT_RESULT_YES 时,HAL 把这个返回值外加之前所请求的操作一起返回给请求者。 图四:如果返回值是 POLKIT_RESULT_AUTH 系列(例如...