From: Eric Bollengier Date: Tue, 31 May 2022 09:08:33 +0000 (+0200) Subject: Accept jobid list in "list object" command X-Git-Tag: Beta-15.0.0~567 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a1bd2a958672cd063d7ee2682e7807c5f79c77dd;p=thirdparty%2Fbacula.git Accept jobid list in "list object" command --- diff --git a/bacula/src/cats/cats.c b/bacula/src/cats/cats.c index 1c13e36f1..6ac780635 100644 --- a/bacula/src/cats/cats.c +++ b/bacula/src/cats/cats.c @@ -295,7 +295,10 @@ void OBJECT_DBR::create_db_filter(JCR *jcr, POOLMEM **where) Mmsg(tmp, " Object.JobId=%lu", JobId); append_filter(where, tmp.c_str()); } - + if (is_a_number_list(JobIds)) { + Mmsg(tmp, " Object.JobId IN (%s) ", JobIds); + append_filter(where, tmp.c_str()); + } if (Path[0] != 0) { db_escape_string(jcr, jcr->db, esc.c_str(), Path, strlen(Path)); Mmsg(tmp, " Object.Path='%s'", esc.c_str()); diff --git a/bacula/src/cats/cats.h b/bacula/src/cats/cats.h index 17153255c..859c3c14e 100644 --- a/bacula/src/cats/cats.h +++ b/bacula/src/cats/cats.h @@ -248,6 +248,7 @@ public: Path = get_pool_memory(PM_FNAME); Filename = get_pool_memory(PM_FNAME); PluginName = get_pool_memory(PM_FNAME); + JobIds = get_pool_memory(PM_FNAME); reset(); }; @@ -255,6 +256,7 @@ public: free_pool_memory(Path); free_pool_memory(Filename); free_pool_memory(PluginName); + free_pool_memory(JobIds); }; /* reset memory */ @@ -262,7 +264,7 @@ public: JobId = 0; ObjectId = 0; ObjectSize = 0; - *Path = *Filename = *PluginName = 0; + *JobIds = *Path = *Filename = *PluginName = 0; *ObjectCategory = *ObjectType = *ObjectName = *ObjectSource = *ObjectUUID = *ClientName = 0; limit = 0; order = 0; @@ -280,11 +282,12 @@ public: POOLMEM *Path; POOLMEM *Filename; POOLMEM *PluginName; - char ObjectCategory[MAX_NAME_LENGTH]; - char ObjectType[MAX_NAME_LENGTH]; - char ObjectName[MAX_NAME_LENGTH]; - char ObjectSource[MAX_NAME_LENGTH]; - char ObjectUUID[MAX_NAME_LENGTH]; + POOLMEM *JobIds; + char ObjectCategory[MAX_PLUGINOBJ_NAME_LENGTH]; + char ObjectType[MAX_PLUGINOBJ_NAME_LENGTH]; + char ObjectName[MAX_PLUGINOBJ_NAME_LENGTH]; + char ObjectSource[MAX_PLUGINOBJ_NAME_LENGTH]; + char ObjectUUID[MAX_PLUGINOBJ_NAME_LENGTH]; uint64_t ObjectSize; int32_t ObjectStatus; uint32_t ObjectCount; diff --git a/bacula/src/dird/ua_output.c b/bacula/src/dird/ua_output.c index cc6a34b35..3a9bbc1d9 100644 --- a/bacula/src/dird/ua_output.c +++ b/bacula/src/dird/ua_output.c @@ -747,13 +747,14 @@ static int do_list_cmd(UAContext *ua, const char *cmd, e_list_type llist) /* List PLUGIN OBJECTS */ } else if (strcasecmp(ua->argk[i], NT_("object")) == 0 || - strcasecmp(ua->argk[i], NT_("objects")) == 0) { + strcasecmp(ua->argk[i], NT_("objects")) == 0) + { OBJECT_DBR obj_r; for (j=i+1; jargc; j++) { if (strcasecmp(ua->argk[j], NT_("jobid")) == 0 && ua->argv[j]) { - if (is_a_number(ua->argv[j]) && acl_access_jobid_ok(ua, ua->argv[j])) { - obj_r.JobId = str_to_uint64(ua->argv[j]); + if (is_a_number_list(ua->argv[j]) && acl_access_jobid_ok(ua, ua->argv[j])) { + pm_strcpy(obj_r.JobIds, ua->argv[j]); } else { ua->error_msg(_("Invalid jobid argument\n")); return 1;