Sto cercando di capire come scrivere una regola polkit per un file modello systemd. La regola viene attivata quando utilizzo il servizio effettivo di cui verrà creata un'istanza ([email protected]
) ma non quando tralascio la stringa dell'identificatore dell'istanza ([email protected]
).
Ecco la regola di lavoro completa:
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);
});
La mia impressione è che potrei usare javascript regex per glob semplicemente la stringa tra "@" e ".service", ma non riesco proprio a capirlo.
Il mio provider VPN ha molti server possibili, ognuno con la propria configurazione (a cui fa riferimento il file dell'unità modello [email protected]), quindi mi piacerebbe davvero non dover scrivere una regola polkit per ogni istanza del modello.
Grazie mille!
Aggiornamento:
L'ho risolto secondo la mia impressione sopra, usando regex per testare il file modello. Forse non è sicuro?
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);
});