]> gitweb.michael.orlitzky.com - valtz.git/blobdiff - valtz
Update copyright information in the LICENSE file and executable.
[valtz.git] / valtz
diff --git a/valtz b/valtz
index 5ee3750b3266c15d6c105f97e9e328a759c03130..1b69a73dae233c2173f1e2d2273b62ac587e7c54 100755 (executable)
--- a/valtz
+++ b/valtz
@@ -1,10 +1,8 @@
 #!/usr/bin/perl
 #
-# $Id: valtz,v 0.7 2003/07/10 16:39:30 magnus Exp $
-#
 # <BSD-license>
 #
-# Copyright (c) 2003, Magnus Bodin, <magnus@bodin.org>, 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] <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.
-
+ $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 <types>   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<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})
 {
@@ -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 '-')