| 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 |
| } |