* 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,
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,
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 ...) */
#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
#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
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 */