2 * Director specific configuration and defines
9 Copyright (C) 2000-2006 Kern Sibbald
11 This program is free software; you can redistribute it and/or
12 modify it under the terms of the GNU General Public License
13 version 2 as amended with additional clauses defined in the
14 file LICENSE in the main source directory.
16 This program is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 the file LICENSE for additional details.
23 /* NOTE: #includes at the end of this file */
26 * Resource codes -- they must be sequential for indexing
43 R_LAST = R_DEVICE /* keep this updated */
48 * Some resource attributes
59 /* Used for certain KeyWord tables */
65 /* Job Level keyword structure */
67 const char *level_name; /* level keyword */
68 int level; /* level */
69 int job_type; /* JobType permitting this level */
72 /* Job Type keyword structure */
74 const char *type_name;
78 /* Definition of the contents of each Resource */
79 /* Needed for forward references */
96 char *password; /* Password for UA access */
97 char *query_file; /* SQL query file */
98 char *working_directory; /* WorkingDirectory */
99 const char *scripts_directory; /* ScriptsDirectory */
100 char *pid_directory; /* PidDirectory */
101 char *subsys_directory; /* SubsysDirectory */
102 MSGS *messages; /* Daemon message handler */
103 uint32_t MaxConcurrentJobs; /* Max concurrent jobs for whole director */
104 utime_t FDConnectTimeout; /* timeout for connect in seconds */
105 utime_t SDConnectTimeout; /* timeout in seconds */
106 char *tls_ca_certfile; /* TLS CA Certificate File */
107 char *tls_ca_certdir; /* TLS CA Certificate Directory */
108 char *tls_certfile; /* TLS Server Certificate File */
109 char *tls_keyfile; /* TLS Server Key File */
110 char *tls_dhfile; /* TLS Diffie-Hellman Parameters */
111 alist *tls_allowed_cns; /* TLS Allowed Clients */
112 TLS_CONTEXT *tls_ctx; /* Shared TLS Context */
113 bool tls_enable; /* Enable TLS */
114 bool tls_require; /* Require TLS */
115 bool tls_verify_peer; /* TLS Verify Client Certificate */
120 * This resource is a bit different from the other resources
121 * because it is not defined in the Director
122 * by DEVICE { ... }, but rather by a "reference" such as
123 * DEVICE = xxx; Then when the Director connects to the
124 * SD, it requests the information about the device.
130 bool found; /* found with SD */
131 int num_writers; /* number of writers */
132 int max_writers; /* = 1 for files */
133 int reserved; /* number of reserves */
134 int num_drives; /* for autochanger */
135 bool autochanger; /* set if device is autochanger */
136 bool open; /* drive open */
137 bool append; /* in append mode */
138 bool read; /* in read mode */
139 bool labeled; /* Volume name valid */
140 bool offline; /* not available */
141 bool autoselect; /* can be selected via autochanger */
143 char ChangerName[MAX_NAME_LENGTH];
144 char VolumeName[MAX_NAME_LENGTH];
145 char MediaType[MAX_NAME_LENGTH];
149 * Console ACL positions
161 Num_ACL /* keep last */
170 char *password; /* UA server password */
171 alist *ACL_lists[Num_ACL]; /* pointers to ACLs */
172 char *tls_ca_certfile; /* TLS CA Certificate File */
173 char *tls_ca_certdir; /* TLS CA Certificate Directory */
174 char *tls_certfile; /* TLS Server Certificate File */
175 char *tls_keyfile; /* TLS Server Key File */
176 char *tls_dhfile; /* TLS Diffie-Hellman Parameters */
177 alist *tls_allowed_cns; /* TLS Allowed Clients */
178 TLS_CONTEXT *tls_ctx; /* Shared TLS Context */
179 bool tls_enable; /* Enable TLS */
180 bool tls_require; /* Require TLS */
181 bool tls_verify_peer; /* TLS Verify Client Certificate */
193 int db_port; /* Port */
194 char *db_address; /* host name for remote access */
195 char *db_socket; /* Socket for local access */
199 int mult_db_connections; /* set if multiple connections wanted */
211 int FDport; /* Where File daemon listens */
212 utime_t FileRetention; /* file retention period in seconds */
213 utime_t JobRetention; /* job retention period in seconds */
216 CAT *catalog; /* Catalog resource */
217 uint32_t MaxConcurrentJobs; /* Maximume concurrent jobs */
218 uint32_t NumConcurrentJobs; /* number of concurrent jobs running */
219 char *tls_ca_certfile; /* TLS CA Certificate File */
220 char *tls_ca_certdir; /* TLS CA Certificate Directory */
221 char *tls_certfile; /* TLS Client Certificate File */
222 char *tls_keyfile; /* TLS Client Key File */
223 TLS_CONTEXT *tls_ctx; /* Shared TLS Context */
224 bool tls_enable; /* Enable TLS */
225 bool tls_require; /* Require TLS */
226 bool AutoPrune; /* Do automatic pruning? */
237 int SDport; /* port where Directors connect */
238 int SDDport; /* data port for File daemon */
242 alist *device; /* Alternate devices for this Storage */
243 uint32_t MaxConcurrentJobs; /* Maximume concurrent jobs */
244 uint32_t NumConcurrentJobs; /* number of concurrent jobs running */
245 char *tls_ca_certfile; /* TLS CA Certificate File */
246 char *tls_ca_certdir; /* TLS CA Certificate Directory */
247 char *tls_certfile; /* TLS Client Certificate File */
248 char *tls_keyfile; /* TLS Client Key File */
249 TLS_CONTEXT *tls_ctx; /* Shared TLS Context */
250 bool tls_enable; /* Enable TLS */
251 bool tls_require; /* Require TLS */
252 bool enabled; /* Set if device is enabled */
253 bool autochanger; /* set if autochanger */
254 int64_t StorageId; /* Set from Storage DB record */
255 int drives; /* number of drives in autochanger */
258 char *dev_name() const;
262 inline char *STORE::dev_name() const
264 DEVICE *dev = (DEVICE *)device->first();
265 return dev->hdr.name;
268 inline char *STORE::name() const { return hdr.name; }
278 int JobType; /* job type (backup, verify, restore */
279 int JobLevel; /* default backup/verify level */
280 int Priority; /* Job priority */
281 int RestoreJobId; /* What -- JobId to restore */
282 char *RestoreWhere; /* Where on disk to restore -- directory */
283 char *RestoreBootstrap; /* Bootstrap file */
284 alist *RunScripts; /* Run {client} program {after|before} Job */
286 char *WriteBootstrap; /* Where to write bootstrap Job updates */
287 char *WriteVerifyList; /* List of changed files */
289 int replace; /* How (overwrite, ..) */
290 utime_t MaxRunTime; /* max run time in seconds */
291 utime_t MaxWaitTime; /* max blocking time in seconds */
292 utime_t FullMaxWaitTime; /* Max Full job wait time */
293 utime_t DiffMaxWaitTime; /* Max Differential job wait time */
294 utime_t IncMaxWaitTime; /* Max Incremental job wait time */
295 utime_t MaxStartDelay; /* max start delay in seconds */
296 utime_t RescheduleInterval; /* Reschedule interval */
297 utime_t JobRetention; /* job retention period in seconds */
298 uint32_t MaxConcurrentJobs; /* Maximum concurrent jobs */
299 int RescheduleTimes; /* Number of times to reschedule job */
300 bool RescheduleOnError; /* Set to reschedule on error */
301 bool PrefixLinks; /* prefix soft links with Where path */
302 bool PruneJobs; /* Force pruning of Jobs */
303 bool PruneFiles; /* Force pruning of Files */
304 bool PruneVolumes; /* Force pruning of Volumes */
305 bool SpoolAttributes; /* Set to spool attributes in SD */
306 bool spool_data; /* Set to spool data in SD */
307 bool rerun_failed_levels; /* Upgrade to rerun failed levels */
308 bool PreferMountedVolumes; /* Prefer vols mounted rather than new one */
309 bool write_part_after_job; /* Set to write part after job in SD */
310 bool enabled; /* Set if job enabled */
312 MSGS *messages; /* How and where to send messages */
313 SCHED *schedule; /* When -- Automatic schedule */
314 CLIENT *client; /* Who to backup */
315 FILESET *fileset; /* What to backup -- Fileset */
316 alist *storage; /* Where is device -- list of Storage to be used */
317 POOL *pool; /* Where is media -- Media Pool */
318 POOL *full_pool; /* Pool for Full backups */
319 POOL *inc_pool; /* Pool for Incremental backups */
320 POOL *diff_pool; /* Pool for Differental backups */
321 POOL *next_pool; /* Next Pool for Migration */
322 char *selection_pattern;
325 JOB *verify_job; /* Job name to verify */
327 JOB *jobdefs; /* Job defaults */
328 alist *run_cmds; /* Run commands */
329 uint32_t NumConcurrentJobs; /* number of concurrent jobs running */
335 /* File options structure */
337 char opts[MAX_FOPTS]; /* options string */
338 alist regex; /* regex string(s) */
339 alist regexdir; /* regex string(s) for directories */
340 alist regexfile; /* regex string(s) for files */
341 alist wild; /* wild card strings */
342 alist wilddir; /* wild card strings for directories */
343 alist wildfile; /* wild card strings for files */
344 alist base; /* list of base names */
345 alist fstype; /* file system type limitation */
346 char *reader; /* reader program */
347 char *writer; /* writer program */
351 /* This is either an include item or an exclude item */
353 FOPTS *current_opts; /* points to current options structure */
354 FOPTS **opts_list; /* options list */
355 int num_opts; /* number of options items */
356 alist name_list; /* filename list -- holds char * */
367 bool new_include; /* Set if new include used */
368 INCEXE **include_items; /* array of incexe structures */
369 int num_includes; /* number in array */
370 INCEXE **exclude_items;
372 bool have_MD5; /* set if MD5 initialized */
373 struct MD5Context md5c; /* MD5 of include/exclude */
374 char MD5[30]; /* base 64 representation of MD5 */
375 bool ignore_fs_changes; /* Don't force Full if FS changed */
376 bool enable_vss; /* Enable Volume Shadow Copy */
398 int32_t MinValue; /* Minimum value */
399 int32_t MaxValue; /* Maximum value */
400 int32_t CurrentValue; /* Current value */
401 COUNTER *WrapCounter; /* Wrap counter name */
402 CAT *Catalog; /* Where to store */
403 bool created; /* Created in DB */
414 char *pool_type; /* Pool type */
415 char *label_format; /* Label format string */
416 char *cleaning_prefix; /* Cleaning label prefix */
417 int32_t LabelType; /* Bacula/ANSI/IBM label type */
418 uint32_t max_volumes; /* max number of volumes */
419 utime_t VolRetention; /* volume retention period in seconds */
420 utime_t VolUseDuration; /* duration volume can be used */
421 uint32_t MaxVolJobs; /* Maximum jobs on the Volume */
422 uint32_t MaxVolFiles; /* Maximum files on the Volume */
423 uint64_t MaxVolBytes; /* Maximum bytes on the Volume */
424 utime_t MigrationTime; /* Time to migrate to next pool */
425 uint32_t MigrationHighBytes; /* When migration starts */
426 uint32_t MigrationLowBytes; /* When migration stops */
427 POOL *NextPool; /* Next pool for migration */
428 alist *storage; /* Where is device -- list of Storage to be used */
429 bool use_catalog; /* maintain catalog for media */
430 bool catalog_files; /* maintain file entries in catalog */
431 bool use_volume_once; /* write on volume only once */
432 bool purge_oldest_volume; /* purge oldest volume */
433 bool recycle_oldest_volume; /* attempt to recycle oldest volume */
434 bool recycle_current_volume; /* attempt recycle of current volume */
435 bool AutoPrune; /* default for pool auto prune */
436 bool Recycle; /* default for media recycle yes/no */
442 /* Define the Union of all the above
443 * resource structure definitions.
459 RUNSCRIPT res_runscript;
464 /* Run structure contained in Schedule Resource */
467 RUN *next; /* points to next run record */
468 int level; /* level override */
469 int Priority; /* priority override */
471 bool spool_data; /* Data spooling override */
472 bool spool_data_set; /* Data spooling override given */
473 bool write_part_after_job; /* Write part after job override */
474 bool write_part_after_job_set; /* Write part after job override given */
476 POOL *pool; /* Pool override */
477 POOL *full_pool; /* Pool override */
478 POOL *inc_pool; /* Pool override */
479 POOL *diff_pool; /* Pool override */
480 STORE *storage; /* Storage override */
481 MSGS *msgs; /* Messages override */
484 int minute; /* minute to run job */
485 time_t last_run; /* last time run */
486 time_t next_run; /* next time to run */
487 char hour[nbytes_for_bits(24)]; /* bit set for each hour */
488 char mday[nbytes_for_bits(31)]; /* bit set for each day of month */
489 char month[nbytes_for_bits(12)]; /* bit set for each month */
490 char wday[nbytes_for_bits(7)]; /* bit set for each day of the week */
491 char wom[nbytes_for_bits(5)]; /* week of month */
492 char woy[nbytes_for_bits(54)]; /* week of year */