# # use gmake instead BSD make # CONFIGURE_DIR=.. M4_DIR=../m4 ACCESS_DIR=.. DNSBLLIST_DIR=.. ACLS_DIR=../acls FEATURES_DIR=../features SITE_DIR=../site SYSTEMFILTERS_DIR=../system_filters DELIVERIES_DIR=../deliveries VIRT_DOMAINS_DIR=../virt_domains PERL_DIR=../perl ### for make #MAP_SRC=../mailertable ../aliases ../virt_aliases ../virtusertasble ${VIRT_DOMAINS_DIR}/*.aliases ${VIRT_DOMAINS_DIR}/*.virtusertable #MAP_OBJ= #.for _f in ${MAP_SRC} userdb #.if exists(${_f}) #MAP_OBJ+=${_f}.db #.endif #.endfor ### for gmake XARGS_L_I += $(shell test "`uname`" = "FreeBSD" && echo -n 'xargs -L 1 -I ') XARGS_L += $(shell test "`uname`" = "FreeBSD" && echo -n 'xargs -L 1 ') EXIM_USER += $(shell test "`uname`" = "FreeBSD" && echo -n 'mailnull') XARGS_L_I += $(shell test "`uname`" = "Linux" && echo -n 'xargs -l1 -i') XARGS_L += $(shell test "`uname`" = "Linux" && echo -n 'xargs -l1 ') EXIM_USER += $(shell test "`uname`" = "Linux" && echo -n 'exim') MAP_OBJ += $(shell test -f ../mailertable && echo ../mailertable.db) MAP_OBJ += $(shell test -f ../aliases && echo ../aliases.db) MAP_OBJ += $(shell test -f ../virt_aliases && echo ../virt_aliases.db) MAP_OBJ += $(shell test -f ../virtusertable && echo ../virtusertable.db) MAP_OBJ += $(shell ls ${VIRT_DOMAINS_DIR}/*.aliases 2>/dev/null | ${XARGS_L_I}map echo ${VIRT_DOMAINS_DIR}/map.db) MAP_OBJ += $(shell ls ${VIRT_DOMAINS_DIR}/*.virtusertable 2>/dev/null | ${XARGS_L_I}map echo ${VIRT_DOMAINS_DIR}/map.db) all : configure system_filter exim.pl ${MAP_OBJ} ##### configure ##### configure : ${CONFIGURE_DIR}/configure ${CONFIGURE_DIR}/configure : ${M4_DIR}/configure.mc ${SITE_DIR}/conf ${M4_DIR}/conf.default ${ACLS_DIR}/* ${FEATURES_DIR}/* ${SITE_DIR}/* ${DELIVERIES_DIR}/* dnsbls.lists m4 -DconfACLS_DIR="${ACLS_DIR}" -DconfFEATURES_DIR="${FEATURES_DIR}" \ -DM4_DIR="${M4_DIR}" \ -DconfACCESS_DIR="${ACCESS_DIR}" -DconfSITE_DIR="${SITE_DIR}" \ -DconfSYSTEMFILTERS_DIR="${SYSTEMFILTERS_DIR}" \ -DconfDELIVERIES_DIR="${DELIVERIES_DIR}" \ ${M4_DIR}/configure.mc | \ perl -n -e 's/\s+([\r\n])/$$1/; if(/^[\r\n]*$$/){$$empty=1;}else{if($$empty){print("\n");$$empty=0}print $$_}' \ > ${CONFIGURE_DIR}/configure chown ${EXIM_USER} ${CONFIGURE_DIR}/configure chgrp mail ${CONFIGURE_DIR}/configure chmod 640 ${CONFIGURE_DIR}/configure ##### DNSBL list ##### #dnsbls.lists : ${ACLS_DIR}/dnsbls.* dnsbls.lists : ${ACLS_DIR}/dnsbls.defer.dialup ${ACLS_DIR}/dnsbls.pass.dialup ${ACLS_DIR}/dnsbls.defer ${ACLS_DIR}/dnsbls.pass ${ACLS_DIR}/dnsbls.warn ${ACLS_DIR}/dnsbls.defer.dialup : ${DNSBLLIST_DIR}/dnsbls.list cat ../dnsbls.list | \ perl -n -e 'print $$_ unless(/^\s*[#\r\n]/)' | \ perl -n -e 'print($$1."\n") if(/^(.+?)\s*:\s*deny\s*:\s*defer\s*:\s*dialup/i)' | \ perl -e '@lines=;$$list=join("", @lines);chomp($$list);$$list=~s/\n/ \\\n\t\t\t\t: /gms;print($$list)' \ > $@ ${ACLS_DIR}/dnsbls.pass.dialup : ${DNSBLLIST_DIR}/dnsbls.list cat ../dnsbls.list | \ perl -n -e 'print $$_ unless(/^\s*[#\r\n]/)' | \ perl -n -e 'print($$1."\n") if(/^(.+?)\s*:\s*deny\s*:\s*pass\s*:\s*dialup/i)' | \ perl -e '@lines=;$$list=join("", @lines);chomp($$list);$$list=~s/\n/ \\\n\t\t\t\t: /gms;print($$list)' \ > $@ ${ACLS_DIR}/dnsbls.defer : ${DNSBLLIST_DIR}/dnsbls.list cat ../dnsbls.list | \ perl -n -e 'print $$_ unless(/^\s*[#\r\n]/)' | \ perl -n -e 'print($$1."\n") if(/^(.+?)\s*:\s*deny\s*:\s*defer\s*$$/i)' | \ perl -e '@lines=;$$list=join("", @lines);chomp($$list);$$list=~s/\n/ \\\n\t\t\t\t: /gms;print($$list)' \ > $@ ${ACLS_DIR}/dnsbls.pass : ${DNSBLLIST_DIR}/dnsbls.list cat ../dnsbls.list | \ perl -n -e 'print $$_ unless(/^\s*[#\r\n]/)' | \ perl -n -e 'print($$1."\n") if(/^(.+?)\s*:\s*deny\s*:\s*pass\s*$$/i)' | \ perl -e '@lines=;$$list=join("", @lines);chomp($$list);$$list=~s/\n/ \\\n\t\t\t\t: /gms;print($$list)' \ > $@ ${ACLS_DIR}/dnsbls.warn : ${DNSBLLIST_DIR}/dnsbls.list cat ../dnsbls.list | \ perl -n -e 'print $$_ unless(/^\s*[#\r\n]/)' | \ perl -n -e 'print($$1."\n") if(/^(.+?)\s*:\s*warn/i)' | \ perl -e '@lines=;$$list=join("", @lines);chomp($$list);$$list=~s/\n/ \\\n\t\t\t\t: /gms;print($$list)' \ > $@ ##### system filters ##### system_filter : ${CONFIGURE_DIR}/system_filter ${CONFIGURE_DIR}/system_filter : ${M4_DIR}/system_filter.mc ${SYSTEMFILTERS_DIR}/* ${SITE_DIR}/system_filter* m4 -DconfACLS_DIR="${ACLS_DIR}" -DconfFEATURES_DIR="${FEATURES_DIR}" \ -DM4_DIR=${M4_DIR} \ -DconfACCESS_DIR="${ACCESS_DIR}" -DconfSITE_DIR="${SITE_DIR}" \ -DconfSYSTEMFILTERS_DIR="${SYSTEMFILTERS_DIR}" \ ${M4_DIR}/system_filter.mc | \ perl -n -e 's/\s+([\r\n])/$$1/; if(/^[\r\n]*$$/){$$empty=1;}else{if($$empty){print("\n");$$empty=0}print $$_}' \ > ${CONFIGURE_DIR}/system_filter ${SYSTEMFILTERS_DIR}/warnings : ${SYSTEMFILTERS_DIR}/warnings.list perl -ni -e 'print if (/^\s*#/)' ${SYSTEMFILTERS_DIR}/warnings perl -ne 'chomp; s/\|/###/g; @f=split(/\s*###\s*/); \ print("if \$$h_$$f[$$[]: is not \"\" then\n\tlogwrite \"\$$tod_log \$$message_id saved because of ".\ $$f[$$[+2]."\"\n\tunseen save /usr/local/mail/".\ $$f[$$[+1]."/\$$tod_zulu-\$$\{message_id\} 640\nendif\n")' \ ${SYSTEMFILTERS_DIR}/warnings.list >> ${SYSTEMFILTERS_DIR}/warnings ##### exim.pl ##### exim.pl : ${CONFIGURE_DIR}/exim.pl ### for gmake SITE_PERL += $(shell ls ${SITE_DIR}/*.pl 2>/dev/null | ${XARGS_L} echo) ${CONFIGURE_DIR}/exim.pl : ${CONFIGURE_DIR}/configure ${SITE_PERL} echo -n > ${CONFIGURE_DIR}/exim.pl if [ ! -z "${SITE_PERL}" ]; then cat ${SITE_PERL} > ${CONFIGURE_DIR}/exim.pl; fi perl -n -e 'print "$$1\n" if (/\$$\{perl\{([^\}\r\n]+)\}/)' < ${CONFIGURE_DIR}/configure \ | sort | uniq \ | ${XARGS_L_I}perl_func cat ${PERL_DIR}/perl_func.pl \ >> ${CONFIGURE_DIR}/exim.pl chown ${EXIM_USER} ${CONFIGURE_DIR}/exim.pl chgrp mail ${CONFIGURE_DIR}/exim.pl chmod 750 ${CONFIGURE_DIR}/exim.pl ##### STARTTLS key/certificate ##### exim.pem : ../exim.pem ../exim.pem : openssl req -newkey rsa:1024 -x509 -nodes -days 365 -out $@ -keyout $@ chown ${EXIM_USER} $@ ; \ chmod 600 $@ ##### DBM files ##### ### for gmake %.db : % exim_dbmbuild $< $@ ../%.db : ../% exim_dbmbuild $< $@ ##### cache files ##### PROXYCHECK_DBM=/var/spool/exim/db/proxycheck.db PROXYCHECK_TMP=/tmp/proxycheck init_proxycheck : if [ -f ${PROXYCHECK_TMP} ]; then rm ${PROXYCHECK_TMP} 2>/dev/null; fi touch ${PROXYCHECK_TMP} exim_dbmbuild ${PROXYCHECK_TMP} ${PROXYCHECK_DBM} rm ${PROXYCHECK_TMP} 2>/dev/null chown ${EXIM_USER} ${PROXYCHECK_DBM} chgrp mail ${PROXYCHECK_DBM} chmod 640 ${PROXYCHECK_DBM} GREYLIST_DBM=/var/spool/exim/db/greylist.db GREYLIST_TMP=/tmp/greylist init_greylist : if [ -f ${GREYLIST_TMP} ]; then rm ${GREYLIST_TMP} 2>/dev/null; fi touch ${GREYLIST_TMP} exim_dbmbuild ${GREYLIST_TMP} ${GREYLIST_DBM} rm ${GREYLIST_TMP} 2>/dev/null chown ${EXIM_USER} ${GREYLIST_DBM} chgrp mail ${GREYLIST_DBM} chmod 640 ${GREYLIST_DBM}