File sqmail.spec of Package sqmail

#
# spec file for package sqmail
#
# Copyright (c) 2024 SUSE LLC
#
# 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 https://bugs.opensuse.org/
#


%define		sq_home %{_localstatedir}/lib/%{name}
%define		sq_bin %{_prefix}/lib/%{name}
%define		sq_etc %{_sysconfdir}/%{name}
%define         sq_log %{_localstatedir}/log
Name:           sqmail
Version:        4.3.17
Release:        0
Summary:        TLS encryption for Client/Server IPv6/IPv4 communication
License:        SUSE-Public-Domain
Group:          Productivity/Networking/Other
URL:            https://www.fehcom.de/sqmail/sqmail.html
Source0:        http://www.fehcom.de/sqmail/sqmail-%{version}.tgz
Source99:       sqmail.permissions
Source100:      sqmail.rpmlintrc
Patch0:         sqmail-install-dont-chown.patch
#Patch2:         sqmail-fix-script-destination.patch
BuildRequires:  gcc-c++
BuildRequires:  libfehQlibs0-devel >= 25
BuildRequires:  man
BuildRequires:  pkgconfig
BuildRequires:  sqmail-users
BuildRequires:  ucspi-ssl-devel
BuildRequires:  pkgconfig(libcrypto)
BuildRequires:  pkgconfig(libidn2)
# FIXME: use proper Requires(pre/post/preun/...)
Requires(post): permissions
Requires(pre):  permissions
PreReq:         permissions
Conflicts:      exim
Conflicts:      postfix-bdb
Conflicts:      qmail
Conflicts:      qmail-toaster
Conflicts:      sendmail
Provides:       smtp_daemon

%description
S/qmail is a drop-in replacement for most sites developed by Erwin Hoffmann

Qmail is a mail transfer agent (MTA) that runs on Unix. It was written, starting December
1995, by Daniel J. Bernstein as a more secure alternative to the popular Sendmail program.
Originally license-free software, qmail's source code was later dedicated to the public
domain by the author.

* s/qmail provides TLS support based on the ucspi-ssl package.
* SMTP Authentication, Anti-Spam, and Anti-Virus features are supported out-of-the-box.
* Recipient and MAV capabilities in addition with powerful filters for SMTP envelope addresses.
* Scalable and reliable mail delivery is guaranteed by means of QMQ.
* Native IPv6 support for all communication modules.

%package systemd-native
Summary:        Systemd services for sqmail
Requires:       sqmail
Conflicts:      sqmail-systemd-daemontools
Provides:       sqmail-starter

%description systemd-native
This package contains a systemd configuration to run sqmail as systemd managed services

%package systemd-daemontools
Summary:        Systemd services for daemontools for sqmail
Requires:       sqmail
Conflicts:      sqmail-systemd-native
Provides:       sqmail-starter

%description systemd-daemontools
This package contains a systemd configuration to run sqmail via daemontools

%prep
%setup -q -T -c %{name}-%{version}
tar --strip-components=3 -xzf %{SOURCE0}
%autopatch -p3

# configure options and paths
echo 'cc %{optflags} -IDN2 -I%{_includedir}/qlibs -I%{_includedir}/ucspi-ssl -Isrc/include' > conf-cc
#echo 'cc' > conf-ld

echo '' > conf-idn2

echo '%{buildroot}%{_mandir}' > conf-man
echo '%{buildroot}%{sq_etc}/service' > conf-svcdir
echo '%{_libdir}' > conf-qlibs

# get qmaild home from user entry
echo '%{buildroot}'`getent passwd qmaild | cut -d: -f6` > conf-home

mkdir -p compile
# create ucspissl related files in the ./ucspissl directory using a structure
# expected by the build process
mkdir -p "$PWD/ucspissl/compile"
echo "$PWD/ucspissl" > conf-ucspissl
echo "$PWD/ucspissl/compile" > ucspissl/conf-ssl
ln -s %{_includedir}/ucspi-ssl/ssl.lib ./ucspissl/compile/
ln -s %{_includedir}/ucspi-ssl/ucspissl.h ./ucspissl/compile/
ln -s %{_libdir}/ucspissl.a ./ucspissl/compile/

# let the installers continue on error (chown can not be used by abuild user)
sed -i package/{legacy,upgrade,sslenv,service,run} -e 's/ exit 111;//';

# fake sendmail's location to satisfy package/run
sed -i package/run -e 's|`which sendmail`|%{buildroot}%{_bindir}/sendmail|'

# set final direcctories in man-pages
sed -i man/* -e 's|SQMAIL/users|%{sq_etc}/users|'
sed -i man/* -e 's|SQMAIL/control|%{sq_etc}/control|'
sed -i man/* -e 's|SQMAIL/alias|%{sq_etc}/alias|'

sed -i src/{datemail,mailsubj,qmail-mrtg-queue,qmail-qstat,zddist,zdeferrals,zfailures,zrecipients,zrhosts,zrxdelay,zsenders,zsuccesses,zsuids}.sh \
	-e 's|HOME|%{sq_home}|g'

%build
cat conf-home
export CFLAGS="%{optflags} -fvisibility=hidden"
package/ucspissl
package/compile

%install
# permission file
mkdir -p %{buildroot}%{_sysconfdir}/permissions.d
cp %{SOURCE99} %{buildroot}%{_sysconfdir}/permissions.d/sqmail

# symlinked direcctories
mkdir -p %{buildroot}%{sq_home} %{buildroot}%{sq_bin} %{buildroot}%{sq_log}

# binaries are symlinked in /usr/lib/sqmail
ln -s ../../..%{sq_bin} %{buildroot}%{sq_home}/bin

# directory with additional commands
mkdir -p %{buildroot}%{sq_home}/commands

# configs are symlinked in /etc/sqmail
mkdir -p %{buildroot}%{sq_etc}/{control,alias,svc,ssl,users}
ln -s ../../..%{sq_etc}/{control,alias,svc,ssl,users} %{buildroot}%{sq_home}/

# queues and locks
mkdir -p %{buildroot}%{sq_home}/queue

# create the log-destinations
mkdir -p %{buildroot}%{sq_log}/{qmail-send,qmail-smtpd,qmail-smtpsd,qmail-smtpsub,qmail-pop3d,qmail-pop3sd}

# let the packaging system copy the man files to existing directories
mkdir -p %{buildroot}%{_mandir}

# create fake-sendmail
mkdir -p %{buildroot}%{_bindir}
touch %{buildroot}%{_bindir}/sendmail

package/dir
package/ids
package/upgrade
package/legacy
package/man
package/control
package/sslenv
package/service
package/scripts - pam
package/run

# remove sendmail files created by the installer, replace by correct symlink
rm %{buildroot}%{_bindir}/{sendmail_,sendmail}
ln -s ../..%{sq_bin}/sendmail %{buildroot}%{_bindir}/sendmail

# remove host-specific configs to be created upon installation
rm %{buildroot}%{sq_etc}/control/me

# remove buildroot from several files
sed -i %{buildroot}%{sq_etc}/ssl/ssl.env -e 's|%{buildroot}||'
sed -i %{buildroot}%{sq_etc}/svc/**/run -e 's|%{buildroot}||'
sed -i %{buildroot}%{_mandir}/cat5/qmail-users.0 -e 's|%{buildroot}||'
sed -i %{buildroot}%{_mandir}/cat8/qmail-dksign.0 -e 's|%{buildroot}||'

# this file is already container in ucspi-tcp6
rm %{buildroot}%{_mandir}/man5/tcp-environ.5*

ls -la %{buildroot}%{_sysconfdir}/sqmail/svc/qmail-pop3sd/

%pre
%post
%set_permissions %{name}

# create host-specific configurations
if [ ! -e %{sq_etc}/control/me ] ; then
	hostname > %{sq_etc}/control/me
fi
if [ ! -e %{sq_etc}/control/rcpthosts ] ; then
	hostname > %{sq_etc}/control/rcpthosts
fi
if [ ! -e %{sq_etc}/control/tlsdestinations ] ; then
	echo '*:' > %{sq_etc}/control/tlsdestinations
fi

%files
%defattr(0644,root,sqmail,755)
# permissions
%{_sysconfdir}/permissions.d/%{name}

# sqmail
%dir %{sq_home}

# symlinks to configs and queues
%{sq_home}/alias
%{sq_home}/control
%{sq_home}/ssl
%{sq_home}/svc
%{sq_home}/users

# configuration directories
%defattr(0644,root,sqmail,0750)
%dir %{sq_etc}
%dir %{sq_etc}/alias
%dir %{sq_etc}/control
%dir %{sq_etc}/svc
%dir %{sq_etc}/svc/{qmail-pop3d,qmail-pop3sd,qmail-send,qmail-smtpd,qmail-smtpsd,qmail-smtpsub}
%dir %attr(0750,sqmtls,nofiles) %{sq_etc}/ssl
%dir %{sq_etc}/users

# configuration files
%config %attr(0644,alias,sqmail) %{sq_etc}/alias/.qmail*
%config %attr(0644,alias,sqmail) %{sq_etc}/control/*
%config %attr(0755,alias,sqmail) %{sq_etc}/svc/{qmail-pop3d,qmail-pop3sd,qmail-send,qmail-smtpd,qmail-smtpsd,qmail-smtpsub}/run
%config %attr(0644,alias,sqmail) %{sq_etc}/svc/{qmail-pop3d,qmail-pop3sd,qmail-send,qmail-smtpd,qmail-smtpsd,qmail-smtpsub}/down
%config %attr(0644,sqmtls,nofiles) %{sq_etc}/ssl/*

# ### qmail queue
%dir %{sq_home}/queue

# ### log files
%attr(750,root,root) %dir %{sq_log}/{qmail-send,qmail-smtpd,qmail-smtpsd,qmail-smtpsub,qmail-pop3d,qmail-pop3sd}

%defattr(0700,qmails,sqmail)
%dir %{sq_home}/queue/bounce
%dir %{sq_home}/queue/info
%dir %{sq_home}/queue/local
%dir %{sq_home}/queue/remote

%dir %{sq_home}/queue/info/*
%dir %{sq_home}/queue/local/*
%dir %{sq_home}/queue/remote/*

%defattr(0700,qmailq,sqmail)
%dir %{sq_home}/queue/intd
%dir %{sq_home}/queue/pid

%defattr(0750,qmailq,sqmail)
%dir %{sq_home}/queue/lock
%dir %{sq_home}/queue/mess
%dir %{sq_home}/queue/mess/*
%dir %{sq_home}/queue/todo

# ### lock directory
%attr(0622,qmails,sqmail) %{sq_home}/queue/lock/trigger
%attr(0600,qmails,sqmail) %{sq_home}/queue/lock/sendmutex
%attr(0644,qmailr,sqmail) %{sq_home}/queue/lock/tcpto

# ### binaries
%defattr(0755,root,sqmail)
%{sq_home}/bin
%dir %{sq_bin}
%attr(0711,qmailq,sqmail) %{sq_bin}/{qmail-dkim,qmail-qmaint}
%attr(4711,qmailq,sqmail) %{sq_bin}/{qmail-dksign,qmail-dkverify,qmail-queue}
%attr(6711,root,sqmail) %{sq_bin}/{qmail-authuser,qmail-postgrey,qmail-vmailuser}
%attr(0700,root,sqmail) %{sq_bin}/{qmail-lspawn,qmail-newmrh,qmail-newu,qmail-start}
%attr(0711,root,sqmail) %{sq_bin}/{qmail-badloadertypes,qmail-badmimetypes,qmail-clean,qmail-getpw,qmail-local,qmail-mfrules}
%attr(0711,root,sqmail) %{sq_bin}/{qmail-popup,qmail-pw2u,qmail-recipients,qmail-remote,qmail-rspawn,qmail-send,qmail-smtpam,qmail-todo,splogger}
%{sq_bin}/bouncesaying
%{sq_bin}/columnt
%{sq_bin}/condredirect
%{sq_bin}/datemail
%{sq_bin}/ddist
%{sq_bin}/deferrals
%{sq_bin}/dnscname
%{sq_bin}/dnsfq
%{sq_bin}/dnsip
%{sq_bin}/dnsmxip
%{sq_bin}/dnsptr
%{sq_bin}/dnstlsa
%{sq_bin}/dnstxt
%{sq_bin}/except
%{sq_bin}/failures
%{sq_bin}/fastforward
%{sq_bin}/forward
%{sq_bin}/hostname
%{sq_bin}/ipmeprint
%{sq_bin}/maildir2mbox
%{sq_bin}/maildirmake
%{sq_bin}/maildirwatch
%{sq_bin}/mailsubj
%{sq_bin}/matchup
%{sq_bin}/newaliases
%{sq_bin}/newinclude
%{sq_bin}/predate
%{sq_bin}/preline
%{sq_bin}/printforward
%{sq_bin}/printmaillist
%{sq_bin}/qbiff
%{sq_bin}/qmail-inject
%{sq_bin}/qmail-mrtg
%{sq_bin}/qmail-mrtg-queue
%{sq_bin}/qmail-pop3d
%{sq_bin}/qmail-qmqpc
%{sq_bin}/qmail-qmqpd
%{sq_bin}/qmail-qmtpd
%{sq_bin}/qmail-qread
%{sq_bin}/qmail-qstat
%{sq_bin}/qmail-showctl
%{sq_bin}/qmail-smtpd
%{sq_bin}/qmail-tcpok
%{sq_bin}/qmail-tcpto
%{sq_bin}/qreceipt
%{sq_bin}/recipients
%{sq_bin}/rhosts
%{sq_bin}/rxdelay
%{sq_bin}/senders
%{sq_bin}/sendmail
%{sq_bin}/setforward
%{sq_bin}/setmaillist
%{sq_bin}/spfquery
%{sq_bin}/srsforward
%{sq_bin}/srsreverse
%{sq_bin}/successes
%{sq_bin}/suids
%{sq_bin}/tai64nfrac
%{sq_bin}/xqp
%{sq_bin}/xrecipient
%{sq_bin}/xsender
%{sq_bin}/zddist
%{sq_bin}/zdeferrals
%{sq_bin}/zfailures
%{sq_bin}/zoverall
%{sq_bin}/zrecipients
%{sq_bin}/zrhosts
%{sq_bin}/zrxdelay
%{sq_bin}/zsenders
%{sq_bin}/zsendmail
%{sq_bin}/zsuccesses
%{sq_bin}/zsuids

%{_bindir}/sendmail

# ### man pages
%defattr(0644,root,root)
%{_mandir}/man[1356789]/*
%{_mandir}/cat[1578]*

%changelog
openSUSE Build Service is sponsored by