Imported Upstream version 2.5.1
[debian/amanda] / server-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 "util.h"
37
38 #define CONFFILE_NAME "amanda.conf"
39
40 typedef enum {
41     CNF_ORG,
42     CNF_MAILTO,
43     CNF_DUMPUSER,
44     CNF_TAPEDEV,
45     CNF_CHNGRDEV,
46     CNF_CHNGRFILE,
47     CNF_LABELSTR,
48     CNF_TAPELIST,
49     CNF_DISKFILE,
50     CNF_INFOFILE,
51     CNF_LOGDIR,
52     CNF_INDEXDIR,
53     CNF_TAPETYPE,
54     CNF_DUMPCYCLE,
55     CNF_RUNSPERCYCLE,
56     CNF_TAPECYCLE,
57     CNF_NETUSAGE,
58     CNF_INPARALLEL,
59     CNF_DUMPORDER,
60     CNF_BUMPPERCENT,
61     CNF_BUMPSIZE,
62     CNF_BUMPMULT,
63     CNF_BUMPDAYS,
64     CNF_TPCHANGER,
65     CNF_RUNTAPES,
66     CNF_MAXDUMPS,
67     CNF_ETIMEOUT,
68     CNF_DTIMEOUT,
69     CNF_CTIMEOUT,
70     CNF_TAPEBUFS,
71     CNF_RAWTAPEDEV,
72     CNF_PRINTER,
73     CNF_AUTOFLUSH,
74     CNF_RESERVE,
75     CNF_MAXDUMPSIZE,
76     CNF_COLUMNSPEC,
77     CNF_AMRECOVER_DO_FSF,
78     CNF_AMRECOVER_CHECK_LABEL,
79     CNF_AMRECOVER_CHANGER,
80     CNF_TAPERALGO,
81     CNF_DISPLAYUNIT,
82     CNF_KRB5KEYTAB,
83     CNF_KRB5PRINCIPAL,
84     CNF_LABEL_NEW_TAPES,
85     CNF_USETIMESTAMPS,
86     CNF_CNF
87 } confparm_t;
88
89 typedef enum tapetype_e  {
90     TAPETYPE_COMMENT,
91     TAPETYPE_LBL_TEMPL,
92     TAPETYPE_BLOCKSIZE,
93     TAPETYPE_LENGTH,
94     TAPETYPE_FILEMARK,
95     TAPETYPE_SPEED,
96     TAPETYPE_FILE_PAD,
97     TAPETYPE_TAPETYPE
98 } tapetype_ee;
99
100 typedef struct tapetype_s {
101     struct tapetype_s *next;
102     int seen;
103     char *name;
104
105     val_t value[TAPETYPE_TAPETYPE];
106 } tapetype_t;
107
108 #define tapetype_get(tapetype, field) (tapetype->field)
109 #define tapetype_get_name(tapetype) tapetype->name
110 #define tapetype_get_seen(tapetype) tapetype->seen
111 #define tapetype_get_comment(tapetype)   get_conftype_string(&tapetype->value[TAPETYPE_COMMENT])
112 #define tapetype_get_lbl_templ(tapetype) get_conftype_string(&tapetype->value[TAPETYPE_LBL_TEMPL])
113 #define tapetype_get_blocksize(tapetype) get_conftype_size  (&tapetype->value[TAPETYPE_BLOCKSIZE])
114 #define tapetype_get_length(tapetype)    get_conftype_am64  (&tapetype->value[TAPETYPE_LENGTH])
115 #define tapetype_get_filemark(tapetype)  get_conftype_am64  (&tapetype->value[TAPETYPE_FILEMARK])
116 #define tapetype_get_speed(tapetype)     get_conftype_int   (&tapetype->value[TAPETYPE_SPEED])
117 #define tapetype_get_file_pad(tapetype)  get_conftype_bool  (&tapetype->value[TAPETYPE_FILE_PAD])
118
119 /* Dump strategies */
120 #define DS_SKIP         0       /* Don't do any dumps at all */
121 #define DS_STANDARD     1       /* Standard (0 1 1 1 1 2 2 2 ...) */
122 #define DS_NOFULL       2       /* No full's (1 1 1 ...) */
123 #define DS_NOINC        3       /* No inc's (0 0 0 ...) */
124 #define DS_4            4       /* ? (0 1 2 3 4 5 6 7 8 9 10 11 ...) */
125 #define DS_5            5       /* ? (0 1 1 1 1 1 1 1 1 1 1 1 ...) */
126 #define DS_HANOI        6       /* Tower of Hanoi (? ? ? ? ? ...) */
127 #define DS_INCRONLY     7       /* Forced fulls (0 1 1 2 2 FORCE0 1 1 ...) */
128
129 /* Estimate strategies */
130 #define ES_CLIENT       0       /* client estimate */
131 #define ES_SERVER       1       /* server estimate */
132 #define ES_CALCSIZE     2       /* calcsize estimate */
133
134 #define ALGO_FIRST      0
135 #define ALGO_FIRSTFIT   1
136 #define ALGO_LARGEST    2
137 #define ALGO_LARGESTFIT 3
138 #define ALGO_SMALLEST   4
139 #define ALGO_LAST       5
140
141 typedef enum dumptype_e  {
142     DUMPTYPE_COMMENT,
143     DUMPTYPE_PROGRAM,
144     DUMPTYPE_SRVCOMPPROG,
145     DUMPTYPE_CLNTCOMPPROG,
146     DUMPTYPE_SRV_ENCRYPT,
147     DUMPTYPE_CLNT_ENCRYPT,
148     DUMPTYPE_AMANDAD_PATH,
149     DUMPTYPE_CLIENT_USERNAME,
150     DUMPTYPE_SSH_KEYS,
151     DUMPTYPE_SECURITY_DRIVER,
152     DUMPTYPE_EXCLUDE,
153     DUMPTYPE_INCLUDE,
154     DUMPTYPE_PRIORITY,
155     DUMPTYPE_DUMPCYCLE,
156     DUMPTYPE_MAXDUMPS,
157     DUMPTYPE_MAXPROMOTEDAY,
158     DUMPTYPE_BUMPPERCENT,
159     DUMPTYPE_BUMPSIZE,
160     DUMPTYPE_BUMPDAYS,
161     DUMPTYPE_BUMPMULT,
162     DUMPTYPE_START_T,
163     DUMPTYPE_STRATEGY,
164     DUMPTYPE_ESTIMATE,
165     DUMPTYPE_COMPRESS,
166     DUMPTYPE_ENCRYPT,
167     DUMPTYPE_SRV_DECRYPT_OPT,
168     DUMPTYPE_CLNT_DECRYPT_OPT,
169     DUMPTYPE_COMPRATE,
170     DUMPTYPE_TAPE_SPLITSIZE,
171     DUMPTYPE_FALLBACK_SPLITSIZE,
172     DUMPTYPE_SPLIT_DISKBUFFER,
173     DUMPTYPE_RECORD,
174     DUMPTYPE_SKIP_INCR,
175     DUMPTYPE_SKIP_FULL,
176     DUMPTYPE_HOLDINGDISK,
177     DUMPTYPE_KENCRYPT,
178     DUMPTYPE_IGNORE,
179     DUMPTYPE_INDEX,
180     DUMPTYPE_DUMPTYPE
181 } dumptype_ee;
182
183 typedef struct dumptype_s {
184     struct dumptype_s *next;
185     int seen;
186     char *name;
187
188     val_t value[DUMPTYPE_DUMPTYPE];
189 } dumptype_t;
190
191 #define dumptype_get_name(dumptype) dumptype->name
192 #define dumptype_get_seen(dumptype) dumptype->seen
193 #define dumptype_get_comment(dumptype)            get_conftype_string   (&dumptype->value[DUMPTYPE_COMMENT])
194 #define dumptype_get_program(dumptype)            get_conftype_string   (&dumptype->value[DUMPTYPE_PROGRAM])
195 #define dumptype_get_srvcompprog(dumptype)        get_conftype_string   (&dumptype->value[DUMPTYPE_SRVCOMPPROG])
196 #define dumptype_get_clntcompprog(dumptype)       get_conftype_string   (&dumptype->value[DUMPTYPE_CLNTCOMPPROG])
197 #define dumptype_get_srv_encrypt(dumptype)        get_conftype_string   (&dumptype->value[DUMPTYPE_SRV_ENCRYPT])
198 #define dumptype_get_clnt_encrypt(dumptype)       get_conftype_string   (&dumptype->value[DUMPTYPE_CLNT_ENCRYPT])
199 #define dumptype_get_amandad_path(dumptype)       get_conftype_string   (&dumptype->value[DUMPTYPE_AMANDAD_PATH])
200 #define dumptype_get_client_username(dumptype)    get_conftype_string   (&dumptype->value[DUMPTYPE_CLIENT_USERNAME])
201 #define dumptype_get_ssh_keys(dumptype)           get_conftype_string   (&dumptype->value[DUMPTYPE_SSH_KEYS])
202 #define dumptype_get_security_driver(dumptype)    get_conftype_string   (&dumptype->value[DUMPTYPE_SECURITY_DRIVER])
203 #define dumptype_get_exclude(dumptype)            get_conftype_exinclude(&dumptype->value[DUMPTYPE_EXCLUDE])
204 #define dumptype_get_include(dumptype)            get_conftype_exinclude(&dumptype->value[DUMPTYPE_INCLUDE])
205 #define dumptype_get_priority(dumptype)           get_conftype_priority (&dumptype->value[DUMPTYPE_PRIORITY])
206 #define dumptype_get_dumpcycle(dumptype)          get_conftype_int      (&dumptype->value[DUMPTYPE_DUMPCYCLE])
207 #define dumptype_get_maxcycle(dumptype)           get_conftype_int      (&dumptype->value[DUMPTYPE_MAXCYCLE])
208 #define dumptype_get_frequency(dumptype)          get_conftype_int      (&dumptype->value[DUMPTYPE_FREQUENCY])
209 #define dumptype_get_maxdumps(dumptype)           get_conftype_int      (&dumptype->value[DUMPTYPE_MAXDUMPS])
210 #define dumptype_get_maxpromoteday(dumptype)      get_conftype_int      (&dumptype->value[DUMPTYPE_MAXPROMOTEDAY])
211 #define dumptype_get_bumppercent(dumptype)        get_conftype_int      (&dumptype->value[DUMPTYPE_BUMPPERCENT])
212 #define dumptype_get_bumpsize(dumptype)           get_conftype_am64     (&dumptype->value[DUMPTYPE_BUMPSIZE])
213 #define dumptype_get_bumpdays(dumptype)           get_conftype_int      (&dumptype->value[DUMPTYPE_BUMPDAYS])
214 #define dumptype_get_bumpmult(dumptype)           get_conftype_real     (&dumptype->value[DUMPTYPE_BUMPMULT])
215 #define dumptype_get_start_t(dumptype)            get_conftype_time     (&dumptype->value[DUMPTYPE_START_T])
216 #define dumptype_get_strategy(dumptype)           get_conftype_strategy (&dumptype->value[DUMPTYPE_STRATEGY])
217 #define dumptype_get_estimate(dumptype)           get_conftype_estimate (&dumptype->value[DUMPTYPE_ESTIMATE])
218 #define dumptype_get_compress(dumptype)           get_conftype_compress (&dumptype->value[DUMPTYPE_COMPRESS])
219 #define dumptype_get_encrypt(dumptype)            get_conftype_encrypt  (&dumptype->value[DUMPTYPE_ENCRYPT])
220 #define dumptype_get_srv_decrypt_opt(dumptype)    get_conftype_string   (&dumptype->value[DUMPTYPE_SRV_DECRYPT_OPT])
221 #define dumptype_get_clnt_decrypt_opt(dumptype)   get_conftype_string   (&dumptype->value[DUMPTYPE_CLNT_DECRYPT_OPT])
222 #define dumptype_get_comprate(dumptype)                                   dumptype->value[DUMPTYPE_COMPRATE].v.rate
223 #define dumptype_get_tape_splitsize(dumptype)     get_conftype_am64     (&dumptype->value[DUMPTYPE_TAPE_SPLITSIZE])
224 #define dumptype_get_fallback_splitsize(dumptype) get_conftype_am64     (&dumptype->value[DUMPTYPE_FALLBACK_SPLITSIZE])
225 #define dumptype_get_split_diskbuffer(dumptype)   get_conftype_string   (&dumptype->value[DUMPTYPE_SPLIT_DISKBUFFER])
226 #define dumptype_get_record(dumptype)             get_conftype_bool     (&dumptype->value[DUMPTYPE_RECORD])
227 #define dumptype_get_skip_incr(dumptype)          get_conftype_bool     (&dumptype->value[DUMPTYPE_SKIP_INCR])
228 #define dumptype_get_skip_full(dumptype)          get_conftype_bool     (&dumptype->value[DUMPTYPE_SKIP_FULL])
229 #define dumptype_get_to_holdingdisk(dumptype)     get_conftype_hold     (&dumptype->value[DUMPTYPE_HOLDINGDISK])
230 #define dumptype_get_kencrypt(dumptype)           get_conftype_bool     (&dumptype->value[DUMPTYPE_KENCRYPT])
231 #define dumptype_get_ignore(dumptype)             get_conftype_bool     (&dumptype->value[DUMPTYPE_IGNORE])
232 #define dumptype_get_index(dumptype)              get_conftype_bool     (&dumptype->value[DUMPTYPE_INDEX])
233
234 /* A network interface */
235 typedef enum interface_e  {
236     INTER_COMMENT,
237     INTER_MAXUSAGE,
238     INTER_INTER
239 } interface_ee;
240
241
242 typedef struct interface_s {
243     struct interface_s *next;
244     int seen;
245     char *name;
246
247     val_t value[INTER_INTER];
248
249     unsigned long curusage;             /* current usage */
250 } interface_t;
251
252 #define interface_get_name(interface) interface->name
253 #define interface_get_seen(interface) interface->seen
254 #define interface_get_comment(interface)  get_conftype_string(&interface->value[INTER_COMMENT])
255 #define interface_get_maxusage(interface) get_conftype_int   (&interface->value[INTER_MAXUSAGE])
256
257 /* A holding disk */
258 typedef enum holdingdisk_e  {
259     HOLDING_COMMENT,
260     HOLDING_DISKDIR,
261     HOLDING_DISKSIZE,
262     HOLDING_CHUNKSIZE,
263     HOLDING_HOLDING
264 } holdingdisk_ee;
265
266 typedef struct holdingdisk_s {
267     struct holdingdisk_s *next;
268     int seen;
269     char *name;
270
271     val_t value[HOLDING_HOLDING];
272
273     void *up;                   /* generic user pointer */
274     off_t disksize;
275 } holdingdisk_t;
276
277 #define holdingdisk_get_name(holdingdisk) (holdingdisk)->name
278 #define holdingdisk_get_seen(holdingdisk) (holdingdisk)->seen
279 #define holdingdisk_get_comment(holdingdisk)   get_conftype_string(&(holdingdisk)->value[HOLDING_COMMENT])
280 #define holdingdisk_get_diskdir(holdingdisk)   get_conftype_string(&(holdingdisk)->value[HOLDING_DISKDIR])
281 #define holdingdisk_get_disksize(holdingdisk)  get_conftype_am64  (&(holdingdisk)->value[HOLDING_DISKSIZE])
282 #define holdingdisk_get_chunksize(holdingdisk) get_conftype_am64  (&(holdingdisk)->value[HOLDING_CHUNKSIZE])
283
284 /* for each column we define some values on how to
285  * format this column element
286  */
287 typedef struct {
288     char *Name;         /* column name */
289     int PrefixSpace;    /* the blank space to print before this
290                          * column. It is used to get the space
291                          * between the colums
292                          */
293     int Width;          /* the width of the column itself */
294     int Precision;      /* the precision if its a float */
295     int MaxWidth;       /* if set, Width will be recalculated
296                          * to the space needed */
297     char *Format;       /* the printf format string for this
298                          * column element
299                          */
300     char *Title;        /* the title to use for this column */
301 } ColumnInfo;
302
303 /* this corresponds to the normal output of amanda, but may
304  * be adapted to any spacing as you like.
305  */
306 extern ColumnInfo ColumnData[];
307
308 extern char *config_name;
309 extern char *config_dir;
310
311 extern holdingdisk_t *holdingdisks;
312 extern int num_holdingdisks;
313
314 void parse_server_conf(int parse_argc, char **parse_argv, int *new_argc,
315                        char ***new_argv);
316 void report_bad_conf_arg(void);
317 void free_server_config(void);
318
319 int read_conffile(char *filename);
320 int getconf_seen(confparm_t parameter);
321 int getconf_boolean(confparm_t parameter);
322 int getconf_int(confparm_t parameter);
323 long getconf_long(confparm_t parameter);
324 ssize_t getconf_size(confparm_t parameter);
325 time_t getconf_time(confparm_t parameter);
326 off_t getconf_am64(confparm_t parameter);
327 double getconf_real(confparm_t parameter);
328 char *getconf_str(confparm_t parameter);
329 int getconf_taperalgo(confparm_t parameter);
330 char *getconf_byname(char *confname);
331 dumptype_t *lookup_dumptype(char *identifier);
332 dumptype_t *read_dumptype(char *name, FILE *from, char *fname, int *linenum);
333 tapetype_t *lookup_tapetype(char *identifier);
334 interface_t *lookup_interface(char *identifier);
335 holdingdisk_t *getconf_holdingdisks(void);
336 long int getconf_unit_divisor(void);
337 void dump_configuration(char *filename);
338 int ColumnDataCount(void);
339 int StringToColumn(char *s);
340 char LastChar(char *s);
341 int SetColumDataFromString(ColumnInfo* ci, char *s, char **errstr);
342
343 /* this is in securityconf.h */
344 char *generic_get_security_conf(char *, void *);
345 #endif /* ! CONFFILE_H */