我正在尝试弄清楚如何为 systemd 模板文件编写 polkit 规则。当我使用将被实例化的实际服务 ( [email protected]
) 时,会触发该规则,但当我省略实例标识符字符串 ( [email protected]
) 时,不会触发该规则。
这是完整的工作规则:
polkit.addRule(function(action, subject) {
if ( action.id == "org.freedesktop.systemd1.manage-units") {
if (action.lookup("unit") == "[email protected]" && subject.isInGroup("wheel")) {
var verb = action.lookup("verb");
if (verb == "start" || verb == "stop" || verb == "restart") {
return polkit.Result.YES;
}
}
}
polkit.log("action=" + action);
polkit.log("subject=" + subject);
});
我的预感是我可以使用 javascript 正则表达式来将字符串放在“@”和“.service”之间,但我不太明白。
我的 VPN 提供商有许多可能的服务器,每个服务器都有自己的配置(由[电子邮件受保护]模板单元文件),所以我真的不想为模板的每个实例编写 polkit 规则。多谢!
更新:
我根据上面的预感解决了这个问题,使用正则表达式来测试模板文件。这也许不安全?
polkit.addRule(function(action, subject) {
if ( action.id == "org.freedesktop.systemd1.manage-units") {
var instance = /openvpn-client@[a-z]+.service/.test(action.lookup("unit"));
if ( instance === true && subject.isInGroup("wheel")) {
var verb = action.lookup("verb");
if (verb == "start" || verb == "stop" || verb == "restart") {
return polkit.Result.YES;
}
}
}
polkit.log("action=" + action);
polkit.log("subject=" + subject);
});