]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/cats/bdb_update.c
Fix segfault from double free or RestoreBootstrap; add L_NONE for restore and admin...
[bacula/bacula] / bacula / src / cats / bdb_update.c
index 0b043af65e1bd83aa0a8b70b628f03e79ce46098..cfba217730199b8914f48dcb9f50775396112a96 100755 (executable)
  * most current start fields to the job record.
  * It is assumed that you did a db_create_job_record() already.
  */
-int db_update_job_start_record(void *jcr, B_DB *mdb, JOB_DBR *jr)    
+int db_update_job_start_record(JCR *jcr, B_DB *mdb, JOB_DBR *jr)    
 {
    int len, stat = 1;
    JOB_DBR ojr;
 
+   db_lock(mdb);
+
    Dmsg0(200, "In db_update_job_start_record\n");
    len = sizeof(ojr);
    memcpy(&ojr, jr, len);
 
    if (!db_get_job_record(jcr, mdb, &ojr)) {
+      db_unlock(mdb);
       return 0;
    }
 
-   db_lock(mdb);
 
    fseek(mdb->jobfd, ojr.rec_addr, SEEK_SET);
    if (fwrite(jr, len, 1, mdb->jobfd) != 1) {
@@ -91,21 +93,22 @@ int db_update_job_start_record(void *jcr, B_DB *mdb, JOB_DBR *jr)
  * This is called at Job termination time to add all the
  * other fields to the job record.
  */
-int db_update_job_end_record(void *jcr, B_DB *mdb, JOB_DBR *jr)    
+int db_update_job_end_record(JCR *jcr, B_DB *mdb, JOB_DBR *jr)   
 {
    int len, stat = 1;
    JOB_DBR ojr;
 
+   db_lock(mdb);
+
    Dmsg0(200, "In db_update_job_start_record\n");
    len = sizeof(ojr);
    memcpy(&ojr, jr, len);
 
    if (!db_get_job_record(jcr, mdb, &ojr)) {
+      db_unlock(mdb);
       return 0;
    }
 
-   db_lock(mdb);
-
    fseek(mdb->jobfd, ojr.rec_addr, SEEK_SET);
    if (fwrite(jr, len, 1, mdb->jobfd) != 1) {
       Mmsg1(&mdb->errmsg, _("Error updating DB Job file. ERR=%s\n"), strerror(errno));
@@ -118,22 +121,23 @@ int db_update_job_end_record(void *jcr, B_DB *mdb, JOB_DBR *jr)
 }
 
 
-int db_update_media_record(void *jcr, B_DB *mdb, MEDIA_DBR *mr) 
+int db_update_media_record(JCR *jcr, B_DB *mdb, MEDIA_DBR *mr) 
 { 
    int stat = 1;
    MEDIA_DBR omr;
    int len;
        
+   db_lock(mdb);
    Dmsg0(200, "In db_update_media_record\n");
    mr->MediaId = 0;
    len = sizeof(omr);
    memcpy(&omr, mr, len);
 
    if (!db_get_media_record(jcr, mdb, &omr)) {
+      db_unlock(mdb);
       return 0;
    }
 
-   db_lock(mdb);
 
    /* Don't allow some fields to change by copying from master record */
    strcpy(mr->VolumeName, omr.VolumeName);
@@ -155,21 +159,22 @@ int db_update_media_record(void *jcr, B_DB *mdb, MEDIA_DBR *mr)
    return stat;
 }
 
-int db_update_pool_record(void *jcr, B_DB *mdb, POOL_DBR *pr) 
+int db_update_pool_record(JCR *jcr, B_DB *mdb, POOL_DBR *pr) 
 { 
    int stat = 1;
    POOL_DBR opr;
    int len;
        
+   db_lock(mdb);
    Dmsg0(200, "In db_update_pool_record\n");
    len = sizeof(opr);
    memcpy(&opr, pr, len);
 
    if (!db_get_pool_record(jcr, mdb, &opr)) {
+      db_unlock(mdb);
       return 0;
    }
 
-   db_lock(mdb);
 
    /* Update specific fields */
    opr.NumVols = pr->NumVols;
@@ -192,15 +197,25 @@ int db_update_pool_record(void *jcr, B_DB *mdb, POOL_DBR *pr)
    return stat;
 }
 
-int db_add_SIG_to_file_record(void *jcr, B_DB *mdb, FileId_t FileId, char *SIG, int type)
+int db_add_SIG_to_file_record(JCR *jcr, B_DB *mdb, FileId_t FileId, char *SIG, int type)
 {
    return 1;
 }
 
-int db_mark_file_record(void *jcr, B_DB *mdb, FileId_t FileId, JobId_t JobId)
+int db_mark_file_record(JCR *jcr, B_DB *mdb, FileId_t FileId, JobId_t JobId)
 { 
    return 1;
 }
 
+int db_update_client_record(JCR *jcr, B_DB *mdb, CLIENT_DBR *cr)
+{
+   return 1;
+}
+
+int db_update_counter_record(JCR *jcr, B_DB *mdb, COUNTER_DBR *cr)
+{
+   return 0;
+}
+
 
 #endif /* HAVE_BACULA_DB */