Imported Upstream version 3.3.2
[debian/amanda] / perl / Amanda / Config.pm
index b254c923cbab11e5306b141017dbeee779915f01..bcd636ca262a318ee1e57e8623f6abb86dfcf198 100644 (file)
@@ -1,16 +1,16 @@
 # This file was automatically generated by SWIG (http://www.swig.org).
-# Version 1.3.33
+# Version 2.0.4
 #
-# Don't modify this file, modify the SWIG interface instead.
+# Do not make changes to this file unless you know what you are doing--modify
+# the SWIG interface file instead.
 
 package Amanda::Config;
-require Exporter;
-require DynaLoader;
-@ISA = qw(Exporter DynaLoader);
+use base qw(Exporter);
+use base qw(DynaLoader);
 package Amanda::Configc;
 bootstrap Amanda::Config;
 package Amanda::Config;
-@EXPORT = qw( );
+@EXPORT = qw();
 
 # ---------- BASE METHODS -------------
 
@@ -49,10 +49,13 @@ sub this {
 
 package Amanda::Config;
 
+*data_path_from_string = *Amanda::Configc::data_path_from_string;
 *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;
 *lookup_tapetype = *Amanda::Configc::lookup_tapetype;
 *tapetype_getconf = *Amanda::Configc::tapetype_getconf;
 *tapetype_name = *Amanda::Configc::tapetype_name;
@@ -67,26 +70,54 @@ package Amanda::Config;
 *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;
+*lookup_application = *Amanda::Configc::lookup_application;
+*application_getconf = *Amanda::Configc::application_getconf;
+*application_name = *Amanda::Configc::application_name;
+*application_seen = *Amanda::Configc::application_seen;
+*lookup_pp_script = *Amanda::Configc::lookup_pp_script;
+*pp_script_getconf = *Amanda::Configc::pp_script_getconf;
+*pp_script_name = *Amanda::Configc::pp_script_name;
+*pp_script_seen = *Amanda::Configc::pp_script_seen;
+*lookup_device_config = *Amanda::Configc::lookup_device_config;
+*device_config_getconf = *Amanda::Configc::device_config_getconf;
+*device_config_name = *Amanda::Configc::device_config_name;
+*device_config_seen = *Amanda::Configc::device_config_seen;
+*lookup_changer_config = *Amanda::Configc::lookup_changer_config;
+*changer_config_getconf = *Amanda::Configc::changer_config_getconf;
+*changer_config_name = *Amanda::Configc::changer_config_name;
+*changer_config_seen = *Amanda::Configc::changer_config_seen;
+*lookup_interactivity = *Amanda::Configc::lookup_interactivity;
+*interactivity_getconf = *Amanda::Configc::interactivity_getconf;
+*interactivity_name = *Amanda::Configc::interactivity_name;
+*interactivity_seen = *Amanda::Configc::interactivity_seen;
+*lookup_taperscan = *Amanda::Configc::lookup_taperscan;
+*taperscan_getconf = *Amanda::Configc::taperscan_getconf;
+*taperscan_name = *Amanda::Configc::taperscan_name;
+*taperscan_seen = *Amanda::Configc::taperscan_seen;
 *getconf_unit_divisor = *Amanda::Configc::getconf_unit_divisor;
-*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;
 *config_init = *Amanda::Configc::config_init;
 *config_uninit = *Amanda::Configc::config_uninit;
 *get_config_options = *Amanda::Configc::get_config_options;
 *get_config_name = *Amanda::Configc::get_config_name;
 *get_config_dir = *Amanda::Configc::get_config_dir;
 *get_config_filename = *Amanda::Configc::get_config_filename;
+*config_print_errors = *Amanda::Configc::config_print_errors;
+*config_clear_errors = *Amanda::Configc::config_clear_errors;
+*config_errors = *Amanda::Configc::config_errors;
+*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;
+*C_string_to_boolean = *Amanda::Configc::C_string_to_boolean;
+*amandaify_property_name = *Amanda::Configc::amandaify_property_name;
 
 # ------- VARIABLE STUBS --------
 
@@ -94,21 +125,27 @@ package Amanda::Config;
 
 *CNF_ORG = *Amanda::Configc::CNF_ORG;
 *CNF_CONF = *Amanda::Configc::CNF_CONF;
+*CNF_AMDUMP_SERVER = *Amanda::Configc::CNF_AMDUMP_SERVER;
 *CNF_INDEX_SERVER = *Amanda::Configc::CNF_INDEX_SERVER;
 *CNF_TAPE_SERVER = *Amanda::Configc::CNF_TAPE_SERVER;
 *CNF_AUTH = *Amanda::Configc::CNF_AUTH;
 *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_MAILTO = *Amanda::Configc::CNF_MAILTO;
 *CNF_DUMPUSER = *Amanda::Configc::CNF_DUMPUSER;
 *CNF_TAPEDEV = *Amanda::Configc::CNF_TAPEDEV;
 *CNF_DEVICE_PROPERTY = *Amanda::Configc::CNF_DEVICE_PROPERTY;
+*CNF_PROPERTY = *Amanda::Configc::CNF_PROPERTY;
 *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_META_AUTOLABEL = *Amanda::Configc::CNF_META_AUTOLABEL;
 *CNF_TAPELIST = *Amanda::Configc::CNF_TAPELIST;
 *CNF_DISKFILE = *Amanda::Configc::CNF_DISKFILE;
 *CNF_INFOFILE = *Amanda::Configc::CNF_INFOFILE;
@@ -127,11 +164,11 @@ package Amanda::Config;
 *CNF_BUMPDAYS = *Amanda::Configc::CNF_BUMPDAYS;
 *CNF_TPCHANGER = *Amanda::Configc::CNF_TPCHANGER;
 *CNF_RUNTAPES = *Amanda::Configc::CNF_RUNTAPES;
+*CNF_MAX_DLE_BY_VOLUME = *Amanda::Configc::CNF_MAX_DLE_BY_VOLUME;
 *CNF_MAXDUMPS = *Amanda::Configc::CNF_MAXDUMPS;
 *CNF_ETIMEOUT = *Amanda::Configc::CNF_ETIMEOUT;
 *CNF_DTIMEOUT = *Amanda::Configc::CNF_DTIMEOUT;
 *CNF_CTIMEOUT = *Amanda::Configc::CNF_CTIMEOUT;
-*CNF_TAPEBUFS = *Amanda::Configc::CNF_TAPEBUFS;
 *CNF_DEVICE_OUTPUT_BUFFER_SIZE = *Amanda::Configc::CNF_DEVICE_OUTPUT_BUFFER_SIZE;
 *CNF_PRINTER = *Amanda::Configc::CNF_PRINTER;
 *CNF_AUTOFLUSH = *Amanda::Configc::CNF_AUTOFLUSH;
@@ -154,6 +191,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_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;
@@ -172,6 +210,14 @@ 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_HOLDINGDISK = *Amanda::Configc::CNF_HOLDINGDISK;
+*CNF_SEND_AMREPORT_ON = *Amanda::Configc::CNF_SEND_AMREPORT_ON;
+*CNF_TAPER_PARALLEL_WRITE = *Amanda::Configc::CNF_TAPER_PARALLEL_WRITE;
+*CNF_RECOVERY_LIMIT = *Amanda::Configc::CNF_RECOVERY_LIMIT;
+*CNF_INTERACTIVITY = *Amanda::Configc::CNF_INTERACTIVITY;
+*CNF_TAPERSCAN = *Amanda::Configc::CNF_TAPERSCAN;
+*CNF_EJECT_VOLUME = *Amanda::Configc::CNF_EJECT_VOLUME;
+*CNF_TMPDIR = *Amanda::Configc::CNF_TMPDIR;
 *TAPETYPE_COMMENT = *Amanda::Configc::TAPETYPE_COMMENT;
 *TAPETYPE_LBL_TEMPL = *Amanda::Configc::TAPETYPE_LBL_TEMPL;
 *TAPETYPE_BLOCKSIZE = *Amanda::Configc::TAPETYPE_BLOCKSIZE;
@@ -179,7 +225,10 @@ package Amanda::Config;
 *TAPETYPE_LENGTH = *Amanda::Configc::TAPETYPE_LENGTH;
 *TAPETYPE_FILEMARK = *Amanda::Configc::TAPETYPE_FILEMARK;
 *TAPETYPE_SPEED = *Amanda::Configc::TAPETYPE_SPEED;
-*TAPETYPE_FILE_PAD = *Amanda::Configc::TAPETYPE_FILE_PAD;
+*TAPETYPE_PART_SIZE = *Amanda::Configc::TAPETYPE_PART_SIZE;
+*TAPETYPE_PART_CACHE_TYPE = *Amanda::Configc::TAPETYPE_PART_CACHE_TYPE;
+*TAPETYPE_PART_CACHE_DIR = *Amanda::Configc::TAPETYPE_PART_CACHE_DIR;
+*TAPETYPE_PART_CACHE_MAX_SIZE = *Amanda::Configc::TAPETYPE_PART_CACHE_MAX_SIZE;
 *DUMPTYPE_COMMENT = *Amanda::Configc::DUMPTYPE_COMMENT;
 *DUMPTYPE_PROGRAM = *Amanda::Configc::DUMPTYPE_PROGRAM;
 *DUMPTYPE_SRVCOMPPROG = *Amanda::Configc::DUMPTYPE_SRVCOMPPROG;
@@ -188,8 +237,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_CLIENT_PORT = *Amanda::Configc::DUMPTYPE_CLIENT_PORT;
 *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;
@@ -202,7 +252,7 @@ package Amanda::Config;
 *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;
@@ -218,12 +268,48 @@ package Amanda::Config;
 *DUMPTYPE_KENCRYPT = *Amanda::Configc::DUMPTYPE_KENCRYPT;
 *DUMPTYPE_IGNORE = *Amanda::Configc::DUMPTYPE_IGNORE;
 *DUMPTYPE_INDEX = *Amanda::Configc::DUMPTYPE_INDEX;
+*DUMPTYPE_APPLICATION = *Amanda::Configc::DUMPTYPE_APPLICATION;
+*DUMPTYPE_SCRIPTLIST = *Amanda::Configc::DUMPTYPE_SCRIPTLIST;
+*DUMPTYPE_PROPERTY = *Amanda::Configc::DUMPTYPE_PROPERTY;
+*DUMPTYPE_DATA_PATH = *Amanda::Configc::DUMPTYPE_DATA_PATH;
+*DUMPTYPE_ALLOW_SPLIT = *Amanda::Configc::DUMPTYPE_ALLOW_SPLIT;
+*DUMPTYPE_MAX_WARNINGS = *Amanda::Configc::DUMPTYPE_MAX_WARNINGS;
+*DUMPTYPE_RECOVERY_LIMIT = *Amanda::Configc::DUMPTYPE_RECOVERY_LIMIT;
+*DUMPTYPE_DUMP_LIMIT = *Amanda::Configc::DUMPTYPE_DUMP_LIMIT;
 *INTER_COMMENT = *Amanda::Configc::INTER_COMMENT;
 *INTER_MAXUSAGE = *Amanda::Configc::INTER_MAXUSAGE;
 *HOLDING_COMMENT = *Amanda::Configc::HOLDING_COMMENT;
 *HOLDING_DISKDIR = *Amanda::Configc::HOLDING_DISKDIR;
 *HOLDING_DISKSIZE = *Amanda::Configc::HOLDING_DISKSIZE;
 *HOLDING_CHUNKSIZE = *Amanda::Configc::HOLDING_CHUNKSIZE;
+*APPLICATION_COMMENT = *Amanda::Configc::APPLICATION_COMMENT;
+*APPLICATION_PLUGIN = *Amanda::Configc::APPLICATION_PLUGIN;
+*APPLICATION_PROPERTY = *Amanda::Configc::APPLICATION_PROPERTY;
+*APPLICATION_CLIENT_NAME = *Amanda::Configc::APPLICATION_CLIENT_NAME;
+*PP_SCRIPT_COMMENT = *Amanda::Configc::PP_SCRIPT_COMMENT;
+*PP_SCRIPT_PLUGIN = *Amanda::Configc::PP_SCRIPT_PLUGIN;
+*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;
+*PP_SCRIPT_SINGLE_EXECUTION = *Amanda::Configc::PP_SCRIPT_SINGLE_EXECUTION;
+*PP_SCRIPT_CLIENT_NAME = *Amanda::Configc::PP_SCRIPT_CLIENT_NAME;
+*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;
+*CHANGER_CONFIG_COMMENT = *Amanda::Configc::CHANGER_CONFIG_COMMENT;
+*CHANGER_CONFIG_TAPEDEV = *Amanda::Configc::CHANGER_CONFIG_TAPEDEV;
+*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;
+*INTERACTIVITY_COMMENT = *Amanda::Configc::INTERACTIVITY_COMMENT;
+*INTERACTIVITY_PLUGIN = *Amanda::Configc::INTERACTIVITY_PLUGIN;
+*INTERACTIVITY_PROPERTY = *Amanda::Configc::INTERACTIVITY_PROPERTY;
+*TAPERSCAN_COMMENT = *Amanda::Configc::TAPERSCAN_COMMENT;
+*TAPERSCAN_PLUGIN = *Amanda::Configc::TAPERSCAN_PLUGIN;
+*TAPERSCAN_PROPERTY = *Amanda::Configc::TAPERSCAN_PROPERTY;
 *HOLD_NEVER = *Amanda::Configc::HOLD_NEVER;
 *HOLD_AUTO = *Amanda::Configc::HOLD_AUTO;
 *HOLD_REQUIRED = *Amanda::Configc::HOLD_REQUIRED;
@@ -248,13 +334,45 @@ package Amanda::Config;
 *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_LARGESTFIT = *Amanda::Configc::ALGO_LARGESTFIT;
 *ALGO_SMALLEST = *Amanda::Configc::ALGO_SMALLEST;
 *ALGO_LAST = *Amanda::Configc::ALGO_LAST;
+*EXECUTE_ON_PRE_AMCHECK = *Amanda::Configc::EXECUTE_ON_PRE_AMCHECK;
+*EXECUTE_ON_PRE_DLE_AMCHECK = *Amanda::Configc::EXECUTE_ON_PRE_DLE_AMCHECK;
+*EXECUTE_ON_PRE_HOST_AMCHECK = *Amanda::Configc::EXECUTE_ON_PRE_HOST_AMCHECK;
+*EXECUTE_ON_POST_AMCHECK = *Amanda::Configc::EXECUTE_ON_POST_AMCHECK;
+*EXECUTE_ON_POST_DLE_AMCHECK = *Amanda::Configc::EXECUTE_ON_POST_DLE_AMCHECK;
+*EXECUTE_ON_POST_HOST_AMCHECK = *Amanda::Configc::EXECUTE_ON_POST_HOST_AMCHECK;
+*EXECUTE_ON_PRE_ESTIMATE = *Amanda::Configc::EXECUTE_ON_PRE_ESTIMATE;
+*EXECUTE_ON_PRE_DLE_ESTIMATE = *Amanda::Configc::EXECUTE_ON_PRE_DLE_ESTIMATE;
+*EXECUTE_ON_PRE_HOST_ESTIMATE = *Amanda::Configc::EXECUTE_ON_PRE_HOST_ESTIMATE;
+*EXECUTE_ON_POST_ESTIMATE = *Amanda::Configc::EXECUTE_ON_POST_ESTIMATE;
+*EXECUTE_ON_POST_DLE_ESTIMATE = *Amanda::Configc::EXECUTE_ON_POST_DLE_ESTIMATE;
+*EXECUTE_ON_POST_HOST_ESTIMATE = *Amanda::Configc::EXECUTE_ON_POST_HOST_ESTIMATE;
+*EXECUTE_ON_PRE_BACKUP = *Amanda::Configc::EXECUTE_ON_PRE_BACKUP;
+*EXECUTE_ON_PRE_DLE_BACKUP = *Amanda::Configc::EXECUTE_ON_PRE_DLE_BACKUP;
+*EXECUTE_ON_PRE_HOST_BACKUP = *Amanda::Configc::EXECUTE_ON_PRE_HOST_BACKUP;
+*EXECUTE_ON_POST_BACKUP = *Amanda::Configc::EXECUTE_ON_POST_BACKUP;
+*EXECUTE_ON_POST_DLE_BACKUP = *Amanda::Configc::EXECUTE_ON_POST_DLE_BACKUP;
+*EXECUTE_ON_POST_HOST_BACKUP = *Amanda::Configc::EXECUTE_ON_POST_HOST_BACKUP;
+*SEND_AMREPORT_ALL = *Amanda::Configc::SEND_AMREPORT_ALL;
+*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;
+*PART_CACHE_TYPE_NONE = *Amanda::Configc::PART_CACHE_TYPE_NONE;
+*PART_CACHE_TYPE_DISK = *Amanda::Configc::PART_CACHE_TYPE_DISK;
+*PART_CACHE_TYPE_MEMORY = *Amanda::Configc::PART_CACHE_TYPE_MEMORY;
 *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;
@@ -270,34 +388,40 @@ package Amanda::Config;
 *debug_selfcheck = *Amanda::Configc::debug_selfcheck;
 *debug_sendsize = *Amanda::Configc::debug_sendsize;
 *debug_sendbackup = *Amanda::Configc::debug_sendbackup;
+*CFGERR_OK = *Amanda::Configc::CFGERR_OK;
+*CFGERR_WARNINGS = *Amanda::Configc::CFGERR_WARNINGS;
+*CFGERR_ERRORS = *Amanda::Configc::CFGERR_ERRORS;
 *CONFIG_INIT_EXPLICIT_NAME = *Amanda::Configc::CONFIG_INIT_EXPLICIT_NAME;
 *CONFIG_INIT_USE_CWD = *Amanda::Configc::CONFIG_INIT_USE_CWD;
 *CONFIG_INIT_CLIENT = *Amanda::Configc::CONFIG_INIT_CLIENT;
 *CONFIG_INIT_OVERLAY = *Amanda::Configc::CONFIG_INIT_OVERLAY;
-*CONFIG_INIT_FATAL = *Amanda::Configc::CONFIG_INIT_FATAL;
 
 @EXPORT_OK = ();
 %EXPORT_TAGS = ();
 
+
 =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());
+    use Amanda::Config qw( :init :getconf );
 
-  print "tape device is ", getconf($CNF_TAPEDEV), "\n";
-
-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.
 
 =head1 INITIALIZATION
 
@@ -317,8 +441,9 @@ of flags that affect its behavior.  These flags can be OR'd together.
 
 =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.
@@ -329,9 +454,6 @@ is loaded.
 =item If C<CONFIG_INIT_OVERLAY> is given, then any existing
 configuration is not reset.
 
-=item If C<CONFIG_INIT_FATAL> is given, then any errors are considered
-fatal, and C<config_init> does not return.
-
 =back
 
 See C<conffile.h> for more detailed information on these flags and
@@ -346,33 +468,46 @@ and filename (C</etc/amanda/DailySet1/amanda.conf>) are
 available from C<get_config_name()>, C<get_config_dir()>, and
 C<get_config_filename()>, respectively.
 
+=head3 CONFIG ERRORS
+
+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_overrides> both return the current level.  The level and the
+list of error messages are available from C<config_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>.
+
 =head2 CONFIG OVERWRITES
 
 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(
        # ...
-       '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);
-  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
-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
-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
-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
@@ -385,12 +520,14 @@ Amanda configurations consist of "global" parameters and several
 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
@@ -398,7 +535,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.
 
-Each subsection type has the following functions:
+Each subsection type C<TYP> has the following functions:
 
 =over
 
@@ -434,6 +571,10 @@ with constants beginning with C<$TAPETYPE_>
 
 with constants beginning with C<$DUMPTYPE_>
 
+=item C<interface>
+
+with constants beginning with C<$INTER_>
+
 =item C<holdingdisk>
 
 with constants beginning with C<$HOLDING_>
@@ -446,14 +587,93 @@ with constants beginning with C<$APPLICATION_>
 
 with constants beginning with C<$PP_SCRIPT_>
 
+=item C<device>
+
+with constants beginning with C<$DEVICE_CONFIG_>.
+
+=item C<changer>
+
+with constants beginning with C<$CHANGER_CONFIG_>.
+
 =back
 
 See C<conffile.h> for the names of the constants themselves.
 
-Parameter values are available by name from C<getconf_byname($name)>.
-This function implements the C<TYP:NAME:PARAM> syntax advertised by
-C<amgetconf> to access values in subsections.  C<getconf_list($typ)>
-returns a list of the names of all subsections of the given type.
+=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, .. ]
+  CONFTYPE_PART_CACHE_TYPE           Math::BigInt
+  CONFTYPE_RECOVERY_LIMIT             [ string, .. ] (undef if not specified;
+                                           undef in the list means same-host)
+
+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
+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.
+
+=head2 DERIVED VALUES
 
 The C<$CNF_DISPLAYUNIT> implies a certain divisor to convert from
 kilobytes to the desired unit.  This divisor is available from
@@ -484,8 +704,21 @@ 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).
 
+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.
+
+C<amandaify_property_name()> converts a string into Amanda's property style:
+all lower-case and with "-" replacing "_".
+
+=head1 CONSTANTS
+
+This section lists all of the configuration parameter constants defined in this
+module.  All of these constants are available with the C<:getconf> export tag.
+
 =cut
 
+
 push @EXPORT_OK, qw(confparm_key_to_string);
 push @{$EXPORT_TAGS{"confparm_key"}}, qw(confparm_key_to_string);
 
@@ -507,408 +740,20 @@ sub confparm_key_to_string {
     return $enumval;
 }
 
-push @EXPORT_OK, qw($CNF_ORG);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_ORG);
-
-$_confparm_key_VALUES{"CNF_ORG"} = $CNF_ORG;
-
-push @EXPORT_OK, qw($CNF_CONF);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_CONF);
-
-$_confparm_key_VALUES{"CNF_CONF"} = $CNF_CONF;
-
-push @EXPORT_OK, qw($CNF_INDEX_SERVER);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_INDEX_SERVER);
-
-$_confparm_key_VALUES{"CNF_INDEX_SERVER"} = $CNF_INDEX_SERVER;
-
-push @EXPORT_OK, qw($CNF_TAPE_SERVER);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_TAPE_SERVER);
-
-$_confparm_key_VALUES{"CNF_TAPE_SERVER"} = $CNF_TAPE_SERVER;
-
-push @EXPORT_OK, qw($CNF_AUTH);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_AUTH);
-
-$_confparm_key_VALUES{"CNF_AUTH"} = $CNF_AUTH;
-
-push @EXPORT_OK, qw($CNF_SSH_KEYS);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_SSH_KEYS);
-
-$_confparm_key_VALUES{"CNF_SSH_KEYS"} = $CNF_SSH_KEYS;
-
-push @EXPORT_OK, qw($CNF_AMANDAD_PATH);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_AMANDAD_PATH);
-
-$_confparm_key_VALUES{"CNF_AMANDAD_PATH"} = $CNF_AMANDAD_PATH;
-
-push @EXPORT_OK, qw($CNF_CLIENT_USERNAME);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_CLIENT_USERNAME);
-
-$_confparm_key_VALUES{"CNF_CLIENT_USERNAME"} = $CNF_CLIENT_USERNAME;
-
-push @EXPORT_OK, qw($CNF_GNUTAR_LIST_DIR);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_GNUTAR_LIST_DIR);
-
-$_confparm_key_VALUES{"CNF_GNUTAR_LIST_DIR"} = $CNF_GNUTAR_LIST_DIR;
-
-push @EXPORT_OK, qw($CNF_AMANDATES);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_AMANDATES);
-
-$_confparm_key_VALUES{"CNF_AMANDATES"} = $CNF_AMANDATES;
-
-push @EXPORT_OK, qw($CNF_MAILTO);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_MAILTO);
-
-$_confparm_key_VALUES{"CNF_MAILTO"} = $CNF_MAILTO;
-
-push @EXPORT_OK, qw($CNF_DUMPUSER);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_DUMPUSER);
-
-$_confparm_key_VALUES{"CNF_DUMPUSER"} = $CNF_DUMPUSER;
-
-push @EXPORT_OK, qw($CNF_TAPEDEV);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_TAPEDEV);
-
-$_confparm_key_VALUES{"CNF_TAPEDEV"} = $CNF_TAPEDEV;
-
-push @EXPORT_OK, qw($CNF_DEVICE_PROPERTY);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_DEVICE_PROPERTY);
-
-$_confparm_key_VALUES{"CNF_DEVICE_PROPERTY"} = $CNF_DEVICE_PROPERTY;
-
-push @EXPORT_OK, qw($CNF_CHANGERDEV);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_CHANGERDEV);
-
-$_confparm_key_VALUES{"CNF_CHANGERDEV"} = $CNF_CHANGERDEV;
-
-push @EXPORT_OK, qw($CNF_CHANGERFILE);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_CHANGERFILE);
-
-$_confparm_key_VALUES{"CNF_CHANGERFILE"} = $CNF_CHANGERFILE;
-
-push @EXPORT_OK, qw($CNF_LABELSTR);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_LABELSTR);
-
-$_confparm_key_VALUES{"CNF_LABELSTR"} = $CNF_LABELSTR;
-
-push @EXPORT_OK, qw($CNF_TAPELIST);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_TAPELIST);
-
-$_confparm_key_VALUES{"CNF_TAPELIST"} = $CNF_TAPELIST;
-
-push @EXPORT_OK, qw($CNF_DISKFILE);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_DISKFILE);
-
-$_confparm_key_VALUES{"CNF_DISKFILE"} = $CNF_DISKFILE;
-
-push @EXPORT_OK, qw($CNF_INFOFILE);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_INFOFILE);
-
-$_confparm_key_VALUES{"CNF_INFOFILE"} = $CNF_INFOFILE;
-
-push @EXPORT_OK, qw($CNF_LOGDIR);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_LOGDIR);
-
-$_confparm_key_VALUES{"CNF_LOGDIR"} = $CNF_LOGDIR;
-
-push @EXPORT_OK, qw($CNF_INDEXDIR);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_INDEXDIR);
-
-$_confparm_key_VALUES{"CNF_INDEXDIR"} = $CNF_INDEXDIR;
-
-push @EXPORT_OK, qw($CNF_TAPETYPE);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_TAPETYPE);
-
-$_confparm_key_VALUES{"CNF_TAPETYPE"} = $CNF_TAPETYPE;
-
-push @EXPORT_OK, qw($CNF_DUMPCYCLE);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_DUMPCYCLE);
-
-$_confparm_key_VALUES{"CNF_DUMPCYCLE"} = $CNF_DUMPCYCLE;
-
-push @EXPORT_OK, qw($CNF_RUNSPERCYCLE);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_RUNSPERCYCLE);
-
-$_confparm_key_VALUES{"CNF_RUNSPERCYCLE"} = $CNF_RUNSPERCYCLE;
-
-push @EXPORT_OK, qw($CNF_TAPECYCLE);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_TAPECYCLE);
-
-$_confparm_key_VALUES{"CNF_TAPECYCLE"} = $CNF_TAPECYCLE;
-
-push @EXPORT_OK, qw($CNF_NETUSAGE);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_NETUSAGE);
-
-$_confparm_key_VALUES{"CNF_NETUSAGE"} = $CNF_NETUSAGE;
-
-push @EXPORT_OK, qw($CNF_INPARALLEL);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_INPARALLEL);
-
-$_confparm_key_VALUES{"CNF_INPARALLEL"} = $CNF_INPARALLEL;
-
-push @EXPORT_OK, qw($CNF_DUMPORDER);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_DUMPORDER);
-
-$_confparm_key_VALUES{"CNF_DUMPORDER"} = $CNF_DUMPORDER;
-
-push @EXPORT_OK, qw($CNF_BUMPPERCENT);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_BUMPPERCENT);
-
-$_confparm_key_VALUES{"CNF_BUMPPERCENT"} = $CNF_BUMPPERCENT;
-
-push @EXPORT_OK, qw($CNF_BUMPSIZE);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_BUMPSIZE);
-
-$_confparm_key_VALUES{"CNF_BUMPSIZE"} = $CNF_BUMPSIZE;
-
-push @EXPORT_OK, qw($CNF_BUMPMULT);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_BUMPMULT);
-
-$_confparm_key_VALUES{"CNF_BUMPMULT"} = $CNF_BUMPMULT;
-
-push @EXPORT_OK, qw($CNF_BUMPDAYS);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_BUMPDAYS);
-
-$_confparm_key_VALUES{"CNF_BUMPDAYS"} = $CNF_BUMPDAYS;
-
-push @EXPORT_OK, qw($CNF_TPCHANGER);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_TPCHANGER);
-
-$_confparm_key_VALUES{"CNF_TPCHANGER"} = $CNF_TPCHANGER;
-
-push @EXPORT_OK, qw($CNF_RUNTAPES);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_RUNTAPES);
-
-$_confparm_key_VALUES{"CNF_RUNTAPES"} = $CNF_RUNTAPES;
-
-push @EXPORT_OK, qw($CNF_MAXDUMPS);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_MAXDUMPS);
-
-$_confparm_key_VALUES{"CNF_MAXDUMPS"} = $CNF_MAXDUMPS;
-
-push @EXPORT_OK, qw($CNF_ETIMEOUT);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_ETIMEOUT);
-
-$_confparm_key_VALUES{"CNF_ETIMEOUT"} = $CNF_ETIMEOUT;
-
-push @EXPORT_OK, qw($CNF_DTIMEOUT);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_DTIMEOUT);
-
-$_confparm_key_VALUES{"CNF_DTIMEOUT"} = $CNF_DTIMEOUT;
-
-push @EXPORT_OK, qw($CNF_CTIMEOUT);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_CTIMEOUT);
-
-$_confparm_key_VALUES{"CNF_CTIMEOUT"} = $CNF_CTIMEOUT;
-
-push @EXPORT_OK, qw($CNF_TAPEBUFS);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_TAPEBUFS);
-
-$_confparm_key_VALUES{"CNF_TAPEBUFS"} = $CNF_TAPEBUFS;
-
-push @EXPORT_OK, qw($CNF_DEVICE_OUTPUT_BUFFER_SIZE);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_DEVICE_OUTPUT_BUFFER_SIZE);
-
-$_confparm_key_VALUES{"CNF_DEVICE_OUTPUT_BUFFER_SIZE"} = $CNF_DEVICE_OUTPUT_BUFFER_SIZE;
-
-push @EXPORT_OK, qw($CNF_PRINTER);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_PRINTER);
-
-$_confparm_key_VALUES{"CNF_PRINTER"} = $CNF_PRINTER;
-
-push @EXPORT_OK, qw($CNF_AUTOFLUSH);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_AUTOFLUSH);
-
-$_confparm_key_VALUES{"CNF_AUTOFLUSH"} = $CNF_AUTOFLUSH;
-
-push @EXPORT_OK, qw($CNF_RESERVE);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_RESERVE);
-
-$_confparm_key_VALUES{"CNF_RESERVE"} = $CNF_RESERVE;
-
-push @EXPORT_OK, qw($CNF_MAXDUMPSIZE);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_MAXDUMPSIZE);
-
-$_confparm_key_VALUES{"CNF_MAXDUMPSIZE"} = $CNF_MAXDUMPSIZE;
-
-push @EXPORT_OK, qw($CNF_COLUMNSPEC);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_COLUMNSPEC);
-
-$_confparm_key_VALUES{"CNF_COLUMNSPEC"} = $CNF_COLUMNSPEC;
-
-push @EXPORT_OK, qw($CNF_AMRECOVER_DO_FSF);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_AMRECOVER_DO_FSF);
-
-$_confparm_key_VALUES{"CNF_AMRECOVER_DO_FSF"} = $CNF_AMRECOVER_DO_FSF;
-
-push @EXPORT_OK, qw($CNF_AMRECOVER_CHECK_LABEL);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_AMRECOVER_CHECK_LABEL);
-
-$_confparm_key_VALUES{"CNF_AMRECOVER_CHECK_LABEL"} = $CNF_AMRECOVER_CHECK_LABEL;
-
-push @EXPORT_OK, qw($CNF_AMRECOVER_CHANGER);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_AMRECOVER_CHANGER);
-
-$_confparm_key_VALUES{"CNF_AMRECOVER_CHANGER"} = $CNF_AMRECOVER_CHANGER;
-
-push @EXPORT_OK, qw($CNF_TAPERALGO);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_TAPERALGO);
-
-$_confparm_key_VALUES{"CNF_TAPERALGO"} = $CNF_TAPERALGO;
-
-push @EXPORT_OK, qw($CNF_FLUSH_THRESHOLD_DUMPED);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_FLUSH_THRESHOLD_DUMPED);
-
-$_confparm_key_VALUES{"CNF_FLUSH_THRESHOLD_DUMPED"} = $CNF_FLUSH_THRESHOLD_DUMPED;
-
-push @EXPORT_OK, qw($CNF_FLUSH_THRESHOLD_SCHEDULED);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_FLUSH_THRESHOLD_SCHEDULED);
-
-$_confparm_key_VALUES{"CNF_FLUSH_THRESHOLD_SCHEDULED"} = $CNF_FLUSH_THRESHOLD_SCHEDULED;
-
-push @EXPORT_OK, qw($CNF_TAPERFLUSH);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_TAPERFLUSH);
-
-$_confparm_key_VALUES{"CNF_TAPERFLUSH"} = $CNF_TAPERFLUSH;
-
-push @EXPORT_OK, qw($CNF_DISPLAYUNIT);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_DISPLAYUNIT);
-
-$_confparm_key_VALUES{"CNF_DISPLAYUNIT"} = $CNF_DISPLAYUNIT;
-
-push @EXPORT_OK, qw($CNF_KRB5KEYTAB);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_KRB5KEYTAB);
-
-$_confparm_key_VALUES{"CNF_KRB5KEYTAB"} = $CNF_KRB5KEYTAB;
-
-push @EXPORT_OK, qw($CNF_KRB5PRINCIPAL);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_KRB5PRINCIPAL);
-
-$_confparm_key_VALUES{"CNF_KRB5PRINCIPAL"} = $CNF_KRB5PRINCIPAL;
-
-push @EXPORT_OK, qw($CNF_LABEL_NEW_TAPES);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_LABEL_NEW_TAPES);
-
-$_confparm_key_VALUES{"CNF_LABEL_NEW_TAPES"} = $CNF_LABEL_NEW_TAPES;
-
-push @EXPORT_OK, qw($CNF_USETIMESTAMPS);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_USETIMESTAMPS);
-
-$_confparm_key_VALUES{"CNF_USETIMESTAMPS"} = $CNF_USETIMESTAMPS;
-
-push @EXPORT_OK, qw($CNF_REP_TRIES);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_REP_TRIES);
-
-$_confparm_key_VALUES{"CNF_REP_TRIES"} = $CNF_REP_TRIES;
-
-push @EXPORT_OK, qw($CNF_CONNECT_TRIES);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_CONNECT_TRIES);
-
-$_confparm_key_VALUES{"CNF_CONNECT_TRIES"} = $CNF_CONNECT_TRIES;
-
-push @EXPORT_OK, qw($CNF_REQ_TRIES);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_REQ_TRIES);
-
-$_confparm_key_VALUES{"CNF_REQ_TRIES"} = $CNF_REQ_TRIES;
-
-push @EXPORT_OK, qw($CNF_DEBUG_AMANDAD);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_DEBUG_AMANDAD);
-
-$_confparm_key_VALUES{"CNF_DEBUG_AMANDAD"} = $CNF_DEBUG_AMANDAD;
-
-push @EXPORT_OK, qw($CNF_DEBUG_AMIDXTAPED);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_DEBUG_AMIDXTAPED);
-
-$_confparm_key_VALUES{"CNF_DEBUG_AMIDXTAPED"} = $CNF_DEBUG_AMIDXTAPED;
-
-push @EXPORT_OK, qw($CNF_DEBUG_AMINDEXD);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_DEBUG_AMINDEXD);
-
-$_confparm_key_VALUES{"CNF_DEBUG_AMINDEXD"} = $CNF_DEBUG_AMINDEXD;
-
-push @EXPORT_OK, qw($CNF_DEBUG_AMRECOVER);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_DEBUG_AMRECOVER);
-
-$_confparm_key_VALUES{"CNF_DEBUG_AMRECOVER"} = $CNF_DEBUG_AMRECOVER;
-
-push @EXPORT_OK, qw($CNF_DEBUG_AUTH);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_DEBUG_AUTH);
-
-$_confparm_key_VALUES{"CNF_DEBUG_AUTH"} = $CNF_DEBUG_AUTH;
-
-push @EXPORT_OK, qw($CNF_DEBUG_EVENT);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_DEBUG_EVENT);
-
-$_confparm_key_VALUES{"CNF_DEBUG_EVENT"} = $CNF_DEBUG_EVENT;
-
-push @EXPORT_OK, qw($CNF_DEBUG_HOLDING);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_DEBUG_HOLDING);
-
-$_confparm_key_VALUES{"CNF_DEBUG_HOLDING"} = $CNF_DEBUG_HOLDING;
-
-push @EXPORT_OK, qw($CNF_DEBUG_PROTOCOL);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_DEBUG_PROTOCOL);
-
-$_confparm_key_VALUES{"CNF_DEBUG_PROTOCOL"} = $CNF_DEBUG_PROTOCOL;
-
-push @EXPORT_OK, qw($CNF_DEBUG_PLANNER);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_DEBUG_PLANNER);
-
-$_confparm_key_VALUES{"CNF_DEBUG_PLANNER"} = $CNF_DEBUG_PLANNER;
-
-push @EXPORT_OK, qw($CNF_DEBUG_DRIVER);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_DEBUG_DRIVER);
-
-$_confparm_key_VALUES{"CNF_DEBUG_DRIVER"} = $CNF_DEBUG_DRIVER;
-
-push @EXPORT_OK, qw($CNF_DEBUG_DUMPER);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_DEBUG_DUMPER);
-
-$_confparm_key_VALUES{"CNF_DEBUG_DUMPER"} = $CNF_DEBUG_DUMPER;
-
-push @EXPORT_OK, qw($CNF_DEBUG_CHUNKER);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_DEBUG_CHUNKER);
-
-$_confparm_key_VALUES{"CNF_DEBUG_CHUNKER"} = $CNF_DEBUG_CHUNKER;
-
-push @EXPORT_OK, qw($CNF_DEBUG_TAPER);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_DEBUG_TAPER);
-
-$_confparm_key_VALUES{"CNF_DEBUG_TAPER"} = $CNF_DEBUG_TAPER;
-
-push @EXPORT_OK, qw($CNF_DEBUG_SELFCHECK);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_DEBUG_SELFCHECK);
-
-$_confparm_key_VALUES{"CNF_DEBUG_SELFCHECK"} = $CNF_DEBUG_SELFCHECK;
-
-push @EXPORT_OK, qw($CNF_DEBUG_SENDSIZE);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_DEBUG_SENDSIZE);
-
-$_confparm_key_VALUES{"CNF_DEBUG_SENDSIZE"} = $CNF_DEBUG_SENDSIZE;
-
-push @EXPORT_OK, qw($CNF_DEBUG_SENDBACKUP);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_DEBUG_SENDBACKUP);
-
-$_confparm_key_VALUES{"CNF_DEBUG_SENDBACKUP"} = $CNF_DEBUG_SENDBACKUP;
-
-push @EXPORT_OK, qw($CNF_RESERVED_UDP_PORT);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_RESERVED_UDP_PORT);
-
-$_confparm_key_VALUES{"CNF_RESERVED_UDP_PORT"} = $CNF_RESERVED_UDP_PORT;
+push @EXPORT_OK, qw( $CNF_ORG $CNF_CONF $CNF_AMDUMP_SERVER $CNF_INDEX_SERVER $CNF_TAPE_SERVER $CNF_AUTH $CNF_SSH_KEYS $CNF_AMANDAD_PATH $CNF_CLIENT_USERNAME $CNF_CLIENT_PORT $CNF_GNUTAR_LIST_DIR $CNF_AMANDATES $CNF_MAILER $CNF_MAILTO $CNF_DUMPUSER $CNF_TAPEDEV $CNF_DEVICE_PROPERTY $CNF_PROPERTY $CNF_CHANGERDEV $CNF_CHANGERFILE $CNF_LABELSTR $CNF_AUTOLABEL $CNF_META_AUTOLABEL $CNF_TAPELIST $CNF_DISKFILE $CNF_INFOFILE $CNF_LOGDIR $CNF_INDEXDIR $CNF_TAPETYPE $CNF_DUMPCYCLE $CNF_RUNSPERCYCLE $CNF_TAPECYCLE $CNF_NETUSAGE $CNF_INPARALLEL $CNF_DUMPORDER $CNF_BUMPPERCENT $CNF_BUMPSIZE $CNF_BUMPMULT $CNF_BUMPDAYS $CNF_TPCHANGER $CNF_RUNTAPES $CNF_MAX_DLE_BY_VOLUME $CNF_MAXDUMPS $CNF_ETIMEOUT $CNF_DTIMEOUT $CNF_CTIMEOUT $CNF_DEVICE_OUTPUT_BUFFER_SIZE $CNF_PRINTER $CNF_AUTOFLUSH $CNF_RESERVE $CNF_MAXDUMPSIZE $CNF_COLUMNSPEC $CNF_AMRECOVER_DO_FSF $CNF_AMRECOVER_CHECK_LABEL $CNF_AMRECOVER_CHANGER $CNF_TAPERALGO $CNF_FLUSH_THRESHOLD_DUMPED $CNF_FLUSH_THRESHOLD_SCHEDULED $CNF_TAPERFLUSH $CNF_DISPLAYUNIT $CNF_KRB5KEYTAB $CNF_KRB5PRINCIPAL $CNF_LABEL_NEW_TAPES $CNF_USETIMESTAMPS $CNF_REP_TRIES $CNF_CONNECT_TRIES $CNF_REQ_TRIES $CNF_DEBUG_AMANDAD $CNF_DEBUG_RECOVERY $CNF_DEBUG_AMIDXTAPED $CNF_DEBUG_AMINDEXD $CNF_DEBUG_AMRECOVER $CNF_DEBUG_AUTH $CNF_DEBUG_EVENT $CNF_DEBUG_HOLDING $CNF_DEBUG_PROTOCOL $CNF_DEBUG_PLANNER $CNF_DEBUG_DRIVER $CNF_DEBUG_DUMPER $CNF_DEBUG_CHUNKER $CNF_DEBUG_TAPER $CNF_DEBUG_SELFCHECK $CNF_DEBUG_SENDSIZE $CNF_DEBUG_SENDBACKUP $CNF_RESERVED_UDP_PORT $CNF_RESERVED_TCP_PORT $CNF_UNRESERVED_TCP_PORT $CNF_HOLDINGDISK $CNF_SEND_AMREPORT_ON $CNF_TAPER_PARALLEL_WRITE $CNF_RECOVERY_LIMIT  $CNF_INTERACTIVITY  $CNF_TAPERSCAN  $CNF_EJECT_VOLUME  $CNF_TMPDIR);
+push @{$EXPORT_TAGS{"confparm_key"}}, qw( $CNF_ORG $CNF_CONF $CNF_AMDUMP_SERVER $CNF_INDEX_SERVER $CNF_TAPE_SERVER $CNF_AUTH $CNF_SSH_KEYS $CNF_AMANDAD_PATH $CNF_CLIENT_USERNAME $CNF_CLIENT_PORT $CNF_GNUTAR_LIST_DIR $CNF_AMANDATES $CNF_MAILER $CNF_MAILTO $CNF_DUMPUSER $CNF_TAPEDEV $CNF_DEVICE_PROPERTY $CNF_PROPERTY $CNF_CHANGERDEV $CNF_CHANGERFILE $CNF_LABELSTR $CNF_AUTOLABEL $CNF_META_AUTOLABEL $CNF_TAPELIST $CNF_DISKFILE $CNF_INFOFILE $CNF_LOGDIR $CNF_INDEXDIR $CNF_TAPETYPE $CNF_DUMPCYCLE $CNF_RUNSPERCYCLE $CNF_TAPECYCLE $CNF_NETUSAGE $CNF_INPARALLEL $CNF_DUMPORDER $CNF_BUMPPERCENT $CNF_BUMPSIZE $CNF_BUMPMULT $CNF_BUMPDAYS $CNF_TPCHANGER $CNF_RUNTAPES $CNF_MAX_DLE_BY_VOLUME $CNF_MAXDUMPS $CNF_ETIMEOUT $CNF_DTIMEOUT $CNF_CTIMEOUT $CNF_DEVICE_OUTPUT_BUFFER_SIZE $CNF_PRINTER $CNF_AUTOFLUSH $CNF_RESERVE $CNF_MAXDUMPSIZE $CNF_COLUMNSPEC $CNF_AMRECOVER_DO_FSF $CNF_AMRECOVER_CHECK_LABEL $CNF_AMRECOVER_CHANGER $CNF_TAPERALGO $CNF_FLUSH_THRESHOLD_DUMPED $CNF_FLUSH_THRESHOLD_SCHEDULED $CNF_TAPERFLUSH $CNF_DISPLAYUNIT $CNF_KRB5KEYTAB $CNF_KRB5PRINCIPAL $CNF_LABEL_NEW_TAPES $CNF_USETIMESTAMPS $CNF_REP_TRIES $CNF_CONNECT_TRIES $CNF_REQ_TRIES $CNF_DEBUG_AMANDAD $CNF_DEBUG_RECOVERY $CNF_DEBUG_AMIDXTAPED $CNF_DEBUG_AMINDEXD $CNF_DEBUG_AMRECOVER $CNF_DEBUG_AUTH $CNF_DEBUG_EVENT $CNF_DEBUG_HOLDING $CNF_DEBUG_PROTOCOL $CNF_DEBUG_PLANNER $CNF_DEBUG_DRIVER $CNF_DEBUG_DUMPER $CNF_DEBUG_CHUNKER $CNF_DEBUG_TAPER $CNF_DEBUG_SELFCHECK $CNF_DEBUG_SENDSIZE $CNF_DEBUG_SENDBACKUP $CNF_RESERVED_UDP_PORT $CNF_RESERVED_TCP_PORT $CNF_UNRESERVED_TCP_PORT $CNF_HOLDINGDISK $CNF_SEND_AMREPORT_ON $CNF_TAPER_PARALLEL_WRITE $CNF_RECOVERY_LIMIT  $CNF_INTERACTIVITY  $CNF_TAPERSCAN  $CNF_EJECT_VOLUME  $CNF_TMPDIR);
+      foreach (qw(  CNF_ORG CNF_CONF CNF_AMDUMP_SERVER CNF_INDEX_SERVER CNF_TAPE_SERVER CNF_AUTH CNF_SSH_KEYS CNF_AMANDAD_PATH CNF_CLIENT_USERNAME CNF_CLIENT_PORT CNF_GNUTAR_LIST_DIR CNF_AMANDATES CNF_MAILER CNF_MAILTO CNF_DUMPUSER CNF_TAPEDEV CNF_DEVICE_PROPERTY CNF_PROPERTY CNF_CHANGERDEV CNF_CHANGERFILE CNF_LABELSTR CNF_AUTOLABEL CNF_META_AUTOLABEL CNF_TAPELIST CNF_DISKFILE CNF_INFOFILE CNF_LOGDIR CNF_INDEXDIR CNF_TAPETYPE CNF_DUMPCYCLE CNF_RUNSPERCYCLE CNF_TAPECYCLE CNF_NETUSAGE CNF_INPARALLEL CNF_DUMPORDER CNF_BUMPPERCENT CNF_BUMPSIZE CNF_BUMPMULT CNF_BUMPDAYS CNF_TPCHANGER CNF_RUNTAPES CNF_MAX_DLE_BY_VOLUME CNF_MAXDUMPS CNF_ETIMEOUT CNF_DTIMEOUT CNF_CTIMEOUT CNF_DEVICE_OUTPUT_BUFFER_SIZE CNF_PRINTER CNF_AUTOFLUSH CNF_RESERVE CNF_MAXDUMPSIZE CNF_COLUMNSPEC CNF_AMRECOVER_DO_FSF CNF_AMRECOVER_CHECK_LABEL CNF_AMRECOVER_CHANGER CNF_TAPERALGO CNF_FLUSH_THRESHOLD_DUMPED CNF_FLUSH_THRESHOLD_SCHEDULED CNF_TAPERFLUSH CNF_DISPLAYUNIT CNF_KRB5KEYTAB CNF_KRB5PRINCIPAL CNF_LABEL_NEW_TAPES CNF_USETIMESTAMPS CNF_REP_TRIES CNF_CONNECT_TRIES CNF_REQ_TRIES CNF_DEBUG_AMANDAD CNF_DEBUG_RECOVERY CNF_DEBUG_AMIDXTAPED CNF_DEBUG_AMINDEXD CNF_DEBUG_AMRECOVER CNF_DEBUG_AUTH CNF_DEBUG_EVENT CNF_DEBUG_HOLDING CNF_DEBUG_PROTOCOL CNF_DEBUG_PLANNER CNF_DEBUG_DRIVER CNF_DEBUG_DUMPER CNF_DEBUG_CHUNKER CNF_DEBUG_TAPER CNF_DEBUG_SELFCHECK CNF_DEBUG_SENDSIZE CNF_DEBUG_SENDBACKUP CNF_RESERVED_UDP_PORT CNF_RESERVED_TCP_PORT CNF_UNRESERVED_TCP_PORT CNF_HOLDINGDISK CNF_SEND_AMREPORT_ON CNF_TAPER_PARALLEL_WRITE CNF_RECOVERY_LIMIT  CNF_INTERACTIVITY  CNF_TAPERSCAN  CNF_EJECT_VOLUME  CNF_TMPDIR)) {    $_confparm_key_VALUES{$_} = $$_;      }  
+#copy symbols in confparm_key to getconf
+push @{$EXPORT_TAGS{"getconf"}},  @{$EXPORT_TAGS{"confparm_key"}};
 
-push @EXPORT_OK, qw($CNF_RESERVED_TCP_PORT);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_RESERVED_TCP_PORT);
 
-$_confparm_key_VALUES{"CNF_RESERVED_TCP_PORT"} = $CNF_RESERVED_TCP_PORT;
+use Amanda::Config::FoldingHash;
 
-push @EXPORT_OK, qw($CNF_UNRESERVED_TCP_PORT);
-push @{$EXPORT_TAGS{"confparm_key"}}, qw($CNF_UNRESERVED_TCP_PORT);
+=pod
 
-$_confparm_key_VALUES{"CNF_UNRESERVED_TCP_PORT"} = $CNF_UNRESERVED_TCP_PORT;
+Global Parameters:       C<$CNF_ORG> C<$CNF_CONF> C<$CNF_AMDUMP_SERVER> C<$CNF_INDEX_SERVER> C<$CNF_TAPE_SERVER> C<$CNF_AUTH> C<$CNF_SSH_KEYS> C<$CNF_AMANDAD_PATH> C<$CNF_CLIENT_USERNAME> C<$CNF_CLIENT_PORT> C<$CNF_GNUTAR_LIST_DIR> C<$CNF_AMANDATES> C<$CNF_MAILER> C<$CNF_MAILTO> C<$CNF_DUMPUSER> C<$CNF_TAPEDEV> C<$CNF_DEVICE_PROPERTY> C<$CNF_PROPERTY> C<$CNF_CHANGERDEV> C<$CNF_CHANGERFILE> C<$CNF_LABELSTR> C<$CNF_AUTOLABEL> C<$CNF_META_AUTOLABEL> C<$CNF_TAPELIST> C<$CNF_DISKFILE> C<$CNF_INFOFILE> C<$CNF_LOGDIR> C<$CNF_INDEXDIR> C<$CNF_TAPETYPE> C<$CNF_DUMPCYCLE> C<$CNF_RUNSPERCYCLE> C<$CNF_TAPECYCLE> C<$CNF_NETUSAGE> C<$CNF_INPARALLEL> C<$CNF_DUMPORDER> C<$CNF_BUMPPERCENT> C<$CNF_BUMPSIZE> C<$CNF_BUMPMULT> C<$CNF_BUMPDAYS> C<$CNF_TPCHANGER> C<$CNF_RUNTAPES> C<$CNF_MAX_DLE_BY_VOLUME> C<$CNF_MAXDUMPS> C<$CNF_ETIMEOUT> C<$CNF_DTIMEOUT> C<$CNF_CTIMEOUT> C<$CNF_DEVICE_OUTPUT_BUFFER_SIZE> C<$CNF_PRINTER> C<$CNF_AUTOFLUSH> C<$CNF_RESERVE> C<$CNF_MAXDUMPSIZE> C<$CNF_COLUMNSPEC> C<$CNF_AMRECOVER_DO_FSF> C<$CNF_AMRECOVER_CHECK_LABEL> C<$CNF_AMRECOVER_CHANGER> C<$CNF_TAPERALGO> C<$CNF_FLUSH_THRESHOLD_DUMPED> C<$CNF_FLUSH_THRESHOLD_SCHEDULED> C<$CNF_TAPERFLUSH> C<$CNF_DISPLAYUNIT> C<$CNF_KRB5KEYTAB> C<$CNF_KRB5PRINCIPAL> C<$CNF_LABEL_NEW_TAPES> C<$CNF_USETIMESTAMPS> C<$CNF_REP_TRIES> C<$CNF_CONNECT_TRIES> C<$CNF_REQ_TRIES> C<$CNF_DEBUG_AMANDAD> C<$CNF_DEBUG_RECOVERY> C<$CNF_DEBUG_AMIDXTAPED> C<$CNF_DEBUG_AMINDEXD> C<$CNF_DEBUG_AMRECOVER> C<$CNF_DEBUG_AUTH> C<$CNF_DEBUG_EVENT> C<$CNF_DEBUG_HOLDING> C<$CNF_DEBUG_PROTOCOL> C<$CNF_DEBUG_PLANNER> C<$CNF_DEBUG_DRIVER> C<$CNF_DEBUG_DUMPER> C<$CNF_DEBUG_CHUNKER> C<$CNF_DEBUG_TAPER> C<$CNF_DEBUG_SELFCHECK> C<$CNF_DEBUG_SENDSIZE> C<$CNF_DEBUG_SENDBACKUP> C<$CNF_RESERVED_UDP_PORT> C<$CNF_RESERVED_TCP_PORT> C<$CNF_UNRESERVED_TCP_PORT> C<$CNF_HOLDINGDISK> C<$CNF_SEND_AMREPORT_ON> C<$CNF_TAPER_PARALLEL_WRITE> C<$CNF_RECOVERY_LIMIT>  C<$CNF_INTERACTIVITY>  C<$CNF_TAPERSCAN>  C<$CNF_EJECT_VOLUME>  C<$CNF_TMPDIR>
 
-#copy symbols in confparm_key to getconf
-push @{$EXPORT_TAGS{"getconf"}},  @{$EXPORT_TAGS{"confparm_key"}};
+=cut
 
 push @EXPORT_OK, qw(tapetype_key_to_string);
 push @{$EXPORT_TAGS{"tapetype_key"}}, qw(tapetype_key_to_string);
@@ -931,48 +776,20 @@ sub tapetype_key_to_string {
     return $enumval;
 }
 
-push @EXPORT_OK, qw($TAPETYPE_COMMENT);
-push @{$EXPORT_TAGS{"tapetype_key"}}, qw($TAPETYPE_COMMENT);
-
-$_tapetype_key_VALUES{"TAPETYPE_COMMENT"} = $TAPETYPE_COMMENT;
-
-push @EXPORT_OK, qw($TAPETYPE_LBL_TEMPL);
-push @{$EXPORT_TAGS{"tapetype_key"}}, qw($TAPETYPE_LBL_TEMPL);
-
-$_tapetype_key_VALUES{"TAPETYPE_LBL_TEMPL"} = $TAPETYPE_LBL_TEMPL;
-
-push @EXPORT_OK, qw($TAPETYPE_BLOCKSIZE);
-push @{$EXPORT_TAGS{"tapetype_key"}}, qw($TAPETYPE_BLOCKSIZE);
-
-$_tapetype_key_VALUES{"TAPETYPE_BLOCKSIZE"} = $TAPETYPE_BLOCKSIZE;
-
-push @EXPORT_OK, qw($TAPETYPE_READBLOCKSIZE);
-push @{$EXPORT_TAGS{"tapetype_key"}}, qw($TAPETYPE_READBLOCKSIZE);
-
-$_tapetype_key_VALUES{"TAPETYPE_READBLOCKSIZE"} = $TAPETYPE_READBLOCKSIZE;
-
-push @EXPORT_OK, qw($TAPETYPE_LENGTH);
-push @{$EXPORT_TAGS{"tapetype_key"}}, qw($TAPETYPE_LENGTH);
-
-$_tapetype_key_VALUES{"TAPETYPE_LENGTH"} = $TAPETYPE_LENGTH;
-
-push @EXPORT_OK, qw($TAPETYPE_FILEMARK);
-push @{$EXPORT_TAGS{"tapetype_key"}}, qw($TAPETYPE_FILEMARK);
-
-$_tapetype_key_VALUES{"TAPETYPE_FILEMARK"} = $TAPETYPE_FILEMARK;
+push @EXPORT_OK, qw( $TAPETYPE_COMMENT $TAPETYPE_LBL_TEMPL $TAPETYPE_BLOCKSIZE $TAPETYPE_READBLOCKSIZE $TAPETYPE_LENGTH $TAPETYPE_FILEMARK $TAPETYPE_SPEED $TAPETYPE_PART_SIZE $TAPETYPE_PART_CACHE_TYPE $TAPETYPE_PART_CACHE_DIR $TAPETYPE_PART_CACHE_MAX_SIZE);
+push @{$EXPORT_TAGS{"tapetype_key"}}, qw( $TAPETYPE_COMMENT $TAPETYPE_LBL_TEMPL $TAPETYPE_BLOCKSIZE $TAPETYPE_READBLOCKSIZE $TAPETYPE_LENGTH $TAPETYPE_FILEMARK $TAPETYPE_SPEED $TAPETYPE_PART_SIZE $TAPETYPE_PART_CACHE_TYPE $TAPETYPE_PART_CACHE_DIR $TAPETYPE_PART_CACHE_MAX_SIZE);
+      foreach (qw(  TAPETYPE_COMMENT TAPETYPE_LBL_TEMPL TAPETYPE_BLOCKSIZE TAPETYPE_READBLOCKSIZE TAPETYPE_LENGTH TAPETYPE_FILEMARK TAPETYPE_SPEED TAPETYPE_PART_SIZE TAPETYPE_PART_CACHE_TYPE TAPETYPE_PART_CACHE_DIR TAPETYPE_PART_CACHE_MAX_SIZE)) {        $_tapetype_key_VALUES{$_} = $$_;      }  
+#copy symbols in tapetype_key to getconf
+push @{$EXPORT_TAGS{"getconf"}},  @{$EXPORT_TAGS{"tapetype_key"}};
 
-push @EXPORT_OK, qw($TAPETYPE_SPEED);
-push @{$EXPORT_TAGS{"tapetype_key"}}, qw($TAPETYPE_SPEED);
 
-$_tapetype_key_VALUES{"TAPETYPE_SPEED"} = $TAPETYPE_SPEED;
+use Amanda::Config::FoldingHash;
 
-push @EXPORT_OK, qw($TAPETYPE_FILE_PAD);
-push @{$EXPORT_TAGS{"tapetype_key"}}, qw($TAPETYPE_FILE_PAD);
+=pod
 
-$_tapetype_key_VALUES{"TAPETYPE_FILE_PAD"} = $TAPETYPE_FILE_PAD;
+Tapetype Parameters:       C<$TAPETYPE_COMMENT> C<$TAPETYPE_LBL_TEMPL> C<$TAPETYPE_BLOCKSIZE> C<$TAPETYPE_READBLOCKSIZE> C<$TAPETYPE_LENGTH> C<$TAPETYPE_FILEMARK> C<$TAPETYPE_SPEED> C<$TAPETYPE_PART_SIZE> C<$TAPETYPE_PART_CACHE_TYPE> C<$TAPETYPE_PART_CACHE_DIR> C<$TAPETYPE_PART_CACHE_MAX_SIZE>
 
-#copy symbols in tapetype_key to getconf
-push @{$EXPORT_TAGS{"getconf"}},  @{$EXPORT_TAGS{"tapetype_key"}};
+=cut
 
 push @EXPORT_OK, qw(dumptype_key_to_string);
 push @{$EXPORT_TAGS{"dumptype_key"}}, qw(dumptype_key_to_string);
@@ -995,209 +812,247 @@ sub dumptype_key_to_string {
     return $enumval;
 }
 
-push @EXPORT_OK, qw($DUMPTYPE_COMMENT);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_COMMENT);
-
-$_dumptype_key_VALUES{"DUMPTYPE_COMMENT"} = $DUMPTYPE_COMMENT;
-
-push @EXPORT_OK, qw($DUMPTYPE_PROGRAM);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_PROGRAM);
-
-$_dumptype_key_VALUES{"DUMPTYPE_PROGRAM"} = $DUMPTYPE_PROGRAM;
-
-push @EXPORT_OK, qw($DUMPTYPE_SRVCOMPPROG);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_SRVCOMPPROG);
-
-$_dumptype_key_VALUES{"DUMPTYPE_SRVCOMPPROG"} = $DUMPTYPE_SRVCOMPPROG;
+push @EXPORT_OK, qw( $DUMPTYPE_COMMENT $DUMPTYPE_PROGRAM $DUMPTYPE_SRVCOMPPROG $DUMPTYPE_CLNTCOMPPROG $DUMPTYPE_SRV_ENCRYPT $DUMPTYPE_CLNT_ENCRYPT $DUMPTYPE_AMANDAD_PATH $DUMPTYPE_CLIENT_USERNAME $DUMPTYPE_CLIENT_PORT $DUMPTYPE_SSH_KEYS $DUMPTYPE_AUTH $DUMPTYPE_EXCLUDE $DUMPTYPE_INCLUDE $DUMPTYPE_PRIORITY $DUMPTYPE_DUMPCYCLE $DUMPTYPE_MAXDUMPS $DUMPTYPE_MAXPROMOTEDAY $DUMPTYPE_BUMPPERCENT $DUMPTYPE_BUMPSIZE $DUMPTYPE_BUMPDAYS $DUMPTYPE_BUMPMULT $DUMPTYPE_STARTTIME $DUMPTYPE_STRATEGY $DUMPTYPE_ESTIMATELIST $DUMPTYPE_COMPRESS $DUMPTYPE_ENCRYPT $DUMPTYPE_SRV_DECRYPT_OPT $DUMPTYPE_CLNT_DECRYPT_OPT $DUMPTYPE_COMPRATE $DUMPTYPE_TAPE_SPLITSIZE $DUMPTYPE_FALLBACK_SPLITSIZE $DUMPTYPE_SPLIT_DISKBUFFER $DUMPTYPE_RECORD $DUMPTYPE_SKIP_INCR $DUMPTYPE_SKIP_FULL $DUMPTYPE_HOLDINGDISK $DUMPTYPE_KENCRYPT $DUMPTYPE_IGNORE $DUMPTYPE_INDEX $DUMPTYPE_APPLICATION $DUMPTYPE_SCRIPTLIST $DUMPTYPE_PROPERTY $DUMPTYPE_DATA_PATH $DUMPTYPE_ALLOW_SPLIT $DUMPTYPE_MAX_WARNINGS $DUMPTYPE_RECOVERY_LIMIT  $DUMPTYPE_DUMP_LIMIT);
+push @{$EXPORT_TAGS{"dumptype_key"}}, qw( $DUMPTYPE_COMMENT $DUMPTYPE_PROGRAM $DUMPTYPE_SRVCOMPPROG $DUMPTYPE_CLNTCOMPPROG $DUMPTYPE_SRV_ENCRYPT $DUMPTYPE_CLNT_ENCRYPT $DUMPTYPE_AMANDAD_PATH $DUMPTYPE_CLIENT_USERNAME $DUMPTYPE_CLIENT_PORT $DUMPTYPE_SSH_KEYS $DUMPTYPE_AUTH $DUMPTYPE_EXCLUDE $DUMPTYPE_INCLUDE $DUMPTYPE_PRIORITY $DUMPTYPE_DUMPCYCLE $DUMPTYPE_MAXDUMPS $DUMPTYPE_MAXPROMOTEDAY $DUMPTYPE_BUMPPERCENT $DUMPTYPE_BUMPSIZE $DUMPTYPE_BUMPDAYS $DUMPTYPE_BUMPMULT $DUMPTYPE_STARTTIME $DUMPTYPE_STRATEGY $DUMPTYPE_ESTIMATELIST $DUMPTYPE_COMPRESS $DUMPTYPE_ENCRYPT $DUMPTYPE_SRV_DECRYPT_OPT $DUMPTYPE_CLNT_DECRYPT_OPT $DUMPTYPE_COMPRATE $DUMPTYPE_TAPE_SPLITSIZE $DUMPTYPE_FALLBACK_SPLITSIZE $DUMPTYPE_SPLIT_DISKBUFFER $DUMPTYPE_RECORD $DUMPTYPE_SKIP_INCR $DUMPTYPE_SKIP_FULL $DUMPTYPE_HOLDINGDISK $DUMPTYPE_KENCRYPT $DUMPTYPE_IGNORE $DUMPTYPE_INDEX $DUMPTYPE_APPLICATION $DUMPTYPE_SCRIPTLIST $DUMPTYPE_PROPERTY $DUMPTYPE_DATA_PATH $DUMPTYPE_ALLOW_SPLIT $DUMPTYPE_MAX_WARNINGS $DUMPTYPE_RECOVERY_LIMIT  $DUMPTYPE_DUMP_LIMIT);
+      foreach (qw(  DUMPTYPE_COMMENT DUMPTYPE_PROGRAM DUMPTYPE_SRVCOMPPROG DUMPTYPE_CLNTCOMPPROG DUMPTYPE_SRV_ENCRYPT DUMPTYPE_CLNT_ENCRYPT DUMPTYPE_AMANDAD_PATH DUMPTYPE_CLIENT_USERNAME DUMPTYPE_CLIENT_PORT DUMPTYPE_SSH_KEYS DUMPTYPE_AUTH DUMPTYPE_EXCLUDE DUMPTYPE_INCLUDE DUMPTYPE_PRIORITY DUMPTYPE_DUMPCYCLE DUMPTYPE_MAXDUMPS DUMPTYPE_MAXPROMOTEDAY DUMPTYPE_BUMPPERCENT DUMPTYPE_BUMPSIZE DUMPTYPE_BUMPDAYS DUMPTYPE_BUMPMULT DUMPTYPE_STARTTIME DUMPTYPE_STRATEGY DUMPTYPE_ESTIMATELIST DUMPTYPE_COMPRESS DUMPTYPE_ENCRYPT DUMPTYPE_SRV_DECRYPT_OPT DUMPTYPE_CLNT_DECRYPT_OPT DUMPTYPE_COMPRATE DUMPTYPE_TAPE_SPLITSIZE DUMPTYPE_FALLBACK_SPLITSIZE DUMPTYPE_SPLIT_DISKBUFFER DUMPTYPE_RECORD DUMPTYPE_SKIP_INCR DUMPTYPE_SKIP_FULL DUMPTYPE_HOLDINGDISK DUMPTYPE_KENCRYPT DUMPTYPE_IGNORE DUMPTYPE_INDEX DUMPTYPE_APPLICATION DUMPTYPE_SCRIPTLIST DUMPTYPE_PROPERTY DUMPTYPE_DATA_PATH DUMPTYPE_ALLOW_SPLIT DUMPTYPE_MAX_WARNINGS DUMPTYPE_RECOVERY_LIMIT  DUMPTYPE_DUMP_LIMIT)) {      $_dumptype_key_VALUES{$_} = $$_;      }  
+#copy symbols in dumptype_key to getconf
+push @{$EXPORT_TAGS{"getconf"}},  @{$EXPORT_TAGS{"dumptype_key"}};
 
-push @EXPORT_OK, qw($DUMPTYPE_CLNTCOMPPROG);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_CLNTCOMPPROG);
 
-$_dumptype_key_VALUES{"DUMPTYPE_CLNTCOMPPROG"} = $DUMPTYPE_CLNTCOMPPROG;
+use Amanda::Config::FoldingHash;
 
-push @EXPORT_OK, qw($DUMPTYPE_SRV_ENCRYPT);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_SRV_ENCRYPT);
+=pod
 
-$_dumptype_key_VALUES{"DUMPTYPE_SRV_ENCRYPT"} = $DUMPTYPE_SRV_ENCRYPT;
+Dumptype Parameters:       C<$DUMPTYPE_COMMENT> C<$DUMPTYPE_PROGRAM> C<$DUMPTYPE_SRVCOMPPROG> C<$DUMPTYPE_CLNTCOMPPROG> C<$DUMPTYPE_SRV_ENCRYPT> C<$DUMPTYPE_CLNT_ENCRYPT> C<$DUMPTYPE_AMANDAD_PATH> C<$DUMPTYPE_CLIENT_USERNAME> C<$DUMPTYPE_CLIENT_PORT> C<$DUMPTYPE_SSH_KEYS> C<$DUMPTYPE_AUTH> C<$DUMPTYPE_EXCLUDE> C<$DUMPTYPE_INCLUDE> C<$DUMPTYPE_PRIORITY> C<$DUMPTYPE_DUMPCYCLE> C<$DUMPTYPE_MAXDUMPS> C<$DUMPTYPE_MAXPROMOTEDAY> C<$DUMPTYPE_BUMPPERCENT> C<$DUMPTYPE_BUMPSIZE> C<$DUMPTYPE_BUMPDAYS> C<$DUMPTYPE_BUMPMULT> C<$DUMPTYPE_STARTTIME> C<$DUMPTYPE_STRATEGY> C<$DUMPTYPE_ESTIMATELIST> C<$DUMPTYPE_COMPRESS> C<$DUMPTYPE_ENCRYPT> C<$DUMPTYPE_SRV_DECRYPT_OPT> C<$DUMPTYPE_CLNT_DECRYPT_OPT> C<$DUMPTYPE_COMPRATE> C<$DUMPTYPE_TAPE_SPLITSIZE> C<$DUMPTYPE_FALLBACK_SPLITSIZE> C<$DUMPTYPE_SPLIT_DISKBUFFER> C<$DUMPTYPE_RECORD> C<$DUMPTYPE_SKIP_INCR> C<$DUMPTYPE_SKIP_FULL> C<$DUMPTYPE_HOLDINGDISK> C<$DUMPTYPE_KENCRYPT> C<$DUMPTYPE_IGNORE> C<$DUMPTYPE_INDEX> C<$DUMPTYPE_APPLICATION> C<$DUMPTYPE_SCRIPTLIST> C<$DUMPTYPE_PROPERTY> C<$DUMPTYPE_DATA_PATH> C<$DUMPTYPE_ALLOW_SPLIT> C<$DUMPTYPE_MAX_WARNINGS> C<$DUMPTYPE_RECOVERY_LIMIT>  C<$DUMPTYPE_DUMP_LIMIT>
 
-push @EXPORT_OK, qw($DUMPTYPE_CLNT_ENCRYPT);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_CLNT_ENCRYPT);
+=cut
 
-$_dumptype_key_VALUES{"DUMPTYPE_CLNT_ENCRYPT"} = $DUMPTYPE_CLNT_ENCRYPT;
+push @EXPORT_OK, qw(interface_key_to_string);
+push @{$EXPORT_TAGS{"interface_key"}}, qw(interface_key_to_string);
 
-push @EXPORT_OK, qw($DUMPTYPE_AMANDAD_PATH);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_AMANDAD_PATH);
+my %_interface_key_VALUES;
+#Convert an enum value to a single string
+sub interface_key_to_string {
+    my ($enumval) = @_;
 
-$_dumptype_key_VALUES{"DUMPTYPE_AMANDAD_PATH"} = $DUMPTYPE_AMANDAD_PATH;
+    for my $k (keys %_interface_key_VALUES) {
+       my $v = $_interface_key_VALUES{$k};
 
-push @EXPORT_OK, qw($DUMPTYPE_CLIENT_USERNAME);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_CLIENT_USERNAME);
+       #is this a matching flag?
+       if ($enumval == $v) {
+           return $k;
+       }
+    }
 
-$_dumptype_key_VALUES{"DUMPTYPE_CLIENT_USERNAME"} = $DUMPTYPE_CLIENT_USERNAME;
+#default, just return the number
+    return $enumval;
+}
 
-push @EXPORT_OK, qw($DUMPTYPE_SSH_KEYS);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_SSH_KEYS);
+push @EXPORT_OK, qw( $INTER_COMMENT $INTER_MAXUSAGE);
+push @{$EXPORT_TAGS{"interface_key"}}, qw( $INTER_COMMENT $INTER_MAXUSAGE);
+      foreach (qw(  INTER_COMMENT INTER_MAXUSAGE)) {   $_interface_key_VALUES{$_} = $$_;      }  
+#copy symbols in interface_key to getconf
+push @{$EXPORT_TAGS{"getconf"}},  @{$EXPORT_TAGS{"interface_key"}};
 
-$_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);
+use Amanda::Config::FoldingHash;
 
-$_dumptype_key_VALUES{"DUMPTYPE_SECURITY_DRIVER"} = $DUMPTYPE_SECURITY_DRIVER;
+=pod
 
-push @EXPORT_OK, qw($DUMPTYPE_EXCLUDE);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_EXCLUDE);
+Dumptype Parameters:       C<$INTER_COMMENT> C<$INTER_MAXUSAGE>
 
-$_dumptype_key_VALUES{"DUMPTYPE_EXCLUDE"} = $DUMPTYPE_EXCLUDE;
+=cut
 
-push @EXPORT_OK, qw($DUMPTYPE_INCLUDE);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_INCLUDE);
+push @EXPORT_OK, qw(holdingdisk_key_to_string);
+push @{$EXPORT_TAGS{"holdingdisk_key"}}, qw(holdingdisk_key_to_string);
 
-$_dumptype_key_VALUES{"DUMPTYPE_INCLUDE"} = $DUMPTYPE_INCLUDE;
+my %_holdingdisk_key_VALUES;
+#Convert an enum value to a single string
+sub holdingdisk_key_to_string {
+    my ($enumval) = @_;
 
-push @EXPORT_OK, qw($DUMPTYPE_PRIORITY);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_PRIORITY);
+    for my $k (keys %_holdingdisk_key_VALUES) {
+       my $v = $_holdingdisk_key_VALUES{$k};
 
-$_dumptype_key_VALUES{"DUMPTYPE_PRIORITY"} = $DUMPTYPE_PRIORITY;
+       #is this a matching flag?
+       if ($enumval == $v) {
+           return $k;
+       }
+    }
 
-push @EXPORT_OK, qw($DUMPTYPE_DUMPCYCLE);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_DUMPCYCLE);
+#default, just return the number
+    return $enumval;
+}
 
-$_dumptype_key_VALUES{"DUMPTYPE_DUMPCYCLE"} = $DUMPTYPE_DUMPCYCLE;
+push @EXPORT_OK, qw( $HOLDING_COMMENT $HOLDING_DISKDIR $HOLDING_DISKSIZE $HOLDING_CHUNKSIZE);
+push @{$EXPORT_TAGS{"holdingdisk_key"}}, qw( $HOLDING_COMMENT $HOLDING_DISKDIR $HOLDING_DISKSIZE $HOLDING_CHUNKSIZE);
+      foreach (qw(  HOLDING_COMMENT HOLDING_DISKDIR HOLDING_DISKSIZE HOLDING_CHUNKSIZE)) {     $_holdingdisk_key_VALUES{$_} = $$_;      }  
+#copy symbols in holdingdisk_key to getconf
+push @{$EXPORT_TAGS{"getconf"}},  @{$EXPORT_TAGS{"holdingdisk_key"}};
 
-push @EXPORT_OK, qw($DUMPTYPE_MAXDUMPS);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_MAXDUMPS);
 
-$_dumptype_key_VALUES{"DUMPTYPE_MAXDUMPS"} = $DUMPTYPE_MAXDUMPS;
+use Amanda::Config::FoldingHash;
 
-push @EXPORT_OK, qw($DUMPTYPE_MAXPROMOTEDAY);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_MAXPROMOTEDAY);
+=pod
 
-$_dumptype_key_VALUES{"DUMPTYPE_MAXPROMOTEDAY"} = $DUMPTYPE_MAXPROMOTEDAY;
+Holdingdisk Parameters:       C<$HOLDING_COMMENT> C<$HOLDING_DISKDIR> C<$HOLDING_DISKSIZE> C<$HOLDING_CHUNKSIZE>
 
-push @EXPORT_OK, qw($DUMPTYPE_BUMPPERCENT);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_BUMPPERCENT);
+=cut
 
-$_dumptype_key_VALUES{"DUMPTYPE_BUMPPERCENT"} = $DUMPTYPE_BUMPPERCENT;
+push @EXPORT_OK, qw(application_key_to_string);
+push @{$EXPORT_TAGS{"application_key"}}, qw(application_key_to_string);
 
-push @EXPORT_OK, qw($DUMPTYPE_BUMPSIZE);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_BUMPSIZE);
+my %_application_key_VALUES;
+#Convert an enum value to a single string
+sub application_key_to_string {
+    my ($enumval) = @_;
 
-$_dumptype_key_VALUES{"DUMPTYPE_BUMPSIZE"} = $DUMPTYPE_BUMPSIZE;
+    for my $k (keys %_application_key_VALUES) {
+       my $v = $_application_key_VALUES{$k};
 
-push @EXPORT_OK, qw($DUMPTYPE_BUMPDAYS);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_BUMPDAYS);
+       #is this a matching flag?
+       if ($enumval == $v) {
+           return $k;
+       }
+    }
 
-$_dumptype_key_VALUES{"DUMPTYPE_BUMPDAYS"} = $DUMPTYPE_BUMPDAYS;
+#default, just return the number
+    return $enumval;
+}
 
-push @EXPORT_OK, qw($DUMPTYPE_BUMPMULT);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_BUMPMULT);
+push @EXPORT_OK, qw( $APPLICATION_COMMENT $APPLICATION_PLUGIN $APPLICATION_PROPERTY  $APPLICATION_CLIENT_NAME);
+push @{$EXPORT_TAGS{"application_key"}}, qw( $APPLICATION_COMMENT $APPLICATION_PLUGIN $APPLICATION_PROPERTY  $APPLICATION_CLIENT_NAME);
+      foreach (qw(  APPLICATION_COMMENT APPLICATION_PLUGIN APPLICATION_PROPERTY  APPLICATION_CLIENT_NAME)) {   $_application_key_VALUES{$_} = $$_;      }  
+#copy symbols in application_key to getconf
+push @{$EXPORT_TAGS{"getconf"}},  @{$EXPORT_TAGS{"application_key"}};
 
-$_dumptype_key_VALUES{"DUMPTYPE_BUMPMULT"} = $DUMPTYPE_BUMPMULT;
 
-push @EXPORT_OK, qw($DUMPTYPE_STARTTIME);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_STARTTIME);
+use Amanda::Config::FoldingHash;
 
-$_dumptype_key_VALUES{"DUMPTYPE_STARTTIME"} = $DUMPTYPE_STARTTIME;
+=pod
 
-push @EXPORT_OK, qw($DUMPTYPE_STRATEGY);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_STRATEGY);
+Application Parameters:       C<$APPLICATION_COMMENT> C<$APPLICATION_PLUGIN> C<$APPLICATION_PROPERTY>  C<$APPLICATION_CLIENT_NAME>
 
-$_dumptype_key_VALUES{"DUMPTYPE_STRATEGY"} = $DUMPTYPE_STRATEGY;
+=cut
 
-push @EXPORT_OK, qw($DUMPTYPE_ESTIMATE);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_ESTIMATE);
+push @EXPORT_OK, qw(pp_script_key_to_string);
+push @{$EXPORT_TAGS{"pp_script_key"}}, qw(pp_script_key_to_string);
 
-$_dumptype_key_VALUES{"DUMPTYPE_ESTIMATE"} = $DUMPTYPE_ESTIMATE;
+my %_pp_script_key_VALUES;
+#Convert an enum value to a single string
+sub pp_script_key_to_string {
+    my ($enumval) = @_;
 
-push @EXPORT_OK, qw($DUMPTYPE_COMPRESS);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_COMPRESS);
+    for my $k (keys %_pp_script_key_VALUES) {
+       my $v = $_pp_script_key_VALUES{$k};
 
-$_dumptype_key_VALUES{"DUMPTYPE_COMPRESS"} = $DUMPTYPE_COMPRESS;
+       #is this a matching flag?
+       if ($enumval == $v) {
+           return $k;
+       }
+    }
 
-push @EXPORT_OK, qw($DUMPTYPE_ENCRYPT);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_ENCRYPT);
+#default, just return the number
+    return $enumval;
+}
 
-$_dumptype_key_VALUES{"DUMPTYPE_ENCRYPT"} = $DUMPTYPE_ENCRYPT;
+push @EXPORT_OK, qw( $PP_SCRIPT_COMMENT $PP_SCRIPT_PLUGIN $PP_SCRIPT_PROPERTY $PP_SCRIPT_EXECUTE_ON $PP_SCRIPT_EXECUTE_WHERE $PP_SCRIPT_ORDER $PP_SCRIPT_SINGLE_EXECUTION $PP_SCRIPT_CLIENT_NAME);
+push @{$EXPORT_TAGS{"pp_script_key"}}, qw( $PP_SCRIPT_COMMENT $PP_SCRIPT_PLUGIN $PP_SCRIPT_PROPERTY $PP_SCRIPT_EXECUTE_ON $PP_SCRIPT_EXECUTE_WHERE $PP_SCRIPT_ORDER $PP_SCRIPT_SINGLE_EXECUTION $PP_SCRIPT_CLIENT_NAME);
+      foreach (qw(  PP_SCRIPT_COMMENT PP_SCRIPT_PLUGIN PP_SCRIPT_PROPERTY PP_SCRIPT_EXECUTE_ON PP_SCRIPT_EXECUTE_WHERE PP_SCRIPT_ORDER PP_SCRIPT_SINGLE_EXECUTION PP_SCRIPT_CLIENT_NAME)) {    $_pp_script_key_VALUES{$_} = $$_;      }  
+#copy symbols in pp_script_key to getconf
+push @{$EXPORT_TAGS{"getconf"}},  @{$EXPORT_TAGS{"pp_script_key"}};
 
-push @EXPORT_OK, qw($DUMPTYPE_SRV_DECRYPT_OPT);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_SRV_DECRYPT_OPT);
 
-$_dumptype_key_VALUES{"DUMPTYPE_SRV_DECRYPT_OPT"} = $DUMPTYPE_SRV_DECRYPT_OPT;
+use Amanda::Config::FoldingHash;
 
-push @EXPORT_OK, qw($DUMPTYPE_CLNT_DECRYPT_OPT);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_CLNT_DECRYPT_OPT);
+=pod
 
-$_dumptype_key_VALUES{"DUMPTYPE_CLNT_DECRYPT_OPT"} = $DUMPTYPE_CLNT_DECRYPT_OPT;
+Pre/Post-Script Parameters:       C<$PP_SCRIPT_COMMENT> C<$PP_SCRIPT_PLUGIN> C<$PP_SCRIPT_PROPERTY> C<$PP_SCRIPT_EXECUTE_ON> C<$PP_SCRIPT_EXECUTE_WHERE> C<$PP_SCRIPT_ORDER> C<$PP_SCRIPT_SINGLE_EXECUTION> C<$PP_SCRIPT_CLIENT_NAME>
 
-push @EXPORT_OK, qw($DUMPTYPE_COMPRATE);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_COMPRATE);
+=cut
 
-$_dumptype_key_VALUES{"DUMPTYPE_COMPRATE"} = $DUMPTYPE_COMPRATE;
+push @EXPORT_OK, qw(device_config_key_to_string);
+push @{$EXPORT_TAGS{"device_config_key"}}, qw(device_config_key_to_string);
 
-push @EXPORT_OK, qw($DUMPTYPE_TAPE_SPLITSIZE);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_TAPE_SPLITSIZE);
+my %_device_config_key_VALUES;
+#Convert an enum value to a single string
+sub device_config_key_to_string {
+    my ($enumval) = @_;
 
-$_dumptype_key_VALUES{"DUMPTYPE_TAPE_SPLITSIZE"} = $DUMPTYPE_TAPE_SPLITSIZE;
+    for my $k (keys %_device_config_key_VALUES) {
+       my $v = $_device_config_key_VALUES{$k};
 
-push @EXPORT_OK, qw($DUMPTYPE_FALLBACK_SPLITSIZE);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_FALLBACK_SPLITSIZE);
+       #is this a matching flag?
+       if ($enumval == $v) {
+           return $k;
+       }
+    }
 
-$_dumptype_key_VALUES{"DUMPTYPE_FALLBACK_SPLITSIZE"} = $DUMPTYPE_FALLBACK_SPLITSIZE;
+#default, just return the number
+    return $enumval;
+}
 
-push @EXPORT_OK, qw($DUMPTYPE_SPLIT_DISKBUFFER);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_SPLIT_DISKBUFFER);
+push @EXPORT_OK, qw( $DEVICE_CONFIG_COMMENT $DEVICE_CONFIG_TAPEDEV $DEVICE_CONFIG_DEVICE_PROPERTY);
+push @{$EXPORT_TAGS{"device_config_key"}}, qw( $DEVICE_CONFIG_COMMENT $DEVICE_CONFIG_TAPEDEV $DEVICE_CONFIG_DEVICE_PROPERTY);
+      foreach (qw(  DEVICE_CONFIG_COMMENT DEVICE_CONFIG_TAPEDEV DEVICE_CONFIG_DEVICE_PROPERTY)) {      $_device_config_key_VALUES{$_} = $$_;      }  
+#copy symbols in device_config_key to getconf
+push @{$EXPORT_TAGS{"getconf"}},  @{$EXPORT_TAGS{"device_config_key"}};
 
-$_dumptype_key_VALUES{"DUMPTYPE_SPLIT_DISKBUFFER"} = $DUMPTYPE_SPLIT_DISKBUFFER;
 
-push @EXPORT_OK, qw($DUMPTYPE_RECORD);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_RECORD);
+use Amanda::Config::FoldingHash;
 
-$_dumptype_key_VALUES{"DUMPTYPE_RECORD"} = $DUMPTYPE_RECORD;
+=pod
 
-push @EXPORT_OK, qw($DUMPTYPE_SKIP_INCR);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_SKIP_INCR);
+Pre/Post-Script Parameters:       C<$DEVICE_CONFIG_COMMENT> C<$DEVICE_CONFIG_TAPEDEV> C<$DEVICE_CONFIG_DEVICE_PROPERTY>
 
-$_dumptype_key_VALUES{"DUMPTYPE_SKIP_INCR"} = $DUMPTYPE_SKIP_INCR;
+=cut
 
-push @EXPORT_OK, qw($DUMPTYPE_SKIP_FULL);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_SKIP_FULL);
+push @EXPORT_OK, qw(changer_config_key_to_string);
+push @{$EXPORT_TAGS{"changer_config_key"}}, qw(changer_config_key_to_string);
 
-$_dumptype_key_VALUES{"DUMPTYPE_SKIP_FULL"} = $DUMPTYPE_SKIP_FULL;
+my %_changer_config_key_VALUES;
+#Convert an enum value to a single string
+sub changer_config_key_to_string {
+    my ($enumval) = @_;
 
-push @EXPORT_OK, qw($DUMPTYPE_HOLDINGDISK);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_HOLDINGDISK);
+    for my $k (keys %_changer_config_key_VALUES) {
+       my $v = $_changer_config_key_VALUES{$k};
 
-$_dumptype_key_VALUES{"DUMPTYPE_HOLDINGDISK"} = $DUMPTYPE_HOLDINGDISK;
+       #is this a matching flag?
+       if ($enumval == $v) {
+           return $k;
+       }
+    }
 
-push @EXPORT_OK, qw($DUMPTYPE_KENCRYPT);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_KENCRYPT);
+#default, just return the number
+    return $enumval;
+}
 
-$_dumptype_key_VALUES{"DUMPTYPE_KENCRYPT"} = $DUMPTYPE_KENCRYPT;
+push @EXPORT_OK, qw( $CHANGER_CONFIG_COMMENT $CHANGER_CONFIG_TAPEDEV $CHANGER_CONFIG_TPCHANGER $CHANGER_CONFIG_CHANGERDEV $CHANGER_CONFIG_CHANGERFILE $CHANGER_CONFIG_PROPERTY $CHANGER_CONFIG_DEVICE_PROPERTY);
+push @{$EXPORT_TAGS{"changer_config_key"}}, qw( $CHANGER_CONFIG_COMMENT $CHANGER_CONFIG_TAPEDEV $CHANGER_CONFIG_TPCHANGER $CHANGER_CONFIG_CHANGERDEV $CHANGER_CONFIG_CHANGERFILE $CHANGER_CONFIG_PROPERTY $CHANGER_CONFIG_DEVICE_PROPERTY);
+      foreach (qw(  CHANGER_CONFIG_COMMENT CHANGER_CONFIG_TAPEDEV CHANGER_CONFIG_TPCHANGER CHANGER_CONFIG_CHANGERDEV CHANGER_CONFIG_CHANGERFILE CHANGER_CONFIG_PROPERTY CHANGER_CONFIG_DEVICE_PROPERTY)) {     $_changer_config_key_VALUES{$_} = $$_;      }  
+#copy symbols in changer_config_key to getconf
+push @{$EXPORT_TAGS{"getconf"}},  @{$EXPORT_TAGS{"changer_config_key"}};
 
-push @EXPORT_OK, qw($DUMPTYPE_IGNORE);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_IGNORE);
 
-$_dumptype_key_VALUES{"DUMPTYPE_IGNORE"} = $DUMPTYPE_IGNORE;
+use Amanda::Config::FoldingHash;
 
-push @EXPORT_OK, qw($DUMPTYPE_INDEX);
-push @{$EXPORT_TAGS{"dumptype_key"}}, qw($DUMPTYPE_INDEX);
+=pod
 
-$_dumptype_key_VALUES{"DUMPTYPE_INDEX"} = $DUMPTYPE_INDEX;
+Pre/Post-Script Parameters:       C<$CHANGER_CONFIG_COMMENT> C<$CHANGER_CONFIG_TAPEDEV> C<$CHANGER_CONFIG_TPCHANGER> C<$CHANGER_CONFIG_CHANGERDEV> C<$CHANGER_CONFIG_CHANGERFILE> C<$CHANGER_CONFIG_PROPERTY> C<$CHANGER_CONFIG_DEVICE_PROPERTY>
 
-#copy symbols in dumptype_key to getconf
-push @{$EXPORT_TAGS{"getconf"}},  @{$EXPORT_TAGS{"dumptype_key"}};
+=cut
 
-push @EXPORT_OK, qw(interface_key_to_string);
-push @{$EXPORT_TAGS{"interface_key"}}, qw(interface_key_to_string);
+push @EXPORT_OK, qw(interactivity_key_to_string);
+push @{$EXPORT_TAGS{"interactivity_key"}}, qw(interactivity_key_to_string);
 
-my %_interface_key_VALUES;
+my %_interactivity_key_VALUES;
 #Convert an enum value to a single string
-sub interface_key_to_string {
+sub interactivity_key_to_string {
     my ($enumval) = @_;
 
-    for my $k (keys %_interface_key_VALUES) {
-       my $v = $_interface_key_VALUES{$k};
+    for my $k (keys %_interactivity_key_VALUES) {
+       my $v = $_interactivity_key_VALUES{$k};
 
        #is this a matching flag?
        if ($enumval == $v) {
@@ -1209,29 +1064,31 @@ sub interface_key_to_string {
     return $enumval;
 }
 
-push @EXPORT_OK, qw($INTER_COMMENT);
-push @{$EXPORT_TAGS{"interface_key"}}, qw($INTER_COMMENT);
+push @EXPORT_OK, qw( $INTERACTIVITY_COMMENT $INTERACTIVITY_PLUGIN $INTERACTIVITY_PROPERTY);
+push @{$EXPORT_TAGS{"interactivity_key"}}, qw( $INTERACTIVITY_COMMENT $INTERACTIVITY_PLUGIN $INTERACTIVITY_PROPERTY);
+      foreach (qw(  INTERACTIVITY_COMMENT INTERACTIVITY_PLUGIN INTERACTIVITY_PROPERTY)) {      $_interactivity_key_VALUES{$_} = $$_;      }  
+#copy symbols in interactivity_key to getconf
+push @{$EXPORT_TAGS{"getconf"}},  @{$EXPORT_TAGS{"interactivity_key"}};
 
-$_interface_key_VALUES{"INTER_COMMENT"} = $INTER_COMMENT;
 
-push @EXPORT_OK, qw($INTER_MAXUSAGE);
-push @{$EXPORT_TAGS{"interface_key"}}, qw($INTER_MAXUSAGE);
+use Amanda::Config::FoldingHash;
 
-$_interface_key_VALUES{"INTER_MAXUSAGE"} = $INTER_MAXUSAGE;
+=pod
 
-#copy symbols in interface_key to getconf
-push @{$EXPORT_TAGS{"getconf"}},  @{$EXPORT_TAGS{"interface_key"}};
+Interactivity Parameters:       C<$INTERACTIVITY_COMMENT> C<$INTERACTIVITY_PLUGIN> C<$INTERACTIVITY_PROPERTY>
 
-push @EXPORT_OK, qw(holdingdisk_key_to_string);
-push @{$EXPORT_TAGS{"holdingdisk_key"}}, qw(holdingdisk_key_to_string);
+=cut
 
-my %_holdingdisk_key_VALUES;
+push @EXPORT_OK, qw(taperscan_key_to_string);
+push @{$EXPORT_TAGS{"taperscan_key"}}, qw(taperscan_key_to_string);
+
+my %_taperscan_key_VALUES;
 #Convert an enum value to a single string
-sub holdingdisk_key_to_string {
+sub taperscan_key_to_string {
     my ($enumval) = @_;
 
-    for my $k (keys %_holdingdisk_key_VALUES) {
-       my $v = $_holdingdisk_key_VALUES{$k};
+    for my $k (keys %_taperscan_key_VALUES) {
+       my $v = $_taperscan_key_VALUES{$k};
 
        #is this a matching flag?
        if ($enumval == $v) {
@@ -1243,28 +1100,20 @@ sub holdingdisk_key_to_string {
     return $enumval;
 }
 
-push @EXPORT_OK, qw($HOLDING_COMMENT);
-push @{$EXPORT_TAGS{"holdingdisk_key"}}, qw($HOLDING_COMMENT);
-
-$_holdingdisk_key_VALUES{"HOLDING_COMMENT"} = $HOLDING_COMMENT;
-
-push @EXPORT_OK, qw($HOLDING_DISKDIR);
-push @{$EXPORT_TAGS{"holdingdisk_key"}}, qw($HOLDING_DISKDIR);
-
-$_holdingdisk_key_VALUES{"HOLDING_DISKDIR"} = $HOLDING_DISKDIR;
+push @EXPORT_OK, qw( $TAPERSCAN_COMMENT $TAPERSCAN_PLUGIN $TAPERSCAN_PROPERTY);
+push @{$EXPORT_TAGS{"taperscan_key"}}, qw( $TAPERSCAN_COMMENT $TAPERSCAN_PLUGIN $TAPERSCAN_PROPERTY);
+      foreach (qw(  TAPERSCAN_COMMENT TAPERSCAN_PLUGIN TAPERSCAN_PROPERTY)) {          $_taperscan_key_VALUES{$_} = $$_;      }  
+#copy symbols in taperscan_key to getconf
+push @{$EXPORT_TAGS{"getconf"}},  @{$EXPORT_TAGS{"taperscan_key"}};
 
-push @EXPORT_OK, qw($HOLDING_DISKSIZE);
-push @{$EXPORT_TAGS{"holdingdisk_key"}}, qw($HOLDING_DISKSIZE);
 
-$_holdingdisk_key_VALUES{"HOLDING_DISKSIZE"} = $HOLDING_DISKSIZE;
+use Amanda::Config::FoldingHash;
 
-push @EXPORT_OK, qw($HOLDING_CHUNKSIZE);
-push @{$EXPORT_TAGS{"holdingdisk_key"}}, qw($HOLDING_CHUNKSIZE);
+=pod
 
-$_holdingdisk_key_VALUES{"HOLDING_CHUNKSIZE"} = $HOLDING_CHUNKSIZE;
+Taperscan Parameters:       C<$TAPERSCAN_COMMENT> C<$TAPERSCAN_PLUGIN> C<$TAPERSCAN_PROPERTY>
 
-#copy symbols in holdingdisk_key to getconf
-push @{$EXPORT_TAGS{"getconf"}},  @{$EXPORT_TAGS{"holdingdisk_key"}};
+=cut
 
 push @EXPORT_OK, qw(dump_holdingdisk_t_to_string);
 push @{$EXPORT_TAGS{"dump_holdingdisk_t"}}, qw(dump_holdingdisk_t_to_string);
@@ -1506,6 +1355,50 @@ $_estimate_t_VALUES{"ES_CALCSIZE"} = $ES_CALCSIZE;
 #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);
 
@@ -1560,10 +1453,246 @@ $_taperalgo_t_VALUES{"ALGO_LAST"} = $ALGO_LAST;
 #copy symbols in taperalgo_t to getconf
 push @{$EXPORT_TAGS{"getconf"}},  @{$EXPORT_TAGS{"taperalgo_t"}};
 
-push @EXPORT_OK, qw(getconf getconf_seen 
-    getconf_byname getconf_list);
-push @{$EXPORT_TAGS{"getconf"}}, qw(getconf getconf_seen 
-    getconf_byname getconf_list);
+push @EXPORT_OK, qw(execute_on_t_to_string);
+push @{$EXPORT_TAGS{"execute_on_t"}}, qw(execute_on_t_to_string);
+
+my %_execute_on_t_VALUES;
+#Convert an enum value to a single string
+sub execute_on_t_to_string {
+    my ($enumval) = @_;
+
+    for my $k (keys %_execute_on_t_VALUES) {
+       my $v = $_execute_on_t_VALUES{$k};
+
+       #is this a matching flag?
+       if ($enumval == $v) {
+           return $k;
+       }
+    }
+
+#default, just return the number
+    return $enumval;
+}
+
+push @EXPORT_OK, qw($EXECUTE_ON_PRE_AMCHECK);
+push @{$EXPORT_TAGS{"execute_on_t"}}, qw($EXECUTE_ON_PRE_AMCHECK);
+
+$_execute_on_t_VALUES{"EXECUTE_ON_PRE_AMCHECK"} = $EXECUTE_ON_PRE_AMCHECK;
+
+push @EXPORT_OK, qw($EXECUTE_ON_PRE_DLE_AMCHECK);
+push @{$EXPORT_TAGS{"execute_on_t"}}, qw($EXECUTE_ON_PRE_DLE_AMCHECK);
+
+$_execute_on_t_VALUES{"EXECUTE_ON_PRE_DLE_AMCHECK"} = $EXECUTE_ON_PRE_DLE_AMCHECK;
+
+push @EXPORT_OK, qw($EXECUTE_ON_PRE_HOST_AMCHECK);
+push @{$EXPORT_TAGS{"execute_on_t"}}, qw($EXECUTE_ON_PRE_HOST_AMCHECK);
+
+$_execute_on_t_VALUES{"EXECUTE_ON_PRE_HOST_AMCHECK"} = $EXECUTE_ON_PRE_HOST_AMCHECK;
+
+push @EXPORT_OK, qw($EXECUTE_ON_POST_AMCHECK);
+push @{$EXPORT_TAGS{"execute_on_t"}}, qw($EXECUTE_ON_POST_AMCHECK);
+
+$_execute_on_t_VALUES{"EXECUTE_ON_POST_AMCHECK"} = $EXECUTE_ON_POST_AMCHECK;
+
+push @EXPORT_OK, qw($EXECUTE_ON_POST_DLE_AMCHECK);
+push @{$EXPORT_TAGS{"execute_on_t"}}, qw($EXECUTE_ON_POST_DLE_AMCHECK);
+
+$_execute_on_t_VALUES{"EXECUTE_ON_POST_DLE_AMCHECK"} = $EXECUTE_ON_POST_DLE_AMCHECK;
+
+push @EXPORT_OK, qw($EXECUTE_ON_POST_HOST_AMCHECK);
+push @{$EXPORT_TAGS{"execute_on_t"}}, qw($EXECUTE_ON_POST_HOST_AMCHECK);
+
+$_execute_on_t_VALUES{"EXECUTE_ON_POST_HOST_AMCHECK"} = $EXECUTE_ON_POST_HOST_AMCHECK;
+
+push @EXPORT_OK, qw($EXECUTE_ON_PRE_ESTIMATE);
+push @{$EXPORT_TAGS{"execute_on_t"}}, qw($EXECUTE_ON_PRE_ESTIMATE);
+
+$_execute_on_t_VALUES{"EXECUTE_ON_PRE_ESTIMATE"} = $EXECUTE_ON_PRE_ESTIMATE;
+
+push @EXPORT_OK, qw($EXECUTE_ON_PRE_DLE_ESTIMATE);
+push @{$EXPORT_TAGS{"execute_on_t"}}, qw($EXECUTE_ON_PRE_DLE_ESTIMATE);
+
+$_execute_on_t_VALUES{"EXECUTE_ON_PRE_DLE_ESTIMATE"} = $EXECUTE_ON_PRE_DLE_ESTIMATE;
+
+push @EXPORT_OK, qw($EXECUTE_ON_PRE_HOST_ESTIMATE);
+push @{$EXPORT_TAGS{"execute_on_t"}}, qw($EXECUTE_ON_PRE_HOST_ESTIMATE);
+
+$_execute_on_t_VALUES{"EXECUTE_ON_PRE_HOST_ESTIMATE"} = $EXECUTE_ON_PRE_HOST_ESTIMATE;
+
+push @EXPORT_OK, qw($EXECUTE_ON_POST_ESTIMATE);
+push @{$EXPORT_TAGS{"execute_on_t"}}, qw($EXECUTE_ON_POST_ESTIMATE);
+
+$_execute_on_t_VALUES{"EXECUTE_ON_POST_ESTIMATE"} = $EXECUTE_ON_POST_ESTIMATE;
+
+push @EXPORT_OK, qw($EXECUTE_ON_POST_DLE_ESTIMATE);
+push @{$EXPORT_TAGS{"execute_on_t"}}, qw($EXECUTE_ON_POST_DLE_ESTIMATE);
+
+$_execute_on_t_VALUES{"EXECUTE_ON_POST_DLE_ESTIMATE"} = $EXECUTE_ON_POST_DLE_ESTIMATE;
+
+push @EXPORT_OK, qw($EXECUTE_ON_POST_HOST_ESTIMATE);
+push @{$EXPORT_TAGS{"execute_on_t"}}, qw($EXECUTE_ON_POST_HOST_ESTIMATE);
+
+$_execute_on_t_VALUES{"EXECUTE_ON_POST_HOST_ESTIMATE"} = $EXECUTE_ON_POST_HOST_ESTIMATE;
+
+push @EXPORT_OK, qw($EXECUTE_ON_PRE_BACKUP);
+push @{$EXPORT_TAGS{"execute_on_t"}}, qw($EXECUTE_ON_PRE_BACKUP);
+
+$_execute_on_t_VALUES{"EXECUTE_ON_PRE_BACKUP"} = $EXECUTE_ON_PRE_BACKUP;
+
+push @EXPORT_OK, qw($EXECUTE_ON_PRE_DLE_BACKUP);
+push @{$EXPORT_TAGS{"execute_on_t"}}, qw($EXECUTE_ON_PRE_DLE_BACKUP);
+
+$_execute_on_t_VALUES{"EXECUTE_ON_PRE_DLE_BACKUP"} = $EXECUTE_ON_PRE_DLE_BACKUP;
+
+push @EXPORT_OK, qw($EXECUTE_ON_PRE_HOST_BACKUP);
+push @{$EXPORT_TAGS{"execute_on_t"}}, qw($EXECUTE_ON_PRE_HOST_BACKUP);
+
+$_execute_on_t_VALUES{"EXECUTE_ON_PRE_HOST_BACKUP"} = $EXECUTE_ON_PRE_HOST_BACKUP;
+
+push @EXPORT_OK, qw($EXECUTE_ON_POST_BACKUP);
+push @{$EXPORT_TAGS{"execute_on_t"}}, qw($EXECUTE_ON_POST_BACKUP);
+
+$_execute_on_t_VALUES{"EXECUTE_ON_POST_BACKUP"} = $EXECUTE_ON_POST_BACKUP;
+
+push @EXPORT_OK, qw($EXECUTE_ON_POST_DLE_BACKUP);
+push @{$EXPORT_TAGS{"execute_on_t"}}, qw($EXECUTE_ON_POST_DLE_BACKUP);
+
+$_execute_on_t_VALUES{"EXECUTE_ON_POST_DLE_BACKUP"} = $EXECUTE_ON_POST_DLE_BACKUP;
+
+push @EXPORT_OK, qw($EXECUTE_ON_POST_HOST_BACKUP);
+push @{$EXPORT_TAGS{"execute_on_t"}}, qw($EXECUTE_ON_POST_HOST_BACKUP);
+
+$_execute_on_t_VALUES{"EXECUTE_ON_POST_HOST_BACKUP"} = $EXECUTE_ON_POST_HOST_BACKUP;
+
+#copy symbols in execute_on_t to getconf
+push @{$EXPORT_TAGS{"getconf"}},  @{$EXPORT_TAGS{"execute_on_t"}};
+
+push @EXPORT_OK, qw(send_amreport_on_t_to_string);
+push @{$EXPORT_TAGS{"send_amreport_on_t"}}, qw(send_amreport_on_t_to_string);
+
+my %_send_amreport_on_t_VALUES;
+#Convert an enum value to a single string
+sub send_amreport_on_t_to_string {
+    my ($enumval) = @_;
+
+    for my $k (keys %_send_amreport_on_t_VALUES) {
+       my $v = $_send_amreport_on_t_VALUES{$k};
+
+       #is this a matching flag?
+       if ($enumval == $v) {
+           return $k;
+       }
+    }
+
+#default, just return the number
+    return $enumval;
+}
+
+push @EXPORT_OK, qw($SEND_AMREPORT_ALL);
+push @{$EXPORT_TAGS{"send_amreport_on_t"}}, qw($SEND_AMREPORT_ALL);
+
+$_send_amreport_on_t_VALUES{"SEND_AMREPORT_ALL"} = $SEND_AMREPORT_ALL;
+
+push @EXPORT_OK, qw($SEND_AMREPORT_STRANGE);
+push @{$EXPORT_TAGS{"send_amreport_on_t"}}, qw($SEND_AMREPORT_STRANGE);
+
+$_send_amreport_on_t_VALUES{"SEND_AMREPORT_STRANGE"} = $SEND_AMREPORT_STRANGE;
+
+push @EXPORT_OK, qw($SEND_AMREPORT_ERROR);
+push @{$EXPORT_TAGS{"send_amreport_on_t"}}, qw($SEND_AMREPORT_ERROR);
+
+$_send_amreport_on_t_VALUES{"SEND_AMREPORT_ERROR"} = $SEND_AMREPORT_ERROR;
+
+push @EXPORT_OK, qw($SEND_AMREPORT_NEVER);
+push @{$EXPORT_TAGS{"send_amreport_on_t"}}, qw($SEND_AMREPORT_NEVER);
+
+$_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"}};
+
+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(part_cache_type_t_to_string);
+push @{$EXPORT_TAGS{"part_cache_type_t"}}, qw(part_cache_type_t_to_string);
+
+my %_part_cache_type_t_VALUES;
+#Convert an enum value to a single string
+sub part_cache_type_t_to_string {
+    my ($enumval) = @_;
+
+    for my $k (keys %_part_cache_type_t_VALUES) {
+       my $v = $_part_cache_type_t_VALUES{$k};
+
+       #is this a matching flag?
+       if ($enumval == $v) {
+           return $k;
+       }
+    }
+
+#default, just return the number
+    return $enumval;
+}
+
+push @EXPORT_OK, qw($PART_CACHE_TYPE_NONE);
+push @{$EXPORT_TAGS{"part_cache_type_t"}}, qw($PART_CACHE_TYPE_NONE);
+
+$_part_cache_type_t_VALUES{"PART_CACHE_TYPE_NONE"} = $PART_CACHE_TYPE_NONE;
+
+push @EXPORT_OK, qw($PART_CACHE_TYPE_DISK);
+push @{$EXPORT_TAGS{"part_cache_type_t"}}, qw($PART_CACHE_TYPE_DISK);
+
+$_part_cache_type_t_VALUES{"PART_CACHE_TYPE_DISK"} = $PART_CACHE_TYPE_DISK;
+
+push @EXPORT_OK, qw($PART_CACHE_TYPE_MEMORY);
+push @{$EXPORT_TAGS{"part_cache_type_t"}}, qw($PART_CACHE_TYPE_MEMORY);
+
+$_part_cache_type_t_VALUES{"PART_CACHE_TYPE_MEMORY"} = $PART_CACHE_TYPE_MEMORY;
+
+#copy symbols in part_cache_type_t to getconf
+push @{$EXPORT_TAGS{"getconf"}},  @{$EXPORT_TAGS{"part_cache_type_t"}};
+
+$LIMIT_SAMEHOST="SAMEHOST-SAMEHOST-SAMEHOST";
+$LIMIT_SERVER="SERVER-SERVER-SERVER";
+
+push @EXPORT_OK, qw(getconf getconf_seen getconf_linenum
+    getconf_byname getconf_byname_strs
+    getconf_list);
+push @{$EXPORT_TAGS{"getconf"}}, qw(getconf getconf_seen getconf_linenum
+    getconf_byname getconf_byname_strs
+    getconf_list);
 
 push @EXPORT_OK, qw(lookup_tapetype tapetype_getconf tapetype_name
     tapetype_seen tapetype_seen);
@@ -1581,29 +1710,111 @@ push @{$EXPORT_TAGS{"getconf"}}, qw(lookup_interface interface_getconf interface
     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
-    getconf_holdingdisks holdingdisk_next
+    getconf_holdingdisks
     holdingdisk_seen holdingdisk_seen);
 
+push @EXPORT_OK, qw(lookup_application application_getconf application_name
+    application_seen application_seen);
+push @{$EXPORT_TAGS{"getconf"}}, qw(lookup_application application_getconf application_name
+    application_seen application_seen);
+
+push @EXPORT_OK, qw(lookup_pp_script pp_script_getconf pp_script_name
+    pp_script_seen pp_script_seen);
+push @{$EXPORT_TAGS{"getconf"}}, qw(lookup_pp_script pp_script_getconf pp_script_name
+    pp_script_seen pp_script_seen);
+
+push @EXPORT_OK, qw(lookup_device_config device_config_getconf device_config_name
+    device_config_seen device_config_seen);
+push @{$EXPORT_TAGS{"getconf"}}, qw(lookup_device_config device_config_getconf device_config_name
+    device_config_seen device_config_seen);
+
+push @EXPORT_OK, 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);
+
+push @EXPORT_OK, qw(lookup_interactivity interactivity_getconf interactivity_name
+    interactivity_seen interactivity_seen);
+push @{$EXPORT_TAGS{"getconf"}}, qw(lookup_interactivity interactivity_getconf interactivity_name
+    interactivity_seen interactivity_seen);
+
+push @EXPORT_OK, qw(lookup_taperscan taperscan_getconf taperscan_name
+    taperscan_seen taperscan_seen);
+push @{$EXPORT_TAGS{"getconf"}}, qw(lookup_taperscan taperscan_getconf taperscan_name
+    taperscan_seen taperscan_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,
+    "application" => 1,
+    "script" => 1,
+    "application-tool" => 0,
+    "script-tool" => 0,
+    "device" => 1,
+    "changer" => 1,
+);
+
+push @EXPORT_OK, qw(%subsection_names);
+push @{$EXPORT_TAGS{"getconf"}}, qw(%subsection_names);
+
 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_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_OK, qw(new_config_overwrites free_config_overwrites add_config_overwrite
-    add_config_overwrite_opt apply_config_overwrites);
-push @{$EXPORT_TAGS{"init"}}, qw(new_config_overwrites free_config_overwrites add_config_overwrite
-    add_config_overwrite_opt apply_config_overwrites);
+push @EXPORT_OK, qw(cfgerr_level_t_to_string);
+push @{$EXPORT_TAGS{"cfgerr_level_t"}}, qw(cfgerr_level_t_to_string);
+
+my %_cfgerr_level_t_VALUES;
+#Convert an enum value to a single string
+sub cfgerr_level_t_to_string {
+    my ($enumval) = @_;
+
+    for my $k (keys %_cfgerr_level_t_VALUES) {
+       my $v = $_cfgerr_level_t_VALUES{$k};
+
+       #is this a matching flag?
+       if ($enumval == $v) {
+           return $k;
+       }
+    }
+
+#default, just return the number
+    return $enumval;
+}
+
+push @EXPORT_OK, qw($CFGERR_OK);
+push @{$EXPORT_TAGS{"cfgerr_level_t"}}, qw($CFGERR_OK);
+
+$_cfgerr_level_t_VALUES{"CFGERR_OK"} = $CFGERR_OK;
+
+push @EXPORT_OK, qw($CFGERR_WARNINGS);
+push @{$EXPORT_TAGS{"cfgerr_level_t"}}, qw($CFGERR_WARNINGS);
+
+$_cfgerr_level_t_VALUES{"CFGERR_WARNINGS"} = $CFGERR_WARNINGS;
+
+push @EXPORT_OK, qw($CFGERR_ERRORS);
+push @{$EXPORT_TAGS{"cfgerr_level_t"}}, qw($CFGERR_ERRORS);
+
+$_cfgerr_level_t_VALUES{"CFGERR_ERRORS"} = $CFGERR_ERRORS;
+
+#copy symbols in cfgerr_level_t to init
+push @{$EXPORT_TAGS{"init"}},  @{$EXPORT_TAGS{"cfgerr_level_t"}};
 
 push @EXPORT_OK, qw(config_init_flags_to_strings);
 push @{$EXPORT_TAGS{"config_init_flags"}}, qw(config_init_flags_to_strings);
@@ -1651,23 +1862,32 @@ push @{$EXPORT_TAGS{"config_init_flags"}}, qw($CONFIG_INIT_OVERLAY);
 
 $_config_init_flags_VALUES{"CONFIG_INIT_OVERLAY"} = $CONFIG_INIT_OVERLAY;
 
-push @EXPORT_OK, qw($CONFIG_INIT_FATAL);
-push @{$EXPORT_TAGS{"config_init_flags"}}, qw($CONFIG_INIT_FATAL);
-
-$_config_init_flags_VALUES{"CONFIG_INIT_FATAL"} = $CONFIG_INIT_FATAL;
-
 #copy symbols in config_init_flags to init
 push @{$EXPORT_TAGS{"init"}},  @{$EXPORT_TAGS{"config_init_flags"}};
 
-push @EXPORT_OK, qw(config_init config_uninit get_config_options);
-push @{$EXPORT_TAGS{"init"}}, qw(config_init config_uninit get_config_options);
-
-push @EXPORT_OK, qw(get_config_name 
-    get_config_dir 
-    get_config_filename);
-push @{$EXPORT_TAGS{"init"}}, qw(get_config_name 
-    get_config_dir 
-    get_config_filename);
+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_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
+    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);
+
+
+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);
+
+push @EXPORT_OK, qw(amandaify_property_name);
 1;