-
-static char buffer_conf_print[1025];
-
-char *
-conf_print(
- val_t *val)
-{
- struct tm *stm;
- int pos;
-
- buffer_conf_print[0] = '\0';
- switch(val->type) {
- case CONFTYPE_INT:
- snprintf(buffer_conf_print, SIZEOF(buffer_conf_print), "%d", val->v.i);
- break;
-
- case CONFTYPE_LONG:
- snprintf(buffer_conf_print, SIZEOF(buffer_conf_print), "%ld", val->v.l);
- break;
-
- case CONFTYPE_SIZE:
- snprintf(buffer_conf_print, SIZEOF(buffer_conf_print), SSIZE_T_FMT,
- (SSIZE_T_FMT_TYPE)val->v.size);
- break;
-
- case CONFTYPE_AM64:
- snprintf(buffer_conf_print, SIZEOF(buffer_conf_print), OFF_T_FMT ,
- (OFF_T_FMT_TYPE)val->v.am64);
- break;
-
- case CONFTYPE_REAL:
- snprintf(buffer_conf_print, SIZEOF(buffer_conf_print), "%0.5f" , val->v.r);
- break;
-
- case CONFTYPE_RATE:
- snprintf(buffer_conf_print, SIZEOF(buffer_conf_print), "%0.5f %0.5f" , val->v.rate[0], val->v.rate[1]);
- break;
-
- case CONFTYPE_IDENT:
- if(val->v.s) {
- strncpy(buffer_conf_print, val->v.s, SIZEOF(buffer_conf_print));
- buffer_conf_print[SIZEOF(buffer_conf_print) - 1] = '\0';
- } else
- buffer_conf_print[0] = '\0';
- break;
-
- case CONFTYPE_STRING:
- buffer_conf_print[0] = '"';
- if(val->v.s) {
- strncpy(&buffer_conf_print[1], val->v.s,
- SIZEOF(buffer_conf_print) - 1);
- buffer_conf_print[SIZEOF(buffer_conf_print) - 2] = '\0';
- buffer_conf_print[strlen(buffer_conf_print)] = '"';
- } else {
- buffer_conf_print[1] = '"';
- buffer_conf_print[2] = '\0';
- }
- break;
-
- case CONFTYPE_TIME:
- stm = localtime(&val->v.t);
- if (stm) {
- snprintf(buffer_conf_print, SIZEOF(buffer_conf_print),
- "%d%02d%02d", stm->tm_hour, stm->tm_min, stm->tm_sec);
- } else {
- strcpy(buffer_conf_print, "00000");
- }
- break;
-
- case CONFTYPE_SL:
- buffer_conf_print[0] = '\0';
- break;
-
- case CONFTYPE_EXINCLUDE:
- buffer_conf_print[0] = '\0';
- if(val->v.exinclude.type == 0)
- strncpy(buffer_conf_print, "LIST ", SIZEOF(buffer_conf_print));
- else
- strncpy(buffer_conf_print, "FILE ", SIZEOF(buffer_conf_print));
- pos = 5;
- if(val->v.exinclude.optional == 1)
- strncpy(&buffer_conf_print[pos], "OPTIONAL ", SIZEOF(buffer_conf_print));
- pos += 9;
- break;
-
- case CONFTYPE_BOOL:
- if(val->v.i)
- strncpy(buffer_conf_print, "yes", SIZEOF(buffer_conf_print));
- else
- strncpy(buffer_conf_print, "no", SIZEOF(buffer_conf_print));
- break;
-
- case CONFTYPE_STRATEGY:
- switch(val->v.i) {
- case DS_SKIP:
- strncpy(buffer_conf_print, "SKIP", SIZEOF(buffer_conf_print));
- break;
-
- case DS_STANDARD:
- strncpy(buffer_conf_print, "STANDARD", SIZEOF(buffer_conf_print));
- break;
-
- case DS_NOFULL:
- strncpy(buffer_conf_print, "NOFULL", SIZEOF(buffer_conf_print));
- break;
-
- case DS_NOINC:
- strncpy(buffer_conf_print, "NOINC", SIZEOF(buffer_conf_print));
- break;
-
- case DS_HANOI:
- strncpy(buffer_conf_print, "HANOI", SIZEOF(buffer_conf_print));
- break;
-
- case DS_INCRONLY:
- strncpy(buffer_conf_print, "INCRONLY", SIZEOF(buffer_conf_print));
- break;
- }
- break;
-
- case CONFTYPE_COMPRESS:
- switch(val->v.i) {
- case COMP_NONE:
- strncpy(buffer_conf_print, "NONE", SIZEOF(buffer_conf_print));
- break;
-
- case COMP_FAST:
- strncpy(buffer_conf_print, "CLIENT FAST", SIZEOF(buffer_conf_print));
- break;
-
- case COMP_BEST:
- strncpy(buffer_conf_print, "CLIENT BEST", SIZEOF(buffer_conf_print));
- break;
-
- case COMP_CUST:
- strncpy(buffer_conf_print, "CLIENT CUSTOM", SIZEOF(buffer_conf_print));
- break;
-
- case COMP_SERV_FAST:
- strncpy(buffer_conf_print, "SERVER FAST", SIZEOF(buffer_conf_print));
- break;
-
- case COMP_SERV_BEST:
- strncpy(buffer_conf_print, "SERVER FAST", SIZEOF(buffer_conf_print));
- break;
-
- case COMP_SERV_CUST:
- strncpy(buffer_conf_print, "SERVER CUSTOM", SIZEOF(buffer_conf_print));
- break;
- }
- break;
-
- case CONFTYPE_ESTIMATE:
- switch(val->v.i) {
- case ES_CLIENT:
- strncpy(buffer_conf_print, "CLIENT", SIZEOF(buffer_conf_print));
- break;
-
- case ES_SERVER:
- strncpy(buffer_conf_print, "SERVER", SIZEOF(buffer_conf_print));
- break;
-
- case ES_CALCSIZE:
- strncpy(buffer_conf_print, "CALCSIZE", SIZEOF(buffer_conf_print));
- break;
- }
- break;
-
- case CONFTYPE_ENCRYPT:
- switch(val->v.i) {
- case ENCRYPT_NONE:
- strncpy(buffer_conf_print, "NONE", SIZEOF(buffer_conf_print));
- break;
-
- case ENCRYPT_CUST:
- strncpy(buffer_conf_print, "CLIENT", SIZEOF(buffer_conf_print));
- break;
-
- case ENCRYPT_SERV_CUST:
- strncpy(buffer_conf_print, "SERVER", SIZEOF(buffer_conf_print));
- break;
- }
- break;
-
- case CONFTYPE_HOLDING:
- switch(val->v.i) {
- case HOLD_NEVER:
- strncpy(buffer_conf_print, "NEVER", SIZEOF(buffer_conf_print));
- break;
-
- case HOLD_AUTO:
- strncpy(buffer_conf_print, "AUTO", SIZEOF(buffer_conf_print));
- break;
-
- case HOLD_REQUIRED:
- strncpy(buffer_conf_print, "REQUIRED", SIZEOF(buffer_conf_print));
- break;
- }
- break;
-
- case CONFTYPE_TAPERALGO:
- strncpy(buffer_conf_print, taperalgo2str(val->v.i), SIZEOF(buffer_conf_print));
- break;
-
- case CONFTYPE_PRIORITY:
- switch(val->v.i) {
- case 0:
- strncpy(buffer_conf_print, "LOW", SIZEOF(buffer_conf_print));
- break;
-
- case 1:
- strncpy(buffer_conf_print, "MEDIUM", SIZEOF(buffer_conf_print));
- break;
-
- case 2:
- strncpy(buffer_conf_print, "HIGH", SIZEOF(buffer_conf_print));
- break;
- }
- break;
- }
- buffer_conf_print[SIZEOF(buffer_conf_print) - 1] = '\0';
- return buffer_conf_print;
-}
-
-void
-conf_init_string(
- val_t *val,
- char *s)
-{
- val->seen = 0;
- val->type = CONFTYPE_STRING;
- if(s)
- val->v.s = stralloc(s);
- else
- val->v.s = NULL;
-}
-
-void
-conf_init_ident(
- val_t *val,
- char *s)
-{
- val->seen = 0;
- val->type = CONFTYPE_IDENT;
- if(s)
- val->v.s = stralloc(s);
- else
- val->v.s = NULL;
-}
-
-void
-conf_init_int(
- val_t *val,
- int i)
-{
- val->seen = 0;
- val->type = CONFTYPE_INT;
- val->v.i = i;
-}
-
-void
-conf_init_bool(
- val_t *val,
- int i)
-{
- val->seen = 0;
- val->type = CONFTYPE_BOOL;
- val->v.i = i;
-}
-
-void
-conf_init_strategy(
- val_t *val,
- int i)
-{
- val->seen = 0;
- val->type = CONFTYPE_STRATEGY;
- val->v.i = i;
-}
-
-void
-conf_init_estimate(
- val_t *val,
- int i)
-{
- val->seen = 0;
- val->type = CONFTYPE_ESTIMATE;
- val->v.i = i;
-}
-
-void
-conf_init_taperalgo(
- val_t *val,
- int i)
-{
- val->seen = 0;
- val->type = CONFTYPE_TAPERALGO;
- val->v.i = i;
-}
-
-void
-conf_init_priority(
- val_t *val,
- int i)
-{
- val->seen = 0;
- val->type = CONFTYPE_PRIORITY;
- val->v.i = i;
-}
-
-void
-conf_init_compress(
- val_t *val,
- comp_t i)
-{
- val->seen = 0;
- val->type = CONFTYPE_COMPRESS;
- val->v.i = (int)i;
-}
-
-void
-conf_init_encrypt(
- val_t *val,
- encrypt_t i)
-{
- val->seen = 0;
- val->type = CONFTYPE_ENCRYPT;
- val->v.i = (int)i;
-}
-
-void
-conf_init_holding(
- val_t *val,
- dump_holdingdisk_t i)
-{
- val->seen = 0;
- val->type = CONFTYPE_HOLDING;
- val->v.i = (int)i;
-}
-
-void
-conf_init_long(
- val_t *val,
- long l)
-{
- val->seen = 0;
- val->type = CONFTYPE_LONG;
- val->v.l = l;
-}
-
-void
-conf_init_size(
- val_t *val,
- ssize_t sz)
-{
- val->seen = 0;
- val->type = CONFTYPE_SIZE;
- val->v.size = sz;
-}
-
-void
-conf_init_am64(
- val_t *val,
- off_t l)
-{
- val->seen = 0;
- val->type = CONFTYPE_AM64;
- val->v.am64 = l;
-}
-
-void
-conf_init_real(
- val_t *val,
- double r)
-{
- val->seen = 0;
- val->type = CONFTYPE_REAL;
- val->v.r = r;
-}
-
-void
-conf_init_rate(
- val_t *val,
- double r1,
- double r2)
-{
- val->seen = 0;
- val->type = CONFTYPE_RATE;
- val->v.rate[0] = r1;
- val->v.rate[1] = r2;
-}
-
-void
-conf_init_time(
- val_t *val,
- time_t t)
-{
- val->seen = 0;
- val->type = CONFTYPE_TIME;
- val->v.t = t;
-}
-
-void
-conf_init_sl(
- val_t *val,
- sl_t *sl)
-{
- val->seen = 0;
- val->type = CONFTYPE_AM64;
- val->v.sl = sl;
-}
-
-void
-conf_init_exinclude(
- val_t *val)
-{
- val->seen = 0;
- val->type = CONFTYPE_EXINCLUDE;
- val->v.exinclude.type = 0;
- val->v.exinclude.optional = 0;
- val->v.exinclude.sl = NULL;
-}
-
-void
-conf_set_string(
- val_t *val,
- char *s)
-{
- val->seen = -1;
- val->type = CONFTYPE_STRING;
- amfree(val->v.s);
- val->v.s = stralloc(s);
-}
-
-void
-conf_set_int(
- val_t *val,
- int i)
-{
- val->seen = -1;
- val->type = CONFTYPE_INT;
- val->v.i = i;
-}
-
-void
-conf_set_bool(
- val_t *val,
- int i)
-{
- val->seen = -1;
- val->type = CONFTYPE_BOOL;
- val->v.i = i;
-}
-
-void
-conf_set_compress(
- val_t *val,
- comp_t i)
-{
- val->seen = -1;
- val->type = CONFTYPE_COMPRESS;
- val->v.i = (int)i;
-}
-
-void
-conf_set_encrypt(
- val_t *val,
- encrypt_t i)
-{
- val->seen = -1;
- val->type = CONFTYPE_COMPRESS;
- val->v.i = (int)i;
-}
-
-void
-conf_set_holding(
- val_t *val,
- dump_holdingdisk_t i)
-{
- val->seen = -1;
- val->type = CONFTYPE_HOLDING;
- val->v.i = (int)i;
-}
-
-void
-conf_set_strategy(
- val_t *val,
- int i)
-{
- val->seen = -1;
- val->type = CONFTYPE_STRATEGY;
- val->v.i = i;
-}
-
-
-int
-get_conftype_int(
- val_t *val)
-{
- if (val->type != CONFTYPE_INT) {
- error("get_conftype_int: val.type is not CONFTYPE_INT");
- /*NOTREACHED*/
- }
- return val->v.i;
-}
-
-long
-get_conftype_long(
- val_t *val)
-{
- if (val->type != CONFTYPE_LONG) {
- error("get_conftype_long: val.type is not CONFTYPE_LONG");
- /*NOTREACHED*/
- }
- return val->v.l;
-}
-
-off_t
-get_conftype_am64(
- val_t *val)
-{
- if (val->type != CONFTYPE_AM64) {
- error("get_conftype_am64: val.type is not CONFTYPE_AM64");
- /*NOTREACHED*/
- }
- return val->v.am64;
-}
-
-double
-get_conftype_real(
- val_t *val)
-{
- if (val->type != CONFTYPE_REAL) {
- error("get_conftype_real: val.type is not CONFTYPE_REAL");
- /*NOTREACHED*/
- }
- return val->v.r;
-}
-
-char *
-get_conftype_string(
- val_t *val)
-{
- if (val->type != CONFTYPE_STRING) {
- error("get_conftype_string: val.type is not CONFTYPE_STRING");
- /*NOTREACHED*/
- }
- return val->v.s;
-}
-
-char *
-get_conftype_ident(
- val_t *val)
-{
- if (val->type != CONFTYPE_IDENT) {
- error("get_conftype_ident: val.type is not CONFTYPE_IDENT");
- /*NOTREACHED*/
- }
- return val->v.s;
-}
-
-time_t
-get_conftype_time(
- val_t *val)
-{
- if (val->type != CONFTYPE_TIME) {
- error("get_conftype_time: val.type is not CONFTYPE_TIME");
- /*NOTREACHED*/
- }
- return val->v.t;
-}
-
-ssize_t
-get_conftype_size(
- val_t *val)
-{
- if (val->type != CONFTYPE_SIZE) {
- error("get_conftype_size: val.type is not CONFTYPE_SIZE");
- /*NOTREACHED*/
- }
- return val->v.size;
-}
-
-sl_t *
-get_conftype_sl(
- val_t *val)
-{
- if (val->type != CONFTYPE_SL) {
- error("get_conftype_size: val.type is not CONFTYPE_SL");
- /*NOTREACHED*/
- }
- return val->v.sl;
-}
-
-int
-get_conftype_bool(
- val_t *val)
-{
- if (val->type != CONFTYPE_BOOL) {
- error("get_conftype_bool: val.type is not CONFTYPE_BOOL");
- /*NOTREACHED*/
- }
- return val->v.i;
-}
-
-int
-get_conftype_hold(
- val_t *val)
-{
- if (val->type != CONFTYPE_HOLDING) {
- error("get_conftype_hold: val.type is not CONFTYPE_HOLDING");
- /*NOTREACHED*/
- }
- return val->v.i;
-}
-
-int
-get_conftype_compress(
- val_t *val)
-{
- if (val->type != CONFTYPE_COMPRESS) {
- error("get_conftype_compress: val.type is not CONFTYPE_COMPRESS");
- /*NOTREACHED*/
- }
- return val->v.i;
-}
-
-int
-get_conftype_encrypt(
- val_t *val)
-{
- if (val->type != CONFTYPE_ENCRYPT) {
- error("get_conftype_encrypt: val.type is not CONFTYPE_ENCRYPT");
- /*NOTREACHED*/
- }
- return val->v.i;
-}
-
-int
-get_conftype_estimate(
- val_t *val)
-{
- if (val->type != CONFTYPE_ESTIMATE) {
- error("get_conftype_extimate: val.type is not CONFTYPE_ESTIMATE");
- /*NOTREACHED*/
- }
- return val->v.i;
-}
-
-int
-get_conftype_strategy(
- val_t *val)
-{
- if (val->type != CONFTYPE_STRATEGY) {
- error("get_conftype_strategy: val.type is not CONFTYPE_STRATEGY");
- /*NOTREACHED*/
- }
- return val->v.i;
-}
-
-int
-get_conftype_taperalgo(
- val_t *val)
-{
- if (val->type != CONFTYPE_TAPERALGO) {
- error("get_conftype_taperalgo: val.type is not CONFTYPE_TAPERALGO");
- /*NOTREACHED*/
- }
- return val->v.i;
-}
-
-int
-get_conftype_priority(
- val_t *val)
-{
- if (val->type != CONFTYPE_PRIORITY) {
- error("get_conftype_priority: val.type is not CONFTYPE_PRIORITY");
- /*NOTREACHED*/
- }
- return val->v.i;
-}
-
-exinclude_t
-get_conftype_exinclude(
- val_t *val)
-{
- if (val->type != CONFTYPE_EXINCLUDE) {
- error("get_conftype_exinclude: val.type is not CONFTYPE_EXINCLUDE");
- /*NOTREACHED*/
- }
- return val->v.exinclude;
-}
-
-
-void
-dump_sockaddr(
- struct sockaddr_in * sa)
-{
- dbprintf(("%s: (sockaddr_in *)%p = { %d, %d, %s }\n",
- debug_prefix_time(NULL), sa, sa->sin_family,
- (int)ntohs(sa->sin_port),
- inet_ntoa(sa->sin_addr)));
-}
-
-void
-read_block(
- command_option_t *command_options,
- t_conf_var *read_var,
- keytab_t *keytab,
- val_t *valarray,
- char *prefix,
- char *errormsg,
- int read_brace,
- void (*copy_function)(void))
-{
- t_conf_var *np;
- int saved_conf_line_num;
- int done;
-
- if(read_brace) {
- get_conftoken(CONF_LBRACE);
- get_conftoken(CONF_NL);
- }
-
- done = 0;
- do {
- conf_line_num += 1;
- get_conftoken(CONF_ANY);
- switch(tok) {
- case CONF_RBRACE:
- done = 1;
- break;
- case CONF_NL: /* empty line */
- break;
- case CONF_END: /* end of file */
- done = 1;
- break;
- case CONF_IDENT:
- case CONF_STRING:
- if(copy_function)
- copy_function();
- else
- conf_parserror("ident not expected");
- break;
- default:
- {
- for(np = read_var; np->token != CONF_UNKNOWN; np++)
- if(np->token == tok) break;
-
- if(np->token == CONF_UNKNOWN)
- conf_parserror(errormsg);
- else {
- np->read_function(np, &valarray[np->parm]);
- if(np->validate)
- np->validate(np, &valarray[np->parm]);
- }
- }
- }
- if(tok != CONF_NL && tok != CONF_END && tok != CONF_RBRACE)
- get_conftoken(CONF_NL);
- } while(!done);
-
- /* overwrite with command line option */
- saved_conf_line_num = conf_line_num;
- command_overwrite(command_options, read_var, keytab, valarray, prefix);
- conf_line_num = saved_conf_line_num;
-}
-
-void
-command_overwrite(
- command_option_t *command_options,
- t_conf_var *overwrite_var,
- keytab_t *keytab,
- val_t *valarray,
- char *prefix)
-{
- t_conf_var *np;
- keytab_t *kt;
- char *myprefix;
- command_option_t *command_option;
-
- if(!command_options) return;
-
- for(np = overwrite_var; np->token != CONF_UNKNOWN; np++) {
- for(kt = keytab; kt->token != CONF_UNKNOWN; kt++)
- if(kt->token == np->token) break;
-
- if(kt->token == CONF_UNKNOWN) {
- error("read_conf: invalid token");
- /* NOTREACHED */
- }
-
- for(command_option = command_options; command_option->name != NULL;
- command_option++) {
- myprefix = stralloc2(prefix, kt->keyword);
- if(strcasecmp(myprefix, command_option->name) == 0) {
- command_option->used = 1;
- valarray[np->parm].seen = -2;
- if(np->type == CONFTYPE_STRING &&
- command_option->value[0] != '"') {
- conf_line = vstralloc("\"", command_option->value, "\"",
- NULL);
- }
- else {
- conf_line = stralloc(command_option->value);
- }
- conf_char = conf_line;
- token_pushed = 0;
- conf_line_num = -2;
- np->read_function(np, &valarray[np->parm]);
- amfree(conf_line);
- conf_line = conf_char = NULL;
-
- if(np->validate)
- np->validate(np, &valarray[np->parm]);
- }
- amfree(myprefix);
- }
- }
-}
-
-void
-free_new_argv(
- int new_argc,
- char **new_argv)
-{
- int i;
- for(i=0; i<new_argc; i++)
- amfree(new_argv[i]);
- amfree(new_argv);
-}
-
-
-#ifndef HAVE_LIBREADLINE
-/*
- * simple readline() replacements
- */
-
-char *
-readline(
- const char *prompt)
-{
- printf("%s", prompt);
- fflush(stdout);
- fflush(stderr);
- return agets(stdin);
-}
-
-void
-add_history(
- const char *line)
-{
- (void)line; /* Quite unused parameter warning */
-}
-#endif