Skip to main content
QueryContext evaluates permissions against a snapshot of a CapabilitySet without applying the sandbox.
qc, err := nono.NewQueryContext(caps)
if err != nil {
	return err
}
defer qc.Close()
The capability set is cloned when the query context is created. Later changes to the original CapabilitySet do not affect existing query contexts.

Query path access

result, err := qc.QueryPath("/srv/app/data/input.json", nono.AccessRead)
if err != nil {
	return err
}

switch result.Status {
case nono.QueryAllowed:
	log.Println("allowed by", result.GrantedPath)
case nono.QueryDenied:
	log.Println("denied:", result.Reason.String())
}

Query network access

result, err := qc.QueryNetwork()
if err != nil {
	return err
}

log.Println(result.Status.String(), result.Reason.String())

Result fields

FieldMeaning
Statusnono.QueryAllowed or nono.QueryDenied
ReasonThe reason the operation was allowed or denied
GrantedPathFilesystem capability that granted access, when applicable
GrantedAccessHuman-readable access mode for the granting capability
ActualAccessAccess mode actually granted in insufficient-access cases
RequestedAccessAccess mode requested in insufficient-access cases
Reasons include ReasonGrantedPath, ReasonNetworkAllowed, ReasonPathNotGranted, ReasonInsufficientAccess, and ReasonNetworkBlocked.