| // Package capabilities allows to generically handle capabilities. | |
| package capabilities // import "github.com/docker/docker/pkg/capabilities" | |
| // Set represents a set of capabilities. | |
| type Set map[string]struct{} | |
| // Match tries to match set with caps, which is an OR list of AND lists of capabilities. | |
| // The matched AND list of capabilities is returned; or nil if none are matched. | |
| func (set Set) Match(caps [][]string) []string { | |
| if set == nil { | |
| return nil | |
| } | |
| anyof: | |
| for _, andList := range caps { | |
| for _, cap := range andList { | |
| if _, ok := set[cap]; !ok { | |
| continue anyof | |
| } | |
| } | |
| return andList | |
| } | |
| // match anything | |
| return nil | |
| } |