diff --git a/.gitignore b/.gitignore index 02f49a7..e246482 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,5 @@ /cyrus-imapd-3.4.4.tar.gz /cyrus-imapd-3.6.0.tar.gz /cyrus-imapd-3.6.0.tar.gz.sig -/ellie-pub.key +/cyrus-imapd-3.6.4.tar.gz +/cyrus-imapd-3.6.4.tar.gz.sig diff --git a/cyrus-imapd.spec b/cyrus-imapd.spec index bcde2e2..59b14aa 100644 --- a/cyrus-imapd.spec +++ b/cyrus-imapd.spec @@ -1,14 +1,13 @@ -%global testdata_commit ca669d4b76c71cbeb4fa840e263e2c031e19ea88 -%global testdata_short %(echo %{testdata_commit} | cut -c -8) - -# Cassandane was split into separate CI test, run '--with cassandane' to enable it. -%bcond_with cassandane - Name: cyrus-imapd -Version: 3.6.0 -Release: 3%{?dist} +Version: 3.6.4 +Release: 1%{?dist} +Summary: A high-performance email, contacts and calendar server +License: BSD-Attribution-HPND-disclaimer +URL: http://www.cyrusimap.org/ -%define ssl_pem_file_prefix /etc/pki/%name/%name +# cyrus-imapd does not to support LTO +# https://github.com/cyrusimap/cyrus-imapd/pull/4679 +%define _lto_cflags %{nil} # UID/GID 76 have long been reserved for Cyrus %define uid 76 @@ -18,15 +17,34 @@ Release: 3%{?dist} %define cyrusgroup mail %define cyrexecdir %_libexecdir/%name +%define ssl_pem_file_prefix /etc/pki/%name/%name + %global __provides_exclude ^perl\\(AnnotateInlinedCIDs\\)$ -Summary: A high-performance email, contacts and calendar server -License: BSD -URL: http://www.cyrusimap.org/ +# Cassandane testsuite now called from separate CI test and no longer executed during build time: +# https://src.fedoraproject.org/tests/cyrus-imapd/blob/main/f/Sanity/cassandane +# CASSANDANE* and CASSANDANE*_END used for extracting commands needed for running the testsuite. +# Run: `rpmbuild '--with cassandane'` to enable it. +# Run: `echo '%%_with_cassandane 1' >> ~/.rpmmacros && dnf builddep rpmbuild/SPECS/cyrus-imapd.spec` +# to install cassandane dependencies. +%bcond_with cassandane Source0: https://github.com/cyrusimap/cyrus-imapd/releases/download/cyrus-imapd-%version/cyrus-imapd-%version.tar.gz Source1: https://github.com/cyrusimap/cyrus-imapd/releases/download/cyrus-imapd-%version/cyrus-imapd-%version.tar.gz.sig Source2: ellie-pub.key +Source10: cyrus-imapd.logrotate +Source11: cyrus-imapd.pam-config +Source12: cyrus-imapd.sysconfig +Source13: cyrus-imapd.magic +# XXX A systemd timer would probably be better +Source14: cyrus-imapd.cron-daily +Source15: README.rpm +Source16: cyrus-imapd.service +Source17: cyrus-imapd-init.service +Source18: cyrus-imapd.tmpfiles.conf + +# A template config file for cassandane; we will substitute in varions values. +Source81: cassandane.ini # Adapt a timeout to handle our slower builders @@ -45,42 +63,17 @@ Patch2: patch-cyrus-rename-quota # https://github.com/cyrusimap/cyrus-imapd/issues/2629#issuecomment-456925909 Patch3: patch-cyrus-perl-linking -# https://github.com/cyrusimap/cyrus-imapd/pull/3892 -Patch4: patch-cyrus-squatter-assert-crash - - -Source10: cyrus-imapd.logrotate -Source11: cyrus-imapd.pam-config -Source12: cyrus-imapd.sysconfig -Source13: cyrus-imapd.magic -# XXX A systemd timer would probably be better -Source14: cyrus-imapd.cron-daily -Source15: README.rpm -Source16: cyrus-imapd.service -Source17: cyrus-imapd-init.service -Source18: cyrus-imapd.tmpfiles.conf - -# Source files for running the Cassandane test suite at build time. -Source80: https://github.com/brong/Net-CalDAVTalk/archive/%{testdata_commit}/cassandane-testdata-%{testdata_short}.tar.gz - -# A template config file for cassandane; we will substitute in varions values. -Source81: cassandane.ini - -# These are source files and not patches because you can't use autosetup to -# apply patches to secondary unpacked source files. - +# Cassandane patches: # Prevent cassandane from trying to syslog things -Source91: patch-cassandane-no-syslog - +Patch91: patch-cassandane-no-syslog # Tell the annotator script to run as the current user/group # Upstream ticket https://github.com/cyrusimap/cyrus-imapd/issues/1995 -Source92: patch-cassandane-fix-annotator - +Patch92: patch-cassandane-fix-annotator # TODO libexec/cyrus-imapd path element got into upstream: # https://github.com/cyrusimap/cyrus-imapd/commit/9233f70bf7a2872ab0b456ea294ce36e0e01e182 # try to get fixed the below upstream to work on Fedora: # https://github.com/cyrusimap/cyrus-imapd/commit/f10eee167313418d84e63d215310477d4fe68e94 -Source93: patch-cassandane-xapian-delve-path +Patch93: patch-cassandane-xapian-delve-path BuildRequires: autoconf automake bison flex gcc gcc-c++ git glibc-langpack-en @@ -88,7 +81,9 @@ BuildRequires: groff libtool make pkgconfig rsync systemd transfig BuildRequires: perl-devel perl-generators perl(ExtUtils::MakeMaker) BuildRequires: perl(Pod::Html) - +%if 0%{?fedora} || 0%{?rhel} > 8 +BuildRequires: gnupg2 +%endif %if 0%{?fedora} && 0%{?fedora} >= 0 BuildRequires: clamav-devel shapelib-devel @@ -137,15 +132,16 @@ BuildRequires: clamav-data perl(Unix::Syslog) BuildRequires: perl(HTTP::Daemon) perl(DBI) perl(Net::LDAP::Constant) BuildRequires: perl(Net::LDAP::Server) BuildRequires: perl(Module::Load::Conditional) - -# These were only for JMAP-Tester -# perl(Moo), perl(Moose), perl(MooseX::Role::Parameterized) perl(Throwable), perl(Safe::Isa) +BuildRequires: cpan cld2-devel +BuildRequires: perl(Plack::Loader) perl(Test::TCP) perl(Data::GUID) perl(Digest::CRC) perl(Moo) perl(Types::Standard) +BuildRequires: perl(DBD::SQLite) %endif Requires(pre): shadow-utils %{?systemd_requires} -Requires: %name-utils = %version-%release +Requires: cyrus-imapd-libs%{?_isa} = %{version}-%{release} +Requires: cyrus-imapd-utils = %{version}-%{release} Requires: file sscg %{?perl_default_filter} @@ -175,7 +171,7 @@ hierarchies. %package devel Summary: Cyrus IMAP server development files -Requires: %name%{?_isa} = %version-%release +Requires: cyrus-imapd-libs%{?_isa} = %{version}-%{release} Requires: pkgconfig %description devel @@ -203,7 +199,8 @@ and the its utilities. %package utils Summary: Cyrus IMAP server administration utilities -Requires: cyrus-imapd = %{version}-%{release} +Requires: cyrus-imapd-libs%{?_isa} = %{version}-%{release} +Requires: perl-Cyrus = %{version}-%{release} %description utils The cyrus-imapd-utils package contains administrative tools for the @@ -213,6 +210,7 @@ one running the server. %package virusscan Summary: Cyrus virus scanning utility +Requires: cyrus-imapd-libs%{?_isa} = %{version}-%{release} %description virusscan The cyrus-imapd-virusscan package contains the cyr_virusscan utility. It @@ -231,34 +229,18 @@ This package contains Perl libraries used to interface with Cyrus IMAPd. %prep -%if 0%{?fedora} +%if 0%{?fedora} || 0%{?rhel} > 8 %{gpgverify} --keyring='%{SOURCE2}' --signature='%{SOURCE1}' --data='%{SOURCE0}' %endif + %autosetup -p1 + +# https://github.com/cyrusimap/cyrus-imapd/commit/216934c3f4884999206715db3499fc0162e1d65c echo %version > VERSION # Install the Fedora-specific documentation file install -m 644 %SOURCE15 doc/ -%if %{with cassandane} -pushd cassandane -mkdir work -tar xf %SOURCE80 - -patch -p1 < %SOURCE91 -patch -p1 < %SOURCE92 -patch -p1 < %SOURCE93 - -cp %SOURCE81 cassandane.ini -# RF rpm-buildroot-usage -sed -i \ - -e "s!CASSDIR!$(pwd)!" \ - -e "s!BUILDROOT!%buildroot!" \ - cassandane.ini - -popd -%endif - # The pm files have shebang lines for some reason sed -i -e '1{/usr.bin.perl/d}' perl/annotator/{Message,Daemon}.pm @@ -295,33 +277,37 @@ sed -i \ # cyrus-imapd-*/tools/mkimap - fixed # cyrus-imapd-*/tools/translatesieve - still contains shabang - -%build -# This is the test suite, which doesn't build much but does verify its dependencies. -# If this is done after the configure call, the one thing it does build fails -# because the configure macro puts some hardening flags into the environment. %if %{with cassandane} pushd cassandane -export NOCYRUS=1 -make +mkdir work +cp %SOURCE81 cassandane.ini +# RF rpm-buildroot-usage +sed -i \ + -e "s!CASSDIR!$(pwd)!" \ + -e "s!BUILDROOT!%buildroot!" \ + cassandane.ini popd %endif -# Notes about configure options: -# --enable-objectstore -# It's experimental, and it doesn't appear that either openio or caringo are -# in Fedora. -# --with-cyrus-prefix and --with-service-path went away; use --with-libexecdir= -# instead. -# Needed because of Patch4. -autoreconf -vi +%build +#autoreconf -vi + +%if %{with cassandane} +# Needed for Cyrus::FastMail tests to pass +export CLD2_CFLAGS="-I/usr/include/cld2" +export CLD2_LIBS="-lcld2" +%endif %configure \ --disable-silent-rules \ \ --libexecdir=%cyrexecdir \ --with-clamav \ +%if %{with cassandane} +`# Needed for Cyrus::FastMail tests to pass` \ + --with-cld2 \ +%endif --with-extraident="%release Fedora" \ --with-krbimpl=mit \ --with-ldap=/usr \ @@ -341,8 +327,7 @@ autoreconf -vi --enable-nntp \ --enable-replication \ --enable-unit-tests \ - --enable-xapian \ -# + --enable-xapian # Try to get rid of RPATH.... sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool @@ -362,6 +347,19 @@ done # This isn't built by default, but this package has always installed it. make notifyd/notifytest +# CASSANDANE_BUILD +%if %{with cassandane} +# This module is not available in Fedora: +yes | cpan IO::File::fcntl + +# This is the test suite, which doesn't build much but does verify its dependencies. +pushd cassandane +export NOCYRUS=1 +make +popd +%endif +# CASSANDANE_BUILD_END + %install make install DESTDIR=%buildroot @@ -490,22 +488,38 @@ chmod -x %buildroot/%perl_vendorlib/Cyrus/Annotator/Daemon.pm %check -export LD_LIBRARY_PATH=%buildroot/%_libdir -export CYRUS_USER=$USER - -# TODO: The mime_boundary_extended cunit test fails due to LTO on ppc64le, skip it for now: -%ifnarch ppc64le -make %{?_smp_mflags} check || exit 1 +%if %{without cassandane} +exit 0 %endif %ifarch %{ix86} armv7hl exit 0 %endif -%if %{without cassandane} -exit 0 +# TODO: The mime_boundary_extended cunit test fails due to LTO on ppc64le, skip it for now: +%ifnarch ppc64le +make -j%{?_smp_build_ncpus} check || exit 1 %endif +# Cassandane cannot run solely as root because imap services would otherwise quit: +#$ grep -R "must run as the Cyrus user" | egrep "imapd|httpd|pop3d" +#imap/imapd.c: if (geteuid() == 0) fatal("must run as the Cyrus user", EX_USAGE); +#imap/httpd.c: if (geteuid() == 0) fatal("must run as the Cyrus user", EX_USAGE); +#imap/pop3d.c: if (geteuid() == 0) fatal("must run as the Cyrus user", EX_USAGE); +getent group saslauth >/dev/null || /usr/sbin/groupadd -g %gid -r saslauth +# Set up shell and home directory for cyrus so that debugging of failing tests is easier. +getent passwd cyrus >/dev/null && /usr/sbin/usermod -s /bin/bash cyrus +getent passwd cyrus >/dev/null || /usr/sbin/useradd -c "Cyrus IMAP Server" -d /var/lib/imap -g %cyrusgroup \ + -G saslauth -s /bin/bash -u %uid -r %cyrususer -m + +# Set LD_LIBRARY_PATH for cyrus so that it points to cyrus-imapd libraries we just built. +[ -z "`grep LD_LIBRARY_PATH /var/lib/imap/.bashrc`" ] && echo "export LD_LIBRARY_PATH=%buildroot/%_libdir" >> /var/lib/imap/.bashrc + +# CASSANDANE +# TODO: Temporary workaround for missing mail::IMAPTalk methods. +# https://github.com/robmueller/mail-imaptalk/commit/0cf2624edca6fc0dd1cdc851a8710af928ba1f1e +dnf downgrade -y https://kojipkgs.fedoraproject.org//packages/perl-Mail-IMAPTalk/4.04/22.fc39/noarch/perl-Mail-IMAPTalk-4.04-22.fc39.noarch.rpm + # Run the Cassandane test suite. This will exhaustively test the various # server components, but running it in a mock chroot is rather an exercise. pushd cassandane @@ -514,11 +528,13 @@ mkdir -p imaptest/src ln -s /usr/bin/imaptest imaptest/src ln -s /usr/share/imaptest/tests imaptest/src +chown -R cyrus:mail . + # Construct the set of excluded tests to pass to Cassandane # --------------------------------------------------------- exclude=() tests=( - # This exclusion list was verified on 2021-08-11. + # This exclusion list was verified on 2024-03-27. # This tests coredumping and won't work on a machine where systemd # intercepts coredumps, which includes our builders. @@ -528,21 +544,29 @@ tests=( # https://github.com/cyrusimap/cyrus-imapd/issues/2386 Admin.imap_admins - Rename.intermediate_cleanup - - # TODO check this one - Cyrus::List.no_tombstones - # TODO run tests outside the build process: - # https://bugzilla.redhat.com/show_bug.cgi?id=1887674 - # The below tests try to search in syslog file which we don't allow due to mock, - # happenes for: - # $ grep -R "assert.*@lines" cyrus-imapd-*/cassandane/ - Reconstruct.reconstruct_snoozed - SearchSquat.simple - SearchSquat.skip_unmodified + # TODO currently failing + Cyrus::Flags.userflags_crash + Cyrus::JMAPCalendars.calendarevent_query_no_sched_inbox + Cyrus::SearchSquat.nonincremental + Cyrus::SearchSquat.incremental + Cyrus::SearchSquat.one_doc_per_message ) for i in ${tests[@]}; do exclude+=("!$i"); done +# If cyrus-imapd is built without cld2 support, the below tests are expected to fail: +if [ -z "$CLD2_CFLAGS" ]; then +exclude+=( + "!Cyrus::FastMail.cyr_expire_delete_findpaths_legacy" + "!Cyrus::FastMail.cyr_expire_delete_findpaths_nolegacy" + "!Cyrus::FastMail.relocate_legacy_domain" + "!Cyrus::FastMail.relocate_legacy_nodomain" + "!Cyrus::FastMail.relocate_legacy_nosearchdb" + "!Cyrus::FastMail.relocate_messages_still_exist" + "!Cyrus::FastMail.search_deleted_folder" + "!Cyrus::FastMail.sync_reset_legacy" + "!Cyrus::FastMail.sync_reset_nolegacy" +) +fi %ifarch s390x # This one test fails occasionally on s390x because the hosts are just too slow @@ -553,7 +577,13 @@ exclude+=("!Master.maxforkrate") %endif # Add -vvv for too much output -./testrunner.pl %{?_smp_mflags} -v -f pretty ${exclude[@]} 2>&1 +sudo -u cyrus -g mail LD_LIBRARY_PATH=%buildroot/%_libdir ./testrunner.pl -j%{?_smp_build_ncpus} -v -f pretty ${exclude[@]} 2>&1 || : +# CASSANDANE_END + +if [ -s "work/failed" ]; then + cat work/failed + exit 1 +fi %pre @@ -673,6 +703,9 @@ getent passwd cyrus >/dev/null || /usr/sbin/useradd -c "Cyrus IMAP Server" -d /v %changelog +* Thu Apr 04 2024 Martin Osvald - 3.6.4-1 +- New version 3.6.4 + * Sun Jan 22 2023 Orion Poplawski - 3.6.0-3 - Rebuild for clamav 1.0.0 diff --git a/ellie-pub.key b/ellie-pub.key new file mode 100644 index 0000000..9a19109 --- /dev/null +++ b/ellie-pub.key @@ -0,0 +1,17 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQENBFU5pZUBCAC+m05W9nJnBkrfFO9I+iimF1WCsSZNFoASJ3WEeZxIkOQO9BZj +aKf8EP/nK7nEfNGZ2m+OrAtQU/+I8Sk1ppHuwZgENLvRzLsBGbv80kDKBw31Nd1f +sCpVQs4b8zlohXjq0UN8tT5NcGJnGE7ahoOHzJk/0Ll76oVmOZvSw+WHBp1945m2 +Q8CbIbfmyuv7NF6GtGDVilPeIPsDnh5w5usjpKsxjYHKpy6Rtf4MbcCLtkRbHFra +KJD+xum0PgPdCAEEbQsSXQgwOd0TZ59avRVVef674PjWqIuudUGUhJ/f9OWOj7LG +6QgJR6yvCy7Bc2eAN4RnIIzaUZGaJDKDCNozABEBAAG0ImVsbGllIHRpbW9uZXkg +PGVsbGllQGZhc3RtYWlsLmNvbT6JATgEEwECACIFAlU5pZUCGwMGCwkIBwMCBhUI +AgkKCwQWAgMBAh4BAheAAAoJEFVPBP6zY3jgb9gH/3GPDLGybo7SYZMtBmfe+Udf +tcRkTtH+o2pf2rh6KwPhhEDuOXWVCIUPWXsWIVU2K5Y8AdBIHOEoSUp3n8juV57I +u9CfDI718/WaHgEpYrq5DqyROAFr+sGahcb6C40+V/CeUSAmKVhFGniuALUSAQ+B +XVj/i2EAFNg/5ALkPYDnDYDqm7Ak6odDbktYQz987y38sg3EMC/2wi2EoOG1VWeG +twFD8HKmXZw+u6cYtFh9K1hOBZm+PhLHr3h1MHTuWYeBKkT3YqaGtXMwi704LlNr +HU8beOHSNBSsVYJ61B4kgBA7p+qnx6xIpU2KfAJl8cgjCYwrq8yo+Lm9TazagfM= +=dIwC +-----END PGP PUBLIC KEY BLOCK----- diff --git a/patch-cassandane-fix-annotator b/patch-cassandane-fix-annotator index 406813e..b5875e6 100644 --- a/patch-cassandane-fix-annotator +++ b/patch-cassandane-fix-annotator @@ -1,7 +1,7 @@ -diff --git a/utils/annotator.pl b/utils/annotator.pl +diff --git a/cassandane/utils/annotator.pl b/cassandane/utils/annotator.pl index 265c73f..8af3d58 100755 ---- a/utils/annotator.pl -+++ b/utils/annotator.pl +--- a/cassandane/utils/annotator.pl ++++ b/cassandane/utils/annotator.pl @@ -140,6 +140,8 @@ GetOptions( xlog "annotator $$ starting"; Cassandane::AnnotatorDaemon->run( diff --git a/patch-cassandane-no-syslog b/patch-cassandane-no-syslog index 5305b8c..556bdf4 100644 --- a/patch-cassandane-no-syslog +++ b/patch-cassandane-no-syslog @@ -1,26 +1,7 @@ -diff --git a/Cassandane/Instance.pm b/Cassandane/Instance.pm -index fb36b8f..78e7100 100644 ---- a/Cassandane/Instance.pm -+++ b/Cassandane/Instance.pm -@@ -2146,12 +2146,8 @@ sub setup_syslog_replacement - { - my ($self) = @_; - -- if (not(-e 'utils/syslog.so') || not(-e 'utils/syslog_probe')) { -- xlog "utils/syslog.so not found (do you need to run 'make'?)"; -- xlog "tests will not examine syslog output"; -- $self->{have_syslog_replacement} = 0; -- return; -- } -+ $self->{have_syslog_replacement} = 0; -+ return; - - $self->{syslog_fname} = "$self->{basedir}/conf/log/syslog"; - $self->{have_syslog_replacement} = 1; -diff --git a/Cassandane/Util/Log.pm b/Cassandane/Util/Log.pm -index 7c17f0c..9eb07ad 100644 ---- a/Cassandane/Util/Log.pm -+++ b/Cassandane/Util/Log.pm +diff --git a/cassandane/Cassandane/Util/Log.pm b/cassandane/Cassandane/Util/Log.pm +index a44005c..5bb5710 100644 +--- a/cassandane/Cassandane/Util/Log.pm ++++ b/cassandane/Cassandane/Util/Log.pm @@ -51,9 +51,6 @@ our @EXPORT = qw( my $verbose = 0; @@ -31,11 +12,46 @@ index 7c17f0c..9eb07ad 100644 sub xlog { my $id; -@@ -74,7 +71,6 @@ sub xlog - $msg .= "($id) " if $id; - $msg .= join(' ', @_); - print STDERR "$msg\n"; +@@ -87,7 +84,6 @@ sub xlog + else { + print STDERR "$msg\n"; + } - syslog(LOG_ERR, "$msg"); } sub set_verbose +diff --git a/cassandane/utils/syslog.c b/cassandane/utils/syslog.c +index 20d3763..0238d82 100644 +--- a/cassandane/utils/syslog.c ++++ b/cassandane/utils/syslog.c +@@ -116,14 +116,28 @@ EXPORTED void syslog(int priority, const char *format, ...) + va_start(ap, format); + fake_vsyslog(priority, format, ap); + va_end(ap); ++} ++ ++EXPORTED void ++__attribute__((format(printf, 3, 4))) ++__syslog_chk(int priority, int whatever __attribute__((unused)), ++ const char *format, ...) ++{ ++ va_list ap; + + va_start(ap, format); +- real_vsyslog(priority, format, ap); ++ fake_vsyslog(priority, format, ap); + va_end(ap); + } + + EXPORTED void vsyslog(int priority, const char *format, va_list ap) + { + fake_vsyslog(priority, format, ap); +- real_vsyslog(priority, format, ap); ++} ++ ++EXPORTED void ++__attribute__((format(printf, 3, 0))) ++__vsyslog_chk(int priority, int whatever __attribute__((unused)), const char *format, va_list ap) ++{ ++ fake_vsyslog(priority, format, ap); + } diff --git a/patch-cassandane-xapian-delve-path b/patch-cassandane-xapian-delve-path index c079c2d..2ca64eb 100644 --- a/patch-cassandane-xapian-delve-path +++ b/patch-cassandane-xapian-delve-path @@ -1,7 +1,7 @@ -diff --git a/Cassandane/Instance.pm b/Cassandane/Instance.pm +diff --git a/cassandane/Cassandane/Instance.pm b/cassandane/Cassandane/Instance.pm index 78e7100..edf6f5d 100644 ---- a/Cassandane/Instance.pm -+++ b/Cassandane/Instance.pm +--- a/cassandane/Cassandane/Instance.pm ++++ b/cassandane/Cassandane/Instance.pm @@ -492,9 +492,7 @@ sub _find_binary my $base = $self->{cyrus_destdir} . $self->{cyrus_prefix}; diff --git a/patch-cyrus-squatter-assert-crash b/patch-cyrus-squatter-assert-crash deleted file mode 100644 index c066d14..0000000 --- a/patch-cyrus-squatter-assert-crash +++ /dev/null @@ -1,20 +0,0 @@ -diff --git a/imap/squatter.c b/imap/squatter.c -index 6a7accf1b..0c2de4d7a 100644 ---- a/imap/squatter.c -+++ b/imap/squatter.c -@@ -427,8 +427,13 @@ static void expand_mboxnames(strarray_t *sa, int nmboxnames, - else { - /* Translate any separators in mailboxname */ - char *intname = mboxname_from_external(mboxnames[i], &squat_namespace, NULL); -- int flags = recursive_flag ? 0 : MBOXTREE_SKIP_CHILDREN; -- mboxlist_mboxtree(intname, addmbox, sa, flags); -+ if (!intname || *intname == '\0') { -+ fprintf(stderr, "Mailbox %s: %s\n", -+ mboxnames[i], error_message(IMAP_MAILBOX_BADNAME)); -+ } else { -+ int flags = recursive_flag ? 0 : MBOXTREE_SKIP_CHILDREN; -+ mboxlist_mboxtree(intname, addmbox, sa, flags); -+ } - free(intname); - } - diff --git a/sources b/sources index d385021..a7cec03 100644 --- a/sources +++ b/sources @@ -1,4 +1,2 @@ -SHA512 (cyrus-imapd-3.6.0.tar.gz) = d2b21117e7d0dd93212a43ca42098dc8b59613cb45ed2287d381c8c363026ac29386dfd90f07fa2ce8a77f56dddd19f2cc5b80d9c60c400d65cbb1d52a8db93c -SHA512 (cyrus-imapd-3.6.0.tar.gz.sig) = 190cc2f1ec43ccd18500855346249dbb1aca834ced862dc601c7c5fd91e3f161a633166969da48b1c185e690b02c6e8c55e2cca06bf4e9bc0c110f2e086bdf5d -SHA512 (cassandane-testdata-ca669d4b.tar.gz) = c153ab0a57d04d9deeabc5ef724eaecc05030c23b170abaa44eaea2e7df409efcdeb24871f7896759e85d64193fb9f289a470b0af9a593a740ffcc45c80033ff -SHA512 (ellie-pub.key) = af6e01f004d57c3f68106a572a62ba8b340d5158e2877c27343bbbab32c23b6df5c4e88ac883dc64388aff276d4c317821ddf90c213a88a295a8e69be781c01c +SHA512 (cyrus-imapd-3.6.4.tar.gz) = 4bad368b894c7bc376e18734249c43d3ad8f50d691435cbd4f80411e86007abf343f40a41fc336e4f432cd8e073fddb07bc738a6ce231bd8282681f59bb8f25b +SHA512 (cyrus-imapd-3.6.4.tar.gz.sig) = f906569e2fe86677c3f3aebfdf8dea788dc48f437324033c426849e51ad041da9373075770733b0fde5a73e2d7cbb8ecbcb8d3f3be59616936f8b17d41f601a0