refractor(aa): move base rule & qualifier to their own file.
This commit is contained in:
parent
8bb6f07950
commit
8a8808194b
2 changed files with 108 additions and 100 deletions
108
pkg/aa/base.go
Normal file
108
pkg/aa/base.go
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
// apparmor.d - Full set of apparmor profiles
|
||||
// Copyright (C) 2021-2024 Alexandre Pujol <alexandre@pujol.io>
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
|
||||
package aa
|
||||
|
||||
import "strings"
|
||||
|
||||
type RuleBase struct {
|
||||
IsLineRule bool
|
||||
Comment string
|
||||
NoNewPrivs bool
|
||||
FileInherit bool
|
||||
Prefix string
|
||||
Padding string
|
||||
Optional bool
|
||||
}
|
||||
|
||||
|
||||
func newRuleFromLog(log map[string]string) RuleBase {
|
||||
fileInherit := false
|
||||
if log["operation"] == "file_inherit" {
|
||||
fileInherit = true
|
||||
}
|
||||
|
||||
noNewPrivs := false
|
||||
optional := false
|
||||
msg := ""
|
||||
switch log["error"] {
|
||||
case "-1":
|
||||
if strings.Contains(log["info"], "optional:") {
|
||||
optional = true
|
||||
msg = strings.Replace(log["info"], "optional: ", "", 1)
|
||||
} else {
|
||||
noNewPrivs = true
|
||||
}
|
||||
case "-13":
|
||||
ignoreProfileInfo := []string{"namespace", "disconnected path"}
|
||||
for _, info := range ignoreProfileInfo {
|
||||
if strings.Contains(log["info"], info) {
|
||||
break
|
||||
}
|
||||
}
|
||||
msg = log["info"]
|
||||
default:
|
||||
}
|
||||
|
||||
return RuleBase{
|
||||
IsLineRule: false,
|
||||
Comment: msg,
|
||||
NoNewPrivs: noNewPrivs,
|
||||
FileInherit: fileInherit,
|
||||
Optional: optional,
|
||||
}
|
||||
}
|
||||
|
||||
func (r RuleBase) Less(other any) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (r RuleBase) Equals(other any) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (r RuleBase) String() string {
|
||||
return renderTemplate("comment", r)
|
||||
}
|
||||
|
||||
type Qualifier struct {
|
||||
Audit bool
|
||||
AccessType string
|
||||
}
|
||||
|
||||
func newQualifierFromLog(log map[string]string) Qualifier {
|
||||
audit := false
|
||||
if log["apparmor"] == "AUDIT" {
|
||||
audit = true
|
||||
}
|
||||
return Qualifier{Audit: audit}
|
||||
}
|
||||
|
||||
func (r Qualifier) Less(other Qualifier) bool {
|
||||
if r.Audit != other.Audit {
|
||||
return r.Audit
|
||||
}
|
||||
return r.AccessType < other.AccessType
|
||||
}
|
||||
|
||||
func (r Qualifier) Equals(other Qualifier) bool {
|
||||
return r.Audit == other.Audit && r.AccessType == other.AccessType
|
||||
}
|
||||
|
||||
type All struct {
|
||||
RuleBase
|
||||
}
|
||||
|
||||
|
||||
func (r *All) Less(other any) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (r *All) Equals(other any) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (r *All) String() string {
|
||||
return renderTemplate(tokALL, r)
|
||||
}
|
||||
100
pkg/aa/rules.go
100
pkg/aa/rules.go
|
|
@ -7,7 +7,6 @@ package aa
|
|||
import (
|
||||
"reflect"
|
||||
"sort"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const (
|
||||
|
|
@ -50,102 +49,3 @@ func (r Rules) Sort() {
|
|||
return r[i].Less(r[j])
|
||||
})
|
||||
}
|
||||
|
||||
type RuleBase struct {
|
||||
IsLineRule bool
|
||||
Comment string
|
||||
NoNewPrivs bool
|
||||
FileInherit bool
|
||||
Prefix string
|
||||
Padding string
|
||||
Optional bool
|
||||
}
|
||||
|
||||
func newRuleFromLog(log map[string]string) RuleBase {
|
||||
fileInherit := false
|
||||
if log["operation"] == "file_inherit" {
|
||||
fileInherit = true
|
||||
}
|
||||
|
||||
noNewPrivs := false
|
||||
optional := false
|
||||
msg := ""
|
||||
switch log["error"] {
|
||||
case "-1":
|
||||
if strings.Contains(log["info"], "optional:") {
|
||||
optional = true
|
||||
msg = strings.Replace(log["info"], "optional: ", "", 1)
|
||||
} else {
|
||||
noNewPrivs = true
|
||||
}
|
||||
case "-13":
|
||||
ignoreProfileInfo := []string{"namespace", "disconnected path"}
|
||||
for _, info := range ignoreProfileInfo {
|
||||
if strings.Contains(log["info"], info) {
|
||||
break
|
||||
}
|
||||
}
|
||||
msg = log["info"]
|
||||
default:
|
||||
}
|
||||
|
||||
return RuleBase{
|
||||
IsLineRule: false,
|
||||
Comment: msg,
|
||||
NoNewPrivs: noNewPrivs,
|
||||
FileInherit: fileInherit,
|
||||
Optional: optional,
|
||||
}
|
||||
}
|
||||
|
||||
func (r RuleBase) Less(other any) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (r RuleBase) Equals(other any) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (r RuleBase) String() string {
|
||||
return renderTemplate("comment", r)
|
||||
}
|
||||
|
||||
type Qualifier struct {
|
||||
Audit bool
|
||||
AccessType string
|
||||
}
|
||||
|
||||
func newQualifierFromLog(log map[string]string) Qualifier {
|
||||
audit := false
|
||||
if log["apparmor"] == "AUDIT" {
|
||||
audit = true
|
||||
}
|
||||
return Qualifier{Audit: audit}
|
||||
}
|
||||
|
||||
func (r Qualifier) Less(other Qualifier) bool {
|
||||
if r.Audit != other.Audit {
|
||||
return r.Audit
|
||||
}
|
||||
return r.AccessType < other.AccessType
|
||||
}
|
||||
|
||||
func (r Qualifier) Equals(other Qualifier) bool {
|
||||
return r.Audit == other.Audit && r.AccessType == other.AccessType
|
||||
}
|
||||
|
||||
type All struct {
|
||||
RuleBase
|
||||
}
|
||||
|
||||
func (r *All) Less(other any) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (r *All) Equals(other any) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (r *All) String() string {
|
||||
return renderTemplate(tokALL, r)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue