/* * 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.2.3 2006/11/09 14:35:10 martinea Exp $ * * interface for config file reading code */ #ifndef CONFFILE_H #define CONFFILE_H #include "amanda.h" #include "util.h" #define CONFFILE_NAME "amanda.conf" typedef enum { CNF_ORG, 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_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; 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 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; /* 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 holdingdisk_t *holdingdisks; extern int num_holdingdisks; void parse_server_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); 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); 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); /* this is in securityconf.h */ char *generic_get_security_conf(char *, void *); #endif /* ! CONFFILE_H */