/*
Bacula® - The Network Backup Solution
- Copyright (C) 2000-2010 Free Software Foundation Europe e.V.
+ Copyright (C) 2000-2012 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.
void terminate_dird(int sig);
static bool check_resources();
static void dir_sql_query(JCR *jcr, const char *cmd);
+static void cleanup_old_files();
/* Exported subroutines */
extern "C" void reload_config(int sig);
fprintf(stderr, _(
PROG_COPYRIGHT
"\nVersion: %s (%s)\n\n"
-"Usage: dird [-f -s] [-c config_file] [-d debug_level] [config_file]\n"
+"Usage: bacula-dir [-f -s] [-c config_file] [-d debug_level] [config_file]\n"
" -c <file> set configuration file to file\n"
" -d <nn> set debug level to <nn>\n"
" -dt print timestamp in debug output\n"
drop(uid, gid, false); /* reduce privileges if requested */
+ cleanup_old_files();
+
/* If we are in testing mode, we don't try to fix the catalog */
cat_op mode=(test_config)?CHECK_CONNECTION:UPDATE_AND_FIX;
my_name_is(0, NULL, director->name()); /* set user defined name */
/* Plug database interface for library routines */
- p_sql_query = (sql_query)dir_sql_query;
- p_sql_escape = (sql_escape)db_escape_string;
+ p_sql_query = (sql_query_func)dir_sql_query;
+ p_sql_escape = (sql_escape_func)db_escape_string;
FDConnectTimeout = (int)director->FDConnectTimeout;
SDConnectTimeout = (int)director->SDConnectTimeout;
*/
static void reload_job_end_cb(JCR *jcr, void *ctx)
{
- int reload_id = (int)((long int)ctx);
+ int reload_id = (int)((intptr_t)ctx);
Dmsg3(100, "reload job_end JobId=%d table=%d cnt=%d\n", jcr->JobId,
reload_id, reload_table[reload_id].job_count);
lock_jobs();
}
}
+ /* Loop over Storages */
+ STORE *store;
+ foreach_res(store, R_STORAGE) {
+ /* tls_require implies tls_enable */
+ if (store->tls_require) {
+ if (have_tls) {
+ store->tls_enable = true;
+ } else {
+ Jmsg(NULL, M_FATAL, 0, _("TLS required but not configured in Bacula.\n"));
+ OK = false;
+ continue;
+ }
+ }
+
+ need_tls = store->tls_enable || store->tls_authenticate;
+
+ if ((!store->tls_ca_certfile && !store->tls_ca_certdir) && need_tls) {
+ Jmsg(NULL, M_FATAL, 0, _("Neither \"TLS CA Certificate\""
+ " or \"TLS CA Certificate Dir\" are defined for Storage \"%s\" in %s.\n"),
+ store->name(), configfile);
+ OK = false;
+ }
+
+ /* If everything is well, attempt to initialize our per-resource TLS context */
+ if (OK && (need_tls || store->tls_require)) {
+ /* Initialize TLS context:
+ * Args: CA certfile, CA certdir, Certfile, Keyfile,
+ * Keyfile PEM Callback, Keyfile CB Userdata, DHfile, Verify Peer */
+ store->tls_ctx = new_tls_context(store->tls_ca_certfile,
+ store->tls_ca_certdir, store->tls_certfile,
+ store->tls_keyfile, NULL, NULL, NULL, true);
+
+ if (!store->tls_ctx) {
+ Jmsg(NULL, M_FATAL, 0, _("Failed to initialize TLS context for Storage \"%s\" in %s.\n"),
+ store->name(), configfile);
+ OK = false;
+ }
+ }
+ }
+
UnlockRes();
if (OK) {
close_msg(NULL); /* close temp message handler */
static bool check_catalog(cat_op mode)
{
bool OK = true;
- bool need_tls;
/* Loop over databases */
CAT *catalog;
* Make sure we can open catalog, otherwise print a warning
* message because the server is probably not running.
*/
- db = db_init(NULL, catalog->db_driver, catalog->db_name, catalog->db_user,
- catalog->db_password, catalog->db_address,
- catalog->db_port, catalog->db_socket,
- catalog->mult_db_connections);
+ db = db_init_database(NULL, catalog->db_driver, catalog->db_name, catalog->db_user,
+ catalog->db_password, catalog->db_address,
+ catalog->db_port, catalog->db_socket,
+ catalog->mult_db_connections,
+ catalog->disable_batch_insert);
if (!db || !db_open_database(NULL, db)) {
Pmsg2(000, _("Could not open Catalog \"%s\", database \"%s\".\n"),
catalog->name(), catalog->db_name);
continue;
}
- /* Check if the SQL library is thread-safe */
- db_check_backend_thread_safe();
-
/* Display a message if the db max_connections is too low */
if (!db_check_max_connections(NULL, db, director->MaxConcurrentJobs)) {
Pmsg1(000, "Warning, settings problem for Catalog=%s\n", catalog->name());
STORE *store;
foreach_res(store, R_STORAGE) {
STORAGE_DBR sr;
- MEDIATYPE_DBR mr;
+ MEDIATYPE_DBR mtr;
memset(&sr, 0, sizeof(sr));
- memset(&mr, 0, sizeof(mr));
+ memset(&mtr, 0, sizeof(mtr));
if (store->media_type) {
- bstrncpy(mr.MediaType, store->media_type, sizeof(mr.MediaType));
- mr.ReadOnly = 0;
- db_create_mediatype_record(NULL, db, &mr);
+ bstrncpy(mtr.MediaType, store->media_type, sizeof(mtr.MediaType));
+ mtr.ReadOnly = 0;
+ db_create_mediatype_record(NULL, db, &mtr);
} else {
- mr.MediaTypeId = 0;
+ mtr.MediaTypeId = 0;
}
bstrncpy(sr.Name, store->name(), sizeof(sr.Name));
sr.AutoChanger = store->autochanger;
OK = false;
}
}
-
- /* tls_require implies tls_enable */
- if (store->tls_require) {
- if (have_tls) {
- store->tls_enable = true;
- } else {
- Jmsg(NULL, M_FATAL, 0, _("TLS required but not configured in Bacula.\n"));
- OK = false;
- }
- }
-
- need_tls = store->tls_enable || store->tls_authenticate;
-
- if ((!store->tls_ca_certfile && !store->tls_ca_certdir) && need_tls) {
- Jmsg(NULL, M_FATAL, 0, _("Neither \"TLS CA Certificate\""
- " or \"TLS CA Certificate Dir\" are defined for Storage \"%s\" in %s.\n"),
- store->name(), configfile);
- OK = false;
- }
-
- /* If everything is well, attempt to initialize our per-resource TLS context */
- if (OK && (need_tls || store->tls_require)) {
- /* Initialize TLS context:
- * Args: CA certfile, CA certdir, Certfile, Keyfile,
- * Keyfile PEM Callback, Keyfile CB Userdata, DHfile, Verify Peer */
- store->tls_ctx = new_tls_context(store->tls_ca_certfile,
- store->tls_ca_certdir, store->tls_certfile,
- store->tls_keyfile, NULL, NULL, NULL, true);
-
- if (!store->tls_ctx) {
- Jmsg(NULL, M_FATAL, 0, _("Failed to initialize TLS context for Storage \"%s\" in %s.\n"),
- store->name(), configfile);
- OK = false;
- }
- }
}
/* Loop over all counters, defining them in each database */
db_sql_query(db, cleanup_running_job, NULL, NULL);
}
+ /* Set type in global for debugging */
+ set_db_type(db_get_type(db));
+
db_close_database(NULL, db);
}
- /* Set type in global for debugging */
- set_db_type(db_get_type());
return OK;
}
+
+static void copy_base_name(POOLMEM *cleanup)
+{
+ int len = strlen(director->working_directory);
+#if defined(HAVE_WIN32)
+ pm_strcpy(cleanup, "del /q ");
+#else
+ pm_strcpy(cleanup, "/bin/rm -f ");
+#endif
+ pm_strcat(cleanup, director->working_directory);
+ if (len > 0 && !IsPathSeparator(director->working_directory[len-1])) {
+ pm_strcat(cleanup, "/");
+ }
+ pm_strcat(cleanup, my_name);
+}
+
+static void cleanup_old_files()
+{
+ POOLMEM *cleanup = get_pool_memory(PM_MESSAGE);
+ POOLMEM *results = get_pool_memory(PM_MESSAGE);
+ copy_base_name(cleanup);
+ pm_strcat(cleanup, "*.restore.*.bsr");
+ run_program(cleanup, 0, results);
+ copy_base_name(cleanup);
+ pm_strcat(cleanup, "*.mail");
+ run_program(cleanup, 0, results);
+ free_pool_memory(cleanup);
+ free_pool_memory(results);
+}