my $files = funiq(@ARGV);
+sub usage {
+ print <<"--EOT";
+valtz $VERSION - validate tinydns-data files
-if ($opt{h} || $opt{H} || $opt{'?'})
-{
- print <<"--EOT";
-valtz $VERSION
-validates tinydns-data zone files
Usage:
- $0 [-hfFqrRiItT] <file(s)>
-
- -h shows this help.
-
-
- -f filter (don't just validate) file and output accepted lines to STDOUT.
-
-
- -F treat files as filter configuration files for more advanced filtering.
- These filterfiles one or several of the following filter directives:
-
- zonefile <zonefilepath>
- zonefile file:<path to textfile including zonefilepaths>
- Defines the file(s) to be filtered. Can be a globbed value, like
- /var/zones/external/*
-
- extralog <logfile>
- Defines an extra logfile that the STDERR output will be copied for
- this specific filterfile. Useful if you have a lot of filterfiles
- and want to separate the logs.
-
- deny <zonepattern>
- deny file:<path to <zonepatternfile>
- Defines a zonepattern to explicitly DENY after implicitly allowing all.
- (cannot be combined with allow)
-
- allow <zonepattern>
- allow file:<path to <zonepatternfile>
- Defines a zonepattern to explicitly ALLOW after implicitly denying all.
-
- allowtype <recordtype character(s)>
- Explicitly sets the allowed recordtypes. Note that even comments
- has to be allowed (but these will not result in errors unless -t)
- to be copied to the output.
-
- Multiple zonefile, allow- and deny-lines are allowed, but also the
- alternative file:-line that points to a textfile containing one
- value per line.
-
-
- -r allows fqdn to be empty thus denoting the root.
- This is also allowed per default when doing implict allow - see deny,
- or when specifying 'allow .', i.e. explictly allowing root as such.
- (cannot be combined with deny)
-
-
- -R relaxes the validation and allows empty mname and p-fields.xi
- This is probably not very useful.
-
-
- -i allows the ip-fields to be empty as well. These will then not generate any
- records.
-
-
- -I Include rejected lines as comments in output (valid when filtering).
+ $0 [-r] [-R] [-i] tinydns-file1 [tinydns-file2...]
+ $0 [-HiIqrRst] [-T types] -f tinydns-file1 [tinydns-file2 ...]
- -q Do not echo valid lines to STDOUT.
+ $0 valtz [-fHiIqrRst] [-T types] -F filter-file1 [filter-file2 ...]
- -s DO NOT ignore files ending with ,v ~ .bak .log .old .swp .tmp
- which is done per default.
+Flags:
+ -h print usage information
+ -f filter invalid lines (filter mode)
+ -F filter using configuration files (advanced filter mode)
+ -r allow "fqdn" fields to be empty
+ -R allow "mname" and "p" fields to be empty
+ -i allow "ip" fields to be empty
+ -I include rejected lines as comments (filtering only)
+ -q don't print valid lines to standard out (filtering only)
+ -s don't skip temporary and backup files
+ -t don't ignore comment lines (filtering only)
+ -T <types> allow additional record types (advanced filtering only)
-
- -t Give error even on #comment-lines when they are not allowed.
- (These errors are silently ignored per default)
-
-
- -T<types>
- A commandline way to explicitly set the allowed recordtypes.
- This is _concatenated_ to the allowtype-allowed recordtypes.
-
-
-
-All errors in the zonefiles are sent to STDERR.
-
- Example; simple use:
- valtz zone-bodin-org
-
- Example; simple filter-use;
- valtz -f /etc/zones/zone-* \
- >/etc/tinydns/data.filtered \
- 2>/var/log/tinydns/valtz.log
-
- Example; filterfile use;
- valtz -F /etc/zones/filter/zones-otto \
- >/etc/tinydns/data.otto \
- 2>/var/log/tinydns/valtz.log
-
-
- Example filterfile for using as import from primary (as above):
- zonefile /var/zones/external/otto/zone-*
- deny bodin.org
- deny x42.com
- extralog /var/log/tinydns/external-otto.log
-
- Example #2, strict filter for a certain user editing just A-records
-
- zonefile /home/felix/zones/zone-fl3x-net
- allow fl3x.net
- allowtype +
- extralog /var/log/tinydns/fl3x-net.log
-
- Example #3, export filter to secondary
-
- zonefile /var/zones/primary/zone-*
- # just allow OUR zones to be exported, not to annoy secondary partner
- allow file:/var/zones/primary-zones.txt
- # don't allow any other types than this; e.g. comments won't be exported
- allowtype Z + @ . C
- extralog /var/log/tinydns/primary-export.log
+Errors are generally printed to standard error, and the exit code
+shall reflect the presense of both usage and validation errors. See
+the man page for details.
--EOT
- exit 0;
}
-elsif (@{$files} == 0)
-{
- print <<"--EOT";
-valtz $VERSION
-validates tinydns-data zone files
-Usage:
- Simple validation:
- $0 [-qrRix] <zonefiles>
- Simple filtering:
- $0 -f[qrRiItTx] <zonefiles>
- Extensive filtering:
- $0 -F[qrRiItTx] <zonefiles>
- More help and information about options:
- $0 -h
+if ($opt{h} || $opt{H} || $opt{'?'}) {
+ usage();
---EOT
+ # If they asked for help, ignore whatever else they may have done
+ # wrong.
exit 0;
}
+if (@{$files} == 0) {
+ usage();
+ exit 4;
+}
if ($opt{F})
{