Snažím se přijít na to, jak napsat pravidlo polkit pro soubor šablony systemd. Pravidlo se spustí, když použiji skutečnou službu, která bude vytvořena ([email protected]
), ale ne, když vynechám řetězec identifikátoru instance ([email protected]
).
Zde je úplné pracovní pravidlo:
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);
});
Domnívám se, že bych mohl použít regex javascriptu pouze k seskupení řetězce mezi „@“ a „.service“, ale nemohu na to tak úplně přijít.
Můj poskytovatel vpn má mnoho možných serverů, z nichž každý má svou vlastní konfiguraci (na kterou odkazuje soubor šablony [email protected]), takže bych opravdu rád nemusel psát pravidlo polkit pro každou instanci šablony.
Díky moc!
Aktualizace:
Vyřešil jsem to podle mého tušení výše, pomocí regexu k testování souboru šablony. Je to možná nebezpečné?
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);
});