%define postfix_uid	89
%define postfix_user	postfix
%define postfix_gid	89
%define postfix_group	postfix
%define maildrop_group	postdrop
%define maildrop_gid	90
%define postfix_doc_dir		%{?_pkgdocdir}%{!?_pkgdocdir:%{_docdir}/%{name}-%{version}}
%define postfix_sample_dir	%{postfix_doc_dir}/samples
%define postfix_readme_dir	%{postfix_doc_dir}/README_FILES

Name: postfix
Summary: Postfix Mail Transport Agent
Version:	3.10.7
Release:	1
URL: https://www.postfix.org
License: (IBM and GPLv2+) or (EPL-2.0 and GPLv2+)
Provides: MTA smtpd smtpdaemon server(smtp)

Source0:	http://ftp.porcupine.org/mirrors/postfix-release/official/postfix-%{version}.tar.gz
Source1: postfix-sasl.conf
Patch0:  postfix-3.7.2-makedefs.patch
Patch1:  postfix-3.7.2-sys_defs.patch
Patch2:  postfix-3.10.7-makefile.patch
Patch3:  postfix-3.10.7-create-archive.patch
Patch4:  postfix-3.7.2-config_dir.patch
Patch5:  postfix-3.7.2-postfix-files.patch

%if %{toolchain} == "gcc"
Requires:	libgcc >= 10.3.0
%endif
Requires:	cyrus-sasl >= 2.1.28

%description
Postfix is a Mail Transport Agent (MTA).

%package sqlite
Summary: Postfix SQLite map support
Requires: %{name} = %{version}-%{release}
%if %{toolchain} == "gcc"
Requires:	libgcc >= 10.3.0
%endif
Requires:	sqlite >= 3.50.4


%description sqlite
This provides support for SQLite maps in Postfix. If you plan to use SQLite
maps with Postfix, you need this.

%package ldap
Summary: Postfix LDAP map support
Requires: %{name} = %{version}-%{release}
%if %{toolchain} == "gcc"
Requires:	libgcc >= 10.3.0
%endif
Requires:	openldap >= 2.5.16

%description ldap
This provides support for LDAP maps in Postfix. If you plan to use LDAP
maps with Postfix, you need this.

%package pcre
Summary: Postfix PCRE map support
Requires: %{name} = %{version}-%{release}
%if %{toolchain} == "gcc"
Requires:	libgcc >= 10.3.0
%endif
Requires:	pcre >= 8.44

%description pcre
This provides support for PCRE maps in Postfix. If you plan to use PCRE
maps with Postfix, you need this.


%prep
%setup -q
%patch0
%patch1
%patch2
%patch3
%patch4
%patch5

%build
export OBJECT_MODE=64
CCARGS="${CCARGS} -DHAS_LDAP -DLDAP_DEPRECATED=1 -DUSE_LDAP_SASL -DHAS_PCRE -DHAS_SQLITE -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/opt/freeware/include/sasl -DUSE_TLS -I/usr/include/openssl -DHAS_DLOPEN -DHAS_SHL_LOAD -maix64 -DNO_EAI"
AUXLIBS_LDAP="-lldap -llber"
AUXLIBS_PCRE="-lpcre"
AUXLIBS_SQLITE="-lsqlite3"
AUXLIBS="-lsasl2 -lssl -lcrypto"
gmake -f Makefile.init makefiles shared=yes dynamicmaps=yes \
	CC="gcc -maix64" \
	CCARGS="${CCARGS}" AUXLIBS="${AUXLIBS}" \
	AUXLIBS_LDAP="${AUXLIBS_LDAP}" AUXLIBS_PCRE="${AUXLIBS_PCRE}" \
	AUXLIBS_SQLITE="${AUXLIBS_SQLITE}" SHLIB_SUFFIX=".so" SHLIB_RPATH="$LDFLAGS -Wl,-blibpath:/opt/freeware/lib/postfix:/opt/freeware/lib:/usr/lib:/lib"
gmake

%install
[ "${RPM_BUILD_ROOT}" != "/" ] && rm -rf ${RPM_BUILD_ROOT}
# install postfix into $RPM_BUILD_ROOT

make non-interactive-package \
       install_root=$RPM_BUILD_ROOT \
       config_directory=%{_sysconfdir}/postfix \
       meta_directory=%{_sysconfdir}/postfix \
       shlib_directory=%{_libdir}/postfix \
       daemon_directory=%{_libexecdir}/postfix \
       command_directory=%{_sbindir} \
       queue_directory=%{_prefix}/var/spool/postfix \
       data_directory=%{_prefix}/var/lib/postfix \
       sendmail_path=%{_sbindir}/sendmail.postfix \
       newaliases_path=%{_bindir}/newaliases.postfix \
       mailq_path=%{_bindir}/mailq.postfix \
       mail_owner=%{postfix_user} \
       setgid_group=%{maildrop_group} \
       manpage_directory=%{_mandir} \
       sample_directory=%{postfix_sample_dir} \
       readme_directory=%{postfix_readme_dir} \
       html_directory=no || exit 1

# Move stuff around so we don't conflict with sendmail
cd $RPM_BUILD_ROOT%{_prefix}
for i in man1/mailq.1 man1/newaliases.1 man1/sendmail.1 man5/aliases.5 man8/smtpd.8; do
  dest=$(echo $i | sed 's|\.[1-9]$|.postfix\0|')
  mv man/$i man/$dest
  sed -i "s|^\.so $i|\.so $dest|" man/man?/*.[1-9]
done
cd -

install -c auxiliary/rmail/rmail $RPM_BUILD_ROOT%{_bindir}/rmail.postfix

# install performance benchmark and test tools by hand
for i in smtp-sink smtp-source posttls-finger ; do
  install -c -m 755 bin/$i $RPM_BUILD_ROOT%{_sbindir}/
  install -c -m 755 man/man1/$i.1 $RPM_BUILD_ROOT%{_mandir}/man1/
done

# Install the smtpd.conf file for SASL support.
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/sasl2
install -m 644 %{SOURCE1} $RPM_BUILD_ROOT%{_sysconfdir}/sasl2/smtpd.conf

# create /usr/lib/sendmail
mkdir -p $RPM_BUILD_ROOT%{_prefix}/lib
cd $RPM_BUILD_ROOT%{_prefix}/lib
ln -sf ../sbin/sendmail.postfix .
cd - 

# helper for splitting content of dynamicmaps.cf and postfix-files
function split_file
{
# "|| :" to silently skip non existent records
  grep "$1" "$3" >> "$3.d/$2" || :
  sed -i "\|$1| d" "$3" || :
}

# split global dynamic maps configuration to individual sub-packages
cd $RPM_BUILD_ROOT%{_sysconfdir}/postfix
for map in sqlite ldap pcre ;do
  rm -f dynamicmaps.cf.d/"$map" "postfix-files.d/$map"
  split_file "^\s*$map\b" "$map" dynamicmaps.cf
  split_file "^\$shlib_directory/postfix-$map\\.so:" "$map" postfix-files
  split_file "^\$manpage_directory/man5/${map}_table\\.5" "$map" postfix-files
  map_upper=`echo $map | tr '[:lower:]' '[:upper:]'`
  split_file "^\$readme_directory/${map_upper}_README:" "$map" postfix-files
done
cd -


%pre
result=`/usr/sbin/lsgroup %{maildrop_group} | /usr/bin/awk '{ print $1 }' 2>/dev/null`
if [[ "${result}" != "%{maildrop_group}" ]] ; then
    /usr/bin/mkgroup -A id=%{maildrop_gid} %{maildrop_group} 2> /dev/null || :
fi
result=`/usr/sbin/lsgroup %{postfix_group} | /usr/bin/awk '{ print $1 }' 2>/dev/null`
if [[ "${result}" != "%{postfix_group}" ]] ; then
    /usr/bin/mkgroup -A id=%{postfix_gid} %{postfix_group} 2> /dev/null || :
fi
result=`/usr/sbin/lsgroup mail | /usr/bin/awk '{ print $1 }' 2>/dev/null`
if [[ "${result}" != "mail" ]] ; then
    /usr/bin/mkgroup -A  mail 2> /dev/null || :
fi
result=`/usr/sbin/lsuser %{postfix_user} | /usr/bin/awk '{ print $1 }' 2>/dev/null`
if [[ "${result}" != "%{postfix_user}" ]] ; then
    /usr/bin/mkuser id=%{postfix_uid} login='false' rlogin='false' pgrp=%{postfix_group} home=%{_prefix}/var/spool/postfix groups=mail %{postfix_user} 2> /dev/null || :
fi

%preun
if [ "$1" = "0" ]; then
    /usr/sbin/rmuser -p %{postfix_user}
    /usr/sbin/rmgroup %{maildrop_group}
    /usr/sbin/rmgroup %{postfix_group}
    /usr/sbin/rmgroup mail
fi

%files
%defattr(-,root,system,-)
%dir %{_sysconfdir}/postfix
%dir %{_libexecdir}/postfix
%dir %{_prefix}/var/spool/postfix
%dir %{_libdir}/postfix
%dir %attr(0700, %{postfix_user}, system) %{_prefix}/var/spool/postfix/active
%dir %attr(0700, %{postfix_user}, system) %{_prefix}/var/spool/postfix/bounce
%dir %attr(0700, %{postfix_user}, system) %{_prefix}/var/spool/postfix/corrupt
%dir %attr(0700, %{postfix_user}, system) %{_prefix}/var/spool/postfix/defer
%dir %attr(0700, %{postfix_user}, system) %{_prefix}/var/spool/postfix/deferred
%dir %attr(0700, %{postfix_user}, system) %{_prefix}/var/spool/postfix/flush
%dir %attr(0700, %{postfix_user}, system) %{_prefix}/var/spool/postfix/hold
%dir %attr(0700, %{postfix_user}, system) %{_prefix}/var/spool/postfix/incoming
%dir %attr(0700, %{postfix_user}, system) %{_prefix}/var/spool/postfix/saved
%dir %attr(0700, %{postfix_user}, system) %{_prefix}/var/spool/postfix/trace
%dir %attr(0730, %{postfix_user}, %{maildrop_group}) %{_prefix}/var/spool/postfix/maildrop
%dir %{_prefix}/var/spool/postfix/pid
%dir %attr(0700, %{postfix_user}, system) %{_prefix}/var/spool/postfix/private
%dir %attr(0710, %{postfix_user}, %{maildrop_group}) %{_prefix}/var/spool/postfix/public
%dir %attr(0700, %{postfix_user}, system) %{_prefix}/var/lib/postfix
%dir %{_sysconfdir}/postfix/dynamicmaps.cf.d
%dir %{_sysconfdir}/postfix/postfix-files.d

%{_mandir}/man1/post*.1*
%{_mandir}/man1/smtp*.1*
%{_mandir}/man1/*.postfix.1*
%{_mandir}/man5/access.5*
%{_mandir}/man5/[b-v]*.5*
%{_mandir}/man5/*.postfix.5*
%{_mandir}/man8/[a-qt-v]*.8*
%{_mandir}/man8/s[ch-lnp]*.8*
%{_mandir}/man8/smtp.8*
%{_mandir}/man8/smtpd.postfix.8*

%{_sbindir}/smtp-sink
%{_sbindir}/smtp-source
%{_sbindir}/posttls-finger

%{_sbindir}/postalias
%{_sbindir}/postcat
%{_sbindir}/postconf
%attr(2755, root, %{maildrop_group}) %{_sbindir}/postdrop
%{_sbindir}/postfix
%{_sbindir}/postkick
%{_sbindir}/postlock
%{_sbindir}/postlog
%{_sbindir}/postmap
%{_sbindir}/postmulti
%attr(2755, root, %{maildrop_group}) %{_sbindir}/postqueue
%{_sbindir}/postsuper
%config(noreplace) %{_sysconfdir}/postfix/access
%config(noreplace) %{_sysconfdir}/postfix/canonical
%config(noreplace) %{_sysconfdir}/postfix/generic
%config(noreplace) %{_sysconfdir}/postfix/header_checks
%config(noreplace) %{_sysconfdir}/postfix/main.cf
%config(noreplace) %{_sysconfdir}/postfix/main.cf.proto
%config(noreplace) %{_sysconfdir}/postfix/master.cf
%config(noreplace) %{_sysconfdir}/postfix/master.cf.proto
%config(noreplace) %{_sysconfdir}/postfix/relocated
%config(noreplace) %{_sysconfdir}/postfix/transport
%config(noreplace) %{_sysconfdir}/postfix/virtual
%{_sysconfdir}/postfix/dynamicmaps.cf
%{_libexecdir}/postfix/[^mp]*
%{_libexecdir}/postfix/master
%{_libexecdir}/postfix/pickup
%{_libexecdir}/postfix/pipe
%{_libexecdir}/postfix/post-install
%{_sysconfdir}/postfix/postfix-files
%{_libexecdir}/postfix/postfix-script
%{_libexecdir}/postfix/postfix-tls-script
%{_libexecdir}/postfix/postfix-wrapper
%{_libexecdir}/postfix/postmulti-script
%{_libexecdir}/postfix/postscreen
%{_libexecdir}/postfix/postlogd
%{_libexecdir}/postfix/proxymap
%{_libdir}/postfix/libpostfix-*.a
%{_bindir}/mailq.postfix
%{_bindir}/newaliases.postfix
%{_bindir}/rmail.postfix
%{_sbindir}/sendmail.postfix
%{_prefix}/lib/sendmail.postfix

%config(noreplace) %{_sysconfdir}/sasl2/smtpd.conf

%files sqlite
%{_sysconfdir}/postfix/dynamicmaps.cf.d/sqlite
%{_sysconfdir}/postfix/postfix-files.d/sqlite
%{_libdir}/postfix/postfix-sqlite.so
%{_mandir}/man5/sqlite_table.5*
%{postfix_doc_dir}/README_FILES/SQLITE_README

%files ldap
%{_sysconfdir}/postfix/dynamicmaps.cf.d/ldap
%{_sysconfdir}/postfix/postfix-files.d/ldap
%{_libdir}/postfix/postfix-ldap.so
%{_mandir}/man5/ldap_table.5*
%{postfix_doc_dir}/README_FILES/LDAP_README

%files pcre
%{_sysconfdir}/postfix/dynamicmaps.cf.d/pcre
%{_sysconfdir}/postfix/postfix-files.d/pcre
%{_libdir}/postfix/postfix-pcre.so
%{_mandir}/man5/pcre_table.5*
%{postfix_doc_dir}/README_FILES/PCRE_README

%changelog
* Mon Feb 16 2026 Reshma V Kumar <reskumar@in.ibm.com> - 3.10.7-1 
- Update to version 3.10.7

* Tue Sep 06 2022 Reshma V Kumar <reskumar@in.ibm.com> - 3.7.2-1
- Initial port for AIX toolbox
