rpms/zarafa/F-12 zarafa-6.30.10-chmod.patch, NONE, 1.1 zarafa-6.30.10-undefined-symbol.patch, NONE, 1.1 zarafa-6.30.4-brodowski.patch, NONE, 1.1 zarafa-6.30.4-package.patch, NONE, 1.1 zarafa-6.30.4-perl.patch, NONE, 1.1 zarafa.ini, NONE, 1.1 zarafa.spec, NONE, 1.1 .cvsignore, 1.1, 1.2 sources, 1.1, 1.2

Robert Scheck robert at fedoraproject.org
Mon Feb 8 14:21:32 UTC 2010


Author: robert

Update of /cvs/pkgs/rpms/zarafa/F-12
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv26231/F-12

Modified Files:
	.cvsignore sources 
Added Files:
	zarafa-6.30.10-chmod.patch 
	zarafa-6.30.10-undefined-symbol.patch 
	zarafa-6.30.4-brodowski.patch zarafa-6.30.4-package.patch 
	zarafa-6.30.4-perl.patch zarafa.ini zarafa.spec 
Log Message:
Initial import of Zarafa into Fedora and EPEL


zarafa-6.30.10-chmod.patch:
 ECSoapServerConnection.cpp |    1 +
 1 file changed, 1 insertion(+)

--- NEW FILE zarafa-6.30.10-chmod.patch ---
Patch by Robert Scheck <robert at fedoraproject.org> for zarafa >= 6.30.10, which adds a missing include for
the later in the code used chmod() command. Without this include, building on Fedora 13 fails.

--- zarafa-6.30.10/provider/server/ECSoapServerConnection.cpp		2010-01-26 17:34:51.000000000 +0100
+++ zarafa-6.30.10/provider/server/ECSoapServerConnection.cpp.chmod	2010-02-06 12:36:22.000000000 +0100
@@ -51,6 +51,7 @@
 
 #include "ECLogger.h"
 
+#include <sys/stat.h>
 #ifdef HAVE_SYS_UN_H
 #include <sys/un.h>
 #endif

zarafa-6.30.10-undefined-symbol.patch:
 Makefile.am  |    4 +++-
 m4lguids.cpp |    4 +++-
 2 files changed, 6 insertions(+), 2 deletions(-)

--- NEW FILE zarafa-6.30.10-undefined-symbol.patch ---
diff -ur zarafa-6.30.10.orig/mapi4linux/src/m4lguids.cpp zarafa-6.30.10/mapi4linux/src/m4lguids.cpp
--- zarafa-6.30.10.orig/mapi4linux/src/m4lguids.cpp	2010-01-26 17:34:48.000000000 +0100
+++ zarafa-6.30.10/mapi4linux/src/m4lguids.cpp	2010-02-04 09:53:48.459239670 +0100
@@ -48,6 +48,7 @@
  */
 
 #include "platform.h"
+/*#ifndef WINCE
 #define USES_IID_IUnknown
 #define USES_IID_IStream
 #define USES_IID_ISequentialStream
@@ -60,7 +61,8 @@
 #define USES_IID_IMAPIProp
 #define USES_IID_IMAPIFolder
 #define USES_IID_IMAPITable
+#endif
 #include <initguid.h>
-
+*/
 #include "mapiguid.h"
 #include "m4l.mapiutil.h"
diff -ur zarafa-6.30.10.orig/mapi4linux/src/Makefile.am zarafa-6.30.10/mapi4linux/src/Makefile.am
--- zarafa-6.30.10.orig/mapi4linux/src/Makefile.am	2010-01-26 12:05:22.000000000 +0100
+++ zarafa-6.30.10/mapi4linux/src/Makefile.am	2010-02-04 09:51:39.285239878 +0100
@@ -3,7 +3,9 @@
 AM_CPPFLAGS = $(DEBUGFLAGS) -DLINUX -I$(top_srcdir)/mapi4linux/include -I$(top_srcdir)/provider/common -I${top_srcdir}/common -I${top_srcdir}/libfreebusy
 AM_LDFLAGS = $(DL_LIBS) -export-symbols ${top_srcdir}/mapi4linux/src/mapi-exports.sym
 
-libmapi_la_LIBADD = ${top_builddir}/common/libcommon_util.la
+libmapi_la_LIBADD = ${top_builddir}/common/libcommon_util.la \
+                                       ${top_builddir}/common/libcommon_mapi.la \
+                                       $(PROG_LIBS)
 
 # required because we're exporting extern "C" functions and want to filter with 'export-symbols'
 CXXLD=--tag=none gcc

zarafa-6.30.4-brodowski.patch:
 mapi/class.autoarchivesettings.php          |  218 +++++++++++++++
 mapi/class.linkedappointment.php            |  393 ++++++++++++++++++++++++++++
 mapi/class.recurrence.php                   |   29 +-
 mapi/mapiguid.php                           |    3 
 mapi/mapitags.php                           |   34 ++
 zarafa-6.30.4/php-ext/Makefile.am.brodowski |    2 
 6 files changed, 670 insertions(+), 9 deletions(-)

--- NEW FILE zarafa-6.30.4-brodowski.patch ---
diff -ruN /usr/src/zarafa/zarafa-6.30.4.17264/php-ext/include/mapi/class.autoarchivesettings.php mapi/class.autoarchivesettings.php
--- /usr/src/zarafa/zarafa-6.30.4.17264/php-ext/include/mapi/class.autoarchivesettings.php	Thu Jan  1 01:00:00 1970
+++ mapi/class.autoarchivesettings.php	Sat Aug  8 11:49:05 2009
@@ -0,0 +1,218 @@
+<?php
+/*
+ * Copyright 2005 - 2009  Zarafa B.V.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3, 
+ * as published by the Free Software Foundation with the following additional 
+ * term according to sec. 7:
+ * 
+ * "Zarafa" is a registered trademark of Zarafa B.V. The licensing of the Program
+ * under the AGPL does not imply a trademark license. Therefore any rights,
+ * title and interest in our trademarks remain entirely with us.
+ * However, if you propagate an unmodified version of the Program you are 
+ * required to use the term "Zarafa" to indicate that you distribute the 
+ * Program. Furthermore you may use our trademarks where it is necessary to 
+ * indicate the intended purpose of a product or service provided you use it in 
+ * accordance with honest practices in industrial or commercial matters.
+ * If you want to propagate modified versions of the Program under the name
+ * "Zarafa" or "Zarafa Server", you may only do so if you have a written
+ * permission by Zarafa B.V. (to acquire a permission please contact Zarafa at
+ * trademark at zarafa.com).
+ * The user interface of the software displays a attribution notice containing
+ * the term "Zarafa" and/or the Logo of Zarafa. You have to preserve these
+ * attribution notices when you propagate unmodified or modified versions of
+ * the Program.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ * 
+ */
+
+?>
+<?php
+
+include_once('mapi.util.php');
+include_once('mapidefs.php');
+include_once('mapitags.php');
+
+/**
+ * AutoArchiveSettings 
+ * @author Andreas Brodowski <andreas at brodowski.org>
+ */
+
+class AutoArchiveSettings {
+
+	var $session;
+	var $store;
+	var $folder;
+	var $proptags;
+    
+	function agingproperties() {
+		$properties = array();
+		$properties["entryid"] = PR_ENTRYID;
+		$properties["parent_entryid"] = PR_PARENT_ENTRYID;
+		$properties["message_class"] = PR_MESSAGE_CLASS;
+		$properties["icon_index"] = PR_ICON_INDEX;
+		$properties["display_to"] = PR_DISPLAY_TO;
+		$properties["display_cc"] = PR_DISPLAY_CC;
+		$properties["subject"] = PR_SUBJECT;
+		$properties["importance"] = PR_IMPORTANCE;
+		$properties["sent_representing_name"] = PR_SENT_REPRESENTING_NAME;
+		$properties["sent_representing_email_address"] = PR_SENT_REPRESENTING_EMAIL_ADDRESS;
+		$properties["sent_representing_addrtype"] = PR_SENT_REPRESENTING_ADDRTYPE;
+		$properties["sent_representing_entryid"] = PR_SENT_REPRESENTING_ENTRYID;
+		$properties["sender_email_address"] = PR_SENDER_EMAIL_ADDRESS;
+		$properties["sender_name"] = PR_SENDER_NAME;
+		$properties["received_by_name"] = PR_RECEIVED_BY_NAME;
+		$properties["received_by_email_address"] = PR_RECEIVED_BY_EMAIL_ADDRESS;
+		$properties["message_delivery_time"] = PR_MESSAGE_DELIVERY_TIME;
+		$properties["last_modification_time"] = PR_LAST_MODIFICATION_TIME;
+		$properties["last_verb_executed"] = PR_LAST_VERB_EXECUTED;
+		$properties["last_verb_execution_time"] = PR_LAST_VERB_EXECUTION_TIME;
+		$properties["hasattach"] = PR_HASATTACH;
+		$properties["message_size"] = PR_MESSAGE_SIZE;
+		$properties["message_flags"] = PR_MESSAGE_FLAGS;
+		$properties["flag_status"] = PR_FLAG_STATUS;
+		$properties["flag_complete_time"] = PR_FLAG_COMPLETE_TIME;
+		$properties["flag_icon"] = PR_FLAG_ICON;
+		$properties["reminder_time"] = "PT_SYSTIME:PSETID_Common:0x8502";
+		$properties["reminder_set"] = "PT_BOOLEAN:PSETID_Common:0x8503";
+		$properties["flag_request"] = "PT_STRING8:PSETID_Common:0x8530";
+		$properties["flag_due_by"] = "PT_SYSTIME:PSETID_Common:0x8560";
+		$properties["reply_requested"] = PR_REPLY_REQUESTED;
+		$properties["reply_time"] = PR_REPLY_TIME;
+		$properties["response_requested"] = PR_RESPONSE_REQUESTED;
+		$properties["client_submit_time"] = PR_CLIENT_SUBMIT_TIME;
+		$properties["sensitivity"] = PR_SENSITIVITY;
+		$properties["read_receipt_requested"] = PR_READ_RECEIPT_REQUESTED;
+		$properties["location"] = "PT_STRING8:PSETID_Appointment:0x8208";
+		$properties["categories"] = "PT_MV_STRING8:PS_PUBLIC_STRINGS:Keywords";
+		$properties["transport_message_headers"] = PR_TRANSPORT_MESSAGE_HEADERS;
+		$properties["contacts"] = "PT_MV_STRING8:PSETID_Common:0x853A";
+		$properties["contacts_string"] = "PT_STRING8:PSETID_Common:0x8586";
+
+		$properties["aging_period"] = PR_AGING_PERIOD; // max 3 digits
+		$properties["aging_granularity"] = PR_AGING_GRANULARITY; // 0=month, 1=weeks, 2=days
+		$properties["aging_filename"] = PR_AGING_FILENAME;
+		$properties["aging_age_folder"] = PR_AGING_AGE_FOLDER;
+		$properties["aging_deleted_items"] = PR_AGING_DELETE_ITEMS;
+		$properties["aging_dont_age_me"] = PR_AGING_DONT_AGE_ME;
+		$properties["aging_file_name_after9"] = PR_AGING_FILE_NAME_AFTER9;
+		$properties["aging_when_deleted_on_server"] = PR_AGING_WHEN_DELETED_ON_SERVER;
+		$properties["aging_wait_until_expired"] = PR_AGING_WAIT_UNTIL_EXPIRED;
+		$properties["aging_version"] = PR_AGING_VERSION;
+		$properties["aging_default"] = PR_AGING_DEFAULT;
+	
+		$properties["deleted_on"] = PR_DELETED_ON;
+		$properties["updatecounter"] = "PT_LONG:PSETID_Appointment:0x8201";
+		$properties["hideattachments"] = "PT_BOOLEAN:PSETID_Common:0x8514";
+
+		return $properties;
+	}
+
+	/**
+	 * Constuctor
+	 *
+	 * @param mapi_session $session MAPI Session
+	 * @param mapi_folder $folder Folder to use for AutoArchive Settings retrival
+	 */	 
+	 
+	function retrieveSettings($session, $store, $folder, $properties = NULL)
+	{
+		if ($properties == NULL) {
+			$properties = $this->agingproperties();
+		};
+		
+		$this->proptags = getPropIdsFromStrings($store, $properties);
+	
+		$this->session = $session;
+		$this->store = $store;
+		$this->folder = $folder;
+
+		$msg = $this->getMessage();
+		
+		$props = mapi_getprops($msg,$this->proptags);
+
+		$data = $props;
+
+		return $data;
+	}
+
+	function getMessage() {
+	        $table = mapi_folder_getcontentstable($this->folder, MAPI_ASSOCIATED);
+		mapi_table_sort($table, array(PR_RECEIPT_TIME => TABLE_SORT_ASCEND));
+	        $restriction =  array ( RES_PROPERTY, 
+    	    				array ( RELOP => RELOP_EQ,
+    					        ULPROPTAG => PR_MESSAGE_CLASS,
+						VALUE => array (PR_MESSAGE_CLASS => "IPC.MS.Outlook.AgingProperties")
+					)
+				);
+		$msgs = mapi_table_queryallrows($table,array(PR_ENTRYID),$restriction);
+		if (isset($msgs[0][PR_ENTRYID])) {
+    		    $msg = mapi_msgstore_openentry($this->store,$msgs[0][PR_ENTRYID]);
+	        } else {
+	    	    $this->createMessage();
+	    	    $msg = $this->getMessage();
+	        }
+	        return $msg;
+	}
+	
+	function updateSettings($session, $store, $folder, $uprops) {
+		$properties = $this->agingproperties();
+	
+		$this->session = $session;
+		$this->store = $store;
+		$this->folder = $folder;
+
+		$msg = $this->getMessage();
+		
+		$write_props = array();
+		
+		if (isset($uprops["aging_period"])) 		$write_props[$properties["aging_period"]] 		= $uprops["aging_period"]; 
+		if (isset($uprops["aging_granularity"])) 	$write_props[$properties["aging_granularity"]] 		= $uprops["aging_granularity"]; 
+		if (isset($uprops["aging_age_folder"])) 	$write_props[$properties["aging_age_folder"]] 		= $uprops["aging_age_folder"]; 
+		if (isset($uprops["aging_deleted_items"])) 	$write_props[$properties["aging_deleted_items"]] 	= $uprops["aging_deleted_items"]; 
+		if (isset($uprops["aging_filename"])) 		$write_props[$properties["aging_filename"]] 		= $uprops["aging_filename"]; 
+		if (isset($uprops["aging_file_name_after9"])) 	$write_props[$properties["aging_file_name_after9"]] 	= $uprops["aging_file_name_after9"]; 
+		if (isset($uprops["aging_version"])) 		$write_props[$properties["aging_version"]] 		= $uprops["aging_version"]; 
+		if (isset($uprops["aging_default"])) 		$write_props[$properties["aging_default"]] 		= $uprops["aging_default"]; 
+		
+		mapi_setprops($msg,$write_props);	
+		
+		mapi_savechanges($msg);
+		
+	}
+	
+	function createMessage() {
+	
+		$properties = $this->agingproperties();
+		
+		$write_props = array(	$properties["message_class"] 		=> "IPC.MS.Outlook.AgingProperties",
+        				$properties["display_to"]	 	=> NULL,
+        				$properties["display_cc"] 		=> NULL,
+					$properties["aging_period"] 		=> "3",
+					$properties["aging_granularity"] 	=> "0",
+					$properties["aging_age_folder"] 	=> "0",
+					$properties["aging_deleted_items"]	=> "0",
+					$properties["aging_filename"] 		=> "",
+					$properties["aging_file_name_after9"]	=> "",
+					$properties["aging_version"] 		=> "2",
+					$properties["aging_default"] 		=> "0"
+				    );
+					
+    		$msg = mapi_folder_createmessage($this->folder,MAPI_ASSOCIATED);
+
+		mapi_setprops($msg,$write_props);	
+		
+		mapi_savechanges($msg);
+
+	}
+
+}
+?>
diff -ruN /usr/src/zarafa/zarafa-6.30.4.17264/php-ext/include/mapi/class.linkedappointment.php mapi/class.linkedappointment.php
--- /usr/src/zarafa/zarafa-6.30.4.17264/php-ext/include/mapi/class.linkedappointment.php	Thu Jan  1 01:00:00 1970
+++ mapi/class.linkedappointment.php	Fri Aug 14 11:16:18 2009
@@ -0,0 +1,393 @@
+<?php
+/*
+ * Copyright 2005 - 2009  Zarafa B.V.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3, 
+ * as published by the Free Software Foundation with the following additional 
+ * term according to sec. 7:
+ * 
+ * "Zarafa" is a registered trademark of Zarafa B.V. The licensing of the Program
+ * under the AGPL does not imply a trademark license. Therefore any rights,
+ * title and interest in our trademarks remain entirely with us.
+ * However, if you propagate an unmodified version of the Program you are 
+ * required to use the term "Zarafa" to indicate that you distribute the 
+ * Program. Furthermore you may use our trademarks where it is necessary to 
+ * indicate the intended purpose of a product or service provided you use it in 
+ * accordance with honest practices in industrial or commercial matters.
+ * If you want to propagate modified versions of the Program under the name
+ * "Zarafa" or "Zarafa Server", you may only do so if you have a written
+ * permission by Zarafa B.V. (to acquire a permission please contact Zarafa at
+ * trademark at zarafa.com).
+ * The user interface of the software displays a attribution notice containing
+ * the term "Zarafa" and/or the Logo of Zarafa. You have to preserve these
+ * attribution notices when you propagate unmodified or modified versions of
+ * the Program.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ * 
+ */
+?>
+<?php
+
+include_once('mapi.util.php');
+include_once('mapidefs.php');
+include_once('mapitags.php');
+include_once('class.recurrence.php');
+
+/**
+ * linkedAppointment 
+ * @author dw2412 Andreas Brodowski <andreas at brodowski.org>
+ */
+ 
+class linkedAppointment
+{
+
+		/**
+		 * @var object Mapi Message Store (may be null if readonly)
+		 */
+		var $_store;
+		
+	        var $_contactmapping = array (
+	    	        "fileas" => "PT_STRING8:{00062004-0000-0000-C000-000000000046}:0x8005",
+	    	        "birthday_event_entryid" => "PT_BINARY:{00062004-0000-0000-C000-000000000046}:0x804d",
+		        "anniversary_event_entryid" => "PT_BINARY:{00062004-0000-0000-C000-000000000046}:0x804e",
+		        "birthday" => PR_BIRTHDAY,
+	    	        "anniversary" => PR_WEDDING_ANNIVERSARY,
+		        "entryid" => PR_ENTRYID,
+		        "search_key" => PR_SEARCH_KEY
+	        );
+	        
+	        var $_appointmentmapping = array (
+                        "alldayevent" => "PT_BOOLEAN:{00062002-0000-0000-C000-000000000046}:0x8215",
+                        "body" => PR_BODY,
+                        "busystatus" => "PT_LONG:{00062002-0000-0000-C000-000000000046}:0x8205",
+                        "categories" => "PT_MV_STRING8:{00020329-0000-0000-C000-000000000046}:Keywords",
+                        "rtf" => PR_RTF_COMPRESSED,
+                        "dtstamp" => PR_LAST_MODIFICATION_TIME,
+                        "endtime" => "PT_SYSTIME:{00062002-0000-0000-C000-000000000046}:0x820e",
+                        "location" => "PT_STRING8:{00062002-0000-0000-C000-000000000046}:0x8208",
+                        "meetingstatus" => "PT_LONG:{00062002-0000-0000-C000-000000000046}:0x8217",
+                        "reminder" => "PT_LONG:{00062008-0000-0000-C000-000000000046}:0x8501",
+                        "sensitivity" => PR_SENSITIVITY,
+                        "subject" => PR_SUBJECT,
+                        "starttime" => "PT_SYSTIME:{00062002-0000-0000-C000-000000000046}:0x820d",
+                        "uid" => "PT_BINARY:{6ED8DA90-450B-101B-98DA-00AA003F1305}:0x3",
+			// Append the appointment attributes since we need them for appointment creation
+		    	"label" => "PT_LONG:{00062002-0000-0000-C000-000000000046}:0x8214",
+		    	"recurring" => "PT_BOOLEAN:{00062002-0000-0000-C000-000000000046}:0x8223",
+		    	"recurring_data" => "PT_BINARY:{00062002-0000-0000-C000-000000000046}:0x8216",
+			"recurring_pattern" => "PT_STRING8:{00062002-0000-0000-C000-000000000046}:0x8232",
+		    	"basedate" => "PT_SYSTIME:{00062002-0000-0000-C000-000000000046}:0x8228",
+		    	"icon_index" => PR_ICON_INDEX,
+		    	"entryid" => PR_ENTRYID,
+		    	"message_class" => PR_MESSAGE_CLASS,
+        	    	"parententryid" => PR_PARENT_ENTRYID,
+		    	"message_flags" => PR_MESSAGE_FLAGS,
+		    	"importance" => PR_IMPORTANCE,
+		    	// Append the common attributes since we need them for appointment creation
+		    	"contacts" => "PT_MV_STRING8:{00062008-0000-0000-C000-000000000046}:0x853a",
+		    	"contacts_string" => "PT_STRING8:{00062008-0000-0000-C000-000000000046}:0x8586",
+        	    	"commonstart" => "PT_SYSTIME:{00062008-0000-0000-C000-000000000046}:0x8516",
+        	    	"commonend" => "PT_SYSTIME:{00062008-0000-0000-C000-000000000046}:0x8517",
+        	    	"remindertime" => "PT_SYSTIME:{00062008-0000-0000-C000-000000000046}:0x8502",
+        	    	"duration" => "PT_LONG:{00062002-0000-0000-C000-000000000046}:0x8213",
+        	    	"reminder_minutes" => "PT_LONG:{00062008-0000-0000-C000-000000000046}:0x8501",
+        	    	"reminder" => "PT_BOOLEAN:{00062008-0000-0000-C000-000000000046}:0x8503",
+		    	"flagdueby" => "PT_SYSTIME:{00062008-0000-0000-C000-000000000046}:0x8560",
+		    	"lid_contact_link_search_key" => "PT_BINARY:{00062008-0000-0000-C000-000000000046}:0x8584",
+		    	"lid_contact_link_entryid" => "PT_BINARY:{00062008-0000-0000-C000-000000000046}:0x8585"
+                );
+	    
+		/**
+		 * Constructor
+		 * @param resource $store MAPI Message Store Object
+		 * @param resource $message the MAPI Source message
+		 */
+		function linkedAppointment($_store)
+		{
+		    $this->_store = $_store;
+		}
+
+	        function setLinkedContact($mapimessage) 
+	    	{
+		// get the linked contact (if any)
+		    // Set the appointment attributes
+		    $aprops = $this->_appointmentmapping;
+		    // Get the id's of the above...
+		    foreach ($aprops as $key => $value) {
+		        $aprops[$key] =  $this->GetPropIDFromString($this->_store, $value);
+		    }
+		    $appointment = mapi_getprops($mapimessage, $aprops);
+	            $recurrence = new Recurrence($this->_store, $mapimessage);
+		    $recur = $recurrence->getRecurrence();
+		    if (isset($appointment[$aprops["lid_contact_link_entryid"]])) {
+		        // we have a linked contact. so continue here, otherwise exit silently...
+		        $entryid = $this->_unpackContactLinkEntryIDS(bin2hex($appointment[$aprops["lid_contact_link_entryid"]]));
+		        // Set the contact attributes
+			$cprops = $this->_contactmapping;
+			// Get the id's of the above...
+			foreach ($cprops as $key => $value) {
+		    	    $cprops[$key] =  $this->GetPropIDFromString($this->_store, $value);
+			}
+		        foreach ($entryid as $value) {
+		    	    if (($contact_msg = mapi_msgstore_openentry($this->_store,$value))) {
+		    	        $contact = mapi_getprops($contact_msg, $cprops);
+		    	        switch ($appointment[$aprops["entryid"]]) {
+		    	            case $contact[$cprops["birthday_event_entryid"]]	:
+			    			if ($contact[$cprops["birthday"]] != $recur["start"]) {
+						    mapi_setprops($contact_msg,array($cprops["birthday"] => $recur["start"]));
+					    	    mapi_savechanges($contact_msg);
+						}
+						break;
+				    case $contact[$cprops["anniversary_event_entryid"]]	:
+						if ($contact[$cprops["anniversary"]] != $recur["start"]) {
+						    mapi_setprops($contact_msg,array($cprops["anniversary"] => $recur["start"]));
+					    	    mapi_savechanges($contact_msg);
+						}
+						break;
+				}
+			    }
+			}
+		    }
+		}
+	        // $what 0x01 = birthday 0x02 = anniversary
+		function setLinkedAppointment($mapimessage,$what) 
+		{
+		    // We love MS for this...
+		    $arrayMonth = array(0,44640,84960,129600,172800,217440,260640,305280,348480,393120,437760,480960);
+
+		    // Set the appointment attributes
+		    $aprops = $this->_appointmentmapping;
+		    // Get the id's of the above...
+		    foreach ($aprops as $key => $value) {
+		        $aprops[$key] =  $this->GetPropIDFromString($this->_store, $value);
+		    }
+	    
+		    // Set the contact attributes
+		    $cprops = $this->_contactmapping;
+		    // Get the id's of the above...
+		    foreach ($cprops as $key => $value) {
+			$cprops[$key] =  $this->GetPropIDFromString($this->_store, $value);
+		    }
+
+	    	    // Get the contact properties
+	    	    $contact = mapi_getprops($mapimessage,$cprops);
+	    
+	    	    // open root container, if not existing, leave this function...
+	    	    $rootcontainer = mapi_msgstore_openentry($this->_store);
+	    	    if ($rootcontainer) {
+	    		// find the appointment container, if this fails, leave this function since we cannot proceed...
+	    		if (($rootcontainerprops = mapi_getprops($rootcontainer, array(PR_IPM_APPOINTMENT_ENTRYID)))) {
+	    		    $parententryid = $rootcontainerprops[PR_IPM_APPOINTMENT_ENTRYID];
+	    
+	    		    $entryid = false;
+	    		    switch ($what) {
+	    			case 0x01	: if (isset($contact[$cprops["birthday_event_entryid"]])) 
+	    					      $entryid = $contact[$cprops["birthday_event_entryid"]];
+	    					  $entrydate = $contact[$cprops["birthday"]];
+	    					  $entryprop = $cprops["birthday_event_entryid"];
+	    					  $entrylabel = 8;
+	    					  $entrysubject = _("Birthday")." "._("of")." ".$contact[$cprops["fileas"]];
+	    					  break;
+	    			case 0x02	: if (isset($contact[$cprops["anniversary_event_entryid"]]))
+	    					     $entryid = $contact[$cprops["anniversary_event_entryid"]];
+	    					  $entrydate = $contact[$cprops["anniversary"]];
+	    					  $entryprop = $cprops["anniversary_event_entryid"];
+	    					  $entrylabel = 9;
+	    					  $entrysubject = _("Special Date")." "._("of")." ".$contact[$cprops["fileas"]];
+	    					  break;
+	    		    }
+	    
+	    		    if ($entrydate) {
+	    			// open if there is a linked appointment and it can be opened (no one deleted it by accident...)
+	        		// otherwise create it.
+	    			if ($entryid &&
+	    			    ($appointment_msg = mapi_msgstore_openentry($this->_store,$entryid))) {
+	    			    $appointment = mapi_getprops($appointment_msg);
+	    	    		} else {
+	    			    // create with base settings
+	    			    $folder = mapi_msgstore_openentry($this->_store,$parententryid);
+	    	    	    	    $appointment_msg = mapi_folder_createmessage($folder);
+	    	    		    $appointment = array($aprops["message_class"] => "IPM.Appointment",
+	    	    		    		         $aprops["location"] => "",
+	    	    				         $aprops["body"] => "",
+	    	    				         $aprops["busystatus"] => 0
+	    					        );
+	        	    	    mapi_setprops($appointment_msg,$appointment);
+	    	    		}
+	    			// Have the starttime im GMT
+	    	    		$starttime = gmmktime(0,0,0,
+	    	    		    		      date("m",$entrydate),
+	    	    				      date("j",$entrydate),
+	    	    				      date("Y",$entrydate));
+	    		        // Just update something in case changes occured to reduce amount
+	    		        // of sync activities...
+	    		      
+	    		        if ($entrydate != $appointment[$aprops["starttime"]] ||
+	    		    	    $entrysubject != $appointment[$aprops["subject"]]) {
+	    			    // Reset the subject in case the name has changed
+	        		    $appointment[$aprops["subject"]] = $entrysubject;
+	    		            // Set the label to 8 = birthday and 9 = anniversary
+	    			    $appointment[$aprops["label"]] = $entrylabel;
+	    			    // Instead of having rubbish inside...
+	            	    	    $appointment[$aprops["recurring_pattern"]] = "";
+	    		    	    // Setting the reminder values
+	    	    	    	    $appointment[$aprops["reminder"]] = true;
+	    	    	    	    $appointment[$aprops["reminder_minutes"]] = 15;
+	    	    	    	    $appointment[$aprops["remindertime"]] = $starttime-(15*60);
+	    		    	    // Setting start & Endtime
+	    	    	    	    $appointment[$aprops["starttime"]] = $starttime;
+	    	    	    	    $appointment[$aprops["endtime"]] = $starttime + 86400;
+	    		    	    // Set duration upon diff between start and endtime in minutes.
+	    	    	    	    $appointment[$aprops["duration"]] = ($appointment[$aprops["endtime"]] - $appointment[$aprops["starttime"]]) / 60;
+	    		    	    // Sure... birthdays and anniversaries occur on daily base :-)
+	    	    	    	    $appointment[$aprops["recurring"]] = true;
+	    	    	    	    $appointment[$aprops["alldayevent"]] = true;
+	    		    	    // Update the id's and search keys
+	    		    	    $appointment[$aprops["lid_contact_link_entryid"]] = hex2bin($this->_packContactLinkEntryIDS(array($contact[$cprops["entryid"]])));
+	    		    	    $appointment[$aprops["lid_contact_link_search_key"]] = hex2bin($this->_packContactLinkSearchKeys(array($contact[$cprops["search_key"]])));
+	    		    	    // Set the changed properties
+	        	    	    mapi_setprops($appointment_msg,$appointment);
+	        		    $recurrence = new Recurrence($this->_store, $appointment_msg);
+	    		    	    $tz = array();
+	    		    	    $tz["timezone"] = (($entrydate-$starttime)/3600)*60;
+	    		    	    $tz["timezonedst"] = 0; 
+	    		    	    $tz["dstendmonth"] = 0;
+	    		    	    $tz["dstendweek"] = 0;
+	    		    	    $tz["dstendhour"] = 0;
+	    		    	    $tz["dststartmonth"] = 0;
+	    		    	    $tz["dststartweek"] = 0;
+	    		    	    $tz["dststarthour"] = 0;
+	    		    	    // Set the iconindex to be recurring
+	    	    	    	    $appointment[$aprops["icon_index"]] = 1025;
+	    		    	    // Set the changed properties
+	    		    	    $appointment = mapi_setprops($appointment_msg,$appointment);
+	    		    	    // Recurring values
+	                            $recur["type"] = 13;
+	                            $recur["subtype"] = 2;
+	    	    	    	    $recur["month"] = $arrayMonth[gmdate("m",$starttime)-1];
+	                            $recur["everyn"] = 12;
+	    		    	    $recur["regen"] = 1;
+	    	    	    	    $recur["monthday"] = gmdate("j",$starttime);
+	    	            	    $recur["term"] = 0x23;
+	    		    	    $recur["numoccur"] = 0;
+	        		    $recur["start"] = $starttime;
+	    		    	    $recur["end"] = 79870662000; // no end
+	                            $recur["startocc"] = 0;
+	                            $recur["endocc"] = 1440;
+	    		    	    // Let class.recurrence do its job.
+	        	    	    $recurrence->setRecurrence($tz, $recur);
+	    		    	    // Save the changes to message
+	    		    	    mapi_savechanges($appointment_msg);
+	    		    	    $appointment = mapi_getprops($appointment_msg);
+	    		    	    mapi_setprops($mapimessage,array($entryprop => $appointment[$aprops['entryid']]));
+	    		    	    mapi_savechanges($mapimessage);
+	        		}    
+	        	    }
+	    		}
+	    	    }
+	        }
+    		/**
+    		* unpacks the Contact Link Entry IDs
+		*
+		* @param string in hex with the value
+		* @return array with all binary Contact Link Entry IDS
+		*
+		*/
+		function _unpackContactLinkEntryIDS($value) 
+		{
+		    $contact_link_entry_ids = unpack("Vcount",hex2bin(substr($value,0,8)));
+		    $contact_link_entry_ids["entry_ids"] = array();
+		    $length=8;
+		    for ($j=0,$i=8;$j<$contact_link_entry_ids["count"];$j++,$i=$i+$length+8) {
+			$l = unpack("Vlength",hex2bin(substr($value,$i,8)));
+			$length=$l["length"];
+			$temp = unpack ("VFlags/A16ProviderUID/VVersion/VType/VIndext/Vcbid/A*abeid",hex2bin(substr($value,$i+8,($length*2))));
+			$temp["abeid"] = hex2bin(substr(bin2hex($temp["abeid"]),0,$temp["cbid"]*2));
+			$contact_link_entry_ids["entry_ids"][]=$temp["abeid"];
+		    }
+		    return $contact_link_entry_ids["entry_ids"];
+		}
+		
+		/**
+		 * packs the Contact Link Entry IDs
+		 *
+		 * @param array with all binary Contact Link Entry IDs
+		 * @return string in hex with the value
+		 *
+		 */
+		function _packContactLinkEntryIDS($values) {
+		    $temp="";
+		    for ($i=0;$i<sizeof($values);$i++) {
+		        $temp .= pack("V",0).makeguid("{0aaa42fe-c718-101a-e885-0b651c240000}").pack("VVVV",3,4,0,(strlen(bin2hex($values[$i]))/2)).$values[$i];
+		    }
+		    $temp = bin2hex(pack("VV",sizeof($values),(strlen(bin2hex($temp))/2)).$temp);
+		    return $temp;
+		}
+		
+		/**
+		 * unpacks the Contact Link Search key
+		 *
+		 * @param string in hex with the value
+		 * @return array with all binary Contact Link Search Keys
+		 *
+		 */
+		function _unpackContactLinkSearchKeys($value) {
+		    $contact_link_search_keys = unpack("Vcount/Vlength",hex2bin(substr($value,0,16)));
+		    $contact_link_search_keys["skeys"] = array();
+		    $length=0;
+		    for ($i=16,$j=0;$i-16<($contact_link_search_keys["length"]*2) && $j<$contact_link_search_keys["count"];$i=$i+($length*2)+8,$j++) {
+		        $l = unpack("Vlength",hex2bin(substr($value,$i,8)));
+		        $length=$l["length"];
+		        $contact_link_search_keys["skeys"][] = hex2bin(substr($value,$i+8,($length*2)));
+		    };
+		    return $contact_link_search_keys["skeys"];
+		}
+		
+		/**
+		 * packs the Contact Link Search key
+		 *
+		 * @param array with all binary Contact Link Search Keys
+		 * @return string in hex with the value
+		 *
+		 */
+		function _packContactLinkSearchKeys($values) {
+		    $temp="";
+		    for ($i=0;$i<sizeof($values);$i++) {
+		        $temp .= pack("V",strlen($values[$i])).$values[$i];
+		    }
+		    $temp = bin2hex(pack("VV",sizeof($values),strlen($temp)).$temp);
+		    return $temp;
+		}
+
+
+		function GetPropIDFromString($store, $mapiprop) {
+		    if(is_string($mapiprop)) {
+		        $split = explode(":", $mapiprop);
+		
+		        if(count($split) != 3)
+		            continue;
+		
+		        if(substr($split[2], 0, 2) == "0x") {
+		            $id = hexdec(substr($split[2], 2));
+		        } else
+		            $id = $split[2];
+		
+		        $named = mapi_getidsfromnames($store, array($id), array(makeguid($split[1])));
+		
+		        $mapiprop = mapi_prop_tag(constant($split[0]), mapi_prop_id($named[0]));
+		    } else {
+		        return $mapiprop;
+		    }
+		
+		    return $mapiprop;
+		}
+}
+?>
diff -ruN /usr/src/zarafa/zarafa-6.30.4.17264/php-ext/include/mapi/class.recurrence.php mapi/class.recurrence.php
--- /usr/src/zarafa/zarafa-6.30.4.17264/php-ext/include/mapi/class.recurrence.php	Fri Oct 16 21:05:22 2009
+++ mapi/class.recurrence.php	Tue Oct 20 19:29:54 2009
@@ -363,9 +363,13 @@
 		 * @param array $exception_props the exception properties (same properties as normal recurring items)
 		 * @param date $base_date the base date of the exception (actual GMT time of non-exception occurrence)
 		 * @param boolean $delete true - delete occurrence, false - create new exception or modify existing
+		 * @param boolean $islocal true - expect the base_date in local time (happens in case basedate is returned from WA!
 		 */
-		function createException($exception_props, $base_date, $delete = false)
+		function createException($exception_props, $base_date, $delete = false, $islocal=false)
 		{
+			// CHANGED dw2412 to support local base_date as delivered from WebAccess
+			if ($islocal == true) $base_date = $this->toGMT($this->tz, $base_date);
+			
 			$baseday = $this->dayStartOf($this->fromGMT($this->tz, $base_date));
 			$basetime = $baseday + $this->recur["startocc"] * 60;
 			
@@ -447,8 +451,10 @@
 		 * Modifies an existing exception, but only updates the given properties
 		 * NOTE: You can't remove properites from an exception, only add new ones
 		 */
-		function modifyException($exception_props, $base_date)
+		function modifyException($exception_props, $base_date, $islocal=false)
 		{
+		    // ADDED dw2412 to support local base_date as delivered from WebAccess
+		    if ($islocal == true) $base_date = $this->toGMT($this->tz, $base_date);
 		    if(!$this->isValidExceptionDate($base_date, $exception_props[$this->proptags["startdate"]]))
 		        return false;
 		        
@@ -573,13 +579,17 @@
 		
 		// Returns the start or end time of the occurrence on the given base date.
 		// This assumes that the basedate you supply is correct .. !
-		function getOccurrenceStart($basedate)  {
-			$daystart = $this->dayStartOf($this->fromGMT($this->tz, $basedate));
+		function getOccurrenceStart($basedate, $islocal = false)  {
+			// CHANGED dw2412 to support local base_date as delivered from WebAccess
+			if ($islocal == false) $daystart = $this->dayStartOf($this->fromGMT($this->tz, $basedate));
+			else $daystart = $this->dayStartOf($basedate);
 			return $this->toGMT($this->tz, $daystart + $this->recur["startocc"] * 60);
 		}
 		
-		function getOccurrenceEnd($basedate)  {
-			$daystart = $this->dayStartOf($this->fromGMT($this->tz, $basedate));
+		function getOccurrenceEnd($basedate, $islocal = false)  {
+			// CHANGED dw2412 to support local base_date as delivered from WebAccess
+			if ($islocal == false) $daystart = $this->dayStartOf($this->fromGMT($this->tz, $basedate));
+			else $daystart = $this->dayStartOf($basedate);
 			return $this->toGMT($this->tz, $daystart + $this->recur["endocc"] * 60);
 		}
 		
@@ -1229,8 +1239,12 @@
         /**
          * Returns the exception if there is a CHANGE exception on the given base date, or FALSE otherwise
          */
-        function getChangeException($basedate)
+        function getChangeException($basedate, $islocal)
         {
+	    // CHANGED dw2412 to support local base_date as delivered from WebAccess
+	    if ($islocal == true) $basedate = $this->toGMT($this->tz, $basedate);
+
+
             // Check if the occurrence is modified on the specified date
 			foreach($this->recur["changed_occurences"] as $changed)
 			{
@@ -1263,7 +1277,6 @@
 		function dayStartOf($date)
 		{
 		    $time1 = $this->gmtime($date);
-		    
 		    return gmmktime(0, 0, 0, $time1["tm_mon"] + 1, $time1["tm_mday"], $time1["tm_year"] + 1900);
 		}
 		
diff -ruN /usr/src/zarafa/zarafa-6.30.4.17264/php-ext/include/mapi/mapiguid.php mapi/mapiguid.php
--- /usr/src/zarafa/zarafa-6.30.4.17264/php-ext/include/mapi/mapiguid.php	Fri Oct 16 21:05:22 2009
+++ mapi/mapiguid.php	Tue Oct 20 19:29:54 2009
@@ -67,4 +67,7 @@
 define('PS_MAPI',                               makeguid("{00020328-0000-0000-C000-000000000046}"));
 define('PS_PUBLIC_STRINGS',                     makeguid("{00020329-0000-0000-C000-000000000046}"));
 define('PS_INTERNET_HEADERS',                   makeguid("{00020386-0000-0000-c000-000000000046}"));
+
+define('MAPIUID_LinkContactEntryID',		makeguid("{0aaa42fe-c718-101a-e885-0b651c240000}")); // http://msdn.microsoft.com/en-us/library/bb820924.aspx misc2 in CONTAB structure in Internet This parameter is reserved for Outlook internal use and is not supported.
+
 ?>
diff -ruN /usr/src/zarafa/zarafa-6.30.4.17264/php-ext/include/mapi/mapitags.php mapi/mapitags.php
--- /usr/src/zarafa/zarafa-6.30.4.17264/php-ext/include/mapi/mapitags.php	Fri Oct 16 21:05:22 2009
+++ mapi/mapitags.php	Tue Oct 20 19:29:54 2009
@@ -601,7 +601,25 @@
 define('PR_FINDER_ENTRYID'                            ,mapi_prop_tag(PT_BINARY,      0x35E7));
 define('PR_IPM_FAVORITES_ENTRYID'                     ,mapi_prop_tag(PT_BINARY,      0x6630));
 define('PR_IPM_PUBLIC_FOLDERS_ENTRYID'                ,mapi_prop_tag(PT_BINARY,      0x6631));
+//* start: Added dw2412 source www.cdolive.com/cdo10.htm
+define('PR_HAS_RULES'				      ,mapi_prop_tag(PT_BINARY,	     0x663A));
 
+// Outlook AutoArchive Properties
+define('PR_AGING_PERIOD'			      ,mapi_prop_tag(PT_LONG,	     0x36EC));
+define('PR_AGING_GRANULARITY'			      ,mapi_prop_tag(PT_LONG,	     0x36EE));
+define('PR_AGING_FILENAME'			      ,mapi_prop_tag(PT_TSTRING,     0x6856));
+define('PR_AGING_AGE_FOLDER'			      ,mapi_prop_tag(PT_BOOLEAN,     0x6857));
+define('PR_AGING_DELETE_ITEMS'			      ,mapi_prop_tag(PT_BOOLEAN,     0x6855));
+define('PR_AGING_FILE_NAME_AFTER9'		      ,mapi_prop_tag(PT_TSTRING,     0x6859));
+define('PR_AGING_DONT_AGE_ME'			      ,mapi_prop_tag(PT_BOOLEAN,     0x6858));
+define('PR_AGING_WHEN_DELETED_ON_SERVER'	      ,mapi_prop_tag(PT_BOOLEAN,     0x685B));
+define('PR_AGING_WAIT_UNTIL_EXPIRED'		      ,mapi_prop_tag(PT_BOOLEAN,     0x685C));
+define('PR_AGING_VERSION'			      ,mapi_prop_tag(PT_LONG,	     0x685D));
+define('PR_AGING_DEFAULT'			      ,mapi_prop_tag(PT_LONG,	     0x685E));
+
+
+
+//* End  : added dw2412
 
 /* Proptags 0x35E8-0x35FF reserved for folders "guaranteed" by 'PR_VALID_FOLDER_MASK */
 
@@ -637,6 +655,19 @@
 define('PR_DEFAULT_VIEW_ENTRYID'                      ,mapi_prop_tag(PT_BINARY,      0x3616));
 define('PR_ASSOC_CONTENT_COUNT'                       ,mapi_prop_tag(PT_LONG,        0x3617));
 
+//* start: Added dw2412 source www.cdolive.com/cdo10.htm
+define('PR_DEF_FORM_ALLOWED'			      ,mapi_prop_tag(PT_LONG,	     0x3FE2));
+define('PR_PUBLISH_IN_ADDRESS_BOOK'		      ,mapi_prop_tag(PT_BOOLEAN,     0x3FE6));
+define('PR_WEBPAGE'				      ,mapi_prop_tag(PT_TSTRING,     0x36DF));
+define('PR_FOLDER_VIEWS_ONLY'			      ,mapi_prop_tag(PT_LONG,	     0x36E1));
+define('PR_DEF_MSG_CLASS'			      ,mapi_prop_tag(PT_TSTRING,     0x36E5));
+define('PR_DEF_FORM_NAME'			      ,mapi_prop_tag(PT_TSTRING,     0x36E6));
+define('PR_GENERATE_EXCHANGE_VIEWS'		      ,mapi_prop_tag(PT_BOOLEAN,     0x36E9));
+define('PR_VIEW_NAME'				      ,mapi_prop_tag(PT_TSTRING,     0x7006));
+define('PR_OFFLINE_FLAG'			      ,mapi_prop_tag(PT_LONG,        0x663D));
+define('PR_REPLICA_VERSION'			      ,mapi_prop_tag(PT_LONG,        0x664B));
+//* end  : Added dw2412
+
 define('PR_RIGHTS'                                    ,mapi_prop_tag(PT_LONG,        0x6639));
 
 /* Reserved 0x36C0-0x36FF */
@@ -1231,6 +1262,9 @@
 
 define('PR_PROCESSED', mapi_prop_tag(PT_BOOLEAN, 0x7D01));
 
+// ADDED dw2412 Contact Photo Attachment
+define('PR_ATTACHMENT_CONTACTPHOTO'			,mapi_prop_tag(PT_BOOLEAN,	0x7FFF));
+
 // Delegates properties 
 define('PR_DELEGATES_SEE_PRIVATE', mapi_prop_tag(PT_MV_LONG, 0x686B));
 define('PR_SCHDINFO_DELEGATE_ENTRYIDS', mapi_prop_tag(PT_MV_BINARY, 0x6845));
--- /usr/src/zarafa/zarafa-6.30.4.17264/php-ext/Makefile.am			2009-10-16 15:55:59.000000000 +0200
+++ zarafa-6.30.4/php-ext/Makefile.am.brodowski		2009-10-24 23:48:37.000000000 +0200
@@ -23,7 +23,7 @@
 # and be missing at runtime.
 # therefore, we explicitly link mapi.so with -lpthread :(
 
-dist_data_DATA = include/mapi/mapicode.php include/mapi/mapidefs.php include/mapi/mapitags.php include/mapi/mapi.util.php include/mapi/class.recurrence.php include/mapi/class.meetingrequest.php include/mapi/class.freebusypublish.php include/mapi/mapiguid.php
+dist_data_DATA = include/mapi/mapicode.php include/mapi/mapidefs.php include/mapi/mapitags.php include/mapi/mapi.util.php include/mapi/class.recurrence.php include/mapi/class.meetingrequest.php include/mapi/class.freebusypublish.php include/mapi/mapiguid.php include/mapi/class.autoarchivesettings.php include/mapi/class.linkedappointment.php
 datadir = ${datarootdir}/php/mapi
 
 mapi_la_SOURCES = main.cpp Session.cpp SessionPool.cpp util.cpp \

zarafa-6.30.4-package.patch:
 ECtools/Makefile.am |    4 ----
 Makefile.am         |    4 ----
 configure.ac        |   11 -----------
 3 files changed, 19 deletions(-)

--- NEW FILE zarafa-6.30.4-package.patch ---
Patch by Robert Scheck <robert at fedoraproject.org> for zarafa >= 6.30.4, which only
removes the paths from autoconf/automake related files, that don't exist in the OSS
version of Zarafa. Having these paths not removed causes autoreconf to fail, but a
re-run of autoreconf is needed in order to get the rpaths completely out of all the
libraries and binaries built during the make process.

--- zarafa-6.30.4/configure.ac			2009-03-17 17:30:45.000000000 +0100
+++ zarafa-6.30.4/configure.ac.fedora		2009-03-31 20:34:29.000000000 +0200
@@ -591,17 +591,6 @@
 		version
 		specialbuild
 ])
-dnl non-oss files
-if test -d `dirname $0`/licensed; then
-AC_CONFIG_FILES([
-		liblicense/Makefile
-		licensed/Makefile
-		ECtools/zarafa-backup/Makefile
-		ECtools/zarafa-backup/helpers/Makefile
-		ECtools/zarafa-report/Makefile
-		debian/zarafa.install
-])
-fi
 
 AC_OUTPUT
 
--- zarafa-6.30.4/ECtools/Makefile.am		2009-04-23 22:10:44.000000000 +0200
+++ zarafa-6.30.4/ECtools/Makefile.am.fedora	2009-04-25 21:20:43.000000000 +0200
@@ -1,7 +1,3 @@
-if ! OSS_ONLY
-PROSUBS = zarafa-backup zarafa-report
-endif
-
 if WITH_TESTTOOLS
 TESTSUBS = ECTestTools
 endif
--- zarafa-6.30.4/Makefile.am			2009-04-23 22:10:44.000000000 +0200
+++ zarafa-6.30.4/Makefile.am.fedora		2009-04-25 21:20:26.000000000 +0200
@@ -1,9 +1,5 @@
 AUTOMAKE_OPTIONS = 1.8 foreign
 
-if ! OSS_ONLY
-PROSUBS = liblicense licensed
-endif
-
 SUBDIRS = common libfreebusy mapi4linux $(PROSUBS) provider libicalmapi inetmapi php-ext spooler gateway caldav ECtools installer po doc
 
 if WITH_PERL

zarafa-6.30.4-perl.patch:
 configure.ac     |   16 ++++++++++++++++
 perl/Makefile.am |    5 ++---
 2 files changed, 18 insertions(+), 3 deletions(-)

--- NEW FILE zarafa-6.30.4-perl.patch ---
Patch by Robert Scheck <robert at fedoraproject.org> for Zarafa >= 6.30.3, which
replaces the hardcoded perl directories by correct ones (in a dynamic way). Only
Debian and Ubuntu have ExtUtils in /usr/share, openSUSE, Fedora and RHEL/CentOS
use /usr/lib. So let us use the correct way to detect the directory.

This patch should be an advantage to OSS users on non-Debian distributions when
using Perl API, as the correct directory will get picked up.

--- zarafa-6.30.0/configure.ac			2009-07-20 18:41:07.000000000 +0200
+++ zarafa-6.30.0/configure.ac.perl		2009-10-16 00:23:52.000000000 +0200
@@ -127,6 +127,22 @@
 # build perl stuff
 AC_ARG_ENABLE(perl, AC_HELP_STRING([--enable-perl], [enable building perl bindings]), [want_perl=${enableval}], [want_perl=no])
 AM_CONDITIONAL(WITH_PERL, test "$want_perl" = "yes")
+if test "x$want_perl" = "xyes"; then
+  AC_PATH_PROG([PERL], [perl], [no])
+  if test "x$PERL" = "xno"; then
+    AC_MSG_ERROR([perl is required for building perl bindings])
+  fi
+
+  AC_MSG_CHECKING([for perl installarchlib])
+  PERL_ARCHLIB=`$PERL -V:installarchlib | sed -e "s/^.*='//" -e "s/';$//"`
+  AC_MSG_RESULT([$PERL_ARCHLIB])
+  AC_SUBST(PERL_ARCHLIB)
+
+  AC_MSG_CHECKING([for perl privlib])
+  PERL_PRIVLIB=`$PERL -V:privlib | sed -e "s/^.*='//" -e "s/';$//"`
+  AC_MSG_RESULT([$PERL_PRIVLIB])
+  AC_SUBST(PERL_PRIVLIB)
+fi
 
 # testtools require ncurses
 if test "$want_tests" = "yes"; then
--- zarafa-6.30.0/perl/Makefile.am		2009-07-20 18:41:06.000000000 +0200
+++ zarafa-6.30.0/perl/Makefile.am.perl		2009-10-16 00:24:51.000000000 +0200
@@ -1,7 +1,6 @@
 lib_LTLIBRARIES = libperlmapi.la
 
-PVERSION=5.8.8
-AM_CPPFLAGS = $(DEBUGFLAGS) -DLINUX -I$(top_srcdir)/mapi4linux/include -I$(top_srcdir)/provider/common -I${top_srcdir}/common -I/usr/lib/perl/$(PVERSION)/CORE
+AM_CPPFLAGS = $(DEBUGFLAGS) -DLINUX -I$(top_srcdir)/mapi4linux/include -I$(top_srcdir)/provider/common -I${top_srcdir}/common -I$(PERL_ARCHLIB)/CORE
 
 libperlmapi_la_LIBADD = ${top_builddir}/mapi4linux/src/libmapi.la \
 						${top_builddir}/common/libcommon_mapi.la \
@@ -12,7 +11,7 @@
 CLEANFILES = MAPI.cpp
 
 .xs.cpp: typemap
-	xsubpp -noprototypes -nolinenumbers -C++ -typemap /usr/share/perl/$(PVERSION)/ExtUtils/typemap $< > $@; \
+	xsubpp -noprototypes -nolinenumbers -C++ -typemap $(PERL_PRIVLIB)/ExtUtils/typemap $< > $@; \
 	if [ $$? -ne 0 ]; then rm $@; fi
 
 check-syntax:


--- NEW FILE zarafa.ini ---
; Enable Zarafa mapi extension module
extension=mapi.so


--- NEW FILE zarafa.spec ---
#
# Releasing with this .spec, for fun and profit;
#
# = Beta Release or Release Candidate =
#
# 1. Set beta_or_rc to 1
# 2. Set actual_release to the actual_release value of the previous
#    build attempt, +1
#    - The release tag in case of a beta_or_rc release is (statically)
#      prefixed with "0.", so that the first final release ("1") is always
#      newer (in rpm-compver).
# 3. Set the SVN revision to the current SVN revision;
#    - This ensures a future SVN revision is always *more* recent in
#      rpm-compver
#    - Lacking a unique zarafa-<version>.svn<revision>.tar.gz source
#      tarball, setting the correct SVN revision in the .spec is
#      critical in order to be able to determine exactly what was in
#      the tarball at the time of this build. You may recover the exact
#      SVN revision used from the resulting SRPM and RPMs because it ends
#      up in the RPM release tag.
# 4. Update %%changelog, considering the following;
#    - Possibly change only the release tag for the most recent changelog
#      %%changelog entry, if appropriate
#    - Add a message about the changes to either the product or the RPM
#      packaging
# 5. Build locally
# 6. Build in mock for;
#    a) fedora-rawhide-x86_64,
#    b) fedora-12-x86_64,
#    c) fedora-11-x86_64,
#    d) epel-5-x86_64,
#    e) epel-4-x86_64
#
#    or scratch build in koji;
#
#    for tag in dist-f13 dist-f12-updates-candidate dist-f11-updates-candidate \
#               dist-5E-epel dist-4E-epel; do
#        echo "- $tag: `koji build --scratch --nowait $tag $srpm 2>&1 | grep \"Task info\" | awk '{print $3}'`"
#    done
#
# 7. Should builds fail, repeat the process.
#
# = Final Release =
#
# NOTE: A final release of a version, or multiple final releases of the
# same version, of Zarafa 6.30.10 requires one unique tarball, probably
# named similar to zarafa-6.30.10.tar.gz.
#
# Once this tarball is used for an RPM package that is actually released,
# the .tar.gz source should not change anymore. You may, though, include
# patches for the 6.30.10 RPM package in this .spec and bumping the release
# number.
#
# When you do so, however, you will need to take into account upgrade paths
# between distribution versions. E.g., when releasing 6.30.10-2 to F-11, you
# would also need to release 6.30.10-2 to F-12.
#
# An alternative is to release 6.30.10.1 with a zarafa-6.30.10.1.tar.gz (yet
# again ensuring there is an upgrade path to later distribution versions)
#
# The point behind this has to do with reproducibility, though admittedly,
# the Source RPM corresponding to the binary RPM (comparing the
# <version>-<release>.src.rpm vs. the installed
# <version>-<release>.<arch>.rpm) does reveal the actual SVN revision number,
# and should thus also build the exact same thing running in production (euh,
# at customers, that is).
#
# 1. Set beta_or_rc to 0
# 2. Set actual_release to 1, or the value of actual_release of
#    the previous stable release, +1 in case have already released
#    this SVN revision as a stable product.
# 3. Set the SVN revision to the current SVN revision;
#    - Lacking a unique zarafa-<version>.svn<revision>.tar.gz source
#      tarball, setting the correct SVN revision in the .spec is
#      critical in order to be able to determine exactly what was in
#      the tarball at the time of this build. You may recover the exact
#      SVN revision used from the resulting SRPM, as the .spec in that
#      SRPM contains the SVN revision number (but not the resulting RPMs
#      just for the sake of appearance).
# 4. Update %%changelog, considering the following;
#    - Remove all %%changelog stamps that have a beta_or_rc type of versioning,
#      again just for appearances sake, possibly preserving the important
#      messages from each beta_or_rc type of changelog entries, e.g.:
#
#      * Some Time Your Name <your at email> - 6.30.10-0.1svn12345
#      - Improve packaging
#
#      might, in a final release, become:
#
#      * Some Time Zarafa Release Engineering <releng at zarafa.com> - 6.30.10-1
#      - Release 6.30.10
#      - Improve packaging
#
#    - Possibly change only the release tag for the most recent changelog
#      %%changelog entry, if appropriate. This is assuming there is no
#      important or significant changes between the beta_or_rc and the final
#      product.
#    - Add a message about the changes to either the product or the RPM
#      packaging if appropriate.
# 5. Build locally
# 6. Build in mock for;
#    a) fedora-rawhide-x86_64,
#    b) fedora-12-x86_64,
#    c) fedora-11-x86_64,
#    d) epel-5-x86_64,
#    e) epel-4-x86_64
#
#    or scratch build in koji;
#
#    for tag in dist-f13 dist-f12-updates-candidate dist-f11-updates-candidate \
#               dist-5E-epel dist-4E-epel; do
#        echo "- $tag: `koji build --scratch --nowait $tag $srpm 2>&1 | grep \"Task info\" | awk '{print $3}'`"
#    done
#
# 7. When mock or koji scratch builds fail, repeat the process.
#

%define beta_or_rc      0
%define actual_release  1
%define svnrevision     18495
%define with_ldap       1
%define with_xmlto      1

Summary:            Zarafa Outlook Sharing and Open Source Collaboration
Name:               zarafa
Version:            6.30.10
%if %{beta_or_rc}
Release:            0.%{actual_release}.svn%{svnrevision}%{?dist}
%else
Release:            %{actual_release}%{?dist}
%endif
# Red Hat Legal has been advised by email from Zarafa that no license is
# required in order to use the letter string "zarafa" (combined with other
# words) in the package naming, to refer to the software as "Zarafa" to
# indicate its intended purpose, and to modify packages with bug fixes and
# enhancements.
License:            AGPLv3 with exceptions
Group:              Applications/Productivity
URL:                http://www.zarafa.com/
# http://www.zarafa.com/download-community -> "Zarafa Source Package"
Source0:            %{name}-%{version}.tar.gz
Source1:            %{name}.ini

Patch0:             zarafa-6.30.4-package.patch
# Patch 1, 2 and 3 were sent to upstream
Patch1:             zarafa-6.30.4-perl.patch
Patch2:             zarafa-6.30.10-undefined-symbol.patch
Patch3:             zarafa-6.30.10-chmod.patch
# http://www.brodowski.org/zarafa/php-mapi/6.30.10.18495/18495_patch.diff
Patch10:            zarafa-6.30.4-brodowski.patch

BuildRequires:      bison
BuildRequires:      gcc-c++
BuildRequires:      byacc
BuildRequires:      flex
BuildRequires:      gettext
BuildRequires:      libical-devel >= 0.42
BuildRequires:      libvmime07-devel
BuildRequires:      libxml2-devel
BuildRequires:      mysql-devel >= 4.1
BuildRequires:      ncurses-devel
BuildRequires:      pam-devel
BuildRequires:      php-devel
BuildRequires:      libtool, automake, autoconf

%if 0%{?fedora} > 8
BuildRequires:      libcurl-devel
BuildRequires:      perl-devel
%else
BuildRequires:      curl-devel
BuildRequires:      perl
%endif

%if 0%{?fedora} >= 12
BuildRequires:      libuuid-devel
%endif

%if %{with_ldap}
BuildRequires:      openldap-devel
%endif

%if %{with_xmlto}
BuildRequires:      xmlto
%endif

# The normal zarafa package pulls in all of zarafa
Requires:           zarafa(ical) = %{version}-%{release}
Requires:           zarafa(dagent) = %{version}-%{release}
Requires:           zarafa(gateway) = %{version}-%{release}
Requires:           zarafa(monitor) = %{version}-%{release}
Requires:           zarafa(server) = %{version}-%{release}
Requires:           zarafa(spooler) = %{version}-%{release}
Requires:           zarafa(utils) = %{version}-%{release}
Requires:           zarafa(config) = %{version}-%{release}

BuildRoot:          %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)

%description
Zarafa Outlook Sharing is a Microsoft Exchange replacement. The Open Source
Collaboration provides an integration with your existing Linux mail server,
native mobile phone support by ActiveSync compatiblity and a webaccess with
'Look & Feel' similar to Outlook using Ajax. Including an IMAP4 and a POP3
gateway as well as an iCal/CalDAV gateway, Zarafa can combine the usability
with the stability and flexibility of a Linux server.

The proven Zarafa groupware solution is using MAPI objects, provides a MAPI
client library as well as programming interfaces for C++, PHP and Perl. The
other Zarafa related packages need to be installed to gain all the features
and benefits of Zarafa Outlook Sharing and Open Source Collaboration.

##
## Zarafa Client
##
%package client
Summary:            Zarafa Client Library
Group:              System Environment/Libraries
Requires:           zarafa(common) = %{version}-%{release}
Provides:           zarafa(client) = %{version}-%{release}

%description client
Zarafa client libraries for use with integrated MAPI clients.

##
## Zarafa Common files
##
%package common
Summary:            Zarafa common files
Group:              System Environment/Daemons
Requires(pre):      shadow-utils
Provides:           zarafa(common) = %{version}-%{release}

%description common
Common files and directories required by most Zarafa packages.

##
## Zarafa Delivery Agent
##
%package dagent
Summary:            Zarafa Delivery Agent
Group:              System Environment/Daemons
Requires:           zarafa(client) = %{version}-%{release}
Requires:           zarafa(common) = %{version}-%{release}
Requires(post):     /sbin/chkconfig
Requires(preun):    /sbin/service
Requires(preun):    /sbin/chkconfig
Requires(postun):   /sbin/service
Provides:           zarafa(dagent) = %{version}-%{release}
Provides:           zarafa(config::dagent) = %{version}-%{release}

%description dagent
The delivery agent delivers e-mails into the Zarafa server.
It can be used to trigger the local mailer or act as the LMTP
server.

##
## Zarafa Development Headers
##
%package devel
Summary:            Development files for several Zarafa libraries
Group:              Development/Libraries
Requires:           %{name} = %{version}-%{release}, pkgconfig
Requires:           zarafa(common) = %{version}-%{release}
Provides:           %{name}-static = %{version}-%{release}

%description devel
The zarafa-devel package includes header files and libraries necessary for
developing programs which use features from the Zarafa Outlook Sharing and
Open Source Collaboration. The proven Zarafa groupware solution is using
MAPI objects, provides a MAPI client library and programming interfaces for
C++, PHP and Perl.

##
## Zarafa Gateway
##
%package gateway
Summary:            Zarafa Gateway server (POP3/IMAP access)
Group:              System Environment/Daemons
Requires:           zarafa(client) = %{version}-%{release}
Requires:           zarafa(common) = %{version}-%{release}
Requires(post):     /sbin/chkconfig
Requires(preun):    /sbin/service
Requires(preun):    /sbin/chkconfig
Requires(postun):   /sbin/service
Provides:           zarafa(gateway) = %{version}-%{release}
Provides:           zarafa(config::gateway) = %{version}-%{release}

%description gateway
The gateway enables other e-mail clients to connect through
POP3 or IMAP to the Zarafa server to read their e-mail. With
IMAP, it is also possible to view the contents of shared
folders and subfolders. The gateway can be configured to
listen for POP3, POP3S, IMAP and/or IMAPS.

##
## Zarafa iCal/CalDAV server
##
%package ical
Summary:            The Zarafa iCal/CalDAV gateway
Group:              System Environment/Daemons
Requires:           zarafa(client) = %{version}-%{release}
Requires:           zarafa(common) = %{version}-%{release}
Requires(post):     /sbin/chkconfig
Requires(preun):    /sbin/service
Requires(preun):    /sbin/chkconfig
Requires(postun):   /sbin/service
Provides:           zarafa(ical) = %{version}-%{release}
Provides:           zarafa(caldav) = %{version}-%{release}
Provides:           zarafa(config::ical) = %{version}-%{release}
Provides:           zarafa(config::caldav) = %{version}-%{release}

%description ical
The iCal/CalDAV gateway enables users to retrieve their
calendar using iCalendar compliant clients. The iCal/CalDAV
gateway can be configured to listen for HTTP and HTTPS
requests.

##
## Zarafa CalDAV package, merely an alias for zarafa-ical
##
%package caldav
Summary:            The Zarafa iCal/CalDAV gateway
Group:              System Environment/Daemons
Requires:           zarafa(ical) = %{version}-%{release}

%description caldav
The iCal/CalDAV gateway enables users to retrieve their
calendar using iCalendar compliant clients. The iCal/CalDAV
gateway can be configured to listen for HTTP and HTTPS
requests.

##
## Zarafa Monitor Service
##
%package monitor
Summary:            Zarafa Monitoring service
Group:              System Environment/Daemons
Requires:           zarafa(client) = %{version}-%{release}
Requires:           zarafa(common) = %{version}-%{release}
Requires(post):     /sbin/chkconfig
Requires(preun):    /sbin/service
Requires(preun):    /sbin/chkconfig
Requires(postun):   /sbin/service
Provides:           zarafa(monitor) = %{version}-%{release}
Provides:           zarafa(config::monitor) = %{version}-%{release}

%description monitor
The monitor checks user mailbox sizes. When a quotum is reached
the monitor sends a quota notification email.

##
## Zarafa Backend Server
##
%package server
Summary:            Zarafa Backend Server
Group:              System Environment/Daemons
Requires:           zarafa(common) = %{version}-%{release}
Requires(post):     /sbin/chkconfig
Requires(preun):    /sbin/service
Requires(preun):    /sbin/chkconfig
Requires(postun):   /sbin/service
Provides:           zarafa(server) = %{version}-%{release}
Provides:           zarafa(config) = %{version}-%{release}
Provides:           zarafa(config::server) = %{version}-%{release}

%description server
The Zarafa groupware backend server

##
## Zarafa Spooler Service
##
%package spooler
Summary:            Zarafa Spooler Service
Group:              System Environment/Daemons
Requires:           zarafa(client) = %{version}-%{release}
Requires:           zarafa(common) = %{version}-%{release}
Requires(post):     /sbin/chkconfig
Requires(preun):    /sbin/service
Requires(preun):    /sbin/chkconfig
Requires(postun):   /sbin/service
Provides:           zarafa(spooler) = %{version}-%{release}
Provides:           zarafa(config::spooler) = %{version}-%{release}

%description spooler
The spooler sends all pending Zarafa e-mail to the recipients,
from the Outbox of a user/all users.

##
## Zarafa Utilities
##
%package utils
Summary:            Zarafa Utilities
Group:              Applications/System
Requires:           zarafa(client) = %{version}-%{release}
Requires:           zarafa(common) = %{version}-%{release}
Provides:           zarafa(utils) = %{version}-%{release}

%description utils
Administration utilities for the Zarafa Groupware environment
including reporting and password management.

##
## MAPI System Libraries
##
%package -n libmapi
Summary:            Mapi libraries by Zarafa
Group:              System Environment/Libraries
Requires:           zarafa(client) = %{version}-%{release}
Requires(post):     /sbin/ldconfig
Requires(postun):   /sbin/ldconfig

%description -n libmapi
MAPI libraries by Zarafa.

##
## MAPI Perl extension
##
%package -n perl-libmapi
Summary:            Perl Mapi extension libraries by Zarafa
Group:              System Environment/Libraries
Requires:           perl

%description -n perl-libmapi
Perl MAPI extension libraries by Zarafa.

##
## MAPI PHP Extension
##
%package -n php-mapi
Summary:            A PHP Mapi client by Zarafa
Group:              Applications/Communications
# Bug: Without mod_ssl, reloading httpd causes core dump
Requires:           mod_ssl
Requires:           php >= 4.3
Provides:           php(mapi) = %{version}-%{release}

%description -n php-mapi
PHP MAPI extension by Zarafa to enable MAPI communication in PHP.

%prep
%setup -q
%patch0 -p1 -b .package
%patch1 -p1 -b .perl
%patch2 -p1 -b .symbol
%patch3 -p1 -b .chmod
#%%patch10 -p5 -b .brodowski

# Needed to get rid of rpath
libtoolize --force
autoreconf --force --install

%build
CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing -g -ggdb"
export CFLAGS
%configure \
    --with-userscript-prefix=%{_sysconfdir}/%{name}/userscripts \
    --with-quotatemplate-prefix=%{_sysconfdir}/%{name}/quotamail \
%if 0%{?rhel} > 0
    --enable-release \
%endif
    --disable-static \
    --disable-testtools \
    --enable-perl
make %{?_smp_mflags}

%install
rm -rf $RPM_BUILD_ROOT
make \
%if 0%{?rhel} > 0
    docdir=%{_datadir}/doc/%{name}/ \
    datarootdir=%{_datadir} \
%endif
    DESTDIR=$RPM_BUILD_ROOT \
    INSTALL='install -p' \
    install

# Nuke all overlefts from licensed, managed or other proprietary items
rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/report-ca
rm -f $RPM_BUILD_ROOT%{_mandir}/man?/zarafa-{backup,restore,ldapms.cfg,licensed{,.cfg}}.*

# Move all the initscripts to their appropriate place and
# ensure that all services are off by default at boot time
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/rc.d/init.d/
for service in server spooler dagent gateway monitor ical; do
    if [ -f $RPM_BUILD_ROOT%{_datadir}/doc/%{name}/%{name}-$service.init.fc ]; then
        sed -e 's at 345@-@' $RPM_BUILD_ROOT%{_datadir}/doc/%{name}/%{name}-$service.init.fc > \
            $RPM_BUILD_ROOT%{_sysconfdir}/rc.d/init.d/%{name}-$service
        chmod 755 $RPM_BUILD_ROOT%{_sysconfdir}/rc.d/init.d/%{name}-$service
        touch -c -r $RPM_BUILD_ROOT{%{_datadir}/doc/%{name}/%{name}-$service.init.fc,%{_sysconfdir}/rc.d/init.d/%{name}-$service}
    fi
done

# Move the configuration files to their correct place and handle
# /usr/lib vs. /usr/lib64 for all architectures correct and set
# run_as_user, run_as_group and local_admin_users values correct
for config in $RPM_BUILD_ROOT%{_datadir}/doc/%{name}/*.cfg; do
    config=$(basename $config)
    if [ -f $RPM_BUILD_ROOT%{_datadir}/doc/%{name}/$config ]; then
        sed -e 's@\(run_as_\(user\|group\)[[:space:]]*=\).*@\1 %{name}@' -e 's@/usr/lib/zarafa@%{_libdir}/%{name}@' \
            -e 's@\(local_admin_users[[:space:]]*=[[:space:]]*root.*\)@\1 %{name}@' \
                $RPM_BUILD_ROOT%{_datadir}/doc/%{name}/$config > $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/$config
        chmod 640 $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/$config
        touch -c -r $RPM_BUILD_ROOT%{_datadir}/doc/%{name}/$config $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/$config
    fi
done

# Move the logrotate configuration file to it's correct place
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/
sed -e 's@\(}\)@        create 0644 %{name} %{name}\n\1@' -e '1,6d' \
  $RPM_BUILD_ROOT%{_datadir}/doc/%{name}/%{name}.logrotate > $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/%{name}
touch -c -r $RPM_BUILD_ROOT%{_datadir}/doc/%{name}/%{name}.logrotate $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/%{name}

# Install the PHP module configuration file appropriate
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/php.d/
install -p -m 644 %{SOURCE1} $RPM_BUILD_ROOT%{_sysconfdir}/php.d/%{name}.ini

# Create missing userscript directories for packaging them
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/userscripts/{create,delete}{user,group,company}.d/

# Move the userscripts to their correct place and symlink them
mkdir -p $RPM_BUILD_ROOT%{_datadir}/%{name}/userscripts/
for userscript in companies_common.sh groups_common.sh users_common.sh \
            createcompany creategroup createuser deletecompany deletegroup deleteuser; do
    mv -f $RPM_BUILD_ROOT{%{_sysconfdir},%{_datadir}}/%{name}/userscripts/$userscript
    ln -sf ../../..%{_datadir}/%{name}/userscripts/$userscript $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/userscripts/$userscript
done

# Create the data directory and install some files into
mkdir -p $RPM_BUILD_ROOT%{_datadir}/%{name}/
install -p -m 755 installer/linux/db-{calc-storesize,convert-attachments-to-files} $RPM_BUILD_ROOT%{_datadir}/%{name}/
install -p -m 755 installer/linux/ssl-certificates.sh $RPM_BUILD_ROOT%{_datadir}/%{name}/

# Create the default log and lib directory for packaging
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/{log,lib}/%{name}/

# Remove all libtool .la files to avoid packaging of them
rm -f $RPM_BUILD_ROOT%{_libdir}/{,php/modules,%{name}}/*.la

# Remove files that are anyway in %doc or %{_datadir}/%{name}/
rm -rf $RPM_BUILD_ROOT%{_datadir}/doc/%{name}/

%find_lang %{name}

%clean
rm -rf $RPM_BUILD_ROOT

%pre common
getent group %{name} > /dev/null || %{_sbindir}/groupadd -r %{name}
getent passwd %{name} > /dev/null || %{_sbindir}/useradd -r -g %{name} -d %{_localstatedir}/lib/%{name} -s /sbin/nologin -c "Zarafa Service Account" %{name}
exit 0

%post dagent
[ $1 -eq 1 ] && /sbin/chkconfig --add %{name}-dagent
# Ensure correct log file ownership after upgrade from official packages
chown %{name}:%{name} %{_localstatedir}/log/%{name}/dagent.* > /dev/null 2>&1 || :

%post ical
[ $1 -eq 1 ] && /sbin/chkconfig --add %{name}-ical
# Ensure correct log file ownership after upgrade from official packages
chown %{name}:%{name} %{_localstatedir}/log/%{name}/ical.* > /dev/null 2>&1 || :

%post gateway
[ $1 -eq 1 ] && /sbin/chkconfig --add %{name}-gateway
# Ensure correct log file ownership after upgrade from official packages
chown %{name}:%{name} %{_localstatedir}/log/%{name}/gateway.* > /dev/null 2>&1 || :

%post monitor
[ $1 -eq 1 ] && /sbin/chkconfig --add %{name}-monitor
# Ensure correct log file ownership after upgrade from official packages
chown %{name}:%{name} %{_localstatedir}/log/%{name}/monitor.* > /dev/null 2>&1 || :

%post server
[ $1 -eq 1 ] && /sbin/chkconfig --add %{name}-server
# Ensure correct log file ownership after upgrade from official packages
chown %{name}:%{name} %{_localstatedir}/log/%{name}/server.* > /dev/null 2>&1 || :

%post spooler
[ $1 -eq 1 ] && /sbin/chkconfig --add %{name}-spooler
# Ensure correct log file ownership after upgrade from official packages
chown %{name}:%{name} %{_localstatedir}/log/%{name}/spooler.* > /dev/null 2>&1 || :

%post -n libmapi -p /sbin/ldconfig

%preun dagent
if [ $1 -eq 0 ]; then
    /sbin/service %{name}-dagent stop > /dev/null 2>&1 || :
    /sbin/chkconfig --del %{name}-dagent
fi

%preun ical
if [ $1 -eq 0 ]; then
    /sbin/service %{name}-ical stop > /dev/null 2>&1 || :
    /sbin/chkconfig --del %{name}-ical
fi

%preun gateway
if [ $1 -eq 0 ]; then
    /sbin/service %{name}-gateway stop > /dev/null 2>&1 || :
    /sbin/chkconfig --del %{name}-gateway
fi

%preun monitor
if [ $1 -eq 0 ]; then
    /sbin/service %{name}-monitor stop > /dev/null 2>&1 || :
    /sbin/chkconfig --del %{name}-monitor
fi

%preun server
if [ $1 -eq 0 ]; then
    /sbin/service %{name}-server stop > /dev/null 2>&1 || :
    /sbin/chkconfig --del %{name}-server
fi

%preun spooler
if [ $1 -eq 0 ]; then
    /sbin/service %{name}-spooler stop > /dev/null 2>&1 || :
    /sbin/chkconfig --del %{name}-spooler
fi

%postun dagent
if [ $1 -ne 0 ]; then
    /sbin/service %{name}-dagent condrestart > /dev/null 2>&1 || :
fi

%postun ical
if [ $1 -ne 0 ]; then
    /sbin/service %{name}-ical condrestart > /dev/null 2>&1 || :
fi

%postun gateway
if [ $1 -ne 0 ]; then
    /sbin/service %{name}-gateway condrestart > /dev/null 2>&1 || :
fi

%postun monitor
if [ $1 -ne 0 ]; then
    /sbin/service %{name}-monitor condrestart > /dev/null 2>&1 || :
fi

%postun server
if [ $1 -ne 0 ]; then
    /sbin/service %{name}-server condrestart > /dev/null 2>&1 || :
fi

%postun spooler
if [ $1 -ne 0 ]; then
    /sbin/service %{name}-spooler condrestart > /dev/null 2>&1 || :
fi

%postun -n libmapi -p /sbin/ldconfig

%files
%defattr(-,root,root,-)
%doc installer/licenseagreement/AGPL-3

%files caldav
%defattr(-,root,root,-)
%doc installer/licenseagreement/AGPL-3

%files client
%defattr(-,root,root,-)
%doc installer/licenseagreement/AGPL-3
%{_libdir}/libzarafaclient.so

%files common
%defattr(-,root,root,-)
%doc installer/licenseagreement/AGPL-3 doc/performance-tuning.txt
%dir %{_sysconfdir}/%{name}/
%config(noreplace) %{_sysconfdir}/logrotate.d/%{name}
%dir %{_libdir}/%{name}/
%{_mandir}/man1/%{name}.1*
%dir %{_datadir}/%{name}/
%dir %attr(0755,%{name},%{name}) %{_localstatedir}/lib/%{name}/
%dir %attr(0755,%{name},%{name}) %{_localstatedir}/log/%{name}/

%files dagent
%defattr(-,root,root,-)
%doc installer/licenseagreement/AGPL-3 installer/linux/createuser.dotforward
%{_bindir}/%{name}-autorespond
%{_bindir}/%{name}-dagent
%config(noreplace) %attr(0640,%{name},%{name}) %{_sysconfdir}/%{name}/dagent.cfg
%{_sysconfdir}/rc.d/init.d/%{name}-dagent
%{_mandir}/man1/%{name}-dagent.1*
%{_mandir}/man5/%{name}-dagent.cfg.5*

%files devel
%defattr(-,root,root,-)
%doc installer/licenseagreement/AGPL-3
%{_libdir}/libicalmapi.so
%{_libdir}/libinetmapi.so
%{_libdir}/libmapi.so
%{_libdir}/libperlmapi.so
%{_libdir}/libcommon_mapi.a
%{_libdir}/libcommon_ssl.a
%{_libdir}/libcommon_util.a
%{_libdir}/libfreebusy.a
%{_includedir}/icalmapi/
%{_includedir}/inetmapi/
%{_includedir}/mapi4linux/
%{_includedir}/%{name}/
%{_libdir}/pkgconfig/%{name}.pc

%files gateway
%defattr(-,root,root,-)
%doc installer/licenseagreement/AGPL-3
%{_bindir}/%{name}-gateway
%config(noreplace) %attr(0640,%{name},%{name}) %{_sysconfdir}/%{name}/gateway.cfg
%{_sysconfdir}/rc.d/init.d/%{name}-gateway
%{_mandir}/man1/%{name}-gateway.1*
%{_mandir}/man5/%{name}-gateway.cfg.5*

%files ical
%defattr(-,root,root,-)
%doc installer/licenseagreement/AGPL-3
%{_bindir}/%{name}-ical
%config(noreplace) %attr(0640,%{name},%{name}) %{_sysconfdir}/%{name}/ical.cfg
%{_sysconfdir}/rc.d/init.d/%{name}-ical
%{_mandir}/man1/%{name}-ical.1*
%{_mandir}/man5/%{name}-ical.cfg.5*

%files monitor
%defattr(-,root,root,-)
%doc installer/licenseagreement/AGPL-3
%{_bindir}/%{name}-monitor
%config(noreplace) %attr(0640,%{name},%{name}) %{_sysconfdir}/%{name}/monitor.cfg
%dir %{_sysconfdir}/%{name}/quotamail/
%config(noreplace) %{_sysconfdir}/%{name}/quotamail/companyhard.mail
%config(noreplace) %{_sysconfdir}/%{name}/quotamail/companysoft.mail
%config(noreplace) %{_sysconfdir}/%{name}/quotamail/companywarning.mail
%config(noreplace) %{_sysconfdir}/%{name}/quotamail/userhard.mail
%config(noreplace) %{_sysconfdir}/%{name}/quotamail/usersoft.mail
%config(noreplace) %{_sysconfdir}/%{name}/quotamail/userwarning.mail
%{_sysconfdir}/rc.d/init.d/%{name}-monitor
%{_mandir}/man1/%{name}-monitor.1*
%{_mandir}/man5/%{name}-monitor.cfg.5*

%files server -f %{name}.lang
%defattr(-,root,root,-)
%doc installer/licenseagreement/AGPL-3
%{_bindir}/%{name}-server
%config(noreplace) %attr(0640,%{name},%{name}) %{_sysconfdir}/%{name}/server.cfg
%config(noreplace) %attr(0640,%{name},%{name}) %{_sysconfdir}/%{name}/unix.cfg
%{_sysconfdir}/rc.d/init.d/%{name}-server
%dir %{_sysconfdir}/%{name}/userscripts/
%{_sysconfdir}/%{name}/userscripts/createuser
%{_sysconfdir}/%{name}/userscripts/creategroup
%{_sysconfdir}/%{name}/userscripts/createcompany
%{_sysconfdir}/%{name}/userscripts/deleteuser
%{_sysconfdir}/%{name}/userscripts/deletegroup
%{_sysconfdir}/%{name}/userscripts/deletecompany
%{_sysconfdir}/%{name}/userscripts/*common.sh
%dir %{_sysconfdir}/%{name}/userscripts/createuser.d/
%dir %{_sysconfdir}/%{name}/userscripts/creategroup.d/
%dir %{_sysconfdir}/%{name}/userscripts/createcompany.d/
%dir %{_sysconfdir}/%{name}/userscripts/deleteuser.d/
%dir %{_sysconfdir}/%{name}/userscripts/deletegroup.d/
%dir %{_sysconfdir}/%{name}/userscripts/deletecompany.d/
%config(noreplace) %{_sysconfdir}/%{name}/userscripts/createcompany.d/00createpublic
%config(noreplace) %{_sysconfdir}/%{name}/userscripts/createuser.d/00createstore
%{_datadir}/%{name}/userscripts/
%{_libdir}/%{name}/dbplugin.so
%{_libdir}/%{name}/unixplugin.so
%{_mandir}/man1/%{name}-server.1*
%{_mandir}/man5/%{name}-server.cfg.5*
%{_mandir}/man5/%{name}-unix.cfg.5*
%if %{with_ldap}
%doc installer/ldap/%{name}.schema
%config(noreplace) %attr(0640,%{name},%{name}) %{_sysconfdir}/%{name}/ldap.active-directory.cfg
%config(noreplace) %attr(0640,%{name},%{name}) %{_sysconfdir}/%{name}/ldap.openldap.cfg
%{_libdir}/%{name}/ldapplugin.so
%{_mandir}/man5/%{name}-ldap.cfg.5*
%endif

%files spooler
%defattr(-,root,root,-)
%doc installer/licenseagreement/AGPL-3
%{_bindir}/%{name}-spooler
%config(noreplace) %attr(0640,%{name},%{name}) %{_sysconfdir}/%{name}/spooler.cfg
%{_sysconfdir}/rc.d/init.d/%{name}-spooler
%{_mandir}/man1/%{name}-spooler.1*
%{_mandir}/man5/%{name}-spooler.cfg.5*

%files utils
%defattr(-,root,root,-)
%doc installer/licenseagreement/AGPL-3
%{_bindir}/%{name}-admin
%{_bindir}/%{name}-fsck
%{_bindir}/%{name}-passwd
%{_bindir}/%{name}-stats
%{_datadir}/%{name}/db-calc-storesize
%{_datadir}/%{name}/db-convert-attachments-to-files
%{_datadir}/%{name}/ssl-certificates.sh
%{_mandir}/man1/%{name}-admin.1*
%{_mandir}/man1/%{name}-fsck.1*
%{_mandir}/man1/%{name}-passwd.1*
%{_mandir}/man1/%{name}-stats.1*

%files -n libmapi
%defattr(-,root,root,-)
%doc installer/licenseagreement/AGPL-3
%{_libdir}/libicalmapi.so.*
%{_libdir}/libinetmapi.so.*
%{_libdir}/libmapi.so.*

%files -n perl-libmapi
%defattr(-,root,root,-)
%doc installer/licenseagreement/AGPL-3
%{_libdir}/libperlmapi.so.*

%files -n php-mapi
%defattr(-,root,root,-)
%doc installer/licenseagreement/AGPL-3
%config(noreplace) %{_sysconfdir}/php.d/%{name}.ini
%{_datadir}/php/mapi/
%if 0%{?rhel}%{?fedora} > 4
%{_libdir}/php/modules/mapi.so
%else
%{_libdir}/php4/mapi.so
%endif

%changelog
* Sat Feb 06 2010 Robert Scheck <robert at fedoraproject.org> 6.30.10-1
- Upgrade to 6.30.10 (#498194)
- Initial spec file for Fedora and Red Hat Enterprise Linux (thanks
  to Jeroen van Meeuwen, John van der Kamp and Steve Hardy)


Index: .cvsignore
===================================================================
RCS file: /cvs/pkgs/rpms/zarafa/F-12/.cvsignore,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- .cvsignore	7 Feb 2010 21:27:26 -0000	1.1
+++ .cvsignore	8 Feb 2010 14:21:31 -0000	1.2
@@ -0,0 +1 @@
+zarafa-6.30.10.tar.gz


Index: sources
===================================================================
RCS file: /cvs/pkgs/rpms/zarafa/F-12/sources,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -p -r1.1 -r1.2
--- sources	7 Feb 2010 21:27:26 -0000	1.1
+++ sources	8 Feb 2010 14:21:31 -0000	1.2
@@ -0,0 +1 @@
+da636f09fb149cf60db1c6f91a734ca3  zarafa-6.30.10.tar.gz



More information about the scm-commits mailing list