⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 conffile.c

📁 开源备份软件源码 AMANDA, the Advanced Maryland Automatic Network Disk Archiver, is a backup system that a
💻 C
📖 第 1 页 / 共 5 页
字号:
/* read_functions -- these fit into the read_function slot in a parser * table entry, and are responsible for calling getconf_token as necessary * to consume their arguments, and setting their second argument with the * result.  The first argument is a copy of the parser table entry, if * needed. */static void read_int(conf_var_t *, val_t *);static void read_am64(conf_var_t *, val_t *);static void read_real(conf_var_t *, val_t *);static void read_str(conf_var_t *, val_t *);static void read_ident(conf_var_t *, val_t *);static void read_time(conf_var_t *, val_t *);static void read_size(conf_var_t *, val_t *);static void read_bool(conf_var_t *, val_t *);static void read_compress(conf_var_t *, val_t *);static void read_encrypt(conf_var_t *, val_t *);static void read_holding(conf_var_t *, val_t *);static void read_estimate(conf_var_t *, val_t *);static void read_strategy(conf_var_t *, val_t *);static void read_taperalgo(conf_var_t *, val_t *);static void read_priority(conf_var_t *, val_t *);static void read_rate(conf_var_t *, val_t *);static void read_exinclude(conf_var_t *, val_t *);static void read_intrange(conf_var_t *, val_t *);static void read_property(conf_var_t *, val_t *);/* Functions to get various types of values.  These are called by * read_functions to take care of any variations in the way that these * values can be written: integers can have units, boolean values can be * specified with a number of names, etc.  They form utility functions * for the read_functions, below. */static time_t  get_time(void);static int     get_int(void);static ssize_t get_size(void);static off_t   get_am64_t(void);static int     get_bool(void);/* Check the given 'seen', flagging an error if this value has already * been seen and allow_overwrites is false.  Also marks the value as * seen on the current line. * * @param seen: (in/out) seen value to adjust */static void ckseen(int *seen);/* validate_functions -- these fit into the validate_function solt in * a parser table entry.  They call conf_parserror if the value in their * second argument is invalid.  */static void validate_nonnegative(conf_var_t *, val_t *);static void validate_positive(conf_var_t *, val_t *);static void validate_runspercycle(conf_var_t *, val_t *);static void validate_bumppercent(conf_var_t *, val_t *);static void validate_bumpmult(conf_var_t *, val_t *);static void validate_inparallel(conf_var_t *, val_t *);static void validate_displayunit(conf_var_t *, val_t *);static void validate_reserve(conf_var_t *, val_t *);static void validate_use(conf_var_t *, val_t *);static void validate_chunksize(conf_var_t *, val_t *);static void validate_blocksize(conf_var_t *, val_t *);static void validate_debug(conf_var_t *, val_t *);static void validate_port_range(val_t *, int, int);static void validate_reserved_port_range(conf_var_t *, val_t *);static void validate_unreserved_port_range(conf_var_t *, val_t *);/* * Initialization *//* Name of the current configuration (part of API) */char *config_name = NULL;/* Current configuration directory (part of API) */char *config_dir = NULL;/* Current toplevel configuration file (part of API) */char *config_filename = NULL;/* Has the config been initialized? */static gboolean config_initialized = FALSE;/* Are we running a client? (true if last init was * with CONFIG_INIT_CLIENT) */static gboolean config_client = FALSE;/* What config overwrites are applied? */static config_overwrites_t *applied_config_overwrites = NULL;/* All global parameters */static val_t conf_data[CNF_CNF];/* Linked list of holding disks */static holdingdisk_t *holdinglist = NULL;static dumptype_t *dumplist = NULL;static tapetype_t *tapelist = NULL;static interface_t *interface_list = NULL;/* storage for derived values */static long int unit_divisor = 1;int debug_amandad    = 0;int debug_amidxtaped = 0;int debug_amindexd   = 0;int debug_amrecover  = 0;int debug_auth       = 0;int debug_event      = 0;int debug_holding    = 0;int debug_protocol   = 0;int debug_planner    = 0;int debug_driver     = 0;int debug_dumper     = 0;int debug_chunker    = 0;int debug_taper      = 0;int debug_selfcheck  = 0;int debug_sendsize   = 0;int debug_sendbackup = 0;/* Reset all configuration values to their defaults (which, in many * cases, come from --with-foo options at build time) */static void init_defaults(void);/* Update all dervied values based on the current configuration.  This * function can be called multiple times, once after each adjustment * to the current configuration. * * @param is_client: are we running a client? */static void update_derived_values(gboolean is_client);/* per-type conf_init functions, used as utilities for init_defaults * and for each subsection's init_foo_defaults. * * These set the value's type and seen flags, as well as copying * the relevant value into the 'v' field. */static void conf_init_int(val_t *val, int i);static void conf_init_am64(val_t *val, off_t l);static void conf_init_real(val_t *val, float r);static void conf_init_str(val_t *val, char *s);static void conf_init_ident(val_t *val, char *s);static void conf_init_time(val_t *val, time_t t);static void conf_init_size(val_t *val, ssize_t sz);static void conf_init_bool(val_t *val, int i);static void conf_init_compress(val_t *val, comp_t i);static void conf_init_encrypt(val_t *val, encrypt_t i);static void conf_init_holding(val_t *val, dump_holdingdisk_t i);static void conf_init_estimate(val_t *val, estimate_t i);static void conf_init_strategy(val_t *val, strategy_t);static void conf_init_taperalgo(val_t *val, taperalgo_t i);static void conf_init_priority(val_t *val, int i);static void conf_init_rate(val_t *val, float r1, float r2);static void conf_init_exinclude(val_t *val); /* to empty list */static void conf_init_intrange(val_t *val, int i1, int i2);static void conf_init_proplist(val_t *val); /* to empty list *//* * Command-line Handling */typedef struct config_overwrite_s {    char *key;    char *value;} config_overwrite_t;struct config_overwrites_s {    int n_allocated;    int n_used;    config_overwrite_t *ovr;};/* * val_t Management */static void copy_val_t(val_t *, val_t *);static void free_val_t(val_t *);/* * Utilities *//* Utility functions/structs for val_t_display_strs */static char *exinclude_display_str(val_t *val, int file);static void proplist_display_str_foreach_fn(gpointer key_p, gpointer value_p, gpointer user_data_p);static void val_t_print_token(FILE *output, char *prefix, char *format, keytab_t *kt, val_t *val);/* Given a key name as used in config overwrites, return a pointer to the corresponding * conf_var_t in the current parsetable, and the val_t representing that value.  This * function will access subsections if key has the form  TYPE:SUBSEC:KEYWORD.  Returns * false if the value does not exist. * * Assumes keytable and parsetable are set correctly, which is generally OK after  * config_init has been called. * * @param key: the key to look up * @param parm: (result) the parse table entry * @param val: (result) the parameter value * @returns: true on success */static int parm_key_info(char *key, conf_var_t **parm, val_t **val);/* * Error handling *//* Have we seen a parse error yet?  Parsing continues after an error, so this * flag is checked after the parse is complete. */static gboolean got_parserror;static void    conf_parserror(const char *format, ...)                __attribute__ ((format (printf, 1, 2)));static void    conf_parswarn(const char *format, ...)                __attribute__ ((format (printf, 1, 2)));/* * Tables *//* First, the keyword tables for client and server */keytab_t client_keytab[] = {    { "CONF", CONF_CONF },    { "INDEX_SERVER", CONF_INDEX_SERVER },    { "TAPE_SERVER", CONF_TAPE_SERVER },    { "TAPEDEV", CONF_TAPEDEV },    { "DEVICE-PROPERTY", CONF_DEVICE_PROPERTY },    { "AUTH", CONF_AUTH },    { "SSH_KEYS", CONF_SSH_KEYS },    { "AMANDAD_PATH", CONF_AMANDAD_PATH },    { "CLIENT_USERNAME", CONF_CLIENT_USERNAME },    { "GNUTAR_LIST_DIR", CONF_GNUTAR_LIST_DIR },    { "AMANDATES", CONF_AMANDATES },    { "KRB5KEYTAB", CONF_KRB5KEYTAB },    { "KRB5PRINCIPAL", CONF_KRB5PRINCIPAL },    { "INCLUDEFILE", CONF_INCLUDEFILE },    { "CONNECT_TRIES", CONF_CONNECT_TRIES },    { "REP_TRIES", CONF_REP_TRIES },    { "REQ_TRIES", CONF_REQ_TRIES },    { "DEBUG_AMANDAD", CONF_DEBUG_AMANDAD },    { "DEBUG_AMIDXTAPED", CONF_DEBUG_AMIDXTAPED },    { "DEBUG_AMINDEXD", CONF_DEBUG_AMINDEXD },    { "DEBUG_AMRECOVER", CONF_DEBUG_AMRECOVER },    { "DEBUG_AUTH", CONF_DEBUG_AUTH },    { "DEBUG_EVENT", CONF_DEBUG_EVENT },    { "DEBUG_HOLDING", CONF_DEBUG_HOLDING },    { "DEBUG_PROTOCOL", CONF_DEBUG_PROTOCOL },    { "DEBUG_PLANNER", CONF_DEBUG_PLANNER },    { "DEBUG_DRIVER", CONF_DEBUG_DRIVER },    { "DEBUG_DUMPER", CONF_DEBUG_DUMPER },    { "DEBUG_CHUNKER", CONF_DEBUG_CHUNKER },    { "DEBUG_TAPER", CONF_DEBUG_TAPER },    { "DEBUG_SELFCHECK", CONF_DEBUG_SELFCHECK },    { "DEBUG_SENDSIZE", CONF_DEBUG_SENDSIZE },    { "DEBUG_SENDBACKUP", CONF_DEBUG_SENDBACKUP },    { "RESERVED-UDP-PORT", CONF_RESERVED_UDP_PORT },    { "RESERVED-TCP-PORT", CONF_RESERVED_TCP_PORT },    { "UNRESERVED-TCP-PORT", CONF_UNRESERVED_TCP_PORT },    { NULL, CONF_UNKNOWN },};keytab_t server_keytab[] = {    { "AMANDAD_PATH", CONF_AMANDAD_PATH },    { "AMRECOVER_CHANGER", CONF_AMRECOVER_CHANGER },    { "AMRECOVER_CHECK_LABEL", CONF_AMRECOVER_CHECK_LABEL },    { "AMRECOVER_DO_FSF", CONF_AMRECOVER_DO_FSF },    { "APPEND", CONF_APPEND },    { "AUTH", CONF_AUTH },    { "AUTO", CONF_AUTO },    { "AUTOFLUSH", CONF_AUTOFLUSH },    { "BEST", CONF_BEST },    { "BLOCKSIZE", CONF_BLOCKSIZE },    { "BUMPDAYS", CONF_BUMPDAYS },    { "BUMPMULT", CONF_BUMPMULT },    { "BUMPPERCENT", CONF_BUMPPERCENT },    { "BUMPSIZE", CONF_BUMPSIZE },    { "CALCSIZE", CONF_CALCSIZE },    { "CHANGERDEV", CONF_CHANGERDEV },    { "CHANGERFILE", CONF_CHANGERFILE },    { "CHUNKSIZE", CONF_CHUNKSIZE },    { "CLIENT", CONF_CLIENT },    { "CLIENT_CUSTOM_COMPRESS", CONF_CLNTCOMPPROG },    { "CLIENT_DECRYPT_OPTION", CONF_CLNT_DECRYPT_OPT },    { "CLIENT_ENCRYPT", CONF_CLNT_ENCRYPT },    { "CLIENT_USERNAME", CONF_CLIENT_USERNAME },    { "COLUMNSPEC", CONF_COLUMNSPEC },    { "COMMENT", CONF_COMMENT },    { "COMPRATE", CONF_COMPRATE },    { "COMPRESS", CONF_COMPRESS },    { "CONNECT_TRIES", CONF_CONNECT_TRIES },    { "CTIMEOUT", CONF_CTIMEOUT },    { "CUSTOM", CONF_CUSTOM },    { "DEBUG_AMANDAD"    , CONF_DEBUG_AMANDAD },    { "DEBUG_AMIDXTAPED" , CONF_DEBUG_AMIDXTAPED },    { "DEBUG_AMINDEXD"   , CONF_DEBUG_AMINDEXD },    { "DEBUG_AMRECOVER"  , CONF_DEBUG_AMRECOVER },    { "DEBUG_AUTH"       , CONF_DEBUG_AUTH },    { "DEBUG_EVENT"      , CONF_DEBUG_EVENT },    { "DEBUG_HOLDING"    , CONF_DEBUG_HOLDING },    { "DEBUG_PROTOCOL"   , CONF_DEBUG_PROTOCOL },    { "DEBUG_PLANNER"    , CONF_DEBUG_PLANNER },    { "DEBUG_DRIVER"     , CONF_DEBUG_DRIVER },    { "DEBUG_DUMPER"     , CONF_DEBUG_DUMPER },    { "DEBUG_CHUNKER"    , CONF_DEBUG_CHUNKER },    { "DEBUG_TAPER"      , CONF_DEBUG_TAPER },    { "DEBUG_SELFCHECK"  , CONF_DEBUG_SELFCHECK },    { "DEBUG_SENDSIZE"   , CONF_DEBUG_SENDSIZE },    { "DEBUG_SENDBACKUP" , CONF_DEBUG_SENDBACKUP },    { "DEFINE", CONF_DEFINE },    { "DEVICE_PROPERTY", CONF_DEVICE_PROPERTY },    { "DIRECTORY", CONF_DIRECTORY },    { "DISKFILE", CONF_DISKFILE },    { "DISPLAYUNIT", CONF_DISPLAYUNIT },    { "DTIMEOUT", CONF_DTIMEOUT },    { "DUMPCYCLE", CONF_DUMPCYCLE },    { "DUMPORDER", CONF_DUMPORDER },    { "DUMPTYPE", CONF_DUMPTYPE },    { "DUMPUSER", CONF_DUMPUSER },    { "ENCRYPT", CONF_ENCRYPT },    { "ESTIMATE", CONF_ESTIMATE },    { "ETIMEOUT", CONF_ETIMEOUT },    { "EXCLUDE", CONF_EXCLUDE },    { "EXCLUDE-FILE", CONF_EXCLUDE_FILE },    { "EXCLUDE-LIST", CONF_EXCLUDE_LIST },    { "FALLBACK_SPLITSIZE", CONF_FALLBACK_SPLITSIZE },    { "FAST", CONF_FAST },    { "FILE", CONF_EFILE },    { "FILE-PAD", CONF_FILE_PAD },    { "FILEMARK", CONF_FILEMARK },    { "FIRST", CONF_FIRST },    { "FIRSTFIT", CONF_FIRSTFIT },    { "HANOI", CONF_HANOI },    { "HIGH", CONF_HIGH },    { "HOLDINGDISK", CONF_HOLDING },    { "IGNORE", CONF_IGNORE },    { "INCLUDE", CONF_INCLUDE },    { "INCLUDEFILE", CONF_INCLUDEFILE },    { "INCRONLY", CONF_INCRONLY },    { "INDEX", CONF_INDEX },    { "INDEXDIR", CONF_INDEXDIR },    { "INFOFILE", CONF_INFOFILE },    { "INPARALLEL", CONF_INPARALLEL },    { "INTERFACE", CONF_INTERFACE },    { "KENCRYPT", CONF_KENCRYPT },    { "KRB5KEYTAB", CONF_KRB5KEYTAB },    { "KRB5PRINCIPAL", CONF_KRB5PRINCIPAL },    { "LABELSTR", CONF_LABELSTR },    { "LABEL_NEW_TAPES", CONF_LABEL_NEW_TAPES },    { "LARGEST", CONF_LARGEST },    { "LARGESTFIT", CONF_LARGESTFIT },    { "LAST", CONF_LAST },    { "LBL-TEMPL", CONF_LBL_TEMPL },    { "LENGTH", CONF_LENGTH },    { "LIST", CONF_LIST },    { "LOGDIR", CONF_LOGDIR },    { "LOW", CONF_LOW },    { "MAILTO", CONF_MAILTO },    { "READBLOCKSIZE", CONF_READBLOCKSIZE },    { "MAXDUMPS", CONF_MAXDUMPS },    { "MAXDUMPSIZE", CONF_MAXDUMPSIZE },

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -