]> git.ipfire.org Git - thirdparty/bacula.git/commitdiff
Add text search for mysql and fix issue with attachment query
authorEric Bollengier <eric@baculasystems.com>
Thu, 23 Sep 2021 18:55:32 +0000 (20:55 +0200)
committerEric Bollengier <eric@baculasystems.com>
Thu, 14 Sep 2023 11:56:56 +0000 (13:56 +0200)
bacula/src/cats/bdb_mysql.h
bacula/src/cats/cats.c
bacula/src/cats/cats.h
bacula/src/cats/make_mysql_tables.in
bacula/src/cats/make_postgresql_tables.in
bacula/src/cats/mysql.c
bacula/src/cats/sql_list.c
bacula/src/dird/ua_output.c
bacula/src/plugins/fd/test-plugin-fd.c

index 770ab82306ea9d440f707cff5b67171aa7829729..49020807ffc62bfa3c921b3cab0541b58e547210 100644 (file)
@@ -69,6 +69,7 @@ public:
    bool sql_batch_start(JCR *jcr);
    bool sql_batch_end(JCR *jcr, const char *error);
    bool sql_batch_insert(JCR *jcr, ATTR_DBR *ar);
+   const char *search_op(JCR *jcr, const char *table_col, char *value, POOLMEM **esc, POOLMEM **dest);
 };
 
 #endif /* __BDB_MYSQL_H_ */
index 5bacb6c5e8c611d0def10ef2dcee4077cac3bd68..fd8dcf57cc2daa439e42bee36fa16a86d4f10285 100644 (file)
@@ -496,6 +496,8 @@ static struct json_sql email_json_v1[] = {
 }
  */
 static struct json_sql email_attachment_json_v1[] = {
+   SAME_KW("AttachmentTenant", OT_STRING),
+   SAME_KW("AttachmentOwner", OT_STRING),
    SAME_KW("AttachmentContentType", OT_STRING),
    SAME_KW("AttachmentEmailId", OT_STRING),
    //SAME_KW("AttachmentId", OT_STRING),
@@ -654,24 +656,27 @@ bail_out:
 void META_DBR::get_important_keys(POOLMEM **where)
 {
    if (bstrcasecmp(Type, "email")) {
-      Mmsg(where, "EmailTenant, EmailOwner, EmailFrom, EmailTo, EmailTime, EmailSubject, FileIndex, JobId");
+      Mmsg(where, "EmailTenant, EmailOwner, EmailFrom, EmailTo, EmailTime, EmailSubject, MetaEmail.FileIndex, MetaEmail.JobId");
    } else {
-      Mmsg(where, "AttachmentEmailId, AttachmentSize, AttachmentName, FileIndex, JobId");
+      Mmsg(where, "AttachmentEmailId, AttachmentSize, AttachmentName, MetaAttachment.FileIndex, MetaAttachment.JobId");
    }
 }
 
 void META_DBR::get_all_keys(POOLMEM **where)
 {
    struct json_sql *p;
+   const char *sep=NULL;
    if (bstrcasecmp(Type, "email")) {
       p = email_json_v1;
+      sep = ",MetaEmail.";
    } else {
       p = email_attachment_json_v1;
+      sep = ",MetaAttachment.";
    }
 
-   Mmsg(where, "JobId,FileIndex");
+   Mmsg(where, "Meta%s.JobId,Meta%s.FileIndex", Type, Type);
    for (int i = 0; p[i].sql_name ; i++) {
-      pm_strcat(where, ",");
+      pm_strcat(where, sep);
       pm_strcat(where, p[i].sql_name);
    }
 }
@@ -697,17 +702,16 @@ bool META_DBR::check()
 
 void META_DBR::create_db_filter(JCR *jcr, BDB *db, POOLMEM **where)
 {
-   const char *prefix;
    bool and_or = false;
    POOL_MEM esc(PM_MESSAGE), tmp(PM_MESSAGE);
 
    if (bstrcasecmp(Type, "email")) {
-      prefix = "Email";
+      bstrncpy(Type, "Email", sizeof(Type));
    } else {
-      prefix = "Attachment";
+      bstrncpy(Type, "Attachment", sizeof(Type));
    }
 
-   if (bstrcasecmp(Type, "email"))
+   if (strcmp(Type, "Email") == 0)
    {
       if (all && (*From || *To || *Cc || *Subject || *Tags || *BodyPreview || *Category)) {
          and_or = true;
@@ -802,24 +806,36 @@ void META_DBR::create_db_filter(JCR *jcr, BDB *db, POOLMEM **where)
       }
    }
 
+   if (Owner[0]) {
+      db_escape_string(jcr, jcr->db, esc.c_str(), Owner, strlen(Owner));
+      Mmsg(tmp, " Meta%s.%sOwner = '%s'", Type, Type, esc.c_str());
+      append_filter(where, tmp.c_str());
+   }
+
+   if (Tenant[0]) {
+      db_escape_string(jcr, jcr->db, esc.c_str(), Tenant, strlen(Tenant));
+      Mmsg(tmp, " Meta%s.%sTenant = '%s'", Type, Type, esc.c_str());
+      append_filter(where, tmp.c_str());
+   }
+
    if (MinSize > 0) {
-      Mmsg(tmp, " Meta%s.%sSize >= %llu", prefix, prefix, MinSize);
+      Mmsg(tmp, " Meta%s.%sSize >= %llu", Type, Type, MinSize);
       append_filter(where, tmp.c_str());
    }
 
    if (MaxSize > 0) {
-      Mmsg(tmp, " Meta%s.%sSize <= %llu", prefix, prefix, MaxSize);
+      Mmsg(tmp, " Meta%s.%sSize <= %llu", Type, Type, MaxSize);
       append_filter(where, tmp.c_str());
    }
 
    if (Plugin[0] != 0) {
       db_escape_string(jcr, jcr->db, esc.c_str(), Plugin, strlen(Plugin));
-      Mmsg(tmp, " Meta%s.Plugin='%s'", prefix, esc.c_str());
+      Mmsg(tmp, " Meta%s.Plugin='%s'", Type, esc.c_str());
       append_filter(where, tmp.c_str());
    }
 
-   if (JobId != 0) {
-      Mmsg(tmp, " Meta%s.JobId=%lu", prefix, JobId);
+   if (is_a_number_list(JobIds)) {
+      Mmsg(tmp, " Meta%s.JobId IN (%s)", Type, JobIds);
       append_filter(where, tmp.c_str());
    }
 }
index 4201c2929fc8f23e1bcf57472ab4ab2f937a6ea0..2a15aa9be324097653988954f953d081ee5eb814 100644 (file)
@@ -645,7 +645,6 @@ public:
 class META_DBR: public SMARTALLOC
 {
 public:
-   JobId_t JobId;
    int64_t MinSize;
    int64_t MaxSize;
    int     HasAttachment;
@@ -656,6 +655,7 @@ public:
    int     order;
    int     orderby;             // 0: JobId, FileIndex  1: EmailTime
    bool    all;
+   char   *JobIds;
 
    char    Id[MAX_SEARCH_LENGTH];
    char    Tenant[MAX_SEARCH_LENGTH];
@@ -674,18 +674,22 @@ public:
    char    MaxTime[MAX_NAME_LENGTH];
    char    Plugin[MAX_NAME_LENGTH];
    char    Name[MAX_SEARCH_LENGTH];
-   META_DBR(): JobId(0), MinSize(-1), MaxSize(-1), HasAttachment(-1),
+   char    errmsg[MAX_NAME_LENGTH];
+   META_DBR(): MinSize(-1), MaxSize(-1), HasAttachment(-1),
                isDraft(-1), isRead(-1), offset(0), limit(512), order(0), orderby(0), all(false)
    {
+      JobIds = NULL;
       *Id = *Tenant = *Owner = 0;
       *ClientName = *From = *To = *Cc = *Subject = *Tags = 0;
       *BodyPreview = *Type = *ConversationId = *Category = 0;
       *Name = *MinTime = *MaxTime = *Plugin = 0;
+      *errmsg = 0;
    };
    ~META_DBR() {};
    void get_important_keys(POOLMEM **dest);
    void get_all_keys(POOLMEM **dest);
    void create_db_filter(JCR *jcr, BDB *db, POOLMEM **dest);
+   bool check();                /* check if valid */
 };
 
 /* Call back context for getting a 32/64 bit value from the database */
index 0b39f96dc607e42a6d1e2acb5bd3c8afcf849258..ab45b23cf4d94b4cabbb095e57b205b7b36468dd 100644 (file)
@@ -41,38 +41,36 @@ CREATE TABLE MetaEmail
     EmailOwner                 TINYTEXT,
     EmailId                    TINYTEXT,
     EmailTime                  DATETIME,
-    EmailTags                  BLOB,
-    EmailSubject               BLOB,
-    EmailFolderName            BLOB,
-    EmailFrom                  TINYBLOB,
-    EmailTo                    BLOB,
-    EmailCc                    BLOB,
-    EmailInternetMessageId     TINYBLOB,
-    EmailBodyPreview           BLOB,
-    EmailImportance            TINYBLOB,
-    EmailConversationId        TINYBLOB,
+    EmailTags                  TEXT,
+    EmailSubject               TEXT,
+    EmailFolderName            TEXT,
+    EmailFrom                  TINYTEXT,
+    EmailTo                    TEXT,
+    EmailCc                    TEXT,
+    EmailInternetMessageId     TINYTEXT,
+    EmailBodyPreview           TEXT,
+    EmailImportance            TINYTEXT,
+    EmailConversationId        TINYTEXT,
     EmailIsRead                TINYINT,
     EmailIsDraft               TINYINT,
     EmailHasAttachment                 TINYINT,
     EmailSize                          INTEGER,
-    Plugin                             TINYBLOB,
+    Plugin                             TINYTEXT,
     FileIndex                          INTEGER,
     JobId                              INTEGER
 );
 
-CREATE INDEX meta_emailowner ON MetaEmail (EmailTenant, EmailOwner);
+-- Requires TEXT instead of BLOB
+CREATE FULLTEXT INDEX meta_emailsubjectbody ON MetaEmail 
+       (EmailSubject, EmailBodyPreview, EmailTo, EmailCc, EmailFrom);
+CREATE INDEX meta_emailowner ON MetaEmail (EmailTenant(255), EmailOwner(255));
 CREATE INDEX meta_emailtime on MetaEmail (EmailTime);
-CREATE INDEX meta_emailtags on MetaEmail (EmailTags);
-CREATE INDEX meta_emailfoldername on MetaEmail (EmailFolderName);
-CREATE INDEX meta_emailconversationid on MetaEmail (EmailConversationId);
-CREATE INDEX meta_emailsubjectbody ON MetaEmail (EmailSubject);
-CREATE INDEX meta_emailbodypreview ON MetaEmail (EmailBodyPreview);
-CREATE INDEX meta_emailto ON MetaEmail (EmailTo);
-CREATE INDEX meta_emailfrom ON MetaEmail (EmailFrom);
-CREATE INDEX meta_emailcc ON MetaEmail (EmailCc);
+CREATE INDEX meta_emailtags on MetaEmail (EmailTags(255));
+CREATE INDEX meta_emailfoldername on MetaEmail (EmailFolderName(255));
+CREATE INDEX meta_emailconversationid on MetaEmail (EmailConversationId(255));
 CREATE INDEX meta_emailisread on MetaEmail (EmailIsRead);
 CREATE INDEX meta_emailhasattachment on MetaEmail (EmailHasAttachment);
-CREATE INDEX meta_emailfileindex_jobid on MetaEmail (Jobid, FileIndex);
+CREATE INDEX meta_emailjobid on MetaEmail (Jobid);
 
 CREATE TABLE MetaAttachment
 {
@@ -84,12 +82,14 @@ CREATE TABLE MetaAttachment
     AttachmentContentType      TINYTEXT,
     AttachmentIsInline                 SMALLINT,
     AttachmentSize                     INTEGER,
-    Plugin                             TINYBLOB,
+    Plugin                             TINYTEXT,
     FileIndex                          INTEGER,
     JobId                              INTEGER
 };
 
-CREATE INDEX meta_attachmentemailid ON MetaAttachment USING HASH (AttachmentEmailId);
+CREATE INDEX meta_attachmentowner ON MetaAttachment (AttachmentTenant,AttachmentOwner);
+CREATE INDEX meta_attachmentemailid ON MetaAttachment (AttachmentEmailId);
+CREATE INDEX meta_attachmentjobid on MetaAttachment (Jobid);
 
 CREATE TABLE TagJob
 (
index 283aa80fb8185bd65aaed41de25455397c56b50c..0d7bd9954c8bb301b88a734602a44e618160ec9e 100644 (file)
@@ -71,10 +71,12 @@ CREATE INDEX meta_emailsubjectbody ON MetaEmail
 CREATE INDEX meta_emailimportance on MetaEmail (EmailImportance);
 CREATE INDEX meta_emailisread on MetaEmail (EmailIsRead);
 CREATE INDEX meta_emailhasattachment on MetaEmail (EmailHasAttachment);
-CREATE INDEX meta_emailfileindex_jobid on MetaEmail (Jobid, FileIndex);
+CREATE INDEX meta_emailjobid on MetaEmail (Jobid);
 
 CREATE TABLE MetaAttachment
 (
+    AttachmentTenant            text,
+    AttachmentOwner                    text,
     AttachmentName                     text,
     AttachmentEmailId                  text,
     AttachmentContentType      text,
@@ -85,7 +87,9 @@ CREATE TABLE MetaAttachment
     JobId                              int
 );
 
-CREATE INDEX meta_attachmentemailid ON MetaAttachment USING HASH (AttachmentEmailId);
+CREATE INDEX meta_attachmentowner ON MetaAttachment (AttachmentTenant,AttachmentOwner);
+CREATE INDEX meta_attachmentemailid ON MetaAttachment (AttachmentEmailId);
+CREATE INDEX meta_attachmentjobid ON MetaAttachment (JobId); 
 
 -- --------------------------------------------------------------
 
index e4ce6de743299536cbb2b40aa5d9e4d8ebda30ad..df25e97b0f2b1d7ffe6ec3bcac6517e2a6019313 100644 (file)
@@ -853,5 +853,13 @@ bool BDB_MYSQL::sql_batch_insert(JCR *jcr, ATTR_DBR *ar)
    return true; 
 } 
  
+const char *BDB_MYSQL::search_op(JCR *jcr, const char *table_col, char *value, POOLMEM **esc, POOLMEM **dest)
+{
+   int len = strlen(value);
+   *esc = check_pool_memory_size(*esc, len*2+1);
+   bdb_escape_string(jcr, *esc, value, len);
+   Mmsg(dest, " MATCH(%s) AGAINST ('%s') ", table_col, *esc);
+   return *dest;
+}
  
 #endif /* HAVE_MYSQL */ 
index dcf61eba64796a249533ed95aeff5fee87e4276a..7e9e9e5a6fabad6488ae1824da8ac4ade520991f 100644 (file)
@@ -303,7 +303,7 @@ void BDB::bdb_list_plugin_objects(JCR *jcr, OBJECT_DBR *obj_r, DB_LIST_HANDLER *
    case JSON_LIST:
    case VERT_LIST:
          Mmsg(cmd,
-            "SELECT Object.ObjectId, Object.JobId, Object.Path, Object.Filename, Object.PluginName, Object.ObjectCategory, "
+              "SELECT Object.ObjectId, Object.JobId, Object.Path, Object.Filename, Object.PluginName, Object.ObjectCategory, "
                     "Object.ObjectType, Object.ObjectName, Object.ObjectSource, "
                     "Object.ObjectUUID, Object.ObjectSize, Object.ObjectStatus, Object.ObjectCount "
             "FROM Object %s %s", join.c_str(), where.c_str());
@@ -1299,24 +1299,44 @@ void BDB::bdb_list_tag_records(JCR *jcr, TAG_DBR *tag, DB_LIST_HANDLER *result_h
 void BDB::bdb_list_metadata_records(JCR *jcr, META_DBR *meta_r, DB_LIST_HANDLER *sendit, void *ctx, e_list_type type)
 {
    POOL_MEM esc(PM_MESSAGE), tmp(PM_MESSAGE), where(PM_MESSAGE), join(PM_MESSAGE);
-
    bdb_lock();
-
    //TODO add ACL part
    meta_r->create_db_filter(jcr, this, where.handle());
    Dmsg1(DT_SQL|50, "where=[%s]\n", where.c_str());
 
+   const char *where_filter = get_acls(DB_ACL_BIT(DB_ACL_JOB)     |
+                                       DB_ACL_BIT(DB_ACL_CLIENT), strcmp(where.c_str(), "") == 0);
+
+   const char *join_filter = (*where_filter && meta_r->ClientName[0] == 0) ?
+      get_acl_join_filter(DB_ACL_BIT(DB_ACL_CLIENT)) : "";
+
    if (meta_r->ClientName[0] != 0) {
       bdb_escape_string(jcr, esc.c_str(), meta_r->ClientName, strlen(meta_r->ClientName));
       Mmsg(tmp, " Client.Name='%s'", esc.c_str());
       append_filter(where.handle(), tmp.c_str());
-      Mmsg(join, " JOIN Job USING (JobId) JOIN Client USING (ClientId) ");
+      Mmsg(join, " JOIN Job ON (Job.JobId = Meta%s.JobId) JOIN Client USING (ClientId) ", meta_r->Type);
+
+   } else if (*where_filter) {  // We add manually the Job join filter part
+      Mmsg(join, " JOIN Job ON (Job.JobId = Meta%s.JobId) ", meta_r->Type);
    }
 
+   if (strcmp(meta_r->Type, "Attachment") == 0) {
+      pm_strcat(join, " JOIN MetaEmail ON (EmailId = AttachmentEmailId AND MetaEmail.JobId = MetaAttachment.JobId) ");
+   }
+   
+   if (where_filter && *where_filter) {
+      pm_strcat(where, where_filter);
+   }
+
+   if (join_filter && *join_filter) {
+      pm_strcat(join, join_filter);
+   }
+   
    if (meta_r->orderby == 1) {
       Mmsg(tmp, " ORDER BY EmailTime %s ", meta_r->order ? "DESC" : "ASC");
    } else {
-      Mmsg(tmp, " ORDER BY JobId, FileIndex %s ", meta_r->order ? "DESC" : "ASC");
+      Mmsg(tmp, " ORDER BY Meta%s.JobId, Meta%s.FileIndex %s ",
+           meta_r->Type, meta_r->Type, meta_r->order ? "DESC" : "ASC");
    }
 
    pm_strcat(where, tmp.c_str());
@@ -1331,19 +1351,24 @@ void BDB::bdb_list_metadata_records(JCR *jcr, META_DBR *meta_r, DB_LIST_HANDLER
       pm_strcat(where, tmp.c_str());
    }
 
+
    switch (type) {
    case JSON_LIST:
    case VERT_LIST:
       meta_r->get_all_keys(tmp.handle());
       Mmsg(cmd,
-           "SELECT %s "
-           "FROM Meta%s %s %s", tmp.c_str(), meta_r->Type, join.c_str(), where.c_str());
+           "SELECT %s %s "
+           "FROM Meta%s %s %s",
+           (strcmp(meta_r->Type, "Email") == 0) ? "" : "DISTINCT",
+           tmp.c_str(), meta_r->Type, join.c_str(), where.c_str());
          break;
    case HORZ_LIST:
       meta_r->get_important_keys(tmp.handle());
          Mmsg(cmd,
-            "SELECT %s "
-              "FROM Meta%s %s %s", tmp.c_str(), meta_r->Type, join.c_str(), where.c_str());
+            "SELECT %s %s "
+              "FROM Meta%s %s %s",
+              (strcmp(meta_r->Type, "Email") == 0) ? "" : "DISTINCT",
+              tmp.c_str(), meta_r->Type, join.c_str(), where.c_str());
          break;
    default:
          break;
index ac7830cb8874b79454a210ed337eb0cd643f9661..3008d77579068993cdff519d67b79058ed3a627f 100644 (file)
@@ -930,8 +930,8 @@ static int do_list_cmd(UAContext *ua, const char *cmd, e_list_type llist)
 
          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])) {
-                  meta_r.JobId = str_to_uint64(ua->argv[j]);
+               if (is_a_number_list(ua->argv[j]) && acl_access_jobid_ok(ua, ua->argv[j])) {
+                  meta_r.JobIds = ua->argv[j];
                 } else {
                   ua->error_msg(_("Invalid jobid argument\n"));
                   return 1;
@@ -971,6 +971,12 @@ static int do_list_cmd(UAContext *ua, const char *cmd, e_list_type llist)
             } else if (strcasecmp(ua->argk[j], NT_("type")) == 0) {
                bstrncpy(meta_r.Type, ua->argv[j], sizeof(meta_r.Type));
 
+            } else if (strcasecmp(ua->argk[j], NT_("owner")) == 0) {
+               bstrncpy(meta_r.Owner, ua->argv[j], sizeof(meta_r.Owner));
+
+            } else if (strcasecmp(ua->argk[j], NT_("tenant")) == 0) {
+               bstrncpy(meta_r.Tenant, ua->argv[j], sizeof(meta_r.Tenant));
+
             } else if (strcasecmp(ua->argk[j], NT_("conversationid")) == 0) {
                bstrncpy(meta_r.ConversationId, ua->argv[j], sizeof(meta_r.ConversationId));
 
index 45c5ade7d54b26897a6efbe4c3f020a04aeafc00..552b551d9fc79a77247880b7c660fea8e521b7e7 100644 (file)
@@ -720,9 +720,9 @@ static bRC startBackupFile(bpContext *ctx, struct save_pkt *sp)
          }";
 
          /*TODO change payload to catalog packet when it's defined*/
-         const char *m2 = "{\n   \"EmailBodyPreview\" : \"pretium sollicitudin vocent vulputate te semper partiendo mi cu consectetur antiopam commodo nominavi facilis iaculis montes veniam congue vitae eam ponderum idque doctus condimentum patrioque epicurei amet nominavi possit ancillae quo bibendum definition\",\n   \"EmailCc\" : \"\",\n   \"EmailConversationId\" : \"AAQkAGZmZjBlMjI0LTMxMmEtNDFkMi1hM2YxLWEzNjI5MjY4M2JkMQAQAE9i5o-JJZ5HvgNdGUT4uEA=\",\n   \"EmailFolderName\" : \"jorgegea/users/jonis@jorgegea.onmicrosoft.com/email/REGRESS_20210915123756\",\n   \"EmailFrom\" : \"eric@bacula\",\n   \"EmailHasAttachment\" : 0,\n   \"EmailId\" : \"AAMkAGZmZjBlMjI0LTMxMmEtNDFkMi1hM2YxLWEzNjI5MjY4M2JkMQBGAAAAAAChUr1sDFmcSYm7PK3nvLVxBwB-S4yOymgVRpR5CA4-eilAAABABKyCAAB-S4yOymgVRpR5CA4-eilAAABABPgVAAA=\",\n   \"EmailImportance\" : \"NORMAL\",\n   \"EmailInternetMessageId\" : \"<AM9P190MB144311378E81EB6E8400641689DB9@AM9P190MB1443.EURP190.PROD.OUTLOOK.COM>\",\n   \"EmailIsDraft\" : 0,\n   \"EmailIsRead\" : 1,\n   \"EmailTime\" : \"Sep 15, 2021, 12:39:19 PM\",\n   \"EmailOwner\" : \"xxxx\",\n \"EmailSize\" : 4096,\n \"EmailTenant\": \"xxxxxx-xxxxxx-xxxxxx-xxxx\",\n  \"EmailSubject\" : \"Elaboraret Tellus - t\",\n   \"EmailTags\" : \"\",\n   \"EmailTo\" : \"jorge@bacula\",\n   \"Plugin\" : \"m365\",\n   \"Type\" : \"EMAIL\",\n   \"Version\" : 1\n }";
+         const char *m2 = "{\n   \"EmailBodyPreview\" : \"pretium sollicitudin vocent vulputate te semper partiendo mi cu consectetur antiopam commodo nominavi facilis iaculis montes veniam congue vitae eam ponderum idque doctus condimentum patrioque epicurei amet nominavi possit ancillae quo bibendum definition\",\n   \"EmailCc\" : \"\",\n   \"EmailConversationId\" : \"AAQkAGZmZjBlMjI0LTMxMmEtNDFkMi1hM2YxLWEzNjI5MjY4M2JkMQAQAE9i5o-JJZ5HvgNdGUT4uEA=\",\n   \"EmailFolderName\" : \"jorgegea/users/jonis@jorgegea.onmicrosoft.com/email/REGRESS_20210915123756\",\n   \"EmailFrom\" : \"eric@bacula\",\n   \"EmailHasAttachment\" : 0,\n   \"EmailId\" : \"AAMkAGZmZjBlMjI0LTMxMmEtNDFkMi1hM2YxLWEzNjI5MjY4M2JkMQBGAAAAAAChUr1sDFmcSYm7PK3nvLVxBwB-S4yOymgVRpR5CA4-eilAAABABKyCAAB-S4yOymgVRpR5CA4-eilAAABABPgVAAA=\",\n   \"EmailImportance\" : \"NORMAL\",\n   \"EmailInternetMessageId\" : \"<AM9P190MB144311378E81EB6E8400641689DB9@AM9P190MB1443.EURP190.PROD.OUTLOOK.COM>\",\n   \"EmailIsDraft\" : 0,\n   \"EmailIsRead\" : 1,\n   \"EmailTime\" : \"Sep 15, 2021, 12:39:19 PM\",\n   \"EmailOwner\" : \"xxxx\",\n \"EmailSize\" : 4096,\n \"EmailTenant\": \"xxxx\",\n  \"EmailSubject\" : \"Elaboraret Tellus - t\",\n   \"EmailTags\" : \"\",\n   \"EmailTo\" : \"jorge@bacula\",\n   \"Plugin\" : \"m365\",\n   \"Type\" : \"EMAIL\",\n   \"Version\" : 1\n }";
 
-         const char *m3 = "{\n   \"AttachmentContentType\" : \"application/octet-stream\",\n   \"AttachmentEmailId\" : \"AAMkAGZmZjBlMjI0LTMxMmEtNDFkMi1hM2YxLWEzNjI5MjY4M2JkMQBGAAAAAAChUr1sDFmcSYm7PK3nvLVxBwB-S4yOymgVRpR5CA4-eilAAABABKybAAB-S4yOymgVRpR5CA4-eilAAABABUnfAAA=\",\n   \"AttachmentId\" : \"AAMkAGZmZjBlMjI0LTMxMmEtNDFkMi1hM2YxLWEzNjI5MjY4M2JkMQBGAAAAAAChUr1sDFmcSYm7PK3nvLVxBwB-S4yOymgVRpR5CA4-eilAAABABKybAAB-S4yOymgVRpR5CA4-eilAAABABUnfAAABEgAQAKT86cEi1S9PgA8I5xS0vKA=\",\n   \"AttachmentIsInline\" : 0,\n   \"AttachmentName\" : \"Ancillae.gen\",\n  \"AttachmentSize\" : 81920,\n   \"Plugin\" : \"m365\",\n   \"Type\" : \"ATTACHMENT\",\n   \"Version\" : 1\n}";
+         const char *m3 = "{\n \"AttachmentOwner\" : \"xxxx\", \"AttachmentTenant\" : \"xxxx\", \"AttachmentContentType\" : \"application/octet-stream\",\n   \"AttachmentEmailId\" : \"AAMkAGZmZjBlMjI0LTMxMmEtNDFkMi1hM2YxLWEzNjI5MjY4M2JkMQBGAAAAAAChUr1sDFmcSYm7PK3nvLVxBwB-S4yOymgVRpR5CA4-eilAAABABKybAAB-S4yOymgVRpR5CA4-eilAAABABUnfAAA=\",\n   \"AttachmentId\" : \"AAMkAGZmZjBlMjI0LTMxMmEtNDFkMi1hM2YxLWEzNjI5MjY4M2JkMQBGAAAAAAChUr1sDFmcSYm7PK3nvLVxBwB-S4yOymgVRpR5CA4-eilAAABABKybAAB-S4yOymgVRpR5CA4-eilAAABABUnfAAABEgAQAKT86cEi1S9PgA8I5xS0vKA=\",\n   \"AttachmentIsInline\" : 0,\n   \"AttachmentName\" : \"Ancillae.gen\",\n  \"AttachmentSize\" : 81920,\n   \"Plugin\" : \"m365\",\n   \"Type\" : \"ATTACHMENT\",\n   \"Version\" : 1\n}";
          p_ctx->meta_mgr->add_packet(plugin_meta_blob, strlen(m1)+1, (void *)m1);
          p_ctx->meta_mgr->add_packet(plugin_meta_catalog_email, strlen(m2)+1, (void *)m2);
          p_ctx->meta_mgr->add_packet(plugin_meta_catalog_email, strlen(m3)+1, (void *)m3);
@@ -741,12 +741,12 @@ static bRC startBackupFile(bpContext *ctx, struct save_pkt *sp)
       p_ctx->meta_mgr->reset();
 
       /*TODO change payload to catalog packet when it's defined*/
-      const char *m2 = "{\n   \"EmailBodyPreview\" : \"Hello John, say hello to Veronica. Best Regards\",\n   \"EmailCc\" : \"veronica@gmail.com\",\n   \"EmailConversationId\" : \"AAQkAGZmZjBlMjI0LTMxMmEtNDFkMi1hM2YxLWEzNjI5MjY4M2JkMQAQAE9i5o-JJZ5HvgNdGUTddEA=\",\n   \"EmailFolderName\" : \"jorgegea/users/jonis@jorgegea.onmicrosoft.com/email/REGRESS_20210915123756\",\n   \"EmailFrom\" : \"eric@bacula\",\n   \"EmailHasAttachment\" : 1,\n   \"EmailId\" : \"AAMkAGZmZjBlMjI0LTMxMmEtNDFkMi1hM2Yx\",\n   \"EmailImportance\" : \"IMPORTANT\",\n   \"EmailInternetMessageId\" : \"<AM9P190MB144311378E81EB6E8400641689Ddd@AM9P190MB1443.EURP190.PROD.OUTLOOK.COM>\",\n   \"EmailIsDraft\" : 1,\n   \"EmailIsRead\" : 0,\n   \"EmailTime\" : \"Sep 15, 2021, 12:40:19 PM\",\n   \"EmailOwner\" : \"xxxx\",\n \"EmailSize\" : 4096,\n \"EmailTenant\": \"xxxxxx-xxxxxx-xxxxxx-xxxx\",\n  \"EmailSubject\" : \"Hello From regress\",\n   \"EmailTags\" : \"draft,important,work\",\n   \"EmailTo\" : \"john@bacula\",\n   \"Plugin\" : \"m365\",\n   \"Type\" : \"EMAIL\",\n   \"Version\" : 1\n }";
-      const char *m3 = "{\n   \"AttachmentContentType\" : \"application/octet-stream\",\n   \"AttachmentEmailId\" : \"AAMkAGZmZjBlMjI0LTMxMmEtNDFkMi1hM2Yx\",\n   \"AttachmentId\" : \"AAMkAGZmZjBlMjI0LTMxMmEtNDFkMi1hM2YxLWEzNjI5MjY4M2JkMQBGAAAAAAChUr1sDFmcSYm7PK3nvLVxBwB-S4yOymgVRpR5CA4-eilAAABABKybAAB-S4yOymgVRpR5CA4-eilAAABABUnfAAABEgAQAKT86cEi1S9PgA8I5xS0vKA=\",\n   \"AttachmentIsInline\" : 0,\n   \"AttachmentName\" : \"CV.pdf\",\n  \"AttachmentSize\" : 81920,\n   \"Plugin\" : \"m365\",\n   \"Type\" : \"ATTACHMENT\",\n   \"Version\" : 1\n}";
+      const char *m2 = "{\n   \"EmailBodyPreview\" : \"Hello John, say hello to Veronica. Best Regards\",\n   \"EmailCc\" : \"veronica@gmail.com\",\n   \"EmailConversationId\" : \"AAQkAGZmZjBlMjI0LTMxMmEtNDFkMi1hM2YxLWEzNjI5MjY4M2JkMQAQAE9i5o-JJZ5HvgNdGUTddEA=\",\n   \"EmailFolderName\" : \"jorgegea/users/jonis@jorgegea.onmicrosoft.com/email/REGRESS_20210915123756\",\n   \"EmailFrom\" : \"eric@bacula\",\n   \"EmailHasAttachment\" : 1,\n   \"EmailId\" : \"AAMkAGZmZjBlMjI0LTMxMmEtNDFkMi1hM2Yx\",\n   \"EmailImportance\" : \"IMPORTANT\",\n   \"EmailInternetMessageId\" : \"<AM9P190MB144311378E81EB6E8400641689Ddd@AM9P190MB1443.EURP190.PROD.OUTLOOK.COM>\",\n   \"EmailIsDraft\" : 1,\n   \"EmailIsRead\" : 0,\n   \"EmailTime\" : \"Sep 15, 2021, 12:40:19 PM\",\n   \"EmailOwner\" : \"xxxx\",\n \"EmailSize\" : 4096,\n \"EmailTenant\": \"xxxx\",\n  \"EmailSubject\" : \"Hello From regress\",\n   \"EmailTags\" : \"draft,important,work\",\n   \"EmailTo\" : \"john@bacula\",\n   \"Plugin\" : \"m365\",\n   \"Type\" : \"EMAIL\",\n   \"Version\" : 1\n }";
+      const char *m3 = "{\n   \"AttachmentOwner\" : \"xxxx\", \"AttachmentTenant\" : \"xxxx\", \"AttachmentContentType\" : \"application/octet-stream\",\n   \"AttachmentEmailId\" : \"AAMkAGZmZjBlMjI0LTMxMmEtNDFkMi1hM2Yx\",\n   \"AttachmentId\" : \"AAMkAGZmZjBlMjI0LTMxMmEtNDFkMi1hM2YxLWEzNjI5MjY4M2JkMQBGAAAAAAChUr1sDFmcSYm7PK3nvLVxBwB-S4yOymgVRpR5CA4-eilAAABABKybAAB-S4yOymgVRpR5CA4-eilAAABABUnfAAABEgAQAKT86cEi1S9PgA8I5xS0vKA=\",\n   \"AttachmentIsInline\" : 0,\n   \"AttachmentName\" : \"CV.pdf\",\n  \"AttachmentSize\" : 81920,\n   \"Plugin\" : \"m365\",\n   \"Type\" : \"ATTACHMENT\",\n   \"Version\" : 1\n}";
       p_ctx->meta_mgr->add_packet(plugin_meta_catalog_email, strlen(m2)+1, (void *)m2);
       p_ctx->meta_mgr->add_packet(plugin_meta_catalog_email, strlen(m3)+1, (void *)m3);
       sp->plug_meta = p_ctx->meta_mgr;
-      Dmsg0(0, "Insert metadata!!!!!!\n");
+      Dmsg0(0, "Insert metadata!!!!!! CV.pdf\n");
       return bRC_OK;
 
    } else {