Imported Debian patch 2.5.2p1-1
[debian/amanda] / common-src / conffile.h
diff --git a/common-src/conffile.h b/common-src/conffile.h
new file mode 100644 (file)
index 0000000..787f514
--- /dev/null
@@ -0,0 +1,637 @@
+/*
+ * Amanda, The Advanced Maryland Automatic Network Disk Archiver
+ * Copyright (c) 1991-2000 University of Maryland at College Park
+ * All Rights Reserved.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of U.M. not be used in advertising or
+ * publicity pertaining to distribution of the software without specific,
+ * written prior permission.  U.M. makes no representations about the
+ * suitability of this software for any purpose.  It is provided "as is"
+ * without express or implied warranty.
+ *
+ * U.M. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL U.M.
+ * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Author: James da Silva, Systems Design and Analysis Group
+ *                        Computer Science Department
+ *                        University of Maryland at College Park
+ */
+/*
+ * $Id: conffile.h,v 1.72 2006/07/26 15:17:37 martinea Exp $
+ *
+ * interface for config file reading code
+ */
+#ifndef CONFFILE_H
+#define CONFFILE_H
+
+#include "amanda.h"
+#include "conffile.h"
+#include "util.h"
+
+#define CONFFILE_NAME "amanda.conf"
+
+typedef enum {
+    CNF_ORG,
+    CNF_CONF,
+    CNF_INDEX_SERVER,
+    CNF_TAPE_SERVER,
+    CNF_AUTH,
+    CNF_SSH_KEYS,
+    CNF_AMANDAD_PATH,
+    CNF_CLIENT_USERNAME,
+    CNF_GNUTAR_LIST_DIR,
+    CNF_AMANDATES,
+    CNF_MAILTO,
+    CNF_DUMPUSER,
+    CNF_TAPEDEV,
+    CNF_CHNGRDEV,
+    CNF_CHNGRFILE,
+    CNF_LABELSTR,
+    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_MAXDUMPS,
+    CNF_ETIMEOUT,
+    CNF_DTIMEOUT,
+    CNF_CTIMEOUT,
+    CNF_TAPEBUFS,
+    CNF_RAWTAPEDEV,
+    CNF_PRINTER,
+    CNF_AUTOFLUSH,
+    CNF_RESERVE,
+    CNF_MAXDUMPSIZE,
+    CNF_COLUMNSPEC,
+    CNF_AMRECOVER_DO_FSF,
+    CNF_AMRECOVER_CHECK_LABEL,
+    CNF_AMRECOVER_CHANGER,
+    CNF_TAPERALGO,
+    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_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_CNF
+} confparm_t;
+
+typedef enum {
+    CONF_UNKNOWN,              CONF_ANY,               CONF_COMMA,
+    CONF_LBRACE,               CONF_RBRACE,            CONF_NL,
+    CONF_END,                  CONF_IDENT,             CONF_INT,
+    CONF_LONG,                 CONF_AM64,              CONF_BOOL,
+    CONF_REAL,                 CONF_STRING,            CONF_TIME,
+    CONF_SIZE,
+
+    /* config parameters */
+    CONF_INCLUDEFILE,          CONF_ORG,               CONF_MAILTO,
+    CONF_DUMPUSER,             CONF_TAPECYCLE,         CONF_TAPEDEV,
+    CONF_CHNGRDEV,             CONF_CHNGRFILE,         CONF_LABELSTR,
+    CONF_BUMPPERCENT,          CONF_BUMPSIZE,          CONF_BUMPDAYS,
+    CONF_BUMPMULT,             CONF_ETIMEOUT,          CONF_DTIMEOUT,
+    CONF_CTIMEOUT,             CONF_TAPEBUFS,          CONF_TAPELIST,
+    CONF_DISKFILE,             CONF_INFOFILE,          CONF_LOGDIR,
+    CONF_LOGFILE,              CONF_DISKDIR,           CONF_DISKSIZE,
+    CONF_INDEXDIR,             CONF_NETUSAGE,          CONF_INPARALLEL,
+    CONF_DUMPORDER,            CONF_TIMEOUT,           CONF_TPCHANGER,
+    CONF_RUNTAPES,             CONF_DEFINE,            CONF_DUMPTYPE,
+    CONF_TAPETYPE,             CONF_INTERFACE,         CONF_PRINTER,
+    CONF_AUTOFLUSH,            CONF_RESERVE,           CONF_MAXDUMPSIZE,
+    CONF_COLUMNSPEC,           CONF_AMRECOVER_DO_FSF,  CONF_AMRECOVER_CHECK_LABEL,
+    CONF_AMRECOVER_CHANGER,    CONF_LABEL_NEW_TAPES,   CONF_USETIMESTAMPS,
+
+    CONF_TAPERALGO,            CONF_FIRST,             CONF_FIRSTFIT,
+    CONF_LARGEST,              CONF_LARGESTFIT,        CONF_SMALLEST,
+    CONF_LAST,                 CONF_DISPLAYUNIT,       CONF_RESERVED_UDP_PORT,
+    CONF_RESERVED_TCP_PORT,    CONF_UNRESERVED_TCP_PORT,
+
+    /* kerberos 5 */
+    CONF_KRB5KEYTAB,           CONF_KRB5PRINCIPAL,
+
+    /* holding disk */
+    CONF_COMMENT,              CONF_DIRECTORY,         CONF_USE,
+    CONF_CHUNKSIZE,
+
+    /* dump type */
+    /*COMMENT,*/               CONF_PROGRAM,           CONF_DUMPCYCLE,
+    CONF_RUNSPERCYCLE,         CONF_MAXCYCLE,          CONF_MAXDUMPS,
+    CONF_OPTIONS,              CONF_PRIORITY,          CONF_FREQUENCY,
+    CONF_INDEX,                        CONF_MAXPROMOTEDAY,     CONF_STARTTIME,
+    CONF_COMPRESS,             CONF_ENCRYPT,           CONF_AUTH,
+    CONF_STRATEGY,             CONF_ESTIMATE,          CONF_SKIP_INCR,
+    CONF_SKIP_FULL,            CONF_RECORD,            CONF_HOLDING,
+    CONF_EXCLUDE,              CONF_INCLUDE,           CONF_KENCRYPT,
+    CONF_IGNORE,               CONF_COMPRATE,          CONF_TAPE_SPLITSIZE,
+    CONF_SPLIT_DISKBUFFER,     CONF_FALLBACK_SPLITSIZE,CONF_SRVCOMPPROG,
+    CONF_CLNTCOMPPROG,         CONF_SRV_ENCRYPT,       CONF_CLNT_ENCRYPT,
+    CONF_SRV_DECRYPT_OPT,      CONF_CLNT_DECRYPT_OPT,  CONF_AMANDAD_PATH,
+    CONF_CLIENT_USERNAME,
+
+    /* tape type */
+    /*COMMENT,*/               CONF_BLOCKSIZE,         CONF_FILE_PAD,
+    CONF_LBL_TEMPL,            CONF_FILEMARK,          CONF_LENGTH,
+    CONF_SPEED,                        CONF_READBLOCKSIZE,
+
+    /* client conf */
+    CONF_CONF,                 CONF_INDEX_SERVER,      CONF_TAPE_SERVER,
+    CONF_SSH_KEYS,             CONF_GNUTAR_LIST_DIR,   CONF_AMANDATES,
+
+    /* protocol config */
+    CONF_REP_TRIES,            CONF_CONNECT_TRIES,     CONF_REQ_TRIES,
+
+    /* debug config */
+    CONF_DEBUG_AMANDAD,                CONF_DEBUG_AMIDXTAPED,  CONF_DEBUG_AMINDEXD,
+    CONF_DEBUG_AMRECOVER,      CONF_DEBUG_AUTH,        CONF_DEBUG_EVENT,
+    CONF_DEBUG_HOLDING,                CONF_DEBUG_PROTOCOL,    CONF_DEBUG_PLANNER,
+    CONF_DEBUG_DRIVER,         CONF_DEBUG_DUMPER,      CONF_DEBUG_CHUNKER,
+    CONF_DEBUG_TAPER,          CONF_DEBUG_SELFCHECK,   CONF_DEBUG_SENDSIZE,
+    CONF_DEBUG_SENDBACKUP,
+
+    /* network interface */
+    /* COMMENT, */             /* USE, */
+
+    /* dump options (obsolete) */
+    CONF_EXCLUDE_FILE,         CONF_EXCLUDE_LIST,
+
+    /* compress, estimate, encryption */
+    CONF_NONE,                 CONF_FAST,              CONF_BEST,
+    CONF_SERVER,               CONF_CLIENT,            CONF_CALCSIZE,
+    CONF_CUSTOM,
+
+    /* holdingdisk */
+    CONF_NEVER,                        CONF_AUTO,              CONF_REQUIRED,
+
+    /* priority */
+    CONF_LOW,                  CONF_MEDIUM,            CONF_HIGH,
+
+    /* dump strategy */
+    CONF_SKIP,                 CONF_STANDARD,          CONF_NOFULL,
+    CONF_NOINC,                        CONF_HANOI,             CONF_INCRONLY,
+
+    /* exclude list */
+    CONF_LIST,                 CONF_EFILE,             CONF_APPEND,
+    CONF_OPTIONAL,
+
+    /* numbers */
+    CONF_AMINFINITY,           CONF_MULT1,             CONF_MULT7,
+    CONF_MULT1K,               CONF_MULT1M,            CONF_MULT1G,
+
+    /* boolean */
+    CONF_ATRUE,                        CONF_AFALSE,
+
+    CONF_RAWTAPEDEV
+} tok_t;
+
+/* internal types and variables */
+
+/* */
+typedef enum {
+    CONFTYPE_INT,
+    CONFTYPE_LONG,
+    CONFTYPE_AM64,
+    CONFTYPE_REAL,
+    CONFTYPE_STRING,
+    CONFTYPE_IDENT,
+    CONFTYPE_TIME,             /* hhmm */
+    CONFTYPE_SIZE,
+    CONFTYPE_SL,
+    CONFTYPE_BOOL,
+    CONFTYPE_COMPRESS,
+    CONFTYPE_ENCRYPT,
+    CONFTYPE_HOLDING,
+    CONFTYPE_ESTIMATE,
+    CONFTYPE_STRATEGY,
+    CONFTYPE_TAPERALGO,
+    CONFTYPE_PRIORITY,
+    CONFTYPE_RATE,
+    CONFTYPE_INTRANGE,
+    CONFTYPE_EXINCLUDE
+} conftype_t;
+
+/* Compression types */
+typedef enum {
+    COMP_NONE,          /* No compression */
+    COMP_FAST,          /* Fast compression on client */
+    COMP_BEST,          /* Best compression on client */
+    COMP_CUST,          /* Custom compression on client */
+    COMP_SERVER_FAST,   /* Fast compression on server */
+    COMP_SERVER_BEST,   /* Best compression on server */
+    COMP_SERVER_CUST    /* Custom compression on server */
+} comp_t;
+
+/* Encryption types */
+typedef enum {
+    ENCRYPT_NONE,               /* No encryption */
+    ENCRYPT_CUST,               /* Custom encryption on client */
+    ENCRYPT_SERV_CUST           /* Custom encryption on server */
+} encrypt_t;
+
+/* holdingdisk types */
+typedef enum {
+    HOLD_NEVER,                        /* Always direct to tape  */
+    HOLD_AUTO,                 /* If possible            */
+    HOLD_REQUIRED              /* Always to holding disk */
+} dump_holdingdisk_t;
+
+typedef struct {        /* token table entry */
+    char *keyword;
+    tok_t token;
+} keytab_t;
+
+typedef struct {
+    char *name;
+    char *value;
+    int   used;
+} command_option_t;
+
+typedef struct exinclude_s {
+    sl_t *sl_list;
+    sl_t *sl_file;
+    int  optional;
+} exinclude_t;
+
+typedef struct val_s {
+    union {
+       int             i;
+       long            l;
+       off_t           am64;
+       double          r;
+       char            *s;
+       sl_t            *sl;
+       ssize_t         size;
+       time_t          t;
+       float           rate[2];
+       exinclude_t     exinclude;
+       int             intrange[2];
+    } v;
+    int seen;
+    conftype_t type;
+} val_t;
+
+typedef struct s_conf_var {
+    tok_t      token;
+    conftype_t type;
+    void       (*read_function) (struct s_conf_var *, val_t*);
+    int                parm;
+    void       (*validate) (struct s_conf_var *, val_t *);
+} t_conf_var;
+
+typedef enum tapetype_e  {
+    TAPETYPE_COMMENT,
+    TAPETYPE_LBL_TEMPL,
+    TAPETYPE_BLOCKSIZE,
+    TAPETYPE_READBLOCKSIZE,
+    TAPETYPE_LENGTH,
+    TAPETYPE_FILEMARK,
+    TAPETYPE_SPEED,
+    TAPETYPE_FILE_PAD,
+    TAPETYPE_TAPETYPE
+} tapetype_ee;
+
+typedef struct tapetype_s {
+    struct tapetype_s *next;
+    int seen;
+    char *name;
+
+    val_t value[TAPETYPE_TAPETYPE];
+} tapetype_t;
+
+#define tapetype_get(tapetype, field) (tapetype->field)
+#define tapetype_get_name(tapetype) tapetype->name
+#define tapetype_get_seen(tapetype) tapetype->seen
+#define tapetype_get_comment(tapetype)       get_conftype_string(&tapetype->value[TAPETYPE_COMMENT])
+#define tapetype_get_lbl_templ(tapetype)     get_conftype_string(&tapetype->value[TAPETYPE_LBL_TEMPL])
+#define tapetype_get_blocksize(tapetype)     get_conftype_size  (&tapetype->value[TAPETYPE_BLOCKSIZE])
+#define tapetype_get_readblocksize(tapetype) get_conftype_size  (&tapetype->value[TAPETYPE_READBLOCKSIZE])
+#define tapetype_get_length(tapetype)        get_conftype_am64  (&tapetype->value[TAPETYPE_LENGTH])
+#define tapetype_get_filemark(tapetype)      get_conftype_am64  (&tapetype->value[TAPETYPE_FILEMARK])
+#define tapetype_get_speed(tapetype)         get_conftype_int   (&tapetype->value[TAPETYPE_SPEED])
+#define tapetype_get_file_pad(tapetype)      get_conftype_bool  (&tapetype->value[TAPETYPE_FILE_PAD])
+
+/* Dump strategies */
+#define DS_SKIP                0       /* Don't do any dumps at all */
+#define DS_STANDARD    1       /* Standard (0 1 1 1 1 2 2 2 ...) */
+#define DS_NOFULL      2       /* No full's (1 1 1 ...) */
+#define DS_NOINC       3       /* No inc's (0 0 0 ...) */
+#define DS_4           4       /* ? (0 1 2 3 4 5 6 7 8 9 10 11 ...) */
+#define DS_5           5       /* ? (0 1 1 1 1 1 1 1 1 1 1 1 ...) */
+#define DS_HANOI       6       /* Tower of Hanoi (? ? ? ? ? ...) */
+#define DS_INCRONLY    7       /* Forced fulls (0 1 1 2 2 FORCE0 1 1 ...) */
+
+/* Estimate strategies */
+#define ES_CLIENT      0       /* client estimate */
+#define ES_SERVER      1       /* server estimate */
+#define ES_CALCSIZE    2       /* calcsize estimate */
+
+#define ALGO_FIRST     0
+#define ALGO_FIRSTFIT  1
+#define ALGO_LARGEST   2
+#define ALGO_LARGESTFIT        3
+#define ALGO_SMALLEST  4
+#define ALGO_LAST      5
+
+typedef enum dumptype_e  {
+    DUMPTYPE_COMMENT,
+    DUMPTYPE_PROGRAM,
+    DUMPTYPE_SRVCOMPPROG,
+    DUMPTYPE_CLNTCOMPPROG,
+    DUMPTYPE_SRV_ENCRYPT,
+    DUMPTYPE_CLNT_ENCRYPT,
+    DUMPTYPE_AMANDAD_PATH,
+    DUMPTYPE_CLIENT_USERNAME,
+    DUMPTYPE_SSH_KEYS,
+    DUMPTYPE_SECURITY_DRIVER,
+    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_ESTIMATE,
+    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_DUMPTYPE
+} dumptype_ee;
+
+typedef struct dumptype_s {
+    struct dumptype_s *next;
+    int seen;
+    char *name;
+
+    val_t value[DUMPTYPE_DUMPTYPE];
+} dumptype_t;
+
+#define dumptype_get_name(dumptype) dumptype->name
+#define dumptype_get_seen(dumptype) dumptype->seen
+#define dumptype_get_comment(dumptype)            get_conftype_string   (&dumptype->value[DUMPTYPE_COMMENT])
+#define dumptype_get_program(dumptype)            get_conftype_string   (&dumptype->value[DUMPTYPE_PROGRAM])
+#define dumptype_get_srvcompprog(dumptype)        get_conftype_string   (&dumptype->value[DUMPTYPE_SRVCOMPPROG])
+#define dumptype_get_clntcompprog(dumptype)       get_conftype_string   (&dumptype->value[DUMPTYPE_CLNTCOMPPROG])
+#define dumptype_get_srv_encrypt(dumptype)        get_conftype_string   (&dumptype->value[DUMPTYPE_SRV_ENCRYPT])
+#define dumptype_get_clnt_encrypt(dumptype)       get_conftype_string   (&dumptype->value[DUMPTYPE_CLNT_ENCRYPT])
+#define dumptype_get_amandad_path(dumptype)       get_conftype_string   (&dumptype->value[DUMPTYPE_AMANDAD_PATH])
+#define dumptype_get_client_username(dumptype)    get_conftype_string   (&dumptype->value[DUMPTYPE_CLIENT_USERNAME])
+#define dumptype_get_ssh_keys(dumptype)           get_conftype_string   (&dumptype->value[DUMPTYPE_SSH_KEYS])
+#define dumptype_get_security_driver(dumptype)    get_conftype_string   (&dumptype->value[DUMPTYPE_SECURITY_DRIVER])
+#define dumptype_get_exclude(dumptype)            get_conftype_exinclude(&dumptype->value[DUMPTYPE_EXCLUDE])
+#define dumptype_get_include(dumptype)            get_conftype_exinclude(&dumptype->value[DUMPTYPE_INCLUDE])
+#define dumptype_get_priority(dumptype)           get_conftype_priority (&dumptype->value[DUMPTYPE_PRIORITY])
+#define dumptype_get_dumpcycle(dumptype)          get_conftype_int      (&dumptype->value[DUMPTYPE_DUMPCYCLE])
+#define dumptype_get_maxcycle(dumptype)           get_conftype_int      (&dumptype->value[DUMPTYPE_MAXCYCLE])
+#define dumptype_get_frequency(dumptype)          get_conftype_int      (&dumptype->value[DUMPTYPE_FREQUENCY])
+#define dumptype_get_maxdumps(dumptype)           get_conftype_int      (&dumptype->value[DUMPTYPE_MAXDUMPS])
+#define dumptype_get_maxpromoteday(dumptype)      get_conftype_int      (&dumptype->value[DUMPTYPE_MAXPROMOTEDAY])
+#define dumptype_get_bumppercent(dumptype)        get_conftype_int      (&dumptype->value[DUMPTYPE_BUMPPERCENT])
+#define dumptype_get_bumpsize(dumptype)           get_conftype_am64     (&dumptype->value[DUMPTYPE_BUMPSIZE])
+#define dumptype_get_bumpdays(dumptype)           get_conftype_int      (&dumptype->value[DUMPTYPE_BUMPDAYS])
+#define dumptype_get_bumpmult(dumptype)           get_conftype_real     (&dumptype->value[DUMPTYPE_BUMPMULT])
+#define dumptype_get_starttime(dumptype)          get_conftype_time     (&dumptype->value[DUMPTYPE_STARTTIME])
+#define dumptype_get_strategy(dumptype)           get_conftype_strategy (&dumptype->value[DUMPTYPE_STRATEGY])
+#define dumptype_get_estimate(dumptype)           get_conftype_estimate (&dumptype->value[DUMPTYPE_ESTIMATE])
+#define dumptype_get_compress(dumptype)           get_conftype_compress (&dumptype->value[DUMPTYPE_COMPRESS])
+#define dumptype_get_encrypt(dumptype)            get_conftype_encrypt  (&dumptype->value[DUMPTYPE_ENCRYPT])
+#define dumptype_get_srv_decrypt_opt(dumptype)    get_conftype_string   (&dumptype->value[DUMPTYPE_SRV_DECRYPT_OPT])
+#define dumptype_get_clnt_decrypt_opt(dumptype)   get_conftype_string   (&dumptype->value[DUMPTYPE_CLNT_DECRYPT_OPT])
+#define dumptype_get_comprate(dumptype)                                   dumptype->value[DUMPTYPE_COMPRATE].v.rate
+#define dumptype_get_tape_splitsize(dumptype)     get_conftype_am64     (&dumptype->value[DUMPTYPE_TAPE_SPLITSIZE])
+#define dumptype_get_fallback_splitsize(dumptype) get_conftype_am64     (&dumptype->value[DUMPTYPE_FALLBACK_SPLITSIZE])
+#define dumptype_get_split_diskbuffer(dumptype)   get_conftype_string   (&dumptype->value[DUMPTYPE_SPLIT_DISKBUFFER])
+#define dumptype_get_record(dumptype)             get_conftype_bool     (&dumptype->value[DUMPTYPE_RECORD])
+#define dumptype_get_skip_incr(dumptype)          get_conftype_bool     (&dumptype->value[DUMPTYPE_SKIP_INCR])
+#define dumptype_get_skip_full(dumptype)          get_conftype_bool     (&dumptype->value[DUMPTYPE_SKIP_FULL])
+#define dumptype_get_to_holdingdisk(dumptype)     get_conftype_hold     (&dumptype->value[DUMPTYPE_HOLDINGDISK])
+#define dumptype_get_kencrypt(dumptype)           get_conftype_bool     (&dumptype->value[DUMPTYPE_KENCRYPT])
+#define dumptype_get_ignore(dumptype)             get_conftype_bool     (&dumptype->value[DUMPTYPE_IGNORE])
+#define dumptype_get_index(dumptype)              get_conftype_bool     (&dumptype->value[DUMPTYPE_INDEX])
+
+/* A network interface */
+typedef enum interface_e  {
+    INTER_COMMENT,
+    INTER_MAXUSAGE,
+    INTER_INTER
+} interface_ee;
+
+
+typedef struct interface_s {
+    struct interface_s *next;
+    int seen;
+    char *name;
+
+    val_t value[INTER_INTER];
+
+    unsigned long curusage;            /* current usage */
+} interface_t;
+
+#define interface_get_name(interface) interface->name
+#define interface_get_seen(interface) interface->seen
+#define interface_get_comment(interface)  get_conftype_string(&interface->value[INTER_COMMENT])
+#define interface_get_maxusage(interface) get_conftype_int   (&interface->value[INTER_MAXUSAGE])
+
+/* A holding disk */
+typedef enum holdingdisk_e  {
+    HOLDING_COMMENT,
+    HOLDING_DISKDIR,
+    HOLDING_DISKSIZE,
+    HOLDING_CHUNKSIZE,
+    HOLDING_HOLDING
+} holdingdisk_ee;
+
+typedef struct holdingdisk_s {
+    struct holdingdisk_s *next;
+    int seen;
+    char *name;
+
+    val_t value[HOLDING_HOLDING];
+
+    void *up;                  /* generic user pointer */
+    off_t disksize;
+} holdingdisk_t;
+
+#define holdingdisk_get_name(holdingdisk) (holdingdisk)->name
+#define holdingdisk_get_seen(holdingdisk) (holdingdisk)->seen
+#define holdingdisk_get_comment(holdingdisk)   get_conftype_string(&(holdingdisk)->value[HOLDING_COMMENT])
+#define holdingdisk_get_diskdir(holdingdisk)   get_conftype_string(&(holdingdisk)->value[HOLDING_DISKDIR])
+#define holdingdisk_get_disksize(holdingdisk)  get_conftype_am64  (&(holdingdisk)->value[HOLDING_DISKSIZE])
+#define holdingdisk_get_chunksize(holdingdisk) get_conftype_am64  (&(holdingdisk)->value[HOLDING_CHUNKSIZE])
+
+/* for each column we define some values on how to
+ * format this column element
+ */
+typedef struct {
+    char *Name;                /* column name */
+    int PrefixSpace;   /* the blank space to print before this
+                        * column. It is used to get the space
+                        * between the colums
+                        */
+    int Width;         /* the width of the column itself */
+    int Precision;     /* the precision if its a float */
+    int MaxWidth;      /* if set, Width will be recalculated
+                        * to the space needed */
+    char *Format;      /* the printf format string for this
+                        * column element
+                        */
+    char *Title;       /* the title to use for this column */
+} ColumnInfo;
+
+
+/* predeclare local functions */
+
+int          get_conftype_int      (val_t *);
+long         get_conftype_long     (val_t *);
+off_t        get_conftype_am64     (val_t *);
+double       get_conftype_real     (val_t *);
+char        *get_conftype_string   (val_t *);
+char        *get_conftype_ident    (val_t *);
+time_t       get_conftype_time     (val_t *);
+ssize_t      get_conftype_size     (val_t *);
+sl_t        *get_conftype_sl       (val_t *);
+int          get_conftype_bool     (val_t *);
+int          get_conftype_hold     (val_t *);
+int          get_conftype_compress (val_t *);
+int          get_conftype_encrypt  (val_t *);
+int          get_conftype_estimate (val_t *);
+int          get_conftype_strategy (val_t *);
+int          get_conftype_taperalgo(val_t *);
+int          get_conftype_priority (val_t *);
+float       *get_conftype_rate     (val_t *);
+exinclude_t  get_conftype_exinclude(val_t *);
+int         *get_conftype_intrange (val_t *);
+
+void command_overwrite(command_option_t *command_options, t_conf_var *overwrite_var,
+                      keytab_t *keytab, val_t *valarray, char *prefix);
+
+void free_new_argv(int new_argc, char **new_argv);
+/* this corresponds to the normal output of amanda, but may
+ * be adapted to any spacing as you like.
+ */
+extern ColumnInfo ColumnData[];
+
+extern char *config_name;
+extern char *config_dir;
+
+extern int debug_amandad;
+extern int debug_amidxtaped;
+extern int debug_amindexd;
+extern int debug_amrecover;
+extern int debug_auth;
+extern int debug_event;
+extern int debug_holding;
+extern int debug_protocol;
+extern int debug_planner;
+extern int debug_driver;
+extern int debug_dumper;
+extern int debug_chunker;
+extern int debug_taper;
+extern int debug_selfcheck;
+extern int debug_sendsize;
+extern int debug_sendbackup;
+
+extern holdingdisk_t *holdingdisks;
+extern int num_holdingdisks;
+
+void parse_conf(int parse_argc, char **parse_argv, int *new_argc,
+                      char ***new_argv);
+char **get_config_options(int);
+void report_bad_conf_arg(void);
+void free_server_config(void);
+
+int read_conffile(char *filename);
+
+#define CLIENTCONFFILE_NAME "client.conf"
+
+int  add_client_conf(confparm_t parm, char *value);
+int read_clientconf(char *filename);
+char *generic_client_get_security_conf(char *, void *);
+
+int getconf_seen(confparm_t parameter);
+int getconf_boolean(confparm_t parameter);
+int getconf_int(confparm_t parameter);
+long getconf_long(confparm_t parameter);
+ssize_t getconf_size(confparm_t parameter);
+time_t getconf_time(confparm_t parameter);
+off_t getconf_am64(confparm_t parameter);
+double getconf_real(confparm_t parameter);
+char *getconf_str(confparm_t parameter);
+int getconf_taperalgo(confparm_t parameter);
+int *getconf_intrange(confparm_t parameter);
+char *getconf_byname(char *confname);
+char *getconf_list(char *listname);
+dumptype_t *lookup_dumptype(char *identifier);
+dumptype_t *read_dumptype(char *name, FILE *from, char *fname, int *linenum);
+tapetype_t *lookup_tapetype(char *identifier);
+holdingdisk_t *lookup_holdingdisk(char *identifier);
+interface_t *lookup_interface(char *identifier);
+holdingdisk_t *getconf_holdingdisks(void);
+long int getconf_unit_divisor(void);
+void dump_configuration(char *filename);
+int ColumnDataCount(void);
+int StringToColumn(char *s);
+char LastChar(char *s);
+int SetColumDataFromString(ColumnInfo* ci, char *s, char **errstr);
+ssize_t getconf_readblocksize(void);
+
+/* this is in securityconf.h */
+char *generic_get_security_conf(char *, void *);
+#endif /* ! CONFFILE_H */