微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – sd-bus API,sd_bus_request_name返回Permission denied

systemd 221中的总线API.
当我在系统总线中请求对象的名称时,它会输出一个错误,说“权限被拒绝”.我以root身份运行输出文件.行“sd_bus_request_name(bus,”net.poettering.Calculator“,0)”抛出错误:“无法获取服务名称..:权限被拒绝”

我认为root应该有权获取对象的名称.有谁知道如何解决这个问题?

先感谢您.

以下是http://0pointer.net/blog/the-new-sd-bus-api-of-systemd.html的示例代码

int main(int argc, char *argv[]) {
sd_bus_slot *slot = NULL;
sd_bus *bus = NULL;
int r;

r = sd_bus_default_system(&bus);
if (r < 0) {
    fprintf(stderr, "Failed to connect to system bus: %s\n", strerror(-r));
    goto finish;
}

/* Install the object */
r = sd_bus_add_object_vtable(bus,
                             &slot,
                             "/net/poettering/Calculator",
                             "net.poettering.Calculator",   /* interface name                             */calculator_vtable,
                             NULL);
if (r < 0) {
    fprintf(stderr, "Failed to issue method call: %s\n", strerror(-r));
    goto finish;
}

/* Take a well-kNown service name so that clients can find us */
r = sd_bus_request_name(bus, "net.poettering.Calculator", 0);
if (r < 0) {
    fprintf(stderr, "Failed to acquire service name: %s\n", strerror(-r));
    goto finish;
} 

解决方法:

除明确允许外,典型的认D-Bus配置不允许注册服务.您需要允许root注册您的服务.创建/etc/dbus-1/system.d/net.poettering.Calculator.conf:

<!DOCTYPE busconfig PUBLIC
 "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
  <policy user="root">
    <allow own="net.poettering.Calculator"/>
  </policy>
</busconfig>

阅读man dbus-daemon了解详情.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐