Skip to content

Commit 270d85c

Browse files
committed
add overwrite option
1 parent 2cfb188 commit 270d85c

File tree

3 files changed

+22
-13
lines changed

3 files changed

+22
-13
lines changed

README.md

+5-3
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ An example Docker configuration for Unbound is provided in the `unbound/` direct
2222

2323
## Example
2424

25-
```
25+
```console
2626
./allxfr -dry-run
2727
ROOT g.root-servers.net. xfr size: 22017 records in 1.334s
2828
mr. ns-mr.nic.tn. (41.228.63.70) xfr size: 444 records in 337ms
@@ -51,7 +51,7 @@ sv. cir.red.sv. (168.243.254.1) xfr size: 1514 records in 883ms
5151

5252
## Usage
5353

54-
```
54+
```console
5555
Usage of ./allxfr:
5656
-dry-run
5757
only test if xfr is allowed by retrieving one envelope
@@ -61,6 +61,8 @@ Usage of ./allxfr:
6161
nameserver to use for manually querying of records not in zone file
6262
-out string
6363
directory to save found zones in (default "zones")
64+
-overwrite
65+
if zone already exists on disk, overwrite it with newer data
6466
-parallel uint
6567
number of parallel zone transfers to perform (default 10)
6668
-psl
@@ -77,6 +79,6 @@ Usage of ./allxfr:
7779

7880
## Building
7981

80-
```
82+
```console
8183
go build
8284
```

axfr.go

+6
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,12 @@ func axfrToFile(zone string, ip net.IP, nameserver string) (int64, error) {
146146
} else {
147147
filename = fmt.Sprintf("%s/%s.zone.gz", *saveDir, zone[:len(zone)-1])
148148
}
149+
if !*overwrite {
150+
if _, err := os.Stat(filename); err != nil && !os.IsNotExist(err) {
151+
return 0, nil
152+
}
153+
}
154+
149155
filenameTmp := fmt.Sprintf("%s.tmp", filename)
150156
var bufWriter *bufio.Writer
151157

main.go

+11-10
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,17 @@ import (
1212
)
1313

1414
var (
15-
parallel = flag.Uint("parallel", 10, "number of parallel zone transfers to perform")
16-
saveDir = flag.String("out", "zones", "directory to save found zones in")
17-
verbose = flag.Bool("verbose", false, "enable verbose output")
18-
zonefile = flag.String("zonefile", "", "use the provided zonefile instead of getting the root zonefile")
19-
ns = flag.String("ns", "", "nameserver to use for manually querying of records not in zone file")
20-
saveAll = flag.Bool("save-all", false, "attempt AXFR from every nameserver for a given zone and save all answers")
21-
psl = flag.Bool("psl", false, "attempt AXFR from zones listed in the public suffix list, requires -ns flag")
22-
ixfr = flag.Bool("ixfr", false, "attempt an IXFR instead of AXFR")
23-
dryRun = flag.Bool("dry-run", false, "only test if xfr is allowed by retrieving one envelope")
24-
retry = flag.Int("retry", 3, "number of times to retry failed operations")
15+
parallel = flag.Uint("parallel", 10, "number of parallel zone transfers to perform")
16+
saveDir = flag.String("out", "zones", "directory to save found zones in")
17+
verbose = flag.Bool("verbose", false, "enable verbose output")
18+
zonefile = flag.String("zonefile", "", "use the provided zonefile instead of getting the root zonefile")
19+
ns = flag.String("ns", "", "nameserver to use for manually querying of records not in zone file")
20+
saveAll = flag.Bool("save-all", false, "attempt AXFR from every nameserver for a given zone and save all answers")
21+
psl = flag.Bool("psl", false, "attempt AXFR from zones listed in the public suffix list, requires -ns flag")
22+
ixfr = flag.Bool("ixfr", false, "attempt an IXFR instead of AXFR")
23+
dryRun = flag.Bool("dry-run", false, "only test if xfr is allowed by retrieving one envelope")
24+
retry = flag.Int("retry", 3, "number of times to retry failed operations")
25+
overwrite = flag.Bool("overwrite", false, "if zone already exists on disk, overwrite it with newer data")
2526
)
2627

2728
var (

0 commit comments

Comments
 (0)