"Deps": [
{
"ImportPath": "github.com/coreos/go-iptables/iptables",
- "Rev": "90456be57fcb8185b264b77ce42a9539df42df25"
+ "Comment": "v0.1.0",
+ "Rev": "fbb73372b87f6e89951c2b6b31470c2c9d5cfae3"
},
{
"ImportPath": "github.com/coreos/go-systemd/activation",
"bytes"
"fmt"
"io"
- "log"
"os/exec"
"regexp"
"strconv"
path string
hasCheck bool
hasWait bool
-
- fmu *fileLock
}
func New() (*IPTables, error) {
}
checkPresent, waitPresent, err := getIptablesCommandSupport()
if err != nil {
- log.Printf("Error checking iptables version, assuming version at least 1.4.20: %v", err)
- checkPresent = true
- waitPresent = true
+ return nil, fmt.Errorf("error checking iptables version: %v", err)
}
ipt := IPTables{
path: path,
hasCheck: checkPresent,
hasWait: waitPresent,
}
- if !waitPresent {
- ipt.fmu, err = newXtablesFileLock()
- if err != nil {
- return nil, err
- }
- }
return &ipt, nil
}
}
cmd := append([]string{"-t", table, "-C", chain}, rulespec...)
err := ipt.run(cmd...)
+ eerr, eok := err.(*Error)
switch {
case err == nil:
return true, nil
- case err.(*Error).ExitStatus() == 1:
+ case eok && eerr.ExitStatus() == 1:
return false, nil
default:
return false, err
func (ipt *IPTables) ClearChain(table, chain string) error {
err := ipt.NewChain(table, chain)
+ eerr, eok := err.(*Error)
switch {
case err == nil:
return nil
- case err.(*Error).ExitStatus() == 1:
+ case eok && eerr.ExitStatus() == 1:
// chain already exists. Flush (clear) it.
return ipt.run("-t", table, "-F", chain)
default:
if ipt.hasWait {
args = append(args, "--wait")
} else {
- ul, err := ipt.fmu.tryLock()
+ fmu, err := newXtablesFileLock()
+ if err != nil {
+ return err
+ }
+ ul, err := fmu.tryLock()
if err != nil {
return err
}