in eks-distro-base/iptables-wrappers/main.go [48:93]
func main() {
ctx := context.Background()
sbinPath, err := iptables.DetectBinaryDir()
if err != nil {
fmt.Fprintf(os.Stderr, "Error: %s\n", err)
os.Exit(1)
}
// We use `xtables-<mode>-multi` binaries by default to inspect the installed rules,
// but this can be changed to directly use `iptables-<mode>-save` binaries.
mode := iptables.DetectMode(ctx, iptables.NewXtablesMultiInstallation(sbinPath))
// This re-executes the exact same command passed to this program
binaryPath := os.Args[0]
var args []string
if len(os.Args) > 1 {
args = os.Args[1:]
}
selector := iptables.BuildAlternativeSelector(sbinPath)
if err := selector.UseMode(ctx, mode); err != nil {
fmt.Fprintf(os.Stderr, "Unable to redirect iptables binaries. (Are you running in an unprivileged pod?): %s\n", err)
// fake it, though this will probably also fail if they aren't root
binaryPath = iptables.XtablesPath(sbinPath, mode)
args = os.Args
}
cmdIPTables := exec.CommandContext(ctx, binaryPath, args...)
cmdIPTables.Stdout = os.Stdout
cmdIPTables.Stderr = os.Stderr
if err := cmdIPTables.Run(); err != nil {
code := 1
var exitErr *exec.ExitError
if errors.As(err, &exitErr) {
code = exitErr.ExitCode()
} else {
// If it's not an ExitError, the command probably didn't finish and something
// else failed, which means it might not had outputted anything. In that case,
// print the error message just in case.
fmt.Fprintf(os.Stderr, "Error: %s\n", err)
}
os.Exit(code)
}
}