From: Michal Rakowski Date: Thu, 15 Oct 2020 05:52:24 +0000 (+0200) Subject: bscan: Add Restore Object handling X-Git-Tag: Release-11.3.2~995 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ed9e1f680a3081b38be2a98fb8bcdd5eeb9b6cc2;p=thirdparty%2Fbacula.git bscan: Add Restore Object handling --- diff --git a/bacula/src/cats/cats.c b/bacula/src/cats/cats.c index 2ffbda6e2..fdf227f74 100644 --- a/bacula/src/cats/cats.c +++ b/bacula/src/cats/cats.c @@ -234,5 +234,40 @@ void OBJECT_DBR::parse_plugin_object_string(char **obj_str) ObjectSize = str_to_uint64(p); } + +void parse_restore_object_string(char **r_obj_str, ROBJECT_DBR *robj_r) +{ + char *p = *r_obj_str; + int len; + + robj_r->FileIndex = str_to_int32(p); /* FileIndex */ + skip_nonspaces(&p); + skip_spaces(&p); + robj_r->FileType = str_to_int32(p); /* FileType */ + skip_nonspaces(&p); + skip_spaces(&p); + robj_r->object_index = str_to_int32(p); /* Object Index */ + skip_nonspaces(&p); + skip_spaces(&p); + robj_r->object_len = str_to_int32(p); /* object length possibly compressed */ + skip_nonspaces(&p); + skip_spaces(&p); + robj_r->object_full_len = str_to_int32(p); /* uncompressed object length */ + skip_nonspaces(&p); + skip_spaces(&p); + robj_r->object_compression = str_to_int32(p); /* compression */ + skip_nonspaces(&p); + skip_spaces(&p); + + robj_r->plugin_name = p; /* point to plugin name */ + len = strlen(robj_r->plugin_name); + robj_r->object_name = &robj_r->plugin_name[len+1]; /* point to object name */ + len = strlen(robj_r->object_name); + robj_r->object = &robj_r->object_name[len+1]; /* point to object */ + robj_r->object[robj_r->object_len] = 0; /* add zero for those who attempt printing */ + Dmsg7(100, "oname=%s stream=%d FT=%d FI=%d JobId=%ld, obj_len=%d\nobj=\"%s\"\n", + robj_r->object_name, robj_r->Stream, robj_r->FileType, robj_r->FileIndex, robj_r->JobId, + robj_r->object_len, robj_r->object); +} #endif /* HAVE_SQLITE3 || HAVE_MYSQL || HAVE_POSTGRESQL */ diff --git a/bacula/src/stored/bscan.c b/bacula/src/stored/bscan.c index d61d58e3d..69bdbf82e 100644 --- a/bacula/src/stored/bscan.c +++ b/bacula/src/stored/bscan.c @@ -784,46 +784,6 @@ static bool record_cb(DCR *dcr, DEV_RECORD *rec) break; } - case STREAM_PLUGIN_OBJECT: - { - OBJECT_DBR obj_r; - char *buf = rec->data; - num_plugin_objects++; - - skip_nonspaces(&buf); /* Skip FileIndex */ - skip_spaces(&buf); - skip_nonspaces(&buf); /* Skip FileType */ - skip_spaces(&buf); - - parse_plugin_object_string(&buf, &obj_r); - - // Need to get new jobId if possible - mjcr = get_jcr_by_session(rec->VolSessionId, rec->VolSessionTime); - if (!mjcr) { - Pmsg2(000, _("Could not find SessId=%d SessTime=%d for PluginObject record.\n"), - rec->VolSessionId, rec->VolSessionTime); - break; - } - - obj_r.JobId = mjcr->JobId; - - if (db_get_plugin_object_record(mjcr, db, &obj_r)) { - if (verbose) { - Pmsg1(0, _("RESTORE_OBJECT: Found Plugin Object \"%s\" in the catalog\n"), obj_r.ObjectName); - } - } else if (update_db) { - /* Send it */ - Pmsg1(0, _("PLUGIN_OBJECT: Inserting Plugin Object \"%s\" into the catalog\n"), obj_r.ObjectName); - if (!db_create_object_record(mjcr, db, &obj_r)) { - Jmsg1(mjcr, M_FATAL, 0, _("Plugin object create error. %s"), db_strerror(db)); - } - } else { - Pmsg1(0, _("PLUGIN_OBJECT: Found Plugin Object \"%s\" on the volume\n"), obj_r.ObjectName); - } - - break; - } - case STREAM_PLUGIN_OBJECT: { OBJECT_DBR obj_r;