Gary, Given the output you've provided me, the following patch should fix the issue ... waiting for your feedback.
This patch fixes 2 problems:
* First it fixes a real bug in the way we used to build folder
IDs in simple_mapi.c (byte ordering problem).
* Secondly it introduces a small hack for the lowest byte. So
far we assumed folder IDs had their lowest byte set to 0x1, but
your folders IDs ends with 0x4, which make our initial
assumption wrong. However (and this is where the nasty hack
applies), the lowest byte sounds the same than the parent folder
one (Inbox). So the hack fetches the lowest byte from the parent
and applies it to the child directory.
Cheers,
Julien.
On Mon, 2008-02-18 at 16:46 +0100, Julien Kerihuel wrote:
> Ok,
>
> IIRC you mentioned in a previous mail that openchangeclient --mailbox
> was working properly. May I ask you to send me the output of the
> following command:
>
> $ openchangeclient --debuglevel=10 --dump-data --mailbox
>
> This command dumps PR_FID for all folders in the hierarchy (including
> Calendar). This should give me the expected value and help fixing
> simple_mapi.c if the problem comes from here.
>
> Cheers,
> Julien.
>
> On Mon, 2008-02-18 at 15:42 +0000, Gary Rigg wrote:
> > Hi Julien,
> >
> > Unfortunately not... I get the same errors as before. :-(
> >
> > Cheers,
> > Gary
> >
> > On Mon, 2008-02-18 at 15:00 +0100, Julien Kerihuel wrote:
> > > Hi Garry,
> > >
> > > Does the attached patch fix makes things better?
> > >
> > > patch -p0 < x86_64_fid_patch.diff
> > > sudo make install
> > > openchangeclient --fetch-items=Appointment
> > >
> > > On Thu, 2008-02-14 at 13:03 +0100, Julien Kerihuel wrote:
> > > > Hi Garry,
> > > >
> > > > Sorry for the delay.
> > > >
> > > > I may be wrong, but I'm still convinced this may be an alignment problem
> > > > in libmapi/simple_mapi.c. Basically you can display the mailbox
> > > > hierarchy using folder identifiers returned by Exchange, but can't
> > > > access any of the messages folders - except Inbox fetched from
> > > > OpenMsgStore - when they are built in OpenChange from Inbox EntryIDs.
> > > >
> > > > The easiest way to proceed, for the moment, would be to send me an
> > > > Outlook-Exchange capture so I can check what is the expected folder ID
> > > > value. If you choose this method, please meet the MAPI clients
> > > > requirements exposed below. If you don't feel comfortable sending a
> > > > wireshark capture, see the latest part of the email.
> > > >
> > > > Capture communication between Exchange and one of the following MAPI
> > > > client: Outlook 2002,XP, mdbvu32.exe or MFCMAPI. The last 2 tools are
> > > > freely available from Microsoft Website. The main objective is to
> > > > capture the "OpenFolder Calendar" operation. Click or double-click
> > > > (depending on the used tool) on the calendar folder will generate the
> > > > related and needed MAPI calls.
> > > >
> > > > Otherwise, I can propose you to wait a couple of days until I push
> > > > preliminary MAPI dissector code on OC repository. This way we will be
> > > > able to filter MAPI traffic to the minimum and avoid you to send any
> > > > sensitive data.
> > > >
> > > > Btw, there is a last method we "should" be able to provide when we have
> > > > time. Given that Outlook 2003 will try to negotiate a recent EMSMDB
> > > > version with Exchange (one with compression), we could setup a
> > > > transparent proxy which would negotiate a lower version of the protocol
> > > > and force Outlook to use the old and classic EcDoRpc call. IIRC we had
> > > > been working on such proxy a couple of months ... or years ago ;-)
> > > >
> > > > Cheers,
> > > > Julien.
> > > >
> > > > On Wed, 2008-02-13 at 12:06 +0000, Gary Rigg wrote:
> > > > > Hi Julien,
> > > > >
> > > > > The CPUs are certainly 64 bit... but the Linux installation is 32
> > > > > bit...
> > > > >
> > > > > [EMAIL PROTECTED] bin]# file /sbin/init
> > > > > /sbin/init: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
> > > > > for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for
> > > > > GNU/Linux 2.6.9, stripped
> > > > >
> > > > > [EMAIL PROTECTED] bin]# uname -a
> > > > > Linux localhost.localdomain 2.6.15-1.2054_FC5smp #1 SMP Tue Mar 14
> > > > > 16:05:46 EST 2006 i686 i686 i386 GNU/Linux
> > > > >
> > > > > [EMAIL PROTECTED] bin]# cat /proc/cpuinfo
> > > > > processor : 0
> > > > > vendor_id : GenuineIntel
> > > > > cpu family : 15
> > > > > model : 4
> > > > > model name : Intel(R) Xeon(TM) CPU 3.00GHz
> > > > > stepping : 1
> > > > > cpu MHz : 3000.898
> > > > > cache size : 1024 KB
> > > > > physical id : 0
> > > > > siblings : 2
> > > > > core id : 0
> > > > > cpu cores : 1
> > > > > fdiv_bug : no
> > > > > hlt_bug : no
> > > > > f00f_bug : no
> > > > > coma_bug : no
> > > > > fpu : yes
> > > > > fpu_exception : yes
> > > > > cpuid level : 5
> > > > > wp : yes
> > > > > flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca
> > > > > cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm
> > > > > constant_tsc pni monitor ds_cpl cid cx16 xtpr
> > > > > bogomips : 6011.53
> > > > >
> > > > > processor : 1
> > > > > vendor_id : GenuineIntel
> > > > > cpu family : 15
> > > > > model : 4
> > > > > model name : Intel(R) Xeon(TM) CPU 3.00GHz
> > > > > stepping : 1
> > > > > cpu MHz : 3000.898
> > > > > cache size : 1024 KB
> > > > > physical id : 0
> > > > > siblings : 2
> > > > > core id : 0
> > > > > cpu cores : 1
> > > > > fdiv_bug : no
> > > > > hlt_bug : no
> > > > > f00f_bug : no
> > > > > coma_bug : no
> > > > > fpu : yes
> > > > > fpu_exception : yes
> > > > > cpuid level : 5
> > > > > wp : yes
> > > > > flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca
> > > > > cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe lm
> > > > > constant_tsc pni monitor ds_cpl cid cx16 xtpr
> > > > > bogomips : 6000.81
> > > > >
> > > >
> > > > _______________________________________________
> > > > devel mailing list
> > > > [email protected]
> > > > http://mailman.openchange.org/listinfo/devel
> _______________________________________________
> devel mailing list
> [email protected]
> http://mailman.openchange.org/listinfo/devel
--
Julien Kerihuel
[EMAIL PROTECTED]
OpenChange Project Manager
GPG Fingerprint: 0B55 783D A781 6329 108A B609 7EF6 FE11 A35F 1F79
Index: libmapi/simple_mapi.c
===================================================================
--- libmapi/simple_mapi.c (revision 343)
+++ libmapi/simple_mapi.c (working copy)
@@ -115,9 +115,7 @@
mapi_object_t obj_inbox;
mapi_id_t id_inbox;
struct mapi_SPropValue_array properties_array;
- const struct SBinary_short *entryid;
- uint32_t low;
- uint32_t high;
+ const struct SBinary_short *entryid;
MAPI_RETVAL_IF(!global_mapi_ctx, MAPI_E_NOT_INITIALIZED, NULL);
MAPI_RETVAL_IF(!obj_store, MAPI_E_INVALID_PARAMETER, NULL);
@@ -185,22 +183,18 @@
MAPI_RETVAL_IF(!entryid, MAPI_E_NOT_FOUND, mem_ctx);
MAPI_RETVAL_IF(entryid->cb < 8, MAPI_E_INVALID_PARAMETER, mem_ctx);
- low = 0;
- low += entryid->lpb[entryid->cb - 1] << 24;
- low += entryid->lpb[entryid->cb - 2] << 16;
- low += entryid->lpb[entryid->cb - 3] << 8;
- low += entryid->lpb[entryid->cb - 4];
-
- high = 0;
- high += entryid->lpb[entryid->cb - 5] << 24;
- high += entryid->lpb[entryid->cb - 6] << 16;
- high += entryid->lpb[entryid->cb - 7] << 8;
- high += entryid->lpb[entryid->cb - 8];
-
- *folder = high;
- *folder = ((uint64_t)low) << 48;
- /* the lowest byte of folder id is set to 1 while entryid one is not */
- *folder += 1;
+ *folder = 0;
+ *folder += ((uint64_t)entryid->lpb[entryid->cb - 3] << 56);
+ *folder += ((uint64_t)entryid->lpb[entryid->cb - 4] << 48);
+ *folder += ((uint64_t)entryid->lpb[entryid->cb - 5] << 40);
+ *folder += ((uint64_t)entryid->lpb[entryid->cb - 6] << 32);
+ *folder += ((uint64_t)entryid->lpb[entryid->cb - 7] << 24);
+ *folder += ((uint64_t)entryid->lpb[entryid->cb - 8] << 16);
+ /* WARNING: for some unknown reason the latest byte of folder
+ ID may change (0x1 or 0x4 values identified so far).
+ However this byte sounds the same than the parent folder
+ one */
+ *folder += (id_inbox & 0xFF);
talloc_free(mem_ctx);
return MAPI_E_SUCCESS;
@@ -423,7 +417,7 @@
for (i = 0; i < rowset.cRows; i++) {
lpProp = get_SPropValue_SRow(&rowset.aRow[i], PR_MEMBER_NAME);
if (lpProp && lpProp->value.lpszA) {
- if (!strcmp(lpProp->value.lpszA, user)) {
+ if (!strcmp((const char *)lpProp->value.lpszA, user)) {
rowList.cEntries = 1;
rowList.aEntries = talloc_array(mem_ctx, struct mapi_SRow, 1);
rowList.aEntries[0].ulRowFlags = ROW_MODIFY;
@@ -522,7 +516,7 @@
for (i = 0; i < rowset.cRows; i++) {
lpProp = get_SPropValue_SRow(&rowset.aRow[i], PR_MEMBER_NAME);
if (lpProp && lpProp->value.lpszA) {
- if (!strcmp(lpProp->value.lpszA, user)) {
+ if (!strcmp((const char *)lpProp->value.lpszA, user)) {
rowList.cEntries = 1;
rowList.aEntries = talloc_array(mem_ctx, struct mapi_SRow, 1);
rowList.aEntries[0].ulRowFlags = ROW_REMOVE;
signature.asc
Description: This is a digitally signed message part
_______________________________________________ devel mailing list [email protected] http://mailman.openchange.org/listinfo/devel
