File postfix.spec of Package postfix

#
# spec file for package postfix
#
# Copyright (c) 2011 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/
#

# norootforbuild


Name:           postfix
#!BuildIgnore: sendmail
BuildRequires:  db-devel mysql-devel openldap2-devel pcre-devel postgresql-devel
# require pwdutils to make postinstall script check work
BuildRequires:  pwdutils
%define usetls  1
Url:            http://www.postfix.org/
License:        IBM Public License
Group:          Productivity/Networking/Email/Servers
Provides:       smtp_daemon
Conflicts:      sendmail exim
AutoReqProv:    on
Summary:        A fast, secure, and flexible mailer
Version:        2.5.6
Release:        1.<RELEASE2>
Source:         postfix-%{version}.tar.bz2
Source1:        postfix-SuSE.tar.gz
Patch:          dynamic_maps.patch
Patch1:         dynamic_maps_pie.patch
Patch2:         pointer_to_literals.patch
Patch3:         ipv6_disabled.patch
Patch4:         bnc#677792.diff
Patch5:         bnc#689021.diff 
PreReq:         /usr/sbin/useradd /usr/sbin/groupadd %insserv_prereq %fillup_prereq /bin/sed /bin/awk /bin/grep textutils sh-utils fileutils pcre openldap2-client netcfg
BuildRoot:      %{_tmppath}/%{name}-%{version}-build
#

%package      mysql
License:        IBM Public License
Summary:        Postfix plugin to support MySQL maps
AutoReqProv:    on
Group:          Productivity/Networking/Email/Servers
PreReq:         %{name} = %{version}
#

%package      postgresql
License:        IBM Public License
Summary:        Postfix plugin to support PostgreSQL maps
AutoReqProv:    on
Group:          Productivity/Networking/Email/Servers
PreReq:         %{name} = %{version}
#

%package      devel
License:        IBM Public License
Summary:        Development headers for the postfix package
AutoReqProv:    on
Group:          Productivity/Networking/Email/Servers
PreReq:         %{name} = %{version}

%package      doc
License:        IBM Public License
Summary:        Documentations for the postfix package
AutoReqProv:    on
Group:          Productivity/Networking/Email/Servers
PreReq:         %{name} = %{version}
#
# Some defines
#
%define postfixfiles         postfix.filelist
%define pf_config_directory  /etc/postfix
%define pf_daemon_directory  /usr/lib/postfix
%define pf_command_directory /usr/sbin
%define pf_queue_directory   var/spool/postfix
%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/postfix
%define postfix_uid          51
%define postfix_gid          51
%define maildrop_gid         59
%define conf_backup_dir      /var/adm/backup/postfix
%define omc_pdir             /usr/share/omc/
%define omc_dir              /usr/share/omc/svcinfo.d/
#
# ---------------------------------------------------------------------------

%prep
%setup -n postfix-%{version} -a 1
%patch  -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
# ---------------------------------------------------------------------------

%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"
%if %{usetls}
export AUXLIBS="$AUXLIBS -lssl -lcrypto"
%endif
%if %{usetls}
export CCARGS="$CCARGS -DUSE_TLS"
%endif
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 libpostfix-${i}.so.1.0.1;
done
cd -
make LD_LIBRARY_PATH=$(pwd)/lib:${LD_LIBRARY_PATH}
# ---------------------------------------------------------------------------

%install
/usr/sbin/groupadd -g %{postfix_gid} -o -r postfix 2> /dev/null || :
/usr/sbin/groupadd -g %{maildrop_gid} -o -r maildrop 2> /dev/null || :
/usr/sbin/useradd -r -o -g postfix -u %{postfix_uid} -s /bin/false -c "Postfix Daemon" -d /%{pf_queue_directory} postfix 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/usr/include/postfix
mkdir -p $RPM_BUILD_ROOT/etc/pam.d
install -m 644 postfix-SuSE/smtp $RPM_BUILD_ROOT/etc/pam.d/smtp
#mkdir samples
install -m 755 postfix-SuSE/rc.postfix $RPM_BUILD_ROOT/etc/init.d/postfix
ln -sf ../etc/init.d/postfix $RPM_BUILD_ROOT/sbin/rcpostfix
mkdir -p $RPM_BUILD_ROOT/var/adm/fillup-templates
rm -f $RPM_BUILD_ROOT/var/adm/fillup-templates/sysconfig.postfix
sed -e 's;@lib@;%{_lib};g' postfix-SuSE/sysconfig.postfix > $RPM_BUILD_ROOT/var/adm/fillup-templates/sysconfig.postfix
install -m 644 postfix-SuSE/sysconfig.mail-postfix $RPM_BUILD_ROOT/var/adm/fillup-templates/sysconfig.mail-postfix
rm -f $RPM_BUILD_ROOT/sbin/conf.d/SuSEconfig.postfix
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};' postfix-SuSE/SuSEconfig.postfix \
                 > $RPM_BUILD_ROOT/sbin/conf.d/SuSEconfig.postfix
chmod 755 $RPM_BUILD_ROOT/sbin/conf.d/SuSEconfig.postfix
install -m 644 postfix-SuSE/master.cf $RPM_BUILD_ROOT/etc/postfix/master.cf
install -m 644 postfix-SuSE/dynamicmaps.cf $RPM_BUILD_ROOT/etc/postfix/dynamicmaps.cf
install -m 644 postfix-SuSE/permissions $RPM_BUILD_ROOT/etc/permissions.d/postfix
install -m 644 postfix-SuSE/sender_canonical $RPM_BUILD_ROOT/etc/postfix/sender_canonical
install -m 644 postfix-SuSE/relay_ccerts $RPM_BUILD_ROOT/etc/postfix/relay_ccerts
install -m 600 postfix-SuSE/sasl_passwd $RPM_BUILD_ROOT/etc/postfix/sasl_passwd
mkdir -p $RPM_BUILD_ROOT/etc/sasl2
install -m 600 postfix-SuSE/smtpd.conf $RPM_BUILD_ROOT/etc/sasl2/smtpd.conf
install -m 644 postfix-SuSE/openssl_postfix.conf.in $RPM_BUILD_ROOT/etc/postfix/openssl_postfix.conf.in
install -m 755 postfix-SuSE/mkpostfixcert $RPM_BUILD_ROOT/usr/sbin/mkpostfixcert
rm -rf $RPM_BUILD_ROOT/%{pf_queue_directory}
install -m 644 postfix-SuSE/master.cf $RPM_BUILD_ROOT/%{conf_backup_dir}/master.cf
mkdir   -p $RPM_BUILD_ROOT/%{omc_dir}
install -m 644 postfix-SuSE/postfix.xml $RPM_BUILD_ROOT/%{omc_dir}
mkdir -p  $RPM_BUILD_ROOT/etc/sysconfig/SuSEfirewall2.d/services/
install -m 644 postfix-SuSE/postfix-fw $RPM_BUILD_ROOT/etc/sysconfig/SuSEfirewall2.d/services/postfix
{
cat<<EOF
#
# -----------------------------------------------------------------------
# NOTE: Many parameters have already been added to the end of this file
#       by SuSEconfig.postfix. So take care that you don't uncomment
#       and set a parameter without checking whether it has been added
#       to the end of this file.
# -----------------------------------------------------------------------
#
EOF
cat conf/main.cf
} > $RPM_BUILD_ROOT/etc/postfix/main.cf
$RPM_BUILD_ROOT/usr/sbin/postconf -c $RPM_BUILD_ROOT/etc/postfix \
        -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}" \
           "biff              = no" \
           "inet_protocols    = all"
install -m 644 $RPM_BUILD_ROOT/etc/postfix/main.cf $RPM_BUILD_ROOT/%{conf_backup_dir}/main.cf
# -----------------------------------------------------------------------
# preparing /etc/postfix/postfix-files to be able to use postfix
# own upgrade script. Unfortunately it looks in postfix-files and
# expects aliases file at /etc/postfix/aliases and it expects to have
# unzipped manpages
# also remove the both sql dictionary libs as they will not be installed
# per default
# -----------------------------------------------------------------------
rm -f $RPM_BUILD_ROOT/etc/postfix/aliases
rm -f $RPM_BUILD_ROOT/etc/postfix/postfix-files
sed 's;^$config_directory/aliases\(.*\);/etc/aliases\1;' conf/postfix-files \
    | grep -v '^$manpage_directory' | grep -Ev 'dict_(mysql|pgsql)' > $RPM_BUILD_ROOT/etc/postfix/postfix-files
rm -f %{postfixfiles}
test -f conf/postfix-files || {
   echo "conf/postfix-files does not exist!"
   exit 1
}
echo "%defattr(-,root,root)" >> %{postfixfiles}
exec <conf/postfix-files
while IFS=: read path type owner group mode flags junk; do
  owner=${owner/\$mail_owner/postfix}
  group=${group/\$setgid_group/%{pf_setgid_group}}
  case $path in
  \$queue_directory*)
    path=${path/\$queue_directory/\/var\/spool\/postfix}
    group=${group/-/root}
    echo "%dir %attr($mode,$owner,$group) $path/" >> %{postfixfiles}
    mkdir -m $mode -p $RPM_BUILD_ROOT/$path
    printf '%%-38s %%-18s %%04d\n' $path "${owner}.${group}" $mode >> $RPM_BUILD_ROOT/etc/permissions.d/postfix
    ;;
  \$command_directory/*)
    path=${path/\$command_directory/\/usr\/sbin}
    group=${group/-/root}
    echo "%attr($mode,$owner,$group) $path" >> %{postfixfiles}
    printf '%%-38s %%-18s %%04d\n' $path "${owner}.${group}" $mode >> $RPM_BUILD_ROOT/etc/permissions.d/postfix
    ;;
  *) continue;;
  esac
done
# create paranoid permissions file
printf '%%-38s %%-18s %%s\n' /usr/sbin/postdrop "root.%{pf_setgid_group}" "0755" >> $RPM_BUILD_ROOT/etc/permissions.d/postfix.paranoid
printf '%%-38s %%-18s %%s\n' /usr/sbin/postqueue "root.%{pf_setgid_group}" "0755" >> $RPM_BUILD_ROOT/etc/permissions.d/postfix.paranoid
install -m 644 include/*.h $RPM_BUILD_ROOT/usr/include/postfix/

%pre
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/postfix/master; then
     echo "postfix is still running. You have to stop postfix in order to"
     echo "install a newer version."
     exit 1
  fi
fi
/usr/sbin/groupadd -g %{postfix_gid} -o -r postfix 2> /dev/null || :
/usr/sbin/groupadd -g %{maildrop_gid} -o -r maildrop 2> /dev/null || :
/usr/sbin/useradd -r -o -g postfix -u %{postfix_uid} -s /bin/false -c "Postfix Daemon" -d /%{pf_queue_directory} postfix 2> /dev/null || :

%preun
%stop_on_removal postfix

%post
%{fillup_and_insserv -y postfix}
%{fillup_only -an mail}
# We never have to run suseconfig for postfix after update
# We only start postfix's own upgrade-configuration
if [ ${1:-0} -gt 1 ]; then
        echo "executing upgrade-configuration"
        /usr/sbin/postfix set-permissions upgrade-configuration  setgid_group=%{pf_setgid_group}
fi

%postun
%restart_on_update postfix
%insserv_cleanup
ldconfig

%clean
#rm -rf $RPM_BUILD_ROOT

%post postgresql
FILE=etc/postfix/dynamicmaps.cf
if ! grep -q "^pgsql[[:space:]]" ${FILE}; then
     echo "Adding pgsql map entry to ${FILE}"
     echo "pgsql   /usr/lib/postfix/dict_pgsql.so      dict_pgsql_open" >> ${FILE}
fi

%post mysql
FILE=etc/postfix/dynamicmaps.cf
if ! grep -q "^mysql[[:space:]]" ${FILE}; then
     echo "Adding mysql map entry to ${FILE}"
     echo "mysql   /usr/lib/postfix/dict_mysql.so      dict_mysql_open" >> ${FILE}
fi

%preun postgresql
if [ "$1" = 0 ] ; then
    FILE=etc/postfix/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

%preun mysql
if [ "$1" = 0 ] ; then
    FILE=etc/postfix/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
fi

%files postgresql
%defattr(-,root,root)
/usr/lib/postfix/dict_pgsql.so

%files mysql
%defattr(-,root,root)
/usr/lib/postfix/dict_mysql.so

%files devel
%defattr(-,root,root)
/usr/include/postfix/

%files doc
%defattr(-,root,root)
%doc AAAREADME COMPATIBILITY COPYRIGHT HISTORY INSTALL IPv6-ChangeLog LICENSE
%doc PORTING RELEASE_NOTES* US_PATENT_6321267 TLS_LICENSE
%doc README_FILES examples html auxiliary
%doc postfix-SuSE/README.SuSE
%doc postfix-SuSE/SPAMASSASSIN+POSTFIX.SuSE

%files -f %{postfixfiles}
%defattr(-,root,root)
%config /etc/pam.d/*
/var/adm/fillup-templates/sysconfig.postfix
/var/adm/fillup-templates/sysconfig.mail-postfix
/sbin/conf.d/SuSEconfig.postfix
%config(noreplace) %{omc_dir}/postfix.xml
%dir /etc/postfix
%config(noreplace) /etc/postfix/access
%config(noreplace) /etc/postfix/generic
%config(noreplace) /etc/postfix/canonical
#%config(noreplace) /etc/postfix/cidr_table
%config(noreplace) /etc/postfix/main.cf
%config /etc/postfix/main.cf.default
%config(noreplace) /etc/postfix/master.cf
%config(noreplace) /etc/postfix/openssl_postfix.conf.in
%config(noreplace) /etc/postfix/relocated
%config(noreplace) /etc/postfix/transport
%config(noreplace) /etc/postfix/virtual
%config(noreplace) /etc/postfix/sasl_passwd
%config(noreplace) /etc/postfix/sender_canonical
#%config(noreplace) /etc/postfix/tcp_table
#%config(noreplace) /etc/postfix/pcre_table
#%config(noreplace) /etc/postfix/regexp_table
%config(noreplace) /etc/postfix/relay_ccerts
%config(noreplace) /etc/postfix/header_checks
%config(noreplace) /etc/postfix/bounce.cf.default
%config(noreplace) /etc/postfix/dynamicmaps.cf
%config /etc/sysconfig/SuSEfirewall2.d/services/postfix
%dir /etc/sasl2/
%config(noreplace) /etc/sasl2/smtpd.conf
%config /etc/postfix/LICENSE
%if %{usetls}
%config /etc/postfix/TLS_LICENSE
%endif
%config /etc/permissions.d/postfix
%config /etc/permissions.d/postfix.paranoid
%attr(0644, root, root) /etc/postfix/makedefs.out
%attr(0755, root, root) /etc/postfix/postfix-script
%attr(0755, root, root) /etc/postfix/post-install
%attr(0644, root, root) /etc/postfix/postfix-files
%config %attr(0755,root,root) /etc/init.d/postfix
/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/mkpostfixcert
/sbin/rcpostfix
%{_libdir}/lib*
/usr/lib/sendmail
%dir /usr/lib/postfix
/usr/lib/postfix/*[^.so]
/usr/lib/postfix/dict_ldap.so
/usr/lib/postfix/dict_pcre.so
/usr/lib/postfix/dict_tcp.so
%{conf_backup_dir}
%dir %attr(0700,postfix,root) %{pf_data_directory}
%{_mandir}/man?/*.gz

%description
Postfix aims to be an alternative to the widely-used sendmail program.



Authors:
--------
    Wietse Venema <wietse@porcupine.org>

%description mysql
Postfix plugin to support MySQL maps. This library will be loaded by
starting postfix if you'll access a postmap which is stored in mysql.



Authors:
--------
    Wietse Venema <wietse@porcupine.org>

%description postgresql
Postfix plugin to support PostgreSQL maps. This library will be loaded
by starting postfix if you'll access a postmap which is stored in
PostgreSQL.



Authors:
--------
    Wietse Venema <wietse@porcupine.org>

%description devel
Postfix aims to be an alternative to the widely-used sendmail program.



Authors:
--------
    Wietse Venema <wietse@porcupine.org>

%description doc
Postfix aims to be an alternative to the widely-used sendmail program.
This package contains the documentation for postfix



Authors:
--------
    Wietse Venema <wietse@porcupine.org>

%changelog
openSUSE Build Service is sponsored by