]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/dird.c
Ensure that StorageId is updated after write
[bacula/bacula] / bacula / src / dird / dird.c
index 6eff0089d8548de9f73802bdb5be0315527527f5..c897b6e50cf3f73c7ce416f1a6446a0a3e95e561 100644 (file)
@@ -1,7 +1,7 @@
 /*
    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.
@@ -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;
 
@@ -1018,15 +1021,15 @@ static bool check_catalog(cat_op mode)
       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;
@@ -1120,3 +1123,32 @@ static bool check_catalog(cat_op mode)
    }
    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);
+}