Imported Upstream version 2.5.1
[debian/amanda] / server-src / conffile.h
index ef6c165da3400fa0c534501fac36c2db2c0feaac..4a46da51b0c63705b558c4efeb33b484b77774e5 100644 (file)
@@ -25,7 +25,7 @@
  *                        University of Maryland at College Park
  */
 /*
- * $Id: conffile.h,v 1.60 2005/12/21 19:07:50 paddy_s Exp $
+ * $Id: conffile.h,v 1.72 2006/07/26 15:17:37 martinea Exp $
  *
  * interface for config file reading code
  */
 #define CONFFILE_H
 
 #include "amanda.h"
-#include "sl.h"
+#include "util.h"
 
 #define CONFFILE_NAME "amanda.conf"
 
-typedef enum conf_e {
+typedef enum {
     CNF_ORG,
     CNF_MAILTO,
     CNF_DUMPUSER,
@@ -49,18 +49,14 @@ typedef enum conf_e {
     CNF_DISKFILE,
     CNF_INFOFILE,
     CNF_LOGDIR,
-    CNF_DISKDIR,
     CNF_INDEXDIR,
     CNF_TAPETYPE,
     CNF_DUMPCYCLE,
     CNF_RUNSPERCYCLE,
-    CNF_MAXCYCLE,
     CNF_TAPECYCLE,
-    CNF_DISKSIZE,
     CNF_NETUSAGE,
     CNF_INPARALLEL,
     CNF_DUMPORDER,
-    CNF_TIMEOUT,
     CNF_BUMPPERCENT,
     CNF_BUMPSIZE,
     CNF_BUMPMULT,
@@ -85,32 +81,41 @@ typedef enum conf_e {
     CNF_DISPLAYUNIT,
     CNF_KRB5KEYTAB,
     CNF_KRB5PRINCIPAL,
-    CNF_LABEL_NEW_TAPES
+    CNF_LABEL_NEW_TAPES,
+    CNF_USETIMESTAMPS,
+    CNF_CNF
 } confparm_t;
 
+typedef enum tapetype_e  {
+    TAPETYPE_COMMENT,
+    TAPETYPE_LBL_TEMPL,
+    TAPETYPE_BLOCKSIZE,
+    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;
 
-    char *comment;
-    char *lbl_templ;
-    long blocksize;
-    unsigned long length;
-    unsigned long filemark;
-    int speed;
-    int file_pad;
-
-    /* seen flags */
-    int s_comment;
-    int s_lbl_templ;
-    int s_blocksize;
-    int s_file_pad;
-    int s_length;
-    int s_filemark;
-    int s_speed;
+    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_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 ...) */
@@ -126,24 +131,6 @@ typedef struct tapetype_s {
 #define ES_SERVER      1       /* server estimate */
 #define ES_CALCSIZE    2       /* calcsize estimate */
 
-/* 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_SERV_FAST,    /* Fast compression on server */
-    COMP_SERV_BEST,    /* Best compression on server */
-    COMP_SERV_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;
-
 #define ALGO_FIRST     0
 #define ALGO_FIRSTFIT  1
 #define ALGO_LARGEST   2
@@ -151,145 +138,161 @@ typedef enum {
 #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_START_T,
+    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;
 
-    char *comment;
-    char *program;
-    char *srvcompprog;
-    char *clntcompprog;
-    char *srv_encrypt;
-    char *clnt_encrypt;
-    sl_t *exclude_file;
-    sl_t *exclude_list;
-    sl_t *include_file;
-    sl_t *include_list;
-    int exclude_optional;
-    int include_optional;
-    int priority;
-    int dumpcycle;
-    int maxcycle;
-    int frequency;
-    char *security_driver;
-    int maxdumps;
-    int maxpromoteday;
-    int bumppercent;
-    int bumpsize;
-    int bumpdays;
-    double bumpmult;
-    time_t start_t;
-    int strategy;
-    int estimate;
-    comp_t compress;
-    encrypt_t encrypt;
-    char *srv_decrypt_opt;
-    char *clnt_decrypt_opt;
-    float comprate[2]; /* first is full, second is incremental */
-    long tape_splitsize;
-    char *split_diskbuffer;
-    long fallback_splitsize;
-    /* flag options */
-    unsigned int record:1;
-    unsigned int skip_incr:1;
-    unsigned int skip_full:1;
-    unsigned int no_hold:1;
-    unsigned int kencrypt:1;
-    unsigned int ignore:1;
-    unsigned int index:1;
-
-    /* seen flags */
-    int s_comment;
-    int s_program;
-    int s_srvcompprog;
-    int s_clntcompprog;
-    int s_srv_encrypt;
-    int s_clnt_encrypt;
-    int s_exclude_file;
-    int s_exclude_list;
-    int s_include_file;
-    int s_include_list;
-    int s_exclude_optional;
-    int s_include_optional;
-    int s_priority;
-    int s_dumpcycle;
-    int s_maxcycle;
-    int s_frequency;
-    int s_security_driver;
-    int s_maxdumps;
-    int s_maxpromoteday;
-    int s_bumppercent;
-    int s_bumpsize;
-    int s_bumpdays;
-    int s_bumpmult;
-    int s_start_t;
-    int s_strategy;
-    int s_estimate;
-    int s_compress;
-    int s_encrypt;
-    int s_srv_decrypt_opt;
-    int s_clnt_decrypt_opt;
-    int s_comprate;
-    int s_record;
-    int s_skip_incr;
-    int s_skip_full;
-    int s_no_hold;
-    int s_kencrypt;
-    int s_ignore;
-    int s_index;
-    int s_tape_splitsize;
-    int s_split_diskbuffer;
-    int s_fallback_splitsize;
+    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_start_t(dumptype)            get_conftype_time     (&dumptype->value[DUMPTYPE_START_T])
+#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;
 
-    char *comment;
-    int maxusage;              /* bandwidth we can consume [kb/s] */
+    val_t value[INTER_INTER];
 
-    /* seen flags */
-    int s_comment;
-    int s_maxusage;
-
-    int curusage;              /* current usage */
+    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;
 
-    char *comment;
-    char *diskdir;
-    long disksize;
-    long chunksize;
-
-    int s_comment;
-    int s_disk;
-    int s_size;
-    int s_csize;
+    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 */
-    char PrefixSpace;  /* the blank space to print before this
+    int PrefixSpace;   /* the blank space to print before this
                         * column. It is used to get the space
                         * between the colums
                         */
-    char Width;                /* the widht of the column itself */
-    char Precision;    /* the precision if its a float */
-    char MaxWidth;     /* if set, Width will be recalculated
+    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
@@ -308,27 +311,35 @@ extern char *config_dir;
 extern holdingdisk_t *holdingdisks;
 extern int num_holdingdisks;
 
-int read_conffile P((char *filename));
-int getconf_seen P((confparm_t parameter));
-int getconf_int P((confparm_t parameter));
-am64_t getconf_am64 P((confparm_t parameter));
-double getconf_real P((confparm_t parameter));
-char *getconf_str P((confparm_t parameter));
-char *getconf_byname P((char *confname));
-dumptype_t *lookup_dumptype P((char *identifier));
-dumptype_t *read_dumptype P((char *name, FILE *from, char *fname, int *linenum));
-tapetype_t *lookup_tapetype P((char *identifier));
-interface_t *lookup_interface P((char *identifier));
-holdingdisk_t *getconf_holdingdisks P((void));
-long int getconf_unit_divisor P((void));
-
-int ColumnDataCount P((void));
-int StringToColumn P((char *s));
-char LastChar P((char *s));
-int SetColumDataFromString P((ColumnInfo* ci, char *s, char **errstr));
-
-char *taperalgo2str P((int taperalgo));
+void parse_server_conf(int parse_argc, char **parse_argv, int *new_argc,
+                      char ***new_argv);
+void report_bad_conf_arg(void);
+void free_server_config(void);
+
+int read_conffile(char *filename);
+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);
+char *getconf_byname(char *confname);
+dumptype_t *lookup_dumptype(char *identifier);
+dumptype_t *read_dumptype(char *name, FILE *from, char *fname, int *linenum);
+tapetype_t *lookup_tapetype(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);
 
 /* this is in securityconf.h */
-char *generic_get_security_conf P((char *, void *));
+char *generic_get_security_conf(char *, void *);
 #endif /* ! CONFFILE_H */