Imported Upstream version 2.5.2p1
[debian/amanda] / common-src / conffile.h
1 /*
2  * Amanda, The Advanced Maryland Automatic Network Disk Archiver
3  * Copyright (c) 1991-2000 University of Maryland at College Park
4  * All Rights Reserved.
5  *
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.
15  *
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.
22  *
23  * Author: James da Silva, Systems Design and Analysis Group
24  *                         Computer Science Department
25  *                         University of Maryland at College Park
26  */
27 /*
28  * $Id: conffile.h,v 1.72 2006/07/26 15:17:37 martinea Exp $
29  *
30  * interface for config file reading code
31  */
32 #ifndef CONFFILE_H
33 #define CONFFILE_H
34
35 #include "amanda.h"
36 #include "conffile.h"
37 #include "util.h"
38
39 #define CONFFILE_NAME "amanda.conf"
40
41 typedef enum {
42     CNF_ORG,
43     CNF_CONF,
44     CNF_INDEX_SERVER,
45     CNF_TAPE_SERVER,
46     CNF_AUTH,
47     CNF_SSH_KEYS,
48     CNF_AMANDAD_PATH,
49     CNF_CLIENT_USERNAME,
50     CNF_GNUTAR_LIST_DIR,
51     CNF_AMANDATES,
52     CNF_MAILTO,
53     CNF_DUMPUSER,
54     CNF_TAPEDEV,
55     CNF_CHNGRDEV,
56     CNF_CHNGRFILE,
57     CNF_LABELSTR,
58     CNF_TAPELIST,
59     CNF_DISKFILE,
60     CNF_INFOFILE,
61     CNF_LOGDIR,
62     CNF_INDEXDIR,
63     CNF_TAPETYPE,
64     CNF_DUMPCYCLE,
65     CNF_RUNSPERCYCLE,
66     CNF_TAPECYCLE,
67     CNF_NETUSAGE,
68     CNF_INPARALLEL,
69     CNF_DUMPORDER,
70     CNF_BUMPPERCENT,
71     CNF_BUMPSIZE,
72     CNF_BUMPMULT,
73     CNF_BUMPDAYS,
74     CNF_TPCHANGER,
75     CNF_RUNTAPES,
76     CNF_MAXDUMPS,
77     CNF_ETIMEOUT,
78     CNF_DTIMEOUT,
79     CNF_CTIMEOUT,
80     CNF_TAPEBUFS,
81     CNF_RAWTAPEDEV,
82     CNF_PRINTER,
83     CNF_AUTOFLUSH,
84     CNF_RESERVE,
85     CNF_MAXDUMPSIZE,
86     CNF_COLUMNSPEC,
87     CNF_AMRECOVER_DO_FSF,
88     CNF_AMRECOVER_CHECK_LABEL,
89     CNF_AMRECOVER_CHANGER,
90     CNF_TAPERALGO,
91     CNF_DISPLAYUNIT,
92     CNF_KRB5KEYTAB,
93     CNF_KRB5PRINCIPAL,
94     CNF_LABEL_NEW_TAPES,
95     CNF_USETIMESTAMPS,
96     CNF_REP_TRIES,
97     CNF_CONNECT_TRIES,
98     CNF_REQ_TRIES,
99     CNF_DEBUG_AMANDAD,
100     CNF_DEBUG_AMIDXTAPED,
101     CNF_DEBUG_AMINDEXD,
102     CNF_DEBUG_AMRECOVER,
103     CNF_DEBUG_AUTH,
104     CNF_DEBUG_EVENT,
105     CNF_DEBUG_HOLDING,
106     CNF_DEBUG_PROTOCOL,
107     CNF_DEBUG_PLANNER,
108     CNF_DEBUG_DRIVER,
109     CNF_DEBUG_DUMPER,
110     CNF_DEBUG_CHUNKER,
111     CNF_DEBUG_TAPER,
112     CNF_DEBUG_SELFCHECK,
113     CNF_DEBUG_SENDSIZE,
114     CNF_DEBUG_SENDBACKUP,
115     CNF_RESERVED_UDP_PORT,
116     CNF_RESERVED_TCP_PORT,
117     CNF_UNRESERVED_TCP_PORT,
118     CNF_CNF
119 } confparm_t;
120
121 typedef enum {
122     CONF_UNKNOWN,               CONF_ANY,               CONF_COMMA,
123     CONF_LBRACE,                CONF_RBRACE,            CONF_NL,
124     CONF_END,                   CONF_IDENT,             CONF_INT,
125     CONF_LONG,                  CONF_AM64,              CONF_BOOL,
126     CONF_REAL,                  CONF_STRING,            CONF_TIME,
127     CONF_SIZE,
128
129     /* config parameters */
130     CONF_INCLUDEFILE,           CONF_ORG,               CONF_MAILTO,
131     CONF_DUMPUSER,              CONF_TAPECYCLE,         CONF_TAPEDEV,
132     CONF_CHNGRDEV,              CONF_CHNGRFILE,         CONF_LABELSTR,
133     CONF_BUMPPERCENT,           CONF_BUMPSIZE,          CONF_BUMPDAYS,
134     CONF_BUMPMULT,              CONF_ETIMEOUT,          CONF_DTIMEOUT,
135     CONF_CTIMEOUT,              CONF_TAPEBUFS,          CONF_TAPELIST,
136     CONF_DISKFILE,              CONF_INFOFILE,          CONF_LOGDIR,
137     CONF_LOGFILE,               CONF_DISKDIR,           CONF_DISKSIZE,
138     CONF_INDEXDIR,              CONF_NETUSAGE,          CONF_INPARALLEL,
139     CONF_DUMPORDER,             CONF_TIMEOUT,           CONF_TPCHANGER,
140     CONF_RUNTAPES,              CONF_DEFINE,            CONF_DUMPTYPE,
141     CONF_TAPETYPE,              CONF_INTERFACE,         CONF_PRINTER,
142     CONF_AUTOFLUSH,             CONF_RESERVE,           CONF_MAXDUMPSIZE,
143     CONF_COLUMNSPEC,            CONF_AMRECOVER_DO_FSF,  CONF_AMRECOVER_CHECK_LABEL,
144     CONF_AMRECOVER_CHANGER,     CONF_LABEL_NEW_TAPES,   CONF_USETIMESTAMPS,
145
146     CONF_TAPERALGO,             CONF_FIRST,             CONF_FIRSTFIT,
147     CONF_LARGEST,               CONF_LARGESTFIT,        CONF_SMALLEST,
148     CONF_LAST,                  CONF_DISPLAYUNIT,       CONF_RESERVED_UDP_PORT,
149     CONF_RESERVED_TCP_PORT,     CONF_UNRESERVED_TCP_PORT,
150
151     /* kerberos 5 */
152     CONF_KRB5KEYTAB,            CONF_KRB5PRINCIPAL,
153
154     /* holding disk */
155     CONF_COMMENT,               CONF_DIRECTORY,         CONF_USE,
156     CONF_CHUNKSIZE,
157
158     /* dump type */
159     /*COMMENT,*/                CONF_PROGRAM,           CONF_DUMPCYCLE,
160     CONF_RUNSPERCYCLE,          CONF_MAXCYCLE,          CONF_MAXDUMPS,
161     CONF_OPTIONS,               CONF_PRIORITY,          CONF_FREQUENCY,
162     CONF_INDEX,                 CONF_MAXPROMOTEDAY,     CONF_STARTTIME,
163     CONF_COMPRESS,              CONF_ENCRYPT,           CONF_AUTH,
164     CONF_STRATEGY,              CONF_ESTIMATE,          CONF_SKIP_INCR,
165     CONF_SKIP_FULL,             CONF_RECORD,            CONF_HOLDING,
166     CONF_EXCLUDE,               CONF_INCLUDE,           CONF_KENCRYPT,
167     CONF_IGNORE,                CONF_COMPRATE,          CONF_TAPE_SPLITSIZE,
168     CONF_SPLIT_DISKBUFFER,      CONF_FALLBACK_SPLITSIZE,CONF_SRVCOMPPROG,
169     CONF_CLNTCOMPPROG,          CONF_SRV_ENCRYPT,       CONF_CLNT_ENCRYPT,
170     CONF_SRV_DECRYPT_OPT,       CONF_CLNT_DECRYPT_OPT,  CONF_AMANDAD_PATH,
171     CONF_CLIENT_USERNAME,
172
173     /* tape type */
174     /*COMMENT,*/                CONF_BLOCKSIZE,         CONF_FILE_PAD,
175     CONF_LBL_TEMPL,             CONF_FILEMARK,          CONF_LENGTH,
176     CONF_SPEED,                 CONF_READBLOCKSIZE,
177
178     /* client conf */
179     CONF_CONF,                  CONF_INDEX_SERVER,      CONF_TAPE_SERVER,
180     CONF_SSH_KEYS,              CONF_GNUTAR_LIST_DIR,   CONF_AMANDATES,
181
182     /* protocol config */
183     CONF_REP_TRIES,             CONF_CONNECT_TRIES,     CONF_REQ_TRIES,
184
185     /* debug config */
186     CONF_DEBUG_AMANDAD,         CONF_DEBUG_AMIDXTAPED,  CONF_DEBUG_AMINDEXD,
187     CONF_DEBUG_AMRECOVER,       CONF_DEBUG_AUTH,        CONF_DEBUG_EVENT,
188     CONF_DEBUG_HOLDING,         CONF_DEBUG_PROTOCOL,    CONF_DEBUG_PLANNER,
189     CONF_DEBUG_DRIVER,          CONF_DEBUG_DUMPER,      CONF_DEBUG_CHUNKER,
190     CONF_DEBUG_TAPER,           CONF_DEBUG_SELFCHECK,   CONF_DEBUG_SENDSIZE,
191     CONF_DEBUG_SENDBACKUP,
192
193     /* network interface */
194     /* COMMENT, */              /* USE, */
195
196     /* dump options (obsolete) */
197     CONF_EXCLUDE_FILE,          CONF_EXCLUDE_LIST,
198
199     /* compress, estimate, encryption */
200     CONF_NONE,                  CONF_FAST,              CONF_BEST,
201     CONF_SERVER,                CONF_CLIENT,            CONF_CALCSIZE,
202     CONF_CUSTOM,
203
204     /* holdingdisk */
205     CONF_NEVER,                 CONF_AUTO,              CONF_REQUIRED,
206
207     /* priority */
208     CONF_LOW,                   CONF_MEDIUM,            CONF_HIGH,
209
210     /* dump strategy */
211     CONF_SKIP,                  CONF_STANDARD,          CONF_NOFULL,
212     CONF_NOINC,                 CONF_HANOI,             CONF_INCRONLY,
213
214     /* exclude list */
215     CONF_LIST,                  CONF_EFILE,             CONF_APPEND,
216     CONF_OPTIONAL,
217
218     /* numbers */
219     CONF_AMINFINITY,            CONF_MULT1,             CONF_MULT7,
220     CONF_MULT1K,                CONF_MULT1M,            CONF_MULT1G,
221
222     /* boolean */
223     CONF_ATRUE,                 CONF_AFALSE,
224
225     CONF_RAWTAPEDEV
226 } tok_t;
227
228 /* internal types and variables */
229
230 /* */
231 typedef enum {
232     CONFTYPE_INT,
233     CONFTYPE_LONG,
234     CONFTYPE_AM64,
235     CONFTYPE_REAL,
236     CONFTYPE_STRING,
237     CONFTYPE_IDENT,
238     CONFTYPE_TIME,              /* hhmm */
239     CONFTYPE_SIZE,
240     CONFTYPE_SL,
241     CONFTYPE_BOOL,
242     CONFTYPE_COMPRESS,
243     CONFTYPE_ENCRYPT,
244     CONFTYPE_HOLDING,
245     CONFTYPE_ESTIMATE,
246     CONFTYPE_STRATEGY,
247     CONFTYPE_TAPERALGO,
248     CONFTYPE_PRIORITY,
249     CONFTYPE_RATE,
250     CONFTYPE_INTRANGE,
251     CONFTYPE_EXINCLUDE
252 } conftype_t;
253
254 /* Compression types */
255 typedef enum {
256     COMP_NONE,          /* No compression */
257     COMP_FAST,          /* Fast compression on client */
258     COMP_BEST,          /* Best compression on client */
259     COMP_CUST,          /* Custom compression on client */
260     COMP_SERVER_FAST,   /* Fast compression on server */
261     COMP_SERVER_BEST,   /* Best compression on server */
262     COMP_SERVER_CUST    /* Custom compression on server */
263 } comp_t;
264
265 /* Encryption types */
266 typedef enum {
267     ENCRYPT_NONE,               /* No encryption */
268     ENCRYPT_CUST,               /* Custom encryption on client */
269     ENCRYPT_SERV_CUST           /* Custom encryption on server */
270 } encrypt_t;
271
272 /* holdingdisk types */
273 typedef enum {
274     HOLD_NEVER,                 /* Always direct to tape  */
275     HOLD_AUTO,                  /* If possible            */
276     HOLD_REQUIRED               /* Always to holding disk */
277 } dump_holdingdisk_t;
278
279 typedef struct {        /* token table entry */
280     char *keyword;
281     tok_t token;
282 } keytab_t;
283
284 typedef struct {
285     char *name;
286     char *value;
287     int   used;
288 } command_option_t;
289
290 typedef struct exinclude_s {
291     sl_t *sl_list;
292     sl_t *sl_file;
293     int  optional;
294 } exinclude_t;
295
296 typedef struct val_s {
297     union {
298        int              i;
299        long             l;
300        off_t            am64;
301        double           r;
302        char             *s;
303        sl_t             *sl;
304        ssize_t          size;
305        time_t           t;
306        float            rate[2];
307        exinclude_t      exinclude;
308        int              intrange[2];
309     } v;
310     int seen;
311     conftype_t type;
312 } val_t;
313
314 typedef struct s_conf_var {
315     tok_t       token;
316     conftype_t  type;
317     void        (*read_function) (struct s_conf_var *, val_t*);
318     int         parm;
319     void        (*validate) (struct s_conf_var *, val_t *);
320 } t_conf_var;
321
322 typedef enum tapetype_e  {
323     TAPETYPE_COMMENT,
324     TAPETYPE_LBL_TEMPL,
325     TAPETYPE_BLOCKSIZE,
326     TAPETYPE_READBLOCKSIZE,
327     TAPETYPE_LENGTH,
328     TAPETYPE_FILEMARK,
329     TAPETYPE_SPEED,
330     TAPETYPE_FILE_PAD,
331     TAPETYPE_TAPETYPE
332 } tapetype_ee;
333
334 typedef struct tapetype_s {
335     struct tapetype_s *next;
336     int seen;
337     char *name;
338
339     val_t value[TAPETYPE_TAPETYPE];
340 } tapetype_t;
341
342 #define tapetype_get(tapetype, field) (tapetype->field)
343 #define tapetype_get_name(tapetype) tapetype->name
344 #define tapetype_get_seen(tapetype) tapetype->seen
345 #define tapetype_get_comment(tapetype)       get_conftype_string(&tapetype->value[TAPETYPE_COMMENT])
346 #define tapetype_get_lbl_templ(tapetype)     get_conftype_string(&tapetype->value[TAPETYPE_LBL_TEMPL])
347 #define tapetype_get_blocksize(tapetype)     get_conftype_size  (&tapetype->value[TAPETYPE_BLOCKSIZE])
348 #define tapetype_get_readblocksize(tapetype) get_conftype_size  (&tapetype->value[TAPETYPE_READBLOCKSIZE])
349 #define tapetype_get_length(tapetype)        get_conftype_am64  (&tapetype->value[TAPETYPE_LENGTH])
350 #define tapetype_get_filemark(tapetype)      get_conftype_am64  (&tapetype->value[TAPETYPE_FILEMARK])
351 #define tapetype_get_speed(tapetype)         get_conftype_int   (&tapetype->value[TAPETYPE_SPEED])
352 #define tapetype_get_file_pad(tapetype)      get_conftype_bool  (&tapetype->value[TAPETYPE_FILE_PAD])
353
354 /* Dump strategies */
355 #define DS_SKIP         0       /* Don't do any dumps at all */
356 #define DS_STANDARD     1       /* Standard (0 1 1 1 1 2 2 2 ...) */
357 #define DS_NOFULL       2       /* No full's (1 1 1 ...) */
358 #define DS_NOINC        3       /* No inc's (0 0 0 ...) */
359 #define DS_4            4       /* ? (0 1 2 3 4 5 6 7 8 9 10 11 ...) */
360 #define DS_5            5       /* ? (0 1 1 1 1 1 1 1 1 1 1 1 ...) */
361 #define DS_HANOI        6       /* Tower of Hanoi (? ? ? ? ? ...) */
362 #define DS_INCRONLY     7       /* Forced fulls (0 1 1 2 2 FORCE0 1 1 ...) */
363
364 /* Estimate strategies */
365 #define ES_CLIENT       0       /* client estimate */
366 #define ES_SERVER       1       /* server estimate */
367 #define ES_CALCSIZE     2       /* calcsize estimate */
368
369 #define ALGO_FIRST      0
370 #define ALGO_FIRSTFIT   1
371 #define ALGO_LARGEST    2
372 #define ALGO_LARGESTFIT 3
373 #define ALGO_SMALLEST   4
374 #define ALGO_LAST       5
375
376 typedef enum dumptype_e  {
377     DUMPTYPE_COMMENT,
378     DUMPTYPE_PROGRAM,
379     DUMPTYPE_SRVCOMPPROG,
380     DUMPTYPE_CLNTCOMPPROG,
381     DUMPTYPE_SRV_ENCRYPT,
382     DUMPTYPE_CLNT_ENCRYPT,
383     DUMPTYPE_AMANDAD_PATH,
384     DUMPTYPE_CLIENT_USERNAME,
385     DUMPTYPE_SSH_KEYS,
386     DUMPTYPE_SECURITY_DRIVER,
387     DUMPTYPE_EXCLUDE,
388     DUMPTYPE_INCLUDE,
389     DUMPTYPE_PRIORITY,
390     DUMPTYPE_DUMPCYCLE,
391     DUMPTYPE_MAXDUMPS,
392     DUMPTYPE_MAXPROMOTEDAY,
393     DUMPTYPE_BUMPPERCENT,
394     DUMPTYPE_BUMPSIZE,
395     DUMPTYPE_BUMPDAYS,
396     DUMPTYPE_BUMPMULT,
397     DUMPTYPE_STARTTIME,
398     DUMPTYPE_STRATEGY,
399     DUMPTYPE_ESTIMATE,
400     DUMPTYPE_COMPRESS,
401     DUMPTYPE_ENCRYPT,
402     DUMPTYPE_SRV_DECRYPT_OPT,
403     DUMPTYPE_CLNT_DECRYPT_OPT,
404     DUMPTYPE_COMPRATE,
405     DUMPTYPE_TAPE_SPLITSIZE,
406     DUMPTYPE_FALLBACK_SPLITSIZE,
407     DUMPTYPE_SPLIT_DISKBUFFER,
408     DUMPTYPE_RECORD,
409     DUMPTYPE_SKIP_INCR,
410     DUMPTYPE_SKIP_FULL,
411     DUMPTYPE_HOLDINGDISK,
412     DUMPTYPE_KENCRYPT,
413     DUMPTYPE_IGNORE,
414     DUMPTYPE_INDEX,
415     DUMPTYPE_DUMPTYPE
416 } dumptype_ee;
417
418 typedef struct dumptype_s {
419     struct dumptype_s *next;
420     int seen;
421     char *name;
422
423     val_t value[DUMPTYPE_DUMPTYPE];
424 } dumptype_t;
425
426 #define dumptype_get_name(dumptype) dumptype->name
427 #define dumptype_get_seen(dumptype) dumptype->seen
428 #define dumptype_get_comment(dumptype)            get_conftype_string   (&dumptype->value[DUMPTYPE_COMMENT])
429 #define dumptype_get_program(dumptype)            get_conftype_string   (&dumptype->value[DUMPTYPE_PROGRAM])
430 #define dumptype_get_srvcompprog(dumptype)        get_conftype_string   (&dumptype->value[DUMPTYPE_SRVCOMPPROG])
431 #define dumptype_get_clntcompprog(dumptype)       get_conftype_string   (&dumptype->value[DUMPTYPE_CLNTCOMPPROG])
432 #define dumptype_get_srv_encrypt(dumptype)        get_conftype_string   (&dumptype->value[DUMPTYPE_SRV_ENCRYPT])
433 #define dumptype_get_clnt_encrypt(dumptype)       get_conftype_string   (&dumptype->value[DUMPTYPE_CLNT_ENCRYPT])
434 #define dumptype_get_amandad_path(dumptype)       get_conftype_string   (&dumptype->value[DUMPTYPE_AMANDAD_PATH])
435 #define dumptype_get_client_username(dumptype)    get_conftype_string   (&dumptype->value[DUMPTYPE_CLIENT_USERNAME])
436 #define dumptype_get_ssh_keys(dumptype)           get_conftype_string   (&dumptype->value[DUMPTYPE_SSH_KEYS])
437 #define dumptype_get_security_driver(dumptype)    get_conftype_string   (&dumptype->value[DUMPTYPE_SECURITY_DRIVER])
438 #define dumptype_get_exclude(dumptype)            get_conftype_exinclude(&dumptype->value[DUMPTYPE_EXCLUDE])
439 #define dumptype_get_include(dumptype)            get_conftype_exinclude(&dumptype->value[DUMPTYPE_INCLUDE])
440 #define dumptype_get_priority(dumptype)           get_conftype_priority (&dumptype->value[DUMPTYPE_PRIORITY])
441 #define dumptype_get_dumpcycle(dumptype)          get_conftype_int      (&dumptype->value[DUMPTYPE_DUMPCYCLE])
442 #define dumptype_get_maxcycle(dumptype)           get_conftype_int      (&dumptype->value[DUMPTYPE_MAXCYCLE])
443 #define dumptype_get_frequency(dumptype)          get_conftype_int      (&dumptype->value[DUMPTYPE_FREQUENCY])
444 #define dumptype_get_maxdumps(dumptype)           get_conftype_int      (&dumptype->value[DUMPTYPE_MAXDUMPS])
445 #define dumptype_get_maxpromoteday(dumptype)      get_conftype_int      (&dumptype->value[DUMPTYPE_MAXPROMOTEDAY])
446 #define dumptype_get_bumppercent(dumptype)        get_conftype_int      (&dumptype->value[DUMPTYPE_BUMPPERCENT])
447 #define dumptype_get_bumpsize(dumptype)           get_conftype_am64     (&dumptype->value[DUMPTYPE_BUMPSIZE])
448 #define dumptype_get_bumpdays(dumptype)           get_conftype_int      (&dumptype->value[DUMPTYPE_BUMPDAYS])
449 #define dumptype_get_bumpmult(dumptype)           get_conftype_real     (&dumptype->value[DUMPTYPE_BUMPMULT])
450 #define dumptype_get_starttime(dumptype)          get_conftype_time     (&dumptype->value[DUMPTYPE_STARTTIME])
451 #define dumptype_get_strategy(dumptype)           get_conftype_strategy (&dumptype->value[DUMPTYPE_STRATEGY])
452 #define dumptype_get_estimate(dumptype)           get_conftype_estimate (&dumptype->value[DUMPTYPE_ESTIMATE])
453 #define dumptype_get_compress(dumptype)           get_conftype_compress (&dumptype->value[DUMPTYPE_COMPRESS])
454 #define dumptype_get_encrypt(dumptype)            get_conftype_encrypt  (&dumptype->value[DUMPTYPE_ENCRYPT])
455 #define dumptype_get_srv_decrypt_opt(dumptype)    get_conftype_string   (&dumptype->value[DUMPTYPE_SRV_DECRYPT_OPT])
456 #define dumptype_get_clnt_decrypt_opt(dumptype)   get_conftype_string   (&dumptype->value[DUMPTYPE_CLNT_DECRYPT_OPT])
457 #define dumptype_get_comprate(dumptype)                                   dumptype->value[DUMPTYPE_COMPRATE].v.rate
458 #define dumptype_get_tape_splitsize(dumptype)     get_conftype_am64     (&dumptype->value[DUMPTYPE_TAPE_SPLITSIZE])
459 #define dumptype_get_fallback_splitsize(dumptype) get_conftype_am64     (&dumptype->value[DUMPTYPE_FALLBACK_SPLITSIZE])
460 #define dumptype_get_split_diskbuffer(dumptype)   get_conftype_string   (&dumptype->value[DUMPTYPE_SPLIT_DISKBUFFER])
461 #define dumptype_get_record(dumptype)             get_conftype_bool     (&dumptype->value[DUMPTYPE_RECORD])
462 #define dumptype_get_skip_incr(dumptype)          get_conftype_bool     (&dumptype->value[DUMPTYPE_SKIP_INCR])
463 #define dumptype_get_skip_full(dumptype)          get_conftype_bool     (&dumptype->value[DUMPTYPE_SKIP_FULL])
464 #define dumptype_get_to_holdingdisk(dumptype)     get_conftype_hold     (&dumptype->value[DUMPTYPE_HOLDINGDISK])
465 #define dumptype_get_kencrypt(dumptype)           get_conftype_bool     (&dumptype->value[DUMPTYPE_KENCRYPT])
466 #define dumptype_get_ignore(dumptype)             get_conftype_bool     (&dumptype->value[DUMPTYPE_IGNORE])
467 #define dumptype_get_index(dumptype)              get_conftype_bool     (&dumptype->value[DUMPTYPE_INDEX])
468
469 /* A network interface */
470 typedef enum interface_e  {
471     INTER_COMMENT,
472     INTER_MAXUSAGE,
473     INTER_INTER
474 } interface_ee;
475
476
477 typedef struct interface_s {
478     struct interface_s *next;
479     int seen;
480     char *name;
481
482     val_t value[INTER_INTER];
483
484     unsigned long curusage;             /* current usage */
485 } interface_t;
486
487 #define interface_get_name(interface) interface->name
488 #define interface_get_seen(interface) interface->seen
489 #define interface_get_comment(interface)  get_conftype_string(&interface->value[INTER_COMMENT])
490 #define interface_get_maxusage(interface) get_conftype_int   (&interface->value[INTER_MAXUSAGE])
491
492 /* A holding disk */
493 typedef enum holdingdisk_e  {
494     HOLDING_COMMENT,
495     HOLDING_DISKDIR,
496     HOLDING_DISKSIZE,
497     HOLDING_CHUNKSIZE,
498     HOLDING_HOLDING
499 } holdingdisk_ee;
500
501 typedef struct holdingdisk_s {
502     struct holdingdisk_s *next;
503     int seen;
504     char *name;
505
506     val_t value[HOLDING_HOLDING];
507
508     void *up;                   /* generic user pointer */
509     off_t disksize;
510 } holdingdisk_t;
511
512 #define holdingdisk_get_name(holdingdisk) (holdingdisk)->name
513 #define holdingdisk_get_seen(holdingdisk) (holdingdisk)->seen
514 #define holdingdisk_get_comment(holdingdisk)   get_conftype_string(&(holdingdisk)->value[HOLDING_COMMENT])
515 #define holdingdisk_get_diskdir(holdingdisk)   get_conftype_string(&(holdingdisk)->value[HOLDING_DISKDIR])
516 #define holdingdisk_get_disksize(holdingdisk)  get_conftype_am64  (&(holdingdisk)->value[HOLDING_DISKSIZE])
517 #define holdingdisk_get_chunksize(holdingdisk) get_conftype_am64  (&(holdingdisk)->value[HOLDING_CHUNKSIZE])
518
519 /* for each column we define some values on how to
520  * format this column element
521  */
522 typedef struct {
523     char *Name;         /* column name */
524     int PrefixSpace;    /* the blank space to print before this
525                          * column. It is used to get the space
526                          * between the colums
527                          */
528     int Width;          /* the width of the column itself */
529     int Precision;      /* the precision if its a float */
530     int MaxWidth;       /* if set, Width will be recalculated
531                          * to the space needed */
532     char *Format;       /* the printf format string for this
533                          * column element
534                          */
535     char *Title;        /* the title to use for this column */
536 } ColumnInfo;
537
538
539 /* predeclare local functions */
540
541 int          get_conftype_int      (val_t *);
542 long         get_conftype_long     (val_t *);
543 off_t        get_conftype_am64     (val_t *);
544 double       get_conftype_real     (val_t *);
545 char        *get_conftype_string   (val_t *);
546 char        *get_conftype_ident    (val_t *);
547 time_t       get_conftype_time     (val_t *);
548 ssize_t      get_conftype_size     (val_t *);
549 sl_t        *get_conftype_sl       (val_t *);
550 int          get_conftype_bool     (val_t *);
551 int          get_conftype_hold     (val_t *);
552 int          get_conftype_compress (val_t *);
553 int          get_conftype_encrypt  (val_t *);
554 int          get_conftype_estimate (val_t *);
555 int          get_conftype_strategy (val_t *);
556 int          get_conftype_taperalgo(val_t *);
557 int          get_conftype_priority (val_t *);
558 float       *get_conftype_rate     (val_t *);
559 exinclude_t  get_conftype_exinclude(val_t *);
560 int         *get_conftype_intrange (val_t *);
561
562 void command_overwrite(command_option_t *command_options, t_conf_var *overwrite_var,
563                        keytab_t *keytab, val_t *valarray, char *prefix);
564
565 void free_new_argv(int new_argc, char **new_argv);
566 /* this corresponds to the normal output of amanda, but may
567  * be adapted to any spacing as you like.
568  */
569 extern ColumnInfo ColumnData[];
570
571 extern char *config_name;
572 extern char *config_dir;
573
574 extern int debug_amandad;
575 extern int debug_amidxtaped;
576 extern int debug_amindexd;
577 extern int debug_amrecover;
578 extern int debug_auth;
579 extern int debug_event;
580 extern int debug_holding;
581 extern int debug_protocol;
582 extern int debug_planner;
583 extern int debug_driver;
584 extern int debug_dumper;
585 extern int debug_chunker;
586 extern int debug_taper;
587 extern int debug_selfcheck;
588 extern int debug_sendsize;
589 extern int debug_sendbackup;
590
591 extern holdingdisk_t *holdingdisks;
592 extern int num_holdingdisks;
593
594 void parse_conf(int parse_argc, char **parse_argv, int *new_argc,
595                        char ***new_argv);
596 char **get_config_options(int);
597 void report_bad_conf_arg(void);
598 void free_server_config(void);
599
600 int read_conffile(char *filename);
601
602 #define CLIENTCONFFILE_NAME "client.conf"
603
604 int  add_client_conf(confparm_t parm, char *value);
605 int read_clientconf(char *filename);
606 char *generic_client_get_security_conf(char *, void *);
607
608 int getconf_seen(confparm_t parameter);
609 int getconf_boolean(confparm_t parameter);
610 int getconf_int(confparm_t parameter);
611 long getconf_long(confparm_t parameter);
612 ssize_t getconf_size(confparm_t parameter);
613 time_t getconf_time(confparm_t parameter);
614 off_t getconf_am64(confparm_t parameter);
615 double getconf_real(confparm_t parameter);
616 char *getconf_str(confparm_t parameter);
617 int getconf_taperalgo(confparm_t parameter);
618 int *getconf_intrange(confparm_t parameter);
619 char *getconf_byname(char *confname);
620 char *getconf_list(char *listname);
621 dumptype_t *lookup_dumptype(char *identifier);
622 dumptype_t *read_dumptype(char *name, FILE *from, char *fname, int *linenum);
623 tapetype_t *lookup_tapetype(char *identifier);
624 holdingdisk_t *lookup_holdingdisk(char *identifier);
625 interface_t *lookup_interface(char *identifier);
626 holdingdisk_t *getconf_holdingdisks(void);
627 long int getconf_unit_divisor(void);
628 void dump_configuration(char *filename);
629 int ColumnDataCount(void);
630 int StringToColumn(char *s);
631 char LastChar(char *s);
632 int SetColumDataFromString(ColumnInfo* ci, char *s, char **errstr);
633 ssize_t getconf_readblocksize(void);
634
635 /* this is in securityconf.h */
636 char *generic_get_security_conf(char *, void *);
637 #endif /* ! CONFFILE_H */