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_ */
}
*/
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),
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);
}
}
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;
}
}
+ 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());
}
}
class META_DBR: public SMARTALLOC
{
public:
- JobId_t JobId;
int64_t MinSize;
int64_t MaxSize;
int HasAttachment;
int order;
int orderby; // 0: JobId, FileIndex 1: EmailTime
bool all;
+ char *JobIds;
char Id[MAX_SEARCH_LENGTH];
char Tenant[MAX_SEARCH_LENGTH];
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 */
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
{
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
(
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,
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);
-- --------------------------------------------------------------
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 */
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());
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());
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;
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;
} 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));
}";
/*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);
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 {