Estoy tratando de descubrir cómo escribir una regla polkit para un archivo de plantilla systemd. La regla se activa cuando uso el servicio real que se instanciará ([email protected]
) pero no cuando omito la cadena del identificador de instancia ([email protected]
).
Aquí está la regla de trabajo 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);
});
Mi corazonada es que podría usar javascript regex para agregar la cadena entre "@" y ".service", pero no puedo resolverlo.
Mi proveedor de vpn tiene muchos servidores posibles, cada uno con su propia configuración (referenciada por el archivo de unidad de plantilla [email protected]), por lo que realmente me gustaría no tener que escribir una regla polkit para cada instancia de la plantilla.
¡Muchas gracias!
Actualización:
Resolví esto de acuerdo con mi corazonada anterior, usando expresiones regulares para probar el archivo de plantilla. ¿Quizás esto no es seguro?
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);
});