Good evening,
In attachment, a fix that should fix the PST import for this mailbox.
The fix is temporary as it only add support for PT_MV_BINARY and would
require similar approach for other multi-valued type.
Kind Regards,
Julien.
On Wed, 2013-07-10 at 11:24 -0400, Ludovic Marcotte wrote:
> On 2013-07-09 7:50 AM, balta.cos...@gmail.com wrote:
> > anyone else having this problem ?
> At first, it looks like an OpenChange bug. Here is the stack trace
> during the PST import:
>
> (gdb) bt
> #0 0x00007ffff3aed445 in __GI_raise (sig=<optimized out>) at
> ../nptl/sysdeps/unix/sysv/linux/raise.c:64
> #1 0x00007ffff3af0bab in __GI_abort () at abort.c:91
> #2 0x00007fffd808e30f in mapi_copy_spropvalues (mem_ctx=0x1bea210,
> source_values=0xf0f730, dest_values=0x1bea210, count=23) at
> libmapi/property.c:674
> #3 0x00007fffd73aa969 in emsmdbp_object_create_folder
> (emsmdbp_ctx=0x2a2a9a0, parent_folder=0x2aa7fc0, mem_ctx=0x0,
> fid=14063964281557221377, rowp=0x7fffffffd5d0, new_folderp=0x7fffffffd5f0)
> at mapiproxy/servers/default/emsmdb/emsmdbp_object.c:367
> #4 0x00007fffd73c48da in EcDoRpc_RopSyncImportHierarchyChange
> (mem_ctx=0xca8e40, emsmdbp_ctx=0x2a2a9a0, mapi_req=0x2fe36b0,
> mapi_repl=0x3035aa0, handles=0x1498360, size=0x7fffffffd6fc)
> at mapiproxy/servers/default/emsmdb/oxcfxics.c:2317
> #5 0x00007fffd73a69e8 in EcDoRpc_process_transaction (mem_ctx=0xca8e40,
> emsmdbp_ctx=0x2a2a9a0, mapi_request=0x278dfa0) at
> mapiproxy/servers/default/emsmdb/dcesrv_exchange_emsmdb.c:1140
> #6 0x00007fffd73a85e3 in dcesrv_EcDoRpcExt2 (dce_call=0xca8e40,
> mem_ctx=0xca8e40, r=0x1110970) at
> mapiproxy/servers/default/emsmdb/dcesrv_exchange_emsmdb.c:1755
> #7 0x00007fffd73a8ac5 in dcesrv_exchange_emsmdb_dispatch
> (dce_call=0xca8e40, mem_ctx=0xca8e40, r=0x1110970,
> mapiproxy=0x7fffffffd8c0) at
> mapiproxy/servers/default/emsmdb/dcesrv_exchange_emsmdb.c:1916
> #8 0x00007fffd8418121 in mapiproxy_server_dispatch (dce_call=0xca8e40,
> mem_ctx=0xca8e40, r=0x1110970, mapiproxy=0x7fffffffd8c0) at
> mapiproxy/libmapiproxy/dcesrv_mapiproxy_server.c:57
> #9 0x00007fffd864ea27 in mapiproxy_op_dispatch (dce_call=0xca8e40,
> mem_ctx=0xca8e40, r=0x1110970) at mapiproxy/dcesrv_mapiproxy.c:497
>
> More investigation will be needed.
>
> Thanks,
>
> --
> Ludovic Marcotte
> lmarco...@inverse.ca :: +1.514.755.3630 :: http://inverse.ca
> Inverse inc. :: Leaders behind SOGo (http://sogo.nu) and PacketFence
> (http://packetfence.org)
>
--
Julien Kerihuel
j.kerih...@openchange.org
OpenChange Project Founder
Twitter: http://twitter.com/jkerihuel
GPG Fingerprint: 0B55 783D A781 6329 108A B609 7EF6 FE11 A35F 1F79
--
users@sogo.nu
https://inverse.ca/sogo/lists
diff --git a/libmapi/property.c b/libmapi/property.c
index 9f2b70c..715d7db 100644
--- a/libmapi/property.c
+++ b/libmapi/property.c
@@ -669,26 +669,37 @@ _PUBLIC_ void mapi_copy_spropvalues(TALLOC_CTX *mem_ctx, struct SPropValue *sour
*dest_value = *source_value;
prop_type = (source_value->ulPropTag & 0xFFFF);
- if ((prop_type & MV_FLAG)) {
- DEBUG(5, ("multivalues not handled\n"));
- abort();
- }
- else {
- switch(prop_type) {
- case PT_STRING8:
- dest_value->value.lpszA = talloc_strdup(mem_ctx, source_value->value.lpszA);
- break;
- case PT_UNICODE:
- dest_value->value.lpszW = talloc_strdup(mem_ctx, source_value->value.lpszW);
- break;
- case PT_BINARY:
- dest_value->value.bin.cb = source_value->value.bin.cb;
- dest_value->value.bin.lpb = talloc_memdup(mem_ctx, source_value->value.bin.lpb, sizeof(uint8_t) * source_value->value.bin.cb);
- break;
- default:
- *dest_value = *source_value;
+ switch(prop_type) {
+ case PT_STRING8:
+ dest_value->value.lpszA = talloc_strdup(mem_ctx, source_value->value.lpszA);
+ break;
+ case PT_UNICODE:
+ dest_value->value.lpszW = talloc_strdup(mem_ctx, source_value->value.lpszW);
+ break;
+ case PT_BINARY:
+ dest_value->value.bin.cb = source_value->value.bin.cb;
+ dest_value->value.bin.lpb = talloc_memdup(mem_ctx, source_value->value.bin.lpb, sizeof(uint8_t) * source_value->value.bin.cb);
+ break;
+ case PT_MV_BINARY:
+ {
+ uint32_t i;
+ uint32_t size = 0;
+
+ dest_value->value.MVbin.cValues = source_value->value.MVbin.cValues;
+ size += 4;
+
+ dest_value->value.MVbin.lpbin = talloc_array(mem_ctx, struct Binary_r,
+ dest_value->value.MVbin.cValues);
+ for (i = 0; i < dest_value->value.MVbin.cValues; i++) {
+ dest_value->value.MVbin.lpbin[i].cb = source_value->value.MVbin.lpbin[i].cb;
+ dest_value->value.MVbin.lpbin[i].lpb = source_value->value.MVbin.lpbin[i].lpb;
+ size += dest_value->value.MVbin.lpbin[i].cb + sizeof (uint16_t);
}
}
+ break;
+ default:
+ *dest_value = *source_value;
+ }
}
}