# # spec file for package postfix # # Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed # upon. The license for this file, and modifications and additions to the # file, is the same license as for the pristine package itself (unless the # license for the pristine package is not an Open Source License, in which # case the license is the MIT License). An "Open Source License" is a # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. # Please submit bugfixes or comments via http://bugs.opensuse.org/ # Name: postfix Summary: A fast, secure, and flexible mailer License: IPL-1.0 Group: Productivity/Networking/Email/Servers Version: 2.8.13 Release: 0 Url: http://www.postfix.org/ Source: %{name}-%{version}.tar.bz2 Source1: %{name}-SuSE.tar.gz Source2: %{name}-mysql.tar.bz2 Source10: rpmlintrc Source11: check_mail_queue Patch: dynamic_maps.patch Patch1: dynamic_maps_pie.patch Patch2: pointer_to_literals.patch Patch3: ipv6_disabled.patch Patch10: %{name}-2.8.12-main.cf.patch Patch11: %{name}-2.8.12-master.cf.patch Patch12: %{name}-2.8.12-post-install.patch Patch20: %{name}-vda-v10-2.8.12.patch Patch21: postfix-2.8.12-ssl-release-buffers.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build PreReq: %insserv_prereq %fillup_prereq PreReq: /usr/bin/getent PreReq: /usr/sbin/useradd /usr/sbin/groupadd /usr/sbin/usermod PreReq: /bin/sed /bin/awk /bin/grep PreReq: textutils sh-utils fileutils pcre netcfg %if 0%{?suse_version} > 1130 PreReq: sysvinit(syslog) sysvinit(network) %endif Requires: iproute2 BuildRequires: db-devel BuildRequires: mysql-devel BuildRequires: openldap2-devel BuildRequires: pcre-devel BuildRequires: postgresql-devel # require pwdutils to make postinstall script check work BuildRequires: pwdutils %if 0%{?suse_version} >= 1100 BuildRequires: fdupes %endif %if 0%{?suse_version} > 1140 BuildRequires: systemd %{?systemd_requires} %endif # Conflicts: sendmail exim Provides: smtp_daemon # # Some defines # %define pf_docdir %{_docdir}/%{name}-doc %define pf_config_directory /etc/%{name} %define pf_daemon_directory /usr/lib/%{name} %define pf_command_directory /usr/sbin %define pf_queue_directory var/spool/%{name} %define pf_sendmail_path /usr/sbin/sendmail %define pf_newaliases_path /usr/bin/newaliases %define pf_mailq_path /usr/bin/mailq %define pf_setgid_group maildrop %define pf_readme_directory %{_docdir}/%{name}-doc/README_FILES %define pf_html_directory %{_docdir}/%{name}-doc/html %define pf_sample_directory %{_docdir}/%{name}-doc/samples %define pf_data_directory /var/lib/%{name} %define pf_uid 51 %define pf_gid 51 %define maildrop_gid 59 %define mail_gid 12 %define conf_backup_dir /var/adm/backup/%{name} %define omc_pdir /usr/share/omc/ %define omc_dir /usr/share/omc/svcinfo.d/ # %define vmusr vmail %define vmgid 303 %define vmid 303 %define vmdir /srv/maildirs # # --------------------------------------------------------------------------- %description Postfix aims to be an alternative to the widely-used sendmail program. %package devel Summary: Development headers for the postfix package Group: Development/Libraries/C and C++ PreReq: %{name} = %{version} %description devel Postfix aims to be an alternative to the widely-used sendmail program. %package doc Summary: Documentations for the postfix package Group: Productivity/Networking/Email/Servers %if 0%{?suse_version} >= 1120 BuildArch: noarch %endif %description doc Postfix aims to be an alternative to the widely-used sendmail program. This package contains the documentation for %{name} %package mysql Summary: Postfix plugin to support MySQL maps Group: Productivity/Networking/Email/Servers PreReq: %{name} = %{version} %description mysql Postfix plugin to support MySQL maps. This library will be loaded by starting %{name} if you'll access a postmap which is stored in mysql. %package postgresql Summary: Postfix plugin to support PostgreSQL maps Group: Productivity/Networking/Email/Servers PreReq: %{name} = %{version} %description postgresql Postfix plugin to support PostgreSQL maps. This library will be loaded by starting %{name} if you'll access a postmap which is stored in PostgreSQL. %prep %setup -n %{name}-%{version} -a 1 -a 2 %patch %patch1 %patch2 %patch3 %patch10 %patch11 %patch12 %patch20 %patch21 # --------------------------------------------------------------------------- %build export CCARGS="-DHAS_LDAP -DHAS_PCRE -DUSE_SASL_AUTH -I/usr/include/sasl" export CCARGS="$CCARGS -DMAX_DYNAMIC_MAPS" export CCARGS="$CCARGS -DHAS_MYSQL -I/usr/include/mysql" export CCARGS="$CCARGS -DHAS_PGSQL -I/usr/include/pgsql" export CCARGS="$CCARGS -DUSE_CYRUS_SASL" export AUXLIBS="-lldap -llber -lpcre" export AUXLIBS="$AUXLIBS -lsasl2" export AUXLIBS="$AUXLIBS -lssl -lcrypto" export CCARGS="$CCARGS -DUSE_TLS" export CCARGS="$CCARGS $RPM_OPT_FLAGS -Wno-comments" export PIE=-pie make makefiles DEBUG="" cd lib for i in dns global master tls util milter; do ln -sf lib${i}.a lib%{name}-${i}.so.1.0.1; done cd - make LD_LIBRARY_PATH=$(pwd)/lib:${LD_LIBRARY_PATH} # --------------------------------------------------------------------------- %install /usr/sbin/groupadd -g %{pf_gid} -o -r %{name} 2> /dev/null || : /usr/sbin/groupadd -g %{maildrop_gid} -o -r maildrop 2> /dev/null || : /usr/sbin/useradd -r -o -g %{name} -u %{pf_uid} -s /bin/false -c "Postfix Daemon" -d /%{pf_queue_directory} %{name} 2> /dev/null || : /usr/sbin/usermod -G %{maildrop_gid},%{mail_gid} %{name} 2> /dev/null || : mkdir -p $RPM_BUILD_ROOT/%{_libdir} install lib/*.1 $RPM_BUILD_ROOT/%{_libdir} for i in $RPM_BUILD_ROOT/%{_libdir}/*.1; do ln -sf ${i##*/} ${i%.*.*} done cd lib for i in libpostfix-*; do ln -sf $i $RPM_BUILD_ROOT/%{_libdir}/${i%so.*}so done cd - ln -sf $(pwd)/lib/dict_* libexec/ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$RPM_BUILD_ROOT/%{_libdir} sh postfix-install -non-interactive \ install_root=%{buildroot} \ config_directory=%{pf_config_directory} \ daemon_directory=%{pf_daemon_directory} \ command_directory=%{pf_command_directory} \ queue_directory=/%{pf_queue_directory} \ sendmail_path=%{pf_sendmail_path} \ newaliases_path=%{pf_newaliases_path} \ mailq_path=%{pf_mailq_path} \ manpage_directory=%{_mandir} \ setgid_group=%{pf_setgid_group} \ readme_directory=%{pf_readme_directory} \ data_directory=%{pf_data_directory} ln -sf ../sbin/sendmail $RPM_BUILD_ROOT/usr/lib/sendmail for i in qmqp-source smtp-sink smtp-source; do install -m 755 bin/$i $RPM_BUILD_ROOT/usr/sbin/$i done mkdir -p $RPM_BUILD_ROOT/etc/init.d mkdir -p $RPM_BUILD_ROOT/sbin/conf.d mkdir -p $RPM_BUILD_ROOT/etc/permissions.d mkdir -p $RPM_BUILD_ROOT/%{_libdir}/sasl2 mkdir -p $RPM_BUILD_ROOT/usr/sbin mkdir -p $RPM_BUILD_ROOT/%{conf_backup_dir} mkdir -p $RPM_BUILD_ROOT/%{pf_sample_directory} mkdir -p $RPM_BUILD_ROOT/%{pf_html_directory} mkdir -p $RPM_BUILD_ROOT/usr/include/%{name} mkdir -p $RPM_BUILD_ROOT/etc/pam.d install -m 644 %{name}-SuSE/smtp $RPM_BUILD_ROOT/etc/pam.d/smtp #mkdir samples install -m 755 %{name}-SuSE/rc.%{name} $RPM_BUILD_ROOT/etc/init.d/%{name} ln -sf ../etc/init.d/%{name} $RPM_BUILD_ROOT/sbin/rc%{name} mkdir -p $RPM_BUILD_ROOT/var/adm/fillup-templates rm -f $RPM_BUILD_ROOT/var/adm/fillup-templates/sysconfig.%{name} sed -e 's;@lib@;%{_lib};g' %{name}-SuSE/sysconfig.%{name} > $RPM_BUILD_ROOT/var/adm/fillup-templates/sysconfig.%{name} install -m 644 %{name}-SuSE/sysconfig.mail-%{name} $RPM_BUILD_ROOT/var/adm/fillup-templates/sysconfig.mail-%{name} sed -e 's;@lib@;%{_lib};g' \ -e 's;@conf_backup_dir@;%{conf_backup_dir};' \ -e 's;@daemon_directory@;%{pf_daemon_directory};' \ -e 's;@readme_directory@;%{pf_readme_directory};' \ -e 's;@html_directory@;%{pf_html_directory};' \ -e 's;@sendmail_path@;%{pf_sendmail_path};' \ -e 's;@setgid_group@;%{pf_setgid_group};' \ -e 's;@manpage_directory@;%{_mandir};' \ -e 's;@newaliases_path@;%{pf_newaliases_path};' \ -e 's;@sample_directory@;%{pf_sample_directory};' \ -e 's;@mailq_path@;%{pf_mailq_path};' %{name}-SuSE/config.%{name} \ > $RPM_BUILD_ROOT/usr/sbin/config.%{name} chmod 755 $RPM_BUILD_ROOT/usr/sbin/config.%{name} install -m 644 %{name}-SuSE/dynamicmaps.cf $RPM_BUILD_ROOT/etc/%{name}/dynamicmaps.cf install -m 644 %{name}-SuSE/ldap_aliases.cf $RPM_BUILD_ROOT/etc/%{name}/ldap_aliases.cf install -m 644 %{name}-SuSE/helo_access $RPM_BUILD_ROOT/etc/postfix/helo_access install -m 644 %{name}-SuSE/permissions $RPM_BUILD_ROOT/etc/permissions.d/%{name} install -m 644 %{name}-SuSE/sender_canonical $RPM_BUILD_ROOT/etc/%{name}/sender_canonical install -m 644 %{name}-SuSE/relay $RPM_BUILD_ROOT/etc/postfix/relay install -m 644 %{name}-SuSE/relay_ccerts $RPM_BUILD_ROOT/etc/%{name}/relay_ccerts install -m 600 %{name}-SuSE/sasl_passwd $RPM_BUILD_ROOT/etc/%{name}/sasl_passwd mkdir -p $RPM_BUILD_ROOT/etc/sasl2 install -m 600 %{name}-SuSE/smtpd.conf $RPM_BUILD_ROOT/etc/sasl2/smtpd.conf install -m 644 %{name}-SuSE/openssl_%{name}.conf.in $RPM_BUILD_ROOT/etc/%{name}/openssl_%{name}.conf.in install -m 755 %{name}-SuSE/mk%{name}cert $RPM_BUILD_ROOT/usr/sbin/mk%{name}cert mkdir -p $RPM_BUILD_ROOT/%{omc_dir} install -m 644 %{name}-SuSE/%{name}.xml $RPM_BUILD_ROOT/%{omc_dir} mkdir -p $RPM_BUILD_ROOT/etc/sysconfig/SuSEfirewall2.d/services/ install -m 644 %{name}-SuSE/%{name}-fw $RPM_BUILD_ROOT/etc/sysconfig/SuSEfirewall2.d/services/smtp { cat< $RPM_BUILD_ROOT/etc/%{name}/main.cf $RPM_BUILD_ROOT/usr/sbin/postconf -c $RPM_BUILD_ROOT/etc/%{name} \ -e "manpage_directory = %{_mandir}" \ "setgid_group = %{pf_setgid_group}" \ "mailq_path = %{pf_mailq_path}" \ "newaliases_path = %{pf_newaliases_path}" \ "sendmail_path = %{pf_sendmail_path}" \ "readme_directory = %{pf_readme_directory}" \ "html_directory = %{pf_html_directory}" \ "sample_directory = %{pf_sample_directory}" \ "daemon_directory = %{pf_daemon_directory}" \ "smtpd_helo_required = yes" \ "smtpd_delay_reject = yes" \ "disable_vrfy_command = yes" \ 'smtpd_banner = $myhostname ESMTP' #Set Permissions install -m 644 %{name}-SuSE/%{name}-files $RPM_BUILD_ROOT/usr/lib/postfix/postfix-files # postfix-mysql install -m 644 %{name}-mysql/main.cf-mysql $RPM_BUILD_ROOT/etc/%{name}/main.cf-mysql install -m 640 %{name}-mysql/*_maps.cf $RPM_BUILD_ROOT/etc/%{name}/ # create paranoid permissions file printf '%%-38s %%-18s %%s\n' /usr/sbin/postdrop "root.%{pf_setgid_group}" "0755" >> $RPM_BUILD_ROOT/etc/permissions.d/%{name}.paranoid printf '%%-38s %%-18s %%s\n' /usr/sbin/postqueue "root.%{pf_setgid_group}" "0755" >> $RPM_BUILD_ROOT/etc/permissions.d/%{name}.paranoid install -m 644 include/*.h $RPM_BUILD_ROOT/usr/include/%{name}/ # some rpmlint stuff # remove unneeded examples/chroot-setup for example in AIX42 BSDI* F* HPUX* IRIX* NETBSD1 NEXTSTEP3 OPENSTEP4 OSF1 Solaris*; do %{__rm} examples/chroot-setup/${example} done cp -a examples/* $RPM_BUILD_ROOT%{pf_sample_directory} cp -a html/* $RPM_BUILD_ROOT%{pf_html_directory} cp -a auxiliary/ $RPM_BUILD_ROOT%{pf_docdir}/ %if 0%{?suse_version} >= 1140 mkdir -p %{buildroot}/lib/systemd/system mkdir -p %{buildroot}/etc/postfix/system install -m 0644 %{name}-SuSE/postfix.service %{buildroot}/lib/systemd/system/ install -m 0755 %{name}-SuSE/config.postfix %{buildroot}/usr/sbin/config.postfix install -m 0755 %{name}-SuSE/config_postfix.systemd %{buildroot}/etc/postfix/system/config_postfix install -m 0755 %{name}-SuSE/update_chroot.systemd %{buildroot}/etc/postfix/system/update_chroot install -m 0755 %{name}-SuSE/update_postmaps.systemd %{buildroot}/etc/postfix/system/update_postmaps install -m 0755 %{name}-SuSE/wait_qmgr.systemd %{buildroot}/etc/postfix/system/wait_qmgr install -m 0755 %{name}-SuSE/cond_slp.systemd %{buildroot}/etc/postfix/system/cond_slp %endif %if 0%{?suse_version} >= 1100 %fdupes $RPM_BUILD_ROOT%{pf_docdir} %fdupes $RPM_BUILD_ROOT%{_mandir} %endif # --------------------------------------------------------------------------- install -m 755 %{SOURCE11} $RPM_BUILD_ROOT/usr/sbin/ %pre %if 0%{?suse_version} > 1140 %service_add_pre %{name}.service %endif VERSIONTEST=$(test -x usr/sbin/postconf && usr/sbin/postconf proxy_read_maps 2>/dev/null) if [ -z "$VERSIONTEST" -a -f %{pf_queue_directory}/pid/master.pid ]; then if checkproc -p %{pf_queue_directory}/pid/master.pid usr/lib/%{name}/master; then echo "%{name} is still running. You have to stop %{name} in order to" echo "install a newer version." exit 1 fi fi /usr/sbin/groupadd -g %{pf_gid} -o -r %{name} 2> /dev/null || : /usr/sbin/groupadd -g %{maildrop_gid} -o -r maildrop 2> /dev/null || : /usr/sbin/useradd -r -o -g %{name} -u %{pf_uid} -s /bin/false -c "Postfix Daemon" -d /%{pf_queue_directory} %{name} 2> /dev/null || : /usr/sbin/usermod -G %{maildrop_gid},%{mail_gid} %{name} 2> /dev/null || : # --------------------------------------------------------------------------- %pre mysql #echo "PARAM_pre: "$1 # on `rpm -ivh` PARAM is 1 # on `rpm -Uvh` PARAM is 2 if [ "$1" = "1" ]; then echo "Adding %{vmusr} user" if [ -z "`%{_bindir}/getent group %{vmusr} 2>/dev/null`" ]; then %{_sbindir}/groupadd -r -g %{vmgid} %{vmusr} fi if [ -z "`%{_bindir}/getent passwd %{vmusr} 2>/dev/null`" ]; then %{_sbindir}/useradd -c "maildirs chef" -d %{vmdir} -g %{vmusr} -u %{vmid} -r -s /bin/false %{vmusr} fi fi # --------------------------------------------------------------------------- %preun %stop_on_removal %{name} %if 0%{?suse_version} > 1140 %service_del_preun %{name}.service %endif # --------------------------------------------------------------------------- %preun mysql #echo "PARAM_preun: "$1 # on `rpm -e` PARAM is 0 if [ "$1" = "0" ]; then FILE=etc/%{name}/dynamicmaps.cf if [ -e "$FILE" ] ; then if grep -q "^mysql[[:space:]]" ${FILE}; then echo "Removing mysql map entry from ${FILE}" sed "/^mysql[[:space:]]/d" ${FILE} > ${FILE}.$$ && \ cp --remove-destination ${FILE}.$$ ${FILE} && \ rm ${FILE}.$$ fi else echo "Can not find \"$FILE\". Not updating the file." >&2 fi echo "Removing %{vmusr} user" userdel %{vmusr} 2> /dev/null groupdel %{vmusr} 2> /dev/null fi # --------------------------------------------------------------------------- %preun postgresql if [ "$1" = 0 ] ; then FILE=etc/%{name}/dynamicmaps.cf if [ -e "$FILE" ] ; then if grep -q "^pgsql[[:space:]]" ${FILE}; then echo "Removing pgsql map entry from ${FILE}" sed "/^pgsql[[:space:]]/d" ${FILE} > ${FILE}.$$ && \ cp --remove-destination ${FILE}.$$ ${FILE} && \ rm ${FILE}.$$ fi else echo "Can not find \"$FILE\". Not updating the file." >&2 fi fi # --------------------------------------------------------------------------- %post # We never have to run suseconfig for postfix after installation # We only start postfix own upgrade-configuration by update /usr/sbin/postfix set-permissions if [ ${1:-0} -gt 1 ]; then touch /var/adm/postfix.configured /usr/sbin/postfix upgrade-configuration || : fi %{fillup_and_insserv -y postfix} %{fillup_only -an mail} %if 0%{?suse_version} > 1140 %service_add_post %{name}.service %endif /sbin/ldconfig # --------------------------------------------------------------------------- %postun %restart_on_update %{name} %insserv_cleanup /sbin/ldconfig %if 0%{?suse_version} > 1140 %service_del_postun %{name}.service %endif # --------------------------------------------------------------------------- %post postgresql FILE=etc/%{name}/dynamicmaps.cf if ! grep -q "^pgsql[[:space:]]" ${FILE}; then echo "Adding pgsql map entry to ${FILE}" echo "pgsql /usr/lib/%{name}/dict_pgsql.so dict_pgsql_open" >> ${FILE} fi # --------------------------------------------------------------------------- %post mysql FILE=etc/%{name}/dynamicmaps.cf if ! grep -q "^mysql[[:space:]]" ${FILE}; then echo "Adding mysql map entry to ${FILE}" echo "mysql /usr/lib/%{name}/dict_mysql.so dict_mysql_open" >> ${FILE} fi # --------------------------------------------------------------------------- %clean rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root) %doc LICENSE %config /etc/pam.d/* /var/adm/fillup-templates/sysconfig.%{name} /var/adm/fillup-templates/sysconfig.mail-%{name} /usr/sbin/config.%{name} %config(noreplace) %{omc_dir}/%{name}.xml %dir /etc/%{name} %config /etc/%{name}/main.cf.default %config(noreplace) /etc/%{name}/access %config(noreplace) /etc/%{name}/aliases %config(noreplace) /etc/%{name}/generic %config(noreplace) /etc/%{name}/helo_access %config(noreplace) /etc/%{name}/canonical %config(noreplace) /etc/%{name}/main.cf %config(noreplace) /etc/%{name}/master.cf %config(noreplace) /etc/%{name}/openssl_%{name}.conf.in %config(noreplace) /etc/%{name}/relocated %config(noreplace) /etc/%{name}/transport %config(noreplace) /etc/%{name}/virtual %config(noreplace) /etc/%{name}/sasl_passwd %config(noreplace) /etc/%{name}/sender_canonical %config(noreplace) /etc/%{name}/relay %config(noreplace) /etc/%{name}/relay_ccerts %config(noreplace) /etc/%{name}/header_checks %config(noreplace) /etc/%{name}/bounce.cf.default %config(noreplace) /etc/%{name}/dynamicmaps.cf %config(noreplace) /etc/%{name}/ldap_aliases.cf %config /etc/sysconfig/SuSEfirewall2.d/services/smtp %dir /etc/sasl2/ %config(noreplace) /etc/sasl2/smtpd.conf %config /etc/%{name}/LICENSE %config /etc/%{name}/TLS_LICENSE %config /etc/permissions.d/%{name} %config /etc/permissions.d/%{name}.paranoid %attr(0644, root, root) %config /etc/%{name}/makedefs.out /usr/lib/%{name}/%{name}-files %config %attr(0755,root,root) /etc/init.d/%{name} %if 0%{?suse_version} >= 1140 %dir /etc/postfix/system %config %attr(0755,root,root) /etc/postfix/system/* %config /lib/systemd/system/postfix.service %endif /usr/bin/mailq /usr/bin/newaliases %attr(0755, root, root) /usr/sbin/sendmail /usr/sbin/qmqp-source /usr/sbin/smtp-sink /usr/sbin/smtp-source /usr/sbin/mk%{name}cert /usr/sbin/check_mail_queue /usr/sbin/config.postfix %verify(not mode group) /usr/sbin/post* /sbin/rc%{name} %{_libdir}/lib* /usr/lib/sendmail %dir /usr/lib/%{name} /usr/lib/%{name}/*[^.so] /usr/lib/%{name}/dict_ldap.so /usr/lib/%{name}/dict_pcre.so /usr/lib/%{name}/dict_tcp.so %{conf_backup_dir} %dir %attr(0700,%{name},root) %{pf_data_directory} %{_mandir}/man?/*.gz %dir %attr(0755,%{name},root) /%{pf_queue_directory} %dir %attr(0700,%{name},root) /%{pf_queue_directory}/active %dir %attr(0700,%{name},root) /%{pf_queue_directory}/bounce %dir %attr(0700,%{name},root) /%{pf_queue_directory}/corrupt %dir %attr(0700,%{name},root) /%{pf_queue_directory}/defer %dir %attr(0700,%{name},root) /%{pf_queue_directory}/deferred %dir %attr(0700,%{name},root) /%{pf_queue_directory}/flush %dir %attr(0700,%{name},root) /%{pf_queue_directory}/hold %dir %attr(0700,%{name},root) /%{pf_queue_directory}/incoming %dir %attr(0700,%{name},root) /%{pf_queue_directory}/private %dir %attr(0700,%{name},root) /%{pf_queue_directory}/saved %dir %attr(0700,%{name},root) /%{pf_queue_directory}/trace %dir %attr(0730,%{name},maildrop) /%{pf_queue_directory}/maildrop %dir %attr(0710,%{name},maildrop) /%{pf_queue_directory}/public %files devel %defattr(-,root,root) /usr/include/%{name}/ %files doc %defattr(0644,root,root,0755) %{pf_docdir}/ %files mysql %defattr(-,root,root) %doc %{name}-mysql/%{name}-mysql.sql %config(noreplace) %attr(640, root, %{name}) /etc/%{name}/*_maps.cf %config(noreplace) /etc/%{name}/main.cf-mysql /usr/lib/%{name}/dict_mysql.so %files postgresql %defattr(-,root,root) /usr/lib/%{name}/dict_pgsql.so %changelog