}

# UNIX sockets start with a slash and are absolute paths
# you can use a maxchild=# to limit the maximum number of forks of a service
# you can use babysit=true and maxforkrate=# to keep tight tabs on the service
# most services also accept -U (limit number of reuses) and -T (timeout)
SERVICES {
@!@
if configRegistry.has_key('mail/cyrus/murder/backend/id') and configRegistry['mail/cyrus/murder/backend/id'] != '':
	backend_emailId = configRegistry['mail/cyrus/murder/backend/id']
else:
	backend_emailId = "%s@%s" % ('.'.join([ configRegistry['hostname'], configRegistry.get('domainname','undefined') ]) , configRegistry.get('domainname','undefined'))
if configRegistry.has_key('mail/cyrus/murder/frontend/id') and configRegistry['mail/cyrus/murder/frontend/id'] != '':
	frontend_emailId = configRegistry['mail/cyrus/murder/frontend/id']
else:
	frontend_emailId = "%s@%s" % ('.'.join([ configRegistry['hostname'], configRegistry.get('domainname','undefined') ]) , configRegistry.get('domainname','undefined'))

# If we run without a Cyrus Murder Master MUPDATE server
# or if we have registered as a 'kolab2' service provider (aka 'backend' or 'spool')
if not (configRegistry.has_key('mail/cyrus/murder/master') and configRegistry['mail/cyrus/murder/master'] != '') \
   or (configRegistry.has_key('mail/cyrus/murder/backends') \
       and backend_emailId in configRegistry['mail/cyrus/murder/backends'].split(' ')):
	print '\t# --- Normal cyrus spool, or Murder backends ---'

	bindprefix = ''
	if configRegistry.has_key('mail/cyrus/murder/backend/interface') and configRegistry['mail/cyrus/murder/backend/interface'] != '':
		interface=configRegistry['mail/cyrus/murder/backend/interface']
		ucrVariable='interfaces/' + interface + '/address'
		if configRegistry.has_key(ucrVariable) and configRegistry[ucrVariable] != '':
			bindprefix = "%s:" % configRegistry[ucrVariable]

	if configRegistry.has_key('mail/cyrus/imap') and configRegistry['mail/cyrus/imap'] == 'yes':

		if configRegistry.has_key( 'mail/cyrus/imap/maxchilds' ):
			maxchild = configRegistry[ 'mail/cyrus/imap/maxchilds' ]
		else:
			maxchild = '400'

		print '\timap		cmd="imapd -U 30" listen="%simap" prefork=0 maxchild=%s' % (bindprefix, maxchild)
		print '\timaps		cmd="imapd -s -U 30" listen="%simaps" prefork=0 maxchild=%s' % (bindprefix, maxchild)

	if configRegistry.has_key('mail/cyrus/pop') and configRegistry['mail/cyrus/pop'] == 'yes':
		if configRegistry.has_key( 'mail/cyrus/pop/maxchilds' ):
			maxchild = configRegistry[ 'mail/cyrus/pop/maxchilds' ]
		else:
			maxchild = '400'

		print '\tpop3		cmd="pop3d -U 30" listen="%spop3" prefork=0 maxchild=%s' % (bindprefix, maxchild)
		print '\tpop3s		cmd="pop3d -s -U 30" listen="%spop3s" prefork=0 maxchild=%s' % (bindprefix, maxchild)

	print'''
	# At least one form of LMTP is required for delivery
	# (you must keep the Unix socket name in sync with imap.conf)
'''
	if bindprefix:
		# don't use preauth (-a) when binding to external IPs, real authentication needed
		print '\tlmtp		cmd="lmtpd" listen="%s2003" prefork=0 maxchild=20' % bindprefix
		print '\tlmtpunix	cmd="lmtpd" listen="/var/lib/imap/socket/lmtp" prefork=0 maxchild=20'
	else:
		print '\tlmtp		cmd="lmtpd -a" listen="localhost:2003" prefork=0 maxchild=20'
		print '\tlmtpunix	cmd="lmtpd" listen="/var/lib/imap/socket/lmtp" prefork=0 maxchild=20'
	print'''
	# ----------------------------------------------

	# useful if you need to give users remote access to sieve
	# by default, we limit this to localhost in Debian'''

	if configRegistry.has_key( 'mail/cyrus/sieve/maxchilds' ):
		maxchild = configRegistry[ 'mail/cyrus/sieve/maxchilds' ]
	else:
		maxchild = '400'
	if configRegistry.has_key('mail/cyrus/sieve/listen_host') and configRegistry['mail/cyrus/sieve/listen_host']:
		if configRegistry['mail/cyrus/sieve/listen_host'] == "all":
			print'\tsieve		cmd="timsieved" listen="sieve" prefork=0 maxchild=%s' % maxchild
		else:
			print'\tsieve		cmd="timsieved" listen="%s:sieve" prefork=0 maxchild=%s' % ( configRegistry['mail/cyrus/sieve/listen_host'], maxchild )
	else:
	    print'\tsieve		cmd="timsieved" listen="localhost:sieve" prefork=0 maxchild=%s' % maxchild

elif configRegistry.has_key('mail/cyrus/murder/frontends') and frontend_emailId in configRegistry['mail/cyrus/murder/frontends'].split(' '):
	print'\n\t# useful if you need to give users remote access to sieve'
	print'\t# by default, we limit this to localhost in Debian'

	if configRegistry.has_key( 'mail/cyrus/sieve/maxchilds' ):
		maxchild = configRegistry[ 'mail/cyrus/sieve/maxchilds' ]
	else:
		maxchild = '400'
	if configRegistry.has_key('mail/cyrus/sieve/listen_host') and configRegistry['mail/cyrus/sieve/listen_host']:
		if configRegistry['mail/cyrus/sieve/listen_host'] == "all":
			print'\tsieve		cmd="timsieved" listen=":sieve" prefork=0 maxchild=%s' % maxchild
		else:
			print'\tsieve		cmd="timsieved" listen="%s:sieve" prefork=0 maxchild=%s' % ( configRegistry['mail/cyrus/sieve/listen_host'], maxchild )
	else:
	    print'\tsieve		cmd="timsieved" listen="localhost:sieve" prefork=0 maxchild=%s' % maxchild

print '\tptloader cmd="ptloader" listen="/var/lib/imap/ptclient/ptsock" prefork=0'
@!@

	# this one is needed for the notification services
#notify		cmd="notifyd" listen="/var/lib/imap/socket/notify" proto="udp" prefork=1

