2 * Amanda, The Advanced Maryland Automatic Network Disk Archiver
3 * Copyright (c) 1999 University of Maryland at College Park
6 * Permission to use, copy, modify, distribute, and sell this software and its
7 * documentation for any purpose is hereby granted without fee, provided that
8 * the above copyright notice appear in all copies and that both that
9 * copyright notice and this permission notice appear in supporting
10 * documentation, and that the name of U.M. not be used in advertising or
11 * publicity pertaining to distribution of the software without specific,
12 * written prior permission. U.M. makes no representations about the
13 * suitability of this software for any purpose. It is provided "as is"
14 * without express or implied warranty.
16 * U.M. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL U.M.
18 * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
19 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
20 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
21 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
23 * Authors: the Amanda Development Team. Its members are listed in a
24 * file named AUTHORS, in the root directory of this distribution.
27 * $Id: util.h,v 1.17.2.1 2006/09/21 11:12:21 martinea Exp $
58 /* Compression types */
60 COMP_NONE, /* No compression */
61 COMP_FAST, /* Fast compression on client */
62 COMP_BEST, /* Best compression on client */
63 COMP_CUST, /* Custom compression on client */
64 COMP_SERV_FAST, /* Fast compression on server */
65 COMP_SERV_BEST, /* Best compression on server */
66 COMP_SERV_CUST /* Custom compression on server */
69 /* Encryption types */
71 ENCRYPT_NONE, /* No encryption */
72 ENCRYPT_CUST, /* Custom encryption on client */
73 ENCRYPT_SERV_CUST, /* Custom encryption on server */
76 /* holdingdisk types */
78 HOLD_NEVER, /* Always direct to tape */
79 HOLD_AUTO, /* If possible */
80 HOLD_REQUIRED /* Always to holding disk */
84 #define DS_SKIP 0 /* Don't do any dumps at all */
85 #define DS_STANDARD 1 /* Standard (0 1 1 1 1 2 2 2 ...) */
86 #define DS_NOFULL 2 /* No full's (1 1 1 ...) */
87 #define DS_NOINC 3 /* No inc's (0 0 0 ...) */
88 #define DS_4 4 /* ? (0 1 2 3 4 5 6 7 8 9 10 11 ...) */
89 #define DS_5 5 /* ? (0 1 1 1 1 1 1 1 1 1 1 1 ...) */
90 #define DS_HANOI 6 /* Tower of Hanoi (? ? ? ? ? ...) */
91 #define DS_INCRONLY 7 /* Forced fulls (0 1 1 2 2 FORCE0 1 1 ...) */
93 /* Estimate strategies */
94 #define ES_CLIENT 0 /* client estimate */
95 #define ES_SERVER 1 /* server estimate */
96 #define ES_CALCSIZE 2 /* calcsize estimate */
99 #define ALGO_FIRSTFIT 1
100 #define ALGO_LARGEST 2
101 #define ALGO_LARGESTFIT 3
102 #define ALGO_SMALLEST 4
105 #define BSTRNCMP(a,b) strncmp(a, b, strlen(b))
108 CONF_UNKNOWN, CONF_ANY, CONF_COMMA,
109 CONF_LBRACE, CONF_RBRACE, CONF_NL,
110 CONF_END, CONF_IDENT, CONF_INT,
111 CONF_LONG, CONF_AM64, CONF_BOOL,
112 CONF_REAL, CONF_STRING, CONF_TIME,
115 /* config parameters */
116 CONF_INCLUDEFILE, CONF_ORG, CONF_MAILTO,
117 CONF_DUMPUSER, CONF_TAPECYCLE, CONF_TAPEDEV,
118 CONF_CHNGRDEV, CONF_CHNGRFILE, CONF_LABELSTR,
119 CONF_BUMPPERCENT, CONF_BUMPSIZE, CONF_BUMPDAYS,
120 CONF_BUMPMULT, CONF_ETIMEOUT, CONF_DTIMEOUT,
121 CONF_CTIMEOUT, CONF_TAPEBUFS, CONF_TAPELIST,
122 CONF_DISKFILE, CONF_INFOFILE, CONF_LOGDIR,
123 CONF_LOGFILE, CONF_DISKDIR, CONF_DISKSIZE,
124 CONF_INDEXDIR, CONF_NETUSAGE, CONF_INPARALLEL,
125 CONF_DUMPORDER, CONF_TIMEOUT, CONF_TPCHANGER,
126 CONF_RUNTAPES, CONF_DEFINE, CONF_DUMPTYPE,
127 CONF_TAPETYPE, CONF_INTERFACE, CONF_PRINTER,
128 CONF_AUTOFLUSH, CONF_RESERVE, CONF_MAXDUMPSIZE,
129 CONF_COLUMNSPEC, CONF_AMRECOVER_DO_FSF, CONF_AMRECOVER_CHECK_LABEL,
130 CONF_AMRECOVER_CHANGER, CONF_LABEL_NEW_TAPES, CONF_USETIMESTAMPS,
132 CONF_TAPERALGO, CONF_FIRST, CONF_FIRSTFIT,
133 CONF_LARGEST, CONF_LARGESTFIT, CONF_SMALLEST,
134 CONF_LAST, CONF_DISPLAYUNIT,
137 CONF_KRB5KEYTAB, CONF_KRB5PRINCIPAL,
140 CONF_COMMENT, CONF_DIRECTORY, CONF_USE,
144 /*COMMENT,*/ CONF_PROGRAM, CONF_DUMPCYCLE,
145 CONF_RUNSPERCYCLE, CONF_MAXCYCLE, CONF_MAXDUMPS,
146 CONF_OPTIONS, CONF_PRIORITY, CONF_FREQUENCY,
147 CONF_INDEX, CONF_MAXPROMOTEDAY, CONF_STARTTIME,
148 CONF_COMPRESS, CONF_ENCRYPT, CONF_AUTH,
149 CONF_STRATEGY, CONF_ESTIMATE, CONF_SKIP_INCR,
150 CONF_SKIP_FULL, CONF_RECORD, CONF_HOLDING,
151 CONF_EXCLUDE, CONF_INCLUDE, CONF_KENCRYPT,
152 CONF_IGNORE, CONF_COMPRATE, CONF_TAPE_SPLITSIZE,
153 CONF_SPLIT_DISKBUFFER, CONF_FALLBACK_SPLITSIZE,CONF_SRVCOMPPROG,
154 CONF_CLNTCOMPPROG, CONF_SRV_ENCRYPT, CONF_CLNT_ENCRYPT,
155 CONF_SRV_DECRYPT_OPT, CONF_CLNT_DECRYPT_OPT, CONF_AMANDAD_PATH,
156 CONF_CLIENT_USERNAME,
159 /*COMMENT,*/ CONF_BLOCKSIZE, CONF_FILE_PAD,
160 CONF_LBL_TEMPL, CONF_FILEMARK, CONF_LENGTH,
164 CONF_CONF, CONF_INDEX_SERVER, CONF_TAPE_SERVER,
165 CONF_SSH_KEYS, CONF_GNUTAR_LIST_DIR, CONF_AMANDATES,
167 /* network interface */
168 /* COMMENT, */ /* USE, */
170 /* dump options (obsolete) */
171 CONF_EXCLUDE_FILE, CONF_EXCLUDE_LIST,
173 /* compress, estimate, encryption */
174 CONF_NONE, CONF_FAST, CONF_BEST,
175 CONF_SERVER, CONF_CLIENT, CONF_CALCSIZE,
179 CONF_NEVER, CONF_AUTO, CONF_REQUIRED,
182 CONF_LOW, CONF_MEDIUM, CONF_HIGH,
185 CONF_SKIP, CONF_STANDARD, CONF_NOFULL,
186 CONF_NOINC, CONF_HANOI, CONF_INCRONLY,
189 CONF_LIST, CONF_EFILE, CONF_APPEND,
193 CONF_AMINFINITY, CONF_MULT1, CONF_MULT7,
194 CONF_MULT1K, CONF_MULT1M, CONF_MULT1G,
197 CONF_ATRUE, CONF_AFALSE,
202 #define BIGINT INT_MAX
204 /* internal types and variables */
206 typedef struct { /* token table entry */
211 extern keytab_t *keytable;
219 typedef struct exinclude_s {
220 int type; /* 0=list 1=file */
225 typedef struct val_s {
236 exinclude_t exinclude;
242 typedef struct s_conf_var {
245 void (*read_function) (struct s_conf_var *, val_t*);
247 void (*validate) (struct s_conf_var *, val_t *);
250 extern int allow_overwrites;
251 extern int token_pushed;
253 extern tok_t tok, pushed_tok;
254 extern val_t tokenval;
256 extern int conf_line_num, got_parserror;
257 extern FILE *conf_conf;
258 extern char *conf_confname;
259 extern char *conf_line;
260 extern char *conf_char;
262 /* predeclare local functions */
264 t_conf_var *get_np(t_conf_var *get_var, int parm);
265 void get_simple(val_t *var, tok_t type);
268 time_t get_time(void);
269 ssize_t get_size(void);
270 off_t get_am64_t(void);
272 void ckseen(int *seen);
273 void conf_parserror(const char *format, ...)
274 __attribute__ ((format (printf, 1, 2)));
275 tok_t lookup_keyword(char *str);
276 void unget_conftoken(void);
277 void get_conftoken(tok_t exp);
279 void read_string(t_conf_var *, val_t *);
280 void read_ident(t_conf_var *, val_t *);
281 void read_int(t_conf_var *, val_t *);
282 void read_long(t_conf_var *, val_t *);
283 void read_size(t_conf_var *, val_t *);
284 void read_am64(t_conf_var *, val_t *);
285 void read_bool(t_conf_var *, val_t *);
286 void read_real(t_conf_var *, val_t *);
287 void read_time(t_conf_var *, val_t *);
288 void copy_val_t(val_t *, val_t *);
289 void free_val_t(val_t *);
290 char *conf_print(val_t *);
291 void conf_init_string(val_t *, char *);
292 void conf_init_ident(val_t *, char *);
293 void conf_init_int(val_t *, int);
294 void conf_init_bool(val_t *, int);
295 void conf_init_strategy(val_t *, int);
296 void conf_init_estimate(val_t *, int);
297 void conf_init_taperalgo(val_t *, int);
298 void conf_init_priority(val_t *, int);
299 void conf_init_strategy(val_t *, int);
300 void conf_init_compress(val_t *, comp_t);
301 void conf_init_encrypt(val_t *, encrypt_t);
302 void conf_init_holding(val_t *, dump_holdingdisk_t);
303 void conf_init_long(val_t *, long);
304 void conf_init_size(val_t *, ssize_t);
305 void conf_init_am64(val_t *, off_t);
306 void conf_init_real(val_t *, double);
307 void conf_init_rate(val_t *, double, double);
308 void conf_init_time(val_t *, time_t);
309 void conf_init_sl(val_t *, sl_t *);
310 void conf_init_exinclude(val_t *);
311 void conf_set_string(val_t *, char *);
312 void conf_set_int(val_t *, int);
313 void conf_set_bool(val_t *, int);
314 void conf_set_compress(val_t *, comp_t);
315 void conf_set_encrypt(val_t *, encrypt_t);
316 void conf_set_holding(val_t *, dump_holdingdisk_t);
317 void conf_set_strategy(val_t *, int);
318 int get_conftype_int (val_t *);
319 long get_conftype_long (val_t *);
320 off_t get_conftype_am64 (val_t *);
321 double get_conftype_real (val_t *);
322 char *get_conftype_string (val_t *);
323 char *get_conftype_ident (val_t *);
324 time_t get_conftype_time (val_t *);
325 ssize_t get_conftype_size (val_t *);
326 sl_t *get_conftype_sl (val_t *);
327 int get_conftype_bool (val_t *);
328 int get_conftype_hold (val_t *);
329 int get_conftype_compress (val_t *);
330 int get_conftype_encrypt (val_t *);
331 int get_conftype_estimate (val_t *);
332 int get_conftype_strategy (val_t *);
333 int get_conftype_taperalgo(val_t *);
334 int get_conftype_priority (val_t *);
335 float *get_conftype_rate (val_t *);
336 exinclude_t get_conftype_exinclude(val_t *);
338 void read_block(command_option_t *command_options, t_conf_var *read_var,
339 keytab_t *keytab, val_t *valarray, char *prefix, char *errormsg,
340 int read_brace, void (*copy_function)(void));
341 void command_overwrite(command_option_t *command_options, t_conf_var *overwrite_var,
342 keytab_t *keytab, val_t *valarray, char *prefix);
346 ssize_t fullread(int, void *, size_t);
347 ssize_t fullwrite(int, const void *, size_t);
349 int connect_portrange(struct sockaddr_in *, in_port_t, in_port_t, char *,
350 struct sockaddr_in *, int);
351 int bind_portrange(int, struct sockaddr_in *, in_port_t, in_port_t,
354 char * construct_datestamp(time_t *t);
355 char * construct_timestamp(time_t *t);
357 /*@only@*//*@null@*/char *quote_string(const char *str);
358 /*@only@*//*@null@*/char *unquote_string(const char *str);
359 int needs_quotes(const char * str);
361 char * sanitize_string(const char *str);
362 char * strquotedstr(void);
363 ssize_t hexdump(const char *buffer, size_t bytes);
364 void dump_sockaddr(struct sockaddr_in * sa);
367 * validate_email return 0 if the following characters are present
368 * * ( ) < > [ ] , ; : ! $ \ / "
371 int validate_mailto(const char *mailto);
373 char *taperalgo2str(int taperalgo);
375 void free_new_argv(int new_argc, char **new_argv);