#!@RUBY@ -I@OPENDNSSEC_LIB_DIR@ # # $Id$ # # Copyright (c) 2009 Nominet UK. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE # GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER # IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN # IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # require 'kasp_auditor.rb' require 'optparse' require 'ostruct' include KASPAuditor class OptionsParser # # Return a structure describing the options. # def self.parse(args) # The options specified on the command line will be collected in *options*. # We set default values here. path = "@OPENDNSSEC_CONFIG_DIR@" options = OpenStruct.new options.enable_timeshift = @TIMESHIFT@ options.default_conf_file = path + "/conf.xml" options.zone_name = nil options.signed_temp = nil options.unsigned_file = nil options.force_full = false options.force_partial = false opts = OptionParser.new do |opts| opts.banner = "Usage: ods-auditor [options]" opts.separator "" opts.separator "Specific options:" # conf.xml opts.on("-c", "--conf [PATH_TO_CONF_FILE]", "Path to OpenDNSSEC configuration file", " (defaults to " + options.default_conf_file + ")") do |ext| options.conf_file = ext end # kasp.xml opts.on("-k", "--kasp [PATH_TO_KASP_FILE]", "Path to KASP policy file", " (defaults to the path given in the configuration file)") do |ext| options.kasp_file = ext end # zone_name opts.on("-z", "--zone [ZONE_NAME]", "Single zone to audit", " (defaults to audit all zones)") do |ext| options.zone_name = ext.chomp(".") end # signed_temp opts.on("-s", "--signed [PATH_TO_SIGNED_FILE]", "If a single zone is specified, then this option may override", " the specified signed file with another.", " (defaults to the path given in the zone list)") do |ext| options.signed_temp = ext end # unsigned_zone opts.on("-u", "--unsigned [PATH_TO_UNSIGNED_FILE]", "If a single zone is specified, then this option may override", " the specified unsigned file with another.", " (defaults to the path given in the zone list)") do |ext| options.unsigned_zone = ext end # Force full audit opts.on("-f", "--full", "Force a full audit") do |ff| options.force_full = ff end # Force partial audit opts.on("-p", "--partial", "Force a partial audit") do |fp| options.force_partial = fp end opts.on("-v", "--version", # Override default "Display version information") do |x| print "@VERSION@\n" exit(1) end opts.separator "" opts.separator "Common options:" # No argument, shows at tail. This will print an options summary. # Try it and see! opts.on_tail("-h", "-?", "--help", "Show this message") do puts opts exit(1) end end begin opts.parse!(args) rescue OptionParser::InvalidOption => e print "#{e}\n" puts opts exit(1) end options end # parse() end options = OptionsParser.parse(ARGV) runner = Runner.new if (options.conf_file) runner.conf_file = options.conf_file else runner.conf_file = options.default_conf_file end if (options.kasp_file) runner.kasp_file = options.kasp_file end if (options.zone_name) runner.zone_name = options.zone_name end if (options.signed_temp) runner.signed_temp = options.signed_temp end if (options.unsigned_zone) runner.unsigned_zone = options.unsigned_zone end if (options.enable_timeshift) runner.enable_timeshift = true end if (options.force_full && options.force_partial) print "Can't force both full and partial audits at once\n" exit(1) end if (options.force_full) runner.force_full elsif (options.force_partial) runner.force_partial end runner.working_folder = "@OPENDNSSEC_STATE_DIR@/tmp" runner.run()