X-Git-Url: http://gitweb.michael.orlitzky.com/?p=valtz.git;a=blobdiff_plain;f=valtz;h=1b69a73dae233c2173f1e2d2273b62ac587e7c54;hp=5ee3750b3266c15d6c105f97e9e328a759c03130;hb=b34754a96be1e379c633f7a2ede92d6b2e131d18;hpb=bfd14fd6f3f1e793edc4a7ac1704f60e085e6f3a diff --git a/valtz b/valtz index 5ee3750..1b69a73 100755 --- a/valtz +++ b/valtz @@ -1,10 +1,8 @@ #!/usr/bin/perl # -# $Id: valtz,v 0.7 2003/07/10 16:39:30 magnus Exp $ -# # # -# Copyright (c) 2003, Magnus Bodin, , http://x42.com +# Copyright (c) 2020, the valtz authors # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -18,9 +16,9 @@ # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # -# Neither the name of Magnus Bodin, x42.com nor the names of its -# contributors may be used to endorse or promote products derived from -# this software without specific prior written permission. +# Neither the name of valtz nor the names of its contributors may be +# used to endorse or promote products derived from this software +# without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT @@ -48,12 +46,8 @@ my $VERSION = '0.8'; $| = 1; my %opt; -getopts('?fFhHiIqrRstT:', \%opt); - +getopts('?fFhHiIqrRtT:', \%opt); -my $FILESUFFIXREGEXP = '('.join('|', qw/ - ,v ~ .bak .log .old .swp .tmp - /).')$'; # Validation errors my $verrs_total = 0; @@ -729,11 +723,6 @@ sub do_filterfile ($$) } for my $zonefile (@zonefiles) { - unless ($opt{s}) - { - next if $zonefile =~ /$FILESUFFIXREGEXP/i; - } - my $info = 0; my $filehandle = \*STDIN; my $fopen = 1; @@ -895,147 +884,48 @@ sub do_filterfile ($$) 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] - - -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 - zonefile file: - Defines the file(s) to be filtered. Can be a globbed value, like - /var/zones/external/* - - extralog - 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 - deny file: - Defines a zonepattern to explicitly DENY after implicitly allowing all. - (cannot be combined with allow) - - allow - allow file: - Defines a zonepattern to explicitly ALLOW after implicitly denying all. - - allowtype - 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. - + $0 [-r] [-R] [-i] tinydns-file1 [tinydns-file2...] - -I Include rejected lines as comments in output (valid when filtering). + $0 [-HiIqrRt] [-T types] -f tinydns-file1 [tinydns-file2 ...] + $0 valtz [-fHiIqrRt] [-T types] -F filter-file1 [filter-file2 ...] - -q Do not echo valid lines to STDOUT. +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) + -t don't ignore comment lines (filtering only) + -T allow additional record types (advanced filtering only) - -s DO NOT ignore files ending with ,v ~ .bak .log .old .swp .tmp - which is done per default. - - - -t Give error even on #comment-lines when they are not allowed. - (These errors are silently ignored per default) - - - -T - 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] - Simple filtering: - $0 -f[qrRiItTx] - Extensive filtering: - $0 -F[qrRiItTx] - 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}) { @@ -1054,11 +944,6 @@ else for my $zonefile (sort @{$files}) { - unless ($opt{s}) - { - next if $zonefile =~ /$FILESUFFIXREGEXP/i; - } - my $filehandle = \*STDIN; my $fopen = 1; if ($zonefile ne '-')