Imported Upstream version 3.1.0
[debian/amanda] / perl / Amanda / Config.pm
index 0f136176088fd3ce0e6e2f4587b07852221f9459..79962b35431c60b3d6b931730dee7f3427a86caf 100644 (file)
@@ -49,8 +49,10 @@ sub this {
 
 package Amanda::Config;
 
 
 package Amanda::Config;
 
+*data_path_from_string = *Amanda::Configc::data_path_from_string;
 *getconf = *Amanda::Configc::getconf;
 *getconf_seen = *Amanda::Configc::getconf_seen;
 *getconf = *Amanda::Configc::getconf;
 *getconf_seen = *Amanda::Configc::getconf_seen;
+*getconf_linenum = *Amanda::Configc::getconf_linenum;
 *getconf_byname = *Amanda::Configc::getconf_byname;
 *getconf_list = *Amanda::Configc::getconf_list;
 *getconf_byname_strs = *Amanda::Configc::getconf_byname_strs;
 *getconf_byname = *Amanda::Configc::getconf_byname;
 *getconf_list = *Amanda::Configc::getconf_list;
 *getconf_byname_strs = *Amanda::Configc::getconf_byname_strs;
@@ -68,7 +70,6 @@ package Amanda::Config;
 *interface_seen = *Amanda::Configc::interface_seen;
 *lookup_holdingdisk = *Amanda::Configc::lookup_holdingdisk;
 *getconf_holdingdisks = *Amanda::Configc::getconf_holdingdisks;
 *interface_seen = *Amanda::Configc::interface_seen;
 *lookup_holdingdisk = *Amanda::Configc::lookup_holdingdisk;
 *getconf_holdingdisks = *Amanda::Configc::getconf_holdingdisks;
-*holdingdisk_next = *Amanda::Configc::holdingdisk_next;
 *holdingdisk_getconf = *Amanda::Configc::holdingdisk_getconf;
 *holdingdisk_name = *Amanda::Configc::holdingdisk_name;
 *holdingdisk_seen = *Amanda::Configc::holdingdisk_seen;
 *holdingdisk_getconf = *Amanda::Configc::holdingdisk_getconf;
 *holdingdisk_name = *Amanda::Configc::holdingdisk_name;
 *holdingdisk_seen = *Amanda::Configc::holdingdisk_seen;
@@ -98,15 +99,16 @@ package Amanda::Config;
 *config_print_errors = *Amanda::Configc::config_print_errors;
 *config_clear_errors = *Amanda::Configc::config_clear_errors;
 *config_errors = *Amanda::Configc::config_errors;
 *config_print_errors = *Amanda::Configc::config_print_errors;
 *config_clear_errors = *Amanda::Configc::config_clear_errors;
 *config_errors = *Amanda::Configc::config_errors;
-*new_config_overwrites = *Amanda::Configc::new_config_overwrites;
-*free_config_overwrites = *Amanda::Configc::free_config_overwrites;
-*add_config_overwrite = *Amanda::Configc::add_config_overwrite;
-*add_config_overwrite_opt = *Amanda::Configc::add_config_overwrite_opt;
-*apply_config_overwrites = *Amanda::Configc::apply_config_overwrites;
+*new_config_overrides = *Amanda::Configc::new_config_overrides;
+*free_config_overrides = *Amanda::Configc::free_config_overrides;
+*add_config_override = *Amanda::Configc::add_config_override;
+*add_config_override_opt = *Amanda::Configc::add_config_override_opt;
+*set_config_overrides = *Amanda::Configc::set_config_overrides;
 *dump_configuration = *Amanda::Configc::dump_configuration;
 *config_dir_relative = *Amanda::Configc::config_dir_relative;
 *taperalgo2str = *Amanda::Configc::taperalgo2str;
 *find_multiplier = *Amanda::Configc::find_multiplier;
 *dump_configuration = *Amanda::Configc::dump_configuration;
 *config_dir_relative = *Amanda::Configc::config_dir_relative;
 *taperalgo2str = *Amanda::Configc::taperalgo2str;
 *find_multiplier = *Amanda::Configc::find_multiplier;
+*C_string_to_boolean = *Amanda::Configc::C_string_to_boolean;
 
 # ------- VARIABLE STUBS --------
 
 
 # ------- VARIABLE STUBS --------
 
@@ -120,6 +122,7 @@ package Amanda::Config;
 *CNF_SSH_KEYS = *Amanda::Configc::CNF_SSH_KEYS;
 *CNF_AMANDAD_PATH = *Amanda::Configc::CNF_AMANDAD_PATH;
 *CNF_CLIENT_USERNAME = *Amanda::Configc::CNF_CLIENT_USERNAME;
 *CNF_SSH_KEYS = *Amanda::Configc::CNF_SSH_KEYS;
 *CNF_AMANDAD_PATH = *Amanda::Configc::CNF_AMANDAD_PATH;
 *CNF_CLIENT_USERNAME = *Amanda::Configc::CNF_CLIENT_USERNAME;
+*CNF_CLIENT_PORT = *Amanda::Configc::CNF_CLIENT_PORT;
 *CNF_GNUTAR_LIST_DIR = *Amanda::Configc::CNF_GNUTAR_LIST_DIR;
 *CNF_AMANDATES = *Amanda::Configc::CNF_AMANDATES;
 *CNF_MAILER = *Amanda::Configc::CNF_MAILER;
 *CNF_GNUTAR_LIST_DIR = *Amanda::Configc::CNF_GNUTAR_LIST_DIR;
 *CNF_AMANDATES = *Amanda::Configc::CNF_AMANDATES;
 *CNF_MAILER = *Amanda::Configc::CNF_MAILER;
@@ -131,6 +134,7 @@ package Amanda::Config;
 *CNF_CHANGERDEV = *Amanda::Configc::CNF_CHANGERDEV;
 *CNF_CHANGERFILE = *Amanda::Configc::CNF_CHANGERFILE;
 *CNF_LABELSTR = *Amanda::Configc::CNF_LABELSTR;
 *CNF_CHANGERDEV = *Amanda::Configc::CNF_CHANGERDEV;
 *CNF_CHANGERFILE = *Amanda::Configc::CNF_CHANGERFILE;
 *CNF_LABELSTR = *Amanda::Configc::CNF_LABELSTR;
+*CNF_AUTOLABEL = *Amanda::Configc::CNF_AUTOLABEL;
 *CNF_TAPELIST = *Amanda::Configc::CNF_TAPELIST;
 *CNF_DISKFILE = *Amanda::Configc::CNF_DISKFILE;
 *CNF_INFOFILE = *Amanda::Configc::CNF_INFOFILE;
 *CNF_TAPELIST = *Amanda::Configc::CNF_TAPELIST;
 *CNF_DISKFILE = *Amanda::Configc::CNF_DISKFILE;
 *CNF_INFOFILE = *Amanda::Configc::CNF_INFOFILE;
@@ -176,6 +180,7 @@ package Amanda::Config;
 *CNF_CONNECT_TRIES = *Amanda::Configc::CNF_CONNECT_TRIES;
 *CNF_REQ_TRIES = *Amanda::Configc::CNF_REQ_TRIES;
 *CNF_DEBUG_AMANDAD = *Amanda::Configc::CNF_DEBUG_AMANDAD;
 *CNF_CONNECT_TRIES = *Amanda::Configc::CNF_CONNECT_TRIES;
 *CNF_REQ_TRIES = *Amanda::Configc::CNF_REQ_TRIES;
 *CNF_DEBUG_AMANDAD = *Amanda::Configc::CNF_DEBUG_AMANDAD;
+*CNF_DEBUG_RECOVERY = *Amanda::Configc::CNF_DEBUG_RECOVERY;
 *CNF_DEBUG_AMIDXTAPED = *Amanda::Configc::CNF_DEBUG_AMIDXTAPED;
 *CNF_DEBUG_AMINDEXD = *Amanda::Configc::CNF_DEBUG_AMINDEXD;
 *CNF_DEBUG_AMRECOVER = *Amanda::Configc::CNF_DEBUG_AMRECOVER;
 *CNF_DEBUG_AMIDXTAPED = *Amanda::Configc::CNF_DEBUG_AMIDXTAPED;
 *CNF_DEBUG_AMINDEXD = *Amanda::Configc::CNF_DEBUG_AMINDEXD;
 *CNF_DEBUG_AMRECOVER = *Amanda::Configc::CNF_DEBUG_AMRECOVER;
@@ -194,6 +199,8 @@ package Amanda::Config;
 *CNF_RESERVED_UDP_PORT = *Amanda::Configc::CNF_RESERVED_UDP_PORT;
 *CNF_RESERVED_TCP_PORT = *Amanda::Configc::CNF_RESERVED_TCP_PORT;
 *CNF_UNRESERVED_TCP_PORT = *Amanda::Configc::CNF_UNRESERVED_TCP_PORT;
 *CNF_RESERVED_UDP_PORT = *Amanda::Configc::CNF_RESERVED_UDP_PORT;
 *CNF_RESERVED_TCP_PORT = *Amanda::Configc::CNF_RESERVED_TCP_PORT;
 *CNF_UNRESERVED_TCP_PORT = *Amanda::Configc::CNF_UNRESERVED_TCP_PORT;
+*CNF_HOLDINGDISK = *Amanda::Configc::CNF_HOLDINGDISK;
+*CNF_SEND_AMREPORT_ON = *Amanda::Configc::CNF_SEND_AMREPORT_ON;
 *TAPETYPE_COMMENT = *Amanda::Configc::TAPETYPE_COMMENT;
 *TAPETYPE_LBL_TEMPL = *Amanda::Configc::TAPETYPE_LBL_TEMPL;
 *TAPETYPE_BLOCKSIZE = *Amanda::Configc::TAPETYPE_BLOCKSIZE;
 *TAPETYPE_COMMENT = *Amanda::Configc::TAPETYPE_COMMENT;
 *TAPETYPE_LBL_TEMPL = *Amanda::Configc::TAPETYPE_LBL_TEMPL;
 *TAPETYPE_BLOCKSIZE = *Amanda::Configc::TAPETYPE_BLOCKSIZE;
@@ -210,8 +217,9 @@ package Amanda::Config;
 *DUMPTYPE_CLNT_ENCRYPT = *Amanda::Configc::DUMPTYPE_CLNT_ENCRYPT;
 *DUMPTYPE_AMANDAD_PATH = *Amanda::Configc::DUMPTYPE_AMANDAD_PATH;
 *DUMPTYPE_CLIENT_USERNAME = *Amanda::Configc::DUMPTYPE_CLIENT_USERNAME;
 *DUMPTYPE_CLNT_ENCRYPT = *Amanda::Configc::DUMPTYPE_CLNT_ENCRYPT;
 *DUMPTYPE_AMANDAD_PATH = *Amanda::Configc::DUMPTYPE_AMANDAD_PATH;
 *DUMPTYPE_CLIENT_USERNAME = *Amanda::Configc::DUMPTYPE_CLIENT_USERNAME;
+*DUMPTYPE_CLIENT_PORT = *Amanda::Configc::DUMPTYPE_CLIENT_PORT;
 *DUMPTYPE_SSH_KEYS = *Amanda::Configc::DUMPTYPE_SSH_KEYS;
 *DUMPTYPE_SSH_KEYS = *Amanda::Configc::DUMPTYPE_SSH_KEYS;
-*DUMPTYPE_SECURITY_DRIVER = *Amanda::Configc::DUMPTYPE_SECURITY_DRIVER;
+*DUMPTYPE_AUTH = *Amanda::Configc::DUMPTYPE_AUTH;
 *DUMPTYPE_EXCLUDE = *Amanda::Configc::DUMPTYPE_EXCLUDE;
 *DUMPTYPE_INCLUDE = *Amanda::Configc::DUMPTYPE_INCLUDE;
 *DUMPTYPE_PRIORITY = *Amanda::Configc::DUMPTYPE_PRIORITY;
 *DUMPTYPE_EXCLUDE = *Amanda::Configc::DUMPTYPE_EXCLUDE;
 *DUMPTYPE_INCLUDE = *Amanda::Configc::DUMPTYPE_INCLUDE;
 *DUMPTYPE_PRIORITY = *Amanda::Configc::DUMPTYPE_PRIORITY;
@@ -224,7 +232,7 @@ package Amanda::Config;
 *DUMPTYPE_BUMPMULT = *Amanda::Configc::DUMPTYPE_BUMPMULT;
 *DUMPTYPE_STARTTIME = *Amanda::Configc::DUMPTYPE_STARTTIME;
 *DUMPTYPE_STRATEGY = *Amanda::Configc::DUMPTYPE_STRATEGY;
 *DUMPTYPE_BUMPMULT = *Amanda::Configc::DUMPTYPE_BUMPMULT;
 *DUMPTYPE_STARTTIME = *Amanda::Configc::DUMPTYPE_STARTTIME;
 *DUMPTYPE_STRATEGY = *Amanda::Configc::DUMPTYPE_STRATEGY;
-*DUMPTYPE_ESTIMATE = *Amanda::Configc::DUMPTYPE_ESTIMATE;
+*DUMPTYPE_ESTIMATELIST = *Amanda::Configc::DUMPTYPE_ESTIMATELIST;
 *DUMPTYPE_COMPRESS = *Amanda::Configc::DUMPTYPE_COMPRESS;
 *DUMPTYPE_ENCRYPT = *Amanda::Configc::DUMPTYPE_ENCRYPT;
 *DUMPTYPE_SRV_DECRYPT_OPT = *Amanda::Configc::DUMPTYPE_SRV_DECRYPT_OPT;
 *DUMPTYPE_COMPRESS = *Amanda::Configc::DUMPTYPE_COMPRESS;
 *DUMPTYPE_ENCRYPT = *Amanda::Configc::DUMPTYPE_ENCRYPT;
 *DUMPTYPE_SRV_DECRYPT_OPT = *Amanda::Configc::DUMPTYPE_SRV_DECRYPT_OPT;
@@ -241,8 +249,9 @@ package Amanda::Config;
 *DUMPTYPE_IGNORE = *Amanda::Configc::DUMPTYPE_IGNORE;
 *DUMPTYPE_INDEX = *Amanda::Configc::DUMPTYPE_INDEX;
 *DUMPTYPE_APPLICATION = *Amanda::Configc::DUMPTYPE_APPLICATION;
 *DUMPTYPE_IGNORE = *Amanda::Configc::DUMPTYPE_IGNORE;
 *DUMPTYPE_INDEX = *Amanda::Configc::DUMPTYPE_INDEX;
 *DUMPTYPE_APPLICATION = *Amanda::Configc::DUMPTYPE_APPLICATION;
-*DUMPTYPE_PP_SCRIPTLIST = *Amanda::Configc::DUMPTYPE_PP_SCRIPTLIST;
+*DUMPTYPE_SCRIPTLIST = *Amanda::Configc::DUMPTYPE_SCRIPTLIST;
 *DUMPTYPE_PROPERTY = *Amanda::Configc::DUMPTYPE_PROPERTY;
 *DUMPTYPE_PROPERTY = *Amanda::Configc::DUMPTYPE_PROPERTY;
+*DUMPTYPE_DATA_PATH = *Amanda::Configc::DUMPTYPE_DATA_PATH;
 *INTER_COMMENT = *Amanda::Configc::INTER_COMMENT;
 *INTER_MAXUSAGE = *Amanda::Configc::INTER_MAXUSAGE;
 *HOLDING_COMMENT = *Amanda::Configc::HOLDING_COMMENT;
 *INTER_COMMENT = *Amanda::Configc::INTER_COMMENT;
 *INTER_MAXUSAGE = *Amanda::Configc::INTER_MAXUSAGE;
 *HOLDING_COMMENT = *Amanda::Configc::HOLDING_COMMENT;
@@ -257,6 +266,7 @@ package Amanda::Config;
 *PP_SCRIPT_PROPERTY = *Amanda::Configc::PP_SCRIPT_PROPERTY;
 *PP_SCRIPT_EXECUTE_ON = *Amanda::Configc::PP_SCRIPT_EXECUTE_ON;
 *PP_SCRIPT_EXECUTE_WHERE = *Amanda::Configc::PP_SCRIPT_EXECUTE_WHERE;
 *PP_SCRIPT_PROPERTY = *Amanda::Configc::PP_SCRIPT_PROPERTY;
 *PP_SCRIPT_EXECUTE_ON = *Amanda::Configc::PP_SCRIPT_EXECUTE_ON;
 *PP_SCRIPT_EXECUTE_WHERE = *Amanda::Configc::PP_SCRIPT_EXECUTE_WHERE;
+*PP_SCRIPT_ORDER = *Amanda::Configc::PP_SCRIPT_ORDER;
 *DEVICE_CONFIG_COMMENT = *Amanda::Configc::DEVICE_CONFIG_COMMENT;
 *DEVICE_CONFIG_TAPEDEV = *Amanda::Configc::DEVICE_CONFIG_TAPEDEV;
 *DEVICE_CONFIG_DEVICE_PROPERTY = *Amanda::Configc::DEVICE_CONFIG_DEVICE_PROPERTY;
 *DEVICE_CONFIG_COMMENT = *Amanda::Configc::DEVICE_CONFIG_COMMENT;
 *DEVICE_CONFIG_TAPEDEV = *Amanda::Configc::DEVICE_CONFIG_TAPEDEV;
 *DEVICE_CONFIG_DEVICE_PROPERTY = *Amanda::Configc::DEVICE_CONFIG_DEVICE_PROPERTY;
@@ -265,6 +275,8 @@ package Amanda::Config;
 *CHANGER_CONFIG_TPCHANGER = *Amanda::Configc::CHANGER_CONFIG_TPCHANGER;
 *CHANGER_CONFIG_CHANGERDEV = *Amanda::Configc::CHANGER_CONFIG_CHANGERDEV;
 *CHANGER_CONFIG_CHANGERFILE = *Amanda::Configc::CHANGER_CONFIG_CHANGERFILE;
 *CHANGER_CONFIG_TPCHANGER = *Amanda::Configc::CHANGER_CONFIG_TPCHANGER;
 *CHANGER_CONFIG_CHANGERDEV = *Amanda::Configc::CHANGER_CONFIG_CHANGERDEV;
 *CHANGER_CONFIG_CHANGERFILE = *Amanda::Configc::CHANGER_CONFIG_CHANGERFILE;
+*CHANGER_CONFIG_PROPERTY = *Amanda::Configc::CHANGER_CONFIG_PROPERTY;
+*CHANGER_CONFIG_DEVICE_PROPERTY = *Amanda::Configc::CHANGER_CONFIG_DEVICE_PROPERTY;
 *HOLD_NEVER = *Amanda::Configc::HOLD_NEVER;
 *HOLD_AUTO = *Amanda::Configc::HOLD_AUTO;
 *HOLD_REQUIRED = *Amanda::Configc::HOLD_REQUIRED;
 *HOLD_NEVER = *Amanda::Configc::HOLD_NEVER;
 *HOLD_AUTO = *Amanda::Configc::HOLD_AUTO;
 *HOLD_REQUIRED = *Amanda::Configc::HOLD_REQUIRED;
@@ -289,6 +301,10 @@ package Amanda::Config;
 *ES_CLIENT = *Amanda::Configc::ES_CLIENT;
 *ES_SERVER = *Amanda::Configc::ES_SERVER;
 *ES_CALCSIZE = *Amanda::Configc::ES_CALCSIZE;
 *ES_CLIENT = *Amanda::Configc::ES_CLIENT;
 *ES_SERVER = *Amanda::Configc::ES_SERVER;
 *ES_CALCSIZE = *Amanda::Configc::ES_CALCSIZE;
+*AL_OTHER_CONFIG = *Amanda::Configc::AL_OTHER_CONFIG;
+*AL_NON_AMANDA = *Amanda::Configc::AL_NON_AMANDA;
+*AL_VOLUME_ERROR = *Amanda::Configc::AL_VOLUME_ERROR;
+*AL_EMPTY = *Amanda::Configc::AL_EMPTY;
 *ALGO_FIRST = *Amanda::Configc::ALGO_FIRST;
 *ALGO_FIRSTFIT = *Amanda::Configc::ALGO_FIRSTFIT;
 *ALGO_LARGEST = *Amanda::Configc::ALGO_LARGEST;
 *ALGO_FIRST = *Amanda::Configc::ALGO_FIRST;
 *ALGO_FIRSTFIT = *Amanda::Configc::ALGO_FIRSTFIT;
 *ALGO_LARGEST = *Amanda::Configc::ALGO_LARGEST;
@@ -311,7 +327,10 @@ package Amanda::Config;
 *SEND_AMREPORT_STRANGE = *Amanda::Configc::SEND_AMREPORT_STRANGE;
 *SEND_AMREPORT_ERROR = *Amanda::Configc::SEND_AMREPORT_ERROR;
 *SEND_AMREPORT_NEVER = *Amanda::Configc::SEND_AMREPORT_NEVER;
 *SEND_AMREPORT_STRANGE = *Amanda::Configc::SEND_AMREPORT_STRANGE;
 *SEND_AMREPORT_ERROR = *Amanda::Configc::SEND_AMREPORT_ERROR;
 *SEND_AMREPORT_NEVER = *Amanda::Configc::SEND_AMREPORT_NEVER;
+*DATA_PATH_AMANDA = *Amanda::Configc::DATA_PATH_AMANDA;
+*DATA_PATH_DIRECTTCP = *Amanda::Configc::DATA_PATH_DIRECTTCP;
 *debug_amandad = *Amanda::Configc::debug_amandad;
 *debug_amandad = *Amanda::Configc::debug_amandad;
+*debug_recovery = *Amanda::Configc::debug_recovery;
 *debug_amidxtaped = *Amanda::Configc::debug_amidxtaped;
 *debug_amindexd = *Amanda::Configc::debug_amindexd;
 *debug_amrecover = *Amanda::Configc::debug_amrecover;
 *debug_amidxtaped = *Amanda::Configc::debug_amidxtaped;
 *debug_amindexd = *Amanda::Configc::debug_amindexd;
 *debug_amrecover = *Amanda::Configc::debug_amrecover;
@@ -338,25 +357,30 @@ package Amanda::Config;
 @EXPORT_OK = ();
 %EXPORT_TAGS = ();
 
 @EXPORT_OK = ();
 %EXPORT_TAGS = ();
 
+
 =head1 NAME
 
 Amanda::Config - access to Amanda configuration parameters
 
 =head1 SYNOPSIS
 
 =head1 NAME
 
 Amanda::Config - access to Amanda configuration parameters
 
 =head1 SYNOPSIS
 
-  use Amanda::Config qw( :init :getconf );
-
-  config_init($CONFIG_INIT_EXPLICIT_NAME, $ARGV[1])
-    or die("errors processing config file " . $Amanda::Config::get_config_filename());
-
-  print "tape device is ", getconf($CNF_TAPEDEV), "\n";
+    use Amanda::Config qw( :init :getconf );
 
 
-This API closely parallels the C API.  See F<conffile.h> for details
-on the functions and constants available here.
+    my $config_name = shift @ARGV;
+    config_init($CONFIG_INIT_EXPLICIT_NAME, $config_name);
+    apply_config_overrides($config_overrides);
+    my ($cfgerr_level, @cfgerr_errors) = config_errors();
+    if ($cfgerr_level >= $CFGERR_WARNINGS) {
+       config_print_errors();
+       if ($cfgerr_level >= $CFGERR_ERRORS) {
+           die("errors processing config file");
+       }
+    }
 
 
-=head1 API STATUS
+    print "tape device is ", getconf($CNF_TAPEDEV), "\n";
 
 
-Stable
+This API closely parallels the C API.  See F<conffile.h> for details on the
+configuration parameter constants.
 
 =head1 INITIALIZATION
 
 
 =head1 INITIALIZATION
 
@@ -376,8 +400,9 @@ of flags that affect its behavior.  These flags can be OR'd together.
 
 =over
 
 
 =over
 
-=item If C<CONFIG_INIT_EXPLICIT_NAME> is given, then the C<$name>
-parameter can contain the name of a configuration to load.
+=item If C<CONFIG_INIT_EXPLICIT_NAME> is given, then the C<$name> parameter can
+contain the name of a configuration to load.  Note that if the parameter is
+C<".">, this is equivalent to C<CONFIG_INIT_USE_CWD>.
 
 =item If C<CONFIG_INIT_USE_CWD> is given, and if the current directory
 contains C<amanda.conf>, then that file is loaded.
 
 =item If C<CONFIG_INIT_USE_CWD> is given, and if the current directory
 contains C<amanda.conf>, then that file is loaded.
@@ -407,10 +432,10 @@ C<get_config_filename()>, respectively.
 This module collects configuration errors and warnings in a list, and also
 tracks the overall error level with an enumeration: C<$CFGERR_OK>,
 C<$CFGERR_WARNINGS>, and C<$CFGERR_ERRORS>.  C<config_init> and
 This module collects configuration errors and warnings in a list, and also
 tracks the overall error level with an enumeration: C<$CFGERR_OK>,
 C<$CFGERR_WARNINGS>, and C<$CFGERR_ERRORS>.  C<config_init> and
-C<apply_config_overwrites> both return the current level.  The level and the
+C<apply_config_overrides> both return the current level.  The level and the
 list of error messages are available from C<config_errors>:
 
 list of error messages are available from C<config_errors>:
 
-  my ($cfgerr_level, @errors) = Amanda::Configconfig_errors();
+  my ($cfgerr_level, @errors) = Amanda::Config::config_errors();
 
 As a convenience, C<config_print_errors> will print all error messages to
 stderr.  The error state can be cleared with C<config_clear_errors>.
 
 As a convenience, C<config_print_errors> will print all error messages to
 stderr.  The error state can be cleared with C<config_clear_errors>.
@@ -420,28 +445,28 @@ stderr.  The error state can be cleared with C<config_clear_errors>.
 Most Amanda applications accept the command-line option C<-o>
 to "overwrite" configuration values in C<amanda.conf>.  In Perl
 applications, these options should be parsed with L<Getopt::Long|Getopt::Long>, with
 Most Amanda applications accept the command-line option C<-o>
 to "overwrite" configuration values in C<amanda.conf>.  In Perl
 applications, these options should be parsed with L<Getopt::Long|Getopt::Long>, with
-the action being a call to C<add_config_overwrite_opt>.  For example:
+the action being a call to C<add_config_override_opt>.  For example:
 
 
-  my $config_overwrites = new_config_overwrites($#ARGV+1);
+  my $config_overrides = new_config_overrides($#ARGV+1);
     GetOptions(
        # ...
     GetOptions(
        # ...
-       'o=s' => sub { add_config_overwrite_opt($config_overwrites, $_[1]); },
+       'o=s' => sub { add_config_override_opt($config_overrides, $_[1]); },
     ) or usage();
   my $cfg_ok = config_init($CONFIG_INIT_EXPLICIT_NAME | $CONFIG_INIT_USE_CWD, $config_name);
     ) or usage();
   my $cfg_ok = config_init($CONFIG_INIT_EXPLICIT_NAME | $CONFIG_INIT_USE_CWD, $config_name);
-  apply_config_overwrites($config_overwrites);
+  apply_config_overrides($config_overrides);
 
 
-C<new_config_overwrites($size_estimate)> creates a new
+C<new_config_overrides($size_estimate)> creates a new
 overwrites object, using the given size as an estimate of
 the number of items it will contain (C<$#ARGC/2> is a good
 estimate).  Individual configuration options are then added via
 overwrites object, using the given size as an estimate of
 the number of items it will contain (C<$#ARGC/2> is a good
 estimate).  Individual configuration options are then added via
-C<add_config_overwrite($co, $key, $value)> (which takes a key/value
-pair) or C<add_config_overwrite_opt($co, $optarg)>, which parses a
+C<add_config_override($co, $key, $value)> (which takes a key/value
+pair) or C<add_config_override_opt($co, $optarg)>, which parses a
 string following C<-o> on the command line.
 
 Once the overwrites are gathered, they are applied with
 string following C<-o> on the command line.
 
 Once the overwrites are gathered, they are applied with
-C<apply_config_overwrites($co)>, which applies the overwrites to the
+C<apply_config_overrides($co)>, which applies the overwrites to the
 active configuration.  No further operations can be performed on the
 active configuration.  No further operations can be performed on the
-overwrites object after C<apply_config_overwrites> has been called.
+overwrites object after C<apply_config_overrides> has been called.
 
 The utility function C<get_config_options()> returns a list of
 command-line arguments to represent any overwrites that were used
 
 The utility function C<get_config_options()> returns a list of
 command-line arguments to represent any overwrites that were used
@@ -454,12 +479,14 @@ Amanda configurations consist of "global" parameters and several
 sets of "subsections" -- one set for dumptypes, one for tapetypes,
 and so on.
 
 sets of "subsections" -- one set for dumptypes, one for tapetypes,
 and so on.
 
-All of the global parameters are represented by a constant beginning
-with C<$CNF_>, e.g., C<$CNF_LABELSTR>.  The function C<getconf($cnf)>
-returns the value of parameter C<$cnf>, in whatever format is
-appropriate for the parameter.  C<getconf_seen($cnf)> returns a true
-value if C<$cnf> was seen in the configuration file.  If it was not
-seen, then it will have its default value.
+All of the global parameters are represented by a constant beginning with
+C<$CNF_>, e.g., C<$CNF_LABELSTR>.  The function C<getconf($cnf)> returns the
+value of parameter C<$cnf>, in whatever format is appropriate for the parameter
+(see DATA FORMATS, below).  C<getconf_seen($cnf)> returns a true value if
+C<$cnf> was seen in the configuration file.  If it was not seen, then it will
+have its default value.  C<getconf_linenum($cnf)> returns the line number in
+the configuration file where it is set, 0 if it is not in a configuration file,
+or -2 if it is set in a command line argument.
 
 Some parameters have enumerated types.  The values for those
 enumerations are available from this module with the same name as
 
 Some parameters have enumerated types.  The values for those
 enumerations are available from this module with the same name as
@@ -467,7 +494,7 @@ in C<conffile.h>.  For example, C<$CNF_TAPERALGO> will yield a value
 from the enumeration C<taperalgo_t>, the constants for which all
 begin with C<$ALGO_>.  See C<conffile.h> for the details.
 
 from the enumeration C<taperalgo_t>, the constants for which all
 begin with C<$ALGO_>.  See C<conffile.h> for the details.
 
-Each subsection type has the following functions:
+Each subsection type C<TYP> has the following functions:
 
 =over
 
 
 =over
 
@@ -531,17 +558,79 @@ with constants beginning with C<$CHANGER_CONFIG_>.
 
 See C<conffile.h> for the names of the constants themselves.
 
 
 See C<conffile.h> for the names of the constants themselves.
 
+=head2 DATA FORMATS
+
+Each configuration parameter has a "conftype", as assigned in
+C<common-src/conffile.c>.  The translation of most of these types into Perl
+values is straightforward:
+
+  CONFTYPE_INT                        Math::BigInt
+  CONFTYPE_INT64                      Math::BigInt
+  CONFTYPE_REAL                       floating-point value
+  CONFTYPE_STR                        string
+  CONFTYPE_IDENT                      string
+  CONFTYPE_TIME                       Math::BigInt (epoch value)
+  CONFTYPE_SIZE                       Math::BigInt
+  CONFTYPE_BOOLEAN                    Math::BigInt
+  CONFTYPE_COMPRESS                   Math::BigInt
+  CONFTYPE_ENCRYPT                    Math::BigInt
+  CONFTYPE_HOLDING                    Math::BigInt
+  CONFTYPE_ESTIMATELIST               [ Math::BigInt, .. ]
+  CONFTYPE_STRATEGY                   Math::BigInt
+  CONFTYPE_TAPERALGO                  Math::BigInt
+  CONFTYPE_PRIORITY                   Math::BigInt
+  CONFTYPE_RATE                       float, float
+  CONFTYPE_INTRANGE                   Math::BigInt, Math::BigInt
+  CONFTYPE_APPLICATION                string
+  CONFTYPE_EXECUTE_ON                 string
+  CONFTYPE_EXECUTE_WHERE              Math::BigInt
+  CONFTYPE_SEND_AMREPORT_ON           Math::BigInt
+  CONFTYPE_IDENTLIST                  [ string, .. ]
+
+Note that C<CONFTYPE_INTRANGE> and C<CONFTYPE_RATE> each return two values, not
+an array reference.
+
+Include and exclude lists with type C<CONFTYPE_EXINCLUDE> return a hash giving
+all listed filenames (in the C<list> key), include/exclude files (C<files>),
+and a boolean indicating that the list is optional (C<optional>):
+
+  { list => [ str, .. ], file => [ str, .. ], optional => Math::BigInt }
+
+Properties are represented as a hash of hashes.  The keys are the property
+names, converted to ASCII lowercase.  Each property has a C<values> array
+giving all values specified for this property, as well as booleans C<priority>
+and C<append> that are true if the corresponding keyword was supplied.
+
+  { prop1 => { values => [ str, .. ] priority => int, append => int },
+    prop2 => { .. } .. }
+
+Note that integer types of all sizes become C<Math::BigInt> objects rather than
+Perl integers, as is the habit throughout Amanda.
+
+The C<CNF_AUTOLABEL> value is a hash with the following keys
+
+  template     label template, or undef
+  other_config boolean
+  non_amanda   boolean
+  volume_error boolean
+  empty                boolean
+
+=head2 OTHER ACCESS
+
 Parameter values are available by name from C<getconf_byname($name)> and
 C<getconf_byname_strs($name, $str_needs_quotes)>.  These functions implement
 the C<TYP:NAME:PARAM> syntax advertised by C<amgetconf> to access values in
 Parameter values are available by name from C<getconf_byname($name)> and
 C<getconf_byname_strs($name, $str_needs_quotes)>.  These functions implement
 the C<TYP:NAME:PARAM> syntax advertised by C<amgetconf> to access values in
-subsections.  The first function returns a perl value, while the second returns
-a string suitable for use in C<amanda.conf>, including quotes around strings if
-C<$str_needs_quotes> is true.
+subsections.  The first function returns a Perl value (see DATA FORMATS,
+above), while the second returns a list of strings suitable for use in
+C<amanda.conf>, including quotes around strings if C<$str_needs_quotes> is
+true.
 
 C<getconf_list($typ)> returns a list of the names of all subsections of the
 given type.  C<%subsection_names> is a hash whose keys are allowed subsection
 names.
 
 
 C<getconf_list($typ)> returns a list of the names of all subsections of the
 given type.  C<%subsection_names> is a hash whose keys are allowed subsection
 names.
 
+=head2 DERIVED VALUES
+
 The C<$CNF_DISPLAYUNIT> implies a certain divisor to convert from
 kilobytes to the desired unit.  This divisor is available from
 C<getconf_unit_divisor()>.  Note carefully that it is a I<divisor>
 The C<$CNF_DISPLAYUNIT> implies a certain divisor to convert from
 kilobytes to the desired unit.  This divisor is available from
 C<getconf_unit_divisor()>.  Note carefully that it is a I<divisor>
@@ -571,8 +660,14 @@ Several parts of Amanda need to convert unit modifier value like
 returns the unit multiplier for such a string.  For example, "mbytes"
 is converted to 1048576 (1024*1024).
 
 returns the unit multiplier for such a string.  For example, "mbytes"
 is converted to 1048576 (1024*1024).
 
+C<string_to_boolean()> takes a string and returns 0 if it matches any of
+Amanda's names for false, or 1 if matches a name for true. If it can't be
+interpreted, C<undef> is returned.
+
 =cut
 
 =cut
 
+
+
 push @EXPORT_OK, qw(confparm_key_to_string);
 push @{$EXPORT_TAGS{"confparm_key"}}, qw(confparm_key_to_string);
 
 push @EXPORT_OK, qw(confparm_key_to_string);
 push @{$EXPORT_TAGS{"confparm_key"}}, qw(confparm_key_to_string);
 
@@ -634,6 +729,11 @@ push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_CLIENT_USERNAME);
 
 $_confparm_key_VALUES{"CNF_CLIENT_USERNAME"} = $CNF_CLIENT_USERNAME;
 
 
 $_confparm_key_VALUES{"CNF_CLIENT_USERNAME"} = $CNF_CLIENT_USERNAME;
 
+push @EXPORT_OK, qw($CNF_CLIENT_PORT);
+push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_CLIENT_PORT);
+
+$_confparm_key_VALUES{"CNF_CLIENT_PORT"} = $CNF_CLIENT_PORT;
+
 push @EXPORT_OK, qw($CNF_GNUTAR_LIST_DIR);
 push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_GNUTAR_LIST_DIR);
 
 push @EXPORT_OK, qw($CNF_GNUTAR_LIST_DIR);
 push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_GNUTAR_LIST_DIR);
 
@@ -689,6 +789,11 @@ push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_LABELSTR);
 
 $_confparm_key_VALUES{"CNF_LABELSTR"} = $CNF_LABELSTR;
 
 
 $_confparm_key_VALUES{"CNF_LABELSTR"} = $CNF_LABELSTR;
 
+push @EXPORT_OK, qw($CNF_AUTOLABEL);
+push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_AUTOLABEL);
+
+$_confparm_key_VALUES{"CNF_AUTOLABEL"} = $CNF_AUTOLABEL;
+
 push @EXPORT_OK, qw($CNF_TAPELIST);
 push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_TAPELIST);
 
 push @EXPORT_OK, qw($CNF_TAPELIST);
 push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_TAPELIST);
 
@@ -914,6 +1019,11 @@ push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_DEBUG_AMANDAD);
 
 $_confparm_key_VALUES{"CNF_DEBUG_AMANDAD"} = $CNF_DEBUG_AMANDAD;
 
 
 $_confparm_key_VALUES{"CNF_DEBUG_AMANDAD"} = $CNF_DEBUG_AMANDAD;
 
+push @EXPORT_OK, qw($CNF_DEBUG_RECOVERY);
+push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_DEBUG_RECOVERY);
+
+$_confparm_key_VALUES{"CNF_DEBUG_RECOVERY"} = $CNF_DEBUG_RECOVERY;
+
 push @EXPORT_OK, qw($CNF_DEBUG_AMIDXTAPED);
 push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_DEBUG_AMIDXTAPED);
 
 push @EXPORT_OK, qw($CNF_DEBUG_AMIDXTAPED);
 push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_DEBUG_AMIDXTAPED);
 
@@ -1004,6 +1114,16 @@ push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_UNRESERVED_TCP_PORT);
 
 $_confparm_key_VALUES{"CNF_UNRESERVED_TCP_PORT"} = $CNF_UNRESERVED_TCP_PORT;
 
 
 $_confparm_key_VALUES{"CNF_UNRESERVED_TCP_PORT"} = $CNF_UNRESERVED_TCP_PORT;
 
+push @EXPORT_OK, qw($CNF_HOLDINGDISK);
+push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_HOLDINGDISK);
+
+$_confparm_key_VALUES{"CNF_HOLDINGDISK"} = $CNF_HOLDINGDISK;
+
+push @EXPORT_OK, qw($CNF_SEND_AMREPORT_ON);
+push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_SEND_AMREPORT_ON);
+
+$_confparm_key_VALUES{"CNF_SEND_AMREPORT_ON"} = $CNF_SEND_AMREPORT_ON;
+
 #copy symbols in confparm_key to getconf
 push @{$EXPORT_TAGS{"getconf"}},  @{$EXPORT_TAGS{"confparm_key"}};
 
 #copy symbols in confparm_key to getconf
 push @{$EXPORT_TAGS{"getconf"}},  @{$EXPORT_TAGS{"confparm_key"}};
 
@@ -1132,15 +1252,20 @@ push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_CLIENT_USERNAME);
 
 $_dumptype_key_VALUES{"DUMPTYPE_CLIENT_USERNAME"} = $DUMPTYPE_CLIENT_USERNAME;
 
 
 $_dumptype_key_VALUES{"DUMPTYPE_CLIENT_USERNAME"} = $DUMPTYPE_CLIENT_USERNAME;
 
+push @EXPORT_OK, qw($DUMPTYPE_CLIENT_PORT);
+push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_CLIENT_PORT);
+
+$_dumptype_key_VALUES{"DUMPTYPE_CLIENT_PORT"} = $DUMPTYPE_CLIENT_PORT;
+
 push @EXPORT_OK, qw($DUMPTYPE_SSH_KEYS);
 push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_SSH_KEYS);
 
 $_dumptype_key_VALUES{"DUMPTYPE_SSH_KEYS"} = $DUMPTYPE_SSH_KEYS;
 
 push @EXPORT_OK, qw($DUMPTYPE_SSH_KEYS);
 push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_SSH_KEYS);
 
 $_dumptype_key_VALUES{"DUMPTYPE_SSH_KEYS"} = $DUMPTYPE_SSH_KEYS;
 
-push @EXPORT_OK, qw($DUMPTYPE_SECURITY_DRIVER);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_SECURITY_DRIVER);
+push @EXPORT_OK, qw($DUMPTYPE_AUTH);
+push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_AUTH);
 
 
-$_dumptype_key_VALUES{"DUMPTYPE_SECURITY_DRIVER"} = $DUMPTYPE_SECURITY_DRIVER;
+$_dumptype_key_VALUES{"DUMPTYPE_AUTH"} = $DUMPTYPE_AUTH;
 
 push @EXPORT_OK, qw($DUMPTYPE_EXCLUDE);
 push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_EXCLUDE);
 
 push @EXPORT_OK, qw($DUMPTYPE_EXCLUDE);
 push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_EXCLUDE);
@@ -1202,10 +1327,10 @@ push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_STRATEGY);
 
 $_dumptype_key_VALUES{"DUMPTYPE_STRATEGY"} = $DUMPTYPE_STRATEGY;
 
 
 $_dumptype_key_VALUES{"DUMPTYPE_STRATEGY"} = $DUMPTYPE_STRATEGY;
 
-push @EXPORT_OK, qw($DUMPTYPE_ESTIMATE);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_ESTIMATE);
+push @EXPORT_OK, qw($DUMPTYPE_ESTIMATELIST);
+push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_ESTIMATELIST);
 
 
-$_dumptype_key_VALUES{"DUMPTYPE_ESTIMATE"} = $DUMPTYPE_ESTIMATE;
+$_dumptype_key_VALUES{"DUMPTYPE_ESTIMATELIST"} = $DUMPTYPE_ESTIMATELIST;
 
 push @EXPORT_OK, qw($DUMPTYPE_COMPRESS);
 push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_COMPRESS);
 
 push @EXPORT_OK, qw($DUMPTYPE_COMPRESS);
 push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_COMPRESS);
@@ -1287,16 +1412,21 @@ push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_APPLICATION);
 
 $_dumptype_key_VALUES{"DUMPTYPE_APPLICATION"} = $DUMPTYPE_APPLICATION;
 
 
 $_dumptype_key_VALUES{"DUMPTYPE_APPLICATION"} = $DUMPTYPE_APPLICATION;
 
-push @EXPORT_OK, qw($DUMPTYPE_PP_SCRIPTLIST);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_PP_SCRIPTLIST);
+push @EXPORT_OK, qw($DUMPTYPE_SCRIPTLIST);
+push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_SCRIPTLIST);
 
 
-$_dumptype_key_VALUES{"DUMPTYPE_PP_SCRIPTLIST"} = $DUMPTYPE_PP_SCRIPTLIST;
+$_dumptype_key_VALUES{"DUMPTYPE_SCRIPTLIST"} = $DUMPTYPE_SCRIPTLIST;
 
 push @EXPORT_OK, qw($DUMPTYPE_PROPERTY);
 push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_PROPERTY);
 
 $_dumptype_key_VALUES{"DUMPTYPE_PROPERTY"} = $DUMPTYPE_PROPERTY;
 
 
 push @EXPORT_OK, qw($DUMPTYPE_PROPERTY);
 push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_PROPERTY);
 
 $_dumptype_key_VALUES{"DUMPTYPE_PROPERTY"} = $DUMPTYPE_PROPERTY;
 
+push @EXPORT_OK, qw($DUMPTYPE_DATA_PATH);
+push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_DATA_PATH);
+
+$_dumptype_key_VALUES{"DUMPTYPE_DATA_PATH"} = $DUMPTYPE_DATA_PATH;
+
 #copy symbols in dumptype_key to getconf
 push @{$EXPORT_TAGS{"getconf"}},  @{$EXPORT_TAGS{"dumptype_key"}};
 
 #copy symbols in dumptype_key to getconf
 push @{$EXPORT_TAGS{"getconf"}},  @{$EXPORT_TAGS{"dumptype_key"}};
 
@@ -1463,6 +1593,11 @@ push @{$EXPORT_TAGS{"pp_script_key"}}, qw($PP_SCRIPT_EXECUTE_WHERE);
 
 $_pp_script_key_VALUES{"PP_SCRIPT_EXECUTE_WHERE"} = $PP_SCRIPT_EXECUTE_WHERE;
 
 
 $_pp_script_key_VALUES{"PP_SCRIPT_EXECUTE_WHERE"} = $PP_SCRIPT_EXECUTE_WHERE;
 
+push @EXPORT_OK, qw($PP_SCRIPT_ORDER);
+push @{$EXPORT_TAGS{"pp_script_key"}}, qw($PP_SCRIPT_ORDER);
+
+$_pp_script_key_VALUES{"PP_SCRIPT_ORDER"} = $PP_SCRIPT_ORDER;
+
 #copy symbols in pp_script_key to getconf
 push @{$EXPORT_TAGS{"getconf"}},  @{$EXPORT_TAGS{"pp_script_key"}};
 
 #copy symbols in pp_script_key to getconf
 push @{$EXPORT_TAGS{"getconf"}},  @{$EXPORT_TAGS{"pp_script_key"}};
 
@@ -1551,6 +1686,16 @@ push @{$EXPORT_TAGS{"changer_config_key"}}, qw($CHANGER_CONFIG_CHANGERFILE);
 
 $_changer_config_key_VALUES{"CHANGER_CONFIG_CHANGERFILE"} = $CHANGER_CONFIG_CHANGERFILE;
 
 
 $_changer_config_key_VALUES{"CHANGER_CONFIG_CHANGERFILE"} = $CHANGER_CONFIG_CHANGERFILE;
 
+push @EXPORT_OK, qw($CHANGER_CONFIG_PROPERTY);
+push @{$EXPORT_TAGS{"changer_config_key"}}, qw($CHANGER_CONFIG_PROPERTY);
+
+$_changer_config_key_VALUES{"CHANGER_CONFIG_PROPERTY"} = $CHANGER_CONFIG_PROPERTY;
+
+push @EXPORT_OK, qw($CHANGER_CONFIG_DEVICE_PROPERTY);
+push @{$EXPORT_TAGS{"changer_config_key"}}, qw($CHANGER_CONFIG_DEVICE_PROPERTY);
+
+$_changer_config_key_VALUES{"CHANGER_CONFIG_DEVICE_PROPERTY"} = $CHANGER_CONFIG_DEVICE_PROPERTY;
+
 #copy symbols in changer_config_key to getconf
 push @{$EXPORT_TAGS{"getconf"}},  @{$EXPORT_TAGS{"changer_config_key"}};
 
 #copy symbols in changer_config_key to getconf
 push @{$EXPORT_TAGS{"getconf"}},  @{$EXPORT_TAGS{"changer_config_key"}};
 
@@ -1794,6 +1939,50 @@ $_estimate_t_VALUES{"ES_CALCSIZE"} = $ES_CALCSIZE;
 #copy symbols in estimate_t to getconf
 push @{$EXPORT_TAGS{"getconf"}},  @{$EXPORT_TAGS{"estimate_t"}};
 
 #copy symbols in estimate_t to getconf
 push @{$EXPORT_TAGS{"getconf"}},  @{$EXPORT_TAGS{"estimate_t"}};
 
+push @EXPORT_OK, qw(autolabel_enum_t_to_string);
+push @{$EXPORT_TAGS{"autolabel_enum_t"}}, qw(autolabel_enum_t_to_string);
+
+my %_autolabel_enum_t_VALUES;
+#Convert an enum value to a single string
+sub autolabel_enum_t_to_string {
+    my ($enumval) = @_;
+
+    for my $k (keys %_autolabel_enum_t_VALUES) {
+       my $v = $_autolabel_enum_t_VALUES{$k};
+
+       #is this a matching flag?
+       if ($enumval == $v) {
+           return $k;
+       }
+    }
+
+#default, just return the number
+    return $enumval;
+}
+
+push @EXPORT_OK, qw($AL_OTHER_CONFIG);
+push @{$EXPORT_TAGS{"autolabel_enum_t"}}, qw($AL_OTHER_CONFIG);
+
+$_autolabel_enum_t_VALUES{"AL_OTHER_CONFIG"} = $AL_OTHER_CONFIG;
+
+push @EXPORT_OK, qw($AL_NON_AMANDA);
+push @{$EXPORT_TAGS{"autolabel_enum_t"}}, qw($AL_NON_AMANDA);
+
+$_autolabel_enum_t_VALUES{"AL_NON_AMANDA"} = $AL_NON_AMANDA;
+
+push @EXPORT_OK, qw($AL_VOLUME_ERROR);
+push @{$EXPORT_TAGS{"autolabel_enum_t"}}, qw($AL_VOLUME_ERROR);
+
+$_autolabel_enum_t_VALUES{"AL_VOLUME_ERROR"} = $AL_VOLUME_ERROR;
+
+push @EXPORT_OK, qw($AL_EMPTY);
+push @{$EXPORT_TAGS{"autolabel_enum_t"}}, qw($AL_EMPTY);
+
+$_autolabel_enum_t_VALUES{"AL_EMPTY"} = $AL_EMPTY;
+
+#copy symbols in autolabel_enum_t to getconf
+push @{$EXPORT_TAGS{"getconf"}},  @{$EXPORT_TAGS{"autolabel_enum_t"}};
+
 push @EXPORT_OK, qw(taperalgo_t_to_string);
 push @{$EXPORT_TAGS{"taperalgo_t"}}, qw(taperalgo_t_to_string);
 
 push @EXPORT_OK, qw(taperalgo_t_to_string);
 push @{$EXPORT_TAGS{"taperalgo_t"}}, qw(taperalgo_t_to_string);
 
@@ -1976,10 +2165,44 @@ $_send_amreport_on_t_VALUES{"SEND_AMREPORT_NEVER"} = $SEND_AMREPORT_NEVER;
 #copy symbols in send_amreport_on_t to getconf
 push @{$EXPORT_TAGS{"getconf"}},  @{$EXPORT_TAGS{"send_amreport_on_t"}};
 
 #copy symbols in send_amreport_on_t to getconf
 push @{$EXPORT_TAGS{"getconf"}},  @{$EXPORT_TAGS{"send_amreport_on_t"}};
 
-push @EXPORT_OK, qw(getconf getconf_seen 
+push @EXPORT_OK, qw(data_path_t_to_string);
+push @{$EXPORT_TAGS{"data_path_t"}}, qw(data_path_t_to_string);
+
+my %_data_path_t_VALUES;
+#Convert an enum value to a single string
+sub data_path_t_to_string {
+    my ($enumval) = @_;
+
+    for my $k (keys %_data_path_t_VALUES) {
+       my $v = $_data_path_t_VALUES{$k};
+
+       #is this a matching flag?
+       if ($enumval == $v) {
+           return $k;
+       }
+    }
+
+#default, just return the number
+    return $enumval;
+}
+
+push @EXPORT_OK, qw($DATA_PATH_AMANDA);
+push @{$EXPORT_TAGS{"data_path_t"}}, qw($DATA_PATH_AMANDA);
+
+$_data_path_t_VALUES{"DATA_PATH_AMANDA"} = $DATA_PATH_AMANDA;
+
+push @EXPORT_OK, qw($DATA_PATH_DIRECTTCP);
+push @{$EXPORT_TAGS{"data_path_t"}}, qw($DATA_PATH_DIRECTTCP);
+
+$_data_path_t_VALUES{"DATA_PATH_DIRECTTCP"} = $DATA_PATH_DIRECTTCP;
+
+#copy symbols in data_path_t to getconf
+push @{$EXPORT_TAGS{"getconf"}},  @{$EXPORT_TAGS{"data_path_t"}};
+
+push @EXPORT_OK, qw(getconf getconf_seen getconf_linenum
     getconf_byname getconf_byname_strs
     getconf_list);
     getconf_byname getconf_byname_strs
     getconf_list);
-push @{$EXPORT_TAGS{"getconf"}}, qw(getconf getconf_seen 
+push @{$EXPORT_TAGS{"getconf"}}, qw(getconf getconf_seen getconf_linenum
     getconf_byname getconf_byname_strs
     getconf_list);
 
     getconf_byname getconf_byname_strs
     getconf_list);
 
@@ -1999,10 +2222,10 @@ push @{$EXPORT_TAGS{"getconf"}}, qw(lookup_interface interface_getconf interface
     interface_seen interface_seen);
 
 push @EXPORT_OK, qw(lookup_holdingdisk holdingdisk_getconf holdingdisk_name
     interface_seen interface_seen);
 
 push @EXPORT_OK, qw(lookup_holdingdisk holdingdisk_getconf holdingdisk_name
-    getconf_holdingdisks holdingdisk_next
+    getconf_holdingdisks
     holdingdisk_seen holdingdisk_seen);
 push @{$EXPORT_TAGS{"getconf"}}, qw(lookup_holdingdisk holdingdisk_getconf holdingdisk_name
     holdingdisk_seen holdingdisk_seen);
 push @{$EXPORT_TAGS{"getconf"}}, qw(lookup_holdingdisk holdingdisk_getconf holdingdisk_name
-    getconf_holdingdisks holdingdisk_next
+    getconf_holdingdisks
     holdingdisk_seen holdingdisk_seen);
 
 push @EXPORT_OK, qw(lookup_application application_getconf application_name
     holdingdisk_seen holdingdisk_seen);
 
 push @EXPORT_OK, qw(lookup_application application_getconf application_name
@@ -2025,13 +2248,17 @@ push @EXPORT_OK, qw(lookup_changer_config changer_config_getconf changer_config_
 push @{$EXPORT_TAGS{"getconf"}}, qw(lookup_changer_config changer_config_getconf changer_config_name
     changer_config_seen changer_config_seen);
 
 push @{$EXPORT_TAGS{"getconf"}}, qw(lookup_changer_config changer_config_getconf changer_config_name
     changer_config_seen changer_config_seen);
 
+# only those keys with a value of '1' should be shown; the
+# others are deprecated
 our %subsection_names = (
     "tapetype" => 1,
     "dumptype" => 1,
     "interface" => 1,
     "holdingdisk" => 1,
 our %subsection_names = (
     "tapetype" => 1,
     "dumptype" => 1,
     "interface" => 1,
     "holdingdisk" => 1,
-    "application-tool" => 1,
-    "script-tool" => 1,
+    "application" => 1,
+    "script" => 1,
+    "application-tool" => 0,
+    "script-tool" => 0,
     "device" => 1,
     "changer" => 1,
 );
     "device" => 1,
     "changer" => 1,
 );
@@ -2041,13 +2268,13 @@ push @{$EXPORT_TAGS{"getconf"}}, qw(%subsection_names);
 
 push @EXPORT_OK, qw(getconf_unit_divisor
 
 
 push @EXPORT_OK, qw(getconf_unit_divisor
 
-    $debug_amandad $debug_amidxtaped $debug_amindexd $debug_amrecover
+    $debug_amandad $debug_recovery $debug_amidxtaped $debug_amindexd $debug_amrecover
     $debug_auth $debug_event $debug_holding $debug_protocol
     $debug_planner $debug_driver $debug_dumper $debug_chunker
     $debug_taper $debug_selfcheck $debug_sendsize $debug_sendbackup);
 push @{$EXPORT_TAGS{"getconf"}}, qw(getconf_unit_divisor
 
     $debug_auth $debug_event $debug_holding $debug_protocol
     $debug_planner $debug_driver $debug_dumper $debug_chunker
     $debug_taper $debug_selfcheck $debug_sendsize $debug_sendbackup);
 push @{$EXPORT_TAGS{"getconf"}}, qw(getconf_unit_divisor
 
-    $debug_amandad $debug_amidxtaped $debug_amindexd $debug_amrecover
+    $debug_amandad $debug_recovery $debug_amidxtaped $debug_amindexd $debug_amrecover
     $debug_auth $debug_event $debug_holding $debug_protocol
     $debug_planner $debug_driver $debug_dumper $debug_chunker
     $debug_taper $debug_selfcheck $debug_sendsize $debug_sendbackup);
     $debug_auth $debug_event $debug_holding $debug_protocol
     $debug_planner $debug_driver $debug_dumper $debug_chunker
     $debug_taper $debug_selfcheck $debug_sendsize $debug_sendbackup);
@@ -2143,13 +2370,24 @@ push @{$EXPORT_TAGS{"init"}},  @{$EXPORT_TAGS{"config_init_flags"}};
 push @EXPORT_OK, qw(config_init config_uninit get_config_options
     get_config_name get_config_dir get_config_filename
     config_print_errors config_clear_errors config_errors
 push @EXPORT_OK, qw(config_init config_uninit get_config_options
     get_config_name get_config_dir get_config_filename
     config_print_errors config_clear_errors config_errors
-    new_config_overwrites free_config_overwrites add_config_overwrite
-    add_config_overwrite_opt apply_config_overwrites);
+    new_config_overrides free_config_overrides add_config_override
+    add_config_override_opt set_config_overrides);
 push @{$EXPORT_TAGS{"init"}}, qw(config_init config_uninit get_config_options
     get_config_name get_config_dir get_config_filename
     config_print_errors config_clear_errors config_errors
 push @{$EXPORT_TAGS{"init"}}, qw(config_init config_uninit get_config_options
     get_config_name get_config_dir get_config_filename
     config_print_errors config_clear_errors config_errors
-    new_config_overwrites free_config_overwrites add_config_overwrite
-    add_config_overwrite_opt apply_config_overwrites);
+    new_config_overrides free_config_overrides add_config_override
+    add_config_override_opt set_config_overrides);
 
 push @EXPORT_OK, qw(dump_configuration config_dir_relative taperalgo2str find_multiplier);
 
 push @EXPORT_OK, qw(dump_configuration config_dir_relative taperalgo2str find_multiplier);
+
+
+sub string_to_boolean {
+    my ($str) = @_;
+    my $ret = C_string_to_boolean($str);
+    return undef unless $ret >= 0;
+    return $ret;
+}
+
+
+push @EXPORT_OK, qw(string_to_boolean);
 1;
 1;