2 Bacula® - The Network Backup Solution
4 Copyright (C) 2000-2007 Free Software Foundation Europe e.V.
6 The main author of Bacula is Kern Sibbald, with contributions from
7 many others, a complete list can be found in the file AUTHORS.
8 This program is Free Software; you can redistribute it and/or
9 modify it under the terms of version two of the GNU General Public
10 License as published by the Free Software Foundation plus additions
11 that are listed in the file LICENSE.
13 This program is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
23 Bacula® is a registered trademark of John Walker.
24 The licensor of Bacula is the Free Software Foundation Europe
25 (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
26 Switzerland, email:ftf@fsfeurope.org.
29 * Director specific configuration and defines
31 * Kern Sibbald, Feb MM
36 /* NOTE: #includes at the end of this file */
39 * Resource codes -- they must be sequential for indexing
56 R_LAST = R_DEVICE /* keep this updated */
61 * Some resource attributes
72 /* Used for certain KeyWord tables */
78 /* Job Level keyword structure */
80 const char *level_name; /* level keyword */
81 int level; /* level */
82 int job_type; /* JobType permitting this level */
85 /* Job Type keyword structure */
87 const char *type_name;
91 /* Definition of the contents of each Resource */
92 /* Needed for forward references */
109 char *password; /* Password for UA access */
110 char *query_file; /* SQL query file */
111 char *working_directory; /* WorkingDirectory */
112 const char *scripts_directory; /* ScriptsDirectory */
113 char *pid_directory; /* PidDirectory */
114 char *subsys_directory; /* SubsysDirectory */
115 MSGS *messages; /* Daemon message handler */
116 uint32_t MaxConcurrentJobs; /* Max concurrent jobs for whole director */
117 utime_t FDConnectTimeout; /* timeout for connect in seconds */
118 utime_t SDConnectTimeout; /* timeout in seconds */
119 char *tls_ca_certfile; /* TLS CA Certificate File */
120 char *tls_ca_certdir; /* TLS CA Certificate Directory */
121 char *tls_certfile; /* TLS Server Certificate File */
122 char *tls_keyfile; /* TLS Server Key File */
123 char *tls_dhfile; /* TLS Diffie-Hellman Parameters */
124 alist *tls_allowed_cns; /* TLS Allowed Clients */
125 TLS_CONTEXT *tls_ctx; /* Shared TLS Context */
126 bool tls_enable; /* Enable TLS */
127 bool tls_require; /* Require TLS */
128 bool tls_verify_peer; /* TLS Verify Client Certificate */
134 inline char *DIRRES::name() const { return hdr.name; }
138 * This resource is a bit different from the other resources
139 * because it is not defined in the Director
140 * by DEVICE { ... }, but rather by a "reference" such as
141 * DEVICE = xxx; Then when the Director connects to the
142 * SD, it requests the information about the device.
148 bool found; /* found with SD */
149 int num_writers; /* number of writers */
150 int max_writers; /* = 1 for files */
151 int reserved; /* number of reserves */
152 int num_drives; /* for autochanger */
153 bool autochanger; /* set if device is autochanger */
154 bool open; /* drive open */
155 bool append; /* in append mode */
156 bool read; /* in read mode */
157 bool labeled; /* Volume name valid */
158 bool offline; /* not available */
159 bool autoselect; /* can be selected via autochanger */
161 char ChangerName[MAX_NAME_LENGTH];
162 char VolumeName[MAX_NAME_LENGTH];
163 char MediaType[MAX_NAME_LENGTH];
169 inline char *DEVICE::name() const { return hdr.name; }
172 * Console ACL positions
185 Num_ACL /* keep last */
194 char *password; /* UA server password */
195 alist *ACL_lists[Num_ACL]; /* pointers to ACLs */
196 char *tls_ca_certfile; /* TLS CA Certificate File */
197 char *tls_ca_certdir; /* TLS CA Certificate Directory */
198 char *tls_certfile; /* TLS Server Certificate File */
199 char *tls_keyfile; /* TLS Server Key File */
200 char *tls_dhfile; /* TLS Diffie-Hellman Parameters */
201 alist *tls_allowed_cns; /* TLS Allowed Clients */
202 TLS_CONTEXT *tls_ctx; /* Shared TLS Context */
203 bool tls_enable; /* Enable TLS */
204 bool tls_require; /* Require TLS */
205 bool tls_verify_peer; /* TLS Verify Client Certificate */
211 inline char *CONRES::name() const { return hdr.name; }
222 int db_port; /* Port */
223 char *db_address; /* host name for remote access */
224 char *db_socket; /* Socket for local access */
228 int mult_db_connections; /* set if multiple connections wanted */
234 inline char *CAT::name() const { return hdr.name; }
245 int FDport; /* Where File daemon listens */
246 utime_t FileRetention; /* file retention period in seconds */
247 utime_t JobRetention; /* job retention period in seconds */
250 CAT *catalog; /* Catalog resource */
251 uint32_t MaxConcurrentJobs; /* Maximume concurrent jobs */
252 uint32_t NumConcurrentJobs; /* number of concurrent jobs running */
253 char *tls_ca_certfile; /* TLS CA Certificate File */
254 char *tls_ca_certdir; /* TLS CA Certificate Directory */
255 char *tls_certfile; /* TLS Client Certificate File */
256 char *tls_keyfile; /* TLS Client Key File */
257 alist *tls_allowed_cns; /* TLS Allowed Clients */
258 TLS_CONTEXT *tls_ctx; /* Shared TLS Context */
259 bool tls_enable; /* Enable TLS */
260 bool tls_require; /* Require TLS */
261 bool AutoPrune; /* Do automatic pruning? */
267 inline char *CLIENT::name() const { return hdr.name; }
278 int SDport; /* port where Directors connect */
279 int SDDport; /* data port for File daemon */
283 alist *device; /* Alternate devices for this Storage */
284 uint32_t MaxConcurrentJobs; /* Maximume concurrent jobs */
285 uint32_t NumConcurrentJobs; /* number of concurrent jobs running */
286 char *tls_ca_certfile; /* TLS CA Certificate File */
287 char *tls_ca_certdir; /* TLS CA Certificate Directory */
288 char *tls_certfile; /* TLS Client Certificate File */
289 char *tls_keyfile; /* TLS Client Key File */
290 TLS_CONTEXT *tls_ctx; /* Shared TLS Context */
291 bool tls_enable; /* Enable TLS */
292 bool tls_require; /* Require TLS */
293 bool enabled; /* Set if device is enabled */
294 bool autochanger; /* set if autochanger */
295 int64_t StorageId; /* Set from Storage DB record */
296 int drives; /* number of drives in autochanger */
299 char *dev_name() const;
303 inline char *STORE::dev_name() const
305 DEVICE *dev = (DEVICE *)device->first();
306 return dev->hdr.name;
309 inline char *STORE::name() const { return hdr.name; }
312 * This is a sort of "unified" store that has both the
313 * storage pointer and the text of where the pointer was
319 POOLMEM *store_source;
322 USTORE() { store = NULL; store_source = get_pool_memory(PM_MESSAGE);
323 *store_source = 0; };
324 ~USTORE() { destroy(); }
325 void set_source(const char *where);
329 inline void USTORE::destroy()
332 free_pool_memory(store_source);
338 inline void USTORE::set_source(const char *where)
341 store_source = get_pool_memory(PM_MESSAGE);
343 pm_strcpy(store_source, where);
354 int JobType; /* job type (backup, verify, restore */
355 int JobLevel; /* default backup/verify level */
356 int Priority; /* Job priority */
357 int RestoreJobId; /* What -- JobId to restore */
358 char *RestoreWhere; /* Where on disk to restore -- directory */
359 char *RestoreBootstrap; /* Bootstrap file */
360 alist *RunScripts; /* Run {client} program {after|before} Job */
362 char *WriteBootstrap; /* Where to write bootstrap Job updates */
363 char *WriteVerifyList; /* List of changed files */
365 int replace; /* How (overwrite, ..) */
366 utime_t MaxRunTime; /* max run time in seconds */
367 utime_t MaxWaitTime; /* max blocking time in seconds */
368 utime_t FullMaxWaitTime; /* Max Full job wait time */
369 utime_t DiffMaxWaitTime; /* Max Differential job wait time */
370 utime_t IncMaxWaitTime; /* Max Incremental job wait time */
371 utime_t MaxStartDelay; /* max start delay in seconds */
372 utime_t RescheduleInterval; /* Reschedule interval */
373 utime_t JobRetention; /* job retention period in seconds */
374 uint32_t MaxConcurrentJobs; /* Maximum concurrent jobs */
375 int RescheduleTimes; /* Number of times to reschedule job */
376 bool RescheduleOnError; /* Set to reschedule on error */
377 bool PrefixLinks; /* prefix soft links with Where path */
378 bool PruneJobs; /* Force pruning of Jobs */
379 bool PruneFiles; /* Force pruning of Files */
380 bool PruneVolumes; /* Force pruning of Volumes */
381 bool SpoolAttributes; /* Set to spool attributes in SD */
382 bool spool_data; /* Set to spool data in SD */
383 bool rerun_failed_levels; /* Upgrade to rerun failed levels */
384 bool PreferMountedVolumes; /* Prefer vols mounted rather than new one */
385 bool write_part_after_job; /* Set to write part after job in SD */
386 bool enabled; /* Set if job enabled */
388 MSGS *messages; /* How and where to send messages */
389 SCHED *schedule; /* When -- Automatic schedule */
390 CLIENT *client; /* Who to backup */
391 FILESET *fileset; /* What to backup -- Fileset */
392 alist *storage; /* Where is device -- list of Storage to be used */
393 POOL *pool; /* Where is media -- Media Pool */
394 POOL *full_pool; /* Pool for Full backups */
395 POOL *inc_pool; /* Pool for Incremental backups */
396 POOL *diff_pool; /* Pool for Differental backups */
397 char *selection_pattern;
400 JOB *verify_job; /* Job name to verify */
402 JOB *jobdefs; /* Job defaults */
403 alist *run_cmds; /* Run commands */
404 uint32_t NumConcurrentJobs; /* number of concurrent jobs running */
410 inline char *JOB::name() const { return hdr.name; }
415 /* File options structure */
417 char opts[MAX_FOPTS]; /* options string */
418 alist regex; /* regex string(s) */
419 alist regexdir; /* regex string(s) for directories */
420 alist regexfile; /* regex string(s) for files */
421 alist wild; /* wild card strings */
422 alist wilddir; /* wild card strings for directories */
423 alist wildfile; /* wild card strings for files */
424 alist wildbase; /* wild card strings for files without '/' */
425 alist base; /* list of base names */
426 alist fstype; /* file system type limitation */
427 alist drivetype; /* drive type limitation */
428 char *reader; /* reader program */
429 char *writer; /* writer program */
433 /* This is either an include item or an exclude item */
435 FOPTS *current_opts; /* points to current options structure */
436 FOPTS **opts_list; /* options list */
437 int num_opts; /* number of options items */
438 alist name_list; /* filename list -- holds char * */
449 bool new_include; /* Set if new include used */
450 INCEXE **include_items; /* array of incexe structures */
451 int num_includes; /* number in array */
452 INCEXE **exclude_items;
454 bool have_MD5; /* set if MD5 initialized */
455 struct MD5Context md5c; /* MD5 of include/exclude */
456 char MD5[30]; /* base 64 representation of MD5 */
457 bool ignore_fs_changes; /* Don't force Full if FS changed */
458 bool enable_vss; /* Enable Volume Shadow Copy */
464 inline char *FILESET::name() const { return hdr.name; }
484 int32_t MinValue; /* Minimum value */
485 int32_t MaxValue; /* Maximum value */
486 int32_t CurrentValue; /* Current value */
487 COUNTER *WrapCounter; /* Wrap counter name */
488 CAT *Catalog; /* Where to store */
489 bool created; /* Created in DB */
494 inline char *COUNTER::name() const { return hdr.name; }
504 char *pool_type; /* Pool type */
505 char *label_format; /* Label format string */
506 char *cleaning_prefix; /* Cleaning label prefix */
507 int32_t LabelType; /* Bacula/ANSI/IBM label type */
508 uint32_t max_volumes; /* max number of volumes */
509 utime_t VolRetention; /* volume retention period in seconds */
510 utime_t VolUseDuration; /* duration volume can be used */
511 uint32_t MaxVolJobs; /* Maximum jobs on the Volume */
512 uint32_t MaxVolFiles; /* Maximum files on the Volume */
513 uint64_t MaxVolBytes; /* Maximum bytes on the Volume */
514 utime_t MigrationTime; /* Time to migrate to next pool */
515 uint64_t MigrationHighBytes; /* When migration starts */
516 uint64_t MigrationLowBytes; /* When migration stops */
517 POOL *NextPool; /* Next pool for migration */
518 alist *storage; /* Where is device -- list of Storage to be used */
519 bool use_catalog; /* maintain catalog for media */
520 bool catalog_files; /* maintain file entries in catalog */
521 bool use_volume_once; /* write on volume only once */
522 bool purge_oldest_volume; /* purge oldest volume */
523 bool recycle_oldest_volume; /* attempt to recycle oldest volume */
524 bool recycle_current_volume; /* attempt recycle of current volume */
525 bool AutoPrune; /* default for pool auto prune */
526 bool Recycle; /* default for media recycle yes/no */
527 POOL *RecyclePool; /* RecyclePool destination when media is purged */
532 inline char *POOL::name() const { return hdr.name; }
537 /* Define the Union of all the above
538 * resource structure definitions.
554 RUNSCRIPT res_runscript;
559 /* Run structure contained in Schedule Resource */
562 RUN *next; /* points to next run record */
563 int level; /* level override */
564 int Priority; /* priority override */
566 bool spool_data; /* Data spooling override */
567 bool spool_data_set; /* Data spooling override given */
568 bool write_part_after_job; /* Write part after job override */
569 bool write_part_after_job_set; /* Write part after job override given */
571 POOL *pool; /* Pool override */
572 POOL *full_pool; /* Pool override */
573 POOL *inc_pool; /* Pool override */
574 POOL *diff_pool; /* Pool override */
575 STORE *storage; /* Storage override */
576 MSGS *msgs; /* Messages override */
579 int minute; /* minute to run job */
580 time_t last_run; /* last time run */
581 time_t next_run; /* next time to run */
582 char hour[nbytes_for_bits(24)]; /* bit set for each hour */
583 char mday[nbytes_for_bits(31)]; /* bit set for each day of month */
584 char month[nbytes_for_bits(12)]; /* bit set for each month */
585 char wday[nbytes_for_bits(7)]; /* bit set for each day of the week */
586 char wom[nbytes_for_bits(5)]; /* week of month */
587 char woy[nbytes_for_bits(54)]; /* week of year */