X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Ffiled%2Fjob.c;h=4a224cd68f9591969de13dece0780ee4c9943ff8;hb=cbfe8e1c9fd311e7ed6d102b35996a31a6e95497;hp=803a0802853069601b9c3ddaa8c0e11c1e30229f;hpb=bcfd5036367326df25fec105aa244425f86112f4;p=bacula%2Fbacula diff --git a/bacula/src/filed/job.c b/bacula/src/filed/job.c index 803a080285..4a224cd68f 100644 --- a/bacula/src/filed/job.c +++ b/bacula/src/filed/job.c @@ -624,17 +624,21 @@ static int restore_object_cmd(JCR *jcr) { BSOCK *dir = jcr->dir_bsock; POOLMEM *msg = get_memory(dir->msglen+1); - uint32_t JobId; - int32_t object_len, object_index, object_type, FileIndex; + int32_t FileIndex; + restore_object_pkt rop; + memset(&rop, 0, sizeof(rop)); + rop.pkt_size = sizeof(rop); + rop.pkt_end = sizeof(rop); Dmsg1(100, "Enter restoreobject_cmd: %s", dir->msg); if (strcmp(dir->msg, endrestoreobjectcmd) == 0) { + generate_plugin_event(jcr, bEventRestoreObject, NULL); free_memory(msg); return dir->fsend(OKRestoreObject); } - if (sscanf(dir->msg, restoreobjcmd, &JobId, &object_len, &object_index, - &object_type, &FileIndex) != 5) { + if (sscanf(dir->msg, restoreobjcmd, &rop.JobId, &rop.object_len, + &rop.object_index, &rop.object_type, &FileIndex) != 5) { Dmsg0(5, "Bad restore object command\n"); pm_strcpy(jcr->errmsg, dir->msg); Jmsg1(jcr, M_FATAL, 0, _("Bad RestoreObject command: %s\n"), jcr->errmsg); @@ -643,24 +647,32 @@ static int restore_object_cmd(JCR *jcr) // Dmsg5(000, "Recv object: JobId=%u objlen=%d objinx=%d objtype=%d FI=%d\n", // JobId, object_len, object_index, object_type, FileIndex); - /* Read Fname */ + /* Read Object name */ if (dir->recv() < 0) { goto bail_out; } -// Dmsg2(000, "Recv Fname object: len=%d Fname=%s\n", dir->msglen, dir->msg); +// Dmsg2(000, "Recv Fname object: len=%d Oname=%s\n", dir->msglen, dir->msg); + rop.object_name = bstrdup(dir->msg); - /* Read Path */ - if (dir->recv() < 0) { - goto bail_out; - } // Dmsg2(000, "Recv Path object: len=%d Path=%s\n", dir->msglen, dir->msg); /* Read Object */ if (dir->recv() < 0) { goto bail_out; } + rop.object = dir->msg; // Dmsg2(000, "Recv Object: len=%d Object=%s\n", dir->msglen, dir->msg); + /* pass to plugin */ + generate_plugin_event(jcr, bEventRestoreObject, (void *)&rop); + + if (rop.object_name) { + free(rop.object_name); + } + if (!rop.object) { + dir->msg = get_pool_memory(PM_MESSAGE); + } + free_memory(msg); Dmsg1(100, "Send: %s", OKRestoreObject); return 1; @@ -1748,20 +1760,7 @@ static int backup_cmd(JCR *jcr) cleanup: #if defined(WIN32_VSS) - /* STOP VSS ON WIN32 */ - /* tell vss to close the backup session */ if (jcr->VSS) { - if (g_pVSSClient->CloseBackup()) { - /* inform user about writer states */ - for (int i=0; i<(int)g_pVSSClient->GetWriterCount(); i++) { - int msg_type = M_INFO; - if (g_pVSSClient->GetWriterState(i) < 1) { - msg_type = M_WARNING; - jcr->JobErrors++; - } - Jmsg(jcr, msg_type, 0, _("VSS Writer (BackupComplete): %s\n"), g_pVSSClient->GetWriterInfo(i)); - } - } Win32ConvCleanupCache(); V(vss_mutex); } @@ -1851,8 +1850,7 @@ static int verify_cmd(JCR *jcr) #ifdef WIN32_VSS static bool vss_restore_init_callback(JCR *jcr, int init_type) { - switch (init_type) - { + switch (init_type) { case VSS_INIT_RESTORE_AFTER_INIT: generate_plugin_event(jcr, bEventVssRestoreLoadComponentMetadata); return true;