diff --git a/.gitignore b/.gitignore index f43b1f6..93cc45e 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ -/mimedefang-?.*.tar.gz +/mimedefang-*.tar.gz +/mimedefang-*.tar.gz.asc +/mimedefang-*.tar.gz.sig diff --git a/9F9B564003DFF9E4D904301E3B6DDB11E78FEBD2 b/9F9B564003DFF9E4D904301E3B6DDB11E78FEBD2 new file mode 100644 index 0000000..eba97e6 --- /dev/null +++ b/9F9B564003DFF9E4D904301E3B6DDB11E78FEBD2 @@ -0,0 +1,55 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Comment: 9F9B 5640 03DF F9E4 D904 301E 3B6D DB11 E78F EBD2 +Comment: MIMEDefang Project Management Committee (Code Signing K + +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 +E7Fo/uo= +=BedK +-----END PGP PUBLIC KEY BLOCK----- diff --git a/README.FEDORA b/README.FEDORA index 5be2ad9..7eb2786 100644 --- a/README.FEDORA +++ b/README.FEDORA @@ -5,16 +5,16 @@ sample filters in the /usr/share/doc/mimedefang-* directory. In order to complete the installation of MIMEDefang, you will need to add for example the following lines to your /etc/mail/sendmail.mc file (which requires, -in turn, the installation of sendmail-cf): +in turn, the installation of sendmail-cf package): define(`MILTER', `1')dnl define(`confMILTER_LOG_LEVEL', `6')dnl INPUT_MAIL_FILTER(`mimedefang', `S=unix:/var/spool/MIMEDefang/mimedefang.sock, F=T, T=S:1m;R:1m;E:5m')dnl -Use "service sendmail restart" to rebuild your /etc/mail/sendmail.cf file, run -"chkconfig --level 2345 on" to start MIMEDefang during booting time per default -and execute "service mimedefang start" to start the service. When everything -was correct, MIMEDefang should now do its job... +Use "systemctl restart sendmail.service" to rebuild your /etc/mail/sendmail.cf +file, run "systemctl enable mimedefang.service" to start MIMEDefang during boot +time per default and execute "systemctl enable mimedefang.service" to start the +service. When everything was correct, MIMEDefang should now do its job... For the integration of MIMEDefang and ClamAV, some manual steps are required: diff --git a/mimedefang-3.6-tests.patch b/mimedefang-3.6-tests.patch new file mode 100644 index 0000000..575a663 --- /dev/null +++ b/mimedefang-3.6-tests.patch @@ -0,0 +1,89 @@ +From 7379afce07b19c04a1927172ddd2ebb9213d87fa Mon Sep 17 00:00:00 2001 +From: Robert Scheck +Date: Sat, 1 Mar 2025 15:29:17 +0100 +Subject: [PATCH] Skip DNS tests without network access (#83) + +$ make test +prove -It/lib --recurse t +t/actions.t ... ok +t/antispam.t .. ok +t/arc.t ....... ok +t/authres.t ... ok +t/core.t ...... ok +t/critic.t .... skipped: Author test. Set $ENV{TEST_AUTHOR} to a true value to run. +t/dates.t ..... ok +t/dkim.t ...... ok +t/headers.t ... ok +t/mime.t ...... ok +t/net.t ....... +Dubious, test returned 3 (wstat 768, 0x300) +Failed 3/15 subtests + (less 3 skipped subtests: 9 okay) +t/relay.t ..... ok +t/sender.t .... ok +t/smtp.t ...... ok +t/spf.t ....... ok +t/utils.t ..... ok +Test Summary Report +------------------- +t/net.t (Wstat: 768 (exited 3) Tests: 15 Failed: 3) + Failed tests: 5-6, 11 + Non-zero exit status: 3 +Files=16, Tests=130, 680 wallclock secs ( 0.05 usr 0.03 sys + 3.91 cusr 0.71 csys = 4.70 CPU) +Result: FAIL +make: *** [Makefile:365: test] Error 1 +--- + t/net.t | 28 +++++++++++++++++++++++----- + 1 file changed, 23 insertions(+), 5 deletions(-) + +diff --git a/t/net.t b/t/net.t +index 4710ce2..69e1877 100644 +--- a/t/net.t ++++ b/t/net.t +@@ -55,7 +55,13 @@ sub t_reverse_ip : Test(2) + sub t_get_ptr_record : Test(1) + { + my $ipv4 = '1.1.1.1'; +- is(Mail::MIMEDefang::Net::get_ptr_record($ipv4), 'one.one.one.one'); ++ ++ SKIP: { ++ if ( (not defined $ENV{'NET_TEST'}) or ($ENV{'NET_TEST'} ne 'yes' )) { ++ skip "Net test disabled", 1 ++ } ++ is(Mail::MIMEDefang::Net::get_ptr_record($ipv4), 'one.one.one.one'); ++ } + } + + sub t_relay_is_blacklisted_multi : Test(1) +@@ -107,15 +113,27 @@ sub t_email_is_blacklisted : Test(1) + sub t_md_get_bogus_mx_hosts : Test(1) + { + my $domain = 'multihomed.dnsbltest.spamassassin.org'; +- my @res = md_get_bogus_mx_hosts($domain); +- is(scalar @res, 1); ++ ++ SKIP: { ++ if ( (not defined $ENV{'NET_TEST'}) or ($ENV{'NET_TEST'} ne 'yes' )) { ++ skip "Net test disabled", 1 ++ } ++ my @res = md_get_bogus_mx_hosts($domain); ++ is(scalar @res, 1); ++ } + } + + sub t_get_mx_ip_addresses : Test(1) + { + my $domain = 'mimedefang.org'; +- my @res = get_mx_ip_addresses($domain); +- is(scalar @res, 2); ++ ++ SKIP: { ++ if ( (not defined $ENV{'NET_TEST'}) or ($ENV{'NET_TEST'} ne 'yes' )) { ++ skip "Net test disabled", 1 ++ } ++ my @res = get_mx_ip_addresses($domain); ++ is(scalar @res, 2); ++ } + } + + __PACKAGE__->runtests(); diff --git a/mimedefang-multiplexor.service b/mimedefang-multiplexor.service new file mode 100644 index 0000000..e7b39ae --- /dev/null +++ b/mimedefang-multiplexor.service @@ -0,0 +1,20 @@ +[Unit] +Description=MIMEDefang multiplexor +After=syslog.target network.target +BindsTo=mimedefang.service +Documentation=man:mimedefang-multiplexor(8) +Documentation=man:mimedefang.pl(8) + +[Service] +Type=forking +PIDFile=/run/mimedefang-multiplexor.pid +Environment=HOME=/var/spool/MIMEDefang +Environment=LANG=C +EnvironmentFile=-/etc/sysconfig/mimedefang +ExecStartPre=/usr/libexec/mimedefang-wrapper configtest +ExecStart=/usr/libexec/mimedefang-wrapper multiplexor +ExecReload=/usr/libexec/mimedefang-wrapper reload +SuccessExitStatus=1 + +[Install] +WantedBy=multi-user.target diff --git a/mimedefang-wrapper b/mimedefang-wrapper new file mode 100644 index 0000000..c04ca95 --- /dev/null +++ b/mimedefang-wrapper @@ -0,0 +1,76 @@ +#!/bin/sh + +# Make sure required variables are set +SOCKET=${SOCKET:=/var/spool/MIMEDefang/mimedefang.sock} +MX_SOCKET=${MX_SOCKET:=/var/spool/MIMEDefang/mimedefang-multiplexor.sock} + +if [ "$1" = "start" ]; then + # Tricky stuff below... "echo -E" won't work, hence the two-step. + exec /usr/bin/mimedefang -P /run/mimedefang.pid \ + -o /var/spool/MIMEDefang/mimedefang.lock \ + -m $MX_SOCKET -y \ + $([ -n "$LOOPBACK_RESERVED_CONNECTIONS" ] && echo "-R $LOOPBACK_RESERVED_CONNECTIONS") \ + $([ -n "$MX_USER" ] && echo "-U $MX_USER") \ + $([ -n "$SYSLOG_FACILITY" ] && echo "-S $SYSLOG_FACILITY") \ + $([ "$LOG_FILTER_TIME" = "yes" ] && echo "-T") \ + $([ "$MX_RELAY_CHECK" = "yes" ] && echo "-r") \ + $([ "$MX_HELO_CHECK" = "yes" ] && echo "-H") \ + $([ "$MX_SENDER_CHECK" = "yes" ] && echo "-s") \ + $([ "$MX_RECIPIENT_CHECK" = "yes" ] && echo "-t") \ + $([ "$KEEP_FAILED_DIRECTORIES" = "yes" ] && echo "-k") \ + $([ "$MD_ALLOW_GROUP_ACCESS" = "yes" ] && echo "-G") \ + $([ "$MD_SKIP_BAD_RCPTS" = "yes" ] && echo "-N") \ + $([ -n "$MD_EXTRA" ] && echo "$MD_EXTRA") \ + $([ "$ALLOW_NEW_CONNECTIONS_TO_QUEUE" = "yes" ] && echo "-q") \ + -p $SOCKET +fi + +if [ "$1" = "configtest" ]; then + # Check mimedefang-filter syntax + /usr/bin/mimedefang.pl $([ -n "$SUBFILTER" ] && echo "-f $SUBFILTER") -test > /var/spool/MIMEDefang/configtest.out 2>&1 + if [ $? != 0 ]; then + cat /var/spool/MIMEDefang/configtest.out + exit 2 + fi + rm -f /var/spool/MIMEDefang/configtest.out +fi + +if [ "$1" = "reload" ]; then + /usr/bin/md-mx-ctrl -s $MX_SOCKET reread > /dev/null 2>&1 +fi + +if [ "$1" = "multiplexor" ]; then + # Tricky stuff below... "echo -E" won't work, hence the two-step. + exec /usr/bin/mimedefang-multiplexor -p /run/mimedefang-multiplexor.pid \ + -o /var/spool/MIMEDefang/mimedefang-multiplexor.lock \ + $([ -n "$FILTER" ] && echo "-f $FILTER") \ + $([ -n "$SYSLOG_FACILITY" ] && echo "-S $SYSLOG_FACILITY") \ + $([ -n "$SUBFILTER" ] && echo "-F $SUBFILTER") \ + $([ -n "$MX_MINIMUM" ] && echo "-m $MX_MINIMUM") \ + $([ -n "$MX_MAXIMUM" ] && echo "-x $MX_MAXIMUM") \ + $([ -n "$MX_RECIPOK_PERDOMAIN_LIMIT" ] && echo "-y $MX_RECIPOK_PERDOMAIN_LIMIT") \ + $([ -n "$MX_USER" ] && echo "-U $MX_USER") \ + $([ -n "$MX_IDLE" ] && echo "-i $MX_IDLE") \ + $([ -n "$MX_BUSY" ] && echo "-b $MX_BUSY") \ + $([ -n "$MX_QUEUE_SIZE" ] && echo "-q $MX_QUEUE_SIZE") \ + $([ -n "$MX_QUEUE_TIMEOUT" ] && echo "-Q $MX_QUEUE_TIMEOUT") \ + $([ -n "$MX_REQUESTS" ] && echo "-r $MX_REQUESTS") \ + $([ -n "$MX_MAP_SOCKET" ] && echo "-N $MX_MAP_SOCKET") \ + $([ -n "$MX_WORKER_DELAY" ] && echo "-w $MX_WORKER_DELAY") \ + $([ -n "$MX_MIN_WORKER_DELAY" ] && echo "-W $MX_MIN_WORKER_DELAY") \ + $([ -n "$MX_LOG_WORKER_STATUS_INTERVAL" ] && echo "-L $MX_LOG_WORKER_STATUS_INTERVAL") \ + $([ -n "$MX_MAX_RSS" ] && echo "-R $MX_MAX_RSS") \ + $([ -n "$MX_MAX_AS" ] && echo "-M $MX_MAX_AS") \ + $([ -n "$MX_MAX_LIFETIME" ] && echo "-V $MX_MAX_LIFETIME") \ + $([ "$MX_EMBED_PERL" = "yes" ] && (echo -n "-"; echo "E")) \ + $([ "$MX_LOG" = "yes" ] && echo "-l") \ + $([ "$MX_STATS" = "yes" ] && echo "-t /var/log/mimedefang/stats") \ + $([ "$MX_STATUS_UPDATES" = "yes" ] && echo "-Z") \ + $([ "$MX_STATS" = "yes" -a "$MX_FLUSH_STATS" = "yes" ] && echo "-u") \ + $([ -n "$MX_TICK_REQUEST" ] && echo "-X $MX_TICK_REQUEST") \ + $([ -n "$MX_TICK_PARALLEL" ] && echo "-P $MX_TICK_PARALLEL") \ + $([ "$MX_STATS_SYSLOG" = "yes" ] && echo "-T") \ + $([ "$MD_ALLOW_GROUP_ACCESS" = "yes" ] && echo "-G") \ + $([ -n "$MX_NOTIFIER" ] && echo "-O $MX_NOTIFIER") \ + -s $MX_SOCKET +fi diff --git a/mimedefang.service b/mimedefang.service new file mode 100644 index 0000000..a8c1f04 --- /dev/null +++ b/mimedefang.service @@ -0,0 +1,18 @@ +[Unit] +Description=MIMEDefang +After=syslog.target network.target mimedefang-multiplexor.service +Before=postfix.service sendmail.service +Requires=mimedefang-multiplexor.service +Documentation=man:mimedefang(8) +Documentation=man:mimedefang-multiplexor(8) + +[Service] +Type=forking +PIDFile=/run/mimedefang.pid +EnvironmentFile=-/etc/sysconfig/mimedefang +ExecStart=/usr/libexec/mimedefang-wrapper start +ExecReload=/usr/libexec/mimedefang-wrapper reload + +[Install] +WantedBy=multi-user.target +Also=mimedefang-multiplexor.service diff --git a/mimedefang.spec b/mimedefang.spec index 6da5364..b044cee 100644 --- a/mimedefang.spec +++ b/mimedefang.spec @@ -1,116 +1,331 @@ -Summary: E-Mail filtering framework using Sendmail's Milter interface -Name: mimedefang -Version: 2.78 -Release: 2%{?dist} -License: GPLv2+ -Group: System Environment/Daemons -URL: http://www.mimedefang.org/ -Source0: http://www.mimedefang.org/static/%{name}-%{version}.tar.gz -Source1: README.FEDORA -Requires: perl-MailTools >= 1.15, perl(Mail::SpamAssassin) >= 1.6 -Requires: perl(IO::Stringy) >= 1.212, perl(MIME::Base64) >= 3.03 -Requires(pre): shadow-utils -Requires(post): /sbin/chkconfig, perl(Digest::SHA1) -Requires(preun): /sbin/service, /sbin/chkconfig -Requires(postun): /sbin/service -BuildRequires: sendmail-devel >= 8.12.0 -BuildRequires: perl(ExtUtils::MakeMaker), perl(ExtUtils::Embed) -BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +Summary: E-mail filtering framework using Sendmail's Milter interface +Name: mimedefang +Version: 3.6 +Release: 3%{?dist} +# {event{,_tcp}.{c,h},eventpriv.h} are GPL-2.0-or-later, rest is GPL-2.0-only +License: GPL-2.0-only AND GPL-2.0-or-later +URL: https://mimedefang.org/ +Source0: https://mimedefang.org/releases/%{name}-%{version}.tar.gz +Source1: https://mimedefang.org/releases/%{name}-%{version}.tar.gz.sig +Source2: https://keys.openpgp.org/vks/v1/by-fingerprint/9F9B564003DFF9E4D904301E3B6DDB11E78FEBD2 +Source3: README.FEDORA +Source4: mimedefang.service +Source5: mimedefang-multiplexor.service +Source6: mimedefang-wrapper +Source7: mimedefang.tmpfilesd +Source8: mimedefang.sysusersd +Patch0: https://github.com/The-McGrail-Foundation/MIMEDefang/commit/7379afce07b19c04a1927172ddd2ebb9213d87fa.patch#/mimedefang-3.6-tests.patch +BuildRequires: gnupg2 +BuildRequires: gcc +BuildRequires: make +BuildRequires: perl-generators +BuildRequires: perl-interpreter +BuildRequires: perl(Digest::SHA) +BuildRequires: perl(ExtUtils::Embed) +BuildRequires: perl(FindBin) +BuildRequires: perl(IO::Socket) +BuildRequires: perl(IO::Socket::SSL) +BuildRequires: perl(Mail::DKIM) +BuildRequires: perl(Mail::SPF) +BuildRequires: perl(MIME::Parser) +BuildRequires: perl(MIME::Tools) >= 5.410 +BuildRequires: perl(MIME::WordDecoder) +BuildRequires: perl(Sys::Hostname) +BuildRequires: perl(Sys::Syslog) +BuildRequires: systemd-rpm-macros +BuildRequires: %{_sbindir}/sendmail +BuildRequires: sendmail-milter-devel >= 8.12.0 +Recommends: perl(Mail::SpamAssassin) >= 1.6 +Requires(post): perl(Digest::SHA) +%{?systemd_requires} +%{?sysusers_requires_compat} + +# Testsuite in %%check +%if 0%{!?_without_tests:1} +BuildRequires: %{_bindir}/prove +BuildRequires: perl(HTML::Parser) +BuildRequires: perl(Mail::DKIM::ARC::Signer) >= 0.44 +BuildRequires: perl(Mail::DKIM::Signer) +BuildRequires: perl(Net::SMTP) +BuildRequires: perl(Test::Class) +BuildRequires: perl(Test::Most) +%endif %description MIMEDefang is an e-mail filter program which works with Sendmail 8.12 -and later. It filters all e-mail messages sent via SMTP. MIMEDefang -splits multi-part MIME messages into their components and potentially -deletes or modifies the various parts. It then reassembles the parts -back into an e-mail message and sends it on its way. +and later, or Postfix. It filters all e-mail messages sent via SMTP. +MIMEDefang splits multi-part MIME messages into their components and +potentially deletes or modifies the various parts. It then reassembles +the parts back into an e-mail message and sends it on its way. -There are some caveats you should be aware of before using MIMEDefang. +There are some caveats users should be aware of before using MIMEDefang. MIMEDefang potentially alters e-mail messages. This breaks a "gentleman's agreement" that mail transfer agents do not modify message bodies. This could cause problems, for example, with encrypted or signed messages. %prep -%setup -q -cp -pf %{SOURCE1} . +%{gpgverify} --keyring='%{SOURCE2}' --signature='%{SOURCE1}' --data='%{SOURCE0}' +%autosetup -p1 +cp -pf %{SOURCE3} . %build -%configure --with-milterlib=%{_libdir} --with-user=defang --disable-check-perl-modules --disable-anti-virus -make %{?_smp_mflags} +%if 0%{?fedora} > 41 || 0%{?rhel} > 10 +export CFLAGS="$CFLAGS -std=gnu17" # RHBZ#2336394, comment #4 +%endif + +%configure --with-milterlib=%{_libdir} --with-user=defang --disable-anti-virus +%make_build %install -rm -rf $RPM_BUILD_ROOT -make DESTDIR=$RPM_BUILD_ROOT INSTALL='install -p' INSTALL_STRIP_FLAG='' install-redhat +%make_install INSTALL_STRIP_FLAG='' install-redhat -# Fix config file, initscript, create log directory and remove duplicate +# Fix config file, create log directory and remove duplicate sed -e '1d' -i $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/%{name} -sed -e 's/2345/-/' -i $RPM_BUILD_ROOT%{_sysconfdir}/rc.d/init.d/%{name} mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/log/%{name} rm -f $RPM_BUILD_ROOT%{_sysconfdir}/mail/sa-mimedefang.cf.example -# Avoid smfi_setsymlist usage due to memory leaks in Sendmail < 8.14.4 -%if 0%{?rhel}%{?fedora} > 5 -sed -e 's/\(-m $MX_SOCKET\)/\1 -y/' -i $RPM_BUILD_ROOT%{_sysconfdir}/rc.d/init.d/%{name} -%endif - -# Fix interpreter (without path) of mimedefang-util script -sed -e 's@^#!perl -w@#!%{_bindir}/perl -w@' -i $RPM_BUILD_ROOT%{_bindir}/mimedefang-util -touch -c -r script/mimedefang-util $RPM_BUILD_ROOT%{_bindir}/mimedefang-util +# Install systemd unit files and tmpfiles +install -D -p -m 0644 %{SOURCE4} $RPM_BUILD_ROOT%{_unitdir}/%{name}.service +install -D -p -m 0644 %{SOURCE5} $RPM_BUILD_ROOT%{_unitdir}/%{name}-multiplexor.service +install -D -p -m 0755 %{SOURCE6} $RPM_BUILD_ROOT%{_libexecdir}/%{name}-wrapper +install -D -p -m 0644 %{SOURCE7} $RPM_BUILD_ROOT%{_tmpfilesdir}/%{name}.conf +install -D -p -m 0644 %{SOURCE8} $RPM_BUILD_ROOT%{_sysusersdir}/%{name}.conf +rm -f $RPM_BUILD_ROOT%{_sysconfdir}/rc.d/init.d/%{name} # Create a dummy file and install perl script for later executing touch $RPM_BUILD_ROOT%{_sysconfdir}/mail/mimedefang-ip-key sed -e '1s@^@#!%{_bindir}/perl\n@' gen-ip-validator.pl > gen-ip-validator.pl.new -install -m 755 gen-ip-validator.pl.new $RPM_BUILD_ROOT%{_bindir}/gen-ip-validator.pl +install -m 0755 gen-ip-validator.pl.new $RPM_BUILD_ROOT%{_bindir}/gen-ip-validator.pl touch -c -r gen-ip-validator.pl $RPM_BUILD_ROOT%{_bindir}/gen-ip-validator.pl -# Convert everything to UTF-8 -iconv -f iso-8859-1 -t utf-8 -o Changelog.utf8 Changelog -touch -c -r Changelog Changelog.utf8 -mv -f Changelog.utf8 Changelog +# Only for regression tests; depends on Test::Class, Test::Most and Net::SMTP +find $RPM_BUILD_ROOT \( -name Unit.pm -o -name "*::Unit.3" \) -exec rm -f {} \; + +%if 0%{!?_without_tests:1} +%check +make test +%endif %pre -getent group defang > /dev/null || %{_sbindir}/groupadd -r defang -getent passwd defang > /dev/null || %{_sbindir}/useradd -r -g defang -d %{_localstatedir}/spool/MIMEDefang -s /sbin/nologin -c "MIMEDefang User" defang -exit 0 +%sysusers_create_compat %{SOURCE8} %post -/sbin/chkconfig --add %{name} +%systemd_post %{name}.service if [ ! -f %{_sysconfdir}/mail/mimedefang-ip-key ]; then %{_bindir}/gen-ip-validator.pl > %{_sysconfdir}/mail/mimedefang-ip-key fi %preun -if [ $1 -eq 0 ]; then - /sbin/service %{name} stop > /dev/null 2>&1 || : - /sbin/chkconfig --del %{name} -fi +%systemd_preun %{name}.service %postun -if [ $1 -ne 0 ]; then - /sbin/service %{name} condrestart > /dev/null 2>&1 || : -fi - -%clean -rm -rf $RPM_BUILD_ROOT +%systemd_postun_with_restart %{name}.service %files -%defattr(-,root,root,-) -%{!?_licensedir:%global license %%doc} -%license COPYING -%doc README README.{NONROOT,SECURITY,SOPHIE,SPAMASSASSIN,VEXIRA,FEDORA} +%license LICENSE +%doc README.md README.{NONROOT,SECURITY,SOPHIE,SPAMASSASSIN,FEDORA} %doc Changelog contrib/{word-to-html,linuxorg,fang.pl} examples/*filter* -%dir %attr(0750,defang,defang) %{_localstatedir}/log/%{name} -%dir %attr(0750,defang,defang) %{_localstatedir}/spool/MIMEDefang -%dir %attr(0750,defang,defang) %{_localstatedir}/spool/MD-Quarantine -%{_bindir}/* -%{_mandir}/man?/* -%{_sysconfdir}/rc.d/init.d/%{name} -%config(noreplace) %{_sysconfdir}/mail/mimedefang-filter -%config(noreplace) %{_sysconfdir}/mail/sa-mimedefang.cf -%ghost %config(noreplace) %{_sysconfdir}/mail/mimedefang-ip-key -%config(noreplace) %{_sysconfdir}/sysconfig/%{name} %config(noreplace) %{_sysconfdir}/logrotate.d/%{name} +%config(noreplace) %{_sysconfdir}/mail/mimedefang-filter +%ghost %config(noreplace) %{_sysconfdir}/mail/mimedefang-ip-key +%config(noreplace) %{_sysconfdir}/mail/sa-mimedefang.cf +%config(noreplace) %{_sysconfdir}/sysconfig/%{name} +%{_bindir}/gen-ip-validator.pl +%{_bindir}/md-mx-ctrl +%{_bindir}/%{name} +%{_bindir}/%{name}.pl +%{_bindir}/%{name}-multiplexor +%{_bindir}/%{name}-release +%{_bindir}/%{name}-util +%{_bindir}/watch-%{name} +%{_bindir}/watch-multiple-%{name}s.tcl +%{_unitdir}/%{name}.service +%{_unitdir}/%{name}-multiplexor.service +%{_libexecdir}/%{name}-wrapper +%{_sysusersdir}/%{name}.conf +%{_tmpfilesdir}/%{name}.conf +%{perl_vendorlib}/Mail/MIMEDefang.pm +%{perl_vendorlib}/Mail/MIMEDefang/ +%{_mandir}/man1/%{name}-util.1* +%{_mandir}/man3/Mail::MIMEDefang*.3* +%{_mandir}/man5/%{name}-filter.5* +%{_mandir}/man7/%{name}-notify.7* +%{_mandir}/man7/%{name}-protocol.7* +%{_mandir}/man8/md-mx-ctrl.8* +%{_mandir}/man8/%{name}.8* +%{_mandir}/man8/%{name}.pl.8* +%{_mandir}/man8/%{name}-multiplexor.8* +%{_mandir}/man8/%{name}-release.8* +%{_mandir}/man8/watch-%{name}.8* +%{_mandir}/man8/watch-multiple-%{name}s.8* +%dir %attr(0750,defang,defang) %{_localstatedir}/log/%{name}/ +%dir %attr(0750,defang,defang) %{_localstatedir}/spool/MIMEDefang/ +%dir %attr(0750,defang,defang) %{_localstatedir}/spool/MD-Quarantine/ %changelog +* Thu Jul 24 2025 Fedora Release Engineering - 3.6-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + +* Mon Jul 07 2025 Jitka Plesnikova - 3.6-2 +- Perl 5.42 rebuild + +* Sat Mar 01 2025 Robert Scheck 3.6-1 +- Upgrade to 3.6 (#2301647) + +* Fri Jan 17 2025 Fedora Release Engineering - 3.4.1-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + +* Thu Jul 18 2024 Fedora Release Engineering - 3.4.1-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Tue Jun 11 2024 Jitka Plesnikova - 3.4.1-6 +- Perl 5.40 rebuild + +* Thu Jan 25 2024 Fedora Release Engineering - 3.4.1-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Sun Jan 21 2024 Fedora Release Engineering - 3.4.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Thu Jul 20 2023 Fedora Release Engineering - 3.4.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Tue Jul 11 2023 Jitka Plesnikova - 3.4.1-2 +- Perl 5.38 rebuild + +* Mon May 15 2023 Robert Scheck 3.4.1-1 +- Upgrade to 3.4.1 (#2203877) + +* Thu Apr 27 2023 Robert Scheck 3.4-1 +- Upgrade to 3.4 (#2189708) + +* Thu Jan 19 2023 Fedora Release Engineering - 3.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Wed Jan 18 2023 Robert Scheck 3.3-1 +- Upgrade to 3.3 (#2161362) + +* Mon Oct 24 2022 Robert Scheck 3.2-1 +- Upgrade to 3.2 (#2136815) + +* Wed Aug 24 2022 Robert Scheck 3.1-1 +- Upgrade to 3.1 (#2121227) + +* Sat Aug 06 2022 Robert Scheck 3.0-1 +- Upgrade to 3.0 (#2097136) + +* Sun Jul 31 2022 Robert Scheck 2.86-4 +- Added sysusers.d file to achieve user() and group() provides + +* Thu Jul 21 2022 Fedora Release Engineering - 2.86-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Mon May 30 2022 Jitka Plesnikova - 2.86-2 +- Perl 5.36 rebuild + +* Fri Feb 11 2022 Robert Scheck 2.86-1 +- Upgrade to 2.86 (#2033718, #2053245) + +* Thu Jan 20 2022 Fedora Release Engineering - 2.85-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Sun Aug 29 2021 Robert Scheck 2.85-1 +- Upgrade to 2.85 (#1998443) + +* Thu Jul 22 2021 Fedora Release Engineering - 2.84-13 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Fri May 21 2021 Jitka Plesnikova - 2.84-12 +- Perl 5.34 rebuild + +* Tue Mar 02 2021 Zbigniew Jędrzejewski-Szmek - 2.84-11 +- Rebuilt for updated systemd-rpm-macros + See https://pagure.io/fesco/issue/2583. + +* Tue Jan 26 2021 Fedora Release Engineering - 2.84-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Tue Jul 28 2020 Fedora Release Engineering - 2.84-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Mon Jun 22 2020 Jitka Plesnikova - 2.84-8 +- Perl 5.32 rebuild + +* Wed Jan 29 2020 Fedora Release Engineering - 2.84-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Thu Jul 25 2019 Fedora Release Engineering - 2.84-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Thu May 30 2019 Jitka Plesnikova - 2.84-5 +- Perl 5.30 rebuild + +* Fri Feb 01 2019 Fedora Release Engineering - 2.84-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Fri Jul 13 2018 Fedora Release Engineering - 2.84-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Thu Jun 28 2018 Jitka Plesnikova - 2.84-2 +- Perl 5.28 rebuild + +* Thu Mar 22 2018 Robert Scheck 2.84-1 +- Upgrade to 2.84 (#1559208) + +* Thu Feb 08 2018 Fedora Release Engineering - 2.83-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Sat Jan 20 2018 Björn Esser - 2.83-2 +- Rebuilt for switch to libxcrypt + +* Wed Nov 01 2017 Robert Scheck 2.83-1 +- Upgrade to 2.83 (#1508217) + +* Mon Oct 09 2017 Robert Scheck 2.82-1 +- Upgrade to 2.82 (#1489992) + +* Sun Sep 03 2017 Robert Scheck 2.81-1 +- Upgrade to 2.81 (#1487543, #1487804) + +* Thu Aug 03 2017 Fedora Release Engineering - 2.80-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Sun Jul 30 2017 Florian Weimer - 2.80-2 +- Rebuild with binutils fix for ppc64le (#1475636) + +* Thu Jul 27 2017 Robert Scheck 2.80-1 +- Upgrade to 2.80 (#1474551) + +* Wed Jul 26 2017 Fedora Release Engineering - 2.79-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Sun Jun 04 2017 Jitka Plesnikova - 2.79-3 +- Perl 5.26 rebuild + +* Fri Feb 10 2017 Fedora Release Engineering - 2.79-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Tue Nov 29 2016 Robert Scheck 2.79-1 +- Upgrade to 2.79 (#1380052) + +* Sat May 14 2016 Jitka Plesnikova - 2.78-8 +- Perl 5.24 rebuild + +* Thu Feb 04 2016 Fedora Release Engineering - 2.78-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Sat Jan 09 2016 Robert Scheck 2.78-6 +- Avoid chown-ing and chmod-ing /dev/null (#1296288 #c6) + +* Sun Jan 03 2016 Robert Scheck 2.78-5 +- Provide native systemd service (#789768, #1279452) + +* Wed Jun 17 2015 Fedora Release Engineering - 2.78-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Wed Jun 03 2015 Jitka Plesnikova - 2.78-3 +- Perl 5.22 rebuild + * Tue May 05 2015 Robert Scheck 2.78-2 - Fix wrong interpreter of mimedefang-util script (#1218754) diff --git a/mimedefang.sysusersd b/mimedefang.sysusersd new file mode 100644 index 0000000..ecce431 --- /dev/null +++ b/mimedefang.sysusersd @@ -0,0 +1,2 @@ +#Type Name ID GECOS Home directory Shell +u defang - "MIMEDefang user" /var/spool/MIMEDefang - diff --git a/mimedefang.tmpfilesd b/mimedefang.tmpfilesd new file mode 100644 index 0000000..28f838d --- /dev/null +++ b/mimedefang.tmpfilesd @@ -0,0 +1,4 @@ +z /var/spool/MD-Quarantine 0750 defang defang - - +z /var/spool/MIMEDefang 0750 defang defang - - +d /var/spool/MIMEDefang/.razor 0750 defang defang - - +L+ /var/spool/MIMEDefang/.razor/razor-agent.log - - - - /dev/null diff --git a/sources b/sources index be31638..c1d72d5 100644 --- a/sources +++ b/sources @@ -1 +1,2 @@ -556999ff8adfed53de9eceac3d84d8a7 mimedefang-2.78.tar.gz +SHA512 (mimedefang-3.6.tar.gz) = ceaf3b4b0d49d04b81e2280217aba5cf6873ec816cd664b379f3f32c10ba01560541cbbf0c269fcee0adc9265b18fb178e3232de3ca83c6b13440d7bd3aab34a +SHA512 (mimedefang-3.6.tar.gz.sig) = 177e6bebbae246531bbc56cd76b20fdfd958cee7a3f3081dd78840523afd9cc291478da11d9a6c4bbd9bb3f10e4f68cce25d236abaf4b29433b9c34743996488