bxcore, brokerd, loopd: an invalid-arguments denial says why
Co-Authored-By: ornith-1.5-35b-a3b <agent@wntrmute.dev>
This commit is contained in:
@@ -14,7 +14,7 @@ use std::os::unix::fs::PermissionsExt;
|
||||
use std::panic::AssertUnwindSafe;
|
||||
|
||||
use brokerd::ledger::{Call, Decided, Grants, NOT_RECORDED, POISONED, STOPPED};
|
||||
use brokerd::policy::{Label, SessionState};
|
||||
use brokerd::policy::{Denial, Label, SessionState};
|
||||
use build::{grant, now, read, set};
|
||||
use bxcore::{
|
||||
AuditEvent, CallId, DataClass, DecisionRecord, DenyReason, GrantProblem, Mode, ResultStatus,
|
||||
@@ -113,13 +113,25 @@ fn a_denial_names_a_grant_only_when_a_grant_denied() {
|
||||
let ledger = rig.ledger();
|
||||
let none = ledger.decide(read("/n/a"), &one(Vec::new()), now());
|
||||
assert!(
|
||||
matches!(none, Decided::Denied(DenyReason::NoGrant)),
|
||||
matches!(
|
||||
none,
|
||||
Decided::Denied(Denial {
|
||||
reason: DenyReason::NoGrant,
|
||||
..
|
||||
})
|
||||
),
|
||||
"{none:?}"
|
||||
);
|
||||
let deny = one(vec![grant("d", "read_file", Mode::Deny).paths(&["/n"])]);
|
||||
let by = ledger.decide(read("/n/a"), &deny, now());
|
||||
assert!(
|
||||
matches!(by, Decided::Denied(DenyReason::DeniedByGrant)),
|
||||
matches!(
|
||||
by,
|
||||
Decided::Denied(Denial {
|
||||
reason: DenyReason::DeniedByGrant,
|
||||
..
|
||||
})
|
||||
),
|
||||
"{by:?}"
|
||||
);
|
||||
let events = rig.events();
|
||||
@@ -162,12 +174,24 @@ fn invalid_grants_come_first_then_an_unreadable_state() {
|
||||
}]);
|
||||
let first = ledger.decide(read("/n/a"), &invalid, now());
|
||||
assert!(
|
||||
matches!(first, Decided::Denied(DenyReason::GrantsInvalid)),
|
||||
matches!(
|
||||
first,
|
||||
Decided::Denied(Denial {
|
||||
reason: DenyReason::GrantsInvalid,
|
||||
..
|
||||
})
|
||||
),
|
||||
"{first:?}"
|
||||
);
|
||||
let second = ledger.decide(read("/n/a"), ¬es(Mode::Auto), now());
|
||||
assert!(
|
||||
matches!(second, Decided::Denied(DenyReason::StateUnreadable)),
|
||||
matches!(
|
||||
second,
|
||||
Decided::Denied(Denial {
|
||||
reason: DenyReason::StateUnreadable,
|
||||
..
|
||||
})
|
||||
),
|
||||
"{second:?}"
|
||||
);
|
||||
// A state brokerd cannot read is recorded as the most sensitive one.
|
||||
@@ -190,7 +214,13 @@ fn a_failed_append_denies_this_call_and_every_later_one() {
|
||||
rig.switch.fail(true);
|
||||
let first = ledger.decide(read("/n/a"), ¬es(Mode::Auto), now());
|
||||
assert!(
|
||||
matches!(first, Decided::Denied(DenyReason::AuditUnavailable)),
|
||||
matches!(
|
||||
first,
|
||||
Decided::Denied(Denial {
|
||||
reason: DenyReason::AuditUnavailable,
|
||||
..
|
||||
})
|
||||
),
|
||||
"{first:?}"
|
||||
);
|
||||
assert_eq!(rig.switch.attempts(), 1);
|
||||
@@ -198,7 +228,13 @@ fn a_failed_append_denies_this_call_and_every_later_one() {
|
||||
rig.switch.fail(false);
|
||||
let later = ledger.decide(read("/n/a"), ¬es(Mode::Auto), now());
|
||||
assert!(
|
||||
matches!(later, Decided::Denied(DenyReason::AuditUnavailable)),
|
||||
matches!(
|
||||
later,
|
||||
Decided::Denied(Denial {
|
||||
reason: DenyReason::AuditUnavailable,
|
||||
..
|
||||
})
|
||||
),
|
||||
"{later:?}"
|
||||
);
|
||||
let finished = ledger.finish(&call(secret()), result("x", secret()), now());
|
||||
@@ -233,7 +269,13 @@ fn a_panic_while_holding_the_ledger_denies_every_later_call() {
|
||||
assert!(panicked.is_err());
|
||||
let later = ledger.decide(read("/n/a"), ¬es(Mode::Auto), now());
|
||||
assert!(
|
||||
matches!(later, Decided::Denied(DenyReason::AuditUnavailable)),
|
||||
matches!(
|
||||
later,
|
||||
Decided::Denied(Denial {
|
||||
reason: DenyReason::AuditUnavailable,
|
||||
..
|
||||
})
|
||||
),
|
||||
"{later:?}"
|
||||
);
|
||||
assert_eq!(rig.switch.attempts(), 1);
|
||||
|
||||
Reference in New Issue
Block a user