Regra de Polkit para arquivos de unidade de modelo systemd

3

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);
});
    
por Worried in Denver 13.03.2017 / 04:15

0 respostas