Díky, to byla správná stopa. Ještě mi to nějaké hodiny trvalo pročíst příslušné manuály a otestovat, ale upravené pravidlo funguje přesně jak má:
polkit.addRule(function(action, subject) {
if (action.id == "org.freedesktop.systemd1.manage-units" &&
RegExp('my-daemon@[A-Za-z0-9_-]+.service').test(action.lookup("unit")) === true &&
subject.user == "foo1") {
return polkit.Result.YES;
}
});
Podle manuálu by místo výpisu alfanumerických znaků mělo jít jen \w, ale to mi nefungovalo. Plus jsem to rozšířil o pomlčku. Je důležité si uvědomit, že RegExp je funkce sama o sobě a .test uprostřed řádku říká, aby porovnal vzor (v jednoduchých úvozovkách) s řetězcem, který dostane z výstupu následující funkce - v tomto případě se ptám na jméno služby. Zkoušel jsem všemožné varianty, většina nefungovala, asi se to dá udělat ještě jinak, přehledněji, ale tohle povolí přesně co chci a zatím se mi to nepovedlo oblbnout.