Imported Upstream version 2.5.1
[debian/amanda] / common-src / util.h
index 074066d645addf542b290ebc17d2c73b7e7852fd..4ebe39cab50bf78685ff25f4f5edbf21ca8ba2ad 100644 (file)
  * file named AUTHORS, in the root directory of this distribution.
  */
 /*
- * $Id: util.h,v 1.5 2005/12/09 03:22:52 paddy_s Exp $
+ * $Id: util.h,v 1.17 2006/07/26 15:17:36 martinea Exp $
  */
 #ifndef UTIL_H
 #define        UTIL_H
 
+#include "amanda.h"
+#include "sl.h"
+
+/* */
+typedef enum {
+    CONFTYPE_INT,
+    CONFTYPE_LONG,
+    CONFTYPE_AM64,
+    CONFTYPE_REAL,
+    CONFTYPE_STRING,
+    CONFTYPE_IDENT,
+    CONFTYPE_TIME,
+    CONFTYPE_SIZE,
+    CONFTYPE_SL,
+    CONFTYPE_BOOL,
+    CONFTYPE_COMPRESS,
+    CONFTYPE_ENCRYPT,
+    CONFTYPE_HOLDING,
+    CONFTYPE_ESTIMATE,
+    CONFTYPE_STRATEGY,
+    CONFTYPE_TAPERALGO,
+    CONFTYPE_PRIORITY,
+    CONFTYPE_RATE,
+    CONFTYPE_EXINCLUDE,
+} conftype_t;
+
+/* 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;
+
+/* holdingdisk types */
+typedef enum {
+    HOLD_NEVER,                        /* Always direct to tape  */
+    HOLD_AUTO,                 /* If possible            */
+    HOLD_REQUIRED              /* Always to holding disk */
+} dump_holdingdisk_t;
+
+/* 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
 
 #define BSTRNCMP(a,b)  strncmp(a, b, strlen(b)) 
-                                                  
                                                  
-ssize_t fullread P((int, void *, size_t));
-ssize_t fullwrite P((int, const void *, size_t));
+typedef enum {
+    CONF_UNKNOWN,              CONF_ANY,               CONF_COMMA,
+    CONF_LBRACE,               CONF_RBRACE,            CONF_NL,
+    CONF_END,                  CONF_IDENT,             CONF_INT,
+    CONF_LONG,                 CONF_AM64,              CONF_BOOL,
+    CONF_REAL,                 CONF_STRING,            CONF_TIME,
+    CONF_SIZE,
+
+    /* config parameters */
+    CONF_INCLUDEFILE,          CONF_ORG,               CONF_MAILTO,
+    CONF_DUMPUSER,             CONF_TAPECYCLE,         CONF_TAPEDEV,
+    CONF_CHNGRDEV,             CONF_CHNGRFILE,         CONF_LABELSTR,
+    CONF_BUMPPERCENT,          CONF_BUMPSIZE,          CONF_BUMPDAYS,
+    CONF_BUMPMULT,             CONF_ETIMEOUT,          CONF_DTIMEOUT,
+    CONF_CTIMEOUT,             CONF_TAPEBUFS,          CONF_TAPELIST,
+    CONF_DISKFILE,             CONF_INFOFILE,          CONF_LOGDIR,
+    CONF_LOGFILE,              CONF_DISKDIR,           CONF_DISKSIZE,
+    CONF_INDEXDIR,             CONF_NETUSAGE,          CONF_INPARALLEL,
+    CONF_DUMPORDER,            CONF_TIMEOUT,           CONF_TPCHANGER,
+    CONF_RUNTAPES,             CONF_DEFINE,            CONF_DUMPTYPE,
+    CONF_TAPETYPE,             CONF_INTERFACE,         CONF_PRINTER,
+    CONF_AUTOFLUSH,            CONF_RESERVE,           CONF_MAXDUMPSIZE,
+    CONF_COLUMNSPEC,           CONF_AMRECOVER_DO_FSF,  CONF_AMRECOVER_CHECK_LABEL,
+    CONF_AMRECOVER_CHANGER,    CONF_LABEL_NEW_TAPES,   CONF_USETIMESTAMPS,
+
+    CONF_TAPERALGO,            CONF_FIRST,             CONF_FIRSTFIT,
+    CONF_LARGEST,              CONF_LARGESTFIT,        CONF_SMALLEST,
+    CONF_LAST,                 CONF_DISPLAYUNIT,
+
+    /* kerberos 5 */
+    CONF_KRB5KEYTAB,           CONF_KRB5PRINCIPAL,
+
+    /* holding disk */
+    CONF_COMMENT,              CONF_DIRECTORY,         CONF_USE,
+    CONF_CHUNKSIZE,
+
+    /* dump type */
+    /*COMMENT,*/               CONF_PROGRAM,           CONF_DUMPCYCLE,
+    CONF_RUNSPERCYCLE,         CONF_MAXCYCLE,          CONF_MAXDUMPS,
+    CONF_OPTIONS,              CONF_PRIORITY,          CONF_FREQUENCY,
+    CONF_INDEX,                        CONF_MAXPROMOTEDAY,     CONF_STARTTIME,
+    CONF_COMPRESS,             CONF_ENCRYPT,           CONF_AUTH,
+    CONF_STRATEGY,             CONF_ESTIMATE,          CONF_SKIP_INCR,
+    CONF_SKIP_FULL,            CONF_RECORD,            CONF_HOLDING,
+    CONF_EXCLUDE,              CONF_INCLUDE,           CONF_KENCRYPT,
+    CONF_IGNORE,               CONF_COMPRATE,          CONF_TAPE_SPLITSIZE,
+    CONF_SPLIT_DISKBUFFER,     CONF_FALLBACK_SPLITSIZE,CONF_SRVCOMPPROG,
+    CONF_CLNTCOMPPROG,         CONF_SRV_ENCRYPT,       CONF_CLNT_ENCRYPT,
+    CONF_SRV_DECRYPT_OPT,      CONF_CLNT_DECRYPT_OPT,  CONF_AMANDAD_PATH,
+    CONF_CLIENT_USERNAME,
+
+    /* tape type */
+    /*COMMENT,*/               CONF_BLOCKSIZE,         CONF_FILE_PAD,
+    CONF_LBL_TEMPL,            CONF_FILEMARK,          CONF_LENGTH,
+    CONF_SPEED,
+
+    /* client conf */
+    CONF_CONF,                 CONF_INDEX_SERVER,      CONF_TAPE_SERVER,
+    CONF_SSH_KEYS,             CONF_GNUTAR_LIST_DIR,   CONF_AMANDATES,
+
+    /* network interface */
+    /* COMMENT, */             /* USE, */
+
+    /* dump options (obsolete) */
+    CONF_EXCLUDE_FILE,         CONF_EXCLUDE_LIST,
+
+    /* compress, estimate, encryption */
+    CONF_NONE,                 CONF_FAST,              CONF_BEST,
+    CONF_SERVER,               CONF_CLIENT,            CONF_CALCSIZE,
+    CONF_CUSTOM,
+
+    /* holdingdisk */
+    CONF_NEVER,                        CONF_AUTO,              CONF_REQUIRED,
+
+    /* priority */
+    CONF_LOW,                  CONF_MEDIUM,            CONF_HIGH,
+
+    /* dump strategy */
+    CONF_SKIP,                 CONF_STANDARD,          CONF_NOFULL,
+    CONF_NOINC,                        CONF_HANOI,             CONF_INCRONLY,
+
+    /* exclude list */
+    CONF_LIST,                 CONF_EFILE,             CONF_APPEND,
+    CONF_OPTIONAL,
+
+    /* numbers */
+    CONF_AMINFINITY,           CONF_MULT1,             CONF_MULT7,
+    CONF_MULT1K,               CONF_MULT1M,            CONF_MULT1G,
+
+    /* boolean */
+    CONF_ATRUE,                        CONF_AFALSE,
+
+    CONF_RAWTAPEDEV
+} tok_t;
 
-int bind_portrange P((int, struct sockaddr_in *, int, int, char *));
+#define BIGINT  INT_MAX
+
+/* internal types and variables */
+
+typedef struct {        /* token table entry */
+    char *keyword;
+    tok_t token;
+} keytab_t;
+
+keytab_t *keytable;
+
+typedef struct {
+    char *name;
+    char *value;
+    int   used;
+} command_option_t;
+
+typedef struct exinclude_s {
+    int  type;  /* 0=list   1=file */
+    sl_t *sl;
+    int  optional;
+} exinclude_t;
+
+typedef struct val_s {
+    union {
+       int             i;
+       long            l;
+       off_t           am64;
+       double          r;
+       char            *s;
+       sl_t            *sl;
+       ssize_t         size;
+       time_t          t;
+       float           rate[2];
+       exinclude_t     exinclude;
+    } v;
+    int seen;
+    conftype_t type;
+} val_t;
+
+typedef struct s_conf_var {
+    tok_t      token;
+    conftype_t type;
+    void       (*read_function) (struct s_conf_var *, val_t*);
+    int                parm;
+    void       (*validate) (struct s_conf_var *, val_t *);
+} t_conf_var;
+
+extern int     allow_overwrites;
+extern int     token_pushed;
+
+extern tok_t   tok, pushed_tok;
+extern val_t   tokenval;
+
+extern int     conf_line_num, got_parserror;
+extern FILE    *conf_conf;
+extern char    *conf_confname;
+extern char    *conf_line;
+extern char    *conf_char;
+
+/* predeclare local functions */
+
+t_conf_var  *get_np(t_conf_var *get_var, int parm);
+void   get_simple(val_t *var, tok_t type);
+int    get_int(void);
+long   get_long(void);
+time_t get_time(void);
+ssize_t        get_size(void);
+off_t  get_am64_t(void);
+int    get_bool(void);
+void   ckseen(int *seen);
+void   conf_parserror(const char *format, ...)
+               __attribute__ ((format (printf, 1, 2)));
+tok_t  lookup_keyword(char *str);
+void   unget_conftoken(void);
+void   get_conftoken(tok_t exp);
+
+void read_string(t_conf_var *, val_t *);
+void read_ident(t_conf_var *, val_t *);
+void read_int(t_conf_var *, val_t *);
+void read_long(t_conf_var *, val_t *);
+void read_size(t_conf_var *, val_t *);
+void read_am64(t_conf_var *, val_t *);
+void read_bool(t_conf_var *, val_t *);
+void read_real(t_conf_var *, val_t *);
+void read_time(t_conf_var *, val_t *);
+void copy_val_t(val_t *, val_t *);
+void free_val_t(val_t *);
+char *conf_print(val_t *);
+void conf_init_string(val_t *, char *);
+void conf_init_ident(val_t *, char *);
+void conf_init_int(val_t *, int);
+void conf_init_bool(val_t *, int);
+void conf_init_strategy(val_t *, int);
+void conf_init_estimate(val_t *, int);
+void conf_init_taperalgo(val_t *, int);
+void conf_init_priority(val_t *, int);
+void conf_init_strategy(val_t *, int);
+void conf_init_compress(val_t *, comp_t);
+void conf_init_encrypt(val_t *, encrypt_t);
+void conf_init_holding(val_t *, dump_holdingdisk_t);
+void conf_init_long(val_t *, long);
+void conf_init_size(val_t *, ssize_t);
+void conf_init_am64(val_t *, off_t);
+void conf_init_real(val_t *, double);
+void conf_init_rate(val_t *, double, double);
+void conf_init_time(val_t *, time_t);
+void conf_init_sl(val_t *, sl_t *);
+void conf_init_exinclude(val_t *);
+void conf_set_string(val_t *, char *);
+void conf_set_int(val_t *, int);
+void conf_set_bool(val_t *, int);
+void conf_set_compress(val_t *, comp_t);
+void conf_set_encrypt(val_t *, encrypt_t);
+void conf_set_holding(val_t *, dump_holdingdisk_t);
+void conf_set_strategy(val_t *, int);
+int          get_conftype_int      (val_t *);
+long         get_conftype_long     (val_t *);
+off_t        get_conftype_am64     (val_t *);
+double       get_conftype_real     (val_t *);
+char        *get_conftype_string   (val_t *);
+char        *get_conftype_ident    (val_t *);
+time_t       get_conftype_time     (val_t *);
+ssize_t      get_conftype_size     (val_t *);
+sl_t        *get_conftype_sl       (val_t *);
+int          get_conftype_bool     (val_t *);
+int          get_conftype_hold     (val_t *);
+int          get_conftype_compress (val_t *);
+int          get_conftype_encrypt  (val_t *);
+int          get_conftype_estimate (val_t *);
+int          get_conftype_strategy (val_t *);
+int          get_conftype_taperalgo(val_t *);
+int          get_conftype_priority (val_t *);
+float       *get_conftype_rate     (val_t *);
+exinclude_t  get_conftype_exinclude(val_t *);
+
+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));
+void command_overwrite(command_option_t *command_options, t_conf_var *overwrite_var,
+                      keytab_t *keytab, val_t *valarray, char *prefix);
+
+
+
+ssize_t        fullread(int, void *, size_t);
+ssize_t        fullwrite(int, const void *, size_t);
+
+int    connect_portrange(struct sockaddr_in *, in_port_t, in_port_t, char *,
+                         struct sockaddr_in *, int);
+int    bind_portrange(int, struct sockaddr_in *, in_port_t, in_port_t,
+                      char *);
+
+char * construct_datestamp(time_t *t);
+char * construct_timestamp(time_t *t);
+
+/*@only@*//*@null@*/char *quote_string(const char *str);
+/*@only@*//*@null@*/char *unquote_string(const char *str);
+int    needs_quotes(const char * str);
+
+char * sanitize_string(const char *str);
+char * strquotedstr(void);
+ssize_t        hexdump(const char *buffer, size_t bytes);
+void   dump_sockaddr(struct sockaddr_in *      sa);
+
+/*
+ *   validate_email return 0 if the following characters are present
+ *   * ( ) < > [ ] , ; : ! $ \ / "
+ *   else returns 1
+ */
+int validate_mailto(const char *mailto);
 
-char *construct_datestamp P((time_t *t));
-char *construct_timestamp P((time_t *t));
+char *taperalgo2str(int taperalgo);
 
+void free_new_argv(int new_argc, char **new_argv);
 #endif /* UTIL_H */