From c91741ad1f925b3acc828d88d28b82f640eb6997 Mon Sep 17 00:00:00 2001 From: Kamen Mazdrashki Date: Thu, 19 Jun 2014 19:43:14 +0200 Subject: [PATCH] oc/dbmsgreader: Fix to work again this time basen on BSON format for msg data Also, implement reading for message data in case only 1 param is passed. This could be usefull when have msg data by other means than by reading it directly from DB Signed-off-by: Kamen Mazdrashki --- OpenChange/GNUmakefile | 3 ++- OpenChange/dbmsgreader.m | 20 +++++++++++++++++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/OpenChange/GNUmakefile b/OpenChange/GNUmakefile index 2a7bac557..6f52587a7 100644 --- a/OpenChange/GNUmakefile +++ b/OpenChange/GNUmakefile @@ -133,7 +133,8 @@ $(PLREADER_TOOL)_OBJC_FILES += \ DBMSGREADER_TOOL = dbmsgreader $(DBMSGREADER_TOOL)_OBJC_FILES += \ - dbmsgreader.m + dbmsgreader.m \ + NSObject+PropertyList.m $(DBMSGREADER_TOOL)_LIB_DIRS += \ -L../SoObjects/SOGo/SOGo.framework/ -lSOGo \ diff --git a/OpenChange/dbmsgreader.m b/OpenChange/dbmsgreader.m index 97b3356d0..8e56655b8 100644 --- a/OpenChange/dbmsgreader.m +++ b/OpenChange/dbmsgreader.m @@ -36,10 +36,20 @@ #import "MAPIStoreUserContext.h" #import -#import "NSObject+PropertyList.m" +#import +#import "NSObject+PropertyList.h" Class MAPIStoreUserContextK, SOGoMAPIDBObjectK; +static void +DumpBSONData(NSData *data) +{ + NSDictionary *dvalue; + dvalue = [data BSONValue]; + [dvalue displayWithIndentation:0]; + printf("\n"); +} + static void DbDumpObject (NSString *username, NSString *path) { @@ -55,8 +65,9 @@ DbDumpObject (NSString *username, NSString *path) record = [dbobject lookupRecord: path newerThanVersion: -1]; if (record) { + printf("record found: %p\n", record); content = [[record objectForKey: @"c_content"] dataByDecodingBase64]; - OCDumpPListData (content); + DumpBSONData(content); } else NSLog (@"record not found"); @@ -99,9 +110,12 @@ int main (int argc, char *argv[], char *envp[]) SOGoMAPIDBObjectK = NSClassFromString (@"SOGoMAPIDBObject"); arguments = [[NSProcessInfo processInfo] arguments]; - if ([arguments count] > 2) + if ([arguments count] > 2) { DbDumpObject ([arguments objectAtIndex: 1], [arguments objectAtIndex: 2]); + } else if ([arguments count] > 1) { + DumpBSONData([[arguments objectAtIndex:1] dataByDecodingBase64]); + } [pool release];