首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sd-bus API,sd_bus_request_name返回权限被拒绝

sd-bus API,sd_bus_request_name返回权限被拒绝
EN

Stack Overflow用户
提问于 2015-09-29 01:17:45
回答 2查看 2.7K关注 0票数 5

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

我认为root应该拥有获取对象名称的权限。有人知道如何解决这个问题吗?

提前谢谢你。

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

代码语言:javascript
复制
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;
} 
EN

回答 2

Stack Overflow用户

发布于 2016-06-22 21:42:27

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

代码语言:javascript
复制
<!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。

票数 7
EN

Stack Overflow用户

发布于 2016-01-22 20:13:20

代码语言:javascript
复制
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;
    }
}
票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32828468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档