/*
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);
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;
* 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;
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);
+}