removeRulesLocked deletes every rule we successfully added, converting each `-A` into `-D`. Missing rules (already removed) are ignored.
()
| 285 | // removeRulesLocked deletes every rule we successfully added, converting |
| 286 | // each `-A` into `-D`. Missing rules (already removed) are ignored. |
| 287 | func (b *Backend) removeRulesLocked() error { |
| 288 | var firstErr error |
| 289 | // Remove in reverse order. |
| 290 | for i := len(b.addedRules) - 1; i >= 0; i-- { |
| 291 | spec := append([]string{}, b.addedRules[i]...) |
| 292 | for j, s := range spec { |
| 293 | if s == "-A" { |
| 294 | spec[j] = "-D" |
| 295 | break |
| 296 | } |
| 297 | } |
| 298 | if err := runIptables(spec...); err != nil && firstErr == nil { |
| 299 | // Don't fail hard: rule might already be gone. |
| 300 | firstErr = fmt.Errorf("iptables delete %v: %w", spec, err) |
| 301 | } |
| 302 | } |
| 303 | b.addedRules = nil |
| 304 | return firstErr |
| 305 | } |
| 306 | |
| 307 | var iptablesPath = func() string { |
| 308 | if p, err := exec.LookPath("iptables"); err == nil { |
no test coverage detected