From 1930acb377d623fef168808f189ca5c0cac9bf4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Reynolds?= Date: Tue, 4 Dec 2012 10:07:01 -0300 Subject: MAPI support for Evolution --- pcr/openchange/PKGBUILD | 67 ++++++++++++ pcr/openchange/bugzilla_682449.patch | 191 +++++++++++++++++++++++++++++++++++ 2 files changed, 258 insertions(+) create mode 100644 pcr/openchange/PKGBUILD create mode 100644 pcr/openchange/bugzilla_682449.patch (limited to 'pcr/openchange') diff --git a/pcr/openchange/PKGBUILD b/pcr/openchange/PKGBUILD new file mode 100644 index 000000000..c3e2c753f --- /dev/null +++ b/pcr/openchange/PKGBUILD @@ -0,0 +1,67 @@ +# Maintainer: Michael Hansen +# Contributor: ngoonee +# Contributor: Adam Russell +pkgname=openchange +_codename=BORG +_dlid=180 +pkgver=1.0 +pkgrel=6 +pkgdesc="Library for MAPI connectivity with Microsoft Exchange. This package was SPECIFICALLY created to support evolution-mapi and may not work for any other purpose." +arch=('i686' 'x86_64') +url="http://www.openchange.org" +license=('GPL3') +depends=('samba4>=4.0.0B1' 'popt' 'libical' 'sqlite3' 'file' 'boost' 'zlib') +makedepends=('ccache' 'python2' 'subversion' 'docbook-xsl' 'libxslt' 'flex' 'bison' 'autoconf' 'automake') +options=(!makeflags) +# Releases are mirrored at http://tracker.openchange.org/projects/openchange/files +source=("http://tracker.openchange.org/attachments/download/${_dlid}/${pkgname}-${pkgver}-${_codename}.tar.gz" + "bugzilla_682449.patch") + +md5sums=('9b57a325e90e5ad3a702ddc6e8762ab6' + '7521f89f8ffaa733ed72532334951b90') +_prefix="/opt/samba4" + +build() { + cd ${srcdir}/${pkgname}-${pkgver}-${_codename} + + patch -i ../bugzilla_682449.patch + + SAVEIFS=${IFS} + IFS=$(echo -en "\n\b") + PYTHON_CALLERS="$(find ${srcdir}/${pkgname}-${pkgver}-${_codename} -name '*.py') +$(find ${srcdir}/${pkgname}-${pkgver}-${_codename}/ -type f) +$(find ${srcdir}/${pkgname}-${pkgver}-${_codename}/ -name 'configure.ac')" + sed -i -e "s|/usr/bin/env python$|/usr/bin/env python2|" \ + -e "s|python-config$|python2-config|" \ + -e "s|bin/python$|bin/python2|" \ + ${PYTHON_CALLERS} + + # Patch for samba4-alpha19+ + SRC_FILES="$(find ${srcdir}/${pkgname}-${pkgver}-${_codename} -name '*.c')" + sed -i -e "s|#include |#include |" ${SRC_FILES} + IFS=${SAVEIFS} + + export PYTHON=/usr/bin/python2 + + export PKG_CONFIG_PATH="${_prefix}/samba/lib/pkgconfig:${_prefix}/lib/pkgconfig" + export BOOST_LIB_SUFFIX="-mt" + ./autogen.sh + + sed -i -e "s|python-config|python2-config|g" configure + ./configure --prefix=${_prefix} --with-samba=${_prefix} + make FLEX=/usr/bin/flex BISON=/usr/bin/bison || return 1 +} + +package() { + _pyver=`python2 -c 'import sys; print(sys.version[:3])'` + + cd ${srcdir}/${pkgname}-${pkgver}-${_codename} + make DESTDIR="$pkgdir/" install + + cd ${pkgdir}/${_prefix}/lib/ + ln -s libmapi.so libmapi.so.0 + ln -s libocpf.so libocpf.so.0 + + find ${pkgdir}/${_prefix}/lib/python${_pyver}/site-packages/ -name '*.py' | \ + xargs sed -i "s|#!/usr/bin/env python$|#!/usr/bin/env python2|" +} diff --git a/pcr/openchange/bugzilla_682449.patch b/pcr/openchange/bugzilla_682449.patch new file mode 100644 index 000000000..e1b3f0983 --- /dev/null +++ b/pcr/openchange/bugzilla_682449.patch @@ -0,0 +1,191 @@ +Index: exchange.idl +=================================================================== +--- exchange.idl (revision 4004) ++++ exchange.idl (working copy) +@@ -1039,7 +1039,7 @@ + [case(ActionType_OP_COPY)] MoveCopy_Action CopyAction; + [case(ActionType_OP_REPLY)] ReplyOOF_Action ReplyAction; + [case(ActionType_OP_OOF_REPLY)] ReplyOOF_Action ReplyOOFAction; +- [case(ActionType_OP_DEFER_ACTION)][flag(NDR_REMAINING)] DATA_BLOB DeferAction; ++ [case(ActionType_OP_DEFER_ACTION)][flag(NDR_REMAINING|NDR_NOALIGN)] DATA_BLOB DeferAction; + [case(ActionType_OP_BOUNCE)] BounceCode BounceCode; + [case(ActionType_OP_TAG)] mapi_SPropValue_wrap PropValue; + [case(ActionType_OP_FORWARD)] ForwardDelegate_Action ForwardAction; +@@ -1057,7 +1057,7 @@ + + typedef [flag(NDR_NOALIGN)] struct { + uint16 ActionLength; +- [subcontext(0),subcontext_size(ActionLength),flag(NDR_REMAINING)] ActionBlockData ActionBlockData; ++ [subcontext(0),subcontext_size(ActionLength),flag(NDR_REMAINING|NDR_NOALIGN)] ActionBlockData ActionBlockData; + } ActionBlock; + + typedef [flag(NDR_NOALIGN)] struct { +@@ -1095,7 +1095,7 @@ + + typedef [public,flag(NDR_NOALIGN)] struct { + uint16 cValues; +- [flag(NDR_REMAINING)]mapi_SPropValue lpProps[cValues]; ++ [flag(NDR_REMAINING|NDR_NOALIGN)]mapi_SPropValue lpProps[cValues]; + } mapi_SPropValue_array; + + typedef [flag(NDR_NOALIGN)] struct { +@@ -1281,7 +1281,7 @@ + // TODO: figure out if "layout" can go + uint8 layout; + // TODO: convert this to a proper structure - see if we already have one. +- [flag(NDR_REMAINING)] DATA_BLOB prop_values; ++ [flag(NDR_REMAINING|NDR_NOALIGN)] DATA_BLOB prop_values; + } RecipientRow; + + typedef [flag(NDR_NOALIGN)] struct { +@@ -1356,7 +1356,7 @@ + + typedef [flag(NDR_NOALIGN)] struct { + uint8 layout; +- [flag(NDR_REMAINING)] DATA_BLOB prop_data; ++ [flag(NDR_REMAINING|NDR_NOALIGN)] DATA_BLOB prop_data; + } GetProps_repl; + + /*************************/ +@@ -1455,7 +1455,7 @@ + typedef [flag(NDR_NOALIGN)]struct { + uint32 idx; + ulRecipClass RecipClass; +- [subcontext(2),flag(NDR_REMAINING)] RecipientRow RecipientRow; ++ [subcontext(2),flag(NDR_REMAINING|NDR_NOALIGN)] RecipientRow RecipientRow; + } ModifyRecipientRow; + + typedef [flag(NDR_NOALIGN)] struct { +@@ -1532,7 +1532,7 @@ + uint8 handle_idx; + MSGFLAG_READ flags; + /* TEMP HACK for editing notes without crashing Outlook: +- [flag(NDR_REMAINING)] DATA_BLOB clientdata; */ ++ [flag(NDR_REMAINING|NDR_NOALIGN)] DATA_BLOB clientdata; */ + } SetMessageReadFlag_req; + + typedef [nodiscriminant, flag(NDR_NOALIGN)] union { +@@ -1782,7 +1782,7 @@ + typedef [nopush,nopull,flag(NDR_NOALIGN)] struct { + uint8 Origin; + uint16 RowCount; +- [flag(NDR_REMAINING)]DATA_BLOB RowData; ++ [flag(NDR_REMAINING|NDR_NOALIGN)]DATA_BLOB RowData; + } QueryRows_repl; + + /**************************/ +@@ -2394,13 +2394,13 @@ + } ReadStream_req; + + typedef [flag(NDR_NOALIGN)] struct { +- [subcontext(2), flag(NDR_REMAINING)] DATA_BLOB data; ++ [subcontext(2), flag(NDR_REMAINING|NDR_NOALIGN)] DATA_BLOB data; + } ReadStream_repl; + + /*************************/ + /* EcDoRpc Function 0x2d */ + typedef [flag(NDR_NOALIGN)] struct { +- [subcontext(2), flag(NDR_REMAINING)] DATA_BLOB data; ++ [subcontext(2), flag(NDR_REMAINING|NDR_NOALIGN)] DATA_BLOB data; + } WriteStream_req; + + +@@ -2900,7 +2900,7 @@ + uint16 TotalStepCount; + uint8 Reserved; + uint16 TransferBufferSize; +- [subcontext(0),subcontext_size(TransferBufferSize),flag(NDR_REMAINING)] DATA_BLOB TransferBuffer; ++ [subcontext(0),subcontext_size(TransferBufferSize),flag(NDR_REMAINING|NDR_NOALIGN)] DATA_BLOB TransferBuffer; + } FastTransferSourceGetBuffer_repl; + + /**************************/ +@@ -2982,7 +2982,7 @@ + /* EcDoRpc Function 0x54 */ + typedef [flag(NDR_NOALIGN)] struct { + uint16 TransferBufferSize; +- [subcontext(0),subcontext_size(TransferBufferSize),flag(NDR_REMAINING)] DATA_BLOB TransferBuffer; ++ [subcontext(0),subcontext_size(TransferBufferSize),flag(NDR_REMAINING|NDR_NOALIGN)] DATA_BLOB TransferBuffer; + } FastTransferDestinationPutBuffer_req; + + typedef [flag(NDR_NOALIGN)] struct { +@@ -3075,7 +3075,7 @@ + typedef [flag(NDR_NOALIGN)] struct { + uint32 ExpandedRowCount; + uint16 RowCount; +- [flag(NDR_REMAINING)]DATA_BLOB RowData; ++ [flag(NDR_REMAINING|NDR_NOALIGN)]DATA_BLOB RowData; + } ExpandRow_repl; + + /*************************/ +@@ -3184,7 +3184,7 @@ + typedef [flag(NDR_NOALIGN)] struct { + boolean8 HasFinished; + uint16 DataSize; +- [subcontext(0), subcontext_size(DataSize), flag(NDR_REMAINING)] DATA_BLOB Data; ++ [subcontext(0), subcontext_size(DataSize), flag(NDR_REMAINING|NDR_NOALIGN)] DATA_BLOB Data; + } ReadPerUserInformation_repl; + + /*************************/ +@@ -3194,7 +3194,7 @@ + boolean8 HasFinished; + uint32 DataOffset; + uint16 DataSize; +- [subcontext(0), subcontext_size(DataSize), flag(NDR_REMAINING)] DATA_BLOB Data; ++ [subcontext(0), subcontext_size(DataSize), flag(NDR_REMAINING|NDR_NOALIGN)] DATA_BLOB Data; + GUID ReplGuid; /* Note: ReplGuid gets only included under specific circumstances */ + } WritePerUserInformation_req; + +@@ -3364,7 +3364,7 @@ + SendOptions SendOptions; + SynchronizationFlag SynchronizationFlag; + uint16 RestrictionSize; +- [subcontext(0),subcontext_size(RestrictionSize),flag(NDR_REMAINING)] DATA_BLOB RestrictionData; ++ [subcontext(0),subcontext_size(RestrictionSize),flag(NDR_REMAINING|NDR_NOALIGN)] DATA_BLOB RestrictionData; + SynchronizationExtraFlags SynchronizationExtraFlags; + mapi_SPropTagArray PropertyTags; + } SyncConfigure_req; +@@ -3542,7 +3542,7 @@ + } MessageReadState; + + typedef [flag(NDR_NOALIGN)] struct { +- [subcontext(2),flag(NDR_REMAINING)] DATA_BLOB MessageReadStates; ++ [subcontext(2),flag(NDR_REMAINING|NDR_NOALIGN)] DATA_BLOB MessageReadStates; + } SyncImportReadStateChanges_req; + + typedef [flag(NDR_NOALIGN)] struct { +@@ -3617,7 +3617,7 @@ + /*************************/ + /* EcDoRpc Function 0x90 */ + typedef [flag(NDR_NOALIGN)] struct { +- [subcontext(2), flag(NDR_REMAINING)] DATA_BLOB data; ++ [subcontext(2), flag(NDR_REMAINING|NDR_NOALIGN)] DATA_BLOB data; + } WriteAndCommitStream_req; + + +@@ -4462,7 +4462,7 @@ + uint32 MajorVersion; + uint32 MinorVersion; + uint32 BuildNumber; +- [subcontext(0), subcontext_size(132), flag(NDR_NOALIGN|NDR_REMAINING)] DATA_BLOB Reserved_1; ++ [subcontext(0), subcontext_size(132), flag(NDR_REMAINING|NDR_NOALIGN)] DATA_BLOB Reserved_1; + uint16 ServicePackMajor; + uint16 ServicePackMinor; + uint32 Reserved_2; +@@ -4567,7 +4567,7 @@ + [out] uint16 rgwServerVersion[3], + [out] uint16 rgwBestVersion[3], + [in,out] uint32 *pulTimeStamp, +- [in,subcontext(4),flag(NDR_NOALIGN|NDR_REMAINING)] mapi2k7_AuxInfo *rgbAuxIn, ++ [in,subcontext(4),flag(NDR_REMAINING|NDR_NOALIGN)] mapi2k7_AuxInfo *rgbAuxIn, + [in] uint32 cbAuxIn, + [out, length_is(*pcbAuxOut), size_is(*pcbAuxOut)] mapi2k7_AuxInfo *rgbAuxOut, + [in,out][range(0,0x1008)] uint32 *pcbAuxOut +@@ -4588,7 +4588,7 @@ + + typedef [public,nopull] struct { + RPC_HEADER_EXT header; +- [subcontext(0),flag(NDR_NOALIGN|NDR_REMAINING)] mapi_response *mapi_response; ++ [subcontext(0),flag(NDR_REMAINING|NDR_NOALIGN)] mapi_response *mapi_response; + } mapi2k7_response; + + [public,noprint] MAPISTATUS EcDoRpcExt2( -- cgit v1.2.2