This HowTo is from adapted from an e-mail exchange on the Sork mailing list. It is a discussion of setting up Sork's vacation module
for use with an ldap based system, using gnarwl as the server-side vacation program. The software used is:
MTA: postfix
vacation program: gnarwl
LDAP: openldap 2.2.13-4
Horde version: 3.1.3
vacation version: 3.0
(For those who don't want to use gnarwl, a "traditional" vacation program for ldap is available at http://www.etc.msys.ch/sources/ldapvacation/).
Note for freebsd user. Downloaded gnarwl package does not support openldap, build from port instead.
First, define a postfix transport map for your specific internal autoreply domain.
If your domain is "example.com" and your autoreply domain is to be "autoreply.example.com", then you would add the following to
/etc/postfix/transport:
autoreply.example.com gnarwl:example.com
Next, create the database files from the above file. The following command should create the appropriate transport.db file:
postmap hash:transport
Next add the transport to the postfix main.cf file in the "TRANSPORT MAPS" section:
TRANSPORT MAPS
transport_maps = hash:/etc/postfix/transport
Now add a new service to the /etc/postfix/master.cf file:
gnarwl autoresponder
gnarwl unix - n n - - pipe
flags=F user=gnarwl argv=/usr/bin/gnarwl -a ${user}@${nexthop} -s ${sender}
Create an LDAP vacation alias map called ldap-virtual_alias_maps-vacation.cf:
server_host = ldap://ldap.example.com
version = 3
server_port = 389
search_base = ou=mail,...
query_filter = (&(objectClass=MailAccount)(objectClass=Vacation)(mail=%s)(accountActive=TRUE)(vacationActive=TRUE))
result_attribute = mail
result_filter = %s,%u@autoreply.example.com
bind = no
Of course, the above needs to reflect your ldap environment...
Append the alias map to LDAP's main.cf file (make sure it's the first map listed):
virtual_alias_maps =
ldap:/etc/postfix/ldap-virtual_alias_maps-vacation.cf,
ldap:/etc/postfix/ldap-virtual_alias_maps.cf
after those changes, reload postfix:
postfix reload
Extend your LDAP with the vacation schema and setup a test account. An example ldif follows:
dn:mail=vacationtest@example.com,...
objectClass: top
objectClass: Vacation
mail: vacationtest@example.com
accountActive: TRUE
[... other mail specific attributes ...]
vacationActive: TRUE
vacationInfo:: [vacation message has to be utf-8 encoded and also base64 if necessary]
After loading the above ldif, test your postfix alias vacation lookup map:
postmap -v -q vacationtest@example.com
ldap:/etc/postfix/ldap-virtual_alias_maps-vacation.cf
This should return the following if the vacation has been enabled, otherwise nothing.
If this works so far, configure gnawrl to suit your needs (only the ldap part and the header config is included):
Edit gnarwl.cfg and change the following lines:
server ldap.example.com
protocol 3
base ou=mail...
queryfilter
(&(objectClass=MailAccount)(objectClass=Vacation)(mail=$recepient)(accountActive=TRUE)(vacationActive=TRUE))
mta /usr/sbin/sendmail $sender
charset
forceheader /var/lib/gnarwl/header-utf8.txt
loglevel 3
Create the file /var/lib/gnarwl/header-utf8.txt and add the content shown below:
From: $fullname <$recepient>
To: $sender
X-mailer: GNARWL
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Subject: Re: $subject
Finally you will have to configure the sork vacation app with the ldap driver. This should be an easy task now ;)
Remember, that you have to configure/specify the vacation related attributes.