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プロバイダには、それぞれ独自の構成を持つ複数のサーバーがあります(提供:[Eメール保護]テンプレート単位のファイル) なので、テンプレートのすべてのインスタンスに対してフォールケットルールを作成したくありません。ありがとうございます!
修正する:
私は上記の予感に基づいて正規表現を使用してテンプレートファイルをテストしてこの問題を解決しました。おそらくこれは安全ではありませんか?
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);
});