main.go 918 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. package main
  2. import (
  3. "fmt"
  4. "log"
  5. "os"
  6. "path"
  7. "text/template"
  8. )
  9. type profileData struct{}
  10. func main() {
  11. if len(os.Args) < 2 {
  12. log.Fatal("pass a filename to save the profile in.")
  13. }
  14. // parse the arg
  15. apparmorProfilePath := os.Args[1]
  16. // parse the template
  17. compiled, err := template.New("apparmor_profile").Parse(dockerProfileTemplate)
  18. if err != nil {
  19. log.Fatalf("parsing template failed: %v", err)
  20. }
  21. // make sure /etc/apparmor.d exists
  22. if err := os.MkdirAll(path.Dir(apparmorProfilePath), 0o755); err != nil {
  23. log.Fatal(err)
  24. }
  25. f, err := os.OpenFile(apparmorProfilePath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0o644)
  26. if err != nil {
  27. log.Fatal(err)
  28. }
  29. defer f.Close()
  30. data := profileData{}
  31. if err := compiled.Execute(f, data); err != nil {
  32. log.Fatalf("executing template failed: %v", err)
  33. }
  34. fmt.Printf("created apparmor profile for version %+v at %q\n", data, apparmorProfilePath)
  35. }