gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:34:07 28 4
gpt4 key购买 nike

systemd 中的总线 API 221。当我在系统总线中请求一个对象的名称时,它会打印出一条错误消息“权限被拒绝”。我以 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。

关于linux - sd-bus API,sd_bus_request_name 返回权限被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32828468/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com