X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fdird%2Fdird_conf.h;h=67aca36078ce043c5f55de6a6c316202d48637a0;hb=53837608c90c789655a6ad4e8453dccca1705b9e;hp=952578127f30f9fbca875ef1c5d888d66bf02bfb;hpb=b0396e8e8d7558fc69657b9fdd8356a3a75ecd32;p=bacula%2Fbacula diff --git a/bacula/src/dird/dird_conf.h b/bacula/src/dird/dird_conf.h index 952578127f..67aca36078 100644 --- a/bacula/src/dird/dird_conf.h +++ b/bacula/src/dird/dird_conf.h @@ -1,35 +1,25 @@ /* - Bacula® - The Network Backup Solution - - Copyright (C) 2000-2011 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. - This program is Free Software; you can redistribute it and/or - modify it under the terms of version three of the GNU Affero General Public - License as published by the Free Software Foundation and included - in the file LICENSE. - - This program is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. - - Bacula® is a registered trademark of Kern Sibbald. - The licensor of Bacula is the Free Software Foundation Europe - (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, - Switzerland, email:ftf@fsfeurope.org. + Bacula(R) - The Network Backup Solution + + Copyright (C) 2000-2017 Kern Sibbald + + The original author of Bacula is Kern Sibbald, with contributions + from many others, a complete list can be found in the file AUTHORS. + + You may use this file and others of this release according to the + license defined in the LICENSE file, which includes the Affero General + Public License, v3.0 ("AGPLv3") and some additional permissions and + terms pursuant to its AGPLv3 Section 7. + + This notice must be preserved when any source code is + conveyed and/or propagated. + + Bacula(R) is a registered trademark of Kern Sibbald. */ /* * Director specific configuration and defines * * Kern Sibbald, Feb MM - * */ /* NOTE: #includes at the end of this file */ @@ -50,7 +40,9 @@ enum { R_COUNTER, R_CONSOLE, R_JOBDEFS, - R_DEVICE, + R_DEVICE, /* This is the real last device class */ + + R_AUTOCHANGER, /* Alias for R_STORAGE after R_LAST */ R_FIRST = R_DIRECTOR, R_LAST = R_DEVICE /* keep this updated */ }; @@ -67,11 +59,11 @@ enum { R_BACKUP }; - -/* Used for certain KeyWord tables */ -struct s_kw { +/* Options for FileSet keywords */ +struct s_fs_opt { const char *name; - uint32_t token; + int keyword; + const char *option; }; /* Job Level keyword structure */ @@ -115,7 +107,9 @@ public: char *subsys_directory; /* SubsysDirectory */ MSGS *messages; /* Daemon message handler */ uint32_t MaxConcurrentJobs; /* Max concurrent jobs for whole director */ + uint32_t MaxSpawnedJobs; /* Max Jobs that can be started by Migration/Copy */ uint32_t MaxConsoleConnect; /* Max concurrent console session */ + uint32_t MaxReload; /* Maximum reload requests */ utime_t FDConnectTimeout; /* timeout for connect in seconds */ utime_t SDConnectTimeout; /* timeout in seconds */ utime_t heartbeat_interval; /* Interval to send heartbeats */ @@ -127,6 +121,7 @@ public: alist *tls_allowed_cns; /* TLS Allowed Clients */ TLS_CONTEXT *tls_ctx; /* Shared TLS Context */ utime_t stats_retention; /* Stats retention period in seconds */ + bool comm_compression; /* Enable comm line compression */ bool tls_authenticate; /* Authenticated with TLS */ bool tls_enable; /* Enable TLS */ bool tls_require; /* Require TLS */ @@ -141,7 +136,7 @@ inline char *DIRRES::name() const { return hdr.name; } /* * Device Resource * This resource is a bit different from the other resources - * because it is not defined in the Director + * because it is not defined in the Director * by DEVICE { ... }, but rather by a "reference" such as * DEVICE = xxx; Then when the Director connects to the * SD, it requests the information about the device. @@ -188,7 +183,10 @@ enum { Catalog_ACL, Where_ACL, PluginOptions_ACL, - Num_ACL /* keep last */ + RestoreClient_ACL, + BackupClient_ACL, + Directory_ACL, /* List of directories that can be accessed in the restore tree */ + Num_ACL /* keep last */ }; /* @@ -233,8 +231,14 @@ public: char *db_user; char *db_name; char *db_driver; /* Select appropriate driver */ - uint32_t mult_db_connections; /* set if multiple connections wanted */ - bool disable_batch_insert; /* set if batch inserts should be disabled */ + char *db_ssl_mode; /* specifies the security state of the connection to the server */ + char *db_ssl_key; /* the path name to the key file */ + char *db_ssl_cert; /* the path name to the certificate file */ + char *db_ssl_ca; /* the path name to the certificate authority file */ + char *db_ssl_capath; /* the path name to a directory that contains trusted SSL CA certificates in PEM format */ + char *db_ssl_cipher; /* a list of permissible ciphers to use for SSL encryption */ + uint32_t mult_db_connections; /* set for multiple db connections */ + bool disable_batch_insert; /* set to disable batch inserts */ /* Methods */ char *name() const; @@ -243,6 +247,14 @@ public: inline char *CAT::name() const { return hdr.name; } +class CLIENT_GLOBALS { +public: + dlink link; /* double link */ + const char *name; /* resource name */ + int32_t NumConcurrentJobs; /* number of concurrent jobs running */ + char *SetIPaddress; /* address from SetIP command */ + int enabled; /* -1: not set, 0 disabled, 1 enabled */ +}; /* * Client Resource @@ -250,17 +262,18 @@ inline char *CAT::name() const { return hdr.name; } */ class CLIENT { public: - RES hdr; - + RES hdr; + CLIENT_GLOBALS *globals; /* global variables */ uint32_t FDport; /* Where File daemon listens */ utime_t FileRetention; /* file retention period in seconds */ utime_t JobRetention; /* job retention period in seconds */ + utime_t SnapRetention; /* Snapshot retention period in seconds */ utime_t heartbeat_interval; /* Interval to send heartbeats */ - char *address; + char *client_address; /* Client address from .conf file */ + char *fd_storage_address; /* Storage address to use from FD side */ char *password; CAT *catalog; /* Catalog resource */ int32_t MaxConcurrentJobs; /* Maximum concurrent jobs */ - int32_t NumConcurrentJobs; /* number of concurrent jobs running */ char *tls_ca_certfile; /* TLS CA Certificate File */ char *tls_ca_certdir; /* TLS CA Certificate Directory */ char *tls_certfile; /* TLS Client Certificate File */ @@ -270,15 +283,35 @@ public: bool tls_authenticate; /* Authenticated with TLS */ bool tls_enable; /* Enable TLS */ bool tls_require; /* Require TLS */ + bool Enabled; /* Set if client enabled */ bool AutoPrune; /* Do automatic pruning? */ + bool sd_calls_client; /* SD calls the client */ + int64_t max_bandwidth; /* Limit speed on this client */ /* Methods */ char *name() const; + void create_client_globals(); + int32_t getNumConcurrentJobs(); + void setNumConcurrentJobs(int32_t num); + char *address(); + void setAddress(char *addr); + bool is_enabled(); + void setEnabled(bool val); }; inline char *CLIENT::name() const { return hdr.name; } +class STORE_GLOBALS { +public: + dlink link; /* double link */ + const char *name; /* resource name */ + int32_t NumConcurrentJobs; /* number of concurrent jobs running */ + int32_t NumConcurrentReadJobs; /* number of concurrent read jobs running */ + int enabled; /* -1: not set, 0: disabled, 1: enabled */ +}; + + /* * Store Resource * @@ -286,17 +319,16 @@ inline char *CLIENT::name() const { return hdr.name; } class STORE { public: RES hdr; - + STORE_GLOBALS *globals; /* global variables */ uint32_t SDport; /* port where Directors connect */ uint32_t SDDport; /* data port for File daemon */ char *address; + char *fd_storage_address; /* Storage address to use from FD side */ char *password; char *media_type; alist *device; /* Alternate devices for this Storage */ int32_t MaxConcurrentJobs; /* Maximum concurrent jobs */ int32_t MaxConcurrentReadJobs; /* Maximum concurrent jobs reading */ - int32_t NumConcurrentJobs; /* number of concurrent jobs running */ - int32_t NumConcurrentReadJobs; /* number of jobs reading */ char *tls_ca_certfile; /* TLS CA Certificate File */ char *tls_ca_certdir; /* TLS CA Certificate Directory */ char *tls_certfile; /* TLS Client Certificate File */ @@ -305,9 +337,12 @@ public: bool tls_authenticate; /* Authenticated with TLS */ bool tls_enable; /* Enable TLS */ bool tls_require; /* Require TLS */ - bool enabled; /* Set if device is enabled */ - bool autochanger; /* set if autochanger */ + bool Enabled; /* Set if device is enabled */ bool AllowCompress; /* set if this Storage should allow jobs to enable compression */ + bool autochanger; /* set if we are part of an autochanger */ + POOLMEM *ac_group; /* Autochanger StorageId group */ + STORE *changer; /* points to autochanger */ + STORE *shared_storage; /* points to shared storage */ int64_t StorageId; /* Set from Storage DB record */ utime_t heartbeat_interval; /* Interval to send heartbeats */ uint32_t drives; /* number of drives in autochanger */ @@ -315,10 +350,17 @@ public: /* Methods */ char *dev_name() const; char *name() const; + void create_store_globals(); + int32_t getNumConcurrentJobs(); + int32_t getNumConcurrentReadJobs(); + void setNumConcurrentJobs(int32_t num); + void setNumConcurrentReadJobs(int32_t num); + bool is_enabled(); + void setEnabled(bool val); }; inline char *STORE::dev_name() const -{ +{ DEVICE *dev = (DEVICE *)device->first(); return dev->name(); } @@ -336,9 +378,9 @@ public: POOLMEM *store_source; /* Methods */ - USTORE() { store = NULL; store_source = get_pool_memory(PM_MESSAGE); + USTORE() { store = NULL; store_source = get_pool_memory(PM_MESSAGE); *store_source = 0; }; - ~USTORE() { destroy(); } + ~USTORE() { destroy(); } void set_source(const char *where); void destroy(); }; @@ -360,6 +402,13 @@ inline void USTORE::set_source(const char *where) pm_strcpy(store_source, where); } +class JOB_GLOBALS { +public: + dlink link; /* double link */ + const char *name; /* resource name */ + int32_t NumConcurrentJobs; /* number of concurrent jobs running */ + int enabled; /* -1: disabled, 0: disabled, 1: Enabled */ +}; /* * Job Resource @@ -367,14 +416,15 @@ inline void USTORE::set_source(const char *where) class JOB { public: RES hdr; + JOB_GLOBALS *globals; /* global variables */ + uint32_t JobType; /* job type (backup, verify, restore */ + uint32_t JobLevel; /* default backup/verify level */ + uint32_t RestoreJobId; /* What -- JobId to restore */ + uint32_t replace; /* How (overwrite, ..) */ + uint32_t selection_type; - uint32_t JobType; /* job type (backup, verify, restore */ - uint32_t JobLevel; /* default backup/verify level */ - int32_t Priority; /* Job priority */ - uint32_t RestoreJobId; /* What -- JobId to restore */ - int32_t RescheduleTimes; /* Number of times to reschedule job */ - uint32_t replace; /* How (overwrite, ..) */ - uint32_t selection_type; + int32_t Priority; /* Job priority */ + int32_t RescheduleTimes; /* Number of times to reschedule job */ char *RestoreWhere; /* Where on disk to restore -- directory */ char *RegexWhere; /* RegexWhere option */ @@ -396,11 +446,14 @@ public: utime_t MaxRunSchedTime; /* max run time in seconds from Scheduled time*/ utime_t RescheduleInterval; /* Reschedule interval */ utime_t MaxFullInterval; /* Maximum time interval between Fulls */ + utime_t MaxVirtualFullInterval; /* Maximum time interval between Virtual Fulls */ utime_t MaxDiffInterval; /* Maximum time interval between Diffs */ utime_t DuplicateJobProximity; /* Permitted time between duplicicates */ + utime_t SnapRetention; /* Snapshot retention period in seconds */ int64_t spool_size; /* Size of spool file for this job */ int32_t MaxConcurrentJobs; /* Maximum concurrent jobs */ - int32_t NumConcurrentJobs; /* number of concurrent jobs running */ + uint32_t MaxSpawnedJobs; /* Max Jobs that can be started by Migration/Copy */ + uint32_t BackupsToKeep; /* Number of backups to keep in Virtual Full */ bool allow_mixed_priority; /* Allow jobs with higher priority concurrently with this */ MSGS *messages; /* How and where to send messages */ @@ -409,7 +462,9 @@ public: FILESET *fileset; /* What to backup -- Fileset */ alist *storage; /* Where is device -- list of Storage to be used */ POOL *pool; /* Where is media -- Media Pool */ + POOL *next_pool; /* Next Pool for Copy/Migrate/VirtualFull */ POOL *full_pool; /* Pool for Full backups */ + POOL *vfull_pool; /* Pool for Virtual Full backups */ POOL *inc_pool; /* Pool for Incremental backups */ POOL *diff_pool; /* Pool for Differental backups */ char *selection_pattern; @@ -432,7 +487,7 @@ public: bool rerun_failed_levels; /* Upgrade to rerun failed levels */ bool PreferMountedVolumes; /* Prefer vols mounted rather than new one */ bool write_part_after_job; /* Set to write part after job in SD */ - bool enabled; /* Set if job enabled */ + bool Enabled; /* Set if job enabled */ bool accurate; /* Set if it is an accurate backup job */ bool AllowDuplicateJobs; /* Allow duplicate jobs */ bool AllowHigherDuplicates; /* Permit Higher Level */ @@ -440,18 +495,57 @@ public: bool CancelQueuedDuplicates; /* Cancel queued jobs */ bool CancelRunningDuplicates; /* Cancel Running jobs */ bool PurgeMigrateJob; /* Purges source job on completion */ - bool IgnoreDuplicateJobChecking; /* Ignore Duplicate Job Checking */ + bool DeleteConsolidatedJobs; /* Delete or not consolidated Virtual Full jobs */ - alist *base; /* Base jobs */ + alist *base; /* Base jobs */ + int64_t max_bandwidth; /* Speed limit on this job */ /* Methods */ char *name() const; + void create_job_globals(); + int32_t getNumConcurrentJobs(); + void setNumConcurrentJobs(int32_t num); + bool is_enabled(); + void setEnabled(bool val); }; inline char *JOB::name() const { return hdr.name; } +/* Define FileSet Options keyword values */ +enum { + INC_KW_NONE, + INC_KW_COMPRESSION, + INC_KW_DIGEST, + INC_KW_ENCRYPTION, + INC_KW_VERIFY, + INC_KW_BASEJOB, + INC_KW_ACCURATE, + INC_KW_ONEFS, + INC_KW_RECURSE, + INC_KW_SPARSE, + INC_KW_HARDLINK, + INC_KW_REPLACE, /* restore options */ + INC_KW_READFIFO, /* Causes fifo data to be read */ + INC_KW_PORTABLE, + INC_KW_MTIMEONLY, + INC_KW_KEEPATIME, + INC_KW_EXCLUDE, + INC_KW_ACL, + INC_KW_IGNORECASE, + INC_KW_HFSPLUS, + INC_KW_NOATIME, + INC_KW_ENHANCEDWILD, + INC_KW_CHKCHANGES, + INC_KW_STRIPPATH, + INC_KW_HONOR_NODUMP, + INC_KW_XATTR, + INC_KW_DEDUP, + INC_KW_MAX /* Keep this last */ +}; + + #undef MAX_FOPTS -#define MAX_FOPTS 40 +#define MAX_FOPTS 50 /* File options structure */ struct FOPTS { @@ -474,6 +568,7 @@ struct FOPTS { /* This is either an include item or an exclude item */ struct INCEXE { + char opt_present[INC_KW_MAX+1]; /* set if option is present in conf file */ FOPTS *current_opts; /* points to current options structure */ FOPTS **opts_list; /* options list */ int32_t num_opts; /* number of options items */ @@ -500,6 +595,7 @@ public: char MD5[30]; /* base 64 representation of MD5 */ bool ignore_fs_changes; /* Don't force Full if FS changed */ bool enable_vss; /* Enable Volume Shadow Copy */ + bool enable_snapshot; /* Enable Snapshot */ /* Methods */ char *name() const; @@ -507,17 +603,32 @@ public: inline char *FILESET::name() const { return hdr.name; } +class SCHED_GLOBALS { +public: + dlink link; /* double link */ + const char *name; /* resource name */ + int enabled; /* -1: not set, 0: disabled, 1: Enabled */ +}; + /* * Schedule Resource - * */ class SCHED { public: RES hdr; - + SCHED_GLOBALS *globals; RUN *run; + bool Enabled; /* set if enabled */ + + /* Methods */ + char *name() const; + void create_sched_globals(); + bool is_enabled(); + void setEnabled(bool val); }; +inline char *SCHED::name() const { return hdr.name; } + /* * Counter Resource */ @@ -531,6 +642,7 @@ public: COUNTER *WrapCounter; /* Wrap counter name */ CAT *Catalog; /* Where to store */ bool created; /* Created in DB */ + /* Methods */ char *name() const; }; @@ -551,6 +663,7 @@ public: int32_t LabelType; /* Bacula/ANSI/IBM label type */ uint32_t max_volumes; /* max number of volumes */ utime_t VolRetention; /* volume retention period in seconds */ + utime_t CacheRetention; /* cloud cache retention period in seconds */ utime_t VolUseDuration; /* duration volume can be used */ uint32_t MaxVolJobs; /* Maximum jobs on the Volume */ uint32_t MaxVolFiles; /* Maximum files on the Volume */ @@ -583,8 +696,6 @@ public: inline char *POOL::name() const { return hdr.name; } - - /* Define the Union of all the above * resource structure definitions. */ @@ -622,9 +733,13 @@ public: bool accurate_set; /* accurate given */ bool write_part_after_job; /* Write part after job override */ bool write_part_after_job_set; /* Write part after job override given */ - + bool priority_set; /* priority override given */ + bool level_set; /* level override given */ + POOL *pool; /* Pool override */ + POOL *next_pool; /* Next pool override */ POOL *full_pool; /* Pool override */ + POOL *vfull_pool; /* Pool override */ POOL *inc_pool; /* Pool override */ POOL *diff_pool; /* Pool override */ STORE *storage; /* Storage override */ @@ -634,17 +749,40 @@ public: uint32_t minute; /* minute to run job */ time_t last_run; /* last time run */ time_t next_run; /* next time to run */ + bool last_day_set; /* set if last_day is used */ char hour[nbytes_for_bits(24)]; /* bit set for each hour */ - char mday[nbytes_for_bits(31)]; /* bit set for each day of month */ + char mday[nbytes_for_bits(32)]; /* bit set for each day of month */ char month[nbytes_for_bits(12)]; /* bit set for each month */ char wday[nbytes_for_bits(7)]; /* bit set for each day of the week */ - char wom[nbytes_for_bits(5)]; /* week of month */ + char wom[nbytes_for_bits(6)]; /* week of month */ char woy[nbytes_for_bits(54)]; /* week of year */ }; #define GetPoolResWithName(x) ((POOL *)GetResWithName(R_POOL, (x))) #define GetStoreResWithName(x) ((STORE *)GetResWithName(R_STORAGE, (x))) +#define GetSchedResWithName(x) ((SCHED *)GetResWithName(R_SCHEDULE, (x))) #define GetClientResWithName(x) ((CLIENT *)GetResWithName(R_CLIENT, (x))) #define GetJobResWithName(x) ((JOB *)GetResWithName(R_JOB, (x))) #define GetFileSetResWithName(x) ((FILESET *)GetResWithName(R_FILESET, (x))) #define GetCatalogResWithName(x) ((CAT *)GetResWithName(R_CATALOG, (x))) + +/* Imported subroutines */ +void store_jobtype(LEX *lc, RES_ITEM *item, int index, int pass); +void store_level(LEX *lc, RES_ITEM *item, int index, int pass); +void store_replace(LEX *lc, RES_ITEM *item, int index, int pass); +void store_migtype(LEX *lc, RES_ITEM *item, int index, int pass); +void store_acl(LEX *lc, RES_ITEM *item, int index, int pass); +void store_ac_res(LEX *lc, RES_ITEM *item, int index, int pass); +void store_device(LEX *lc, RES_ITEM *item, int index, int pass); +void store_actiononpurge(LEX *lc, RES_ITEM *item, int index, int pass); +void store_inc(LEX *lc, RES_ITEM *item, int index, int pass); +void store_regex(LEX *lc, RES_ITEM *item, int index, int pass); +void store_wild(LEX *lc, RES_ITEM *item, int index, int pass); +void store_fstype(LEX *lc, RES_ITEM *item, int index, int pass); +void store_drivetype(LEX *lc, RES_ITEM *item, int index, int pass); +void store_opts(LEX *lc, RES_ITEM *item, int index, int pass); +void store_lopts(LEX *lc, RES_ITEM *item, int index, int pass); +void store_base(LEX *lc, RES_ITEM *item, int index, int pass); +void store_plugin(LEX *lc, RES_ITEM *item, int index, int pass); +void store_run(LEX *lc, RES_ITEM *item, int index, int pass); +void store_runscript(LEX *lc, RES_ITEM *item, int index, int pass);