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 = /[email protected][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);
});