From: Eric Bollengier Date: Thu, 23 Sep 2021 18:55:32 +0000 (+0200) Subject: Add text search for mysql and fix issue with attachment query X-Git-Tag: Beta-15.0.0~750 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=53a3a387d84896816b2c69c549b90e799497372a;p=thirdparty%2Fbacula.git Add text search for mysql and fix issue with attachment query --- diff --git a/bacula/src/cats/bdb_mysql.h b/bacula/src/cats/bdb_mysql.h index 770ab8230..49020807f 100644 --- a/bacula/src/cats/bdb_mysql.h +++ b/bacula/src/cats/bdb_mysql.h @@ -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_ */ diff --git a/bacula/src/cats/cats.c b/bacula/src/cats/cats.c index 5bacb6c5e..fd8dcf57c 100644 --- a/bacula/src/cats/cats.c +++ b/bacula/src/cats/cats.c @@ -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()); } } diff --git a/bacula/src/cats/cats.h b/bacula/src/cats/cats.h index 4201c2929..2a15aa9be 100644 --- a/bacula/src/cats/cats.h +++ b/bacula/src/cats/cats.h @@ -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 */ diff --git a/bacula/src/cats/make_mysql_tables.in b/bacula/src/cats/make_mysql_tables.in index 0b39f96dc..ab45b23cf 100644 --- a/bacula/src/cats/make_mysql_tables.in +++ b/bacula/src/cats/make_mysql_tables.in @@ -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 ( diff --git a/bacula/src/cats/make_postgresql_tables.in b/bacula/src/cats/make_postgresql_tables.in index 283aa80fb..0d7bd9954 100644 --- a/bacula/src/cats/make_postgresql_tables.in +++ b/bacula/src/cats/make_postgresql_tables.in @@ -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); -- -------------------------------------------------------------- diff --git a/bacula/src/cats/mysql.c b/bacula/src/cats/mysql.c index e4ce6de74..df25e97b0 100644 --- a/bacula/src/cats/mysql.c +++ b/bacula/src/cats/mysql.c @@ -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 */ diff --git a/bacula/src/cats/sql_list.c b/bacula/src/cats/sql_list.c index dcf61eba6..7e9e9e5a6 100644 --- a/bacula/src/cats/sql_list.c +++ b/bacula/src/cats/sql_list.c @@ -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; diff --git a/bacula/src/dird/ua_output.c b/bacula/src/dird/ua_output.c index ac7830cb8..3008d7757 100644 --- a/bacula/src/dird/ua_output.c +++ b/bacula/src/dird/ua_output.c @@ -930,8 +930,8 @@ static int do_list_cmd(UAContext *ua, const char *cmd, e_list_type llist) 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])) { - 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)); diff --git a/bacula/src/plugins/fd/test-plugin-fd.c b/bacula/src/plugins/fd/test-plugin-fd.c index 45c5ade7d..552b551d9 100644 --- a/bacula/src/plugins/fd/test-plugin-fd.c +++ b/bacula/src/plugins/fd/test-plugin-fd.c @@ -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\" : \"\",\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\" : \"\",\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\" : \"\",\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\" : \"\",\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 {