Estou tentando descobrir como escrever uma regra de polkit para um arquivo de modelo do systemd. A regra é acionada quando eu uso o serviço real que será instanciado ( [email protected]
), mas não quando deixo de fora a string identificadora da instância ( [email protected]
).
Aqui está a regra de trabalho 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);
});
Meu palpite é que eu poderia usar o regex javascript para apenas globar a string entre "@" e ".service", mas não consigo entender.
Meu provedor vpn tem muitos servidores possíveis, cada um com sua própria configuração (referenciada pelo arquivo de unidade de modelo openvpn-client @ .service), então eu realmente gostaria de não ter que escrever uma regra polkit para cada instância do modelo. Muito obrigado!
Atualização:
Eu resolvi isso de acordo com o meu palpite acima, usando o regex para testar o arquivo de modelo. Isso talvez seja inseguro?
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);
});