main.go 1.1 KB

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