4bf7a84c96
Using {{if major}}{{if minor}} doesn't work as expected when the major version changes. In addition, this didn't support patch levels (which is necessary in some cases when distributions ship apparmor weirdly). Signed-off-by: Aleksa Sarai <asarai@suse.com>
56 lines
1.1 KiB
Go
56 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"path"
|
|
"text/template"
|
|
|
|
"github.com/docker/docker/pkg/aaparser"
|
|
)
|
|
|
|
type profileData struct {
|
|
Version int
|
|
}
|
|
|
|
func main() {
|
|
if len(os.Args) < 2 {
|
|
log.Fatal("pass a filename to save the profile in.")
|
|
}
|
|
|
|
// parse the arg
|
|
apparmorProfilePath := os.Args[1]
|
|
|
|
version, err := aaparser.GetVersion()
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
data := profileData{
|
|
Version: version,
|
|
}
|
|
fmt.Printf("apparmor_parser is of version %+v\n", data)
|
|
|
|
// parse the template
|
|
compiled, err := template.New("apparmor_profile").Parse(dockerProfileTemplate)
|
|
if err != nil {
|
|
log.Fatalf("parsing template failed: %v", err)
|
|
}
|
|
|
|
// make sure /etc/apparmor.d exists
|
|
if err := os.MkdirAll(path.Dir(apparmorProfilePath), 0755); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
f, err := os.OpenFile(apparmorProfilePath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer f.Close()
|
|
|
|
if err := compiled.Execute(f, data); err != nil {
|
|
log.Fatalf("executing template failed: %v", err)
|
|
}
|
|
|
|
fmt.Printf("created apparmor profile for version %+v at %q\n", data, apparmorProfilePath)
|
|
}
|