]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/dird/dird_conf.h
- Make default mandir /usr/share/man
[bacula/bacula] / bacula / src / dird / dird_conf.h
1 /*
2  * Director specific configuration and defines
3  *
4  *     Kern Sibbald, Feb MM
5  *
6  *    Version $Id$
7  */
8 /*
9    Copyright (C) 2000-2005 Kern Sibbald
10
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 ammended with additional clauses defined in the
14    file LICENSE in the main source directory.
15
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.
20
21  */
22
23 /* NOTE:  #includes at the end of this file */
24
25 /*
26  * Resource codes -- they must be sequential for indexing
27  */
28 enum {
29    R_DIRECTOR = 1001,
30    R_CLIENT,
31    R_JOB,
32    R_STORAGE,
33    R_CATALOG,
34    R_SCHEDULE,
35    R_FILESET,
36    R_POOL,
37    R_MSGS,
38    R_COUNTER,
39    R_CONSOLE,
40    R_JOBDEFS,
41    R_DEVICE,
42    R_FIRST = R_DIRECTOR,
43    R_LAST  = R_DEVICE                 /* keep this updated */
44 };
45
46
47 /*
48  * Some resource attributes
49  */
50 enum {
51    R_NAME = 1020,
52    R_ADDRESS,
53    R_PASSWORD,
54    R_TYPE,
55    R_BACKUP
56 };
57
58
59 /* Used for certain KeyWord tables */
60 struct s_kw {
61    const char *name;
62    int token;
63 };
64
65 /* Job Level keyword structure */
66 struct s_jl {
67    const char *level_name;                  /* level keyword */
68    int  level;                        /* level */
69    int  job_type;                     /* JobType permitting this level */
70 };
71
72 /* Job Type keyword structure */
73 struct s_jt {
74    const char *type_name;
75    int job_type;
76 };
77
78 /* Definition of the contents of each Resource */
79 /* Needed for forward references */
80 struct SCHED;
81 struct CLIENT;
82 struct FILESET;
83 struct POOL;
84 struct RUN;
85 struct DEVICE;
86
87 /*
88  *   Director Resource
89  *
90  */
91 class DIRRES {
92 public:
93    RES   hdr;
94    dlist *DIRaddrs;
95    char *password;                    /* Password for UA access */
96    char *query_file;                  /* SQL query file */
97    char *working_directory;           /* WorkingDirectory */
98    const char *scripts_directory;     /* ScriptsDirectory */
99    char *pid_directory;               /* PidDirectory */
100    char *subsys_directory;            /* SubsysDirectory */
101    MSGS *messages;                    /* Daemon message handler */
102    uint32_t MaxConcurrentJobs;        /* Max concurrent jobs for whole director */
103    utime_t FDConnectTimeout;          /* timeout for connect in seconds */
104    utime_t SDConnectTimeout;          /* timeout in seconds */
105    int tls_enable;                    /* Enable TLS */
106    int tls_require;                   /* Require TLS */
107    int tls_verify_peer;              /* TLS Verify Client Certificate */
108    char *tls_ca_certfile;             /* TLS CA Certificate File */
109    char *tls_ca_certdir;              /* TLS CA Certificate Directory */
110    char *tls_certfile;                /* TLS Server Certificate File */
111    char *tls_keyfile;                 /* TLS Server Key File */
112    char *tls_dhfile;                  /* TLS Diffie-Hellman Parameters */
113    alist *tls_allowed_cns;            /* TLS Allowed Clients */
114    TLS_CONTEXT *tls_ctx;              /* Shared TLS Context */
115 };
116
117 /*
118  * Device Resource
119  *  This resource is a bit different from the other resources
120  *  because it is not defined in the Director 
121  *  by DEVICE { ... }, but rather by a "reference" such as
122  *  DEVICE = xxx; Then when the Director connects to the
123  *  SD, it requests the information about the device.
124  */
125 class DEVICE {
126 public:
127    RES hdr;
128
129    bool found;                        /* found with SD */
130    int num_writers;                   /* number of writers */
131    int max_writers;                   /* = 1 for files */
132    int reserved;                      /* number of reserves */
133    int num_drives;                    /* for autochanger */
134    bool autochanger;                  /* set if device is autochanger */
135    bool open;                         /* drive open */
136    bool append;                       /* in append mode */
137    bool read;                         /* in read mode */
138    bool labeled;                      /* Volume name valid */
139    bool offline;                      /* not available */
140    bool autoselect;                   /* can be selected via autochanger */
141    uint32_t PoolId;
142    char ChangerName[MAX_NAME_LENGTH];
143    char VolumeName[MAX_NAME_LENGTH];
144    char MediaType[MAX_NAME_LENGTH];
145 };
146
147 /*
148  * Console ACL positions
149  */
150 enum {
151    Job_ACL = 0,
152    Client_ACL,
153    Storage_ACL,
154    Schedule_ACL,
155    Run_ACL,
156    Pool_ACL,
157    Command_ACL,
158    FileSet_ACL,
159    Catalog_ACL,
160    Num_ACL                            /* keep last */
161 };
162
163 /*
164  *    Console Resource
165  */
166 class CONRES {
167 public:
168    RES   hdr;
169    char *password;                    /* UA server password */
170    alist *ACL_lists[Num_ACL];         /* pointers to ACLs */
171    int tls_enable;                    /* Enable TLS */
172    int tls_require;                   /* Require TLS */
173    int tls_verify_peer;              /* TLS Verify Client Certificate */
174    char *tls_ca_certfile;             /* TLS CA Certificate File */
175    char *tls_ca_certdir;              /* TLS CA Certificate Directory */
176    char *tls_certfile;                /* TLS Server Certificate File */
177    char *tls_keyfile;                 /* TLS Server Key File */
178    char *tls_dhfile;                  /* TLS Diffie-Hellman Parameters */
179    alist *tls_allowed_cns;            /* TLS Allowed Clients */
180    TLS_CONTEXT *tls_ctx;              /* Shared TLS Context */
181 };
182
183
184 /*
185  *   Catalog Resource
186  *
187  */
188 class CAT {
189 public:
190    RES   hdr;
191
192    int   db_port;                     /* Port -- not yet implemented */
193    char *db_address;                  /* host name for remote access */
194    char *db_socket;                   /* Socket for local access */
195    char *db_password;
196    char *db_user;
197    char *db_name;
198    int   mult_db_connections;         /* set if multiple connections wanted */
199 };
200
201
202 /*
203  *   Client Resource
204  *
205  */
206 class CLIENT {
207 public:
208    RES   hdr;
209
210    int   FDport;                      /* Where File daemon listens */
211    int   AutoPrune;                   /* Do automatic pruning? */
212    utime_t FileRetention;             /* file retention period in seconds */
213    utime_t JobRetention;              /* job retention period in seconds */
214    char *address;
215    char *password;
216    CAT *catalog;                      /* Catalog resource */
217    uint32_t MaxConcurrentJobs;        /* Maximume concurrent jobs */
218    uint32_t NumConcurrentJobs;        /* number of concurrent jobs running */
219    int tls_enable;                    /* Enable TLS */
220    int tls_require;                   /* Require TLS */
221    char *tls_ca_certfile;             /* TLS CA Certificate File */
222    char *tls_ca_certdir;              /* TLS CA Certificate Directory */
223    char *tls_certfile;                /* TLS Client Certificate File */
224    char *tls_keyfile;                 /* TLS Client Key File */
225    TLS_CONTEXT *tls_ctx;              /* Shared TLS Context */
226 };
227
228 /*
229  *   Store Resource
230  *
231  */
232 class STORE {
233 public:
234    RES   hdr;
235
236    int   SDport;                      /* port where Directors connect */
237    int   SDDport;                     /* data port for File daemon */
238    char *address;
239    char *password;
240    char *media_type;
241    alist *device;                     /* Alternate devices for this Storage */
242    int  autochanger;                  /* set if autochanger */
243    uint32_t MaxConcurrentJobs;        /* Maximume concurrent jobs */
244    uint32_t NumConcurrentJobs;        /* number of concurrent jobs running */
245    int tls_enable;                    /* Enable TLS */
246    int tls_require;                   /* Require TLS */
247    char *tls_ca_certfile;             /* TLS CA Certificate File */
248    char *tls_ca_certdir;              /* TLS CA Certificate Directory */
249    char *tls_certfile;                /* TLS Client Certificate File */
250    char *tls_keyfile;                 /* TLS Client Key File */
251    TLS_CONTEXT *tls_ctx;              /* Shared TLS Context */
252    int64_t StorageId;                 /* Set from Storage DB record */
253
254    /* Methods */
255    char *dev_name() const;
256    char *name() const;
257 };
258
259 inline char *STORE::dev_name() const
260
261    DEVICE *dev = (DEVICE *)device->first();
262    return dev->hdr.name;
263 }
264
265 inline char *STORE::name() const { return hdr.name; }
266
267
268 /*
269  *   Job Resource
270  */
271 class JOB {
272 public:
273    RES   hdr;
274
275    int   JobType;                     /* job type (backup, verify, restore */
276    int   JobLevel;                    /* default backup/verify level */
277    int   Priority;                    /* Job priority */
278    int   RestoreJobId;                /* What -- JobId to restore */
279    char *RestoreWhere;                /* Where on disk to restore -- directory */
280    char *RestoreBootstrap;            /* Bootstrap file */
281    char *RunBeforeJob;                /* Run program before Job */
282    char *RunAfterJob;                 /* Run program after Job */
283    char *RunAfterFailedJob;           /* Run program after Job that errs */
284    char *ClientRunBeforeJob;          /* Run client program before Job */
285    char *ClientRunAfterJob;           /* Run client program after Job */
286    char *WriteBootstrap;              /* Where to write bootstrap Job updates */
287    int   replace;                     /* How (overwrite, ..) */
288    utime_t MaxRunTime;                /* max run time in seconds */
289    utime_t MaxWaitTime;               /* max blocking time in seconds */
290    utime_t FullMaxWaitTime;           /* Max Full job wait time */
291    utime_t DiffMaxWaitTime;           /* Max Differential job wait time */
292    utime_t IncMaxWaitTime;            /* Max Incremental job wait time */
293    utime_t MaxStartDelay;             /* max start delay in seconds */
294    int PrefixLinks;                   /* prefix soft links with Where path */
295    int PruneJobs;                     /* Force pruning of Jobs */
296    int PruneFiles;                    /* Force pruning of Files */
297    int PruneVolumes;                  /* Force pruning of Volumes */
298    int SpoolAttributes;               /* Set to spool attributes in SD */
299    int spool_data;                    /* Set to spool data in SD */
300    int rerun_failed_levels;           /* Upgrade to rerun failed levels */
301    int PreferMountedVolumes;          /* Prefer vols mounted rather than new one */
302    uint32_t MaxConcurrentJobs;        /* Maximume concurrent jobs */
303    int RescheduleOnError;             /* Set to reschedule on error */
304    int RescheduleTimes;               /* Number of times to reschedule job */
305    utime_t RescheduleInterval;        /* Reschedule interval */
306    utime_t JobRetention;              /* job retention period in seconds */
307    bool write_part_after_job;         /* Set to write part after job in SD */
308    
309    MSGS      *messages;               /* How and where to send messages */
310    SCHED     *schedule;               /* When -- Automatic schedule */
311    CLIENT    *client;                 /* Who to backup */
312    FILESET   *fileset;                /* What to backup -- Fileset */
313    alist     *storage;                /* Where is device -- list of Storage to be used */
314    POOL      *pool;                   /* Where is media -- Media Pool */
315    POOL      *full_pool;              /* Pool for Full backups */
316    POOL      *inc_pool;               /* Pool for Incremental backups */
317    POOL      *dif_pool;               /* Pool for Differental backups */
318    JOB       *verify_job;             /* Job name to verify */
319    JOB       *jobdefs;                /* Job defaults */
320    alist     *run_cmds;               /* Run commands */
321    uint32_t NumConcurrentJobs;        /* number of concurrent jobs running */
322 };
323
324 #undef  MAX_FOPTS
325 #define MAX_FOPTS 34
326
327 /* File options structure */
328 struct FOPTS {
329    char opts[MAX_FOPTS];              /* options string */
330    alist regex;                       /* regex string(s) */
331    alist regexdir;                    /* regex string(s) for directories */
332    alist regexfile;                   /* regex string(s) for files */
333    alist wild;                        /* wild card strings */
334    alist wilddir;                     /* wild card strings for directories */
335    alist wildfile;                    /* wild card strings for files */
336    alist base;                        /* list of base names */
337    alist fstype;                      /* file system type limitation */
338    char *reader;                      /* reader program */
339    char *writer;                      /* writer program */
340 };
341
342
343 /* This is either an include item or an exclude item */
344 struct INCEXE {
345    FOPTS *current_opts;               /* points to current options structure */
346    FOPTS **opts_list;                 /* options list */
347    int num_opts;                      /* number of options items */
348    alist name_list;                   /* filename list -- holds char * */
349 };
350
351 /*
352  *   FileSet Resource
353  *
354  */
355 class FILESET {
356 public:
357    RES   hdr;
358
359    bool new_include;                  /* Set if new include used */
360    INCEXE **include_items;            /* array of incexe structures */
361    int num_includes;                  /* number in array */
362    INCEXE **exclude_items;
363    int num_excludes;
364    bool have_MD5;                     /* set if MD5 initialized */
365    struct MD5Context md5c;            /* MD5 of include/exclude */
366    char MD5[30];                      /* base 64 representation of MD5 */
367    int ignore_fs_changes;             /* Don't force Full if FS changed */
368    int enable_vss;                    /* Enable Volume Shadow Copy */
369 };
370
371
372 /*
373  *   Schedule Resource
374  *
375  */
376 class SCHED {
377 public:
378    RES   hdr;
379
380    RUN *run;
381 };
382
383 /*
384  *   Counter Resource
385  */
386 class COUNTER {
387 public:
388    RES   hdr;
389
390    int32_t  MinValue;                 /* Minimum value */
391    int32_t  MaxValue;                 /* Maximum value */
392    int32_t  CurrentValue;             /* Current value */
393    COUNTER *WrapCounter;              /* Wrap counter name */
394    CAT     *Catalog;                  /* Where to store */
395    bool     created;                  /* Created in DB */
396 };
397
398 /*
399  *   Pool Resource
400  *
401  */
402 class POOL {
403 public:
404    RES   hdr;
405
406    char *pool_type;                   /* Pool type */
407    char *label_format;                /* Label format string */
408    char *cleaning_prefix;             /* Cleaning label prefix */
409    int   LabelType;                   /* Bacula/ANSI/IBM label type */
410    int   use_catalog;                 /* maintain catalog for media */
411    int   catalog_files;               /* maintain file entries in catalog */
412    int   use_volume_once;             /* write on volume only once */
413    int   accept_any_volume;           /* accept any volume */
414    int   purge_oldest_volume;         /* purge oldest volume */
415    int   recycle_oldest_volume;       /* attempt to recycle oldest volume */
416    int   recycle_current_volume;      /* attempt recycle of current volume */
417    uint32_t max_volumes;              /* max number of volumes */
418    utime_t VolRetention;              /* volume retention period in seconds */
419    utime_t VolUseDuration;            /* duration volume can be used */
420    uint32_t MaxVolJobs;               /* Maximum jobs on the Volume */
421    uint32_t MaxVolFiles;              /* Maximum files on the Volume */
422    uint64_t MaxVolBytes;              /* Maximum bytes on the Volume */
423    int   AutoPrune;                   /* default for pool auto prune */
424    int   Recycle;                     /* default for media recycle yes/no */
425 };
426
427
428
429
430 /* Define the Union of all the above
431  * resource structure definitions.
432  */
433 union URES {
434    DIRRES     res_dir;
435    CONRES     res_con;
436    CLIENT     res_client;
437    STORE      res_store;
438    CAT        res_cat;
439    JOB        res_job;
440    FILESET    res_fs;
441    SCHED      res_sch;
442    POOL       res_pool;
443    MSGS       res_msgs;
444    COUNTER    res_counter;
445    DEVICE     res_dev;
446    RES        hdr;
447 };
448
449
450
451 /* Run structure contained in Schedule Resource */
452 class RUN {
453 public:
454    RUN *next;                         /* points to next run record */
455    int level;                         /* level override */
456    int Priority;                      /* priority override */
457    int job_type;
458    bool spool_data;                   /* Data spooling override */
459    bool spool_data_set;               /* Data spooling override given */
460    bool write_part_after_job;         /* Write part after job override */
461    bool write_part_after_job_set;     /* Write part after job override given */
462    
463    POOL *pool;                        /* Pool override */
464    POOL *full_pool;                   /* Pool override */
465    POOL *inc_pool;                    /* Pool override */
466    POOL *dif_pool;                    /* Pool override */
467    STORE *storage;                    /* Storage override */
468    MSGS *msgs;                        /* Messages override */
469    char *since;
470    int level_no;
471    int minute;                        /* minute to run job */
472    time_t last_run;                   /* last time run */
473    time_t next_run;                   /* next time to run */
474    char hour[nbytes_for_bits(24)];    /* bit set for each hour */
475    char mday[nbytes_for_bits(31)];    /* bit set for each day of month */
476    char month[nbytes_for_bits(12)];   /* bit set for each month */
477    char wday[nbytes_for_bits(7)];     /* bit set for each day of the week */
478    char wom[nbytes_for_bits(5)];      /* week of month */
479    char woy[nbytes_for_bits(54)];     /* week of year */
480 };