Ich versuche herauszufinden, wie man eine Polkit-Regel für eine systemd-Vorlagendatei schreibt. Die Regel wird ausgelöst, wenn ich den eigentlichen Dienst verwende, der instanziiert wird ([email protected]
), aber nicht, wenn ich die Zeichenfolge der Instanzkennung weglasse ([email protected]
).
Hier ist die vollständige Arbeitsregel:
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);
});
Meine Vermutung ist, dass ich Javascript-Regex verwenden könnte, um die Zeichenfolge einfach zwischen „@“ und „.service“ zu globbeln, aber ich kann es nicht ganz herausfinden.
Mein VPN-Anbieter hat viele mögliche Server, jeder mit seiner eigenen Konfiguration (auf die in der [E-Mail-geschützten] Vorlageneinheitendatei verwiesen wird), daher möchte ich wirklich nicht für jede Instanz der Vorlage eine Polkit-Regel schreiben müssen.
Vielen Dank!
Aktualisierung:
Ich habe dies gemäß meiner obigen Vermutung gelöst, indem ich Regex zum Testen der Vorlagendatei verwendet habe. Das ist vielleicht unsicher?
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);
});