commit ca43566387672a25ee3989de1fca0bcc109d71f4 Author: CentOS Sources Date: Tue Nov 15 01:37:55 2022 -0500 import openchange-2.3-39.el9 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ff3e0ed --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/openchange-2.3-VULCAN.tar.gz diff --git a/.openchange.metadata b/.openchange.metadata new file mode 100644 index 0000000..63a3a8f --- /dev/null +++ b/.openchange.metadata @@ -0,0 +1 @@ +901e6d8fa4f9f4a1d41c3ad97d967da316d0ad17 SOURCES/openchange-2.3-VULCAN.tar.gz diff --git a/SOURCES/doxygen_to_devhelp.xsl b/SOURCES/doxygen_to_devhelp.xsl new file mode 100644 index 0000000..39f2471 --- /dev/null +++ b/SOURCES/doxygen_to_devhelp.xsl @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + .html# + + + + + + diff --git a/SOURCES/libmapi-0.8.2-libmapi-conflict.patch b/SOURCES/libmapi-0.8.2-libmapi-conflict.patch new file mode 100644 index 0000000..2ccd77f --- /dev/null +++ b/SOURCES/libmapi-0.8.2-libmapi-conflict.patch @@ -0,0 +1,348 @@ +diff -up openchange-openchange-2.3-VULCAN/libmapi.pc.in.libmapi-conflict openchange-openchange-2.3-VULCAN/libmapi.pc.in +--- openchange-openchange-2.3-VULCAN/libmapi.pc.in.libmapi-conflict 2015-05-16 17:22:04.000000000 +0200 ++++ openchange-openchange-2.3-VULCAN/libmapi.pc.in 2015-05-18 07:00:01.718355270 +0200 +@@ -8,7 +8,7 @@ datadir=@datadir@ + Name: MAPI + Description: MAPI Protocol Implementation + Version: @PACKAGE_VERSION@ +-Libs: -L${libdir} -lmapi ++Libs: -L${libdir} -lmapi-openchange + Libs.private: @LIBS@ + Cflags: -I${includedir} + Requires: talloc dcerpc ndr tevent +diff -up openchange-openchange-2.3-VULCAN/Makefile.libmapi-conflict openchange-openchange-2.3-VULCAN/Makefile +--- openchange-openchange-2.3-VULCAN/Makefile.libmapi-conflict 2015-05-16 17:22:04.000000000 +0200 ++++ openchange-openchange-2.3-VULCAN/Makefile 2015-05-18 07:01:57.737350354 +0200 +@@ -166,7 +166,7 @@ LIBMAPI_SO_VERSION = 0 + + libmapi: idl \ + libmapi/version.h \ +- libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) ++ libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION) + + libmapi-install: libmapi \ + libmapi-installpc \ +@@ -201,8 +201,8 @@ endif + rm -f *~ + rm -f */*~ + rm -f */*/*~ +- rm -f libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) libmapi.$(SHLIBEXT).* \ +- libmapi.$(SHLIBEXT) ++ rm -f libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION) libmapi-openchange.$(SHLIBEXT).* \ ++ libmapi-openchange.$(SHLIBEXT) + + clean:: libmapi-clean + +@@ -219,10 +219,10 @@ libmapi-installpc: + libmapi-installlib: + @echo "[*] install: libmapi library" + $(INSTALL) -d $(DESTDIR)$(libdir) +- $(INSTALL) -m 0755 libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) $(DESTDIR)$(libdir) +- ln -sf libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) $(DESTDIR)$(libdir)/libmapi.$(SHLIBEXT) ++ $(INSTALL) -m 0755 libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION) $(DESTDIR)$(libdir) ++ ln -sf libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION) $(DESTDIR)$(libdir)/libmapi-openchange.$(SHLIBEXT) + ifeq ($(MANUALLY_CREATE_SYMLINKS), yes) +- ln -sf libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) $(DESTDIR)$(libdir)/libmapi.$(SHLIBEXT).$(LIBMAPI_SO_VERSION) ++ ln -sf libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION) $(DESTDIR)$(libdir)/libmapi-openchange.$(SHLIBEXT).$(LIBMAPI_SO_VERSION) + endif + + libmapi-installheader: +@@ -267,7 +267,7 @@ libmapi-uninstallpc: + rm -f $(DESTDIR)$(libdir)/pkgconfig/libmapi.pc + + libmapi-uninstalllib: +- rm -f $(DESTDIR)$(libdir)/libmapi.* ++ rm -f $(DESTDIR)$(libdir)/libmapi-openchange.* + + libmapi-uninstallheader: + rm -rf $(DESTDIR)$(includedir)/libmapi +@@ -279,7 +279,7 @@ libmapi-uninstallscript: + rm -f $(DESTDIR)$(datadir)/setup/profiles/oc_profiles* + rm -rf $(DESTDIR)$(datadir)/setup/profiles + +-libmapi.$(SHLIBEXT).$(PACKAGE_VERSION): \ ++libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION): \ + libmapi/emsmdb.po \ + libmapi/async_emsmdb.po \ + libmapi/IABContainer.po \ +@@ -326,10 +326,10 @@ libmapi.$(SHLIBEXT).$(PACKAGE_VERSION): + libmapi/socket/interface.po \ + libmapi/socket/netif.po + @echo "Linking $@" +- @$(CC) $(DSOOPT) $(CFLAGS) $(LDFLAGS) -Wl,-soname,libmapi.$(SHLIBEXT).$(LIBMAPI_SO_VERSION) -o $@ $^ $(LIBS) ++ @$(CC) $(DSOOPT) $(CFLAGS) $(LDFLAGS) -Wl,-soname,libmapi-openchange.$(SHLIBEXT).$(LIBMAPI_SO_VERSION) -o $@ $^ $(LIBS) + + +-libmapi.$(SHLIBEXT).$(LIBMAPI_SO_VERSION): libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) ++libmapi-openchange.$(SHLIBEXT).$(LIBMAPI_SO_VERSION): libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION) + ln -fs $< $@ + + libmapi/version.h: VERSION +@@ -364,7 +364,7 @@ libmapipp.$(SHLIBEXT).$(PACKAGE_VERSION) + libmapi++/src/object.po \ + libmapi++/src/profile.po \ + libmapi++/src/session.po \ +- libmapi.$(SHLIBEXT).$(LIBMAPI_SO_VERSION) ++ libmapi-openchange.$(SHLIBEXT).$(LIBMAPI_SO_VERSION) + @echo "Linking $@" + @$(CXX) $(DSOOPT) $(CXX11FLAGS) $(CXXFLAGS) $(LDFLAGS) -Wl,-soname,libmapipp.$(SHLIBEXT).$(LIBMAPIPP_SO_VERSION) -o $@ $^ $(LIBS) + +@@ -445,7 +445,7 @@ clean:: libmapixx-tests-clean + + bin/libmapixx-test: libmapi++/tests/test.cpp \ + libmapipp.$(SHLIBEXT).$(PACKAGE_VERSION) \ +- libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) ++ libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION) + @echo "Linking sample application $@" + @$(CXX) $(CXX11FLAGS) $(CXXFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS) + +@@ -460,7 +460,7 @@ libmapixx-attach-clean: + + bin/libmapixx-attach: libmapi++/tests/attach_test.po \ + libmapipp.$(SHLIBEXT).$(PACKAGE_VERSION) \ +- libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) ++ libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION) + @echo "Linking sample application $@" + @$(CXX) $(CXX11FLAGS) $(CXXFLAGS) -o $@ $^ $(LIBS) + +@@ -470,7 +470,7 @@ libmapixx-exception: bin/libmapixx-excep + + bin/libmapixx-exception: libmapi++/tests/exception_test.cpp \ + libmapipp.$(SHLIBEXT).$(PACKAGE_VERSION) \ +- libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) ++ libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION) + @echo "Linking exception test application $@" + @$(CXX) $(CXX11FLAGS) $(CXXFLAGS) -o $@ $^ $(LIBS) + +@@ -490,7 +490,7 @@ libmapixx-profiletest-clean: + + bin/libmapixx-profiletest: libmapi++/tests/profile_test.po \ + libmapipp.$(SHLIBEXT).$(PACKAGE_VERSION) \ +- libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) ++ libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION) + @echo "Linking profile test application $@" + @$(CXX) $(CXX11FLAGS) $(CXXFLAGS) -o $@ $^ $(LIBS) + +@@ -511,7 +511,7 @@ libmapixx-messages-clean: + + libmapi++/examples/foldertree: libmapi++/examples/foldertree.cpp \ + libmapipp.$(SHLIBEXT).$(PACKAGE_VERSION) \ +- libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) ++ libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION) + @echo "Linking foldertree example application $@" + @$(CXX) $(CXX11FLAGS) $(CXXFLAGS) -o $@ $^ $(LIBS) + +@@ -519,7 +519,7 @@ clean:: libmapixx-foldertree-clean + + libmapi++/examples/messages: libmapi++/examples/messages.cpp \ + libmapipp.$(SHLIBEXT).$(PACKAGE_VERSION) \ +- libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) ++ libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION) + @echo "Linking messages example application $@" + @$(CXX) $(CXX11FLAGS) $(CXXFLAGS) -o $@ $^ $(LIBS) + +@@ -586,7 +586,7 @@ libmapiadmin-uninstallheader: + libmapiadmin.$(SHLIBEXT).$(PACKAGE_VERSION): \ + libmapiadmin/mapiadmin_user.po \ + libmapiadmin/mapiadmin.po \ +- libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) ++ libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION) + @echo "Linking $@" + @$(CC) $(DSOOPT) $(LDFLAGS) -Wl,-soname,libmapiadmin.$(SHLIBEXT).$(LIBMAPIADMIN_SO_VERSION) -o $@ $^ $(LIBS) $(LIBMAPIADMIN_LIBS) + +@@ -663,7 +663,7 @@ libocpf.$(SHLIBEXT).$(PACKAGE_VERSION): + libocpf/ocpf_dump.po \ + libocpf/ocpf_api.po \ + libocpf/ocpf_write.po \ +- libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) ++ libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION) + @echo "Linking $@" + @$(CC) $(DSOOPT) $(LDFLAGS) -Wl,-soname,libocpf.$(SHLIBEXT).$(LIBOCPF_SO_VERSION) -o $@ $^ $(LIBS) + +@@ -740,7 +740,7 @@ mapiproxy/dcesrv_mapiproxy.$(SHLIBEXT): + gen_ndr/ndr_exchange.po + + @echo "Linking $@" +- @$(CC) -o $@ $(DSOOPT) $^ -L. $(LDFLAGS) $(LIBS) $(SAMBASERVER_LIBS) $(SAMDB_LIBS) -Lmapiproxy mapiproxy/libmapiproxy.$(SHLIBEXT).$(PACKAGE_VERSION) libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) ++ @$(CC) -o $@ $(DSOOPT) $^ -L. $(LDFLAGS) $(LIBS) $(SAMBASERVER_LIBS) $(SAMDB_LIBS) -Lmapiproxy mapiproxy/libmapiproxy.$(SHLIBEXT).$(PACKAGE_VERSION) libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION) + + mapiproxy/dcesrv_mapiproxy.c: gen_ndr/ndr_exchange_s.c gen_ndr/ndr_exchange.c + +@@ -748,7 +748,7 @@ mapiproxy/dcesrv_mapiproxy.c: gen_ndr/nd + mapiproxy/dcesrv_asyncemsmdb.$(SHLIBEXT): mapiproxy/servers/default/asyncemsmdb/dcesrv_asyncemsmdb.po \ + gen_ndr/ndr_asyncemsmdb.po + @echo "Linking $@" +- @$(CC) -o $@ $(DSOOPT) $^ -L. $(LDFLAGS) $(LIBS) $(SAMBASERVER_LIBS) $(SAMDB_LIBS) $(NANOMSG_LIBS) -Lmapiproxy mapiproxy/libmapiproxy.$(SHLIBEXT).$(PACKAGE_VERSION) libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) mapiproxy/libmapistore.$(SHLIBEXT).$(PACKAGE_VERSION) mapiproxy/libmapiserver.$(SHLIBEXT).$(PACKAGE_VERSION) \ ++ @$(CC) -o $@ $(DSOOPT) $^ -L. $(LDFLAGS) $(LIBS) $(SAMBASERVER_LIBS) $(SAMDB_LIBS) $(NANOMSG_LIBS) -Lmapiproxy mapiproxy/libmapiproxy.$(SHLIBEXT).$(PACKAGE_VERSION) libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION) mapiproxy/libmapistore.$(SHLIBEXT).$(PACKAGE_VERSION) mapiproxy/libmapiserver.$(SHLIBEXT).$(PACKAGE_VERSION) \ + + + mapiproxy/servers/default/asyncemsmdb/dcesrv_asyncemsmdb.c: gen_ndr/ndr_asyncemsmdb_s.c gen_ndr/ndr_asyncemsmdb.c +@@ -808,7 +808,7 @@ mapiproxy/libmapiproxy.$(SHLIBEXT).$(PAC + mapiproxy/util/mysql.po \ + mapiproxy/util/schema_migration.po \ + mapiproxy/util/ccan/htable/htable.po \ +- libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) ++ libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION) + @echo "Linking $@" + @$(CC) -o $@ $(DSOOPT) $(LDFLAGS) -Wl,-soname,libmapiproxy.$(SHLIBEXT).$(LIBMAPIPROXY_SO_VERSION) $^ -L. $(LIBS) $(TDB_LIBS) $(DL_LIBS) $(MYSQL_LIBS) $(PYTHON_LIBS) + +@@ -962,7 +962,7 @@ mapiproxy/libmapistore.$(SHLIBEXT).$(PAC + mapiproxy/util/ccan/htable/htable.po \ + mapiproxy/util/ccan/hash/hash.po \ + mapiproxy/libmapiproxy.$(SHLIBEXT).$(PACKAGE_VERSION) \ +- libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) ++ libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION) + @echo "Linking $@" + @$(CC) $(DSOOPT) $(MEMCACHED_CFLAGS) $(CFLAGS) $(LDFLAGS) -Wl,-soname,libmapistore.$(SHLIBEXT).$(LIBMAPISTORE_SO_VERSION) -o $@ $^ $(LIBS) $(TDB_LIBS) $(DL_LIBS) $(MYSQL_LIBS) $(MEMCACHED_LIBS) + +@@ -984,7 +984,7 @@ mapistore_test: bin/mapistore_test + bin/mapistore_test: mapiproxy/libmapistore/tests/mapistore_test.o \ + mapiproxy/libmapistore.$(SHLIBEXT).$(PACKAGE_VERSION) \ + mapiproxy/libmapiproxy.$(SHLIBEXT).$(PACKAGE_VERSION) \ +- libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) ++ libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION) + @echo "Linking $@" + @$(CC) -o $@ $^ $(LDFLAGS) $(LIBS) -lpopt + +@@ -1178,7 +1178,7 @@ clean:: openchangeclient-clean + + bin/openchangeclient: utils/openchangeclient.o \ + utils/openchange-tools.o \ +- libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) \ ++ libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION) \ + libocpf.$(SHLIBEXT).$(PACKAGE_VERSION) + @echo "Linking $@" + @$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(LIBS) -lpopt +@@ -1207,7 +1207,7 @@ clean:: mapiprofile-clean + + bin/mapiprofile: utils/mapiprofile.o \ + utils/openchange-tools.o \ +- libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) ++ libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION) + @echo "Linking $@" + @$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(LIBS) -lpopt + +@@ -1233,7 +1233,7 @@ clean:: ocnotify-clean + bin/ocnotify: utils/ocnotify.o \ + mapiproxy/libmapistore.$(SHLIBEXT).$(PACKAGE_VERSION) \ + mapiproxy/libmapiproxy.$(SHLIBEXT).$(PACKAGE_VERSION) \ +- libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) ++ libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION) + @echo "Linking $@" + @$(CC) $(CFLAGS) $(NANOMSG_CFLAGS) -o $@ $^ $(LDFLAGS) $(NANOMSG_LIBS) $(LIBS) -lpopt + +@@ -1257,7 +1257,7 @@ rpcextract-clean:: + clean:: rpcextract-clean + + bin/rpcextract: utils/rpcextract.o \ +- libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) ++ libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION) + @echo "Linking $@" + @$(CC) $(CFLAGS) $(PCAP_CFLAGS) -o $@ $^ $(LDFLAGS) $(PCAP_LIBS) $(LIBS) -lpopt -lndr + +@@ -1282,7 +1282,7 @@ mapipropsdump-clean:: + clean:: mapipropsdump-clean + + bin/mapipropsdump: utils/mapipropsdump.o \ +- libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) ++ libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION) + @echo "Linking $@" + @$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) $(SAMBA_LIBS) $(LIBS) $(DL_LIBS) -lpopt -lndr + +@@ -1309,7 +1309,7 @@ clean:: openchangepfadmin-clean + + bin/openchangepfadmin: utils/openchangepfadmin.o \ + utils/openchange-tools.o \ +- libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) \ ++ libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION) \ + libmapiadmin.$(SHLIBEXT).$(PACKAGE_VERSION) + @echo "Linking $@" + @$(CC) -o $@ $^ $(LDFLAGS) $(LIBS) $(LIBMAPIADMIN_LIBS) -lpopt +@@ -1341,7 +1341,7 @@ clean:: exchange2mbox-clean + + bin/exchange2mbox: utils/exchange2mbox.o \ + utils/openchange-tools.o \ +- libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) ++ libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION) + @echo "Linking $@" + @$(CC) -o $@ $^ $(LIBS) $(LDFLAGS) -lpopt $(MAGIC_LIBS) + +@@ -1405,7 +1405,7 @@ bin/exchange2ical: utils/exchange2ical_t + libexchange2ical/ical2exchange.o \ + libexchange2ical/ical2exchange_property.o \ + utils/openchange-tools.o \ +- libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) ++ libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION) + @echo "Linking $@" + @$(CC) $(LDFLAGS) -o $@ $^ $(LIBS) $(ICAL_LIBS) -lpopt + +@@ -1445,7 +1445,7 @@ bin/openchange-testsuite: testsuite/tes + mapiproxy/libmapistore.$(SHLIBEXT).$(PACKAGE_VERSION) \ + mapiproxy/libmapiproxy.$(SHLIBEXT).$(PACKAGE_VERSION) + @echo "Linking $@" +- @$(CC) $(CFLAGS) $(CHECK_CFLAGS) $(TDB_CFLAGS) $(PYTHON_CFLAGS) -I. -Itestsuite/ -Imapiproxy -o $@ $^ $(LDFLAGS) $(LIBS) $(TDB_LIBS) $(CHECK_LIBS) $(MYSQL_LIBS) $(PYTHON_LIBS) -lpopt libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) $(MEMCACHED_LIBS) ++ @$(CC) $(CFLAGS) $(CHECK_CFLAGS) $(TDB_CFLAGS) $(PYTHON_CFLAGS) -I. -Itestsuite/ -Imapiproxy -o $@ $^ $(LDFLAGS) $(LIBS) $(TDB_LIBS) $(CHECK_LIBS) $(MYSQL_LIBS) $(PYTHON_LIBS) -lpopt libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION) $(MEMCACHED_LIBS) + + testsuite-check: testsuite + @LD_LIBRARY_PATH=. PYTHONPATH=./python CK_XML_LOG_FILE_NAME=test_results.xml ./bin/openchange-testsuite +@@ -1513,7 +1513,7 @@ bin/mapitest: utils/mapitest/mapitest.o + utils/mapitest/modules/module_lcid.o \ + utils/mapitest/modules/module_mapidump.o \ + utils/mapitest/modules/module_lzxpress.o \ +- libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) ++ libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION) + @echo "Linking $@" + @$(CC) -o $@ $^ $(LDFLAGS) $(LIBS) -lpopt $(SUBUNIT_LIBS) + +@@ -1574,7 +1574,7 @@ clean:: openchangemapidump-clean + bin/openchangemapidump: utils/backup/openchangemapidump.o \ + utils/backup/openchangebackup.o \ + utils/openchange-tools.o \ +- libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) ++ libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION) + @echo "Linking $@" + @$(CC) -o $@ $^ $(LDFLAGS) $(LIBS) -lpopt + +@@ -1625,7 +1625,7 @@ check_fasttransfer-clean:: + clean:: check_fasttransfer-clean + + bin/check_fasttransfer: testprogs/check_fasttransfer.o \ +- libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) \ ++ libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION) \ + mapiproxy/libmapistore.$(SHLIBEXT).$(PACKAGE_VERSION) \ + mapiproxy/libmapiproxy.$(SHLIBEXT).$(PACKAGE_VERSION) + @echo "Linking $@" +@@ -1653,7 +1653,7 @@ test_asyncnotif-clean:: + clean:: test_asyncnotif-clean + + bin/test_asyncnotif: testprogs/test_asyncnotif.o \ +- libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) ++ libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION) + @echo "Linking $@" + @$(CC) -o $@ $^ $(LIBS) $(LDFLAGS) -lpopt + +@@ -1701,13 +1701,13 @@ pyopenchange: $(pythonscriptdir)/opench + + $(pythonscriptdir)/openchange/mapi.$(SHLIBEXT): pyopenchange/pymapi.c \ + pyopenchange/pymapi_properties.c \ +- libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) ++ libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION) + @echo "Linking $@" + @$(CC) $(PYTHON_CFLAGS) $(CFLAGS) -fno-strict-aliasing $(DSOOPT) $(LDFLAGS) -o $@ $^ $(PYTHON_LIBS) $(LIBS) + + # $(pythonscriptdir)/openchange/ocpf.$(SHLIBEXT): pyopenchange/pyocpf.c \ + # libocpf.$(SHLIBEXT).$(PACKAGE_VERSION) \ +-# libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) ++# libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION) + # @echo "Linking $@" + # @$(CC) $(PYTHON_CFLAGS) $(CFLAGS) $(DSOOPT) $(LDFLAGS) -o $@ $^ $(PYTHON_LIBS) $(LIBS) + +@@ -1894,7 +1894,7 @@ libqtmapi.$(SHLIBEXT).$(PACKAGE_VERSION) + + qt/demo/demoapp: qt/demo/demoapp.o \ + qt/demo/main.o \ +- libmapi.$(SHLIBEXT).$(PACKAGE_VERSION) \ ++ libmapi-openchange.$(SHLIBEXT).$(PACKAGE_VERSION) \ + libmapipp.$(SHLIBEXT).$(PACKAGE_VERSION) \ + libqtmapi.$(SHLIBEXT).$(PACKAGE_VERSION) + @echo "Linking $@" diff --git a/SOURCES/openchange-0.9-generate-xml-doc.patch b/SOURCES/openchange-0.9-generate-xml-doc.patch new file mode 100644 index 0000000..49b84f3 --- /dev/null +++ b/SOURCES/openchange-0.9-generate-xml-doc.patch @@ -0,0 +1,196 @@ +diff -up openchange-2.0-QUADRANT/Doxyfile.in.generate-xml-doc openchange-2.0-QUADRANT/Doxyfile.in +--- openchange-2.0-QUADRANT/Doxyfile.in.generate-xml-doc 2013-01-24 19:55:36.000000000 +0100 ++++ openchange-2.0-QUADRANT/Doxyfile.in 2013-02-14 12:23:27.594802658 +0100 +@@ -224,7 +224,7 @@ SUBGROUPING = YES + # Private class members and static file members will be hidden unless + # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +-EXTRACT_ALL = NO ++EXTRACT_ALL = YES + + # If the EXTRACT_PRIVATE tag is set to YES all private members of a class + # will be included in the documentation. +@@ -918,13 +918,13 @@ MAN_LINKS = YES + # generate an XML file that captures the structure of + # the code including all documentation. + +-GENERATE_XML = NO ++GENERATE_XML = YES + + # The XML_OUTPUT tag is used to specify where the XML pages will be put. + # If a relative path is entered the value of OUTPUT_DIRECTORY will be + # put in front of it. If left blank `xml' will be used as the default path. + +-XML_OUTPUT = xml ++XML_OUTPUT = xml/overview + + # The XML_SCHEMA tag can be used to specify an XML schema, + # which can be used by a validating XML parser to check the +diff -up openchange-2.0-QUADRANT/libmapiadmin/Doxyfile.in.generate-xml-doc openchange-2.0-QUADRANT/libmapiadmin/Doxyfile.in +--- openchange-2.0-QUADRANT/libmapiadmin/Doxyfile.in.generate-xml-doc 2013-01-24 19:55:36.000000000 +0100 ++++ openchange-2.0-QUADRANT/libmapiadmin/Doxyfile.in 2013-02-14 12:23:27.594802658 +0100 +@@ -224,7 +224,7 @@ SUBGROUPING = YES + # Private class members and static file members will be hidden unless + # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +-EXTRACT_ALL = NO ++EXTRACT_ALL = YES + + # If the EXTRACT_PRIVATE tag is set to YES all private members of a class + # will be included in the documentation. +@@ -916,13 +916,13 @@ MAN_LINKS = YES + # generate an XML file that captures the structure of + # the code including all documentation. + +-GENERATE_XML = NO ++GENERATE_XML = YES + + # The XML_OUTPUT tag is used to specify where the XML pages will be put. + # If a relative path is entered the value of OUTPUT_DIRECTORY will be + # put in front of it. If left blank `xml' will be used as the default path. + +-XML_OUTPUT = xml ++XML_OUTPUT = xml/libmapiadmin + + # The XML_SCHEMA tag can be used to specify an XML schema, + # which can be used by a validating XML parser to check the +diff -up openchange-2.0-QUADRANT/libmapi/Doxyfile.in.generate-xml-doc openchange-2.0-QUADRANT/libmapi/Doxyfile.in +--- openchange-2.0-QUADRANT/libmapi/Doxyfile.in.generate-xml-doc 2013-01-24 19:55:36.000000000 +0100 ++++ openchange-2.0-QUADRANT/libmapi/Doxyfile.in 2013-02-14 12:23:27.594802658 +0100 +@@ -224,7 +224,7 @@ SUBGROUPING = YES + # Private class members and static file members will be hidden unless + # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +-EXTRACT_ALL = NO ++EXTRACT_ALL = YES + + # If the EXTRACT_PRIVATE tag is set to YES all private members of a class + # will be included in the documentation. +@@ -922,13 +922,13 @@ MAN_LINKS = YES + # generate an XML file that captures the structure of + # the code including all documentation. + +-GENERATE_XML = NO ++GENERATE_XML = YES + + # The XML_OUTPUT tag is used to specify where the XML pages will be put. + # If a relative path is entered the value of OUTPUT_DIRECTORY will be + # put in front of it. If left blank `xml' will be used as the default path. + +-XML_OUTPUT = xml ++XML_OUTPUT = xml/libmapi + + # The XML_SCHEMA tag can be used to specify an XML schema, + # which can be used by a validating XML parser to check the +diff -up openchange-2.0-QUADRANT/libmapi++/Doxyfile.in.generate-xml-doc openchange-2.0-QUADRANT/libmapi++/Doxyfile.in +--- openchange-2.0-QUADRANT/libmapi++/Doxyfile.in.generate-xml-doc 2013-01-24 19:55:36.000000000 +0100 ++++ openchange-2.0-QUADRANT/libmapi++/Doxyfile.in 2013-02-14 12:23:27.595802671 +0100 +@@ -224,7 +224,7 @@ SUBGROUPING = YES + # Private class members and static file members will be hidden unless + # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +-EXTRACT_ALL = NO ++EXTRACT_ALL = YES + + # If the EXTRACT_PRIVATE tag is set to YES all private members of a class + # will be included in the documentation. +@@ -901,13 +901,13 @@ MAN_LINKS = YES + # generate an XML file that captures the structure of + # the code including all documentation. + +-GENERATE_XML = NO ++GENERATE_XML = YES + + # The XML_OUTPUT tag is used to specify where the XML pages will be put. + # If a relative path is entered the value of OUTPUT_DIRECTORY will be + # put in front of it. If left blank `xml' will be used as the default path. + +-XML_OUTPUT = xml ++XML_OUTPUT = xml/libmapi++ + + # The XML_SCHEMA tag can be used to specify an XML schema, + # which can be used by a validating XML parser to check the +diff -up openchange-2.0-QUADRANT/libocpf/Doxyfile.in.generate-xml-doc openchange-2.0-QUADRANT/libocpf/Doxyfile.in +--- openchange-2.0-QUADRANT/libocpf/Doxyfile.in.generate-xml-doc 2013-01-24 19:55:36.000000000 +0100 ++++ openchange-2.0-QUADRANT/libocpf/Doxyfile.in 2013-02-14 12:23:27.595802671 +0100 +@@ -224,7 +224,7 @@ SUBGROUPING = YES + # Private class members and static file members will be hidden unless + # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +-EXTRACT_ALL = NO ++EXTRACT_ALL = YES + + # If the EXTRACT_PRIVATE tag is set to YES all private members of a class + # will be included in the documentation. +@@ -920,13 +920,13 @@ MAN_LINKS = YES + # generate an XML file that captures the structure of + # the code including all documentation. + +-GENERATE_XML = NO ++GENERATE_XML = YES + + # The XML_OUTPUT tag is used to specify where the XML pages will be put. + # If a relative path is entered the value of OUTPUT_DIRECTORY will be + # put in front of it. If left blank `xml' will be used as the default path. + +-XML_OUTPUT = xml ++XML_OUTPUT = xml/libocpf + + # The XML_SCHEMA tag can be used to specify an XML schema, + # which can be used by a validating XML parser to check the +diff -up openchange-2.0-QUADRANT/mapiproxy/Doxyfile.in.generate-xml-doc openchange-2.0-QUADRANT/mapiproxy/Doxyfile.in +--- openchange-2.0-QUADRANT/mapiproxy/Doxyfile.in.generate-xml-doc 2013-01-24 19:55:36.000000000 +0100 ++++ openchange-2.0-QUADRANT/mapiproxy/Doxyfile.in 2013-02-14 12:23:27.596802685 +0100 +@@ -286,7 +286,7 @@ SYMBOL_CACHE_SIZE = 0 + # Private class members and static file members will be hidden unless + # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +-EXTRACT_ALL = NO ++EXTRACT_ALL = YES + + # If the EXTRACT_PRIVATE tag is set to YES all private members of a class + # will be included in the documentation. +@@ -1118,13 +1118,13 @@ MAN_LINKS = YES + # generate an XML file that captures the structure of + # the code including all documentation. + +-GENERATE_XML = NO ++GENERATE_XML = YES + + # The XML_OUTPUT tag is used to specify where the XML pages will be put. + # If a relative path is entered the value of OUTPUT_DIRECTORY will be + # put in front of it. If left blank `xml' will be used as the default path. + +-XML_OUTPUT = xml ++XML_OUTPUT = xml/mapiproxy + + # The XML_SCHEMA tag can be used to specify an XML schema, + # which can be used by a validating XML parser to check the +diff -up openchange-2.0-QUADRANT/utils/mapitest/Doxyfile.in.generate-xml-doc openchange-2.0-QUADRANT/utils/mapitest/Doxyfile.in +--- openchange-2.0-QUADRANT/utils/mapitest/Doxyfile.in.generate-xml-doc 2013-01-24 19:55:36.000000000 +0100 ++++ openchange-2.0-QUADRANT/utils/mapitest/Doxyfile.in 2013-02-14 12:23:27.596802685 +0100 +@@ -224,7 +224,7 @@ SUBGROUPING = YES + # Private class members and static file members will be hidden unless + # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +-EXTRACT_ALL = NO ++EXTRACT_ALL = YES + + # If the EXTRACT_PRIVATE tag is set to YES all private members of a class + # will be included in the documentation. +@@ -914,13 +914,13 @@ MAN_LINKS = YES + # generate an XML file that captures the structure of + # the code including all documentation. + +-GENERATE_XML = NO ++GENERATE_XML = YES + + # The XML_OUTPUT tag is used to specify where the XML pages will be put. + # If a relative path is entered the value of OUTPUT_DIRECTORY will be + # put in front of it. If left blank `xml' will be used as the default path. + +-XML_OUTPUT = xml ++XML_OUTPUT = xml/mapitest + + # The XML_SCHEMA tag can be used to specify an XML schema, + # which can be used by a validating XML parser to check the diff --git a/SOURCES/openchange-1.0-OC_RULE_ADD-fix.patch b/SOURCES/openchange-1.0-OC_RULE_ADD-fix.patch new file mode 100644 index 0000000..9435bfd --- /dev/null +++ b/SOURCES/openchange-1.0-OC_RULE_ADD-fix.patch @@ -0,0 +1,12 @@ +diff -up openchange-2.1-QUADRANT/configure.ac.OC_RULE_ADD-fix openchange-2.1-QUADRANT/configure.ac +--- openchange-2.1-QUADRANT/configure.ac.OC_RULE_ADD-fix 2014-04-28 11:41:13.075975644 +0200 ++++ openchange-2.1-QUADRANT/configure.ac 2014-04-28 11:56:50.991936546 +0200 +@@ -639,7 +639,7 @@ dnl #################################### + dnl mapiproxy server + dnl ########################################################################## + if test x$PYTHON != x; then +- if test "x$SAMBASERVER_LIBS" != x ; then ++ if test "x$SAMDB_LIBS" != x -a "x$SAMBASERVER_LIBS" != x ; then + mapiproxy=1 + fi + fi diff --git a/SOURCES/openchange-1.0-symbol-clash.patch b/SOURCES/openchange-1.0-symbol-clash.patch new file mode 100644 index 0000000..1c352e6 --- /dev/null +++ b/SOURCES/openchange-1.0-symbol-clash.patch @@ -0,0 +1,109 @@ +diff -up openchange-2.1-QUADRANT/libmapi/emsmdb.c.symbol-clash openchange-2.1-QUADRANT/libmapi/emsmdb.c +--- openchange-2.1-QUADRANT/libmapi/emsmdb.c.symbol-clash 2014-04-28 11:58:17.560932938 +0200 ++++ openchange-2.1-QUADRANT/libmapi/emsmdb.c 2014-04-28 12:00:21.085927789 +0200 +@@ -644,7 +644,7 @@ struct mapi_notify_ctx *emsmdb_bind_noti + notify_ctx->notifications->next = NULL; + + openchange_load_interfaces(mem_ctx, lpcfg_interfaces(mapi_ctx->lp_ctx), &ifaces); +- ipaddr = iface_best_ip(ifaces, mapi_ctx->session->profile->server); ++ ipaddr = libmapi_iface_best_ip(ifaces, mapi_ctx->session->profile->server); + if (!ipaddr) { + talloc_free(notify_ctx->notifications); + talloc_free(notify_ctx); +diff -up openchange-2.1-QUADRANT/libmapi/libmapi_private.h.symbol-clash openchange-2.1-QUADRANT/libmapi/libmapi_private.h +--- openchange-2.1-QUADRANT/libmapi/libmapi_private.h.symbol-clash 2014-04-28 11:58:17.560932938 +0200 ++++ openchange-2.1-QUADRANT/libmapi/libmapi_private.h 2014-04-28 12:05:13.875915584 +0200 +@@ -123,13 +123,13 @@ uint16_t mapi_recipients_RecipientFlags + + /* The following private definitions come from libmapi/socket/interface.c */ + void openchange_load_interfaces(TALLOC_CTX *, const char **, struct interface **); +-int iface_count(struct interface *); +-const char *iface_n_ip(struct interface *, int); +-const char *iface_n_bcast(struct interface *, int); +-const char *iface_n_netmask(struct interface *, int); +-const char *iface_best_ip(struct interface *, const char *); +-bool iface_is_local(struct interface *, const char *); +-bool iface_same_net(const char *, const char *, const char *); ++int libmapi_iface_count(struct interface *); ++const char *libmapi_iface_n_ip(struct interface *, int); ++const char *libmapi_iface_n_bcast(struct interface *, int); ++const char *libmapi_iface_n_netmask(struct interface *, int); ++const char *libmapi_iface_best_ip(struct interface *, const char *); ++bool libmapi_iface_is_local(struct interface *, const char *); ++bool libmapi_iface_same_net(const char *, const char *, const char *); + + __END_DECLS + +diff -up openchange-2.1-QUADRANT/libmapi/socket/interface.c.symbol-clash openchange-2.1-QUADRANT/libmapi/socket/interface.c +--- openchange-2.1-QUADRANT/libmapi/socket/interface.c.symbol-clash 2014-04-23 21:43:06.000000000 +0200 ++++ openchange-2.1-QUADRANT/libmapi/socket/interface.c 2014-04-28 11:58:17.560932938 +0200 +@@ -228,7 +228,7 @@ void openchange_load_interfaces(TALLOC_C + /** + how many interfaces do we have + **/ +-int iface_count(struct interface *ifaces) ++int libmapi_iface_count(struct interface *ifaces) + { + int ret = 0; + struct interface *i; +@@ -241,7 +241,7 @@ int iface_count(struct interface *ifaces + /** + return IP of the Nth interface + **/ +-const char *iface_n_ip(struct interface *ifaces, int n) ++const char *libmapi_iface_n_ip(struct interface *ifaces, int n) + { + struct interface *i; + +@@ -257,7 +257,7 @@ const char *iface_n_ip(struct interface + /** + return bcast of the Nth interface + **/ +-const char *iface_n_bcast(struct interface *ifaces, int n) ++const char *libmapi_iface_n_bcast(struct interface *ifaces, int n) + { + struct interface *i; + +@@ -273,7 +273,7 @@ const char *iface_n_bcast(struct interfa + /** + return netmask of the Nth interface + **/ +-const char *iface_n_netmask(struct interface *ifaces, int n) ++const char *libmapi_iface_n_netmask(struct interface *ifaces, int n) + { + struct interface *i; + +@@ -290,7 +290,7 @@ const char *iface_n_netmask(struct inter + return the local IP address that best matches a destination IP, or + our first interface if none match + */ +-const char *iface_best_ip(struct interface *ifaces, const char *dest) ++const char *libmapi_iface_best_ip(struct interface *ifaces, const char *dest) + { + struct interface *iface; + struct in_addr ip; +@@ -300,13 +300,13 @@ const char *iface_best_ip(struct interfa + if (iface) { + return iface->ip_s; + } +- return iface_n_ip(ifaces, 0); ++ return libmapi_iface_n_ip(ifaces, 0); + } + + /** + return true if an IP is one one of our local networks + */ +-bool iface_is_local(struct interface *ifaces, const char *dest) ++bool libmapi_iface_is_local(struct interface *ifaces, const char *dest) + { + struct in_addr ip; + +@@ -320,7 +320,7 @@ bool iface_is_local(struct interface *if + /** + return true if a IP matches a IP/netmask pair + */ +-bool iface_same_net(const char *ip1, const char *ip2, const char *netmask) ++bool libmapi_iface_same_net(const char *ip1, const char *ip2, const char *netmask) + { + return same_net_v4(interpret_addr2(ip1), + interpret_addr2(ip2), diff --git a/SOURCES/openchange-2.2-samba-4.2.0-rc2.patch b/SOURCES/openchange-2.2-samba-4.2.0-rc2.patch new file mode 100644 index 0000000..d154505 --- /dev/null +++ b/SOURCES/openchange-2.2-samba-4.2.0-rc2.patch @@ -0,0 +1,136 @@ +diff -up openchange-openchange-2.3-VULCAN/libmapi/cdo_mapi.c.samba-4.2.0-rc2 openchange-openchange-2.3-VULCAN/libmapi/cdo_mapi.c +--- openchange-openchange-2.3-VULCAN/libmapi/cdo_mapi.c.samba-4.2.0-rc2 2015-12-03 11:20:17.502119228 +0100 ++++ openchange-openchange-2.3-VULCAN/libmapi/cdo_mapi.c 2015-12-03 11:20:44.524118102 +0100 +@@ -337,6 +337,9 @@ _PUBLIC_ enum MAPISTATUS SetMAPIDebugLev + ret = lpcfg_set_cmdline(mapi_ctx->lp_ctx, "log level", debuglevel); + talloc_free(debuglevel); + ++ if (ret) ++ _oc_log_samba_level = level; ++ + return (ret == true) ? MAPI_E_SUCCESS : MAPI_E_INVALID_PARAMETER; + } + +diff -up openchange-openchange-2.3-VULCAN/libmapi/oc_log.c.samba-4.2.0-rc2 openchange-openchange-2.3-VULCAN/libmapi/oc_log.c +--- openchange-openchange-2.3-VULCAN/libmapi/oc_log.c.samba-4.2.0-rc2 2015-12-03 11:11:01.801142393 +0100 ++++ openchange-openchange-2.3-VULCAN/libmapi/oc_log.c 2015-12-03 11:27:22.921101494 +0100 +@@ -20,7 +20,9 @@ + */ + + #include "libmapi/libmapi.h" +-#include ++#include ++ ++int _oc_log_samba_level = 0; + + void oc_log(enum oc_log_level level, const char *fmt_string, ...) + { +@@ -47,12 +49,16 @@ void oc_logv(enum oc_log_level level, co + samba_level = 0; + } + ++ if (samba_level && !(_oc_log_samba_level & samba_level)) ++ return; ++ + /* Add a trailing newline if one is not already present */ + if (line[strlen(line)-1] == '\n') { +- DEBUG(samba_level, ("%s", line)); ++ fprintf(stderr, "%s", line); + } else { +- DEBUG(samba_level, ("%s\n", line)); ++ fprintf(stderr, "%s\n", line); + } ++ fflush(stderr); + } + + void oc_log_init_stdout() +diff -up openchange-openchange-2.3-VULCAN/libmapi/oc_log.h.samba-4.2.0-rc2 openchange-openchange-2.3-VULCAN/libmapi/oc_log.h +--- openchange-openchange-2.3-VULCAN/libmapi/oc_log.h.samba-4.2.0-rc2 2015-12-03 11:18:27.407123817 +0100 ++++ openchange-openchange-2.3-VULCAN/libmapi/oc_log.h 2015-12-03 11:20:19.228119156 +0100 +@@ -77,4 +77,6 @@ void oc_log_init_user(const char *progna + defaulting to /var/log/openchange.log */ + void oc_log_init_server(const char *progname, struct loadparm_context *lp_ctx); + ++extern int _oc_log_samba_level; /* Private, do not change it other than by SetMAPIDebugLevel() */ ++ + #endif /* _OC_LOG_H_ */ +diff -up openchange-openchange-2.3-VULCAN/mapiproxy/libmapiproxy/fault_util.c.samba-4.2.0-rc2 openchange-openchange-2.3-VULCAN/mapiproxy/libmapiproxy/fault_util.c +--- openchange-openchange-2.3-VULCAN/mapiproxy/libmapiproxy/fault_util.c.samba-4.2.0-rc2 2015-12-03 11:11:17.337141745 +0100 ++++ openchange-openchange-2.3-VULCAN/mapiproxy/libmapiproxy/fault_util.c 2015-12-03 11:27:46.505100511 +0100 +@@ -30,14 +30,14 @@ + #include "fault_util.h" + #include "libmapi/libmapi.h" + #include "libmapi/libmapi_private.h" +-#include ++#include + + #include + + #include + + /** +- \details print a backtrace using DEBUG() macro. ++ \details print a backtrace (*not* using DEBUG() macro). + + */ + _PUBLIC_ void debug_print_backtrace(int dbg_level) +@@ -47,16 +47,19 @@ _PUBLIC_ void debug_print_backtrace(int + size_t backtrace_size; + char **backtrace_strings; + ++ if (!(_oc_log_samba_level & dbg_level)) ++ return; ++ + backtrace_size = backtrace(backtrace_stack, BACKTRACE_SIZE); + backtrace_strings = backtrace_symbols(backtrace_stack, backtrace_size); + +- DEBUG(dbg_level, ("BACKTRACE: %lu stack frames:\n", (unsigned long)backtrace_size)); ++ fprintf(stderr, "BACKTRACE: %lu stack frames:\n", (unsigned long)backtrace_size); + + if (backtrace_strings) { + int i; + + for (i = 0; i < backtrace_size; i++) { +- DEBUGADD(dbg_level, (" #%.2u %s\n", i, backtrace_strings[i])); ++ fprintf(stderr, " #%.2u %s\n", i, backtrace_strings[i]); + } + + free(backtrace_strings); +diff -up openchange-openchange-2.3-VULCAN/mapiproxy/libmapiproxy/fault_util.h.samba-4.2.0-rc2 openchange-openchange-2.3-VULCAN/mapiproxy/libmapiproxy/fault_util.h +--- openchange-openchange-2.3-VULCAN/mapiproxy/libmapiproxy/fault_util.h.samba-4.2.0-rc2 2015-12-03 11:11:37.089140922 +0100 ++++ openchange-openchange-2.3-VULCAN/mapiproxy/libmapiproxy/fault_util.h 2015-12-03 11:26:38.633103340 +0100 +@@ -28,7 +28,7 @@ + * It will print information about the error and if is_fatal is true abort() + * will be called. + * +- * DEBUG macro will be used to print a report with the following format: ++ * DEBUG macro will *not* be used to print a report with the following format: + * @code + * ================================== + * OPENCHANGE INTERNAL ERROR: pid 123 +@@ -59,9 +59,10 @@ + * @see DEBUG() + */ + #define OC_PANIC( is_fatal, body ) \ +- DEBUGSEP(0); \ +- DEBUG(0, ("OPENCHANGE INTERNAL ERROR: pid %d\n", (int)getpid())); \ +- DEBUG(0, body); \ ++ fprintf(stderr,"\n"); \ ++ fprintf(stderr, "OPENCHANGE INTERNAL ERROR: pid %d\n", (int)getpid()); \ ++ fprintf(stderr, body); \ ++ fflush(stderr); \ + openchange_abort(is_fatal); + + #ifndef __BEGIN_DECLS +diff -up openchange-openchange-2.3-VULCAN/mapiproxy/libmapiproxy/mapi_handles.c.samba-4.2.0-rc2 openchange-openchange-2.3-VULCAN/mapiproxy/libmapiproxy/mapi_handles.c +--- openchange-openchange-2.3-VULCAN/mapiproxy/libmapiproxy/mapi_handles.c.samba-4.2.0-rc2 2015-12-03 11:12:08.457139614 +0100 ++++ openchange-openchange-2.3-VULCAN/mapiproxy/libmapiproxy/mapi_handles.c 2015-12-03 11:26:50.473102847 +0100 +@@ -429,7 +429,7 @@ static int mapi_handles_traverse_delete( + OC_DEBUG(5, "handles being released must NOT have child handles attached to them (%s is a child of %s)", handle_str, container_handle_str); + handle = strtol((const char *) handle_str, NULL, 16); + /* abort(); */ +- /* DEBUG(5, ("deleting child handle: %d, %s\n", handle, handle_str)); */ ++ /* OC_DEBUG(5, ("deleting child handle: %d, %s\n", handle, handle_str)); */ + mapi_handles_delete(handles_private->handles_ctx, handle); + } + diff --git a/SOURCES/openchange-2.3-covscan.patch b/SOURCES/openchange-2.3-covscan.patch new file mode 100644 index 0000000..69b2890 --- /dev/null +++ b/SOURCES/openchange-2.3-covscan.patch @@ -0,0 +1,675 @@ +diff -up openchange-openchange-2.3-VULCAN/libexchange2ical/exchange2ical_property.c.covscan openchange-openchange-2.3-VULCAN/libexchange2ical/exchange2ical_property.c +--- openchange-openchange-2.3-VULCAN/libexchange2ical/exchange2ical_property.c.covscan 2018-07-19 13:53:41.281450703 +0200 ++++ openchange-openchange-2.3-VULCAN/libexchange2ical/exchange2ical_property.c 2018-07-19 13:53:41.285450703 +0200 +@@ -53,6 +53,7 @@ static void openchange_all_string_sub(ch + } + } + ++#if 0 + struct RRULE_byday { + uint16_t DayOfWeek; + const char *DayName; +@@ -68,6 +69,7 @@ static const struct RRULE_byday RRULE_by + { 0x0006, "SA" }, + { 0x0007, NULL } + }; ++#endif + + static const char *get_filename(const char *filename) + { +diff -up openchange-openchange-2.3-VULCAN/libexchange2ical/exchange2ical_utils.c.covscan openchange-openchange-2.3-VULCAN/libexchange2ical/exchange2ical_utils.c +--- openchange-openchange-2.3-VULCAN/libexchange2ical/exchange2ical_utils.c.covscan 2018-07-19 13:53:41.281450703 +0200 ++++ openchange-openchange-2.3-VULCAN/libexchange2ical/exchange2ical_utils.c 2018-07-19 13:53:41.285450703 +0200 +@@ -232,7 +232,7 @@ uint32_t get_exchange_rdfDays_from_ical( + + struct icaltimetype get_icaltimetype_from_tm(struct tm *tm) + { +- struct icaltimetype tt; ++ struct icaltimetype tt = icaltime_null_time (); + + tt.year = tm->tm_year+1900; + tt.month = tm->tm_mon+1; +@@ -259,7 +259,7 @@ struct icaltimetype get_icaltimetype_fro + + struct icaltimetype get_icaldate_from_tm(struct tm *tm) + { +- struct icaltimetype tt; ++ struct icaltimetype tt = icaltime_null_time (); + + tt.year = tm->tm_year+1900; + tt.month = tm->tm_mon+1; +@@ -267,6 +267,7 @@ struct icaltimetype get_icaldate_from_tm + tt.hour = 0; + tt.minute = 0; + tt.second = 0; ++ tt.zone = NULL; + + tt.is_date = 1; + tt.is_daylight = 0; +@@ -292,7 +293,7 @@ struct tm *get_tm_from_FILETIME(const st + + struct icaltimetype get_icaltime_from_FILETIME(const struct FILETIME *ft) + { +- struct icaltimetype tt; ++ struct icaltimetype tt = icaltime_null_time (); + NTTIME nttime; + struct timeval temp_timeval; + struct tm *tm; +@@ -317,7 +318,7 @@ struct icaltimetype get_icaltime_from_FI + + struct icaltimetype get_icaltime_from_FILETIME_UTC(const struct FILETIME *ft) + { +- struct icaltimetype tt; ++ struct icaltimetype tt = icaltime_null_time (); + NTTIME nttime; + struct timeval temp_timeval; + struct tm *tm; +@@ -342,7 +343,7 @@ struct icaltimetype get_icaltime_from_FI + + struct icaltimetype get_icaldate_from_FILETIME(const struct FILETIME *ft) + { +- struct icaltimetype tt; ++ struct icaltimetype tt = icaltime_null_time (); + NTTIME nttime; + struct timeval temp_timeval; + struct tm *tm; +@@ -373,7 +374,7 @@ struct icaltimetype get_icaldate_from_FI + + struct icaltimetype get_icaldate_from_GlobalObjectId(struct GlobalObjectId *GlobalObjectId) + { +- struct icaltimetype tt; ++ struct icaltimetype tt = icaltime_null_time (); + tt.year = GlobalObjectId->YH; + tt.year = tt.year <<8; + tt.year |= GlobalObjectId->YL; +@@ -513,7 +514,10 @@ uint32_t get_minutes_from_icaltimetype(i + time_t time; + NTTIME nttime; + struct timeval t; +- ++ ++ if (icaltime_is_null_time(icaltime) || !icaltime_is_valid_time(icaltime)) ++ return 0; ++ + tm.tm_year = icaltime.year - 1900; + tm.tm_mon = icaltime.month - 1; + tm.tm_mday = icaltime.day; +diff -up openchange-openchange-2.3-VULCAN/libexchange2ical/ical2exchange_property.c.covscan openchange-openchange-2.3-VULCAN/libexchange2ical/ical2exchange_property.c +--- openchange-openchange-2.3-VULCAN/libexchange2ical/ical2exchange_property.c.covscan 2015-05-16 17:22:04.000000000 +0200 ++++ openchange-openchange-2.3-VULCAN/libexchange2ical/ical2exchange_property.c 2018-07-19 13:53:41.286450703 +0200 +@@ -147,7 +147,6 @@ void ical2exchange_property_CATEGORIES(s + struct StringArray_r *sArray; + char **stringArray = NULL; + char string[256]; +- char *value; + char *tok; + icalproperty *categoriesProp; + uint32_t i = 0; +@@ -160,8 +159,10 @@ void ical2exchange_property_CATEGORIES(s + categoriesProp = icalcomponent_get_first_property(ical2exchange->categoriesEvent, ICAL_CATEGORIES_PROPERTY); + sArray->cValues = 0; + while(categoriesProp){ +- +- value = strdup(icalproperty_get_categories(categoriesProp)); ++ const char *categories = icalproperty_get_categories(categoriesProp); ++ char *value; ++ ++ value = strdup(categories ? categories : ""); + tok = strtok(value, ","); + while(tok){ + if(!stringArray){ +@@ -185,6 +186,7 @@ void ical2exchange_property_CATEGORIES(s + } + categoriesProp = icalcomponent_get_next_property(ical2exchange->categoriesEvent, ICAL_CATEGORIES_PROPERTY); + ++ free(value); + } + sArray->lppszA= (const char **) stringArray; + +@@ -519,6 +521,7 @@ void ical2exchange_property_RRULE_EXDATE + + ritr = icalrecur_iterator_new(irt,dtstart); + next=icalrecur_iterator_next(ritr); ++ last = icaltime_null_time(); + + while (!icaltime_is_null_time(next)){ + last = next; +diff -up openchange-openchange-2.3-VULCAN/libmapi++/examples/foldertree.cpp.covscan openchange-openchange-2.3-VULCAN/libmapi++/examples/foldertree.cpp +--- openchange-openchange-2.3-VULCAN/libmapi++/examples/foldertree.cpp.covscan 2015-05-16 17:22:04.000000000 +0200 ++++ openchange-openchange-2.3-VULCAN/libmapi++/examples/foldertree.cpp 2018-07-19 13:53:41.286450703 +0200 +@@ -65,12 +65,12 @@ int main () + } + + } +- catch (libmapipp::mapi_exception e) // Catch any MAPI exceptions ++ catch (libmapipp::mapi_exception &e) // Catch any MAPI exceptions + { + std::cout << "MAPI Exception in main: " << e.what() + << std::endl; + } +- catch (std::runtime_error e) // Catch any other runtime exceptions ++ catch (std::runtime_error &e) // Catch any other runtime exceptions + { + std::cout << "std::runtime_error exception in main: " + << e.what() << std::endl; +diff -up openchange-openchange-2.3-VULCAN/libmapi++/examples/messages.cpp.covscan openchange-openchange-2.3-VULCAN/libmapi++/examples/messages.cpp +--- openchange-openchange-2.3-VULCAN/libmapi++/examples/messages.cpp.covscan 2015-05-16 17:22:04.000000000 +0200 ++++ openchange-openchange-2.3-VULCAN/libmapi++/examples/messages.cpp 2018-07-19 13:53:41.286450703 +0200 +@@ -61,12 +61,12 @@ int main () + } + } + } +- catch (libmapipp::mapi_exception e) // Catch any MAPI exceptions ++ catch (libmapipp::mapi_exception &e) // Catch any MAPI exceptions + { + std::cout << "MAPI Exception in main: " << e.what() + << std::endl; + } +- catch (std::runtime_error e) // Catch any other runtime exceptions ++ catch (std::runtime_error &e) // Catch any other runtime exceptions + { + std::cout << "std::runtime_error exception in main: " + << e.what() << std::endl; +diff -up openchange-openchange-2.3-VULCAN/libmapi/FXICS.c.covscan openchange-openchange-2.3-VULCAN/libmapi/FXICS.c +--- openchange-openchange-2.3-VULCAN/libmapi/FXICS.c.covscan 2015-05-16 17:22:04.000000000 +0200 ++++ openchange-openchange-2.3-VULCAN/libmapi/FXICS.c 2018-07-19 13:53:41.286450703 +0200 +@@ -800,6 +800,7 @@ _PUBLIC_ enum MAPISTATUS FXGetBuffer(map + if ((retval = mapi_object_get_logon_id(obj_source_context, &logon_id)) != MAPI_E_SUCCESS) + return retval; + ++ memset(&request, 0, sizeof(struct FastTransferSourceGetBuffer_req)); + mem_ctx = talloc_named(session, 0, "FXGetBuffer"); + size = 0; + +diff -up openchange-openchange-2.3-VULCAN/libmapi/idset.c.covscan openchange-openchange-2.3-VULCAN/libmapi/idset.c +--- openchange-openchange-2.3-VULCAN/libmapi/idset.c.covscan 2015-05-16 17:22:04.000000000 +0200 ++++ openchange-openchange-2.3-VULCAN/libmapi/idset.c 2018-07-19 13:53:41.286450703 +0200 +@@ -383,6 +383,7 @@ _PUBLIC_ struct idset *IDSET_parse(TALLO + total_bytes += 16; + } + ++ byte_count = 0; + globset.length = buffer.length - 16; + globset.data = (uint8_t *) buffer.data + 16; + idset->ranges = GLOBSET_parse(idset, globset, &idset->range_count, &byte_count); +@@ -1182,7 +1183,8 @@ _PUBLIC_ void RAWIDSET_push_eid(struct r + } + else { + glob_idset = RAWIDSET_make(rawidset->mem_ctx, true, rawidset->single); +- last_glob_idset->next = glob_idset; ++ if (last_glob_idset) ++ last_glob_idset->next = glob_idset; + } + glob_idset->repl.id = eid_id; + } +diff -up openchange-openchange-2.3-VULCAN/libmapi/IMAPIProp.c.covscan openchange-openchange-2.3-VULCAN/libmapi/IMAPIProp.c +--- openchange-openchange-2.3-VULCAN/libmapi/IMAPIProp.c.covscan 2015-05-16 17:22:04.000000000 +0200 ++++ openchange-openchange-2.3-VULCAN/libmapi/IMAPIProp.c 2018-07-19 13:53:41.287450703 +0200 +@@ -1122,6 +1122,7 @@ _PUBLIC_ enum MAPISTATUS QueryNamedPrope + return retval; + + /* Initialization */ ++ memset(&request, 0, sizeof(struct QueryNamedProperties_req)); + mem_ctx = talloc_named(session, 0, "QueryNamesFromIDs"); + size = 0; + +diff -up openchange-openchange-2.3-VULCAN/libmapi/IMAPISupport.c.covscan openchange-openchange-2.3-VULCAN/libmapi/IMAPISupport.c +--- openchange-openchange-2.3-VULCAN/libmapi/IMAPISupport.c.covscan 2015-05-16 17:22:04.000000000 +0200 ++++ openchange-openchange-2.3-VULCAN/libmapi/IMAPISupport.c 2018-07-19 13:53:41.287450703 +0200 +@@ -101,6 +101,7 @@ _PUBLIC_ enum MAPISTATUS Subscribe(mapi_ + if ((retval = mapi_object_get_logon_id(obj, &logon_id)) != MAPI_E_SUCCESS) + return retval; + ++ memset(&request, 0, sizeof(struct RegisterNotification_req)); + mem_ctx = talloc_named(session, 0, "Subscribe"); + + /* Fill the Subscribe operation */ +diff -up openchange-openchange-2.3-VULCAN/libmapi/IMessage.c.covscan openchange-openchange-2.3-VULCAN/libmapi/IMessage.c +--- openchange-openchange-2.3-VULCAN/libmapi/IMessage.c.covscan 2015-05-16 17:22:04.000000000 +0200 ++++ openchange-openchange-2.3-VULCAN/libmapi/IMessage.c 2018-07-19 13:53:41.287450703 +0200 +@@ -499,6 +499,8 @@ _PUBLIC_ enum MAPISTATUS SetRecipientTyp + enum MAPISTATUS retval; + struct SPropValue lpProp; + ++ memset(&lpProp, 0, sizeof(struct SPropValue)); ++ + lpProp.ulPropTag = PR_RECIPIENT_TYPE; + lpProp.value.l = RecipClass; + +@@ -1648,6 +1650,7 @@ _PUBLIC_ enum MAPISTATUS OpenEmbeddedMes + if ((retval = mapi_object_get_logon_id(obj_attach, &logon_id)) != MAPI_E_SUCCESS) + return retval; + ++ memset(&lpProp, 0, sizeof(struct SPropValue)); + mem_ctx = talloc_named(session, 0, "OpenEmbeddedMessage"); + + /* Fill the OpenEmbeddedMessage request */ +diff -up openchange-openchange-2.3-VULCAN/libmapi/IStoreFolder.c.covscan openchange-openchange-2.3-VULCAN/libmapi/IStoreFolder.c +--- openchange-openchange-2.3-VULCAN/libmapi/IStoreFolder.c.covscan 2015-05-16 17:22:04.000000000 +0200 ++++ openchange-openchange-2.3-VULCAN/libmapi/IStoreFolder.c 2018-07-19 13:53:41.287450703 +0200 +@@ -93,6 +93,7 @@ _PUBLIC_ enum MAPISTATUS OpenMessage(map + if ((retval = mapi_object_get_logon_id(obj_store, &logon_id)) != MAPI_E_SUCCESS) + return retval; + ++ memset(&lpProp, 0, sizeof(struct SPropValue)); + mem_ctx = talloc_named(session, 0, "OpenMessage"); + + /* Fill the OpenMessage operation */ +@@ -232,6 +233,7 @@ _PUBLIC_ enum MAPISTATUS ReloadCachedInf + if ((retval = mapi_object_get_logon_id(obj_message, &logon_id)) != MAPI_E_SUCCESS) + return retval; + ++ memset(&lpProp, 0, sizeof(struct SPropValue)); + mem_ctx = talloc_named(session, 0, "ReloadCachedInformation"); + + /* Fill the ReloadCachedInformation operation */ +diff -up openchange-openchange-2.3-VULCAN/libmapi/IStream.c.covscan openchange-openchange-2.3-VULCAN/libmapi/IStream.c +--- openchange-openchange-2.3-VULCAN/libmapi/IStream.c.covscan 2015-05-16 17:22:04.000000000 +0200 ++++ openchange-openchange-2.3-VULCAN/libmapi/IStream.c 2018-07-19 13:53:41.287450703 +0200 +@@ -183,6 +183,7 @@ _PUBLIC_ enum MAPISTATUS ReadStream(mapi + if ((retval = mapi_object_get_logon_id(obj_stream, &logon_id)) != MAPI_E_SUCCESS) + return retval; + ++ memset(&request, 0, sizeof(struct ReadStream_req)); + mem_ctx = talloc_named(session, 0, "ReadStream"); + + *ByteRead = 0; +diff -up openchange-openchange-2.3-VULCAN/libmapi++/src/folder.cpp.covscan openchange-openchange-2.3-VULCAN/libmapi++/src/folder.cpp +--- openchange-openchange-2.3-VULCAN/libmapi++/src/folder.cpp.covscan 2015-05-16 17:22:04.000000000 +0200 ++++ openchange-openchange-2.3-VULCAN/libmapi++/src/folder.cpp 2018-07-19 13:53:41.287450703 +0200 +@@ -57,7 +57,7 @@ folder::message_container_type folder::f + message_container.push_back(message_shared_ptr(new message(m_session, + m_id, + row_set.aRow[i].lpProps[1].value.d))); +- } catch(mapi_exception e) { ++ } catch(mapi_exception &e) { + mapi_object_release(&contents_table); + throw; + } +@@ -102,7 +102,7 @@ folder::hierarchy_container_type folder: + try { + hierarchy_container.push_back(folder_shared_ptr(new folder(*this, + row_set.aRow[i].lpProps[0].value.d))); +- } catch(mapi_exception e) { ++ } catch(mapi_exception &e) { + mapi_object_release(&hierarchy_table); + throw; + } +diff -up openchange-openchange-2.3-VULCAN/libmapi++/src/message.cpp.covscan openchange-openchange-2.3-VULCAN/libmapi++/src/message.cpp +--- openchange-openchange-2.3-VULCAN/libmapi++/src/message.cpp.covscan 2015-05-16 17:22:04.000000000 +0200 ++++ openchange-openchange-2.3-VULCAN/libmapi++/src/message.cpp 2018-07-19 13:53:41.287450703 +0200 +@@ -50,7 +50,7 @@ message::attachment_container_type messa + try { + attachment_container.push_back(attachment_shared_ptr(new attachment(*this, row_set.aRow[i].lpProps[0].value.l))); + } +- catch(mapi_exception e) { ++ catch(mapi_exception &e) { + mapi_object_release(&attachment_table); + throw; + } +diff -up openchange-openchange-2.3-VULCAN/libmapi++/src/session.cpp.covscan openchange-openchange-2.3-VULCAN/libmapi++/src/session.cpp +--- openchange-openchange-2.3-VULCAN/libmapi++/src/session.cpp.covscan 2015-05-16 17:22:04.000000000 +0200 ++++ openchange-openchange-2.3-VULCAN/libmapi++/src/session.cpp 2018-07-19 13:53:41.287450703 +0200 +@@ -61,7 +61,7 @@ void session::login(const std::string& p + if (m_profile_name == "") { // if profile is not set, try to get default profile + try { + m_profile_name = profile_database().get_default_profile_name(); +- } catch(mapi_exception e) { ++ } catch(mapi_exception &e) { + uninitialize(); + throw; + } +@@ -74,7 +74,7 @@ void session::login(const std::string& p + + try { + m_message_store->open(m_session); +- } catch (mapi_exception e) { ++ } catch (mapi_exception &e) { + throw; + } + } +diff -up openchange-openchange-2.3-VULCAN/libmapi++/tests/attach_test.cpp.covscan openchange-openchange-2.3-VULCAN/libmapi++/tests/attach_test.cpp +--- openchange-openchange-2.3-VULCAN/libmapi++/tests/attach_test.cpp.covscan 2015-05-16 17:22:04.000000000 +0200 ++++ openchange-openchange-2.3-VULCAN/libmapi++/tests/attach_test.cpp 2018-07-19 13:53:41.287450703 +0200 +@@ -84,11 +84,11 @@ int main() + + print_folder_tree(top_folder, mapi_session); + } +- catch (mapi_exception e) // Catch any mapi exceptions ++ catch (mapi_exception &e) // Catch any mapi exceptions + { + cout << "MAPI Exception @ main: " << e.what() << endl; + } +- catch (std::runtime_error e) // Catch runtime exceptions ++ catch (std::runtime_error &e) // Catch runtime exceptions + { + cout << "std::runtime_error exception @ main: " << e.what() << endl; + } +diff -up openchange-openchange-2.3-VULCAN/libmapi++/tests/exception_test.cpp.covscan openchange-openchange-2.3-VULCAN/libmapi++/tests/exception_test.cpp +--- openchange-openchange-2.3-VULCAN/libmapi++/tests/exception_test.cpp.covscan 2015-05-16 17:22:04.000000000 +0200 ++++ openchange-openchange-2.3-VULCAN/libmapi++/tests/exception_test.cpp 2018-07-19 13:53:41.287450703 +0200 +@@ -12,7 +12,7 @@ int main() + try { + dotest(); + } +- catch (libmapipp::mapi_exception e) { ++ catch (libmapipp::mapi_exception &e) { + std::cout << e.what() << std::endl; + } + +diff -up openchange-openchange-2.3-VULCAN/libmapi++/tests/profile_test.cpp.covscan openchange-openchange-2.3-VULCAN/libmapi++/tests/profile_test.cpp +--- openchange-openchange-2.3-VULCAN/libmapi++/tests/profile_test.cpp.covscan 2015-05-16 17:22:04.000000000 +0200 ++++ openchange-openchange-2.3-VULCAN/libmapi++/tests/profile_test.cpp 2018-07-19 13:53:41.287450703 +0200 +@@ -27,15 +27,18 @@ + #define PROFILEDB_NAME_TEMPLATE "/tmp/mapidbXXXXXX" + int main () + { ++ char *tmpname = NULL, *tmpname2 = NULL; ++ + try { + libmapipp::profile_database db; + + std::cout << "default profile name: " << db.get_default_profile_name() << std::endl; + + { +- char *tmpname = (char*) calloc(sizeof(PROFILEDB_NAME_TEMPLATE) + 1, sizeof(char)); +- strncpy(tmpname, PROFILEDB_NAME_TEMPLATE, sizeof(PROFILEDB_NAME_TEMPLATE)); +- int ret = mkstemp(tmpname); ++ int ret; ++ ++ tmpname = strdup(PROFILEDB_NAME_TEMPLATE); ++ ret = mkstemp(tmpname); + if (ret < 0) { + std::cout << "failed to create temporary file: " << strerror(errno) << std::endl; + } +@@ -45,12 +48,15 @@ int main () + std::cout << "failed to create a temporary profile store" << std::endl; + } + unlink(tmpname); ++ free(tmpname); ++ tmpname = NULL; + } + + { +- char *tmpname2 = (char*) calloc(sizeof(PROFILEDB_NAME_TEMPLATE) + 1, sizeof(char)); +- strncpy(tmpname2, PROFILEDB_NAME_TEMPLATE, sizeof(PROFILEDB_NAME_TEMPLATE)); +- int ret = mkstemp(tmpname2); ++ int ret; ++ ++ tmpname2 = strdup(PROFILEDB_NAME_TEMPLATE); ++ ret = mkstemp(tmpname2); + if (ret < 0) { + std::cout << "failed to create temporary file: " << strerror(errno) << std::endl; + } +@@ -60,19 +66,33 @@ int main () + std::cout << "failed to create a temporary profile store with std::string" << std::endl; + } + unlink(tmpname2); ++ free(tmpname2); ++ tmpname2 = NULL; + } + + std::cout << "finished profile and profile database tests" << std::endl; + } +- catch (libmapipp::mapi_exception e) // Catch any mapi exceptions ++ catch (libmapipp::mapi_exception &e) // Catch any mapi exceptions + { + std::cout << "MAPI Exception @ main: " << e.what() << std::endl; + } +- catch (std::runtime_error e) // Catch runtime exceptions ++ catch (std::runtime_error &e) // Catch runtime exceptions + { + std::cout << "std::runtime_error exception @ main: " << e.what() << std::endl; + + } + ++ if (tmpname) { ++ unlink(tmpname); ++ free(tmpname); ++ tmpname = NULL; ++ } ++ ++ if (tmpname2) { ++ unlink(tmpname2); ++ free(tmpname2); ++ tmpname2 = NULL; ++ } ++ + return 0; + } +diff -up openchange-openchange-2.3-VULCAN/libmapi++/tests/test.cpp.covscan openchange-openchange-2.3-VULCAN/libmapi++/tests/test.cpp +--- openchange-openchange-2.3-VULCAN/libmapi++/tests/test.cpp.covscan 2015-05-16 17:22:04.000000000 +0200 ++++ openchange-openchange-2.3-VULCAN/libmapi++/tests/test.cpp 2018-07-19 13:53:41.288450703 +0200 +@@ -126,11 +126,11 @@ int main () + + cout << "finished session" << endl; + } +- catch (mapi_exception e) // Catch any mapi exceptions ++ catch (mapi_exception &e) // Catch any mapi exceptions + { + cout << "MAPI Exception @ main: " << e.what() << endl; + } +- catch (std::runtime_error e) // Catch runtime exceptions ++ catch (std::runtime_error &e) // Catch runtime exceptions + { + cout << "std::runtime_error exception @ main: " << e.what() << endl; + +diff -up openchange-openchange-2.3-VULCAN/libocpf/ocpf_api.c.covscan openchange-openchange-2.3-VULCAN/libocpf/ocpf_api.c +--- openchange-openchange-2.3-VULCAN/libocpf/ocpf_api.c.covscan 2015-05-16 17:22:04.000000000 +0200 ++++ openchange-openchange-2.3-VULCAN/libocpf/ocpf_api.c 2018-07-19 13:53:41.288450703 +0200 +@@ -316,6 +316,8 @@ int ocpf_propvalue(struct ocpf_context * + if (!ocpf || !ocpf->mem_ctx) return OCPF_ERROR; + if (!ctx) return OCPF_ERROR; + ++ memset(&lpProps, 0, sizeof(struct SPropValue)); ++ + switch (scope) { + case kw_PROPERTY: + /* Sanity check: do not insert the same property twice */ +diff -up openchange-openchange-2.3-VULCAN/libocpf/ocpf_public.c.covscan openchange-openchange-2.3-VULCAN/libocpf/ocpf_public.c +--- openchange-openchange-2.3-VULCAN/libocpf/ocpf_public.c.covscan 2015-05-16 17:22:04.000000000 +0200 ++++ openchange-openchange-2.3-VULCAN/libocpf/ocpf_public.c 2018-07-19 13:53:41.288450703 +0200 +@@ -537,6 +537,8 @@ static bool set_external_recipients(TALL + uint32_t last; + struct SPropValue SPropValue; + ++ memset(&SPropValue, 0, sizeof(struct SPropValue)); ++ + SRowSet->aRow = talloc_realloc(mem_ctx, SRowSet->aRow, struct SRow, SRowSet->cRows + 2); + last = SRowSet->cRows; + SRowSet->aRow[last].cValues = 0; +@@ -626,6 +628,8 @@ _PUBLIC_ enum MAPISTATUS ocpf_set_Recipi + + MAPI_RETVAL_IF(!ctx->recipients->cRows, MAPI_E_NOT_FOUND, NULL); + ++ memset(&SPropValue, 0, sizeof(struct SPropValue)); ++ + SPropTagArray = set_SPropTagArray(mem_ctx, 0x8, + PidTagObjectType, + PidTagDisplayName, +diff -up openchange-openchange-2.3-VULCAN/ndr_mapi.c.covscan openchange-openchange-2.3-VULCAN/ndr_mapi.c +--- openchange-openchange-2.3-VULCAN/ndr_mapi.c.covscan 2018-07-19 13:53:41.276450703 +0200 ++++ openchange-openchange-2.3-VULCAN/ndr_mapi.c 2018-07-19 13:53:41.288450703 +0200 +@@ -1310,8 +1310,11 @@ _PUBLIC_ enum ndr_err_code ndr_pull_EcDo + NDR_PULL_ALLOC(ndr, r->out.pulTimeStamp); + *r->out.pulTimeStamp = *r->in.pulTimeStamp; + NDR_PULL_ALLOC(ndr, r->out.pcbAuxOut); +- *r->out.pcbAuxOut = *r->in.pcbAuxOut; +- } ++ if (r->in.pcbAuxOut) ++ *r->out.pcbAuxOut = *r->in.pcbAuxOut; ++ else ++ *r->out.pcbAuxOut = 0; ++ } + + if (flags & NDR_OUT) { + if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) { +diff -up openchange-openchange-2.3-VULCAN/script/makepropslist.py.covscan openchange-openchange-2.3-VULCAN/script/makepropslist.py +--- openchange-openchange-2.3-VULCAN/script/makepropslist.py.covscan 2015-05-16 17:22:04.000000000 +0200 ++++ openchange-openchange-2.3-VULCAN/script/makepropslist.py 2018-07-19 13:53:41.288450703 +0200 +@@ -992,7 +992,7 @@ def check_duplicate_alternative_names(): + if previous_alternative_names.has_key(altname): + print "\tIn section", entry["OXPROPS_Sect"], ", alternative name:", altname, "duplicates name in section", previous_alternative_names[altname] + if previous_canonical_names.has_key(altname): +- print "\tIn section", entry["OXPROPS_Sect"], ", alternative name:", altname, "duplicates canonical name in section", previous_alternative_names[altname] ++ print "\tIn section", entry["OXPROPS_Sect"], ", alternative name:", altname, "duplicates canonical name in section", previous_canonical_names[altname] + previous_alternative_names[altname] = (entry["OXPROPS_Sect"]) + + def check_duplicate_propids(): +diff -up openchange-openchange-2.3-VULCAN/testprogs/test_asyncnotif.c.covscan openchange-openchange-2.3-VULCAN/testprogs/test_asyncnotif.c +--- openchange-openchange-2.3-VULCAN/testprogs/test_asyncnotif.c.covscan 2015-05-16 17:22:04.000000000 +0200 ++++ openchange-openchange-2.3-VULCAN/testprogs/test_asyncnotif.c 2018-07-19 13:53:41.288450703 +0200 +@@ -109,12 +109,16 @@ static int callback(uint16_t Notificatio + break; + case fnevMbit|fnevObjectDeleted: + OC_DEBUG(0, "[+] Message deleted"); ++ break; + case fnevMbit|fnevObjectModified: + OC_DEBUG(0, "[+] Message modified"); ++ break; + case fnevMbit|fnevObjectMoved: + OC_DEBUG(0, "[+] Message moved"); ++ break; + case fnevMbit|fnevObjectCopied: + OC_DEBUG(0, "[+] Message copied"); ++ break; + case fnevMbit|fnevTableModified: + ctable = (struct ContentsTableChange *) NotificationData; + switch (ctable->TableEvent) { +@@ -143,6 +147,7 @@ static int callback(uint16_t Notificatio + break; + case fnevMbit|fnevSbit|fnevObjectModified: + OC_DEBUG(0, "[+] A property on a message in a search folder has changed"); ++ break; + case fnevMbit|fnevSbit|fnevTableModified: + stable = (struct ContentsTableChange *) NotificationData; + switch (stable->TableEvent) { +@@ -250,6 +255,7 @@ int main(int argc, const char *argv[]) + + retval = MAPIInitialize(&mapi_ctx, opt_profdb); + if (retval != MAPI_E_SUCCESS) { ++ talloc_free(mem_ctx); + mapi_errstr("MAPIInitialize", retval); + exit (1); + } +@@ -261,6 +267,10 @@ int main(int argc, const char *argv[]) + SetMAPIDebugLevel(mapi_ctx, atoi(opt_debug)); + } + ++ mapi_object_init(&obj_store); ++ mapi_object_init(&obj_inbox); ++ mapi_object_init(&obj_contentstable); ++ + /* if no profile is supplied use the default one */ + if (!opt_profname) { + retval = GetDefaultProfile(mapi_ctx, &opt_profname); +@@ -280,7 +290,6 @@ int main(int argc, const char *argv[]) + } + + /* Open the default message store */ +- mapi_object_init(&obj_store); + + retval = OpenMsgStore(session, &obj_store); + if (retval != MAPI_E_SUCCESS) { +@@ -292,11 +301,9 @@ int main(int argc, const char *argv[]) + retval = GetReceiveFolder(&obj_store, &fid, NULL); + MAPI_RETVAL_IF(retval, retval, mem_ctx); + +- mapi_object_init(&obj_inbox); + retval = OpenFolder(&obj_store, fid, &obj_inbox); + MAPI_RETVAL_IF(retval, retval, mem_ctx); + +- mapi_object_init(&obj_contentstable); + retval = GetContentsTable(&obj_inbox, &obj_contentstable, 0, &count); + printf("mailbox contains %i messages\n", count); + +diff -up openchange-openchange-2.3-VULCAN/utils/mapipropsdump.c.covscan openchange-openchange-2.3-VULCAN/utils/mapipropsdump.c +--- openchange-openchange-2.3-VULCAN/utils/mapipropsdump.c.covscan 2018-07-19 13:53:41.276450703 +0200 ++++ openchange-openchange-2.3-VULCAN/utils/mapipropsdump.c 2018-07-19 13:53:41.289450703 +0200 +@@ -79,21 +79,21 @@ + */ + + +-static const const struct ndr_interface_table *load_exchange_emsmdb_dso(const char *plugin) ++static const struct ndr_interface_table *load_exchange_emsmdb_dso(const char *plugin, void **phandle) + { + const struct ndr_interface_table *p; +- void *handle; + +- handle = dlopen(plugin, RTLD_NOW); +- if (handle == NULL) { ++ *phandle = dlopen(plugin, RTLD_NOW); ++ if (*phandle == NULL) { + printf("%s: Unable to open: %s\n", plugin, dlerror()); + return NULL; + } + +- p = (const struct ndr_interface_table *) dlsym(handle, "ndr_table_exchange_emsmdb"); ++ p = (const struct ndr_interface_table *) dlsym(*phandle, "ndr_table_exchange_emsmdb"); + if (!p) { + OC_DEBUG(0, "%s: Unable to find DCE/RPC interface table for 'ndr_table_exchange_emsmdb': %s", plugin, dlerror()); +- dlclose(handle); ++ dlclose(*phandle); ++ *phandle = NULL; + return NULL; + } + +@@ -409,6 +409,7 @@ int main(int argc, const char *argv[]) + struct SPropTagArray *s; + const char *opt_reqfile = NULL; + const char *opt_replfile = NULL; ++ void *plhandle = NULL; + poptContext pc; + int opt; + int index = -1; +@@ -442,7 +443,7 @@ int main(int argc, const char *argv[]) + exit (1); + } + +- p = load_exchange_emsmdb_dso(PLUGIN); ++ p = load_exchange_emsmdb_dso(PLUGIN, &plhandle); + if (!p) { + exit (1); + } +@@ -454,6 +455,7 @@ int main(int argc, const char *argv[]) + s = process_request(mem_ctx, f, opt_reqfile, &opnum, &index); + if (!s) { + talloc_free(mem_ctx); ++ dlclose(plhandle); + exit (1); + } + +@@ -461,9 +463,12 @@ int main(int argc, const char *argv[]) + ret = process_response(mem_ctx, f, opt_replfile, s, opnum, index); + if (ret == -1) { + talloc_free(mem_ctx); ++ dlclose(plhandle); + exit (1); + } + + talloc_free(mem_ctx); ++ dlclose(plhandle); ++ + return (0); + } +diff -up openchange-openchange-2.3-VULCAN/utils/openchangeclient.c.covscan openchange-openchange-2.3-VULCAN/utils/openchangeclient.c +--- openchange-openchange-2.3-VULCAN/utils/openchangeclient.c.covscan 2018-07-19 13:53:41.277450703 +0200 ++++ openchange-openchange-2.3-VULCAN/utils/openchangeclient.c 2018-07-19 13:53:41.289450703 +0200 +@@ -629,6 +629,8 @@ static bool set_external_recipients(TALL + uint32_t last; + struct SPropValue SPropValue; + ++ memset(&SPropValue, 0, sizeof(struct SPropValue)); ++ + SRowSet->aRow = talloc_realloc(mem_ctx, SRowSet->aRow, struct SRow, SRowSet->cRows + 1); + last = SRowSet->cRows; + SRowSet->aRow[last].cValues = 0; +@@ -821,6 +823,8 @@ static enum MAPISTATUS openchangeclient_ + mapi_object_init(&obj_outbox); + mapi_object_init(&obj_message); + ++ memset(&SPropValue, 0, sizeof(struct SPropValue)); ++ + if (oclient->pf == true) { + retval = openchangeclient_getpfdir(mem_ctx, obj_store, &obj_outbox, oclient->folder); + if (retval != MAPI_E_SUCCESS) return retval; diff --git a/SOURCES/openchange-2.3-disable-mysql.patch b/SOURCES/openchange-2.3-disable-mysql.patch new file mode 100644 index 0000000..c072ff4 --- /dev/null +++ b/SOURCES/openchange-2.3-disable-mysql.patch @@ -0,0 +1,81 @@ +diff -up openchange-openchange-2.3-VULCAN/configure.ac.disable-mysql openchange-openchange-2.3-VULCAN/configure.ac +--- openchange-openchange-2.3-VULCAN/configure.ac.disable-mysql 2018-02-19 17:21:16.683135863 +0100 ++++ openchange-openchange-2.3-VULCAN/configure.ac 2018-02-19 17:23:26.313134071 +0100 +@@ -50,22 +50,22 @@ AC_SUBST(ENDIAN) + dnl ################################################################# + dnl MySQL + dnl ################################################################# +-AC_PATH_PROG(MYSQL_CONFIG, mysql_config) +-if test x"$MYSQL_CONFIG" = x""; then +- AC_MSG_WARN([No version of mysql_config was found!]) +- AC_MSG_ERROR([Please install libmysqlclient-dev]) +-fi +-AC_SUBST(MYSQL_CONFIG) +- +-AC_MSG_CHECKING(mysql cflags) +-MYSQL_CFLAGS=`$MYSQL_CONFIG --cflags` +-AC_MSG_RESULT($MYSQL_CFLAGS) +-AC_SUBST(MYSQL_CFLAGS) +- +-AC_MSG_CHECKING(mysql libs) +-MYSQL_LIBS=`$MYSQL_CONFIG --libs` +-AC_MSG_RESULT($MYSQL_LIBS) +-AC_SUBST(MYSQL_LIBS) ++dnl AC_PATH_PROG(MYSQL_CONFIG, mysql_config) ++dnl if test x"$MYSQL_CONFIG" = x""; then ++dnl AC_MSG_WARN([No version of mysql_config was found!]) ++dnl AC_MSG_ERROR([Please install libmysqlclient-dev]) ++dnl fi ++dnl AC_SUBST(MYSQL_CONFIG) ++dnl ++dnl AC_MSG_CHECKING(mysql cflags) ++dnl MYSQL_CFLAGS=`$MYSQL_CONFIG --cflags` ++dnl AC_MSG_RESULT($MYSQL_CFLAGS) ++dnl AC_SUBST(MYSQL_CFLAGS) ++dnl ++dnl AC_MSG_CHECKING(mysql libs) ++dnl MYSQL_LIBS=`$MYSQL_CONFIG --libs` ++dnl AC_MSG_RESULT($MYSQL_LIBS) ++dnl AC_SUBST(MYSQL_LIBS) + + dnl ################################################################# + dnl Check for OS dependent options +@@ -409,22 +409,22 @@ AC_SUBST(pythondir) + dnl ---------------------------------------------------------------------------- + dnl Check for MYSQL client libraries + dnl ---------------------------------------------------------------------------- +-AC_PATH_PROG(MYSQL_CONFIG, mysql_config) +-if test x"$MYSQL_CONFIG" = x""; then +- AC_MSG_WARN([No version of mysql_config was found!]) +- AC_MSG_ERROR([Please install libmysqlclient-dev]) +-fi +-AC_SUBST(MYSQL_CONFIG) +- +-AC_MSG_CHECKING(mysql cflags) +-MYSQL_CFLAGS=`$MYSQL_CONFIG --cflags` +-AC_MSG_RESULT($MYSQL_CFLAGS) +-AC_SUBST(MYSQL_CFLAGS) +- +-AC_MSG_CHECKING(mysql libs) +-MYSQL_LIBS=`$MYSQL_CONFIG --libs` +-AC_MSG_RESULT($MYSQL_LIBS) +-AC_SUBST(MYSQL_LIBS) ++dnl AC_PATH_PROG(MYSQL_CONFIG, mysql_config) ++dnl if test x"$MYSQL_CONFIG" = x""; then ++dnl AC_MSG_WARN([No version of mysql_config was found!]) ++dnl AC_MSG_ERROR([Please install libmysqlclient-dev]) ++dnl fi ++dnl AC_SUBST(MYSQL_CONFIG) ++dnl ++dnl AC_MSG_CHECKING(mysql cflags) ++dnl MYSQL_CFLAGS=`$MYSQL_CONFIG --cflags` ++dnl AC_MSG_RESULT($MYSQL_CFLAGS) ++dnl AC_SUBST(MYSQL_CFLAGS) ++dnl ++dnl AC_MSG_CHECKING(mysql libs) ++dnl MYSQL_LIBS=`$MYSQL_CONFIG --libs` ++dnl AC_MSG_RESULT($MYSQL_LIBS) ++dnl AC_SUBST(MYSQL_LIBS) + + dnl ---------------------------------------------------------------------------- + dnl Check for memcached diff --git a/SOURCES/openchange-2.3-disable-python3.patch b/SOURCES/openchange-2.3-disable-python3.patch new file mode 100644 index 0000000..91afa76 --- /dev/null +++ b/SOURCES/openchange-2.3-disable-python3.patch @@ -0,0 +1,106 @@ +diff -up openchange-openchange-2.3-VULCAN/configure.ac.drop-python openchange-openchange-2.3-VULCAN/configure.ac +--- openchange-openchange-2.3-VULCAN/configure.ac.drop-python 2018-04-17 12:59:29.738652248 +0200 ++++ openchange-openchange-2.3-VULCAN/configure.ac 2018-04-17 13:00:36.006651332 +0200 +@@ -376,36 +376,42 @@ AC_SUBST(PIDL) + dnl --------------------------------------------------------------------------- + dnl Check for Python + dnl --------------------------------------------------------------------------- ++dnl ++dnl AC_PATH_PROG(PYTHON, python3) ++dnl if test x"$PYTHON" = x""; then ++dnl AC_MSG_WARN([No version of python3 was found!]) ++dnl AC_MSG_ERROR([Please install python3]) ++dnl fi ++dnl AC_SUBST(PYTHON) ++dnl ++dnl AC_PATH_PROG(PYTHON_CONFIG, python3-config) ++dnl if test x"$PYTHON_CONFIG" = x""; then ++dnl AC_MSG_WARN([No version of python3-config was found!]) ++dnl AC_MSG_ERROR([Please install python3-dev 3.x]) ++dnl fi ++dnl AC_SUBST(PYTHON_CONFIG) ++dnl ++dnl AC_MSG_CHECKING(python cflags) ++dnl PYTHON_CFLAGS=`$PYTHON_CONFIG --cflags` ++dnl AC_MSG_RESULT($PYTHON_CFLAGS) ++dnl AC_SUBST(PYTHON_CFLAGS) ++dnl ++dnl AC_MSG_CHECKING(python libs) ++dnl PYTHON_LIBS=`$PYTHON_CONFIG --libs` ++dnl AC_MSG_RESULT($PYTHON_LIBS) ++dnl AC_SUBST(PYTHON_LIBS) ++dnl ++dnl AC_MSG_CHECKING(python library directory) ++dnl pythondir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(1, 0, '\\${prefix}')"` ++dnl AC_MSG_RESULT($pythondir) ++dnl AC_SUBST(pythondir) + +-AC_PATH_PROG(PYTHON, python3) +-if test x"$PYTHON" = x""; then +- AC_MSG_WARN([No version of python3 was found!]) +- AC_MSG_ERROR([Please install python3]) +-fi +-AC_SUBST(PYTHON) +- +-AC_PATH_PROG(PYTHON_CONFIG, python3-config) +-if test x"$PYTHON_CONFIG" = x""; then +- AC_MSG_WARN([No version of python3-config was found!]) +- AC_MSG_ERROR([Please install python3-dev 3.x]) +-fi +-AC_SUBST(PYTHON_CONFIG) +- +-AC_MSG_CHECKING(python cflags) +-PYTHON_CFLAGS=`$PYTHON_CONFIG --cflags` +-AC_MSG_RESULT($PYTHON_CFLAGS) ++PYTHON_CFLAGS= + AC_SUBST(PYTHON_CFLAGS) + +-AC_MSG_CHECKING(python libs) +-PYTHON_LIBS=`$PYTHON_CONFIG --libs` +-AC_MSG_RESULT($PYTHON_LIBS) ++PYTHON_LIBS= + AC_SUBST(PYTHON_LIBS) + +-AC_MSG_CHECKING(python library directory) +-pythondir=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_python_lib(1, 0, '\\${prefix}')"` +-AC_MSG_RESULT($pythondir) +-AC_SUBST(pythondir) +- + dnl ---------------------------------------------------------------------------- + dnl Check for MYSQL client libraries + dnl ---------------------------------------------------------------------------- +@@ -759,11 +765,11 @@ AC_SUBST(OC_SERVER_UNINSTALL) + dnl ########################################################################## + dnl mapiproxy server + dnl ########################################################################## +-if test x$PYTHON != x; then +- if test "x$SAMDB_LIBS" != x -a "x$SAMBASERVER_LIBS" != x ; then +- mapiproxy=1 +- fi +-fi ++dnl if test x$PYTHON != x; then ++dnl if test "x$SAMDB_LIBS" != x -a "x$SAMBASERVER_LIBS" != x ; then ++dnl mapiproxy=1 ++dnl fi ++dnl fi + OC_RULE_ADD(mapiproxy, SERVER) + + AC_ARG_WITH(modulesdir, +@@ -780,14 +786,15 @@ AC_ARG_ENABLE(pyopenchange, AC_HELP_STRI + [build Python bindings for libmapi]), + enable_pyopenchange="$enableval", + enable_pyopenchange=no) +-PYCDIR=`$PYTHON -c "import distutils.sysconfig; print distutils.sysconfig.get_python_lib(1, prefix='\\$(prefix)')"` +-AC_SUBST(PYCDIR) + + PYOPENCHANGEALL= + PYOPENCHANGEINSTALL= + PYOPENCHANGEUNINSTALL= + + if test x$enable_pyopenchange = xyes ; then ++ PYCDIR=`$PYTHON -c "import distutils.sysconfig; print distutils.sysconfig.get_python_lib(1, prefix='\\$(prefix)')"` ++ AC_SUBST(PYCDIR) ++ + dnl Enable pyopenchange by default + PYOPENCHANGEALL="$PYOPENCHANGEALL pyopenchange" + PYOPENCHANGEINSTALL="$PYOPENCHANGEALLINSTALL pyopenchange-install" diff --git a/SOURCES/openchange-2.3-disable-server-reqs.patch b/SOURCES/openchange-2.3-disable-server-reqs.patch new file mode 100644 index 0000000..67f7b88 --- /dev/null +++ b/SOURCES/openchange-2.3-disable-server-reqs.patch @@ -0,0 +1,12 @@ +diff -up openchange-openchange-2.3-VULCAN/configure.ac.disable-server-reqs openchange-openchange-2.3-VULCAN/configure.ac +--- openchange-openchange-2.3-VULCAN/configure.ac.disable-server-reqs 2021-06-17 21:40:49.938611315 +0200 ++++ openchange-openchange-2.3-VULCAN/configure.ac 2021-06-17 21:41:18.616614841 +0200 +@@ -436,7 +436,7 @@ dnl AC_SUBST(MYSQL_LIBS) + dnl ---------------------------------------------------------------------------- + dnl Check for memcached + dnl ---------------------------------------------------------------------------- +-PKG_CHECK_MODULES([MEMCACHED], [libmemcached >= 1.0.18], [], [AC_MSG_ERROR(memcached >= 1.0.18 required to build mapistore library)]) ++dnl PKG_CHECK_MODULES([MEMCACHED], [libmemcached >= 1.0.18], [], [AC_MSG_ERROR(memcached >= 1.0.18 required to build mapistore library)]) + + dnl ---------------------------------------------------------------------------- + dnl Check for Flex diff --git a/SOURCES/openchange-2.3-disable-server-tools-build.patch b/SOURCES/openchange-2.3-disable-server-tools-build.patch new file mode 100644 index 0000000..96323e2 --- /dev/null +++ b/SOURCES/openchange-2.3-disable-server-tools-build.patch @@ -0,0 +1,41 @@ +diff -up openchange-openchange-2.3-VULCAN/configure.ac.disable-server-tools-build openchange-openchange-2.3-VULCAN/configure.ac +--- openchange-openchange-2.3-VULCAN/configure.ac.disable-server-tools-build 2015-11-27 08:30:31.481874706 +0100 ++++ openchange-openchange-2.3-VULCAN/configure.ac 2015-11-27 08:33:39.769867245 +0100 +@@ -284,7 +284,7 @@ AC_SUBST(COVERAGE_INIT) + dnl --------------------------------------------------------------------------- + dnl Check for check (unittest library) + dnl --------------------------------------------------------------------------- +-PKG_CHECK_MODULES(CHECK, check, [testsuite=1], [AC_MSG_WARN(Conditions unmet for unit testing support)]) ++#PKG_CHECK_MODULES(CHECK, check, [testsuite=1], [AC_MSG_WARN(Conditions unmet for unit testing support)]) + AC_SUBST(CHECK_CFLAGS) + AC_SUBST(CHECK_LIBS) + OC_RULE_ADD(testsuite, TESTSUITE) +@@ -292,7 +292,7 @@ OC_RULE_ADD(testsuite, TESTSUITE) + dnl --------------------------------------------------------------------------- + dnl Check for nanomsg library (server notification) + dnl --------------------------------------------------------------------------- +-PKG_CHECK_MODULES(NANOMSG, libnanomsg, [], [AC_MSG_ERROR(Install nanomsg library >= 0.5)]) ++#PKG_CHECK_MODULES(NANOMSG, libnanomsg, [], [AC_MSG_ERROR(Install nanomsg library >= 0.5)]) + AC_SUBST(NANOMSG_CFLAGS) + AC_SUBST(NANO_LIBS) + +@@ -698,16 +698,16 @@ AC_SUBST(MAPISTORE_TEST) + OC_RULE_ADD(openchangeclient, TOOLS) + #OC_RULE_ADD(mapistore_fsocpf, MAPISTORE) + OC_RULE_ADD(mapipropsdump, TOOLS) +-OC_RULE_ADD(ocnotify, TOOLS) ++#OC_RULE_ADD(ocnotify, TOOLS) + OC_RULE_ADD(exchange2ical, TOOLS) +-OC_RULE_ADD(rpcextract, TOOLS) ++#OC_RULE_ADD(rpcextract, TOOLS) + OC_RULE_ADD(openchangepfadmin, TOOLS) + OC_RULE_ADD(mapitest, TOOLS) + OC_RULE_ADD(mapiprofile, TOOLS) + OC_RULE_ADD(openchangemapidump, TOOLS) + OC_RULE_ADD(schemaIDGUID, TOOLS) + +-OC_RULE_ADD(check_fasttransfer, TOOLS) ++#OC_RULE_ADD(check_fasttransfer, TOOLS) + OC_RULE_ADD(test_asyncnotif, TOOLS) + + diff --git a/SOURCES/openchange-2.3-fix-connection-args.patch b/SOURCES/openchange-2.3-fix-connection-args.patch new file mode 100644 index 0000000..bfb9718 --- /dev/null +++ b/SOURCES/openchange-2.3-fix-connection-args.patch @@ -0,0 +1,38 @@ +diff -up openchange-openchange-2.3-VULCAN/libmapi/IMSProvider.c.fix-connection-args openchange-openchange-2.3-VULCAN/libmapi/IMSProvider.c +--- openchange-openchange-2.3-VULCAN/libmapi/IMSProvider.c.fix-connection-args 2015-05-16 17:22:04.000000000 +0200 ++++ openchange-openchange-2.3-VULCAN/libmapi/IMSProvider.c 2016-04-07 19:10:30.340959912 +0200 +@@ -91,6 +91,7 @@ static char *build_binding_string(struct + struct mapi_profile *profile) + { + char *binding; ++ bool any_string_added = false; + + /* Sanity Checks */ + if (!profile) return NULL; +@@ -101,15 +102,23 @@ static char *build_binding_string(struct + + /* If dump-data option is enabled */ + if (mapi_ctx->dumpdata == true) { +- binding = talloc_strdup_append(binding, "print,"); ++ binding = talloc_strdup_append(binding, "print"); ++ any_string_added = true; + } + /* If seal option is enabled in the profile */ + if (profile->seal == true) { +- binding = talloc_strdup_append(binding, "seal,"); ++ if (any_string_added) { ++ binding = talloc_strdup_append(binding, ","); ++ } ++ binding = talloc_strdup_append(binding, "seal"); ++ any_string_added = true; + } + /* If localaddress parameter is available in the profile */ + if (profile->localaddr) { +- binding = talloc_asprintf_append(binding, "localaddress=%s,", profile->localaddr); ++ if (any_string_added) { ++ binding = talloc_strdup_append(binding, ","); ++ } ++ binding = talloc_asprintf_append(binding, "localaddress=%s", profile->localaddr); + } + + binding = talloc_strdup_append(binding, "]"); diff --git a/SOURCES/openchange-2.3-libical-3.0.patch b/SOURCES/openchange-2.3-libical-3.0.patch new file mode 100644 index 0000000..ec0bfa6 --- /dev/null +++ b/SOURCES/openchange-2.3-libical-3.0.patch @@ -0,0 +1,88 @@ +diff -up openchange-openchange-2.3-VULCAN/libexchange2ical/exchange2ical_property.c.libical-3.0 openchange-openchange-2.3-VULCAN/libexchange2ical/exchange2ical_property.c +--- openchange-openchange-2.3-VULCAN/libexchange2ical/exchange2ical_property.c.libical-3.0 2017-11-08 14:45:06.494302213 +0100 ++++ openchange-openchange-2.3-VULCAN/libexchange2ical/exchange2ical_property.c 2017-11-08 14:47:33.465300181 +0100 +@@ -515,7 +515,7 @@ void ical_property_EXDATE(struct exchang + icalproperty_add_parameter(prop, tzid); + } else { + /*Get time from dtstart*/ +- icaltime.is_utc = 1; ++ icaltime.zone = icaltimezone_get_utc_timezone (); + if (exchange2ical->apptEndWhole){ + dttime = get_icaltime_from_FILETIME_UTC(exchange2ical->apptStartWhole); + icaltime.hour = dttime.hour; +diff -up openchange-openchange-2.3-VULCAN/libexchange2ical/exchange2ical_utils.c.libical-3.0 openchange-openchange-2.3-VULCAN/libexchange2ical/exchange2ical_utils.c +--- openchange-openchange-2.3-VULCAN/libexchange2ical/exchange2ical_utils.c.libical-3.0 2017-11-08 14:45:43.123301706 +0100 ++++ openchange-openchange-2.3-VULCAN/libexchange2ical/exchange2ical_utils.c 2017-11-08 14:47:31.873300203 +0100 +@@ -241,10 +241,9 @@ struct icaltimetype get_icaltimetype_fro + tt.minute = tm->tm_min; + tt.second = tm->tm_sec; + +- tt.is_utc = 0; + tt.is_date = 0; + tt.is_daylight = 0; +- tt.zone = 0; ++ tt.zone = icaltimezone_get_utc_timezone (); + + return tt; + } +@@ -254,7 +253,6 @@ struct icaltimetype get_icaltimetype_fro + struct icaltimetype tt; + + tt = get_icaltimetype_from_tm(tm); +- tt.is_utc = 1; + + return tt; + } +@@ -270,10 +268,8 @@ struct icaltimetype get_icaldate_from_tm + tt.minute = 0; + tt.second = 0; + +- tt.is_utc = 1; + tt.is_date = 1; + tt.is_daylight = 0; +- tt.zone = NULL; + + return tt; + } +@@ -313,7 +309,6 @@ struct icaltimetype get_icaltime_from_FI + tt.minute = tm->tm_min; + tt.second = tm->tm_sec; + tt.is_date = 0; +- tt.is_utc = 0; + tt.is_daylight = 0; + tt.zone = NULL; + +@@ -339,9 +334,8 @@ struct icaltimetype get_icaltime_from_FI + tt.minute = tm->tm_min; + tt.second = tm->tm_sec; + tt.is_date = 0; +- tt.is_utc = 1; + tt.is_daylight = 0; +- tt.zone = NULL; ++ tt.zone = icaltimezone_get_utc_timezone (); + + return tt; + } +@@ -371,9 +365,8 @@ struct icaltimetype get_icaldate_from_FI + tt.minute = 0; + tt.second = 0; + tt.is_date = 1; +- tt.is_utc = 1; + tt.is_daylight = 0; +- tt.zone = NULL; ++ tt.zone = icaltimezone_get_utc_timezone (); + + return tt; + } +@@ -390,10 +383,9 @@ struct icaltimetype get_icaldate_from_Gl + tt.minute = 0; + tt.second = 0; + +- tt.is_utc = 1; + tt.is_date = 1; + tt.is_daylight = 0; +- tt.zone = NULL; ++ tt.zone = icaltimezone_get_utc_timezone (); + + return tt; + } diff --git a/SOURCES/openchange-2.3-no-yyunput.patch b/SOURCES/openchange-2.3-no-yyunput.patch new file mode 100644 index 0000000..aaa2ac8 --- /dev/null +++ b/SOURCES/openchange-2.3-no-yyunput.patch @@ -0,0 +1,12 @@ +diff -up openchange-openchange-2.3-VULCAN/libocpf/lex.l.no-yyunput openchange-openchange-2.3-VULCAN/libocpf/lex.l +--- openchange-openchange-2.3-VULCAN/libocpf/lex.l.no-yyunput 2016-04-07 21:57:52.155596453 +0200 ++++ openchange-openchange-2.3-VULCAN/libocpf/lex.l 2016-04-07 21:58:19.397595467 +0200 +@@ -29,7 +29,7 @@ + #include "libocpf/lex.h" + + #define YY_EXTRA_TYPE struct ocpf_context * +-#define YY_NO_UNPUT ++/*#define YY_NO_UNPUT*/ + + static void unterminated(struct ocpf_context *, const char *, unsigned int); + diff --git a/SOURCES/openchange-2.3-samba-4.10-macros.patch b/SOURCES/openchange-2.3-samba-4.10-macros.patch new file mode 100644 index 0000000..0e8e2b9 --- /dev/null +++ b/SOURCES/openchange-2.3-samba-4.10-macros.patch @@ -0,0 +1,159 @@ +diff -up openchange-openchange-2.3-VULCAN/libmapiadmin/mapiadmin_user.c.samba-4.10-macros openchange-openchange-2.3-VULCAN/libmapiadmin/mapiadmin_user.c +--- openchange-openchange-2.3-VULCAN/libmapiadmin/mapiadmin_user.c.samba-4.10-macros 2019-02-14 15:19:53.317769411 +0100 ++++ openchange-openchange-2.3-VULCAN/libmapiadmin/mapiadmin_user.c 2019-02-14 15:19:53.331769410 +0100 +@@ -39,6 +39,8 @@ + + #include + ++#include "libmapi/libmapi_private.h" ++ + static ssize_t openchange_sys_read(int fd, void *buf, size_t count) + { + ssize_t ret; +@@ -101,7 +103,7 @@ static enum ndr_err_code openchange_ndr_ + NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->sid_rev_num)); + NDR_CHECK(ndr_push_int8(ndr, NDR_SCALARS, r->num_auths)); + NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->id_auth, 6)); +- if (r->num_auths < 0 || r->num_auths > ARRAY_SIZE(r->sub_auths)) { ++ if (r->num_auths < 0 || r->num_auths > OC_ARRAY_SIZE(r->sub_auths)) { + return ndr_push_error(ndr, NDR_ERR_RANGE, "value out of range"); + } + for (cntr_sub_auths_0 = 0; cntr_sub_auths_0 < r->num_auths; cntr_sub_auths_0++) { +@@ -659,7 +661,7 @@ again: + + OC_DEBUG(3, "Setting account password '%s'", mapiadmin_ctx->password); + +- ZERO_STRUCT(u); ++ OC_ZERO_STRUCT(u); + s.in.user_handle = &mapiadmin_ctx->user_ctx->user_handle; + s.in.info = &u; + s.in.level = 24; +@@ -687,7 +689,7 @@ again: + } + } + +- ZERO_STRUCT(u); ++ OC_ZERO_STRUCT(u); + s.in.user_handle = &mapiadmin_ctx->user_ctx->user_handle; + s.in.info = &u; + s.in.level = 21; +diff -up openchange-openchange-2.3-VULCAN/libmapi/libmapi_private.h.samba-4.10-macros openchange-openchange-2.3-VULCAN/libmapi/libmapi_private.h +--- openchange-openchange-2.3-VULCAN/libmapi/libmapi_private.h.samba-4.10-macros 2019-02-14 15:19:53.313769411 +0100 ++++ openchange-openchange-2.3-VULCAN/libmapi/libmapi_private.h 2019-02-14 15:19:53.331769410 +0100 +@@ -141,6 +141,11 @@ const char *libmapi_iface_best_ip(struc + bool libmapi_iface_is_local(struct interface *, const char *); + bool libmapi_iface_same_net(const char *, const char *, const char *); + ++#define OC_ZERO_STRUCT(x) memset((char *)&(x), 0, sizeof(x)) ++#define OC_ZERO_STRUCTP(x) do { if ((x) != NULL) memset((char *)(x), 0, sizeof(*(x))); } while(0) ++#define OC_ZERO_STRUCTPN(x) memset((char *)(x), 0, sizeof(*(x))) ++#define OC_ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0])) ++ + __END_DECLS + + #undef _PRINTF_ATTRIBUTE +diff -up openchange-openchange-2.3-VULCAN/libmapi/socket/interface.c.samba-4.10-macros openchange-openchange-2.3-VULCAN/libmapi/socket/interface.c +--- openchange-openchange-2.3-VULCAN/libmapi/socket/interface.c.samba-4.10-macros 2019-02-14 15:19:53.318769411 +0100 ++++ openchange-openchange-2.3-VULCAN/libmapi/socket/interface.c 2019-02-14 15:19:53.331769410 +0100 +@@ -70,7 +70,7 @@ static void add_interface(TALLOC_CTX *me + if (iface == NULL) + return; + +- ZERO_STRUCTPN(iface); ++ OC_ZERO_STRUCTPN(iface); + + iface->ip = ip; + iface->nmask = nmask; +diff -up openchange-openchange-2.3-VULCAN/mapiproxy/dcesrv_mapiproxy.c.samba-4.10-macros openchange-openchange-2.3-VULCAN/mapiproxy/dcesrv_mapiproxy.c +--- openchange-openchange-2.3-VULCAN/mapiproxy/dcesrv_mapiproxy.c.samba-4.10-macros 2015-05-16 17:22:04.000000000 +0200 ++++ openchange-openchange-2.3-VULCAN/mapiproxy/dcesrv_mapiproxy.c 2019-02-14 15:19:53.331769410 +0100 +@@ -703,7 +703,7 @@ NTSTATUS dcerpc_server_mapiproxy_init(vo + NTSTATUS ret; + struct dcesrv_endpoint_server ep_server; + +- ZERO_STRUCT(ep_server); ++ OC_ZERO_STRUCT(ep_server); + + /* Fill in our name */ + ep_server.name = "mapiproxy"; +diff -up openchange-openchange-2.3-VULCAN/ndr_mapi.c.samba-4.10-macros openchange-openchange-2.3-VULCAN/ndr_mapi.c +--- openchange-openchange-2.3-VULCAN/ndr_mapi.c.samba-4.10-macros 2019-02-14 15:19:53.329769410 +0100 ++++ openchange-openchange-2.3-VULCAN/ndr_mapi.c 2019-02-14 15:19:53.331769410 +0100 +@@ -921,7 +921,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_EcDo + TALLOC_CTX *_mem_save_length_0; + + if (flags & NDR_IN) { +- ZERO_STRUCT(r->out); ++ OC_ZERO_STRUCT(r->out); + + if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) { + NDR_PULL_ALLOC(ndr, r->in.handle); +@@ -961,7 +961,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_EcDo + NDR_PULL_ALLOC(ndr, r->out.handle); + *r->out.handle = *r->in.handle; + NDR_PULL_ALLOC(ndr, r->out.mapi_response); +- ZERO_STRUCTP(r->out.mapi_response); ++ OC_ZERO_STRUCTP(r->out.mapi_response); + NDR_PULL_ALLOC(ndr, r->out.length); + *r->out.length = *r->in.length; + } +@@ -1235,7 +1235,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_EcDo + TALLOC_CTX *_mem_save_rgbAuxOut_1; + + if (flags & NDR_IN) { +- ZERO_STRUCT(r->out); ++ OC_ZERO_STRUCT(r->out); + + NDR_CHECK(ndr_pull_array_size(ndr, &r->in.szUserDN)); + NDR_CHECK(ndr_pull_array_length(ndr, &r->in.szUserDN)); +@@ -1294,19 +1294,19 @@ _PUBLIC_ enum ndr_err_code ndr_pull_EcDo + } + NDR_PULL_SET_MEM_CTX(ndr, _mem_save_pcbAuxOut_0, LIBNDR_FLAG_REF_ALLOC); + NDR_PULL_ALLOC(ndr, r->out.handle); +- ZERO_STRUCTP(r->out.handle); ++ OC_ZERO_STRUCTP(r->out.handle); + NDR_PULL_ALLOC(ndr, r->out.pcmsPollsMax); +- ZERO_STRUCTP(r->out.pcmsPollsMax); ++ OC_ZERO_STRUCTP(r->out.pcmsPollsMax); + NDR_PULL_ALLOC(ndr, r->out.pcRetry); +- ZERO_STRUCTP(r->out.pcRetry); ++ OC_ZERO_STRUCTP(r->out.pcRetry); + NDR_PULL_ALLOC(ndr, r->out.pcmsRetryDelay); +- ZERO_STRUCTP(r->out.pcmsRetryDelay); ++ OC_ZERO_STRUCTP(r->out.pcmsRetryDelay); + NDR_PULL_ALLOC(ndr, r->out.picxr); +- ZERO_STRUCTP(r->out.picxr); ++ OC_ZERO_STRUCTP(r->out.picxr); + NDR_PULL_ALLOC(ndr, r->out.szDNPrefix); +- ZERO_STRUCTP(r->out.szDNPrefix); ++ OC_ZERO_STRUCTP(r->out.szDNPrefix); + NDR_PULL_ALLOC(ndr, r->out.szDisplayName); +- ZERO_STRUCTP(r->out.szDisplayName); ++ OC_ZERO_STRUCTP(r->out.szDisplayName); + NDR_PULL_ALLOC(ndr, r->out.pulTimeStamp); + *r->out.pulTimeStamp = *r->in.pulTimeStamp; + NDR_PULL_ALLOC(ndr, r->out.pcbAuxOut); +diff -up openchange-openchange-2.3-VULCAN/testsuite/libmapi/mapi_property.c.samba-4.10-macros openchange-openchange-2.3-VULCAN/testsuite/libmapi/mapi_property.c +--- openchange-openchange-2.3-VULCAN/testsuite/libmapi/mapi_property.c.samba-4.10-macros 2015-05-16 17:22:04.000000000 +0200 ++++ openchange-openchange-2.3-VULCAN/testsuite/libmapi/mapi_property.c 2019-02-14 15:19:53.331769410 +0100 +@@ -280,7 +280,7 @@ static void _make_test_srow(TALLOC_CTX * + { + struct SPropValue prop_val; + +- ZERO_STRUCT(prop_val); ++ OC_ZERO_STRUCT(prop_val); + /* PT_I8 */ + prop_val.ulPropTag = PR_FID; + prop_val.value.d = 0x0123456789ABCDEFul; +diff -up openchange-openchange-2.3-VULCAN/testsuite/libmapiproxy/openchangedb_logger.c.samba-4.10-macros openchange-openchange-2.3-VULCAN/testsuite/libmapiproxy/openchangedb_logger.c +--- openchange-openchange-2.3-VULCAN/testsuite/libmapiproxy/openchangedb_logger.c.samba-4.10-macros 2015-05-16 17:22:04.000000000 +0200 ++++ openchange-openchange-2.3-VULCAN/testsuite/libmapiproxy/openchangedb_logger.c 2019-02-14 15:19:53.332769410 +0100 +@@ -638,7 +638,7 @@ static void ocdb_logger_setup(void) + ck_abort(); + } + +- ZERO_STRUCT(functions_called); ++ OC_ZERO_STRUCT(functions_called); + } + + static void ocdb_logger_teardown(void) diff --git a/SOURCES/openchange-2.3-samba-4.11.patch b/SOURCES/openchange-2.3-samba-4.11.patch new file mode 100644 index 0000000..b95a21f --- /dev/null +++ b/SOURCES/openchange-2.3-samba-4.11.patch @@ -0,0 +1,41 @@ +diff -up openchange-openchange-2.3-VULCAN/exchange.idl.samba-4.11 openchange-openchange-2.3-VULCAN/exchange.idl +--- openchange-openchange-2.3-VULCAN/exchange.idl.samba-4.11 2015-05-16 17:22:04.000000000 +0200 ++++ openchange-openchange-2.3-VULCAN/exchange.idl 2019-08-30 07:23:02.172309353 +0200 +@@ -465,12 +465,12 @@ System Attendant Private Interface + would otherwise break the data alignment on wire operations. + However, they must be defined here as they make use of the same array types. */ + +- typedef [nopush,nopull,noprint] struct { ++ typedef [public] struct { + [range(0,100000)] uint32 cValues; + [size_is(cValues)] hyper *lpui8; + } UI8Array_r; + +- typedef [switch_type(uint32),nopush,nopull,noprint] union { ++ typedef [switch_type(uint32)] union { + [case(PT_I2)] uint16 i; + [case(PT_LONG)] uint32 l; + [case(PT_DOUBLE)] double dbl; +@@ -495,19 +495,19 @@ System Attendant Private Interface + [case(PT_OBJECT)] uint32 object; + } SPropValue_CTR; + +- typedef [public,noprint,nopush,nopull] struct { ++ typedef [public] struct { + MAPITAGS ulPropTag; + uint32 dwAlignPad; + [switch_is(ulPropTag & 0xFFFF)] SPropValue_CTR value; + } SPropValue; + +- typedef [public,noprint,nopush,nopull] struct { ++ typedef [public] struct { + uint32 ulAdrEntryPad; + [range(0,100000)] uint32 cValues; + [size_is(cValues)]SPropValue *lpProps; + } SRow; + +- typedef [public,noprint,nopush,nopull] struct { ++ typedef [public] struct { + [range(0,100000)] uint32 cRows; + [size_is(cRows)] SRow aRow[]; + } SRowSet; diff --git a/SOURCES/openchange-2.3-samba-4.12.patch b/SOURCES/openchange-2.3-samba-4.12.patch new file mode 100644 index 0000000..c4d1251 --- /dev/null +++ b/SOURCES/openchange-2.3-samba-4.12.patch @@ -0,0 +1,85 @@ +diff -up openchange-openchange-2.3-VULCAN/libmapiadmin/libmapiadmin.h.samba-4.12 openchange-openchange-2.3-VULCAN/libmapiadmin/libmapiadmin.h +--- openchange-openchange-2.3-VULCAN/libmapiadmin/libmapiadmin.h.samba-4.12 2020-01-27 11:33:02.941846935 +0100 ++++ openchange-openchange-2.3-VULCAN/libmapiadmin/libmapiadmin.h 2020-01-27 11:33:19.170846710 +0100 +@@ -103,7 +103,9 @@ __BEGIN_DECLS + struct ldb_dn *samdb_search_dn(struct ldb_context *, TALLOC_CTX *, struct ldb_dn *, const char *, ...) _PRINTF_ATTRIBUTE(4,5); + struct dom_sid *dom_sid_add_rid(TALLOC_CTX *, const struct dom_sid *, uint32_t); + bool encode_pw_buffer(uint8_t buffer[516], const char *, int); ++#if 0 /* removed in samba 4.12 */ + void arcfour_crypt_blob(uint8_t *, int, const DATA_BLOB *); ++#endif + + /* The following public definitions come from libmapiadmin/mapiadmin.c */ + struct mapiadmin_ctx *mapiadmin_init(struct mapi_session *); +diff -up openchange-openchange-2.3-VULCAN/libmapiadmin/mapiadmin_user.c.samba-4.12 openchange-openchange-2.3-VULCAN/libmapiadmin/mapiadmin_user.c +--- openchange-openchange-2.3-VULCAN/libmapiadmin/mapiadmin_user.c.samba-4.12 2020-01-27 11:25:31.398853179 +0100 ++++ openchange-openchange-2.3-VULCAN/libmapiadmin/mapiadmin_user.c 2020-01-27 11:31:27.490848255 +0100 +@@ -592,6 +592,9 @@ _PUBLIC_ enum MAPISTATUS mapiadmin_user_ + */ + _PUBLIC_ enum MAPISTATUS mapiadmin_user_add(struct mapiadmin_ctx *mapiadmin_ctx) + { ++ OC_DEBUG(3, "mapiadmin_user_add(): is disabled"); ++ return MAPI_E_UNABLE_TO_COMPLETE; ++#if 0 /* disable it, use samba function directly, if needed (no 'arcfour_crypt_blob' in samba 4.12) */ + TALLOC_CTX *mem_ctx; + NTSTATUS status; + enum MAPISTATUS retval; +@@ -732,6 +735,7 @@ again: + + talloc_free(mem_ctx); + return MAPI_E_SUCCESS; ++#endif + } + + /** +diff -up openchange-openchange-2.3-VULCAN/ndr_mapi.c.samba-4.12 openchange-openchange-2.3-VULCAN/ndr_mapi.c +--- openchange-openchange-2.3-VULCAN/ndr_mapi.c.samba-4.12 2020-01-27 11:04:07.136870938 +0100 ++++ openchange-openchange-2.3-VULCAN/ndr_mapi.c 2020-01-27 11:12:29.978863985 +0100 +@@ -2151,7 +2151,11 @@ enum ndr_err_code ndr_push_RestrictionVa + uint32_t _flags_save_STRUCT = ndr->flags; + ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN); + if (ndr_flags & NDR_SCALARS) { +- int level = ndr_push_get_switch_value(ndr, r); ++ uint32_t level = 0; ++ ++ if (!NDR_ERR_CODE_IS_SUCCESS(ndr_push_steal_switch_value(ndr, r, &level))) ++ level = 0; ++ + switch (level) { + case 0x0: { + break; } +@@ -2165,7 +2169,9 @@ enum ndr_err_code ndr_push_RestrictionVa + } + } + if (ndr_flags & NDR_BUFFERS) { +- int level = ndr_push_get_switch_value(ndr, r); ++ uint32_t level; ++ if (!NDR_ERR_CODE_IS_SUCCESS(ndr_push_steal_switch_value(ndr, r, &level))) ++ level = 0; + switch (level) { + case 0x0: + break; +@@ -2187,9 +2193,10 @@ enum ndr_err_code ndr_push_RestrictionVa + + enum ndr_err_code ndr_pull_RestrictionVariable(struct ndr_pull *ndr, int ndr_flags, union RestrictionVariable *r) + { +- int level; ++ uint32_t level; + TALLOC_CTX *_mem_save_res_0; +- level = ndr_pull_get_switch_value(ndr, r); ++ if (!NDR_ERR_CODE_IS_SUCCESS(ndr_pull_steal_switch_value(ndr, r, &level))) ++ level = 0; + { + uint32_t _flags_save_STRUCT = ndr->flags; + ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN); +@@ -2237,8 +2244,8 @@ enum ndr_err_code ndr_pull_RestrictionV + + _PUBLIC_ void ndr_print_RestrictionVariable(struct ndr_print *ndr, const char *name, const union RestrictionVariable *r) + { +- int level; +- level = ndr_print_get_switch_value(ndr, r); ++ uint32_t level; ++ level = ndr_print_steal_switch_value(ndr, r); + ndr_print_union(ndr, name, level, "RestrictionVariable"); + switch (level) { + case 0x0: diff --git a/SOURCES/openchange-2.3-samba-4.13.patch b/SOURCES/openchange-2.3-samba-4.13.patch new file mode 100644 index 0000000..7f0c342 --- /dev/null +++ b/SOURCES/openchange-2.3-samba-4.13.patch @@ -0,0 +1,40 @@ +diff -up openchange-openchange-2.3-VULCAN/libmapi/IProfAdmin.c.samba-4.13 openchange-openchange-2.3-VULCAN/libmapi/IProfAdmin.c +--- openchange-openchange-2.3-VULCAN/libmapi/IProfAdmin.c.samba-4.13 2020-11-13 13:37:00.953428673 +0100 ++++ openchange-openchange-2.3-VULCAN/libmapi/IProfAdmin.c 2020-11-13 13:38:36.541453531 +0100 +@@ -753,7 +753,7 @@ _PUBLIC_ enum MAPISTATUS OpenProfile(str + _PUBLIC_ enum MAPISTATUS LoadProfile(struct mapi_context *mapi_ctx, + struct mapi_profile *profile) + { +- enum credentials_use_kerberos use_krb = CRED_AUTO_USE_KERBEROS; ++ enum credentials_use_kerberos use_krb = CRED_USE_KERBEROS_DESIRED; + + /* Sanity checks */ + OPENCHANGE_RETVAL_IF(!mapi_ctx, MAPI_E_NOT_INITIALIZED, NULL); +@@ -777,9 +777,9 @@ _PUBLIC_ enum MAPISTATUS LoadProfile(str + * another API in the profile */ + if (profile->kerberos) { + if (!strncmp(profile->kerberos, "yes", 3)) { +- use_krb = CRED_MUST_USE_KERBEROS; ++ use_krb = CRED_USE_KERBEROS_REQUIRED; + } else { +- use_krb = CRED_DONT_USE_KERBEROS; ++ use_krb = CRED_USE_KERBEROS_DISABLED; + } + } + /* additionally, don't set the username in the ccache if kerberos +@@ -787,13 +787,13 @@ _PUBLIC_ enum MAPISTATUS LoadProfile(str + * credentials. cli_credentials_guess probably gets the right + * thing anyway in the situations where kerberos is in use */ + if (profile->username && *(profile->username) +- && use_krb != CRED_MUST_USE_KERBEROS) { ++ && use_krb != CRED_USE_KERBEROS_REQUIRED) { + cli_credentials_set_username(profile->credentials, profile->username, CRED_SPECIFIED); + } + if (profile->password && *(profile->password)) { + cli_credentials_set_password(profile->credentials, profile->password, CRED_SPECIFIED); + } +- if (use_krb != CRED_AUTO_USE_KERBEROS) { ++ if (use_krb != CRED_USE_KERBEROS_DESIRED) { + cli_credentials_set_kerberos_state(profile->credentials, use_krb); + } + diff --git a/SOURCES/openchange-2.3-samba-4.15.patch b/SOURCES/openchange-2.3-samba-4.15.patch new file mode 100644 index 0000000..13550d8 --- /dev/null +++ b/SOURCES/openchange-2.3-samba-4.15.patch @@ -0,0 +1,103 @@ +diff -up openchange-openchange-2.3-VULCAN/libmapi/IProfAdmin.c.samba-4.15 openchange-openchange-2.3-VULCAN/libmapi/IProfAdmin.c +--- openchange-openchange-2.3-VULCAN/libmapi/IProfAdmin.c.samba-4.15 2021-07-19 12:26:37.615770488 +0200 ++++ openchange-openchange-2.3-VULCAN/libmapi/IProfAdmin.c 2021-07-19 12:26:39.640771957 +0200 +@@ -794,7 +794,7 @@ _PUBLIC_ enum MAPISTATUS LoadProfile(str + cli_credentials_set_password(profile->credentials, profile->password, CRED_SPECIFIED); + } + if (use_krb != CRED_USE_KERBEROS_DESIRED) { +- cli_credentials_set_kerberos_state(profile->credentials, use_krb); ++ cli_credentials_set_kerberos_state(profile->credentials, use_krb, CRED_SPECIFIED); + } + + return MAPI_E_SUCCESS; +diff -up openchange-openchange-2.3-VULCAN/ndr_mapi.c.samba-4.15 openchange-openchange-2.3-VULCAN/ndr_mapi.c +--- openchange-openchange-2.3-VULCAN/ndr_mapi.c.samba-4.15 2021-07-19 12:59:29.801210983 +0200 ++++ openchange-openchange-2.3-VULCAN/ndr_mapi.c 2021-07-19 13:07:49.382594567 +0200 +@@ -1235,15 +1235,18 @@ _PUBLIC_ enum ndr_err_code ndr_pull_EcDo + TALLOC_CTX *_mem_save_rgbAuxOut_1; + + if (flags & NDR_IN) { ++ uint32_t array_length = 0, array_size = 0; + OC_ZERO_STRUCT(r->out); + + NDR_CHECK(ndr_pull_array_size(ndr, &r->in.szUserDN)); + NDR_CHECK(ndr_pull_array_length(ndr, &r->in.szUserDN)); +- if (ndr_get_array_length(ndr, &r->in.szUserDN) > ndr_get_array_size(ndr, &r->in.szUserDN)) { +- return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->in.szUserDN), ndr_get_array_length(ndr, &r->in.szUserDN)); ++ NDR_CHECK(ndr_get_array_length(ndr, &r->in.szUserDN, &array_length)); ++ NDR_CHECK(ndr_get_array_size(ndr, &r->in.szUserDN, &array_size)); ++ if (array_length > array_size) { ++ return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", array_size, array_length); + } +- NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, &r->in.szUserDN), sizeof(uint8_t))); +- NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.szUserDN, ndr_get_array_length(ndr, &r->in.szUserDN), sizeof(uint8_t), CH_DOS)); ++ NDR_CHECK(ndr_check_string_terminator(ndr, array_length, sizeof(uint8_t))); ++ NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->in.szUserDN, array_length, sizeof(uint8_t), CH_DOS)); + NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.ulFlags)); + NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.ulConMod)); + NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->in.cbLimit)); +@@ -1317,6 +1320,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_EcDo + } + + if (flags & NDR_OUT) { ++ uint32_t array_length = 0, array_size = 0; + if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) { + NDR_PULL_ALLOC(ndr, r->out.handle); + } +@@ -1366,11 +1370,13 @@ _PUBLIC_ enum ndr_err_code ndr_pull_EcDo + NDR_PULL_SET_MEM_CTX(ndr, *r->out.szDNPrefix, 0); + NDR_CHECK(ndr_pull_array_size(ndr, r->out.szDNPrefix)); + NDR_CHECK(ndr_pull_array_length(ndr, r->out.szDNPrefix)); +- if (ndr_get_array_length(ndr, r->out.szDNPrefix) > ndr_get_array_size(ndr, r->out.szDNPrefix)) { +- return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, r->out.szDNPrefix), ndr_get_array_length(ndr, r->out.szDNPrefix)); ++ NDR_CHECK(ndr_get_array_length(ndr, r->out.szDNPrefix, &array_length)); ++ NDR_CHECK(ndr_get_array_size(ndr, r->out.szDNPrefix, &array_size)); ++ if (array_length > array_size) { ++ return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", array_size, array_length); + } +- NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, r->out.szDNPrefix), sizeof(uint8_t))); +- NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, r->out.szDNPrefix, ndr_get_array_length(ndr, r->out.szDNPrefix), sizeof(uint8_t), CH_DOS)); ++ NDR_CHECK(ndr_check_string_terminator(ndr, array_length, sizeof(uint8_t))); ++ NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, r->out.szDNPrefix, array_length, sizeof(uint8_t), CH_DOS)); + NDR_PULL_SET_MEM_CTX(ndr, _mem_save_szDNPrefix_1, 0); + } + NDR_PULL_SET_MEM_CTX(ndr, _mem_save_szDNPrefix_0, LIBNDR_FLAG_REF_ALLOC); +@@ -1391,11 +1397,13 @@ _PUBLIC_ enum ndr_err_code ndr_pull_EcDo + NDR_PULL_SET_MEM_CTX(ndr, *r->out.szDisplayName, 0); + NDR_CHECK(ndr_pull_array_size(ndr, r->out.szDisplayName)); + NDR_CHECK(ndr_pull_array_length(ndr, r->out.szDisplayName)); +- if (ndr_get_array_length(ndr, r->out.szDisplayName) > ndr_get_array_size(ndr, r->out.szDisplayName)) { +- return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, r->out.szDisplayName), ndr_get_array_length(ndr, r->out.szDisplayName)); ++ NDR_CHECK(ndr_get_array_length(ndr, r->out.szDisplayName, &array_length)); ++ NDR_CHECK(ndr_get_array_size(ndr, r->out.szDisplayName, &array_size)); ++ if (array_length > array_size) { ++ return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", array_size, array_length); + } +- NDR_CHECK(ndr_check_string_terminator(ndr, ndr_get_array_length(ndr, r->out.szDisplayName), sizeof(uint8_t))); +- NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, r->out.szDisplayName, ndr_get_array_length(ndr, r->out.szDisplayName), sizeof(uint8_t), CH_DOS)); ++ NDR_CHECK(ndr_check_string_terminator(ndr, array_length, sizeof(uint8_t))); ++ NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, r->out.szDisplayName, array_length, sizeof(uint8_t), CH_DOS)); + NDR_PULL_SET_MEM_CTX(ndr, _mem_save_szDisplayName_1, 0); + } + NDR_PULL_SET_MEM_CTX(ndr, _mem_save_szDisplayName_0, LIBNDR_FLAG_REF_ALLOC); +@@ -1415,14 +1423,16 @@ _PUBLIC_ enum ndr_err_code ndr_pull_EcDo + NDR_PULL_SET_MEM_CTX(ndr, _mem_save_pulTimeStamp_0, LIBNDR_FLAG_REF_ALLOC); + NDR_CHECK(ndr_pull_array_size(ndr, &r->out.rgbAuxOut)); + NDR_CHECK(ndr_pull_array_length(ndr, &r->out.rgbAuxOut)); +- if (ndr_get_array_length(ndr, &r->out.rgbAuxOut) > ndr_get_array_size(ndr, &r->out.rgbAuxOut)) { +- return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", ndr_get_array_size(ndr, &r->out.rgbAuxOut), ndr_get_array_length(ndr, &r->out.rgbAuxOut)); ++ NDR_CHECK(ndr_get_array_length(ndr, &r->out.rgbAuxOut, &array_length)); ++ NDR_CHECK(ndr_get_array_size(ndr, &r->out.rgbAuxOut, &array_size)); ++ if (array_length > array_size) { ++ return ndr_pull_error(ndr, NDR_ERR_ARRAY_SIZE, "Bad array size %u should exceed array length %u", array_size, array_length); + } + if (ndr->flags & LIBNDR_FLAG_REF_ALLOC) { +- NDR_PULL_ALLOC_N(ndr, r->out.rgbAuxOut, ndr_get_array_size(ndr, &r->out.rgbAuxOut)); ++ NDR_PULL_ALLOC_N(ndr, r->out.rgbAuxOut, array_size); + } + /* Only try to pull rgbAuxOut if the fake array size is > 0 */ +- if (ndr_get_array_size(ndr, &r->out.rgbAuxOut)) { ++ if (array_size) { + _mem_save_rgbAuxOut_1 = NDR_PULL_GET_MEM_CTX(ndr); + NDR_PULL_SET_MEM_CTX(ndr, r->out.rgbAuxOut, 0); + NDR_CHECK(ndr_pull_mapi2k7_AuxInfo(ndr, NDR_SCALARS, r->out.rgbAuxOut)); diff --git a/SOURCES/openchange-2.3-samba-4.4.patch b/SOURCES/openchange-2.3-samba-4.4.patch new file mode 100644 index 0000000..20b9061 --- /dev/null +++ b/SOURCES/openchange-2.3-samba-4.4.patch @@ -0,0 +1,1077 @@ +diff -up openchange-openchange-2.3-VULCAN/configure.ac.samba44 openchange-openchange-2.3-VULCAN/configure.ac +--- openchange-openchange-2.3-VULCAN/configure.ac.samba44 2016-02-09 11:51:31.089982153 +0100 ++++ openchange-openchange-2.3-VULCAN/configure.ac 2016-02-09 12:04:55.985948047 +0100 +@@ -657,10 +657,11 @@ AC_CHECK_LIB([popt], [poptFreeContext], + enable_libpopt="no" + ]) + ++mapitest=0 + if test x"$enable_libpopt" = x"yes"; then + if test x"$enable_libmapiadmin" = x"yes"; then + openchangepfadmin=1 +- mapitest=1 ++ mapitest=0 + fi + + if test x"$enable_libocpf" = x"yes"; then +@@ -692,7 +693,7 @@ OC_RULE_ADD(mapipropsdump, TOOLS) + OC_RULE_ADD(exchange2ical, TOOLS) + #OC_RULE_ADD(rpcextract, TOOLS) + OC_RULE_ADD(openchangepfadmin, TOOLS) +-OC_RULE_ADD(mapitest, TOOLS) ++#OC_RULE_ADD(mapitest, TOOLS) + OC_RULE_ADD(mapiprofile, TOOLS) + OC_RULE_ADD(openchangemapidump, TOOLS) + OC_RULE_ADD(schemaIDGUID, TOOLS) +diff -up openchange-openchange-2.3-VULCAN/libexchange2ical/exchange2ical_property.c.samba44 openchange-openchange-2.3-VULCAN/libexchange2ical/exchange2ical_property.c +--- openchange-openchange-2.3-VULCAN/libexchange2ical/exchange2ical_property.c.samba44 2016-02-09 11:46:45.211994266 +0100 ++++ openchange-openchange-2.3-VULCAN/libexchange2ical/exchange2ical_property.c 2016-02-09 12:04:07.330950109 +0100 +@@ -22,6 +22,37 @@ + #include "libexchange2ical/libexchange2ical.h" + #include + ++static void openchange_all_string_sub(char *s,const char *pattern,const char *insert, size_t len) ++{ ++ char *p; ++ ssize_t ls,lp,li; ++ ++ if (!insert || !pattern || !s) ++ return; ++ ++ ls = (ssize_t)strlen(s); ++ lp = (ssize_t)strlen(pattern); ++ li = (ssize_t)strlen(insert); ++ ++ if (!*pattern) ++ return; ++ ++ if (len == 0) ++ len = ls + 1; /* len is number of *bytes* */ ++ ++ while (lp <= ls && (p = strstr_m(s,pattern))) { ++ if (ls + (li-lp) >= len) { ++ break; ++ } ++ if (li != lp) { ++ memmove(p+li,p+lp,strlen(p+lp)+1); ++ } ++ memcpy(p, insert, li); ++ s = p + li; ++ ls += (li-lp); ++ } ++} ++ + struct RRULE_byday { + uint16_t DayOfWeek; + const char *DayName; +@@ -1019,7 +1050,7 @@ void ical_property_RESOURCES(struct exch + if (!exchange2ical->NonSendableBcc) return; + + NonSendableBcc = talloc_strdup(exchange2ical->mem_ctx, exchange2ical->NonSendableBcc); +- all_string_sub(NonSendableBcc, ";", ",", 0); ++ openchange_all_string_sub(NonSendableBcc, ";", ",", 0); + prop = icalproperty_new_resources(NonSendableBcc); + icalcomponent_add_property(exchange2ical->vevent, prop); + talloc_free(NonSendableBcc); +diff -up openchange-openchange-2.3-VULCAN/libmapiadmin/mapiadmin_user.c.samba44 openchange-openchange-2.3-VULCAN/libmapiadmin/mapiadmin_user.c +--- openchange-openchange-2.3-VULCAN/libmapiadmin/mapiadmin_user.c.samba44 2015-05-16 17:22:04.000000000 +0200 ++++ openchange-openchange-2.3-VULCAN/libmapiadmin/mapiadmin_user.c 2016-02-08 22:19:17.750956440 +0100 +@@ -24,19 +24,251 @@ + along with this program. If not, see . + */ + ++#include ++ + #include "libmapiadmin/libmapiadmin.h" + + #include + #include ++#include + #include + #include +-#include + + #include + #include + + #include + ++static ssize_t openchange_sys_read(int fd, void *buf, size_t count) ++{ ++ ssize_t ret; ++ ++ do { ++ ret = read(fd, buf, count); ++ } while (ret == -1 && (errno == EINTR || errno == EAGAIN || ++ errno == EWOULDBLOCK)); ++ ++ return ret; ++} ++ ++static ssize_t openchange_read_data(int fd, void *buffer, size_t n) ++{ ++ ssize_t nread; ++ ++ nread = 0; ++ ++ while (nread < n) { ++ ssize_t ret; ++ ret = openchange_sys_read(fd, ((char *)buffer) + nread, n - nread); ++ if (ret <= 0) { ++ return ret; ++ } ++ nread += ret; ++ } ++ ++ return nread; ++} ++ ++static int openchange_urand_fd = -1; ++static void openchange_open_urandom(void) ++{ ++ if (openchange_urand_fd != -1) { ++ return; ++ } ++ openchange_urand_fd = open( "/dev/urandom", O_RDONLY,0); ++ if (openchange_urand_fd == -1) { ++ abort(); ++ } ++} ++ ++static void openchange_generate_random_buffer(uint8_t *out, int len) ++{ ++ ssize_t rw_ret; ++ ++ openchange_open_urandom(); ++ ++ rw_ret = openchange_read_data(openchange_urand_fd, out, len); ++ if (rw_ret != len) { ++ abort(); ++ } ++} ++ ++static enum ndr_err_code openchange_ndr_push_dom_sid(struct ndr_push *ndr, int ndr_flags, const struct dom_sid *r) ++{ ++ uint32_t cntr_sub_auths_0; ++ if (ndr_flags & NDR_SCALARS) { ++ NDR_CHECK(ndr_push_align(ndr, 4)); ++ NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r->sid_rev_num)); ++ NDR_CHECK(ndr_push_int8(ndr, NDR_SCALARS, r->num_auths)); ++ NDR_CHECK(ndr_push_array_uint8(ndr, NDR_SCALARS, r->id_auth, 6)); ++ if (r->num_auths < 0 || r->num_auths > ARRAY_SIZE(r->sub_auths)) { ++ return ndr_push_error(ndr, NDR_ERR_RANGE, "value out of range"); ++ } ++ for (cntr_sub_auths_0 = 0; cntr_sub_auths_0 < r->num_auths; cntr_sub_auths_0++) { ++ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->sub_auths[cntr_sub_auths_0])); ++ } ++ } ++ return NDR_ERR_SUCCESS; ++} ++ ++static char *openchange_ldap_encode_ndr_dom_sid(TALLOC_CTX *mem_ctx, const struct dom_sid *sid) ++{ ++#undef ldb_val ++ DATA_BLOB blob; ++ struct ldb_val val; ++ enum ndr_err_code ndr_err; ++ char *ret; ++ ndr_err = ndr_push_struct_blob(&blob, mem_ctx, sid, ++ (ndr_push_flags_fn_t)openchange_ndr_push_dom_sid); ++ if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) { ++ return NULL; ++ } ++ val.data = blob.data; ++ val.length = blob.length; ++ ret = ldb_binary_encode(mem_ctx, val); ++ data_blob_free(&blob); ++ return ret; ++} ++ ++static bool openchange_check_password_quality(const char *pwd) ++{ ++ size_t ofs = 0; ++ size_t num_chars = 0; ++ size_t num_digits = 0; ++ size_t num_upper = 0; ++ size_t num_lower = 0; ++ size_t num_nonalpha = 0; ++ size_t num_unicode = 0; ++ size_t num_categories = 0; ++ ++ if (pwd == NULL) { ++ return false; ++ } ++ ++ while (true) { ++ const char *s = &pwd[ofs]; ++ size_t len = 0; ++ codepoint_t c; ++ ++ c = next_codepoint(s, &len); ++ if (c == INVALID_CODEPOINT) { ++ return false; ++ } else if (c == 0) { ++ break; ++ } ++ ofs += len; ++ num_chars += 1; ++ ++ if (len == 1) { ++ const char *na = "~!@#$%^&*_-+=`|\\(){}[]:;\"'<>,.?/"; ++ ++ if (isdigit(c)) { ++ num_digits += 1; ++ continue; ++ } ++ ++ if (isupper(c)) { ++ num_upper += 1; ++ continue; ++ } ++ ++ if (islower(c)) { ++ num_lower += 1; ++ continue; ++ } ++ ++ if (strchr(na, c)) { ++ num_nonalpha += 1; ++ continue; ++ } ++ ++ /* ++ * the rest does not belong to ++ * a category. ++ */ ++ continue; ++ } ++ ++ if (isupper_m(c)) { ++ num_upper += 1; ++ continue; ++ } ++ ++ if (islower_m(c)) { ++ num_lower += 1; ++ continue; ++ } ++ ++ /* ++ * Note: for now do not check if the unicode category is ++ * alphabetic character ++ * ++ * We would have to import the details from ++ * ftp://ftp.unicode.org/Public/6.3.0/ucd/UnicodeData-6.3.0d1.txt ++ */ ++ num_unicode += 1; ++ continue; ++ } ++ ++ if (num_digits > 0) { ++ num_categories += 1; ++ } ++ if (num_upper > 0) { ++ num_categories += 1; ++ } ++ if (num_lower > 0) { ++ num_categories += 1; ++ } ++ if (num_nonalpha > 0) { ++ num_categories += 1; ++ } ++ if (num_unicode > 0) { ++ num_categories += 1; ++ } ++ ++ if (num_categories >= 3) { ++ return true; ++ } ++ ++ return false; ++} ++ ++static char *openchange_generate_random_str_list(TALLOC_CTX *mem_ctx, size_t len, const char *list) ++{ ++ size_t i; ++ size_t list_len = strlen(list); ++ ++ char *retstr = talloc_array(mem_ctx, char, len + 1); ++ if (!retstr) return NULL; ++ ++ openchange_generate_random_buffer((uint8_t *)retstr, len); ++ for (i = 0; i < len; i++) { ++ retstr[i] = list[retstr[i] % list_len]; ++ } ++ retstr[i] = '\0'; ++ ++ return retstr; ++} ++ ++static char *openchange_generate_random_str(TALLOC_CTX *mem_ctx, size_t len) ++{ ++ char *retstr; ++ const char *c_list = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+_-#.,"; ++ ++again: ++ retstr = openchange_generate_random_str_list(mem_ctx, len, c_list); ++ if (!retstr) return NULL; ++ ++ /* we need to make sure the random string passes basic quality tests ++ or it might be rejected by windows as a password */ ++ if (len >= 7 && !openchange_check_password_quality(retstr)) { ++ talloc_free(retstr); ++ goto again; ++ } ++ ++ return retstr; ++} ++ + /** + \file + User management functions for mapiadmin +@@ -232,10 +464,10 @@ _PUBLIC_ enum MAPISTATUS mapiadmin_user_ + /* Search the user_dn */ + account_dn = samdb_search_dn(remote_ldb, mem_ctx, NULL, + "(&(objectSid=%s)(objectClass=user))", +- ldap_encode_ndr_dom_sid(mem_ctx, dom_sid)); ++ openchange_ldap_encode_ndr_dom_sid(mem_ctx, dom_sid)); + + ret = ldb_search(remote_ldb, mem_ctx, &res, account_dn, LDB_SCOPE_SUBTREE, dom_attrs, "(objectSid=%s)", +- ldap_encode_ndr_dom_sid(mem_ctx, dom_sid)); ++ openchange_ldap_encode_ndr_dom_sid(mem_ctx, dom_sid)); + MAPI_RETVAL_IF(ret != LDB_SUCCESS, MAPI_E_NOT_FOUND, mem_ctx); + MAPI_RETVAL_IF(res->count != 1, MAPI_E_NOT_FOUND, mem_ctx); + +@@ -422,7 +654,7 @@ again: + } + + if (!mapiadmin_ctx->password) { +- mapiadmin_ctx->password = generate_random_str(mapiadmin_ctx->user_ctx, MAX(8, policy_min_pw_len)); ++ mapiadmin_ctx->password = openchange_generate_random_str(mapiadmin_ctx->user_ctx, MAX(8, policy_min_pw_len)); + } + + OC_DEBUG(3, "Setting account password '%s'", mapiadmin_ctx->password); +diff -up openchange-openchange-2.3-VULCAN/libmapi/mapidump.c.samba44 openchange-openchange-2.3-VULCAN/libmapi/mapidump.c +--- openchange-openchange-2.3-VULCAN/libmapi/mapidump.c.samba44 2016-02-09 11:03:18.565104717 +0100 ++++ openchange-openchange-2.3-VULCAN/libmapi/mapidump.c 2016-02-09 11:03:29.508104254 +0100 +@@ -119,7 +119,7 @@ _PUBLIC_ void mapidump_SPropValue(struct + data = get_SPropValue_data(&lpProp); + if (data) { + printf("%s%s:\n", sep?sep:"", proptag); +- dump_data(0, ((const struct Binary_r *)data)->lpb, ((const struct Binary_r *)data)->cb); ++ oc_dump_data(0, ((const struct Binary_r *)data)->lpb, ((const struct Binary_r *)data)->cb); + } else { + printf("%s%s: (NULL)\n", sep?sep:"", proptag); + } +@@ -153,7 +153,7 @@ _PUBLIC_ void mapidump_SPropValue(struct + printf("%s%s: ARRAY(%d)\n", sep?sep:"", proptag, BinaryArray_r->cValues); + for (i = 0; i < BinaryArray_r->cValues; i++) { + printf("\tPT_MV_BINARY [%d]:\n", i); +- dump_data(0, BinaryArray_r->lpbin[i].lpb, BinaryArray_r->lpbin[i].cb); ++ oc_dump_data(0, BinaryArray_r->lpbin[i].lpb, BinaryArray_r->lpbin[i].cb); + } + break; + default: +diff -up openchange-openchange-2.3-VULCAN/libmapi/mapi_object.c.samba44 openchange-openchange-2.3-VULCAN/libmapi/mapi_object.c +--- openchange-openchange-2.3-VULCAN/libmapi/mapi_object.c.samba44 2016-02-09 11:02:57.062105628 +0100 ++++ openchange-openchange-2.3-VULCAN/libmapi/mapi_object.c 2016-02-09 11:03:01.012105461 +0100 +@@ -412,7 +412,7 @@ _PUBLIC_ enum MAPISTATUS mapi_object_boo + while (bookmark) { + OC_DEBUG(0, "mapi_object_bookmark {"); + OC_DEBUG(0, ".index == %u", bookmark->index); +- dump_data(0, bookmark->bin.lpb, bookmark->bin.cb); ++ oc_dump_data(0, bookmark->bin.lpb, bookmark->bin.cb); + OC_DEBUG(0, "};"); + + bookmark = bookmark->next; +diff -up openchange-openchange-2.3-VULCAN/libmapi/oc_log.c.samba44 openchange-openchange-2.3-VULCAN/libmapi/oc_log.c +--- openchange-openchange-2.3-VULCAN/libmapi/oc_log.c.samba44 2016-02-09 10:49:20.292140237 +0100 ++++ openchange-openchange-2.3-VULCAN/libmapi/oc_log.c 2016-02-09 11:30:13.912036271 +0100 +@@ -21,6 +21,12 @@ + + #include "libmapi/libmapi.h" + #include ++#include ++#include ++ ++#ifndef MIN ++#define MIN(a,b) ((a)<(b)?(a):(b)) ++#endif + + int _oc_log_samba_level = 0; + +@@ -84,3 +90,119 @@ void oc_log_init_server(const char *prog + { + setup_logging(progname, DEBUG_FILE); + } ++ ++void oc_panic(const char *why) ++{ ++ if (why) { ++ fprintf(stderr, "PANIC: %s\n", why); ++ fflush(stderr); ++ } ++ ++ abort(); ++} ++static void oc_debugadd_cb(const char *buf, void *private_data) ++{ ++ int *plevel = (int *)private_data; ++ if (plevel && *plevel <= _oc_log_samba_level) { ++ printf ("%s", buf); ++ } ++} ++ ++static void oc_print_asc_cb(const uint8_t *buf, int len, ++ void (*cb)(const char *buf, void *private_data), ++ void *private_data) ++{ ++ int i; ++ char s[2]; ++ s[1] = 0; ++ ++ for (i=0; i 0) && ++ (len > i+16) && ++ (memcmp(&buf[i], &empty, 16) == 0)) ++ { ++ i +=16; ++ continue; ++ } ++ ++ if (i i+16) && ++ (memcmp(&buf[i], &empty, 16) == 0)) { ++ if (!skipped) { ++ cb("skipping zero buffer bytes\n", ++ private_data); ++ skipped = true; ++ } ++ } ++ } ++ } ++ ++ if (i%16) { ++ int n; ++ n = 16 - (i%16); ++ cb(" ", private_data); ++ if (n>8) { ++ cb(" ", private_data); ++ } ++ while (n--) { ++ cb(" ", private_data); ++ } ++ n = MIN(8,i%16); ++ oc_print_asc_cb(&buf[i-(i%16)], n, cb, private_data); ++ cb(" ", private_data); ++ n = (i%16) - n; ++ if (n>0) { ++ oc_print_asc_cb(&buf[i-n], n, cb, private_data); ++ } ++ cb("\n", private_data); ++ } ++ ++} ++ ++void oc_dump_data(int level, const uint8_t *buf,int len) ++{ ++ if (_oc_log_samba_level < level || !buf || !len) ++ return; ++ ++ oc_dump_data_cb(buf, len, false, oc_debugadd_cb, &level); ++} +diff -up openchange-openchange-2.3-VULCAN/libmapi/oc_log.h.samba44 openchange-openchange-2.3-VULCAN/libmapi/oc_log.h +--- openchange-openchange-2.3-VULCAN/libmapi/oc_log.h.samba44 2016-02-09 10:49:16.132140414 +0100 ++++ openchange-openchange-2.3-VULCAN/libmapi/oc_log.h 2016-02-09 10:51:57.121133592 +0100 +@@ -79,4 +79,7 @@ void oc_log_init_server(const char *prog + + extern int _oc_log_samba_level; /* Private, do not change it other than by SetMAPIDebugLevel() */ + ++void oc_panic(const char *why); ++void oc_dump_data(int level, const uint8_t *buf,int len); ++ + #endif /* _OC_LOG_H_ */ +diff -up openchange-openchange-2.3-VULCAN/libmapi/property.c.samba44 openchange-openchange-2.3-VULCAN/libmapi/property.c +--- openchange-openchange-2.3-VULCAN/libmapi/property.c.samba44 2016-02-09 10:46:51.040146561 +0100 ++++ openchange-openchange-2.3-VULCAN/libmapi/property.c 2016-02-09 10:48:47.626141621 +0100 +@@ -777,7 +777,7 @@ _PUBLIC_ void mapi_copy_spropvalues(TALL + // TODO: Replace this with OC_PANIC() macro when it gets visible in libmapi too + OC_DEBUG(0, "Unexpected multi-value property type: %s.", + get_proptag_name(source_value->ulPropTag)); +- smb_panic("Unexpected multi-value property type while copying 'struct SPropValue'"); ++ oc_panic("Unexpected multi-value property type while copying 'struct SPropValue'"); + } + } + } +diff -up openchange-openchange-2.3-VULCAN/libmapi/socket/interface.c.samba44 openchange-openchange-2.3-VULCAN/libmapi/socket/interface.c +--- openchange-openchange-2.3-VULCAN/libmapi/socket/interface.c.samba44 2016-02-09 11:09:43.147088421 +0100 ++++ openchange-openchange-2.3-VULCAN/libmapi/socket/interface.c 2016-02-09 11:31:47.664032298 +0100 +@@ -90,6 +90,213 @@ static void add_interface(TALLOC_CTX *me + OC_DEBUG(2, "added interface ip=%s nmask=%s", iface->ip_s, iface->nmask_s); + } + ++enum oc_protocol_types { ++ PROTOCOL_DEFAULT=-1, ++ PROTOCOL_NONE=0, ++ PROTOCOL_CORE, ++ PROTOCOL_COREPLUS, ++ PROTOCOL_LANMAN1, ++ PROTOCOL_LANMAN2, ++ PROTOCOL_NT1, ++ PROTOCOL_SMB2_02, ++ PROTOCOL_SMB2_10, ++ PROTOCOL_SMB2_22, ++ PROTOCOL_SMB2_24, ++ PROTOCOL_SMB3_00, ++ PROTOCOL_SMB3_02, ++ PROTOCOL_SMB3_10, ++ PROTOCOL_SMB3_11 ++}; ++ ++static int openchange_null_match(const char *p) ++{ ++ for (;*p;p++) { ++ if (*p != '*' && ++ *p != '<' && ++ *p != '"' && ++ *p != '>') return -1; ++ } ++ return 0; ++} ++ ++/* ++ the max_n structure is purely for efficiency, it doesn't contribute ++ to the matching algorithm except by ensuring that the algorithm does ++ not grow exponentially ++*/ ++struct max_n { ++ const char *predot; ++ const char *postdot; ++}; ++ ++ ++/* ++ p and n are the pattern and string being matched. The max_n array is ++ an optimisation only. The ldot pointer is NULL if the string does ++ not contain a '.', otherwise it points at the last dot in 'n'. ++*/ ++static int openchange_ms_fnmatch_core(const char *p, const char *n, ++ struct max_n *max_n, const char *ldot) ++{ ++ codepoint_t c, c2; ++ int i; ++ size_t size, size_n; ++ ++ while ((c = next_codepoint(p, &size))) { ++ p += size; ++ ++ switch (c) { ++ case '*': ++ /* a '*' matches zero or more characters of any type */ ++ if (max_n->predot && max_n->predot <= n) { ++ return openchange_null_match(p); ++ } ++ for (i=0; n[i]; i += size_n) { ++ next_codepoint(n+i, &size_n); ++ if (openchange_ms_fnmatch_core(p, n+i, max_n+1, ldot) == 0) { ++ return 0; ++ } ++ } ++ if (!max_n->predot || max_n->predot > n) max_n->predot = n; ++ return openchange_null_match(p); ++ ++ case '<': ++ /* a '<' matches zero or more characters of ++ any type, but stops matching at the last ++ '.' in the string. */ ++ if (max_n->predot && max_n->predot <= n) { ++ return openchange_null_match(p); ++ } ++ if (max_n->postdot && max_n->postdot <= n && n <= ldot) { ++ return -1; ++ } ++ for (i=0; n[i]; i += size_n) { ++ next_codepoint(n+i, &size_n); ++ if (openchange_ms_fnmatch_core(p, n+i, max_n+1, ldot) == 0) return 0; ++ if (n+i == ldot) { ++ if (openchange_ms_fnmatch_core(p, n+i+size_n, max_n+1, ldot) == 0) return 0; ++ if (!max_n->postdot || max_n->postdot > n) max_n->postdot = n; ++ return -1; ++ } ++ } ++ if (!max_n->predot || max_n->predot > n) max_n->predot = n; ++ return openchange_null_match(p); ++ ++ case '?': ++ /* a '?' matches any single character */ ++ if (! *n) { ++ return -1; ++ } ++ next_codepoint(n, &size_n); ++ n += size_n; ++ break; ++ ++ case '>': ++ /* a '?' matches any single character, but ++ treats '.' specially */ ++ if (n[0] == '.') { ++ if (! n[1] && openchange_null_match(p) == 0) { ++ return 0; ++ } ++ break; ++ } ++ if (! *n) return openchange_null_match(p); ++ next_codepoint(n, &size_n); ++ n += size_n; ++ break; ++ ++ case '"': ++ /* a bit like a soft '.' */ ++ if (*n == 0 && openchange_null_match(p) == 0) { ++ return 0; ++ } ++ if (*n != '.') return -1; ++ next_codepoint(n, &size_n); ++ n += size_n; ++ break; ++ ++ default: ++ c2 = next_codepoint(n, &size_n); ++ if (c != c2 && codepoint_cmpi(c, c2) != 0) { ++ return -1; ++ } ++ n += size_n; ++ break; ++ } ++ } ++ ++ if (! *n) { ++ return 0; ++ } ++ ++ return -1; ++} ++ ++static int openchange_ms_fnmatch_protocol(const char *pattern, const char *string, int protocol) ++{ ++ int ret, count, i; ++ struct max_n *max_n = NULL; ++ ++ if (strcmp(string, "..") == 0) { ++ string = "."; ++ } ++ ++ if (strpbrk(pattern, "<>*?\"") == NULL) { ++ /* this is not just an optimisation - it is essential ++ for LANMAN1 correctness */ ++ return strcasecmp_m(pattern, string); ++ } ++ ++ if (protocol <= PROTOCOL_LANMAN2) { ++ char *p = talloc_strdup(NULL, pattern); ++ if (p == NULL) { ++ return -1; ++ } ++ /* ++ for older negotiated protocols it is possible to ++ translate the pattern to produce a "new style" ++ pattern that exactly matches w2k behaviour ++ */ ++ for (i=0;p[i];i++) { ++ if (p[i] == '?') { ++ p[i] = '>'; ++ } else if (p[i] == '.' && ++ (p[i+1] == '?' || ++ p[i+1] == '*' || ++ p[i+1] == 0)) { ++ p[i] = '"'; ++ } else if (p[i] == '*' && ++ p[i+1] == '.') { ++ p[i] = '<'; ++ } ++ } ++ ret = openchange_ms_fnmatch_protocol(p, string, PROTOCOL_NT1); ++ talloc_free(p); ++ return ret; ++ } ++ ++ for (count=i=0;pattern[i];i++) { ++ if (pattern[i] == '*' || pattern[i] == '<') count++; ++ } ++ ++ max_n = talloc_zero_array(NULL, struct max_n, count); ++ if (max_n == NULL) { ++ return -1; ++ } ++ ++ ret = openchange_ms_fnmatch_core(pattern, string, max_n, strrchr(string, '.')); ++ ++ talloc_free(max_n); ++ ++ return ret; ++} ++ ++ ++/** a generic fnmatch function - uses for non-CIFS pattern matching */ ++static int openchange_gen_fnmatch(const char *pattern, const char *string) ++{ ++ return openchange_ms_fnmatch_protocol(pattern, string, PROTOCOL_NT1); ++} + + + /** +@@ -119,7 +326,7 @@ static void interpret_interface(TALLOC_C + + /* first check if it is an interface name */ + for (i=0;i +- + /* Expose samdb_connect prototype */ + struct ldb_context *samdb_connect(TALLOC_CTX *, struct tevent_context *, + struct loadparm_context *, +diff -up openchange-openchange-2.3-VULCAN/ndr_mapi.c.samba44 openchange-openchange-2.3-VULCAN/ndr_mapi.c +--- openchange-openchange-2.3-VULCAN/ndr_mapi.c.samba44 2016-02-09 11:04:30.054101688 +0100 ++++ openchange-openchange-2.3-VULCAN/ndr_mapi.c 2016-02-09 11:04:49.763100853 +0100 +@@ -1616,7 +1616,7 @@ _PUBLIC_ void ndr_print_EcDoRpcExt(struc + if (ndr_pull_mapi2k7_request(ndr_pull, NDR_SCALARS|NDR_BUFFERS, mapi_request) == NDR_ERR_SUCCESS) { + ndr_print_mapi2k7_request(ndr, "mapi_request", (const struct mapi2k7_request *)mapi_request); + } else { +- dump_data(0, ndr_pull->data + ndr_pull->offset, ndr_pull->data_size - ndr_pull->offset); ++ oc_dump_data(0, ndr_pull->data + ndr_pull->offset, ndr_pull->data_size - ndr_pull->offset); + talloc_free(mapi_request); + break; + } +@@ -1662,7 +1662,7 @@ _PUBLIC_ void ndr_print_EcDoRpcExt(struc + if (ndr_pull_mapi2k7_response(ndr_pull, NDR_SCALARS|NDR_BUFFERS, mapi_response) == NDR_ERR_SUCCESS) { + ndr_print_mapi2k7_response(ndr, "mapi_response", (const struct mapi2k7_response *)mapi_response); + } else { +- dump_data(0, ndr_pull->data + ndr_pull->offset, ndr_pull->data_size - ndr_pull->offset); ++ oc_dump_data(0, ndr_pull->data + ndr_pull->offset, ndr_pull->data_size - ndr_pull->offset); + talloc_free(mapi_response); + break; + } +@@ -1735,7 +1735,7 @@ _PUBLIC_ void ndr_print_EcDoRpcExt2(stru + if (ndr_pull_mapi2k7_request(ndr_pull, NDR_SCALARS|NDR_BUFFERS, mapi_request) == NDR_ERR_SUCCESS) { + ndr_print_mapi2k7_request(ndr, "mapi_request", (const struct mapi2k7_request *)mapi_request); + } else { +- dump_data(0, ndr_pull->data + ndr_pull->offset, ndr_pull->data_size - ndr_pull->offset); ++ oc_dump_data(0, ndr_pull->data + ndr_pull->offset, ndr_pull->data_size - ndr_pull->offset); + talloc_free(mapi_request); + return; + } +@@ -1786,7 +1786,7 @@ _PUBLIC_ void ndr_print_EcDoRpcExt2(stru + if (ndr_pull_mapi2k7_response(ndr_pull, NDR_SCALARS|NDR_BUFFERS, mapi_response) == NDR_ERR_SUCCESS) { + ndr_print_mapi2k7_response(ndr, "mapi_response", (const struct mapi2k7_response *)mapi_response); + } else { +- dump_data(0, ndr_pull->data + ndr_pull->offset, ndr_pull->data_size - ndr_pull->offset); ++ oc_dump_data(0, ndr_pull->data + ndr_pull->offset, ndr_pull->data_size - ndr_pull->offset); + talloc_free(mapi_response); + break; + } +@@ -2041,7 +2041,7 @@ _PUBLIC_ void ndr_print_SBinary_short(st + uint32_t _flags_save_STRUCT = ndr->flags; + ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN); + ndr->depth++; +- dump_data(0, r->lpb, r->cb); ++ oc_dump_data(0, r->lpb, r->cb); + ndr->depth--; + ndr->flags = _flags_save_STRUCT; + } +@@ -2054,7 +2054,7 @@ _PUBLIC_ void ndr_print_Binary_r(struct + uint32_t _flags_save_STRUCT = ndr->flags; + ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN); + ndr->depth++; +- dump_data(0, r->lpb, r->cb); ++ oc_dump_data(0, r->lpb, r->cb); + ndr->depth--; + ndr->flags = _flags_save_STRUCT; + } +diff -up openchange-openchange-2.3-VULCAN/utils/mapipropsdump.c.samba44 openchange-openchange-2.3-VULCAN/utils/mapipropsdump.c +--- openchange-openchange-2.3-VULCAN/utils/mapipropsdump.c.samba44 2015-05-16 17:22:04.000000000 +0200 ++++ openchange-openchange-2.3-VULCAN/utils/mapipropsdump.c 2016-02-09 10:35:42.207174902 +0100 +@@ -24,6 +24,9 @@ + #include "gen_ndr/ndr_exchange.h" + #include + #include ++#include ++#include ++#include + + #define PLUGIN "libmapi.so" + #define FUNCTION 0xB +@@ -97,6 +100,51 @@ static const const struct ndr_interface_ + return p; + } + ++static char *openchange_fd_load(int fd, size_t *psize, size_t maxsize, TALLOC_CTX *mem_ctx) ++{ ++ struct stat sbuf; ++ char *p; ++ size_t size; ++ ++ if (fstat(fd, &sbuf) != 0) return NULL; ++ ++ size = sbuf.st_size; ++ ++ if (maxsize) { ++ size = size < maxsize ? size : maxsize; ++ } ++ ++ p = (char *)talloc_size(mem_ctx, size+1); ++ if (!p) return NULL; ++ ++ if (read(fd, p, size) != size) { ++ talloc_free(p); ++ return NULL; ++ } ++ p[size] = 0; ++ ++ if (psize) *psize = size; ++ ++ return p; ++} ++ ++static char *openchange_file_load(const char *fname, size_t *size, size_t maxsize, TALLOC_CTX *mem_ctx) ++{ ++ int fd; ++ char *p; ++ ++ if (!fname || !*fname) return NULL; ++ ++ fd = open(fname,O_RDONLY); ++ if (fd == -1) return NULL; ++ ++ p = openchange_fd_load(fd, size, maxsize, mem_ctx); ++ ++ close(fd); ++ ++ return p; ++} ++ + static struct SPropTagArray *process_request(TALLOC_CTX *mem_ctx, + const struct ndr_interface_call *f, + const char *filename, +@@ -123,7 +171,7 @@ static struct SPropTagArray *process_req + return NULL; + } + +- data = (uint8_t *) file_load(filename, &size, 0, mem_ctx); ++ data = (uint8_t *) openchange_file_load(filename, &size, 0, mem_ctx); + if (!data) { + perror(filename); + return NULL; +@@ -224,7 +272,7 @@ static int process_response(TALLOC_CTX * + return -1; + } + +- data = (uint8_t *) file_load(filename, &size, 0, mem_ctx); ++ data = (uint8_t *) openchange_file_load(filename, &size, 0, mem_ctx); + if (!data) { + perror(filename); + return -1; +diff -up openchange-openchange-2.3-VULCAN/utils/mapitest/modules/module_lzxpress.c.samba44 openchange-openchange-2.3-VULCAN/utils/mapitest/modules/module_lzxpress.c +--- openchange-openchange-2.3-VULCAN/utils/mapitest/modules/module_lzxpress.c.samba44 2016-02-09 11:06:00.717097846 +0100 ++++ openchange-openchange-2.3-VULCAN/utils/mapitest/modules/module_lzxpress.c 2016-02-09 11:48:38.200989479 +0100 +@@ -19,11 +19,61 @@ + along with this program. If not, see . + */ + ++#include ++#include ++#include ++ + #include "utils/mapitest/mapitest.h" + #include "utils/mapitest/proto.h" + #include "gen_ndr/ndr_exchange.h" ++#include "libmapi/libmapi.h" + #include "libmapi/libmapi_private.h" + ++static char *openchange_fd_load(int fd, size_t *psize, size_t maxsize, TALLOC_CTX *mem_ctx) ++{ ++ struct stat sbuf; ++ char *p; ++ size_t size; ++ ++ if (fstat(fd, &sbuf) != 0) return NULL; ++ ++ size = sbuf.st_size; ++ ++ if (maxsize) { ++ size = size < maxsize ? size : maxsize; ++ } ++ ++ p = (char *)talloc_size(mem_ctx, size+1); ++ if (!p) return NULL; ++ ++ if (read(fd, p, size) != size) { ++ talloc_free(p); ++ return NULL; ++ } ++ p[size] = 0; ++ ++ if (psize) *psize = size; ++ ++ return p; ++} ++ ++static char *openchange_file_load(const char *fname, size_t *size, size_t maxsize, TALLOC_CTX *mem_ctx) ++{ ++ int fd; ++ char *p; ++ ++ if (!fname || !*fname) return NULL; ++ ++ fd = open(fname,O_RDONLY); ++ if (fd == -1) return NULL; ++ ++ p = openchange_fd_load(fd, size, maxsize, mem_ctx); ++ ++ close(fd); ++ ++ return p; ++} ++ + /** + \file module_lzxpress.c + +@@ -51,7 +101,7 @@ _PUBLIC_ bool mapitest_lzxpress_validate + /* Step 1. Load Test File 001_Outlook_2007_in_ModifyRecipients_comp.dat */ + filename = talloc_asprintf(mt->mem_ctx, "%s/001_Outlook_2007_in_ModifyRecipients_comp.dat", LZXPRESS_DATADIR); + /* filename = talloc_asprintf(mt->mem_ctx, "%s/002_Outlook_2007_in_Tables_operations_comp.dat", LZXPRESS_DATADIR); */ +- data = (uint8_t *)file_load(filename, &size, 0, mt->mem_ctx); ++ data = (uint8_t *)openchange_file_load(filename, &size, 0, mt->mem_ctx); + if (!data) { + perror(filename); + mapitest_print_retval_fmt(mt, "lzxpress_validate", "Error while loading %s", filename); +@@ -137,12 +187,12 @@ _PUBLIC_ bool mapitest_lzxpress_validate + + mapitest_print(mt, "Compressed rgbIn by Outlook\n"); + mapitest_print(mt, "==============================\n"); +- dump_data(0, r.in.rgbIn, r.in.cbIn); ++ oc_dump_data(0, r.in.rgbIn, r.in.cbIn); + mapitest_print(mt, "==============================\n"); + + mapitest_print(mt, "Compressed rgbIn by OpenChange\n"); + mapitest_print(mt, "==============================\n"); +- dump_data(0, ndr_rgbIn->data, ndr_rgbIn->offset); ++ oc_dump_data(0, ndr_rgbIn->data, ndr_rgbIn->offset); + mapitest_print(mt, "==============================\n"); + + talloc_free(ndr_rgbIn); +diff -up openchange-openchange-2.3-VULCAN/utils/openchangeclient.c.samba44 openchange-openchange-2.3-VULCAN/utils/openchangeclient.c +--- openchange-openchange-2.3-VULCAN/utils/openchangeclient.c.samba44 2015-05-16 17:22:04.000000000 +0200 ++++ openchange-openchange-2.3-VULCAN/utils/openchangeclient.c 2016-02-08 22:24:59.212942206 +0100 +@@ -97,6 +97,52 @@ static void init_oclient(struct oclient + oclient->ocpf_dump = NULL; + } + ++static char **openchange_str_list_make(TALLOC_CTX *mem_ctx, const char *string, const char *sep) ++{ ++ int num_elements = 0; ++ char **ret = NULL; ++ ++ if (sep == NULL) { ++ sep = " \t,\n\r"; ++ } ++ ++ ret = talloc_array(mem_ctx, char *, 1); ++ if (ret == NULL) { ++ return NULL; ++ } ++ ++ while (string && *string) { ++ size_t len = strcspn(string, sep); ++ char **ret2; ++ ++ if (len == 0) { ++ string += strspn(string, sep); ++ continue; ++ } ++ ++ ret2 = talloc_realloc(mem_ctx, ret, char *, ++ num_elements+2); ++ if (ret2 == NULL) { ++ talloc_free(ret); ++ return NULL; ++ } ++ ret = ret2; ++ ++ ret[num_elements] = talloc_strndup(ret, string, len); ++ if (ret[num_elements] == NULL) { ++ talloc_free(ret); ++ return NULL; ++ } ++ ++ num_elements++; ++ string += len; ++ } ++ ++ ret[num_elements] = NULL; ++ ++ return ret; ++} ++ + static enum MAPISTATUS openchangeclient_getdir(TALLOC_CTX *mem_ctx, + mapi_object_t *obj_container, + mapi_object_t *obj_child, +@@ -115,7 +161,7 @@ static enum MAPISTATUS openchangeclient_ + uint32_t i; + + /* Step 1. Extract the folder list from full path */ +- folder = str_list_make(mem_ctx, path, "/"); ++ folder = openchange_str_list_make(mem_ctx, path, "/"); + mapi_object_copy(&obj_folder, obj_container); + + for (i = 0; folder[i]; i++) { diff --git a/SOURCES/openchange-2.3-switch-to-python3.patch b/SOURCES/openchange-2.3-switch-to-python3.patch new file mode 100644 index 0000000..b781f5e --- /dev/null +++ b/SOURCES/openchange-2.3-switch-to-python3.patch @@ -0,0 +1,27 @@ +diff -up openchange-openchange-2.3-VULCAN/configure.ac.switch-to-python3 openchange-openchange-2.3-VULCAN/configure.ac +--- openchange-openchange-2.3-VULCAN/configure.ac.switch-to-python3 2018-04-17 13:51:55.977608741 +0200 ++++ openchange-openchange-2.3-VULCAN/configure.ac 2018-04-17 13:54:21.958606722 +0200 +@@ -377,17 +377,17 @@ dnl ------------------------------------ + dnl Check for Python + dnl --------------------------------------------------------------------------- + +-AC_PATH_PROG(PYTHON, python) ++AC_PATH_PROG(PYTHON, python3) + if test x"$PYTHON" = x""; then +- AC_MSG_WARN([No version of python was found!]) +- AC_MSG_ERROR([Please install python]) ++ AC_MSG_WARN([No version of python3 was found!]) ++ AC_MSG_ERROR([Please install python3]) + fi + AC_SUBST(PYTHON) + +-AC_PATH_PROG(PYTHON_CONFIG, python-config) ++AC_PATH_PROG(PYTHON_CONFIG, python3-config) + if test x"$PYTHON_CONFIG" = x""; then +- AC_MSG_WARN([No version of python-config was found!]) +- AC_MSG_ERROR([Please install python-dev 2.7]) ++ AC_MSG_WARN([No version of python3-config was found!]) ++ AC_MSG_ERROR([Please install python3-dev 3.x]) + fi + AC_SUBST(PYTHON_CONFIG) + diff --git a/SPECS/openchange.spec b/SPECS/openchange.spec new file mode 100644 index 0000000..aa112ab --- /dev/null +++ b/SPECS/openchange.spec @@ -0,0 +1,687 @@ +%global samba_version 4.13 +%global talloc_version 2.0.5 +%global nickname VULCAN + +# the python subpackage doesn't work, due to hard disable in patches for build requirements +%global build_python_package 0 +%global built_mapitest 0 + +%if 0%{?rhel} +%global build_server_package 0 +%else +# currently disabled also for rawhide (f18), due to samba4 changes +%global build_server_package 0 +%endif + +%if %{build_python_package} +%{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib(1)")} +%endif + +### Abstract ### + +# Licensing Note: The code is GPLv3+ and the IDL files are public domain. + +Name: openchange +Version: 2.3 +Release: 39%{?dist} +Summary: Provides access to Microsoft Exchange servers using native protocols +License: GPLv3+ and Public Domain +URL: http://www.openchange.org/ +Source0: https://github.com/openchange/openchange/archive/openchange-%{version}-%{nickname}.tar.gz +Source1: doxygen_to_devhelp.xsl + +### Build Dependencies ### + +BuildRequires: make +BuildRequires: autoconf +BuildRequires: automake +BuildRequires: bison +BuildRequires: doxygen +BuildRequires: file-devel +BuildRequires: flex +BuildRequires: gcc +BuildRequires: gcc-c++ +BuildRequires: libical-devel +BuildRequires: libldb-devel +BuildRequires: libtalloc-devel >= %{talloc_version} +BuildRequires: libtdb-devel +BuildRequires: pkgconfig +BuildRequires: libxslt +BuildRequires: popt-devel +%if %{build_python_package} +BuildRequires: python3-devel +%endif +BuildRequires: samba-common >= %{samba_version} +BuildRequires: samba-devel >= %{samba_version} +BuildRequires: samba-libs >= %{samba_version} +BuildRequires: samba-pidl >= %{samba_version} +BuildRequires: zlib-devel + +%if %{build_server_package} +BuildRequires: libmemcached-devel +BuildRequires: sqlite-devel +%endif + +# Certain versions of libtevent have incorrect +# internal ABI versions +Conflicts: libtevent < 0.9.13 + +### Patches ### + +# OpenChange's libmapi conflicts with Zarafa's libmapi. +# Zarafa is older than OpenChange, so it wins. +Patch0: libmapi-0.8.2-libmapi-conflict.patch + +# RH bug #552984 +Patch1: openchange-0.9-generate-xml-doc.patch + +# Do not build server and python parts +Patch2: openchange-1.0-OC_RULE_ADD-fix.patch + +# RH-bug #1028698 +Patch4: openchange-1.0-symbol-clash.patch + +Patch5: openchange-2.2-samba-4.2.0-rc2.patch +Patch6: openchange-2.3-disable-server-tools-build.patch +Patch7: openchange-2.3-samba-4.4.patch +Patch8: openchange-2.3-fix-connection-args.patch +Patch9: openchange-2.3-no-yyunput.patch +Patch10: openchange-2.3-libical-3.0.patch +Patch11: openchange-2.3-disable-mysql.patch +Patch12: openchange-2.3-switch-to-python3.patch +%if !%{build_python_package} +Patch13: openchange-2.3-disable-python3.patch +%endif +Patch14: openchange-2.3-covscan.patch +Patch15: openchange-2.3-samba-4.10-macros.patch +Patch16: openchange-2.3-samba-4.11.patch +Patch17: openchange-2.3-samba-4.12.patch +Patch18: openchange-2.3-samba-4.13.patch +%if !%{build_server_package} +Patch19: openchange-2.3-disable-server-reqs.patch +%endif +Patch20: openchange-2.3-samba-4.15.patch +%description +OpenChange provides libraries to access Microsoft Exchange servers +using native protocols. + +%package devel +Summary: Developer tools for OpenChange libraries +Requires: openchange = %{version}-%{release} +%if %{build_server_package} +Requires: openchange-server = %{version}-%{release} +%endif + +%description devel +This package provides the development tools and headers for +OpenChange, providing libraries to access Microsoft Exchange servers +using native protocols. + +%package devel-docs +Summary: Developer documentation for OpenChange libraries +Requires: devhelp +Requires: openchange = %{version}-%{release} +BuildArch: noarch + +%description devel-docs +This package contains developer documentation for Openchange. + +%package client +Summary: User tools for OpenChange libraries +Requires: openchange = %{version}-%{release} + +%description client +This package provides the user tools for OpenChange, providing access to +Microsoft Exchange servers using native protocols. + +%if %{build_python_package} +%package python +Summary: Python bindings for OpenChange libraries +Requires: openchange = %{version}-%{release} + +%description python +This module contains a wrapper that allows the use of OpenChange via Python. +%endif + +%if %{build_server_package} +%package server +Summary: Server-side modules for OpenChange +Requires: openchange = %{version}-%{release} +Requires: sqlite + +%description server +This package provides the server elements for OpenChange. +%endif + +%prep +%setup -q -n openchange-%{name}-%{version}-%{nickname} +%patch0 -p1 -b .libmapi-conflict +%patch1 -p1 -b .generate-xml-doc +%patch2 -p1 -b .OC_RULE_ADD-fix +%patch4 -p1 -b .symbol-clash +%patch5 -p1 -b .samba-4.2.0-rc2 +%patch6 -p1 -b .disable-server-tools-build +%patch7 -p1 -b .samba-4.4 +%patch8 -p1 -b .fix-connection-args +%patch9 -p1 -b .no-yyunput +%patch10 -p1 -b .libical-3.0 +%patch11 -p1 -b .disable-mysql +%patch12 -p1 -b .switch-to-python3 +%if !%{build_python_package} +%patch13 -p1 -b .disable-python3 +%endif +%patch14 -p1 -b .covscan +%patch15 -p1 -b .samba-4.10-macros +%patch16 -p1 -b .samba-4.11 +%patch17 -p1 -b .samba-4.12 +%patch18 -p1 -b .samba-4.13 +%if !%{build_server_package} +%patch19 -p1 -b .disable-server-reqs +%endif +%patch20 -p1 -b .samba-4.15 + +%build +./autogen.sh +%configure \ +%if %{build_python_package} + --enable-pymapi \ +%endif + --with-modulesdir=%{_libdir}/samba/modules + +# Parallel builds prohibited by makefile +make +if test -d apidocs ; then + rm -r apidocs +fi +make doxygen + +xsltproc -o openchange-libmapi.devhelp --stringparam "booktitle" "MAPI client library (libmapi)" --stringparam "bookpart" "libmapi" %{SOURCE1} apidocs/xml/libmapi/index.xml +xsltproc -o openchange-libmapiadmin.devhelp --stringparam "booktitle" "MAPI administration libraries (libmapiadmin)" --stringparam "bookpart" "libmapiadmin" %{SOURCE1} apidocs/xml/libmapiadmin/index.xml +xsltproc -o openchange-libocpf.devhelp --stringparam "booktitle" "OpenChange Property Files (libocpf)" --stringparam "bookpart" "libocpf" %{SOURCE1} apidocs/xml/libocpf/index.xml +%if %{built_mapitest} +xsltproc -o openchange-mapitest.devhelp --stringparam "booktitle" "MA regression test framework (mapitest)" --stringparam "bookpart" "mapitest" %{SOURCE1} apidocs/xml/mapitest/index.xml +%endif +xsltproc -o openchange-mapiproxy.devhelp --stringparam "booktitle" "MAPIProxy project (mapiproxy)" --stringparam "bookpart" "mapiproxy" %{SOURCE1} apidocs/xml/mapiproxy/index.xml +xsltproc -o openchange-libmapi++.devhelp --stringparam "booktitle" "C++ bindings for libmapi (libmapi++)" --stringparam "bookpart" "libmapi++" %{SOURCE1} apidocs/xml/libmapi++/index.xml + +%install +rm -rf $RPM_BUILD_ROOT + +%make_install + +# This makes the right links, as rpmlint requires that the +# ldconfig-created links be recorded in the RPM. +/sbin/ldconfig -N -n $RPM_BUILD_ROOT/%{_libdir} + +mkdir $RPM_BUILD_ROOT%{_mandir} +cp -r doc/man/man1 $RPM_BUILD_ROOT%{_mandir} + +# Skip man3 for now, it doesn't work anyway +# cp -r apidocs/man/man3 $RPM_BUILD_ROOT%{_mandir} +rm -r apidocs/man/man3 + +#%if ! %{build_python_package} +#rm -r $RPM_BUILD_ROOT%{python3_sitearch}/openchange +#%endif + +%if ! %{build_server_package} +# XXX OC_RULE_ADD patch disables build of this, no need to delete it. +#rm $RPM_BUILD_ROOT%{_libdir}/libmapiserver.so.* +#rm -r $RPM_BUILD_ROOT%{_libdir}/samba/modules/* +#rm $RPM_BUILD_ROOT%{_libdir}/samba/dcerpc_server/dcesrv_mapiproxy.so +rm $RPM_BUILD_ROOT%{_libdir}/nagios/check_exchange +rm -r $RPM_BUILD_ROOT%{_datadir}/setup/* +%endif + +#%if !%{build_python_package} && !%{build_server_package} +#rm $RPM_BUILD_ROOT%{_bindir}/check_fasttransfer +#%endif + +mkdir -p $RPM_BUILD_ROOT%{_datadir}/devhelp/books/openchange-libmapi +cp openchange-libmapi.devhelp $RPM_BUILD_ROOT%{_datadir}/devhelp/books/openchange-libmapi +cp -r apidocs/html/libmapi/* $RPM_BUILD_ROOT%{_datadir}/devhelp/books/openchange-libmapi + +mkdir -p $RPM_BUILD_ROOT%{_datadir}/devhelp/books/openchange-libmapiadmin +cp openchange-libmapiadmin.devhelp $RPM_BUILD_ROOT%{_datadir}/devhelp/books/openchange-libmapiadmin +cp -r apidocs/html/libmapiadmin/* $RPM_BUILD_ROOT%{_datadir}/devhelp/books/openchange-libmapiadmin + +mkdir -p $RPM_BUILD_ROOT%{_datadir}/devhelp/books/openchange-libocpf +cp openchange-libocpf.devhelp $RPM_BUILD_ROOT%{_datadir}/devhelp/books/openchange-libocpf +cp -r apidocs/html/libocpf/* $RPM_BUILD_ROOT%{_datadir}/devhelp/books/openchange-libocpf + +%if %{built_mapitest} +mkdir -p $RPM_BUILD_ROOT%{_datadir}/devhelp/books/openchange-mapitest +cp openchange-mapitest.devhelp $RPM_BUILD_ROOT%{_datadir}/devhelp/books/openchange-mapitest +cp -r apidocs/html/mapitest/* $RPM_BUILD_ROOT%{_datadir}/devhelp/books/openchange-mapitest +%endif + +mkdir -p $RPM_BUILD_ROOT%{_datadir}/devhelp/books/openchange-mapiproxy +cp openchange-mapiproxy.devhelp $RPM_BUILD_ROOT%{_datadir}/devhelp/books/openchange-mapiproxy +cp -r apidocs/html/mapiproxy/* $RPM_BUILD_ROOT%{_datadir}/devhelp/books/openchange-mapiproxy + +mkdir -p $RPM_BUILD_ROOT%{_datadir}/devhelp/books/openchange-libmapi++ +cp openchange-libmapi++.devhelp $RPM_BUILD_ROOT%{_datadir}/devhelp/books/openchange-libmapi++ +cp -r apidocs/html/libmapi++/* $RPM_BUILD_ROOT%{_datadir}/devhelp/books/openchange-libmapi++ + +%ldconfig_scriptlets + +%if %{build_server_package} +%ldconfig_scriptlets server +%endif + +%files +%doc COPYING IDL_LICENSE.txt VERSION +%{_libdir}/libmapi-openchange.so.0 +%{_libdir}/libmapi-openchange.so.2.3 +%{_libdir}/libmapiadmin.so.0 +%{_libdir}/libmapiadmin.so.2.3 +%{_libdir}/libmapipp.so.0 +%{_libdir}/libmapipp.so.2.3 +%if %{build_server_package} +%{_libdir}/libmapiproxy.so.0 +%{_libdir}/libmapiproxy.so.2.3 +%{_libdir}/libmapistore.so.0 +%{_libdir}/libmapistore.so.2.3 +%endif +%{_libdir}/libocpf.so.0 +%{_libdir}/libocpf.so.2.3 + +%files devel +%{_includedir}/* +%{_libdir}/*.so +%{_libdir}/pkgconfig/* + +%files devel-docs +#%%{_mandir}/man3/* +%doc %{_datadir}/devhelp/books/* +%doc apidocs/html/libmapi +%doc apidocs/html/libocpf +%doc apidocs/html/overview +%doc apidocs/html/index.html + +%files client +%{_bindir}/* +%{_mandir}/man1/* +%if %{built_mapitest} +%{_datadir}/mapitest/* +%endif + +%if %{build_python_package} +%files python +%{python3_sitearch}/openchange +%endif + +%if %{build_server_package} +%files server +%{_libdir}/libmapiserver.so.* +%{_libdir}/samba/dcerpc_server/dcesrv_mapiproxy.so +%{_libdir}/samba/modules/* +%if !0%{?rhel} +%{_libdir}/nagios/check_exchange +%endif +%{_datadir}/setup/* +%endif + +%changelog +* Wed May 04 2022 Milan Crha - 2.3-39 +- Related: #2081618 (Rebuild against samba 4.16) + +* Wed Dec 01 2021 Milan Crha - 2.3-38 +- Related: #2013578 (Add patch to build against samba 4.15) +- Avoid build time dependencies related to server, when it's not built + +* Mon Aug 09 2021 Mohan Boddu - 2.3-37 +- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags + Related: rhbz#1991688 + +* Fri Apr 16 2021 Mohan Boddu - 2.3-36 +- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937 + +* Tue Jan 26 2021 Fedora Release Engineering - 2.3-35 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Mon Nov 30 2020 Milan Crha - 2.3-34 +- Add patch to build against samba 4.13 + +* Tue Jul 28 2020 Fedora Release Engineering - 2.3-33 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Tue Jul 14 2020 Tom Stellard - 2.3-32 +- Use make macros +- https://fedoraproject.org/wiki/Changes/UseMakeBuildInstallMacro + +* Wed Jan 29 2020 Fedora Release Engineering - 2.3-31 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Mon Jan 27 2020 Milan Crha - 2.3-30 +- Add patch to build against samba 4.12 + +* Fri Aug 30 2019 Milan Crha - 2.3-29 +- Rebuild for newer libldb +- Add patch to build against samba 4.11 + +* Thu Jul 25 2019 Fedora Release Engineering - 2.3-28 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Thu Feb 14 2019 Milan Crha - 2.3-27 +- Add patch to build against samba 4.10 semi-public macro changes + +* Fri Feb 01 2019 Fedora Release Engineering - 2.3-26 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Thu Jul 19 2018 Milan Crha - 2.3-25 +- Address some of the Coverity Scan and clang issues + +* Fri Jul 13 2018 Fedora Release Engineering - 2.3-24 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Tue Apr 17 2018 Milan Crha - 2.3-23 +- Switch to python3 (partly) and disable python3 build dependency by default + +* Mon Mar 19 2018 Iryna Shcherbina - 2.3-22 +- Update Python 2 dependency declarations to new packaging standards + (See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3) + +* Wed Mar 07 2018 Milan Crha - 2.3-21 +- Do not copy content of libmapi++/ into includedir (RH bug #1548719) + +* Mon Feb 19 2018 Milan Crha - 2.3-20 +- Remove unneeded build dependency on mariadb-connector-c-devel + +* Thu Feb 08 2018 Fedora Release Engineering - 2.3-19 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Wed Nov 08 2017 Milan Crha - 2.3-18 +- Rebuild for newer libical + +* Fri Sep 22 2017 Milan Crha - 2.3-17 +- Use mariadb-connector-c-devel instead of community-mysql-devel (RH bug #1494307) + +* Thu Aug 03 2017 Fedora Release Engineering - 2.3-16 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Thu Jul 27 2017 Fedora Release Engineering - 2.3-15 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Sat Feb 11 2017 Fedora Release Engineering - 2.3-14 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Fri Apr 15 2016 David Tardon - 2.3-13 +- rebuild for ICU 57.1 + +* Thu Apr 07 2016 Milan Crha - 2.3-12 +- Add patch to fix connection string for samba +- Add patch to be able to build with flex 2.6.0 + +* Tue Feb 09 2016 Milan Crha - 2.3-11 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild +- Add patch to build against new samba + +* Mon Jan 18 2016 Milan Crha - 2.3-10 +- Rebuild against newer libical + +* Thu Dec 03 2015 Milan Crha - 2.3-9 +- Do not depend on libsamba-debug private library + +* Mon Oct 26 2015 Milan Crha - 2.3-8 +- Rebuild against newer samba + +* Mon Sep 14 2015 Milan Crha - 2.3-7 +- Rebuild against newer samba + +* Mon Sep 07 2015 Milan Crha - 2.3-6 +- Rebuild against newer samba + +* Tue Sep 01 2015 Milan Crha - 2.3-5 +- Rebuild against newer samba + +* Mon Jul 20 2015 Milan Crha - 2.3-4 +- Rebuild against newer samba + +* Wed Jun 17 2015 Fedora Release Engineering - 2.3-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Fri Jun 05 2015 Milan Crha - 2.3-2 +- Rebuild against newer samba + +* Mon May 18 2015 Milan Crha - 2.3-1 +- Update to 2.3 + +* Thu Apr 23 2015 Milan Crha - 2.2-6 +- Rebuild against newer samba + +* Tue Apr 07 2015 Milan Crha - 2.2-5 +- Rebuild against newer samba with a patch for samba 4.2.0 update + +* Tue Jan 27 2015 Dan HorĂ¡k - 2.2-4 +- Rebuild again for newer samba to workaround samba-4.2.0-0.1.rc3.fc22 < samba-4.2.0-0.2.rc2.fc22 situation in secondary koji + +* Tue Jan 06 2015 Milan Crha - 2.2-3 +- Rebuild against newer samba + +* Mon Nov 24 2014 Milan Crha - 2.2-2 +- Add a patch to be able to build against samba 4.2.0-rc2 + +* Thu Aug 21 2014 Matthew Barnes - 2.2-1 +- Update to OpenChange 2.2 + +* Sun Aug 17 2014 Fedora Release Engineering - 2.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Sat Jun 07 2014 Fedora Release Engineering - 2.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Mon Apr 28 2014 Milan Crha - 2.1-1 +- Update to OpenChange 2.1 + +* Thu Nov 21 2013 Milan Crha - 2.0-6 +- Rebuild for new libical (RH bug #1023020) + +* Mon Nov 11 2013 Milan Crha - 2.0-5 +- Add patch for RH bug #1028698 (Symbol collision with NSS) + +* Thu Sep 19 2013 Milan Crha - 2.0-4 +- Add patch to fix multilib issue in libmapi/version.h +- Move devel-docs subpackage to noarch + +* Sat Aug 03 2013 Fedora Release Engineering - 2.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Fri May 24 2013 Rex Dieter 2.0-2 +- rebuild (libical) + +* Thu Feb 14 2013 Milan Crha - 2.0-1 +- Update to OpenChange 2.0 + +* Thu Feb 14 2013 Fedora Release Engineering - 1.0-13 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Fri Oct 26 2012 Milan Crha - 1.0-12 +- Add patch for Gnome bug #682449 (WriteStream fails) + +* Mon Aug 06 2012 Milan Crha - 1.0-11 +- Add patch for Red Hat bug #845618 (incorrect symbol resolution) + +* Thu Jul 26 2012 Milan Crha - 1.0-10 +- Remove check_fasttransfer from openchange-client, if not building server package + +* Fri Jul 20 2012 Fedora Release Engineering - 1.0-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Tue Jul 10 2012 Milan Crha - 1.0-8 +- Add patch for OpenChange bug #397 (crash under MAPIUninitialize) +- Disable build of python and mapiproxy + +* Fri Jun 01 2012 Milan Crha - 1.0-7 +- Add patch to use system's popt.h +- Add patch to compile only certain parts of the package +- Disable openchange-server for rawhide too (due to samba4 changes) + +* Thu May 17 2012 Matthew Barnes -1.0-6 +- Do not build openchange-server in RHEL. + (And make disabling the subpackage actually work.) + +* Wed May 02 2012 Milan Crha - 1.0-5 +- Do not include nagios/check_exchange in RHEL + +* Tue Apr 24 2012 Milan Crha - 1.0-4 +- Bump samba4 dependency + +* Thu Apr 19 2012 Matthew Barnes - 1.0-3 +- Add BR: libical-devel (RH bug #803640). + +* Wed Apr 18 2012 Milan Crha - 1.0-2 +- Bump samba4 dependency + +* Tue Apr 03 2012 Milan Crha - 1.0-1 +- Update to 1.0 +- Enable packages for server part and python bindings +- Skip man3 pages, which are generated incomplete (use devhelp instead) + +* Fri Jan 13 2012 Fedora Release Engineering - 0.11-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Tue Aug 30 2011 Milan Crha - 0.11-3 +- Fix package version number + +* Mon Aug 29 2011 Stephen Gallagher - 0.11-2.1 +- Rebuild against fixed libtevent version + +* Mon Aug 29 2011 Milan Crha - 0.11-2 +- Sync version and changes with Fedora 16 package + +* Thu Aug 11 2011 Milan Crha - 0.11-1 +- Update to OpenChange 0.11 Transporter upstream release +- Remove unnecessary build modification patches. +- Add patch to not use mapi_ctx->session as a TALLOC_CTX (OpenChange issue #366) +- Add patch to read/write PidNameKeywords (OpenChange issue #367) + +* Wed Apr 6 2011 Matthew Barnes - 0.10.9-4 +- OpenChange relies on a private Samba 4 library (libsamba-util-common). + Add extra linker flags to libmapi.pc to compensate. + +* Wed Apr 6 2011 Matthew Barnes - 0.10.9-3 +- Move libmapiproxy.so, libmapistore.so and mapistore backend libraries + to the main package so the client subpackage is installable. + +* Fri Mar 25 2011 Simo Sorce - 0.10.9-2 +- New snapshot that avoid bison issues. +- Also add patch that fix build (previously erroneously preapplied in the + snapshot tarball) +- Fix timestamps in tarball +- Fix specfile's install and files section to cope with newer version changes + +* Fri Mar 25 2011 Simo Sorce - 0.10.9-1 +- Upgrade to a 0.11 development snapshot. +- Required by the new samba4 packages. + +* Mon Feb 21 2011 Milan Crha - 0.9-14 +- Rebuild against newer libldb + +* Tue Feb 08 2011 Fedora Release Engineering - 0.9-13 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Wed Feb 02 2011 Milan Crha - 0.9-12 +- Add patch for message sending, found by Gianluca Cecchi (RH bug #674034) + +* Thu Dec 16 2010 Matthew Barnes - 0.9-11 +- Re-fix man-pages file conflict (RH bug #654729). + +* Thu Dec 02 2010 Milan Crha - 0.9-10 +- Add patch for talloc abort in FindGoodServer, found by Jeff Raber (RH bug #602661) + +* Wed Sep 29 2010 jkeating - 0.9-9 +- Rebuilt for gcc bug 634757 + +* Mon Sep 13 2010 Matthew Barnes - 0.9-8 +- Backport unicode and properties support (RH bug #605364). + +* Wed Jul 21 2010 David Malcolm - 0.9-7 +- Rebuilt for https://fedoraproject.org/wiki/Features/Python_2.7/MassRebuild + +* Thu Jun 24 2010 Matthew Barnes - 0.9-6 +- Disable python and server subpackages until they're needed. + +* Wed Jun 23 2010 Matthew Barnes - 0.9-5 +- More spec file cleanups. + +* Fri Jun 18 2010 Matthew Barnes - 0.9-4 +- Spec file cleanups. + +* Mon May 24 2010 Matthew Barnes - 0.9-3 +- Avoid a file conflict with man-pages package. + +* Sat Jan 09 2010 Matthew Barnes - 0.9-2 +- Add a devel-docs subpackage (RH bug #552984). + +* Sat Dec 26 2009 Matthew Barnes - 0.9-1 +- Update to 0.9 (COCHRANE) +- Bump samba4 requirement to alpha10. + +* Wed Sep 23 2009 Matthew Barnes - 0.8.2-5 +- Rebuild. + +* Sat Jul 25 2009 Fedora Release Engineering - 0.8.2-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Mon Jun 29 2009 Matthew Barnes - 0.8.2-3 +- Rename libmapi so as not to conflict with Zarafa (RH bug #505783). + +* Thu May 07 2009 Matthew Barnes - 0.8.2-2 +- Do not own the pkgconfig directory (RH bug #499655). + +* Tue Mar 31 2009 Matthew Barnes - 0.8.2-1 +- Update to 0.8.2 +- Add a server subpackage. +- Add BuildRequires: sqlite-devel (for server) + +* Sun Mar 08 2009 Matthew Barnes - 0.8-6 +- Fix build breakage. +- Explicitly require libldb-devel. +- Bump samba4 requirement to alpha7. + +* Wed Feb 25 2009 Matthew Barnes - 0.8-5 +- Rebuild with correct tarball. + +* Wed Feb 25 2009 Matthew Barnes - 0.8-4 +- Formal package review cleanups. + +* Wed Feb 25 2009 Matthew Barnes - 0.8-3 +- Add documentation files. + +* Thu Feb 19 2009 Matthew Barnes - 0.8-2 +- Add some missing build requirements. + +* Tue Jan 20 2009 Matthew Barnes - 0.8-1 +- Update to 0.8 (ROMULUS) + +* Sat Jan 17 2009 Matthew Barnes - 0.8-0.7.svn949 +- Add missing BuildRequires: zlib-devel + +* Sat Dec 27 2008 Matthew Barnes - 0.8-0.6.svn949 +- Update to SVN revision 949. + +* Mon Dec 15 2008 Matthew Barnes - 0.8-0.5.svn909 +- Package review feedback (RH bug #453395). + +* Fri Dec 12 2008 Matthew Barnes - 0.8-0.4.svn909 +- Update to SVN revision 909. +- Bump the samba4 requirement. + +* Fri Aug 29 2008 Andrew Bartlett - 0:0.8-0.3.svn960.fc9 +- Bump version +- Don't make the Samba4 version distro-dependent + +* Sat Jul 26 2008 Brad Hards - 0:0.8-0.2.svnr674.fc10 +- Bump version +- Install documentation / man pages correctly +- Remove epoch (per https://bugzilla.redhat.com/show_bug.cgi?id=453395) +- Remove %%post and %%postun (per https://bugzilla.redhat.com/show_bug.cgi?id=453395) +- Remove talloc dependency (per https://bugzilla.redhat.com/show_bug.cgi?id=453395) +- Take out libmapiproxy, because we aren't up to server side yet. + +* Sat Jul 12 2008 Andrew Bartlett - 0:0.7-0.2.svnr627.fc9 +- Add popt-devel BR + +* Mon Jun 30 2008 Andrew Bartlett - 0:0.7-0.1.svnr627.fc9 +- Initial package of OpenChange for Fedora