]> git.ipfire.org Git - thirdparty/bacula.git/commitdiff
Accept jobid list in "list object" command
authorEric Bollengier <eric@baculasystems.com>
Tue, 31 May 2022 09:08:33 +0000 (11:08 +0200)
committerEric Bollengier <eric@baculasystems.com>
Thu, 14 Sep 2023 11:56:58 +0000 (13:56 +0200)
bacula/src/cats/cats.c
bacula/src/cats/cats.h
bacula/src/dird/ua_output.c

index 1c13e36f1ead1fd06b418291e786512ac3c150ae..6ac7806354d68076540f3dc0bacce68baab5ae5c 100644 (file)
@@ -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());
index 17153255cc3db525964145c4c054a2533f3160bc..859c3c14eb44a9db76c733873c81faecc4b92b5c 100644 (file)
@@ -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;
index cc6a34b35d590ecb16e136183029f4c1da010c22..3a9bbc1d9db292f418424aa02a5bc7c627d430c3 100644 (file)
@@ -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; j<ua->argc; 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;