From e9a1a9a9eca36c9c4bc7adc6e2ea9995093404a6 Mon Sep 17 00:00:00 2001 From: Jessica Frazelle Date: Mon, 23 Nov 2015 15:41:18 -0800 Subject: [PATCH] check version for docker-default aa profile Signed-off-by: Jessica Frazelle --- aaparser/aaparser.go | 45 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 aaparser/aaparser.go diff --git a/aaparser/aaparser.go b/aaparser/aaparser.go new file mode 100644 index 0000000..23dda99 --- /dev/null +++ b/aaparser/aaparser.go @@ -0,0 +1,45 @@ +package aaparser + +import ( + "fmt" + "log" + "os/exec" + "strconv" + "strings" +) + +// GetVersion returns the major and minor version of apparmor_parser +func GetVersion() (int, int, error) { + // get the apparmor_version version + cmd := exec.Command("apparmor_parser", "--version") + + output, err := cmd.CombinedOutput() + if err != nil { + log.Fatalf("getting apparmor_parser version failed: %s (%s)", err, output) + } + + // parse the version from the output + // output is in the form of the following: + // AppArmor parser version 2.9.1 + // Copyright (C) 1999-2008 Novell Inc. + // Copyright 2009-2012 Canonical Ltd. + lines := strings.SplitN(string(output), "\n", 2) + words := strings.Split(lines[0], " ") + version := words[len(words)-1] + // split by major minor version + v := strings.Split(version, ".") + if len(v) < 2 { + return -1, -1, fmt.Errorf("parsing major minor version failed for %q", version) + } + + majorVersion, err := strconv.Atoi(v[0]) + if err != nil { + return -1, -1, err + } + minorVersion, err := strconv.Atoi(v[1]) + if err != nil { + return -1, -1, err + } + + return majorVersion, minorVersion, nil +}