Saya mencoba mencari cara untuk menulis aturan polkit untuk file template systemd. Aturan dipicu saat saya menggunakan layanan sebenarnya yang akan dipakai ([email protected]
) tetapi tidak ketika saya meninggalkan string pengenal instance ([email protected]
).
Berikut adalah aturan kerja lengkapnya:
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);
});
Firasat saya adalah bahwa saya dapat menggunakan regex javascript untuk hanya memasukkan string antara “@” dan “.service” tetapi saya tidak dapat mengetahuinya.
Penyedia vpn saya memiliki banyak kemungkinan server, masing-masing dengan konfigurasinya sendiri (direferensikan oleh file unit template [dilindungi email]), jadi saya benar-benar ingin tidak perlu menulis aturan polkit untuk setiap contoh template.
Terima kasih banyak!
Pembaruan:
Saya memecahkan ini sesuai dengan firasat saya di atas, menggunakan regex untuk menguji file template. Ini mungkin tidak aman?
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);
});