def fud.law
bend-osdev-apparmor@0.1.0.0 · PROOF.bend:3421
import bend-osdev-apparmor@0.1.0.0/PROOF.bend as PROOF
import Base
import bend-osdev-apparmor@0.1.0.0/perm.bend as P
import bend-osdev-apparmor@0.1.0.0/options.bend as O
import bend-osdev-apparmor@0.1.0.0/profile.bend as PR
import bend-osdev-apparmor@0.1.0.0/eval.bend as V
import bend-osdev-apparmor@0.1.0.0/rule_file.bend as F
import bend-osdev-apparmor@0.1.0.0/LAWS.bend as Laws
3421def fud.law(+opts: O.AaOptions, +p: PR.AaProfile, +q: F.AaFileQuery, +h1: {PR.AaMode.enforcing(PR.AaFlags.mode(PR.AaProfile.flags(p))) == True{} : Bool}, +h2: {F.AaFileRule.matching(PR.AaRules.files(PR.AaProfile.rules(p)), q) == Nil{} : List<&2, F.AaFileRule>}, +h3: {P.AaPerms.any(F.AaFileQuery.req(q)) == True{} : Bool}) -> {V.AaDecision.allowed(V.AaEval.file(opts, p, q)) == False{} : Bool}:
3422 match q:
3423 case F.AaFileQuery{path, owner, req}:
3424 %Equal.sym(List<&2, F.AaFileRule>, F.AaFileRule.matching(PR.AaRules.files(PR.AaProfile.rules(p)), F.AaFileQuery{path, owner, req}), Nil{}, h2) : {V.AaDecision.allowed(V.AaEval.decide(opts, PR.AaProfile.flags(p), req, F.AaFileRule.grants.of(_))) == False{} : Bool}
3425 Laws.unmatched_denied(opts, PR.AaProfile.flags(p), req, h1, h3)