Zarafa on SME8

From SME Server
Jump to navigation Jump to search

This howto is in progress. But it seems to work for several people.

Maintainer

Frederik POLLET : email

Description

Zarafa is a groupware-server which enables the sharing of mail, contacts, appointments, notes and tasks in a web-interface and/or Microsoft Outlook (or even other clients). It supports MAPI, POP3, IMAP, CalDAV/iCal. It can be used as a MS Exchange replacement, even featuring public folders. Connecting Microsoft Outlook with this groupware-server is simple, enabling most of the MS Exchange-functions.

Z-push is an implementation of Microsoft's ActiveSync protocol which is used 'over-the-air' for multi platform active sync devices, including Windows Mobile and active sync used on Apple's iPhone, Sony Ericsson and Nokia phones. Open source Z-Push enables any PHP-based groupware package to become fully syncable with any ActiveSync-compliant device.

Installing Zarafa 7.0.8 and above on SME 8 + Z-push

Making some decisions before installing :

Zarafa can be configured with 3 different 'user-backends' :

  • database (db)
  • unix-users
  • LDAP/AD (not implemented in this howto)

Using the db-plugin in the Zarafa-configuration, let you make your zarafa-users in the MySQL-zarafadatabase, with a separate user-password for every Zarafa-user and a store. So, you make your separated Zarafa-users and the stores for these Zarafa-users one by one in the Zarafa-MySQL-database with the zarafa-admin-tool and sripts in this howto. There is no syncronisation between the SME-user-passwords and the Zarafa-user-passwords. You can only enable maildelivery for a SME/unix-user to a Zarafa-user with the same logon-name.

When using the unix-plugin in the Zarafa-configuration, Zarafa makes a store for every SME/unix-user on your system, except for those who are excluded by the template used in this howto. Zarafa uses the passwords of the SME/unix-users. There are no separated Zarafa-users and no separated passwords. You can enable maildelivery for a SME/unix-user to Zarafa. Since the unix files do not contain enough information for Zarafa, there are some properties of a user that will be stored in the MySQL-zarafadatabase. These properties are the email address, overriding quota settings, and administrator settings. The zarafa-admin-tool has to be used to update these user properties. All other user-properties are done using the normal unix tools. The unix-plugin seems to be your best choice if all your SME-users will use Zarafa Webaccess/Microsoft Outlook, and you don't need a multicompany-environment.

MORE INFORMATION

In a multicompany-evironment every company has his own Global Adressbook and public folders.

  Warning:
A multicompany-evironment is only possible with the DB-plugin.


  Warning:
IMPORTANT : If you want to have a multicompany-environment, format of the SME/unix-username and the ZARAFA-username has to be [username].[companyname] !!!


Search latest STABLE php53-mapi.rpm :

SME8 uses PHP5.3
Unfortunately, PHP 5.1 and PHP 5.3 are ABI incompatible, that means that PHP modules that were compiled for PHP 5.1 (like the php-mapi.rpm compiled in the Zarafa-rpms for RHEL 5) can not be run using PHP 5.3 :

https://community.zarafa.com/pg/blog/read/1837/support-for-php-53-in-rhel-5-via-new-php53mapi-rpm-package

So, search on the EPEL-repositories the latest STABLE php53-mapi-package.

https://admin.fedoraproject.org/updates/search/php53-mapi?

Set the epel-repository :

/sbin/e-smith/db yum_repositories set epel repository \
Name 'Epel - EL5' \
BaseUrl 'http://download.fedoraproject.org/pub/epel/5/$basearch' \
MirrorList 'http://mirrors.fedoraproject.org/mirrorlist?repo=epel-5&arch=$basearch' \
EnableGroups no \
GPGCheck yes \
GPGKey http://download.fedora.redhat.com/pub/epel/RPM-GPG-KEY-EPEL \
Visible no \
status disabled 
signal-event yum-modify

ONLY IF YOU ARE UPDATING AN EXISTING ZARAFA-7-INSTALLATION -> Remove the existing php53-mapi.rpm first :

rpm -e php53-mapi --nodeps

Download via the Zarafawebsite the package for ZCP corresponding with the php53-mapi.rpm (cf. version above) :

cd /to an installdirectory, ex. : /root/InstallZarafa

wget http://download.zarafa.com/community/final/7.0/[version]/zcp-[version]-rhel-5-[cpu-arch]-free.tar.gz

The 'free'-version has the ability to connect with Microsoft Outlook (default 3 users for free, buy zarafa-CAL's if you want more).

Download the Z-push-package (version 1.5 !!) :

wget http://zarafa-deutschland.de/z-push-download/final/1.5/[z-push-latest version]

Save in the same installdirectory, ex. : root/InstallZarafa

Unpack the corresponding package for ZCP and the package for Z-push :

Go (cd /...) to the installdirectory (if you haven't done this yet) :

cd /to the installdirectory

And unpack :

tar -zxvf zcp-*
tar -zxvf z-push-[latest version] -C /var/www/html

Change the name of the created z-push-directory in /var/www/html to 'z-push'.

Go (cd ./zcp-...) to the created subdirectory (zcp-...) :

cd ./zcp- ... 
Remove the devel packages
Move the windows-directory to an installshare in your network

Download the latest webapp.rpm too in the same subdirectory :

wget http://download.zarafa.com/community/final/WebApp/1.1/rhel/[zarafa-webapp-version.noarch.rpm]

Install all rpm's in the unpacked package of ZCP and the webapp.rpm too :

yum localinstall *.rpm

All packages have dependencies that cannot be resolved if you install only part of the rpm's.

If you only want to upgrade one package (ex. the Webapp) :

cd /to the new Webapp.rpm
rpm -Uvh --force zarafa-webapp-[version].noarch

Remove the default php-mapi.rpm :

We have to remove the installation of the default php-mapi (because it's not built for php 5.3).

rpm -e php-mapi --nodeps

Install the php53-mapi.rpm :

Install the php53-mapi.rpm of the EPEL-repository :

-If you downloaded the rpm :

rpm -Uvh --force php53-mapi

-If you did set the EPEL-repository :

yum install php53-mapi --enablerepo=epel

ONLY FOR FIRST INSTALLATION : Make actions :

nano -w /etc/e-smith/events/actions/zarafa-expand-templates

#!/bin/sh

/sbin/e-smith/expand-template /etc/zarafa/gateway.cfg
/sbin/e-smith/expand-template /etc/zarafa/ical.cfg
/sbin/e-smith/expand-template /etc/zarafa/server.cfg
/sbin/e-smith/expand-template /etc/zarafa/unix.cfg
/sbin/e-smith/expand-template /etc/zarafa/monitor.cfg
/sbin/e-smith/expand-template /etc/zarafa/indexer.cfg
/sbin/e-smith/expand-template /etc/zarafa/spooler.cfg
/sbin/e-smith/expand-template /etc/zarafa/dagent.cfg
/sbin/e-smith/expand-template /etc/zarafa/licensed.cfg

nano -w /etc/e-smith/events/actions/zarafa-services

#!/bin/sh
FILE=/etc/rc.d/init.d/zarafa-licensed
if [ "$1" == start ]; then
 /etc/rc.d/init.d/zarafa-dagent start
 /etc/rc.d/init.d/zarafa-gateway start
 /etc/rc.d/init.d/zarafa-ical start
 if [ -a $FILE ]; then $FILE start; fi
 /etc/rc.d/init.d/zarafa-monitor start
 /etc/rc.d/init.d/zarafa-spooler start
 /etc/rc.d/init.d/zarafa-indexer start
 /etc/rc.d/init.d/zarafa-server start
 exit 0
fi
if [ "$1" == stop ]; then
 /etc/rc.d/init.d/zarafa-dagent stop
 /etc/rc.d/init.d/zarafa-gateway stop
 /etc/rc.d/init.d/zarafa-ical stop
 if [ -a $FILE ]; then $FILE stop; fi
 /etc/rc.d/init.d/zarafa-indexer stop
 /etc/rc.d/init.d/zarafa-spooler stop
 /etc/rc.d/init.d/zarafa-server stop
 /etc/rc.d/init.d/zarafa-monitor stop  
 exit 0
fi
if [ "$1" == restart ]; then
 /etc/rc.d/init.d/zarafa-dagent stop
 /etc/rc.d/init.d/zarafa-gateway stop
 /etc/rc.d/init.d/zarafa-ical stop
 if [ -a $FILE ]; then $FILE stop; fi
 /etc/rc.d/init.d/zarafa-monitor stop
 /etc/rc.d/init.d/zarafa-indexer stop
 /etc/rc.d/init.d/zarafa-spooler stop
 /etc/rc.d/init.d/zarafa-server stop
 /etc/rc.d/init.d/zarafa-dagent start
 /etc/rc.d/init.d/zarafa-gateway start
 /etc/rc.d/init.d/zarafa-ical start
 if [ -a $FILE ]; then $FILE start; fi
 /etc/rc.d/init.d/zarafa-monitor start
 /etc/rc.d/init.d/zarafa-server start
 /etc/rc.d/init.d/zarafa-spooler start
 /etc/rc.d/init.d/zarafa-indexer start
 exit 0
fi
if [ "$1" == enabled ]; then
 config setprop zarafa-gateway status enabled
 config setprop zarafa-ical status enabled
 if [ -a $FILE ]; then config setprop zarafa-licensed status enabled; fi
 config setprop zarafa-monitor status enabled
 config setprop zarafa-server status enabled
 config setprop zarafa-spooler status enabled
 config setprop zarafa-indexer status enabled
 config setprop zarafa-dagent status enabled
 exit 0
fi
if [ "$1" == disabled ]; then
 config setprop zarafa-gateway status disabled
 config setprop zarafa-ical status disabled
 if [ -a $FILE ]; then config setprop zarafa-licensed status disabled; fi
 config setprop zarafa-monitor status disabled
 config setprop zarafa-server status disabled
 config setprop zarafa-spooler status disabled
 config setprop zarafa-indexer status disabled
 config setprop zarafa-dagent status disabled
 exit 0
fi
echo "Usage: start|stop|restart|enabled|disabled"
exit 0

nano -w /etc/e-smith/events/actions/zarafa-install

#!/bin/sh
clear

/bin/chmod 554 /etc/e-smith/events/actions/zarafa-expand-templates
/bin/chmod 554 /etc/e-smith/events/actions/zarafa-services
/bin/chmod 554 /etc/e-smith/events/actions/zarafa-update
/bin/chmod 554 /etc/e-smith/events/actions/zarafa-create-user
/bin/chmod 554 /etc/e-smith/events/actions/zarafa-create-company

/bin/echo "Enter the language of your choice for your zarafa-mailboxes and public store. Values: en_US.UTF-8, en_GB.UTF-8, nl_NL.UTF-8, fr_FR.UTF-8, de_DE.UTF-8, ..."
read ZARAFALANGUAGE
/sbin/e-smith/config set zarafa service status enabled language $ZARAFALANGUAGE
/sbin/e-smith/expand-template /etc/sysconfig/zarafa

/bin/echo "Setting up templates2expand-files"
mkdir -p /etc/e-smith/events/email-update/templates2expand/etc/zarafa
touch /etc/e-smith/events/email-update/templates2expand/etc/zarafa/gateway.cfg
touch /etc/e-smith/events/email-update/templates2expand/etc/zarafa/ical.cfg
touch /etc/e-smith/events/email-update/templates2expand/etc/zarafa/server.cfg
touch /etc/e-smith/events/email-update/templates2expand/etc/zarafa/unix.cfg
touch /etc/e-smith/events/email-update/templates2expand/etc/zarafa/spooler.cfg
touch /etc/e-smith/events/email-update/templates2expand/etc/zarafa/licensed.cfg
touch /etc/e-smith/events/email-update/templates2expand/etc/zarafa/monitor.cfg
touch /etc/e-smith/events/email-update/templates2expand/etc/zarafa/dagent.cfg

mkdir -p /etc/e-smith/events/group-create/templates2expand/etc/zarafa
touch /etc/e-smith/events/group-create/templates2expand/etc/zarafa/unix.cfg

mkdir -p /etc/e-smith/events/group-delete/templates2expand/etc/zarafa
touch /etc/e-smith/events/group-delete/templates2expand/etc/zarafa/unix.cfg

mkdir -p /etc/e-smith/events/group-modify/templates2expand/etc/zarafa
touch /etc/e-smith/events/group-modify/templates2expand/etc/zarafa/unix.cfg

mkdir -p /etc/e-smith/events/user-create/templates2expand/etc/zarafa
touch /etc/e-smith/events/user-create/templates2expand/etc/zarafa/unix.cfg

mkdir -p /etc/e-smith/events/user-delete/templates2expand/etc/zarafa
touch /etc/e-smith/events/user-delete/templates2expand/etc/zarafa/unix.cfg

mkdir -p /etc/e-smith/events/user-modify/templates2expand/etc/zarafa
touch /etc/e-smith/events/user-modify/templates2expand/etc/zarafa/unix.cfg

mkdir -p /etc/e-smith/events/ibay-create/templates2expand/etc/zarafa
touch /etc/e-smith/events/ibay-create/templates2expand/etc/zarafa/unix.cfg

mkdir -p /etc/e-smith/events/machine-account-create/templates2expand/etc/zarafa
touch /etc/e-smith/events/machine-account-create/templates2expand/etc/zarafa/unix.cfg

mkdir -p /etc/e-smith/events/post-upgrade/templates2expand/etc/zarafa
touch /etc/e-smith/events/post-upgrade/templates2expand/etc/e-smith/sql/init/80zarafa
touch /etc/e-smith/events/post-upgrade/templates2expand/etc/zarafa/gateway.cfg
touch /etc/e-smith/events/post-upgrade/templates2expand/etc/zarafa/ical.cfg
touch /etc/e-smith/events/post-upgrade/templates2expand/etc/zarafa/server.cfg
touch /etc/e-smith/events/post-upgrade/templates2expand/etc/zarafa/unix.cfg
touch /etc/e-smith/events/post-upgrade/templates2expand/etc/zarafa/spooler.cfg
touch /etc/e-smith/events/post-upgrade/templates2expand/etc/zarafa/licensed.cfg
touch /etc/e-smith/events/post-upgrade/templates2expand/etc/zarafa/monitor.cfg
touch /etc/e-smith/events/post-upgrade/templates2expand/etc/zarafa/dagent.cfg

mkdir -p /etc/e-smith/events/timezone-update/templates2expand/etc/zarafa
touch /etc/e-smith/events/timezone-update/templates2expand/etc/zarafa/ical.cfg

/bin/echo "Setting up services2adjust-links"
mkdir -p /etc/e-smith/events/machine-account-create/services2adjust
ln -s reload /etc/e-smith/events/group-create/services2adjust/zarafa-server
ln -s reload /etc/e-smith/events/group-delete/services2adjust/zarafa-server
ln -s reload /etc/e-smith/events/group-modify/services2adjust/zarafa-server
ln -s reload /etc/e-smith/events/user-create/services2adjust/zarafa-server
ln -s reload /etc/e-smith/events/user-delete/services2adjust/zarafa-server
ln -s reload /etc/e-smith/events/user-modify/services2adjust/zarafa-server
ln -s reload /etc/e-smith/events/ibay-create/services2adjust/zarafa-server
ln -s reload /etc/e-smith/events/machine-account-create/services2adjust/zarafa-server
ln -s reload /etc/e-smith/events/timezone-update/services2adjust/zarafa-server

/bin/echo "Initialize-default-databases"
/etc/e-smith/events/actions/initialize-default-databases

/bin/echo "Setting up db-entries for Zarafa"
/sbin/e-smith/db configuration setprop mysqld InnoDB enabled
/sbin/e-smith/db configuration setprop smtpd tnef2mime disabled
/sbin/e-smith/db configuration setprop zarafa-server access private status enabled TCPPort 236 index_services_enabled yes
/bin/echo "Enter your user plugin. Values: unix or db (ldap is not supported, multicompany-support only with db-plugin)"
read USERPLUGIN
/sbin/e-smith/db configuration setprop zarafa-server Plugin $USERPLUGIN

if [ "$USERPLUGIN" == db ]; then
/bin/echo "Do you want to set up a multicompany-environment ? Values: yes or no"
read MULTICOMPANY
/sbin/e-smith/db configuration setprop zarafa-server Multicompany $MULTICOMPANY
fi

/sbin/e-smith/db configuration setprop zarafa access SSL
/sbin/e-smith/db configuration set zarafa-ical service access private status enabled TCPPort 8088
/sbin/e-smith/db configuration set zarafa-icals service access public status enabled TCPPort 8089
/sbin/e-smith/db configuration set zarafa-imap service access private status enabled TCPPort 8143
/sbin/e-smith/db configuration set zarafa-imaps service access public status enabled TCPPort 8993
/sbin/e-smith/db configuration set zarafa-pop3 service access private status enabled TCPPort 8110
/sbin/e-smith/db configuration set zarafa-pop3s service access public status enabled TCPPort 8995
/sbin/e-smith/db configuration set zarafa-ssl service access public status enabled TCPPort 237
/sbin/e-smith/db configuration set zarafa-gateway service status enabled
/sbin/e-smith/db configuration set zarafa-spooler service status enabled
/sbin/e-smith/db configuration set zarafa-monitor service status enabled
/sbin/e-smith/db configuration set zarafa-indexer service status enabled
/sbin/e-smith/db configuration set zarafa-licensed service status enabled
/sbin/e-smith/db configuration set zarafa-dagent service status enabled

/bin/echo "Expanding the my.cnf-template"
/sbin/e-smith/expand-template /etc/my.cnf

/bin/echo "Restarting mysqld"
/usr/bin/sv t /service/mysqld

/bin/echo "Signal-event remoteaccess-update"
/sbin/e-smith/signal-event remoteaccess-update

/bin/echo "Creating the Zarafa-database"
/sbin/e-smith/expand-template /etc/e-smith/sql/init/80zarafa
/etc/rc.d/init.d/mysql.init start

/bin/echo "Expanding the Zarafa-templates"
/etc/e-smith/events/actions/zarafa-expand-templates

/bin/echo "Configuration of the Webaccess and Z-push"
/bin/chown -R www:www /var/lib/zarafa-webaccess/tmp
/bin/chown -R www:www /var/lib/zarafa-webapp/tmp
FILE=/etc/httpd/conf.d/zarafa-webaccess.conf; if [ -a $FILE ]; then /bin/rm -f $FILE; fi
FILE=/etc/httpd/conf.d/zarafa-webapp.conf; if [ -a $FILE ]; then /bin/rm -f $FILE; fi
FILE=/var/www/html/z-push/state; if [ -d $FILE ]; then /bin/chown -R www:www $FILE; fi
FILE=/var/www/html/z-push/state; if [ -d $FILE ]; then /bin/chmod 755 $FILE; fi
FILE=/var/www/html/z-push/state; if [ -d $FILE ]; then /bin/touch /var/www/html/z-push/debug.txt; fi
FILE=/var/www/html/z-push/state; if [ -d $FILE ]; then /bin/chown www:www /var/www/html/z-push/debug.txt; fi
FILE=/var/www/html/z-push/state; if [ -d $FILE ]; then /bin/chmod 755 /var/www/html/z-push/debug.txt; fi


/bin/echo "Expanding http.conf-template"
/sbin/e-smith/expand-template /etc/httpd/conf/httpd.conf

/bin/echo "Restarting httpd"
/usr/bin/sv restart /service/httpd-e-smith

/bin/echo "Setting up more symbolic links"
ln -s /lib/libcrypto.so.0.9.8e /usr/lib/libcrypto.so.0.9.8
ln -s /lib/libssl.so.0.9.8e /usr/lib/libssl.so.0.9.8
ln -s /etc/rc.d/init.d/e-smith-service /etc/rc.d/rc7.d/S99zarafa-dagent
ln -s /etc/rc.d/init.d/e-smith-service /etc/rc.d/rc7.d/S99zarafa-gateway
ln -s /etc/rc.d/init.d/e-smith-service /etc/rc.d/rc7.d/S99zarafa-indexer
ln -s /etc/rc.d/init.d/e-smith-service /etc/rc.d/rc7.d/S99zarafa-licensed
ln -s /etc/rc.d/init.d/e-smith-service /etc/rc.d/rc7.d/S99zarafa-monitor
ln -s /etc/rc.d/init.d/e-smith-service /etc/rc.d/rc7.d/S99zarafa-spooler
ln -s /etc/rc.d/init.d/e-smith-service /etc/rc.d/rc7.d/S99zarafa-ical
ln -s /etc/rc.d/init.d/e-smith-service /etc/rc.d/rc7.d/S99zarafa-server

/bin/echo "Installing a license-key"
if [ -x /usr/bin/zarafa-licensed ]; then
	if [ ! -f /etc/zarafa/license/base ]; then
		mkdir -p /etc/zarafa/license
		SERIAL="0"
		while [ ${#SERIAL} -ne 25 -a ${#SERIAL} -ne 0 ]; do
			if [ -n "$SERIAL" ]; then
				echo "Serial number must be 25 characters or empty"
			fi
			echo -ne "Server serial number (leave empty for none) []\t\t: "
			read SERIAL
		done
		SERIAL=`echo $SERIAL | tr [a-z] [A-Z]`
		echo $SERIAL > /etc/zarafa/license/base
		echo
		echo "The correctness of the serial will be checked when the Zarafa-server starts."
		echo
	fi
fi

/bin/echo "Starting Zarafa-services"
/etc/e-smith/events/actions/zarafa-services start

/bin/echo "Setting permissions on files"
FILE=/var/log/zarafa/dagent.log; if [ -a $FILE ]; then /bin/chmod 666 $FILE; fi

if [ "$USERPLUGIN" == unix ]; then
/bin/echo "creating Public store"
/usr/bin/zarafa-admin --utf8 -s
fi

if [ "$USERPLUGIN" == db ]; then
if [ "$MULTICOMPANY" == no ]; then
/bin/echo "creating Public store"
/usr/bin/zarafa-admin --utf8 -s
fi
fi

if [ "$USERPLUGIN" == db ]; then
if [ "$MULTICOMPANY" == yes ]; then
 /bin/echo "Make your first company. Enter your first companyname :"
 read COMPANYNAME
 /usr/bin/zarafa-admin --create-company "$COMPANYNAME"
 /bin/echo "!!! REMEMBER !!! : for a multicompany-environment the username-format of the SME-user and the ZARAFA-user, has to be : [username].[companyname]."
fi
fi

nano -w /etc/e-smith/events/actions/zarafa-update

#!/bin/sh

/bin/echo "Stopping the Zarafa-services"
/etc/e-smith/events/actions/zarafa-services stop

/bin/echo "webaccess config"
/bin/chown -R www:www /var/lib/zarafa-webaccess/tmp
/bin/chown -R www:www /var/lib/zarafa-webapp/tmp
FILE=/etc/httpd/conf.d/zarafa-webaccess.conf; if [ -a $FILE ]; then /bin/rm -f $FILE; fi
FILE=/etc/httpd/conf.d/zarafa-webapp.conf; if [ -a $FILE ]; then /bin/rm -f $FILE; fi
FILE=/var/www/html/z-push/state; if [ -d $FILE ]; then /bin/chown -R www:www $FILE; fi
FILE=/var/www/html/z-push/state; if [ -d $FILE ]; then /bin/chmod 755 $FILE; fi
FILE=/var/www/html/z-push/state; if [ -d $FILE ]; then /bin/touch /var/www/html/z-push/debug.txt; fi
FILE=/var/www/html/z-push/state; if [ -d $FILE ]; then /bin/chown www:www /var/www/html/z-push/debug.txt; fi
FILE=/var/www/html/z-push/state; if [ -d $FILE ]; then /bin/chmod 755 /var/www/html/z-push/debug.txt; fi

/bin/echo "Expanding Zarafa-templates"
/etc/e-smith/events/actions/zarafa-expand-templates

/bin/echo "Expanding http.conf-template"
/sbin/e-smith/expand-template /etc/httpd/conf/httpd.conf

/bin/echo "Restarting httpd"
/usr/bin/sv restart /service/httpd-e-smith

/bin/echo "Starting Zarafa-services"
/etc/e-smith/events/actions/zarafa-services start

/bin/echo "Setting permissions on files"
FILE=/var/log/zarafa/dagent.log; if [ -a $FILE ]; then /bin/chmod 666 $FILE; fi

nano -w /etc/e-smith/events/actions/zarafa-create-user (ONLY FOR DB-PLUGIN)

#!/bin/sh

clear

/bin/echo "Enter the username of the ZARAFA-user"
/bin/echo "If you have a multicompany-setup, format of the SME-username and the ZARAFA-username"
/bin/echo "has to be [username].[companyname] !!!"
read USERNAME

/bin/echo "Enter password:"
read PASSWORD

/bin/echo "Enter e-mail address:"
read EMAIL

/bin/echo "Enter full name:"
read FULLNAME

/bin/echo "Executing..."

/usr/bin/zarafa-admin -c "$USERNAME" -p "$PASSWORD" -e "$EMAIL" -f "$FULLNAME"
/usr/bin/zarafa-admin -l

/sbin/e-smith/db accounts setprop $USERNAME zarafa enabled 
/etc/e-smith/events/actions/qmail-update-user

nano -w /etc/e-smith/events/actions/zarafa-create-company (ONLY FOR DB-PLUGIN)

#!/bin/sh

clear
/bin/echo "Enter the companyname :"
read COMPANYNAME

/bin/echo "Executing..."

/usr/bin/zarafa-admin --create-company "$COMPANYNAME"

ONLY FOR FIRST INSTALLATION : Make templates :

nano -w /etc/e-smith/db/configuration/migrate/80zarafa

{
    use MIME::Base64 qw(encode_base64);

    my $rec = $DB->get('zarafa-server') || $DB->new_record('zarafa-server', {type => 'service'});

    my $pw = $rec->prop('DbPassword');
    return "" if $pw;

    $rec->set_prop('DbPassword', sprintf("%15.0f", int( (1000000000000000) * rand() )));
}

nano -w /etc/e-smith/templates/etc/e-smith/sql/init/80zarafa

{
    my $db = ${'zarafa-server'}{DbName} || 'zarafa';
    my $user = ${'zarafa-server'}{DbUser} || 'zarafa';
    my $pass = ${'zarafa-server'}{DbPassword} || 'changeme';
    $OUT .= <<END
#! /bin/sh
    if [ -d /var/lib/mysql/$db ]; then
      exit
    fi
    /usr/bin/mysql <<EOF
    CREATE DATABASE $db DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
    use $db;
 
    use mysql;
    GRANT ALL PRIVILEGES ON $db.* TO $user\@localhost
            IDENTIFIED BY '$pass';
    flush privileges;
EOF
END
}


nano -w /etc/e-smith/templates.metadata/etc/e-smith/sql/init/80zarafa

PERMS=0750

mkdir -p /etc/e-smith/templates/etc/sysconfig/zarafa

nano -w /etc/e-smith/templates/etc/sysconfig/zarafa/zarafa

#
# Locale setting for all Zarafa services
#
ZARAFA_LOCALE="{ ${'zarafa'}{language} || 'en_US.UTF-8' ; }"

#
# Locale setting for Zarafa userscripts
#
ZARAFA_USERSCRIPT_LOCALE="{ ${'zarafa'}{language} || 'en_US.UTF-8' ; }"

nano -w /etc/e-smith/templates/etc/httpd/conf/httpd.conf/VirtualHosts/29ZarafaAliases

{
    # vim: ft=perl:

    $haveSSL = (exists ${modSSL}{status} and ${modSSL}{status} eq "enabled") ?  'yes' : 'no';
    my $zwebmailStatus = $zarafa{'status'} || "disabled";
    my $zwebmailAccessType = $zarafa{'access'} || "SSL";

    my $dirs;
    $dirs{zarafa} = '/usr/share/zarafa-webaccess';
    $dirs{webaccess} = '/usr/share/zarafa-webaccess';
    $dirs{webmail} = '/usr/share/zarafa-webaccess';
    if ($imp{'status'} eq 'enabled') {$dirs{webmail} = ''};
    $dirs{webapp} = '/usr/share/zarafa-webapp';
    $dirs{'Microsoft-Server-ActiveSync'} = '/var/www/html/z-push/index.php';

    return "    # Zarafa is disabled in this VirtualHost\n"
                unless $zwebmailStatus eq 'enabled';

    foreach $place ('zarafa','webmail','webaccess','webapp','Microsoft-Server-ActiveSync')
    {
        if (($port eq "80") && ($haveSSL eq 'yes') && ($zwebmailAccessType eq 'SSL'))
        {
            $OUT .= "    RewriteRule ^/$place(/.*|\$)    https://%{HTTP_HOST}/$place\$1 [L,R]\n";
        } else {
            if (($dirs{$place}) ne '') {$OUT .= "    Alias	 /$place   $dirs{$place}\n"};
        }
    }																		
}


nano -w /etc/e-smith/templates/etc/httpd/conf/httpd.conf/86ZarafaAlias

{
    my $zstatus = $zarafa{'status'};

    if (defined $zstatus && $zstatus eq 'enabled')
    {
        $OUT .= qq(
#--------------------------------------------------------------------
# Zarafa specific configuration files.
#--------------------------------------------------------------------

Alias /zarafa /usr/share/zarafa-webaccess/
 <Directory /usr/share/zarafa-webaccess/>
#  DirectoryIndex index.php
#  Options -Indexes +FollowSymLinks
#  AllowOverride Options
  Options -Indexes
  AllowOverride All
  order allow,deny
  allow from all
  AddType application/x-httpd-php .php
  php_flag magic_quotes_gpc off
  php_flag track_vars on
 </Directory>

Alias /webapp /usr/share/zarafa-webapp/
 <Directory /usr/share/zarafa-webapp/>
  Options -Indexes
  AllowOverride All
  order allow,deny
  allow from all
  AddType application/x-httpd-php .php
  php_flag magic_quotes_gpc off
  php_flag track_vars on
 </Directory>
	    
<Directory /var/www/html/>
    Options -Indexes
    AllowOverride All
    order allow,deny
    allow from all
    AddType application/x-httpd-php .php .php3
    php_flag  magic_quotes_gpc  off
</Directory>

<Directory /var/www/html/z-push/>
   Options -Indexes
   AllowOverride All
   order allow,deny
   allow from all
   AddType application/x-httpd-php .php
   php_flag magic_quotes_gpc off
   php_flag register_globals off
   php_flag magic_quotes_runtime off
   php_flag short_open_tag on
</Directory>

);
    }    
    else
    {
       $OUT .= "# Zarafa Webmail is not configured as it is disabled in the config db";
    }
}

mkdir -p /etc/e-smith/templates/etc/zarafa/gateway.cfg

nano -w /etc/e-smith/templates/etc/zarafa/gateway.cfg/gateway.cfg

##############################################################
# GATEWAY SETTINGS

server_bind	=	0.0.0.0

# Please refer to the administrator manual or manpage why HTTP is used rather than the UNIX socket.
server_socket	=	http://localhost:{${'zarafa-server'}{TCPPort}||'236';}/zarafa

# Set this value to a name to show in the logon greeting to clients.
# Leave empty to use DNS to find this name.
server_hostname = 

# Whether to show the hostname in the logon greeting to clients.
server_hostname_greeting = no

# drop privileges and run the process as this user
run_as_user = 

# drop privileges and run the process as this group
run_as_group = 

# create a pid file for stopping the service via the init.d scripts
pid_file = /var/run/zarafa-gateway.pid

# run server in this path (when not using the -F switch)
running_path = /

# enable/disable POP3, and POP3 listen port
pop3_enable	= { if (${'zarafa-pop3'}{status} eq 'enabled') {'yes'} else {'no'}; }
pop3_port	= { ${'zarafa-pop3'}{TCPPort} || '8110'; }

# enable/disable Secure POP3, and Secure POP3 listen port
pop3s_enable = { if (${'zarafa-pop3s'}{status} eq 'enabled') {'yes'} else {'no'}; }
pop3s_port	= { ${'zarafa-pop3s'}{TCPPort} || '8995'; }

# enable/disable IMAP, and IMAP listen port
imap_enable	= { if (${'zarafa-imap'}{status} eq 'enabled') {'yes'} else {'no'}; }
imap_port	= { ${'zarafa-imap'}{TCPPort} || '8143'; }


# enable/disable Secure IMAP, and Secure IMAP listen port
imaps_enable	= { if (${'zarafa-imaps'}{status} eq 'enabled') {'yes'} else {'no'}; }
imaps_port	= { ${'zarafa-imaps'}{TCPPort} || '8993'; }


# Only mail folder for IMAP or all subfolders (calendar, contacts, tasks, etc. too)
imap_only_mailfolders	=	{ ${'zarafa-imap'}{imap_only_mailfolders} || 'yes'; }

# Show Public folders for IMAP
imap_public_folders	=	{ ${'zarafa-imap'}{imap_public_folders} || 'yes'; }

# IMAP clients may use IDLE command
imap_capability_idle = yes

# The maximum size of an email that can be uploaded to the gateway
imap_max_messagesize = { ${'zarafa-imap'}{imap_max_messagesize} || '134217728'; }

# Override the e-mail charset and generate using utf-8 (when imap data is not present on the item)
imap_generate_utf8 = { ${'zarafa-imap'}{imap_generate_utf8} || 'no'; }

# Internally issue the expunge command to directly delete e-mail marked for deletion in IMAP.
imap_expunge_on_delete = { ${'zarafa-imap'}{imap_expunge_on_delete} || 'no'; }

# Store full rfc822 message during APPEND
imap_store_rfc822 = { ${'zarafa-imap'}{imap_store_rfc822} || 'yes'; }

# File with RSA key for SSL
ssl_private_key_file	= /home/e-smith/ssl.key/{$SystemName}.{$DomainName}.key


#File with certificate for SSL
ssl_certificate_file	= /home/e-smith/ssl.crt/{$SystemName}.{$DomainName}.crt


# Verify client certificate
ssl_verify_client	=	{ ${'zarafa-gateway'}{ssl_verify_client} || 'no'; }

# Client verify file and/or path
ssl_verify_file		=	
ssl_verify_path		=

# Process model, using pthreads (thread) or processes (fork)
process_model = { ${'zarafa-gateway'}{process_model} || 'fork'; }

##############################################################
# GATEWAY LOG SETTINGS

# Logging method (syslog, file)
log_method	=	{ ${'zarafa-gateway'}{log_method} || 'file'; }

# Loglevel (0=no logging, 5=full logging)
log_level	=	{ ${'zarafa-gateway'}{log_level} || '2'; }

# Logfile for log_method = file, use '-' for stderr
log_file	=	/var/log/zarafa/gateway.log

# Log timestamp - prefix each log line with timestamp in 'file' logging mode
log_timestamp	=	{ ${'zarafa-gateway'}{log_timestamp} || '1'; }


mkdir -p /etc/e-smith/templates/etc/zarafa/ical.cfg

nano -w /etc/e-smith/templates/etc/zarafa/ical.cfg/ical.cfg

##############################################################
# ICAL SETTINGS

# drop privileges and run the process as this user
run_as_user = 

# drop privileges and run the process as this group
run_as_group = 

# create a pid file for stopping the service via the init.d scripts
pid_file = /var/run/zarafa-ical.pid

# run server in this path (when not using the -F switch)
running_path = /

# IP Address to bind to (0.0.0.0 for ANY)
server_bind = 0.0.0.0

# wether normal connections can be made to the ical server
ical_enable = { if (${'zarafa-ical'}{status} eq 'enabled') {'yes'} else {'no'}; }

# port which the ical server listens on for normal connections
ical_port = { ${'zarafa-ical'}{TCPPort} || '8088'; }

# wether ssl connections can be made to the ical server
icals_enable = { if (${'zarafa-icals'}{status} eq 'enabled') {'yes'} else {'no'}; }

# port which the ical server listens on for ssl connections
icals_port = { ${'zarafa-icals'}{TCPPort} || '8089'; }

# default connection to the Zarafa server
# Please refer to the administrator manual or manpage why HTTP is used rather than the UNIX socket.
server_socket = http://localhost:{${'zarafa-server'}{TCPPort}||'236';}/zarafa

# Process model, using pthreads (thread) or processes (fork)
process_model = { ${'zarafa-ical'}{process_model} || 'fork'; }

##############################################################
# ICAL LOG SETTINGS

# Logging method (syslog, file)
log_method = { ${'zarafa-ical'}{log_method} || 'file'; }

# Loglevel (0=no logging, 5=full logging)
log_level = { ${'zarafa-ical'}{log_level} || '2'; }

# Logfile for log_method = file, use '-' for stderr
log_file = /var/log/zarafa/ical.log

# Log timestamp - prefix each log line with timestamp in 'file' logging mode
log_timestamp = { ${'zarafa-ical'}{log_timestamp} || '1'; }

##############################################################
# ICAL SSL SETTINGS FOR INCOMING CONNECTIONS

# File with RSA key for SSL
ssl_private_key_file = /home/e-smith/ssl.key/{$SystemName}.{$DomainName}.key

# File with certificate for SSL
ssl_certificate_file = /home/e-smith/ssl.crt/{$SystemName}.{$DomainName}.crt

# Verify client certificate
ssl_verify_client = { ${'zarafa-ical'}{ssl_verify_client} || 'no'; }

# Client verify file and/or path
ssl_verify_file = 
ssl_verify_path =

##############################################################
# OTHER ICAL SETTINGS

# The timezone of the system clock
server_timezone = {$TimeZone}

# The charset of data to expect when the client doesn't specify any
default_charset = { ${'zarafa-ical'}{default_charset} || 'utf-8'; }

# Enable the iCalendar GET method for downloading calendars
enable_ical_get = { ${'zarafa-ical'}{enable_ical_get} || 'yes'; }

mkdir -p /etc/e-smith/templates/etc/zarafa/server.cfg

nano -w /etc/e-smith/templates/etc/zarafa/server.cfg/server.cfg

##############################################################
# SERVER SETTINGS

# IP Address to bind to (0.0.0.0 for ANY)
# Set to 127.0.0.1 if connections should only come from localhost
# and through the webserver proxy
server_bind		= 0.0.0.0

# Accept normal TCP connections (not recommended to disable)
server_tcp_enabled	= { ${'zarafa-server'}{server_tcp_enabled} || 'yes'; }

# Port to bind to
server_tcp_port		= { ${'zarafa-server'}{TCPPort} || '236'; }

# Accept unix pipe connections (not recommended to disable)
server_pipe_enabled	= { ${'zarafa-server'}{server_pipe_enabled} || 'yes'; }

# Unix socket location
server_pipe_name	= /var/run/zarafa
server_pipe_priority    = /var/run/zarafa-prio

# Name for identifying the server in a multi-server environment
server_name = { ${'zarafa-server'}{server_name} || 'Zarafa'; }

# Override the hostname of this server, used by Kerberos SSO if enabled
server_hostname =

# Database engine (mysql)
database_engine		= { ${'zarafa-server'}{database_engine} || 'mysql'; }

# Allow connections from normal users through the unix socket
allow_local_users	= { ${'zarafa-server'}{allow_local_users} || 'yes'; }

# local admin users who can connect to any store (use this for the zarafa-dagent)
# field is SPACE separated
# eg: local_admin_users = root vmail
local_admin_users	= { ${'zarafa-server'}{local_admin_users} || 'root'; }

# e-mail address of the Zarafa System user
system_email_address	= { ${'zarafa-server'}{system_email_address} || 'postmaster@localhost'; }

# drop privileges and run the process as this user
run_as_user		= 

# drop privileges and run the process as this group
run_as_group		= 

# create a pid file for stopping the service via the init.d scripts
pid_file		= /var/run/zarafa-server.pid

# run server in this path (when not using the -F switch)
running_path = /

# session timeout for clients. Values lower than 300 will be upped to 300
# automatically. If the server hears nothing from a client in session_timeout
# seconds, then the session is killed.
session_timeout		= { ${'zarafa-server'}{session_timeout} || '300'; }

# Socket to connect to license server
license_socket		= /var/run/zarafa-licensed

# Time (in seconds) to wait for a connection to the license server before 
# terminating the request.
license_timeout = { ${'zarafa-server'}{license_timeout} || '10'; }

##############################################################
# LOG SETTINGS

# Logging method (syslog, file), syslog facility is 'mail'
log_method		= { ${'zarafa-server'}{log_method} || 'file'; }

# Logfile (for log_method = file, '-' for stderr)
log_file		= /var/log/zarafa/server.log

# Loglevel (0=no logging, 5=full logging)
log_level		= { ${'zarafa-server'}{log_level} || '2'; }

# Log timestamp - prefix each log line with timestamp in 'file' logging mode
log_timestamp		= { ${'zarafa-server'}{log_timestamp} || '1'; }

##############################################################
# AUDIT LOG SETTINGS

# Audit logging is by default not enabled
audit_log_enabled	= { ${'zarafa-server'}{audit_log_enabled} || 'no'; }

# Audit logging method (syslog, file), syslog facility is 'authpriv'
audit_log_method	= { ${'zarafa-server'}{audit_log_method} || 'syslog'; }

# Audit logfile (for log_method = file, '-' for stderr)
audit_log_file		= /var/log/zarafa/audit.log

# Audit loglevel (0=no logging, 1=full logging)
audit_log_level		= { ${'zarafa-server'}{audit_log_level} || '1'; }

# Audit log timestamp - prefix each log line with timestamp in 'file' logging mode
audit_log_timestamp	= { ${'zarafa-server'}{audit_log_timestamp} || '1'; }

##############################################################
# MYSQL SETTINGS (for database_engine = mysql)

# MySQL hostname to connect to for database access
mysql_host		= { ${'zarafa-server'}{mysql_host} || 'localhost'; }

# MySQL port to connect with (usually 3306)
mysql_port		= { ${'zarafa-server'}{mysql_port} || '3306'; }

# The user under which we connect with MySQL
mysql_user		= { ${'zarafa-server'}{DbUser} || 'zarafa'; }

# The password for the user (leave empty for no password)
mysql_password		= { ${'zarafa-server'}{DbPassword}; }

# Override the default MySQL socket to access mysql locally
# Works only if the mysql_host value is empty or 'localhost'
mysql_socket		=

# Database to connect to
mysql_database		= { ${'zarafa-server'}{DbName} || 'zarafa'; }

# Where to place attachments. Value can be 'database' or 'files'
attachment_storage	= { ${'zarafa-server'}{attachment_storage} || 'files'; } 

# When attachment_storage is 'files', use this path to store the files
attachment_path		= /home/e-smith/files/zarafa

# Compression level for attachments when attachment_storage is 'files'.
# Set compression level for attachments disabled=0, max=9
attachment_compression	= { ${'zarafa-server'}{attachment_compression} || '6'; }

##############################################################
#  SSL SETTINGS

# enable SSL support in server
server_ssl_enabled	= { ${'zarafa-ssl'}{server_ssl_enabled} || 'yes'; }

# Listen for SSL connections on this port
server_ssl_port		= { ${'zarafa-ssl'}{TCPPort} || '237'; }

# Required Server certificate, contains the certificate and the private key parts
server_ssl_key_file	= /home/e-smith/ssl.pem/{$SystemName}.{$DomainName}.pem

# Password of Server certificate
server_ssl_key_pass	= { ${'zarafa-server'}{DbPassword}; }

# Required Certificate Authority of server
server_ssl_ca_file	= /home/e-smith/ssl.crt/{$SystemName}.{$DomainName}.crt

# Path with CA certificates, e.g. /etc/ssl/certs
server_ssl_ca_path	= /home/e-smith/ssl.crt

# Path of SSL Public keys of clients
sslkeys_path		= /home/e-smith/ssl.pem

##############################################################
# THREAD SETTINGS

# Number of server threads
# default: 8
threads				=	{ ${'zarafa-server'}{threads} || '8'; }

# Watchdog frequency. The number of watchdog checks per second.
# default: 1
watchdog_frequency	=	{ ${'zarafa-server'}{watchdog_frequency} || '1'; }

# Watchdog max age. The maximum age in ms of a task before a
# new thread is started.
# default: 500
watchdog_max_age	=	{ ${'zarafa-server'}{watchdog_max_age} || '500'; }

# Maximum SOAP keep_alive value
# default: 100
server_max_keep_alive_requests	=	{ ${'zarafa-server'}{server_max_keep_alive_requests} || '100'; }

# SOAP recv timeout value (time between requests)
# default: 5
server_recv_timeout	=	{ ${'zarafa-server'}{server_recv_timeout} || '5'; }

# SOAP read timeout value (time during requests)
# default: 60
server_read_timeout	=	{ ${'zarafa-server'}{server_read_timeout} || '60'; }

# SOAP send timeout value
# default: 60
server_send_timeout	=	{ ${'zarafa-server'}{server_send_timeout} || '60'; }

##############################################################
#  OTHER SETTINGS

# Softdelete clean cycle (in days) 0=never running
softdelete_lifetime	= { ${'zarafa-server'}{softdelete_lifetime} || '30'; }

# Sync lifetime, removes all changes remembered for a client after x days of inactivity
sync_lifetime		= { ${'zarafa-server'}{sync_lifetime} || '365'; }

# Set to 'yes' if all changes (for synchronization) to messages should be logged to the database
sync_log_all_changes = { ${'zarafa-server'}{sync_log_all_changes} || 'no'; }

# Set to 'yes' if you have Kerberos or NTLM correctly configured for single sign-on
enable_sso = { ${'zarafa-server'}{enable_sso} || 'no'; }

# Set to 'yes' if you want to show the GAB to your users
enable_gab = { ${'zarafa-server'}{enable_gab} || 'yes'; }

# Authentication can be through plugin (default, recommended), pam or kerberos
auth_method = { ${'zarafa-server'}{auth_method} || 'plugin'; }

# If auth_method is set to pam, you should provide the pam service name
pam_service = { ${'zarafa-server'}{pam_service} || 'passwd'; }


#############################################################
# CACHE SETTINGS
#
# To see the live cache usage, use 'zarafa-stats --system',
# or send a USR1 signal to the server, and read the logfile.

# Size in bytes of the 'cell' cache (should be set as high as you can afford to set it)
cache_cell_size				= { ${'zarafa-server'}{cache_cell_size} || '268435456'; } 

# Size in bytes of the 'object' cache
cache_object_size			= { ${'zarafa-server'}{cache_object_size} || '5242880'; }

# Size in bytes of the 'indexed object' cache
cache_indexedobject_size	= { ${'zarafa-server'}{cache_indexedobject_size} || '16777216'; }

# Size in bytes of the userquota details
cache_quota_size			= { ${'zarafa-server'}{cache_quota_size} || '1048576'; }

# Lifetime for userquota details
cache_quota_lifetime		= { ${'zarafa-server'}{cache_quota_lifetime} || '1'; }

# Size in bytes of the acl cache
cache_acl_size				= { ${'zarafa-server'}{cache_acl_size} || '1048576'; }

# Size in bytes of the store id/guid cache
cache_store_size			= { ${'zarafa-server'}{cache_store_size} || '1048576'; }

# Size in bytes of the 'user id' cache (this is allocated twice)
cache_user_size				= { ${'zarafa-server'}{cache_user_size} || '1048576'; }

# Size in bytes of the 'user details' cache
cache_userdetails_size		= { ${'zarafa-server'}{cache_userdetails_size} || '26214400'; }

# Lifetime for user details
cache_userdetails_lifetime	= { ${'zarafa-server'}{cache_userdetails_lifetime} || '5'; }

# Size in bytes of the server details (multiserver setups only)
cache_server_size			= { ${'zarafa-server'}{cache_server_size} || '1048576'; }

# Lifetime for server details (multiserver setups only)
cache_server_lifetime	= { ${'zarafa-server'}{cache_server_lifetime} || '30'; }


##############################################################
#  QUOTA SETTINGS

# The default Warning Quota Level. Set to 0 to disable this level.
# The user will receive an email when this level is reached. Value is in Mb. Default value is 0.
quota_warn		= { ${'zarafa-server'}{quota_warn} || '0'; }

# The default Soft Quota Level. Set to 0 to disable this level.
# The user will still receive mail, but sending new mail is prohibited, until objects are removed from the store.
# VALUE is in Mb. Default value is 0.
quota_soft		= { ${'zarafa-server'}{quota_soft} || '0'; }

# The default Hard Quota Level. Set to 0 to disable this level.
# The user can not receive and send mail, until objects are removed from the store.
# Value is in Mb. Default value is 0.
quota_hard		= { ${'zarafa-server'}{quota_hard} || '0'; }

# The default Warning Quota Level for multitenant public stores. Set to 0 to disable this level.
# The tenant administrator will receive an email when this level is reached. Value is in Mb. Default value is 0.
companyquota_warn      = { ${'zarafa-server'}{companyquota_warn} || '0'; }


##############################################################
#  USER PLUGIN SETTINGS

# Name of the plugin that handles users
# Required, default = ldap
# Values: ldap, unix, db, ldapms (available in enterprise license)
user_plugin   = { ${'zarafa-server'}{Plugin} || 'db'; }

# configuration file of the user plugin, examples can be found in /usr/share/zarafa/example-config
{ 
  if (( ${'zarafa-server'}{Plugin} || 'db' ) eq 'unix')
  { 'user_plugin_config	= /etc/zarafa/unix.cfg'; }
  elsif (( ${'zarafa-server'}{Plugin} || 'db' ) eq 'ldap')
  { 'user_plugin_config	= /etc/zarafa/ldap.cfg'; }
} 

# location of the zarafa plugins
# if you have a 64bit distribution, this probably should be changed to /usr/lib64/zarafa
plugin_path		= /usr/lib/zarafa

# scripts which create stores for users from an external source
# used for ldap and unix plugins only
createuser_script		=	/etc/zarafa/userscripts/createuser
deleteuser_script		=	/etc/zarafa/userscripts/deleteuser
creategroup_script		=	/etc/zarafa/userscripts/creategroup
deletegroup_script		=	/etc/zarafa/userscripts/deletegroup
createcompany_script     	=	/etc/zarafa/userscripts/createcompany
deletecompany_script    	=	/etc/zarafa/userscripts/deletecompany

# Set this option to 'yes' to skip the creation and deletion of new users
# The action will be logged, so you can see if your changes to the plugin
# configuration are correct.
user_safe_mode = { ${'zarafa-server'}{user_safe_mode} || 'no'; }

##############################################################
# MISC SETTINGS

# Thread size in KB, default is 512
# WARNING: Do not set too small, your server WILL crash
thread_stacksize = { ${'zarafa-server'}{thread_stacksize} || '512'; }

# Enable multi-tenancy environment
# When set to true it is possible to create tenants within the
# zarafa instance and assign all users and groups to particular
# tenants.
# When set to false, the normal single-tenancy environment is created.
{ 
  if (( ${'zarafa-server'}{Multicompany} || 'no' ) eq 'yes')
  { 'enable_hosted_zarafa = true'; }
  elsif (( ${'zarafa-server'}{Multicompany} || 'no' ) eq 'no')
  { 'enable_hosted_zarafa = false'; }
} 

# Enable multi-server environment
# When set to true it is possible to place users and tenants on
# specific servers.
# When set to false, the normal single-server environment is created.
enable_distributed_zarafa = { ${'zarafa-server'}{enable_distributed_zarafa} || 'false'; }

# Display format of store name
# Allowed variables:
#  %u Username
#  %f Fullname
#  %c Teantname
# default: %f
storename_format = { ${'zarafa-server'}{storename_format} || '%f'; }

# Loginname format (for Multi-tenancy installations)
# When the user does not login through a system-wide unique
# username (like the email address) a unique name is created
# by combining the username and the tenantname.
# With this configuration option you can set how the
# loginname should be built up.
#
# Note: Do not use the = character in the format.
#
# Allowed variables:
#  %u Username
#  %c Teantname 
#
# default: %u
{ 
  if (( ${'zarafa-server'}{Multicompany} || 'no' ) eq 'yes')
  { 'loginname_format = %u.%c'; }
  elsif (( ${'zarafa-server'}{Multicompany} || 'no' ) eq 'no')
  { 'loginname_format = %u'; }
} 

# Set to yes for Windows clients to be able to download the latest
# Zarafa Outlook client from the Zarafa server
client_update_enabled = { ${'zarafa-server'}{client_update_enabled} || 'false'; }

# Place the correct Zarafa Outlook Client in this directory for
# Windows clients to download through the Zarafa server
client_update_path = { ${'zarafa-server'}{client_update_path} || '/var/lib/zarafa/client'; }

# Recieve update information from the client (0 = disabled, 1 = only on error, 2 = log always)
client_update_log_level = { ${'zarafa-server'}{client_update_log_level} || '1'; }

# Log location for the client auto update files
client_update_log_path = /var/log/zarafa/autoupdate

# Everyone is a special internal group, which contains every user and group
# You may want to disable this group from the Global Addressbook by setting
# this option to 'yes'. Administrators will still be able to see the group.
hide_everyone = { ${'zarafa-server'}{hide_everyone} || 'yes'; }

# System is a special internal user, which has super-admin privileges
# You may want to disable this user from the Global Addressbook by setting
# this option to 'yes'. Administrators will still be able to see the user.
hide_system = { ${'zarafa-server'}{hide_system} || 'yes'; } 

# Use Indexing service for faster searching.
# Enabling this option requires the zarafa-indexer service to
# be running.
index_services_enabled = { ${'zarafa-server'}{index_services_enabled} || 'no'; }

# Path to the zarafa-indexer service, this option is only required
# if the server is going to make use of the indexing service.
index_services_path = file:///var/run/zarafa-indexer

# Time (in seconds) to wait for a connection to the zarafa-indexer service
# before terminating the indexed search request.
index_services_search_timeout = { ${'zarafa-server'}{index_services_search_timeout} || '10'; }

# Minimum length of a search term in characters to enable prefix searching
index_services_prefix_chars = { ${'zarafa-server'}{index_services_prefix_chars} || '3'; }

# Allow enhanced ICS operations to speedup synchronization with cached profiles.
# default: yes
enable_enhanced_ics = { ${'zarafa-server'}{enable_enhanced_ics} || 'yes'; }

# Synchronize GAB users on every open of the GAB (otherwise, only on 
# zarafa-admin --sync)
sync_gab_realtime = { ${'zarafa-server'}{sync_gab_realtime} || 'yes'; }

# Disable features for users. Default all features are disabled. This
# list is space separated. Currently valid values: imap
disabled_features = { ${'zarafa-server'}{disabled_features}; }

# Maximum number of deferred records in total
max_deferred_records = { ${'zarafa-server'}{max_deferred_records} || '0'; }

# Maximum number of deferred records per folder
max_deferred_records_folder = { ${'zarafa-server'}{max_deferred_records_folder} || '20'; }

mkdir -p /etc/e-smith/templates/etc/zarafa/unix.cfg

nano -w /etc/e-smith/templates/etc/zarafa/unix.cfg/unix.cfg

{
use esmith::AccountsDB
}
##############################################################
#  UNIX USER PLUGIN SETTINGS
#
# Any of these directives that are required, are only required if the
# userplugin parameter is set to unix.

# Charset used in /etc/passwd for the fullname of a user. Normally this
# is us-ascii, but this can differ according to your setup.
# The charset specified here must be supported by your iconv(1)
# setup. See iconv -l for all charsets.
fullname_charset = iso-8859-15

# Default email domain for constructing new users
# Required, no default
default_domain = { ${'zarafa-server'}{DomainName} || $DomainName; }

# The lowest user id that is considered a regular user
# Optional, default = 1000
min_user_uid = 101

# The highest user id that is considered a regular user
# Optional, default = 10000
max_user_uid = 10000

# A list of user ids that are not considered to be regular users
# Optional, default = empty
# except_user_uids =
except_user_uids = {
$accounts = esmith::AccountsDB->open_ro or die "Could not open AccountsDB";
{
while (($name, $passwd, $uid, $gid, $quota,
    $comment, $gcos, $dir, $shell) = getpwent())
{
$user = $accounts->get($name);
    
$OUT .= "$uid "
    unless $uid <= 101 or (defined $user and $user->prop('type') eq "user");
}
}
}

# The lowest group id that is considered a regular group
# Optional, default = 1000
min_group_gid = 5000

# The highest group id that is considered a regular group
# Optional, default = 10000
max_group_gid = 10000

# A list of group ids that are not considered to be regular groups
# Optional, default = empty
# except_group_gids =
except_group_gids = {
setpwent();
while (($name, $passwd, $uid, $gid, $quota,
    $comment, $gcos, $dir, $shell) = getpwent())
{
$group = $accounts->get($name);
    
$OUT .= "$gid "
    unless $gid < 5000 or (defined $group and $group->prop('type') eq "group");
}
endpwent();
}

# Create a user as non-active when it has this unix shell
non_login_shell = /bin/false

mkdir -p /etc/e-smith/templates/etc/zarafa/indexer.cfg

nano -w /etc/e-smith/templates/etc/zarafa/indexer.cfg/indexer.cfg

##############################################################
# INDEXER SERVICE SETTINGS

# Location of the index files
index_path          =   /var/lib/zarafa/index/

# run as specific user
run_as_user         =

# run as specific group
run_as_group        =

# control pid file
pid_file            =   /var/run/zarafa-indexer.pid

# run server in this path (when not using the -F switch)
running_path        =   /

# Force remove lockfiles on startup. Leaves possibly corrupt indexes on disk.
# See log for info of removed locks.
cleanup_lockfiles	=	{ ${'zarafa-indexer'}{cleanup_lockfiles} || 'no'; }

# Limit the number of results returned (0 = don't limit)
limit_results		=	{ ${'zarafa-indexer'}{limit_results} || '0'; }

##############################################################
# CONNECTION TO ZARAFA SERVER SETTINGS
#

# Socket to find the connection to the Zarafa server.
# Use https to reach servers over the network
server_socket   =   file:///var/run/zarafa

# Login to the Zarafa server using this SSL Key
sslkey_file         = /etc/zarafa/ssl/indexer.pem

# The password of the SSL Key
sslkey_pass         = replace-with-server-cert-password

##############################################################
# LISTEN SETTINGS
#

# binding address
# To setup for multi-server, use: http://0.0.0.0:port or https://0.0.0.0:port
server_bind_name   =   file:///var/run/zarafa-indexer

# File with RSA key for SSL, used then server_bind_name uses https
ssl_private_key_file= /etc/zarafa/indexer/privkey.pem

# File with certificate for SSL, used then server_bind_name uses https
ssl_certificate_file= /etc/zarafa/indexer/cert.pem

##############################################################
# LOG SETTINGS

# Logging method (syslog, file)
log_method          =   { ${'zarafa-indexer'}{log_method} || 'file'; }

# Loglevel (0=no logging, 5=full logging)
log_level           =   { ${'zarafa-indexer'}{log_level} || '2'; }

# Logfile for log_method = file, use '-' for stderr
log_file            =   /var/log/zarafa/indexer.log

# Log timestamp - prefix each log line with timestamp in 'file' logging mode
log_timestamp       =   { ${'zarafa-indexer'}{log_timestamp} || '1'; }

##############################################################
# ADVANCED INDEXER SETTINGS

# Indexing interval (in minutes)
index_interval      =   { ${'zarafa-indexer'}{index_interval} || '5'; }

# Max number of indexing threads
index_threads       =   { ${'zarafa-indexer'}{index_threads} || '1'; }

# Max length of indexed data
index_max_field_length  = { ${'zarafa-indexer'}{index_max_field_length} || '10000'; }

# Number of documents per segments before segments are merged
index_merge_factor      = { ${'zarafa-indexer'}{index_merge_factor} || '10'; }

# Max number of documents kept in memory before CLucene will write a new segment to disk
index_max_buffered_docs	= { ${'zarafa-indexer'}{index_max_buffered_docs} || '10'; }

# Minumum amount of documents in memory before index is written to disk
index_min_merge_docs    = { ${'zarafa-indexer'}{index_min_merge_docs} || '10'; }

# Maximum number of documents in memory before index is written to disk
index_max_merge_docs    = { ${'zarafa-indexer'}{index_max_merge_docs} || '2147483647'; }

# The fraction of terms in the "dictionary" which should be stored in RAM.
index_term_interval		= { ${'zarafa-indexer'}{index_term_interval} || '128'; }

# Timout for keeping Lucene cache open
index_cache_timeout		= { ${'zarafa-indexer'}{index_cache_timeout} || '0'; }

##############################################################
# ATTACHMENT INDEX SETTINGS

# Should attachments be indexed
index_attachments	= { ${'zarafa-indexer'}{index_attachments} || 'no'; }

# Maximum file size for attachments (in kb)
index_attachment_max_size = { ${'zarafa-indexer'}{index_attachment_max_size} || '5120'; }

# Scripts to attachment to text parser
index_attachment_parser = /etc/zarafa/indexerscripts/attachments_parser

# Maximum amount of memory which a parser may use in bytes (set to 0 for unlimited)
# If this maximum is exceeded the parser will be killed
index_attachment_parser_max_memory = { ${'zarafa-indexer'}{index_attachment_parser_max_memory} || '0'; } 

# Maximim amount of CPU time (in seconds) which a parser may spend on parsing (set to 0 for unlimited)
# If this maximum is exceeded the parser will be killed
index_attachment_parser_max_cputime = { ${'zarafa-indexer'}{index_attachment_parser_max_cputime} || '0'; }

# Filter out parsing of attachment which has a mimetype from this list
# Only the first part of the mime needs to be given, like 'image'.
# This field is SPACE separated
index_attachment_mime_filter =

# Filter out parsing of attachment which has an extension from this list
# (only tested if mimetype was not found on the attachment)
# This field is SPACE separated
index_attachment_extension_filter =

##############################################################
# INDEX FILTERS

# Don't index users from the following list
# field is SPACE separated
index_block_users		=

# Don't index users from the following companies
# field is SPACE separated
index_block_companies	= 

# Index users only from the following servers (see server.cfg#server_name)
# If left empty, all servers will be allowed.
# field is SPACE separated
index_allow_servers		= 

mkdir -p /etc/e-smith/templates/etc/zarafa/monitor.cfg

nano -w /etc/e-smith/templates/etc/zarafa/monitor.cfg/monitor.cfg

##############################################################
# ZARAFA MONITOR SETTINGS

# Server unix socket location
server_socket	=	file:///var/run/zarafa

# drop privileges and run the process as this user
run_as_user = 

# drop privileges and run the process as this group
run_as_group = 

# create a pid file for stopping the service via the init.d scripts
pid_file = /var/run/zarafa-monitor.pid

# run server in this path (when not using the -F switch)
running_path = /

##############################################################
# ZARAFA MONITOR LOG SETTINGS

# Logging method (syslog, file)
log_method	=	{ ${'zarafa-monitor'}{log_method} || 'file'; }

# Loglevel (0=no logging, 5=full logging)
log_level	=	{ ${'zarafa-monitor'}{log_level} || '2'; }

# Logfile for log_method = file
log_file	=	/var/log/zarafa/monitor.log

# Log timestamp - prefix each log line with timestamp in 'file' logging mode
log_timestamp	=	{ ${'zarafa-monitor'}{log_timestamp} || '1'; }

##############################################################
# MONITOR SSL LOGIN SETTINGS
# 
# Note: server_socket must be set to https://servername:portname/zarafa
#       to use this type of login method

# Login to the Zarafa server using this SSL Key
sslkey_file = /etc/zarafa/ssl/monitor.pem

# The password of the SSL Key
sslkey_pass = replace-with-monitor-cert-password

##############################################################
# ZARAFA MONITOR INTERVAL SETTINGS

# Quota check interval (in minutes)
quota_check_interval = { ${'zarafa-monitor'}{quota_check_interval} || '15'; }

##############################################################
# ZARAFA MONITOR MAIL QUOTA SETTINGS

# Quota mail interval in days
mailquota_resend_interval = { ${'zarafa-monitor'}{mailquota_resend_interval} || '1'; }

# Templates to be used for quota emails which are send to the user
# when the various user quota levels have been exceeded.
userquota_warning_template  =   /etc/zarafa/quotamail/userwarning.mail
userquota_soft_template     =   /etc/zarafa/quotamail/usersoft.mail
userquota_hard_template     =   /etc/zarafa/quotamail/userhard.mail

# Templates to be used for quota emails which are send to the company administrators
# when the various company quota levels have been exceeded.
companyquota_warning_template   =   /etc/zarafa/quotamail/companywarning.mail
companyquota_soft_template      =   /etc/zarafa/quotamail/companysoft.mail
companyquota_hard_template      =   /etc/zarafa/quotamail/companyhard.mail

mkdir -p /etc/e-smith/templates/etc/zarafa/licensed.cfg

nano -w /etc/e-smith/templates/etc/zarafa/licensed.cfg/licensed.cfg

##############################################################
# SERVER SETTINGS

# The socket that the license server will run on
# default: /var/run/zarafa-licensed
server_pipe_name = /var/run/zarafa-licensed

# The URL on which we can contact zarafa-server
# default: file:///var/run/zarafa
server_socket = file:///var/run/zarafa-prio

# Login to the Zarafa server using this SSL Key
sslkey_file         = /etc/zarafa/ssl/licensed.pem

# The password of the SSL Key
sslkey_pass         = replace-with-server-cert-password

# License path (should contain 'base' and CALs in other files)
license_path		= /etc/zarafa/license

# drop privileges and run the process as this user
run_as_user		= 

# drop privileges and run the process as this group
run_as_group		= 

# create a pid file for stopping the service via the init.d scripts
pid_file		= /var/run/zarafa-licensed.pid

# run server in this path (when not using the -F switch)
running_path = /

##############################################################
# LOG SETTINGS

# Logging method (syslog, file)
log_method		= { ${'zarafa-licensed'}{log_method} || 'file'; }

# Logfile (for log_method = file, '-' for stderr)
log_file		= /var/log/zarafa/licensed.log

# Loglevel (0=no logging, 5=full logging)
log_level		= { ${'zarafa-licensed'}{log_level} || '2'; }

# Log timestamp - prefix each log line with timestamp in 'file' logging mode
log_timestamp		= { ${'zarafa-licensed'}{log_timestamp} || '1'; }

mkdir -p /etc/e-smith/templates/etc/zarafa/spooler.cfg

nano -w /etc/e-smith/templates/etc/zarafa/spooler.cfg/spooler.cfg

##############################################################
# SPOOLER SETTINGS

# Outgoing mailserver name or IP address
smtp_server	=	localhost

# Port number for outgoing mailserver
smtp_port = { ${'zarafa-spooler'}{smtp_port} || '25'; }

# Server unix socket location
server_socket	=	file:///var/run/zarafa

# drop privileges and run the process as this user
run_as_user = 

# drop privileges and run the process as this group
run_as_group = 

# create a pid file for stopping the service via the init.d scripts
pid_file = /var/run/zarafa-spooler.pid

# run server in this path (when not using the -F switch)
running_path = /

##############################################################
# SPOOLER LOG SETTINGS

# Logging method (syslog, file)
log_method	=	{ ${'zarafa-spooler'}{log_method} || 'file'; }

# Loglevel (0=no logging, 5=full logging)
log_level	=	{ ${'zarafa-spooler'}{log_level} || '3'; }

# Logfile for log_method = file
log_file	=	/var/log/zarafa/spooler.log

# Log timestamp - prefix each log line with timestamp in 'file' logging mode
log_timestamp	=	{ ${'zarafa-spooler'}{log_timestamp} || '1'; }


##############################################################
# SPOOLER SSL LOGIN SETTINGS
# 
# Note: server_socket must be set to https://servername:portname/zarafa
#       to use this type of login method

# Login to the Zarafa server using this SSL Key
sslkey_file = /etc/zarafa/ssl/spooler.pem

# The password of the SSL Key
sslkey_pass = replace-with-server-cert-password

##############################################################
# SPOOLER THREAD SETTINGS

# Maximum number of threads used to send outgoing messages
# Default: 5
max_threads = { ${'zarafa-spooler'}{max_threads} || '5'; }

##############################################################
# SPOOLER FAXING SETTINGS

# When sending an email that must go to a fax address, the address
# will be rewritten to <phonenumber>@<fax_domain>
fax_domain = { ${'zarafa-spooler'}{fax_domain} || 'fax.local'; }

# If the received number starts with a '+', it will be replaced by
# the fax_international value.
# eg. +3112345678@fax.local will be rewritten to 003112345678@fax.local
fax_international = { ${'zarafa-spooler'}{fax_international} || '00'; }

##############################################################
# SPOOLER DELEGATE SETTINGS

# Set this value to 'yes' to let the spooler always send emails with
# delegates (other user than yourself in the From: header)
# In installations before 6.20, this value was always 'yes'.
# IMPORTANT: This feature overrides "send-as" functionality.
always_send_delegates = { ${'zarafa-spooler'}{always_send_delegates} || 'no'; }

# Set this value to 'no' if you do NOT want to allow redirected e-mails
# being sent with their original 'FROM' header
allow_redirect_spoofing = { ${'zarafa-spooler'}{allow_redirect_spoofing} || 'yes'; }

# Copies the sent mail of delegates and send-as mails in the
# "Sent Items" folder of the representer.
copy_delegate_mails = { ${'zarafa-spooler'}{copy_delegate_mails} || 'yes'; }

# Allow to forward and sent a meeting request as delegate Zarafa and
# SMTP user.
allow_delegate_meeting_request = { ${'zarafa-spooler'}{allow_delegate_meeting_request} || 'yes'; }

# Allow users to send email to the 'everyone' group
allow_send_to_everyone = { ${'zarafa-spooler'}{allow_send_to_everyone} || 'yes'; }

##############################################################
# SPOOLER OUTPUT SETTINGS

# Set this value to 'yes' to always send meeting request information
# using TNEF method (winmail.dat attachments)
# Otherwise, the meeting request information is sent using
# iCalendar (calendar.ics attachment).
always_send_tnef = { ${'zarafa-spooler'}{always_send_tnef} || 'no'; }

# Send all e-mail always using the UTF-8 charset.
# Normally, the requested charset is used, which can be any charset.
always_send_utf8 = { ${'zarafa-spooler'}{always_send_utf8} || 'no'; }

# The us-ascii charset will be upgraded to this charset, to allow more
# use of high-characters. Not used when always_send_utf8 is enabled. 
charset_upgrade = { ${'zarafa-spooler'}{charset_upgrade} || 'windows-1252'; }

##############################################################
# SPOOLER GROUP EXPANSION

# Set this value to 'yes' if groups should be expanded to their
# members; This means that the receiving party will see the names
# of the group members in the To: header for example. If set to
# 'no', the name of the group will appear in the headers.
#
# Note: groups with email addresses are never expanded
expand_groups = { ${'zarafa-spooler'}{expand_groups} || 'no'; }

##############################################################
# SPOOLER ARCHIVING SETTINGS

# Enable archive_on_send to automatically archive all outgoing
# messages.
# This will do nothing if no archive is attached to the source mailbox.
archive_on_send = { ${'zarafa-spooler'}{archive_on_send} || 'no'; }

mkdir -p /etc/e-smith/templates/etc/zarafa/dagent.cfg

nano -w /etc/e-smith/templates/etc/zarafa/dagent.cfg/dagent.cfg

##############################################################
# DAGENT SETTINGS

# connection to the zarafa server
server_socket	=	file:///var/run/zarafa

##############################################################
# DAGENT SSL LOGIN SETTINGS
# 
# Note: server_socket must be set to https://servername:portname/zarafa
#       to use this type of login method

# Login to the Zarafa server using this SSL Key
sslkey_file = /etc/zarafa/ssl/dagent.pem

# The password of the SSL Key
sslkey_pass = replace-with-dagent-cert-password

##############################################################
# DAGENT LOG SETTINGS

# Logging method (syslog, file)
log_method	=	{ ${'zarafa-dagent'}{log_method} || 'file'; }

# Loglevel (0=no logging, 5=full logging)
log_level	=	{ ${'zarafa-dagent'}{log_level} || '2'; }

# Logfile for log_method = file, use '-' for stderr
log_file = /var/log/zarafa/dagent.log

# Log timestamp - prefix each log line with timestamp in 'file' logging mode
log_timestamp	=	{ ${'zarafa-dagent'}{log_timestamp} || '1'; }

# Log raw message to a file
log_raw_message = { ${'zarafa-dagent'}{log_raw_message} || 'no'; }

# Log raw messages path
log_raw_message_path = /tmp

##############################################################
# DAGENT LMTP SETTINGS
#  start dagent with -d to create an lmtp daemon of the zarafa-dagent

# binding address for LMTP daemon
# change to 0.0.0.0 if you require connections over the network
server_bind = 127.0.0.1

# LMTP port to listen on for LMTP connections
lmtp_port = { ${'zarafa-dagent'}{lmtp_port} || '2003'; }

# Maximum LMTP threads that ca be running simultaneously
# This is also limited by your SMTP server. (20 is the postfix default concurrency limit)
lmtp_max_threads = { ${'zarafa-dagent'}{lmtp_max_threads} || '20'; }

# Process model for LMTP daemon, using pthreads (thread) or processes (fork)
process_model = { ${'zarafa-dagent'}{process_model} || 'fork'; }

# run as specific user in LMTP mode.
#   make sure this user is listed in local_admin_users in your zarafa server config
#   or use SSL connections with certificates to login
run_as_user =

# run as specific group in LMTP mode.
run_as_group =

# control pid file
pid_file = /var/run/zarafa-dagent.pid

# The following e-mail header will mark the mail as spam, so the mail
# is placed in the Junk Mail folder, and not the Inbox.
# The name is case insensitive.
# set to empty to not use this detection scheme.
spam_header_name = { ${'zarafa-dagent'}{spam_header_name} || 'X-Spam-Status'; }

# If the above header is found, and contains the following value
# the mail will be considered as spam.
# Notes: 
#  - The value is case insensitive.
#  - Leading and trailing spaces are stripped.
#  - The word 'bayes' also contains the word 'yes'.
spam_header_value = { ${'zarafa-dagent'}{spam_header_value} || 'Yes'; }

##############################################################
# DAGENT ARCHIVING SETTINGS

# Enable archive_on_delivery to automatically archive all incoming
# messages on delivery.
# This will do nothing if no archive is attached to the target mailbox.
archive_on_delivery = { ${'zarafa-dagent'}{archive_on_delivery} || 'no'; }

##############################################################
# DAGENT RULE SETTINGS
# Enable the addition of X-Zarafa-Rule-Action headers on messages
# that have been forwarded or replied by a rule.
# Default: yes
set_rule_headers = yes

nano -w /etc/e-smith/templates-user/.qmail/80Zarafa

{
   my $zarafa = $user->prop('zarafa') || 'disabled';
   my $zarafa2 = ${'zarafa-server'}{GlobalForward} || 'disabled';

   if ($zarafa eq 'enabled' || $zarafa2 eq 'enabled')
   { return "| /usr/bin/zarafa-dagent -q $USERNAME ; if [ \$\? -ne 0 ] ; then exit -1; else exit 99; fi;"
   }
}

nano -w /etc/e-smith/templates-user/.qmail-junkmail/01Zarafa

{
    # vim: ft=perl:
    die "USERNAME not set." unless defined ($USERNAME);

    use esmith::AccountsDB;
    $adb = esmith::AccountsDB->open_ro or die "Couldn't open AccountsDB";

    $user = $adb->get($USERNAME) or die "No user $USERNAME in AccountsDB";

    my $zarafa = $user->prop('zarafa') || 'disabled';
    return "| /usr/bin/zarafa-dagent -qj $USERNAME ; if [ \$\? -ne 0 ] ; then exit -1; else exit 99; fi;"
           if ($zarafa eq 'enabled');
}

ONLY FOR FIRST INSTALLATION : Execute zarafa-install :

If you are using SME Server 8.0 64-bit version, you have to create a symbolic link in '/usr/lib/zarafa' to '/usr/lib64/zarafa'

/bin/chmod 554 /etc/e-smith/events/actions/zarafa-install
/etc/e-smith/events/actions/zarafa-install
signal-event post-upgrade; signal-event reboot

UPGRADING : Execute zarafa-update :

Search in the Zarafa-releasenotes for new keys in the config-files and change the config-templates with these new keys

http://doc.zarafa.com/7.0/Release_Notes/en-US/html-single/
/etc/e-smith/events/actions/zarafa-update
signal-event post-upgrade; signal-event reboot


Managing Zarafa-users/companies :

With Unix-plugin

Zarafa-users are created with the creation of a SME-user, but you have to enable delivery to zarafa for these SME-users.

Enable maildelivery to zarafa for a user :
db accounts setprop [USERNAME] zarafa enabled
/etc/e-smith/events/actions/qmail-update-user
Disable maildelivery to zarafa for a user :
db accounts setprop [USERNAME] zarafa disabled
/etc/e-smith/events/actions/qmail-update-user
Enable mail delivery to zarafa for ALL users (NOT RECOMMANDED - cf. junkmail-template not adjusted for GlobalForward) :
config setprop zarafa-server GlobalForward enabled
/etc/e-smith/events/actions/qmail-update-user
Other options for managing users
zarafa-admin --help

With DB-plugin

Create company (in a Multi-company-environment)
/etc/e-smith/events/actions/zarafa-create-company
Create user
/etc/e-smith/events/actions/zarafa-create-user
Disable maildelivery to zarafa for a user :
db accounts setprop [USERNAME] zarafa disabled
/etc/e-smith/events/actions/qmail-update-user
Other options for managing users/companies
zarafa-admin --help

Usefull commands :

Change db-entries (Change default-values in zarafa-config-files)

config setprop [zarafa-service] [key] [value]
/etc/e-smith/events/actions/zarafa-expand-templates
/etc/e-smith/events/actions/zarafa-services restart
Change loglevel to 5 (= max. (default = 2))
config setprop zarafa-server log_level 5
config setprop zarafa-dagent log_level 5
config setprop zarafa-spooler log_level 5
config setprop zarafa-monitor log_level 5
config setprop zarafa-ical log_level 5
config setprop zarafa-gateway log_level 5
config setprop zarafa-licensed log_level 5
config setprop zarafa-indexer log_level 5
/etc/e-smith/events/actions/zarafa-expand-templates
/etc/e-smith/events/actions/zarafa-services restart
Change index-interval to 60 minutes (= max. (default = 5))
config setprop zarafa-indexer index_interval 60
/etc/e-smith/events/actions/zarafa-expand-templates
/etc/e-smith/events/actions/zarafa-services restart
Setting system-email-address
config setprop zarafa-server system_email_address [admin@mydomain.com] 
/etc/e-smith/events/actions/zarafa-expand-templates
/etc/e-smith/events/actions/zarafa-services restart

Debugging Z-push

Disable (debugging is enabled by default in this howto)
rm -f /var/www/html/z-push/debug.txt
Enable after disabling (debugging is enabled by default in this howto)
/bin/touch /var/www/html/z-push/debug.txt
/bin/chown www:www /var/www/html/z-push/debug.txt
/bin/chmod 755 /var/www/html/z-push/debug.txt

View userdetails

zarafa-admin --details [user]

Setting send-emailadres for a user

zarafa-admin -u [user] -e [send-emailadres]

Quota-settings

zarafa-admin -u [user] --qo y --qw 1600 --qs 1800 --qh 2000

Give a user administrator-privileges

zarafa-admin -u [user] -a y

Usefull plugins :

Password-plugin for webaccess (ONLY FOR DB-PLUGIN)

Dev-page

After installation : in /var/lib/zarafa-webaccess/plugins/passwd/dialogs/pwdchange.php, change this line :

$passwd_cmd = "/usr/local/bin/zarafa-passwd -u %s -o %s -p %s";

to this :

$passwd_cmd = "/usr/bin/zarafa-passwd -u '%s' -o '%s' -p '%s'";

Webmail :

Access with a browser,

https://server/zarafa
https://server/webaccess
https://server/webmail (with Horde disabled '/server-manager > Email > Webmail Access')
https://server/webapp (NEW VERSION OF WEBACCESS)

Connecting Outlook :

On your Windowsclients, execute zarafaclient.msi (Moved earlier to an installshare in your network - cf. supra)
Configure Outlook (point it to your zarafaserver with the credentials of a created Zarafa-user (if DB-plugin : create Zarafa-users first))

Connecting other clients :

IMAP/POP3

The default ports for Zarafa are 8000 + default values

  • so imap = 8143, imaps = 8993
  • so pop3 = 8110, pop3s = 8995

Zarafa-documentation :

Zarafa Administrator Manual

Zarafa Administrator Manual
Release notes (changes in the Zarafa-configfiles)

Help for the zarafa-admin-tool

zarafa-admin --help

man-pages

services-man-pages
man zarafa-server
man zarafa-monitor
man zarafa-dagent
man zarafa-gateway
man zarafa-spooler
man zarafa-ical
man zarafa-indexer
man zarafa-licensed
configuation-man-pages
man zarafa-server.cfg
man zarafa-monitor.cfg
man zarafa-dagent.cfg
man zarafa-gateway.cfg
man zarafa-spooler.cfg
man zarafa-ical.cfg
man zarafa-indexer.cfg
man zarafa-licensed.cfg
man zarafa-unix.cfg