Hi Murray,

Actually I have just released a couple of tools in master recently that
let you exactly extract this information:
    - rpcextract to extract rpc MAPI stub data into individual
request/response files
    - mapipropsdump to do the context mapping and dump the DATA_BLOB as
a structure

I have planned to release a technical recipe about this next week on
openchange.org, but maybe we can start the discussion on the list and
you can help writing the technical recipe?

Julien.

On 21/12/14 17:07, Murray McCulligh wrote:
> Hi all,
>  
> I've come across an issue in MAPIProxy. It seems that if a response
> buffer contains a response (such as RopFindRow) that holds PropertyRow
> data, all responses after that in the buffer are not extracted into
> structures and are contained within the data blob.
>  
> Unfortunately I don't see how MAPIProxy can easily fix this since I
> believe determining how much data the RopFindRow response contains
> requires decoding the properties and that might require knowing the
> requested order of properties set in a previous SetColumns request.
>  
> Any ideas on how to address this would be welcome.
>  
> Murray
>  
> Dump of this occurring....
>  
>      EcDoRpc: struct EcDoRpc
>         in: struct EcDoRpc
>             handle                   : *
>                 handle: struct policy_handle
>                     handle_type              : 0x00000000 (0)
>                     uuid                     :
> 873babaf-1b2d-40eb-bcaa-33e92e80bf20
>             size                     : 0x00007fff (32767)
>             offset                   : 0x00000000 (0)
>             mapi_request             : *
>                 mapi_len                 : 0x00000142 (322)
>                 length                   : 0x0122 (290)
>                     mapi_request: struct EcDoRpc_MAPI_REQ
>                         opnum                    : 0x05 (5)
>                         logon_id                 : 0x01 (1)
>                         handle_idx               : 0x00 (0)
>                         u                        : union
> EcDoRpc_MAPI_REQ_UNION(case 5)
>                         mapi_GetContentsTable: struct GetContentsTable_req
>                             handle_idx               : 0x01 (1)
>                             TableFlags               : 0x02 (2)
>                                    1: TableFlags_Associated   
>                                    0: TableFlags_Depth        
>                                    0: TableFlags_DeferredErrors
>                                    0: TableFlags_NoNotifications
>                                    0: TableFlags_SoftDeletes  
>                                    0: TableFlags_UseUnicode   
>                                    0: TableFlags_SuppressNotifications
>                     mapi_request: struct EcDoRpc_MAPI_REQ
>                         opnum                    : 0x12 (18)
>                         logon_id                 : 0x01 (1)
>                         handle_idx               : 0x01 (1)
>                         u                        : union
> EcDoRpc_MAPI_REQ_UNION(case 18)
>                         mapi_SetColumns: struct SetColumns_req
>                             SetColumnsFlags          :
> SetColumns_TBL_SYNC (0)
>                             prop_count               : 0x0007 (7)
>                             properties: ARRAY(7)
>                                 properties               :
> PidTagFolderId (0x67480014)
>                                 properties               : PidTagMid
> (0x674A0014)
>                                 properties               :
> PidTagInstID (0x674D0014)
>                                 properties               :
> PidTagInstanceNum (0x674E0003)
>                                 properties               :
> PidTagMessageClass (0x1A001F)
>                                 properties               :
> PidTagConversationTopic (0x70001F)
>                                 properties               :
> PidTagReportName (0x3A001F)
>                     mapi_request: struct EcDoRpc_MAPI_REQ
>                         opnum                    : 0x13 (19)
>                         logon_id                 : 0x01 (1)
>                         handle_idx               : 0x01 (1)
>                         u                        : union
> EcDoRpc_MAPI_REQ_UNION(case 19)
>                         mapi_SortTable: struct SortTable_req
>                             SortTableFlags           : 0x00 (0)
>                             lpSortCriteria: struct SSortOrderSet
>                                 cSorts                   : 0x0001 (1)
>                                 cCategories              : 0x0000 (0)
>                                 cExpanded                : 0x0000 (0)
>                                 aSort: ARRAY(1)
>                                     aSort: struct SSortOrder
>                                         ulPropTag                :
> PidTagMessageClass (0x1A001F)
>                                         ulOrder                  :
> TABLE_SORT_ASCEND (0x0)
>                     mapi_request: struct EcDoRpc_MAPI_REQ
>                         opnum                    : 0x4f (79)
>                         logon_id                 : 0x01 (1)
>                         handle_idx               : 0x01 (1)
>                         u                        : union
> EcDoRpc_MAPI_REQ_UNION(case 79)
>                         mapi_FindRow: struct FindRow_req
>                             ulFlags                  : DIR_FORWARD (0)
>                             res: struct mapi_SRestriction
>                                 rt                       : 0x04 (4)
>                                 res                      : union
> mapi_SRestriction_CTR(case 4)
>                                 resProperty: struct
> mapi_SPropertyRestriction
>                                     relop                    : 0x03 (3)
>                                     ulPropTag                :
> PidTagMessageClass (0x1A001F)
>                                     lpProp: struct mapi_SPropValue
>                                         ulPropTag                :
> PidTagMessageClass (0x1A001F)
>                                         value                    :
> union mapi_SPropValue_CTR(case 31)
>                                         lpszW                    :
> 'IPM.Microsoft.PendingChange.'
>                             origin                   :
> BOOKMARK_BEGINNING (0)
>                             bookmark                 : SBinary_short cb=0
>                     mapi_request: struct EcDoRpc_MAPI_REQ
>                         opnum                    : 0x02 (2)
>                         logon_id                 : 0x01 (1)
>                         handle_idx               : 0x02 (2)
>                         u                        : union
> EcDoRpc_MAPI_REQ_UNION(case 2)
>                         mapi_OpenFolder: struct OpenFolder_req
>                             handle_idx               : 0x03 (3)
>                             folder_id                :
> 0x4c00000000000001 (5476377146882523137)
>                             OpenModeFlags            :
> OpenModeFlags_Folder (0)
>                     mapi_request: struct EcDoRpc_MAPI_REQ
>                         opnum                    : 0x29 (41)
>                         logon_id                 : 0x01 (1)
>                         handle_idx               : 0x02 (2)
>                         u                        : union
> EcDoRpc_MAPI_REQ_UNION(case 41)
>                         mapi_RegisterNotification: struct
> RegisterNotification_req
>                             handle_idx               : 0x04 (4)
>                             NotificationFlags        : 0x0078 (120)
>                                    0: fnevCriticalError       
>                                    0: fnevNewMail             
>                                    0: fnevObjectCreated       
>                                    1: fnevObjectDeleted       
>                                    1: fnevObjectModified      
>                                    1: fnevObjectMoved         
>                                    1: fnevObjectCopied        
>                                    0: fnevSearchComplete      
>                                    0: fnevTableModified       
>                                    0: fnevStatusObjectModified
>                                    0: fnevReserved            
>                                    0: fnevTbit                
>                                    0: fnevUbit                
>                                    0: fnevSbit                
>                                    0: fnevMbit                
>                             WantWholeStore           : 0x00 (0)
>                             FolderId                 : union
> hyperbool(case 0)
>                             ID                       :
> 0x4c00000000000001 (5476377146882523137)
>                             MessageId                : union
> hyperbool(case 0)
>                             ID                       :
> 0x0000000000000000 (0)
>                     mapi_request: struct EcDoRpc_MAPI_REQ
>                         opnum                    : 0x07 (7)
>                         logon_id                 : 0x01 (1)
>                         handle_idx               : 0x03 (3)
>                         u                        : union
> EcDoRpc_MAPI_REQ_UNION(case 7)
>                         mapi_GetProps: struct GetProps_req
>                             PropertySizeLimit        : 0x0000 (0)
>                             WantUnicode              : 0x0001 (1)
>                             prop_count               : 0x0012 (18)
>                             properties: ARRAY(18)
>                                 properties               :
> PidTagParentFolderId (0x67490014)
>                                 properties               :
> PidTagAccess (0xFF40003)
>                                 properties               :
> UNKNOWN_ENUM_VALUE (0x66720102)
>                                 properties               :
> PidTagDefaultPostMessageClass (0x36E5001F)
>                                 properties               :
> UNKNOWN_ENUM_VALUE (0x36E6001F)
>                                 properties               :
> PidTagDisplayName (0x3001001F)
>                                 properties               :
> PidTagFolderType (0x36010003)
>                                 properties               :
> PidTagContentCount (0x36020003)
>                                 properties               :
> PidTagContentUnreadCount (0x36030003)
>                                 properties               :
> PidTagSubfolders (0x360A000B)
>                                 properties               :
> PidTagContainerClass (0x3613001F)
>                                 properties               :
> UNKNOWN_ENUM_VALUE (0x36160102)
>                                 properties               :
> UNKNOWN_ENUM_VALUE (0x36DE0003)
>                                 properties               :
> UNKNOWN_ENUM_VALUE (0x36DF0102)
>                                 properties               :
> UNKNOWN_ENUM_VALUE (0x36E00102)
>                                 properties               :
> UNKNOWN_ENUM_VALUE (0x36E10003)
>                                 properties               :
> PidTagExtendedFolderFlags (0x36DA0102)
>                                 properties               :
> UNKNOWN_ENUM_VALUE (0x672D0003)
>                     mapi_request: struct EcDoRpc_MAPI_REQ
>                         opnum                    : 0x01 (1)
>                         logon_id                 : 0x01 (1)
>                         handle_idx               : 0x05 (5)
>                         u                        : union
> EcDoRpc_MAPI_REQ_UNION(case 1)
>                         mapi_Release: struct Release_req
>                     mapi_request: struct EcDoRpc_MAPI_REQ
>                         opnum                    : 0x03 (3)
>                         logon_id                 : 0x01 (1)
>                         handle_idx               : 0x02 (2)
>                         u                        : union
> EcDoRpc_MAPI_REQ_UNION(case 3)
>                         mapi_OpenMessage: struct OpenMessage_req
>                             handle_idx               : 0x06 (6)
>                             CodePageId               : 0x0fff (4095)
>                             FolderId                 :
> 0x8814000000000001 (-8641281785017139199)
>                             OpenModeFlags            : BestAccess (3)
>                             MessageId                :
> 0x0f19000000000001 (1087900784986685441)
>                     mapi_request: struct EcDoRpc_MAPI_REQ
>                         opnum                    : 0x2b (43)
>                         logon_id                 : 0x01 (1)
>                         handle_idx               : 0x06 (6)
>                         u                        : union
> EcDoRpc_MAPI_REQ_UNION(case 43)
>                         mapi_OpenStream: struct OpenStream_req
>                             handle_idx               : 0x07 (7)
>                             PropertyTag              :
> PidTagRwRulesStream (0x68020102)
>                             OpenModeFlags            :
> OpenStream_ReadOnly (0)
>                     mapi_request: struct EcDoRpc_MAPI_REQ
>                         opnum                    : 0x2c (44)
>                         logon_id                 : 0x01 (1)
>                         handle_idx               : 0x07 (7)
>                         u                        : union
> EcDoRpc_MAPI_REQ_UNION(case 44)
>                         mapi_ReadStream: struct ReadStream_req
>                             ByteCount                : 0x7c00 (31744)
>                             MaximumByteCount         : union
> MaximumByteCount(case 31744)
>                     mapi_request             : (handles) number=8
>                         handle                   : 0x0000006a (106)
>                         handle                   : 0xffffffff (4294967295)
>                         handle                   : 0x00000047 (71)
>                         handle                   : 0xffffffff (4294967295)
>                         handle                   : 0xffffffff (4294967295)
>                         handle                   : 0x0000005b (91)
>                         handle                   : 0xffffffff (4294967295)
>                         handle                   : 0xffffffff (4294967295)
>                 length                   : *
>                     length                   : 0x0142 (322)
>                 max_data                 : 0x7fff (32767)
>      EcDoRpc: struct EcDoRpc
>         out: struct EcDoRpc
>             handle                   : *
>                 handle: struct policy_handle
>                     handle_type              : 0x00000000 (0)
>                     uuid                     :
> 873babaf-1b2d-40eb-bcaa-33e92e80bf20
>             size                     : 0x00007fff (32767)
>             offset                   : 0x00000000 (0)
>             mapi_response            : *
>                 mapi_response            : length=571
>                 mapi_response: ARRAY(569)
>                     mapi_repl: struct EcDoRpc_MAPI_REPL
>                         opnum                    : 0x05 (5)
>                         handle_idx               : 0x01 (1)
>                         error_code               : MAPI_E_SUCCESS (0x0)
>                         u                        : union
> EcDoRpc_MAPI_REPL_UNION(case 5)
>                         mapi_GetContentsTable: struct
> GetContentsTable_repl
>                             RowCount                 : 0x0000000b (11)
>                     mapi_repl: struct EcDoRpc_MAPI_REPL
>                         opnum                    : 0x12 (18)
>                         handle_idx               : 0x01 (1)
>                         error_code               : MAPI_E_SUCCESS (0x0)
>                         u                        : union
> EcDoRpc_MAPI_REPL_UNION(case 18)
>                         mapi_SetColumns: struct SetColumns_repl
>                             TableStatus              :
> TBLSTAT_COMPLETE (0)
>                     mapi_repl: struct EcDoRpc_MAPI_REPL
>                         opnum                    : 0x13 (19)
>                         handle_idx               : 0x01 (1)
>                         error_code               : MAPI_E_SUCCESS (0x0)
>                         u                        : union
> EcDoRpc_MAPI_REPL_UNION(case 19)
>                         mapi_SortTable: struct SortTable_repl
>                             TableStatus              :
> TBLSTAT_COMPLETE (0)
>                     mapi_repl: struct EcDoRpc_MAPI_REPL
>                         opnum                    : 0x4f (79)
>                         handle_idx               : 0x01 (1)
>                         error_code               : MAPI_E_SUCCESS (0x0)
>                         u                        : union
> EcDoRpc_MAPI_REPL_UNION(case 79)
>                         mapi_FindRow: struct FindRow_repl
>                             RowNoLongerVisible       : 0x00 (0)
>                             HasRowData               : 0x01 (1)
>                             row                      : DATA_BLOB
> length=537
> [0000] 01 00 01 00 00 00 00 00   14 88 00 01 00 00 00 00   ........
> ........
> [0010] 00 19 0E 00 01 00 00 00   00 00 19 0E 00 00 00 00   ........
> ........
> [0020] 00 00 49 00 50 00 4D 00   2E 00 52 00 75 00 6C 00   ..I.P.M.
> ..R.u.l.
> [0030] 65 00 2E 00 4D 00 65 00   73 00 73 00 61 00 67 00   e...M.e.
> s.s.a.g.
> [0040] 65 00 00 00 0A 0F 01 04   80 0A 0F 01 04 80 02 03   e.......
> ........
> [0050] 00 00 00 00 00 00 29 04   00 00 00 00 07 03 00 00   ......).
> ........
> [0060] 00 00 01 00 01 00 00 00   00 00 14 85 00 3F 00 00   ........
> .....?..
> [0070] 00 0A 0F 01 04 80 0A 0F   01 04 80 0A 0F 01 04 80   ........
> ........
> [0080] 00 43 00 61 00 6C 00 65   00 6E 00 64 00 61 00 72   .C.a.l.e
> .n.d.a.r
> [0090] 00 00 00 00 01 00 00 00   00 00 00 00 00 00 00 00   ........
> ........
> [00A0] 00 00 00 00 00 49 00 50   00 46 00 2E 00 41 00 70   .....I.P
> .F...A.p
> [00B0] 00 70 00 6F 00 69 00 6E   00 74 00 6D 00 65 00 6E   .p.o.i.n
> .t.m.e.n
> [00C0] 00 74 00 00 00 0A 0F 01   04 80 00 00 00 00 40 0A   .t......
> ......@.
> [00D0] 0F 01 04 80 0A 0F 01 04   80 0A 0F 01 04 80 00 06   ........
> ........
> [00E0] 00 01 04 00 00 10 00 0A   0F 01 04 80 03 06 00 00   ........
> ........
> [00F0] 00 00 00 01 03 4F 75 74   6C 6F 6F 6B 20 52 75 6C   .....Out
> look Rul
> [0100] 65 73 20 4F 72 67 61 6E   69 7A 65 72 00 00 00 00   es Organ
> izer....
> [0110] 00 00 2B 07 00 00 00 00   F5 00 00 00 2C 07 00 00   ..+.....
> ....,...
> [0120] 00 00 F5 00 80 4F 12 00   80 4F 12 00 00 00 00 00   .....O..
> .O......
> [0130] 00 00 00 00 00 00 00 00   01 00 00 00 00 00 00 00   ........
> ........
> [0140] 00 00 00 00 01 00 00 00   01 00 00 00 00 00 00 00   ........
> ........
> [0150] 01 00 80 4F 12 05 26 43   00 6C 00 65 00 61 00 72   ...O..&C
> .l.e.a.r
> [0160] 00 20 00 63 00 61 00 74   00 65 00 67 00 6F 00 72   . .c.a.t
> .e.g.o.r
> [0170] 00 69 00 65 00 73 00 20   00 6F 00 6E 00 20 00 6D   .i.e.s. 
> .o.n. .m
> [0180] 00 61 00 69 00 6C 00 20   00 28 00 72 00 65 00 63   .a.i.l. 
> .(.r.e.c
> [0190] 00 6F 00 6D 00 6D 00 65   00 6E 00 64 00 65 00 64   .o.m.m.e
> .n.d.e.d
> [01A0] 00 29 00 01 00 00 00 00   00 00 00 01 00 00 00 00   .)......
> ........
> [01B0] 00 00 00 01 00 00 00 4A   00 00 00 04 00 FF FF 00   .......J
> ........
> [01C0] 00 0C 00 43 52 75 6C 65   45 6C 65 6D 65 6E 74 90   ...CRule
> Element.
> [01D0] 01 00 00 01 00 00 00 00   00 00 00 01 00 00 00 01   ........
> ........
> [01E0] 80 64 00 00 00 01 00 00   00 00 00 00 00 01 00 00   .d......
> ........
> [01F0] 00 01 80 F6 00 00 00 00   00 00 00 01 80 52 01 00   ........
> .....R..
> [0200] 00 00 00 00 00 00 00 00   00 00 00 00 00 66 66 66   ........
> .....fff
> [0210] 66 E1 5D E4 40 00 00 00   00                       f.].@... .
>                 mapi_response            : (handles) number=8
>                     handle id                : 0x0000006a (106)
>                     handle id                : 0x00000070 (112)
>                     handle id                : 0x00000047 (71)
>                     handle id                : 0x0000005a (90)
>                     handle id                : 0x00000059 (89)
>                     handle id                : 0x0000005b (91)
>                     handle id                : 0x0000005b (91)
>                     handle id                : 0x00000057 (87)
>             length                   : *
>                 length                   : 0x025b (603)
>             result                   : MAPI_E_SUCCESS (0x0)
>
>
> _______________________________________________
> devel mailing list
> [email protected]
> http://mailman.openchange.org/listinfo/devel

-- 
Julien Kerihuel
[email protected]
OpenChange Project Founder

Twitter: http://twitter.com/jkerihuel

GPG Fingerprint: 0B55 783D A781 6329 108A  B609 7EF6 FE11 A35F 1F79

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
devel mailing list
[email protected]
http://mailman.openchange.org/listinfo/devel

Reply via email to