Files

52 lines
966 B
Go

package command
import (
"errors"
"fmt"
"os/exec"
"regexp"
"strings"
)
func checkingNFT(path string) error {
if path == "" {
return errors.New("path is empty")
}
cmd := exec.Command(path, "-V")
out, err := cmd.CombinedOutput()
if err != nil {
return errors.New("nftables not found")
}
lines := regexp.MustCompile("\r?\n").Split(strings.TrimSpace(string(out)), -1)
json := false
for index, line := range lines {
line = strings.TrimSpace(line)
if index == 0 {
if !strings.HasPrefix(line, "nftables") {
return errors.New("nftables not found")
}
continue
}
if strings.HasPrefix(line, "json:") && strings.HasSuffix(line, "yes") {
json = true
}
}
if !json {
return errors.New("nftables disabled json")
}
cmd = exec.Command(path, "list", "ruleset")
out, err = cmd.CombinedOutput()
if err != nil {
return fmt.Errorf("nftables is not available or not supported by the kernel: %s", string(out))
}
return nil
}