2 * Amanda, The Advanced Maryland Automatic Network Disk Archiver
3 * Copyright (c) 1991-2000 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 * Author: James da Silva, Systems Design and Analysis Group
24 * Computer Science Department
25 * University of Maryland at College Park
28 * $Id: conffile.h,v 1.72 2006/07/26 15:17:37 martinea Exp $
30 * interface for config file reading code
38 #define CONFFILE_NAME "amanda.conf"
78 CNF_AMRECOVER_CHECK_LABEL,
79 CNF_AMRECOVER_CHANGER,
89 typedef enum tapetype_e {
100 typedef struct tapetype_s {
101 struct tapetype_s *next;
105 val_t value[TAPETYPE_TAPETYPE];
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])
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 ...) */
129 /* Estimate strategies */
130 #define ES_CLIENT 0 /* client estimate */
131 #define ES_SERVER 1 /* server estimate */
132 #define ES_CALCSIZE 2 /* calcsize estimate */
135 #define ALGO_FIRSTFIT 1
136 #define ALGO_LARGEST 2
137 #define ALGO_LARGESTFIT 3
138 #define ALGO_SMALLEST 4
141 typedef enum dumptype_e {
144 DUMPTYPE_SRVCOMPPROG,
145 DUMPTYPE_CLNTCOMPPROG,
146 DUMPTYPE_SRV_ENCRYPT,
147 DUMPTYPE_CLNT_ENCRYPT,
148 DUMPTYPE_AMANDAD_PATH,
149 DUMPTYPE_CLIENT_USERNAME,
151 DUMPTYPE_SECURITY_DRIVER,
157 DUMPTYPE_MAXPROMOTEDAY,
158 DUMPTYPE_BUMPPERCENT,
167 DUMPTYPE_SRV_DECRYPT_OPT,
168 DUMPTYPE_CLNT_DECRYPT_OPT,
170 DUMPTYPE_TAPE_SPLITSIZE,
171 DUMPTYPE_FALLBACK_SPLITSIZE,
172 DUMPTYPE_SPLIT_DISKBUFFER,
176 DUMPTYPE_HOLDINGDISK,
183 typedef struct dumptype_s {
184 struct dumptype_s *next;
188 val_t value[DUMPTYPE_DUMPTYPE];
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])
234 /* A network interface */
235 typedef enum interface_e {
242 typedef struct interface_s {
243 struct interface_s *next;
247 val_t value[INTER_INTER];
249 unsigned long curusage; /* current usage */
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])
258 typedef enum holdingdisk_e {
266 typedef struct holdingdisk_s {
267 struct holdingdisk_s *next;
271 val_t value[HOLDING_HOLDING];
273 void *up; /* generic user pointer */
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])
284 /* for each column we define some values on how to
285 * format this column element
288 char *Name; /* column name */
289 int PrefixSpace; /* the blank space to print before this
290 * column. It is used to get the space
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
300 char *Title; /* the title to use for this column */
303 /* this corresponds to the normal output of amanda, but may
304 * be adapted to any spacing as you like.
306 extern ColumnInfo ColumnData[];
308 extern char *config_name;
309 extern char *config_dir;
311 extern holdingdisk_t *holdingdisks;
312 extern int num_holdingdisks;
314 void parse_server_conf(int parse_argc, char **parse_argv, int *new_argc,
316 void report_bad_conf_arg(void);
317 void free_server_config(void);
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);
343 /* this is in securityconf.h */
344 char *generic_get_security_conf(char *, void *);
345 #endif /* ! CONFFILE_H */