]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/dird.c
Tweak example SD plugin.
[bacula/bacula] / bacula / src / dird / dird.c
index fadba9eb9642754e01c0b04d4f489b946f670e05..9f1667fc2c15867210b29f6aa65eefd67b50f7a3 100644 (file)
@@ -6,7 +6,7 @@
    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 two of the GNU General Public
+   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.
 
@@ -15,7 +15,7 @@
    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 General Public License
+   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.
@@ -53,6 +53,7 @@ extern int job_setattr(PyObject *self, char *attrname, PyObject *value);
 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);
@@ -282,6 +283,8 @@ int main (int argc, char *argv[])
 
    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;
 
@@ -296,8 +299,8 @@ int main (int argc, char *argv[])
    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;
@@ -447,7 +450,7 @@ static void free_saved_resources(int table)
  */
 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();
@@ -941,10 +944,11 @@ static bool check_catalog(cat_op mode)
        * 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);
@@ -959,9 +963,6 @@ static bool check_catalog(cat_op mode)
          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());
@@ -1115,9 +1116,39 @@ static bool check_catalog(cat_op mode)
          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);
+}