From mboxrd@z Thu Jan 1 00:00:00 1970 From: Michael Tremer To: development@lists.ipfire.org Subject: Re: [PATCH] cyrus-imapd: Drop package Date: Wed, 05 Feb 2020 16:57:29 +0000 Message-ID: <276CC9FB-41D4-41CD-83A6-DFA39939853C@ipfire.org> In-Reply-To: <96f04a24-30f5-b335-d472-45cd9001e329@rymes.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============6388615284035769450==" List-Id: --===============6388615284035769450== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Hi, We do not keep the logs and we do not have access to log files on other mirro= rs. I am quite sure that nobody can use this package. It is outdated. We have rem= oved openmailadmin a long time ago. MySQL was used as a backend for user auth= entication which has been dropped as long time ago, too. So I think we are safe with this one. Best, -Michael > On 5 Feb 2020, at 15:27, Tom Rymes wrote: >=20 > Would it be possible to push a version update (even if there are no changes= ) and then monitor if there are any downloads? That way we could know if ther= e are any users and how many (or at least out of those users that actually up= date from time to time). >=20 > Tom >=20 > On 02/05/2020 6:44 AM, Michael Tremer wrote: >> This package is outdated and unmaintained for many many years. >> I am not sure if this even works and if there are any users. >> Signed-off-by: Michael Tremer >> --- >> config/backup/includes/cyrus-imapd | 4 - >> config/cyrus-imapd/cyrus.conf | 38 - >> config/cyrus-imapd/imapd.conf | 26 - >> config/rootfiles/packages/cyrus-imapd | 215 -- >> lfs/cyrus-imapd | 115 - >> make.sh | 1 - >> src/initscripts/packages/cyrus-imapd | 38 - >> src/paks/cyrus-imapd/install.sh | 30 - >> src/paks/cyrus-imapd/uninstall.sh | 29 - >> src/paks/cyrus-imapd/update.sh | 26 - >> .../cyrus-imapd-2.2.12-autocreate-0.9.4.diff | 2159 ----------------- >> src/patches/cyrus-imapd-2.2.12-gcc4.patch | 48 - >> 12 files changed, 2729 deletions(-) >> delete mode 100644 config/backup/includes/cyrus-imapd >> delete mode 100644 config/cyrus-imapd/cyrus.conf >> delete mode 100644 config/cyrus-imapd/imapd.conf >> delete mode 100644 config/rootfiles/packages/cyrus-imapd >> delete mode 100644 lfs/cyrus-imapd >> delete mode 100644 src/initscripts/packages/cyrus-imapd >> delete mode 100644 src/paks/cyrus-imapd/install.sh >> delete mode 100644 src/paks/cyrus-imapd/uninstall.sh >> delete mode 100644 src/paks/cyrus-imapd/update.sh >> delete mode 100644 src/patches/cyrus-imapd-2.2.12-autocreate-0.9.4.diff >> delete mode 100644 src/patches/cyrus-imapd-2.2.12-gcc4.patch >> diff --git a/config/backup/includes/cyrus-imapd b/config/backup/includes/c= yrus-imapd >> deleted file mode 100644 >> index bb1bb3b1c..000000000 >> --- a/config/backup/includes/cyrus-imapd >> +++ /dev/null >> @@ -1,4 +0,0 @@ >> -/usr/sieve >> -/var/imap >> -/var/ipfire/cyrusimap >> -/var/log/imap >> diff --git a/config/cyrus-imapd/cyrus.conf b/config/cyrus-imapd/cyrus.conf >> deleted file mode 100644 >> index df83bd00b..000000000 >> --- a/config/cyrus-imapd/cyrus.conf >> +++ /dev/null >> @@ -1,38 +0,0 @@ >> -START { >> - # do not delete this entry! >> - recover cmd=3D"ctl_cyrusdb -r" >> - >> - # this is only necessary if using idled for IMAP IDLE >> - idled cmd=3D"idled" >> -} >> - >> -# UNIX sockets start with a slash and are put into /var/imap/socket >> -SERVICES { >> - # add or remove based on preferences >> - imap cmd=3D"imapd" listen=3D"imap" prefork=3D0 >> - imaps cmd=3D"imapd -s" listen=3D"imaps" prefork=3D0 >> - pop3 cmd=3D"pop3d" listen=3D"pop3" prefork=3D0 >> - pop3s cmd=3D"pop3d -s" listen=3D"pop3s" prefork=3D0 >> - #sieve cmd=3D"timsieved" listen=3D"127.0.0.1:2000" prefork=3D0 >> - >> - # at least one LMTP is required for delivery >> - #lmtp cmd=3D"lmtpd" listen=3D"127.0.0.1:24" prefork=3D0 >> - lmtpunix cmd=3D"lmtpd" listen=3D"/var/imap/socket/lmtp" prefork=3D0 >> - >> - # this is only necessary if using notifications >> - notify cmd=3D"notifyd" listen=3D"/var/imap/socket/notify" proto= =3D"udp" prefork=3D1 >> -} >> - >> -EVENTS { >> - # this is required >> - checkpoint cmd=3D"ctl_cyrusdb -c" period=3D30 >> - >> - # this is only necessary if using duplicate delivery suppression >> - delprune cmd=3D"ctl_deliver -E 3" period=3D1440 >> - >> - # this is only necessary if caching TLS sessions >> - tlsprune cmd=3D"tls_prune" period=3D1440 >> - >> - # SQUAT failed, helps >> - squatter cmd=3D"squatter -r user" period=3D1440 >> -} >> diff --git a/config/cyrus-imapd/imapd.conf b/config/cyrus-imapd/imapd.conf >> deleted file mode 100644 >> index 9c7397981..000000000 >> --- a/config/cyrus-imapd/imapd.conf >> +++ /dev/null >> @@ -1,26 +0,0 @@ >> -postmaster: postmaster >> -configdirectory: /var/imap >> -partition-default: /var/log/imap >> -admins: cyrus >> -allowanonymouslogin: no >> -allowplaintext: yes >> -sasl_mech_list: PLAIN >> -servername: localhost >> -autocreatequota: 20000 >> -reject8bit: no >> -quotawarn: 90 >> -timeout: 30 >> -poptimeout: 10 >> -dracinterval: 0 >> -drachost: localhost >> -sasl_pwcheck_method: saslauthd >> -sievedir: /usr/sieve >> -sendmail: /usr/sbin/sendmail >> -sieve_maxscriptsize: 32 >> -sieve_maxscripts: 5 >> -lmtpsocket: /var/imap/socket/lmtp >> -unixhierarchysep: yes >> -#echo tls_ca_file: /var/ipfire/cyrusimap/server.pem >> -#echo tls_cert_file: /var/ipfire/cyrusimap/server.pem >> -#echo tls_key_file: /var/ipfire/cyrusimap/server.pem >> -#hashimapspool: yes >> diff --git a/config/rootfiles/packages/cyrus-imapd b/config/rootfiles/pack= ages/cyrus-imapd >> deleted file mode 100644 >> index 54b9e917c..000000000 >> --- a/config/rootfiles/packages/cyrus-imapd >> +++ /dev/null >> @@ -1,215 +0,0 @@ >> -etc/rc.d/init.d/cyrus-imapd >> -usr/bin/cyradm >> -usr/bin/imtest >> -usr/bin/installsieve >> -usr/bin/lmtptest >> -usr/bin/mkimap >> -usr/bin/mupdatetest >> -usr/bin/nntptest >> -usr/bin/pop3test >> -usr/bin/sieveshell >> -usr/bin/sivtest >> -usr/bin/smtptest >> -usr/bin/synctest >> -#usr/include/cyrus >> -#usr/include/cyrus/acl.h >> -#usr/include/cyrus/arrayu64.h >> -#usr/include/cyrus/assert.h >> -#usr/include/cyrus/auth.h >> -#usr/include/cyrus/auth_pts.h >> -#usr/include/cyrus/bitvector.h >> -#usr/include/cyrus/bsearch.h >> -#usr/include/cyrus/charset.h >> -#usr/include/cyrus/chartable.h >> -#usr/include/cyrus/command.h >> -#usr/include/cyrus/crc32.h >> -#usr/include/cyrus/cyr_lock.h >> -#usr/include/cyrus/cyrusdb.h >> -#usr/include/cyrus/exitcodes.h >> -#usr/include/cyrus/glob.h >> -#usr/include/cyrus/gmtoff.h >> -#usr/include/cyrus/hash.h >> -#usr/include/cyrus/hashu64.h >> -#usr/include/cyrus/imapopts.h >> -#usr/include/cyrus/imapurl.h >> -#usr/include/cyrus/imclient.h >> -#usr/include/cyrus/imparse.h >> -#usr/include/cyrus/iostat.h >> -#usr/include/cyrus/iptostring.h >> -#usr/include/cyrus/libcyr_cfg.h >> -#usr/include/cyrus/lsort.h >> -#usr/include/cyrus/map.h >> -#usr/include/cyrus/mappedfile.h >> -#usr/include/cyrus/mkgmtime.h >> -#usr/include/cyrus/mpool.h >> -#usr/include/cyrus/nonblock.h >> -#usr/include/cyrus/parseaddr.h >> -#usr/include/cyrus/retry.h >> -#usr/include/cyrus/rfc822tok.h >> -#usr/include/cyrus/sieve >> -#usr/include/cyrus/sieve/sieve_err.h >> -#usr/include/cyrus/sieve/sieve_interface.h >> -#usr/include/cyrus/signals.h >> -#usr/include/cyrus/strarray.h >> -#usr/include/cyrus/strhash.h >> -#usr/include/cyrus/stristr.h >> -#usr/include/cyrus/sysexits.h >> -#usr/include/cyrus/times.h >> -#usr/include/cyrus/tok.h >> -#usr/include/cyrus/vparse.h >> -#usr/include/cyrus/wildmat.h >> -#usr/include/cyrus/xmalloc.h >> -#usr/lib/cyrus >> -usr/lib/cyrus/arbitron >> -usr/lib/cyrus/chk_cyrus >> -usr/lib/cyrus/ctl_cyrusdb >> -usr/lib/cyrus/ctl_deliver >> -usr/lib/cyrus/ctl_mboxlist >> -usr/lib/cyrus/cvt_cyrusdb >> -usr/lib/cyrus/cyr_dbtool >> -usr/lib/cyrus/cyr_deny >> -usr/lib/cyrus/cyr_df >> -usr/lib/cyrus/cyr_expire >> -usr/lib/cyrus/cyr_info >> -usr/lib/cyrus/cyr_sequence >> -usr/lib/cyrus/cyr_synclog >> -usr/lib/cyrus/cyr_userseen >> -usr/lib/cyrus/cyrdump >> -usr/lib/cyrus/deliver >> -usr/lib/cyrus/fud >> -usr/lib/cyrus/idled >> -usr/lib/cyrus/imapd >> -usr/lib/cyrus/ipurge >> -usr/lib/cyrus/lmtpd >> -usr/lib/cyrus/lmtpproxyd >> -usr/lib/cyrus/master >> -usr/lib/cyrus/mbexamine >> -usr/lib/cyrus/mbpath >> -usr/lib/cyrus/mbtool >> -usr/lib/cyrus/notifyd >> -usr/lib/cyrus/pop3d >> -usr/lib/cyrus/pop3proxyd >> -usr/lib/cyrus/proxyd >> -usr/lib/cyrus/quota >> -usr/lib/cyrus/reconstruct >> -usr/lib/cyrus/sievec >> -usr/lib/cyrus/sieved >> -usr/lib/cyrus/smmapd >> -usr/lib/cyrus/squatter >> -usr/lib/cyrus/timsieved >> -usr/lib/cyrus/tls_prune >> -usr/lib/cyrus/unexpunge >> -#usr/lib/libcyrus.la >> -#usr/lib/libcyrus.so >> -usr/lib/libcyrus.so.0 >> -usr/lib/libcyrus.so.0.0.0 >> -#usr/lib/libcyrus_imap.la >> -#usr/lib/libcyrus_imap.so >> -usr/lib/libcyrus_imap.so.0 >> -usr/lib/libcyrus_imap.so.0.0.0 >> -#usr/lib/libcyrus_min.la >> -#usr/lib/libcyrus_min.so >> -usr/lib/libcyrus_min.so.0 >> -usr/lib/libcyrus_min.so.0.0.0 >> -#usr/lib/libcyrus_sieve.la >> -#usr/lib/libcyrus_sieve.so >> -usr/lib/libcyrus_sieve.so.0 >> -usr/lib/libcyrus_sieve.so.0.0.0 >> -#usr/lib/perl5/site_perl/5.30.0/Cyrus >> -#usr/lib/perl5/site_perl/5.30.0/Cyrus/Annotator >> -usr/lib/perl5/site_perl/5.30.0/Cyrus/Annotator/Daemon.pm >> -usr/lib/perl5/site_perl/5.30.0/Cyrus/Annotator/Message.pm >> -#usr/lib/perl5/site_perl/5.30.0/MACHINE-linux-thread-multi/Cyrus >> -#usr/lib/perl5/site_perl/5.30.0/MACHINE-linux-thread-multi/Cyrus/IMAP >> -usr/lib/perl5/site_perl/5.30.0/MACHINE-linux-thread-multi/Cyrus/IMAP.pm >> -usr/lib/perl5/site_perl/5.30.0/MACHINE-linux-thread-multi/Cyrus/IMAP/Admi= n.pm >> -usr/lib/perl5/site_perl/5.30.0/MACHINE-linux-thread-multi/Cyrus/IMAP/IMSP= .pm >> -usr/lib/perl5/site_perl/5.30.0/MACHINE-linux-thread-multi/Cyrus/IMAP/Shel= l.pm >> -#usr/lib/perl5/site_perl/5.30.0/MACHINE-linux-thread-multi/Cyrus/SIEVE >> -usr/lib/perl5/site_perl/5.30.0/MACHINE-linux-thread-multi/Cyrus/SIEVE/man= agesieve.pm >> -#usr/lib/perl5/site_perl/5.30.0/MACHINE-linux-thread-multi/auto/Cyrus >> -#usr/lib/perl5/site_perl/5.30.0/MACHINE-linux-thread-multi/auto/Cyrus/Ann= otator >> -#usr/lib/perl5/site_perl/5.30.0/MACHINE-linux-thread-multi/auto/Cyrus/Ann= otator/Daemon >> -#usr/lib/perl5/site_perl/5.30.0/MACHINE-linux-thread-multi/auto/Cyrus/Ann= otator/Daemon/.packlist >> -#usr/lib/perl5/site_perl/5.30.0/MACHINE-linux-thread-multi/auto/Cyrus/IMAP >> -#usr/lib/perl5/site_perl/5.30.0/MACHINE-linux-thread-multi/auto/Cyrus/IMA= P/.packlist >> -#usr/lib/perl5/site_perl/5.30.0/MACHINE-linux-thread-multi/auto/Cyrus/IMA= P/IMAP.bs >> -usr/lib/perl5/site_perl/5.30.0/MACHINE-linux-thread-multi/auto/Cyrus/IMAP= /IMAP.so >> -#usr/lib/perl5/site_perl/5.30.0/MACHINE-linux-thread-multi/auto/Cyrus/SIE= VE >> -#usr/lib/perl5/site_perl/5.30.0/MACHINE-linux-thread-multi/auto/Cyrus/SIE= VE/managesieve >> -#usr/lib/perl5/site_perl/5.30.0/MACHINE-linux-thread-multi/auto/Cyrus/SIE= VE/managesieve/.packlist >> -#usr/lib/perl5/site_perl/5.30.0/MACHINE-linux-thread-multi/auto/Cyrus/SIE= VE/managesieve/managesieve.bs >> -usr/lib/perl5/site_perl/5.30.0/MACHINE-linux-thread-multi/auto/Cyrus/SIEV= E/managesieve/managesieve.so >> -#usr/lib/pkgconfig/libcyrus.pc >> -#usr/lib/pkgconfig/libcyrus_min.pc >> -#usr/lib/pkgconfig/libcyrus_sieve.pc >> -#usr/share/man/man1/cyradm.1 >> -#usr/share/man/man1/imtest.1 >> -#usr/share/man/man1/installsieve.1 >> -#usr/share/man/man1/lmtptest.1 >> -#usr/share/man/man1/mupdatetest.1 >> -#usr/share/man/man1/nntptest.1 >> -#usr/share/man/man1/pop3test.1 >> -#usr/share/man/man1/sieveshell.1 >> -#usr/share/man/man1/sivtest.1 >> -#usr/share/man/man1/smtptest.1 >> -#usr/share/man/man3/Cyrus::Annotator::Daemon.3 >> -#usr/share/man/man3/Cyrus::Annotator::Message.3 >> -#usr/share/man/man3/Cyrus::IMAP.3 >> -#usr/share/man/man3/Cyrus::IMAP::Admin.3 >> -#usr/share/man/man3/Cyrus::IMAP::IMSP.3 >> -#usr/share/man/man3/Cyrus::IMAP::Shell.3 >> -#usr/share/man/man3/Cyrus::SIEVE::managesieve.3 >> -#usr/share/man/man3/imclient.3 >> -#usr/share/man/man5/cyrus.conf.5 >> -#usr/share/man/man5/imapd.conf.5 >> -#usr/share/man/man5/krb.equiv.5 >> -#usr/share/man/man8/arbitron.8 >> -#usr/share/man/man8/chk_cyrus.8 >> -#usr/share/man/man8/ctl_cyrusdb.8 >> -#usr/share/man/man8/ctl_deliver.8 >> -#usr/share/man/man8/ctl_mboxlist.8 >> -#usr/share/man/man8/cvt_cyrusdb.8 >> -#usr/share/man/man8/cyr_dbtool.8 >> -#usr/share/man/man8/cyr_deny.8 >> -#usr/share/man/man8/cyr_df.8 >> -#usr/share/man/man8/cyr_expire.8 >> -#usr/share/man/man8/cyr_info.8 >> -#usr/share/man/man8/cyr_synclog.8 >> -#usr/share/man/man8/deliver.8 >> -#usr/share/man/man8/fud.8 >> -#usr/share/man/man8/idled.8 >> -#usr/share/man/man8/imapd.8 >> -#usr/share/man/man8/ipurge.8 >> -#usr/share/man/man8/lmtpd.8 >> -#usr/share/man/man8/mbexamine.8 >> -#usr/share/man/man8/mbpath.8 >> -#usr/share/man/man8/notifyd.8 >> -#usr/share/man/man8/pop3d.8 >> -#usr/share/man/man8/quota.8 >> -#usr/share/man/man8/reconstruct.8 >> -#usr/share/man/man8/rmnews.8 >> -#usr/share/man/man8/smmapd.8 >> -#usr/share/man/man8/squatter.8 >> -#usr/share/man/man8/sync_client.8 >> -#usr/share/man/man8/sync_reset.8 >> -#usr/share/man/man8/sync_server.8 >> -#usr/share/man/man8/timsieved.8 >> -#usr/share/man/man8/tls_prune.8 >> -#usr/share/man/man8/unexpunge.8 >> -usr/sieve >> -var/imap >> -var/imap/db >> -var/imap/log >> -var/imap/msg >> -var/imap/proc >> -var/imap/ptclient >> -var/imap/socket >> -var/imap/sync >> -var/ipfire/backup/addons/includes/cyrus-imapd >> -var/ipfire/cyrusimap >> -var/ipfire/cyrusimap/cyrus.conf >> -var/ipfire/cyrusimap/imapd.conf >> -var/log/imap >> -var/log/imap/stage. >> -var/log/imap/sync. >> diff --git a/lfs/cyrus-imapd b/lfs/cyrus-imapd >> deleted file mode 100644 >> index 18b41ac7d..000000000 >> --- a/lfs/cyrus-imapd >> +++ /dev/null >> @@ -1,115 +0,0 @@ >> -#########################################################################= ###### >> -# = # >> -# IPFire.org - A linux based firewall = # >> -# Copyright (C) 2007-2019 IPFire Team = # >> -# = # >> -# This program is free software: you can redistribute it and/or modify = # >> -# it under the terms of the GNU General Public License as published by = # >> -# the Free Software Foundation, either version 3 of the License, or = # >> -# (at your option) any later version. = # >> -# = # >> -# This program is distributed in the hope that it will be useful, = # >> -# but WITHOUT ANY WARRANTY; without even the implied warranty of = # >> -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the = # >> -# GNU General Public License for more details. = # >> -# = # >> -# You should have received a copy of the GNU General Public License = # >> -# along with this program. If not, see . = # >> -# = # >> -#########################################################################= ###### >> - >> -#########################################################################= ###### >> -# Definitions >> -#########################################################################= ###### >> - >> -include Config >> - >> -VER =3D 2.5.11 >> - >> -THISAPP =3D cyrus-imapd-$(VER) >> -DL_FILE =3D $(THISAPP).tar.gz >> -DL_FROM =3D $(URL_IPFIRE) >> -DIR_APP =3D $(DIR_SRC)/$(THISAPP) >> -TARGET =3D $(DIR_INFO)/$(THISAPP) >> -PROG =3D cyrus-imapd >> -PAK_VER =3D 8 >> - >> -DEPS =3D "" >> - >> -#########################################################################= ###### >> -# Top-level Rules >> -#########################################################################= ###### >> - >> -objects =3D $(DL_FILE) >> - >> -$(DL_FILE) =3D $(DL_FROM)/$(DL_FILE) >> - >> -$(DL_FILE)_MD5 =3D 674083444c36a786d9431b6612969224 >> - >> -install : $(TARGET) >> - >> -check : $(patsubst %,$(DIR_CHK)/%,$(objects)) >> - >> -download :$(patsubst %,$(DIR_DL)/%,$(objects)) >> - >> -md5 : $(subst %,%_MD5,$(objects)) >> - >> -dist: >> - @$(PAK) >> - >> -#########################################################################= ###### >> -# Downloading, checking, md5sum >> -#########################################################################= ###### >> - >> -$(patsubst %,$(DIR_CHK)/%,$(objects)) : >> - @$(CHECK) >> - >> -$(patsubst %,$(DIR_DL)/%,$(objects)) : >> - @$(LOAD) >> - >> -$(subst %,%_MD5,$(objects)) : >> - @$(MD5) >> - >> -#########################################################################= ###### >> -# Installation Details >> -#########################################################################= ###### >> - >> -$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) >> - @$(PREBUILD) >> - @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE) >> - cd $(DIR_APP) && ./configure \ >> - --prefix=3D/usr \ >> - --with-service-path=3D/usr/lib/cyrus \ >> - --with-cyrus-prefix=3D/usr/lib/cyrus \ >> - --sysconfdir=3D/var/ipfire/cyrusimap \ >> - --with-perl \ >> - --with-sasl \ >> - --with-syslogfacility=3DMAIL \ >> - --without-snmp \ >> - --enable-autocreate \ >> - --enable-idled >> - >> - cd $(DIR_APP) && make $(MAKETUNING) $(EXTRA_MAKE) >> - cd $(DIR_APP) && make install >> - -mkdir /var/imap >> - chown cyrus:mail /var/imap >> - chmod 755 /var/imap >> - -mkdir /var/log/imap >> - chown cyrus:mail /var/log/imap >> - chmod 750 /var/log/imap >> - -mkdir /usr/sieve >> - chown cyrus:mail /usr/sieve >> - chmod 750 /usr/sieve >> - -mkdir /var/ipfire/cyrusimap >> - cp -f $(DIR_SRC)/config/cyrus-imapd/* /var/ipfire/cyrusimap >> - cp -f $(DIR_APP)/tools/mkimap /usr/bin >> - sudo -u cyrus /usr/bin/mkimap /var/ipfire/cyrusimap/imapd.conf >> - chown cyrus.mail /var/imap/socket >> - install -v -m 644 $(DIR_SRC)/config/backup/includes/cyrus-imapd \ >> - /var/ipfire/backup/addons/includes/cyrus-imapd >> - >> - #install initscripts >> - $(call INSTALL_INITSCRIPT,cyrus-imapd) >> - >> - @rm -rf $(DIR_APP) /usr/include/com_err.h >> - @$(POSTBUILD) >> diff --git a/make.sh b/make.sh >> index 02043cf69..6e3f4cfd9 100755 >> --- a/make.sh >> +++ b/make.sh >> @@ -1401,7 +1401,6 @@ buildipfire() { >> lfsmake2 chkconfig >> lfsmake2 postfix >> lfsmake2 fetchmail >> - lfsmake2 cyrus-imapd >> lfsmake2 clamav >> lfsmake2 perl-NetAddr-IP >> lfsmake2 spamassassin >> diff --git a/src/initscripts/packages/cyrus-imapd b/src/initscripts/packag= es/cyrus-imapd >> deleted file mode 100644 >> index 2f849c8a8..000000000 >> --- a/src/initscripts/packages/cyrus-imapd >> +++ /dev/null >> @@ -1,38 +0,0 @@ >> -#!/bin/sh >> -# Begin $rc_base/init.d/cyrus-imapd >> - >> -# Based on sysklogd script from LFS-3.1 and earlier. >> -# Rewritten by Gerard Beekmans - gerard(a)linuxfromscratch.org >> - >> -. /etc/sysconfig/rc >> -. $rc_functions >> - >> -case "$1" in >> - start) >> - boot_mesg "Starting the Cyrus IMAP Server..." >> - /usr/lib/cyrus/master & >> - evaluate_retval >> - ;; >> - >> - stop) >> - boot_mesg "Stopping the Cyrus IMAP Server..." >> - killproc /usr/lib/cyrus/master >> - ;; >> - >> - restart) >> - $0 stop >> - sleep 1 >> - $0 start >> - ;; >> - >> - status) >> - statusproc /usr/lib/cyrus/master >> - ;; >> - >> - *) >> - echo "Usage: $0 {start|stop|restart|status}" >> - exit 1 >> - ;; >> -esac >> - >> -# End $rc_base/init.d/cyrus-imapd >> diff --git a/src/paks/cyrus-imapd/install.sh b/src/paks/cyrus-imapd/instal= l.sh >> deleted file mode 100644 >> index a23153b7d..000000000 >> --- a/src/paks/cyrus-imapd/install.sh >> +++ /dev/null >> @@ -1,30 +0,0 @@ >> -#!/bin/bash >> -#########################################################################= ### >> -# = # >> -# This file is part of the IPFire Firewall. = # >> -# = # >> -# IPFire is free software; you can redistribute it and/or modify = # >> -# it under the terms of the GNU General Public License as published by = # >> -# the Free Software Foundation; either version 2 of the License, or = # >> -# (at your option) any later version. = # >> -# = # >> -# IPFire is distributed in the hope that it will be useful, = # >> -# but WITHOUT ANY WARRANTY; without even the implied warranty of = # >> -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the = # >> -# GNU General Public License for more details. = # >> -# = # >> -# You should have received a copy of the GNU General Public License = # >> -# along with IPFire; if not, write to the Free Software = # >> -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 US= A # >> -# = # >> -# Copyright (C) 2007 IPFire-Team . = # >> -# = # >> -#########################################################################= ### >> -# >> -. /opt/pakfire/lib/functions.sh >> -extract_files >> -restore_backup ${NAME} >> -start_service ${NAME} >> -ln -sf ../init.d/cyrus-imapd /etc/rc.d/rc0.d/K23cyrus-imapd >> -ln -sf ../init.d/cyrus-imapd /etc/rc.d/rc3.d/S37cyrus-imapd >> -ln -sf ../init.d/cyrus-imapd /etc/rc.d/rc6.d/K23cyrus-imapd >> diff --git a/src/paks/cyrus-imapd/uninstall.sh b/src/paks/cyrus-imapd/unin= stall.sh >> deleted file mode 100644 >> index e34fa5698..000000000 >> --- a/src/paks/cyrus-imapd/uninstall.sh >> +++ /dev/null >> @@ -1,29 +0,0 @@ >> -#!/bin/bash >> -#########################################################################= ### >> -# = # >> -# This file is part of the IPFire Firewall. = # >> -# = # >> -# IPFire is free software; you can redistribute it and/or modify = # >> -# it under the terms of the GNU General Public License as published by = # >> -# the Free Software Foundation; either version 2 of the License, or = # >> -# (at your option) any later version. = # >> -# = # >> -# IPFire is distributed in the hope that it will be useful, = # >> -# but WITHOUT ANY WARRANTY; without even the implied warranty of = # >> -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the = # >> -# GNU General Public License for more details. = # >> -# = # >> -# You should have received a copy of the GNU General Public License = # >> -# along with IPFire; if not, write to the Free Software = # >> -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 US= A # >> -# = # >> -# Copyright (C) 2007 IPFire-Team . = # >> -# = # >> -#########################################################################= ### >> -# >> -. /opt/pakfire/lib/functions.sh >> -extract_backup_includes >> -stop_service ${NAME} >> -make_backup ${NAME} >> -remove_files >> -rm -rfv /etc/rc.d/rc*.d/*cyrus-imapd >> diff --git a/src/paks/cyrus-imapd/update.sh b/src/paks/cyrus-imapd/update.= sh >> deleted file mode 100644 >> index 89c40d0d7..000000000 >> --- a/src/paks/cyrus-imapd/update.sh >> +++ /dev/null >> @@ -1,26 +0,0 @@ >> -#!/bin/bash >> -#########################################################################= ### >> -# = # >> -# This file is part of the IPFire Firewall. = # >> -# = # >> -# IPFire is free software; you can redistribute it and/or modify = # >> -# it under the terms of the GNU General Public License as published by = # >> -# the Free Software Foundation; either version 2 of the License, or = # >> -# (at your option) any later version. = # >> -# = # >> -# IPFire is distributed in the hope that it will be useful, = # >> -# but WITHOUT ANY WARRANTY; without even the implied warranty of = # >> -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the = # >> -# GNU General Public License for more details. = # >> -# = # >> -# You should have received a copy of the GNU General Public License = # >> -# along with IPFire; if not, write to the Free Software = # >> -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 US= A # >> -# = # >> -# Copyright (C) 2007 IPFire-Team . = # >> -# = # >> -#########################################################################= ### >> -# >> -. /opt/pakfire/lib/functions.sh >> -./uninstall.sh >> -./install.sh >> diff --git a/src/patches/cyrus-imapd-2.2.12-autocreate-0.9.4.diff b/src/pa= tches/cyrus-imapd-2.2.12-autocreate-0.9.4.diff >> deleted file mode 100644 >> index cb4c6c994..000000000 >> --- a/src/patches/cyrus-imapd-2.2.12-autocreate-0.9.4.diff >> +++ /dev/null >> @@ -1,2159 +0,0 @@ >> -diff -Naur cyrus-imapd-2.2.12/README.autocreate cyrus-imapd-2.2.12.autocr= eate2/README.autocreate >> ---- cyrus-imapd-2.2.12/README.autocreate 1970-01-01 02:00:00.000000000 +0= 200 >> -+++ cyrus-imapd-2.2.12.autocreate2/README.autocreate 2005-10-19 14:48:57.= 930991000 +0300 >> -@@ -0,0 +1,181 @@ >> -+Cyrus IMAP autocreate Inbox patch >> -+---------------------------------- >> -+ >> -+NOTE : This patch has been created at the University of Athens. For more= info, as well >> -+as more patches on Cyrus IMAPD server, please visit http://email.uoa.gr >> -+ >> -+The design of Cyrus IMAP server does not predict the automatic creation = of users' >> -+INBOX folders. The creation of a user's INBOX is considered to be an ext= ernal task, >> -+that has to be completed as part of the user e-mail account creation pro= cedure. >> -+Hence, to create a new e-mail account the site administrator has to >> -+a) Include the new account in the user database for the authentication p= rocedure >> -+ (e.g. sasldb, shadow, mysql, ldap). >> -+b) Create the corresponding INBOX folder. >> -+ >> -+Alternatively, the user, if succesfully authenticated, may create his ow= n INBOX folder, >> -+as long as the configuration of the site allows it (see "autocreatequota= " in imapd.conf). >> -+Unlike what uncareful readers may think, enabling the "autocreatequota" = option, doesn't >> -+lead to the automatic INBOX folder creation by Cyrus IMAP server. >> -+In fact, "autocreate" means that the IMAP clients are allowed to automat= ically create >> -+the user INBOX. >> -+ >> -+This patch adds the functionality of automatic creation of the users' IN= BOX folders into >> -+the Cyrus IMAP server. It is implemented as two features, namely the "c= reate on login" >> -+and "create on post". >> -+ >> -+ >> -+ >> -+Create on login >> -+=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D >> -+This feauture provides automatic creation of a user's INBOX folder when = all of the >> -+following requirements are met: >> -+ >> -+i) The user has succesfully passed the authentication procedure. >> -+ >> -+ii) The user's authorization ID (typically the same as the user's >> -+authentication ID) doesn't belong to the imap_admins or admins >> -+accounts (see imapd.conf). >> -+ >> -+iii) The "autocreatequota" option in the imap configuration file >> -+has been set to a non zero value. >> -+ >> -+iv) The corresponding to the user's authorizationID INBOX folder >> -+does not exist. >> -+ >> -+The user's first login is the most typical case when all four requiremen= ts are met. >> -+Note that if the authenticatedID is allowed to proxy to another account = for which >> -+all of the above requirements are met, the corresponding INBOX folder fo= r that account >> -+will be created. >> -+ >> -+ >> -+ >> -+Create on post >> -+=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D >> -+This feauture provides automatic creation of a user's INBOX folder when = all of the >> -+following requirements are met. >> -+ >> -+i) An e-mail message addressed to the user has been received. >> -+ >> -+ii) The recipient is not any of the imap_admins or admins accounts. >> -+Note that passing e-mails to admins or imap_admins accounts from >> -+the MTA to LMTP should be avoided in any case. >> -+ >> -+iii) The recipient's INBOX does not exist. >> -+ >> -+iv) The "autocreatequota" option in the imap configuration file >> -+has been set to a non zero value. >> -+ >> -+v) The "createonpost" option in the imap configuration file >> -+has been switched on. >> -+ >> -+ >> -+Besides the automatic creation of INBOX folder, additional functionaliti= es are >> -+provided: >> -+ >> -+A) Automatic creation of INBOX subfolders controlled by "autocreateinbox= folders" >> -+configuration option. eg >> -+ >> -+autocreateinboxfolders: sent|drafts|spam|templates >> -+ >> -+B) Automatic subscription of INBOX subfolders controlled by "autosubscri= beinboxfolders" >> -+configuration option. eg >> -+ >> -+autosubscribeinboxfolders: sent|spam >> -+ >> -+Obviously, only subscription to subfolders included in the "autocreatein= boxfolder" >> -+list is meaningfull. >> -+ >> -+C) Automatic subscription to shared folders (bulletin boards). The user = gets >> -+automatically subscribed to the shared folders declared in the "autosubs= cribesharedfolders" >> -+configuration option in imapd.conf. >> -+eg autosubscribesharedfolders: public_folder | public_folder.subfolder >> -+ >> -+In order the above action to succeed, the shared folder has to pre-exist= the INBOX creation >> -+and the user must have the apropriate permissions in order to be able to= subscribe to the >> -+shared folder. >> -+ >> -+* A new config option has been added. 'autosubscribe_all_sharedfolders' = is a yes/no >> -+option. When set to yes, the user is automatically subscribed to all sha= red folders one >> -+has permission to subscribe to. Please, note that when this option is se= t to yes, then >> -+'autosubscribesharedfolders' option is overriden. >> -+ >> -+D) Automatic creation of a predefined default sieve script. >> -+ >> -+This is very useful when a default sieve script is used for every user. = Usually, a >> -+default anti-spam script may me be written in a file and copied to each = user >> -+sieve scripts upon the INBOX creation. The imapd.conf options that have = been added >> -+are 'autocreate_sieve_script', 'autocreate_sieve_compiledscript' and >> -+'generate_compiled_sieve_script'. >> -+ >> -+autocreate_sieve_script configuration option refers to the full path of = the file >> -+that contains the sieve script. The default value is null and if no file= is defined, >> -+then no default script is created upon INBOX creation. (The feature is d= isabled) >> -+eg autocreate_sieve_script: /etc/default_sieve_script >> -+ >> -+autocreate_sieve_compiledscript configuration option refers to the full = path of the >> -+file that contains the bytecode compiled sieve script. If this filename = is defined >> -+in imapd.conf and the file exists, then it is automatically copied in th= e user's sieve >> -+directory. If it is not defined, then a bytecode sieve script gets on th= e fly compiled >> -+by the daemon. >> -+eg autocreate_sieve_compiledscript: /etc/default_sieve_script.bc >> -+ >> -+generate_compiled_sieve_script is a boolean option that triggers the com= pilation of the >> -+source sieve script to bytecode sieve script. The file that the bytecode= script will >> -+be saved is pointed by autocreate_sieve_compiledscript. >> -+ >> -+Ways of compiling a sieve script : >> -+1. Compile a sieve script using the standard sievec utility, distributed= by CMU >> -+2. Compile a sieve script using the compile_sieve utility, released by U= oA. This >> -+ tool is almost identical to the sievec utility, with the difference t= hat it >> -+ reads the input and output file from autocreate_sieve_script and >> -+ autocreate_sieve_compiledscript options in imapd.conf >> -+3. Let cyrus create a compiled sieve script using a source script. Cyrus= can be >> -+ instructed to save the compiled script any time a compiled script doe= s not exist. >> -+ >> -+NOTES : >> -+1. In order this functionality to work, the following requirements must = have been met: >> -+ - 'sieveusehomedir' option must be 'no' in the configuration (default= ). >> -+ - 'sievedir' option must have a valid value. >> -+2. Currently, this patch checks the validity of the source script while = generating a >> -+ bytecode compiled script, but not the validity of the bytecode sieve = script file. >> -+ The administrator should make sure that the provided files contain a = valid sieve >> -+ script as well as the compiled script is updated every time the sourc= e script changes. >> -+ >> -+ >> -+ >> -+Issues to be considered >> -+=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D >> -+ >> -+I) In order to use the create on post feauture one should be absolutely = sure that: >> -+a) The MTA checks the validity of the e-mail recipient before sending th= e e-mail to >> -+LMTP. This is an RFC821 requirement. This usually expands to "the mta sh= ould be >> -+able to use the account database as user mailbox database". >> -+b) Only authorized accounts/services can talk to LMTP. >> -+ >> -+II) Especially in the case of imap logins, the current patch implementat= ion checks >> -+for the INBOX folder existence upon login, causing an extra mailbox look= up in most >> -+of the cases. >> -+A better approach would be to chase the "IMAP_MAILBOX_NONEXISTENT" error= code and >> -+check if the error is associated with an INBOX folder. However, this wou= ld mess up >> -+Cyrus code. The way it was implemented may not have been the most perfor= mance >> -+optimized, but it produces a much cleaner and simple patch. >> -+ >> -+ >> -+ >> -+Virtual Domains Support >> -+=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D >> -+ >> -+Virtual domains are supported by all versions of the patch for cyrus-ima= pd-2.2.1-BETA and >> -+later. However, it is not possible to declare different INBOX subfolders= to be created or >> -+shared folders to be subscribed to for every domain. >> -+ >> -+ >> -+ >> -+Things to be done >> -+=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D >> -+ >> -+1. Support MURDER architecture. >> -+ >> -+ >> -+For more information and updates please visit http://email.uoa.gr/autocr= eate >> -+ >> -diff -Naur cyrus-imapd-2.2.12/imap/Makefile.in cyrus-imapd-2.2.12.autocre= ate2/imap/Makefile.in >> ---- cyrus-imapd-2.2.12/imap/Makefile.in 2004-05-28 21:03:02.000000000 +03= 00 >> -+++ cyrus-imapd-2.2.12.autocreate2/imap/Makefile.in 2005-10-19 14:48:57.9= 35240000 +0300 >> -@@ -104,7 +104,7 @@ >> - convert_code.o duplicate.o saslclient.o saslserver.o signals.o \ >> - annotate.o search_engines.o squat.o squat_internal.o mbdump.o \ >> - imapparse.o telemetry.o user.o notify.o protocol.o quota_db.o \ >> -- $(SEEN) $(IDLE) >> -+ autosieve.o $(SEEN) $(IDLE) >> - >> - IMAPDOBJS=3Dpushstats.o backend.o imapd.o index.o tls.o version.o >> - >> -@@ -122,7 +122,7 @@ >> - fud smmapd reconstruct quota mbpath ipurge \ >> - cyrdump chk_cyrus cvt_cyrusdb deliver ctl_mboxlist \ >> - ctl_deliver ctl_cyrusdb squatter mbexamine cyr_expire arbitron \ >> -- @IMAP_PROGS@ >> -+ compile_sieve @IMAP_PROGS@ >> - >> - BUILTSOURCES =3D imap_err.c imap_err.h pushstats.c pushstats.h \ >> - lmtpstats.c lmtpstats.h xversion.h mupdate_err.c mupdate_err.h \ >> -@@ -188,7 +188,7 @@ >> - ### Services >> - idled: idled.o mutex_fake.o libimap.a $(DEPLIBS) >> - $(CC) $(LDFLAGS) -o idled \ >> -- idled.o mutex_fake.o libimap.a $(DEPLIBS) $(LIBS) >> -+ idled.o mutex_fake.o libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS) >> - >> - lmtpd: lmtpd.o $(LMTPOBJS) $(SIEVE_OBJS) mutex_fake.o libimap.a $(SIEVE_= LIBS) \ >> - $(DEPLIBS) $(SERVICE) >> -@@ -214,10 +214,10 @@ >> - $(SERVICE) lmtpproxyd.o backend.o $(LMTPOBJS) mutex_fake.o \ >> - libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS) $(LIB_WRAP) >> - >> --imapd: xversion $(IMAPDOBJS) mutex_fake.o libimap.a $(DEPLIBS) $(SERVICE) >> -+imapd: xversion $(IMAPDOBJS) mutex_fake.o libimap.a $(SIEVE_LIBS) $(DEPL= IBS) $(SERVICE) >> - $(CC) $(LDFLAGS) -o imapd \ >> - $(SERVICE) $(IMAPDOBJS) mutex_fake.o \ >> -- libimap.a $(DEPLIBS) $(LIBS) $(LIB_WRAP) >> -+ libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS) $(LIB_WRAP) >> - >> - imapd.pure: $(IMAPDOBJS) mutex_fake.o libimap.a $(DEPLIBS) $(SERVICE) >> - $(PURIFY) $(PUREOPT) $(CC) $(LDFLAGS) -o imapd.pure \ >> -@@ -232,7 +232,7 @@ >> - proxyd: $(PROXYDOBJS) mutex_fake.o libimap.a $(DEPLIBS) $(SERVICE) >> - $(CC) $(LDFLAGS) -o proxyd \ >> - $(SERVICE) $(PROXYDOBJS) mutex_fake.o libimap.a \ >> -- $(DEPLIBS) $(LIBS) $(LIB_WRAP) >> -+ $(SIEVE_LIBS) $(DEPLIBS) $(LIBS) $(LIB_WRAP) >> - >> - proxyd.pure: $(PROXYDOBJS) mutex_fake.o libimap.a $(DEPLIBS) $(SERVICE) >> - $(PURIFY) $(PUREOPT) $(CC) $(LDFLAGS) -o proxyd.pure \ >> -@@ -244,7 +244,7 @@ >> - $(CC) $(LDFLAGS) -o mupdate \ >> - $(SERVICETHREAD) mupdate.o mupdate-slave.o mupdate-client.o \ >> - mutex_pthread.o tls.o libimap.a \ >> -- $(DEPLIBS) $(LIBS) $(LIB_WRAP) -lpthread >> -+ $(SIEVE_LIBS) $(DEPLIBS) $(LIBS) $(LIB_WRAP) -lpthread >> - >> - mupdate.pure: mupdate.o mupdate-slave.o mupdate-client.o mutex_pthread.o= \ >> - libimap.a $(DEPLIBS) >> -@@ -252,92 +252,96 @@ >> - $(SERVICETHREAD) mupdate.o mupdate-slave.o mupdate-client.o \ >> - mutex_pthread.o libimap.a $(DEPLIBS) $(LIBS) $(LIB_WRAP) -lpthread >> - >> --pop3d: pop3d.o backend.o tls.o mutex_fake.o libimap.a $(DEPLIBS) $(SERVI= CE) >> -+pop3d: pop3d.o backend.o tls.o mutex_fake.o libimap.a $(SIEVE_LIBS) $(DE= PLIBS) $(SERVICE) >> - $(CC) $(LDFLAGS) -o pop3d pop3d.o backend.o tls.o $(SERVICE) \ >> -- mutex_fake.o libimap.a $(DEPLIBS) $(LIBS) $(LIB_WRAP) >> -+ mutex_fake.o libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS) $(LIB_WRAP) >> - >> - nntpd: nntpd.o backend.o index.o smtpclient.o spool.o tls.o \ >> - mutex_fake.o nntp_err.o libimap.a $(DEPLIBS) $(SERVICE) >> - $(CC) $(LDFLAGS) -o nntpd nntpd.o backend.o index.o spool.o \ >> - smtpclient.o tls.o $(SERVICE) mutex_fake.o nntp_err.o \ >> -- libimap.a $(DEPLIBS) $(LIBS) $(LIB_WRAP) >> -+ libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS) $(LIB_WRAP) >> - >> --fud: fud.o libimap.a mutex_fake.o $(DEPLIBS) $(SERVICE) >> -+fud: fud.o libimap.a mutex_fake.o $(SIEVE_LIBS) $(DEPLIBS) $(SERVICE) >> - $(CC) $(LDFLAGS) -o fud $(SERVICE) fud.o mutex_fake.o libimap.a \ >> -- $(DEPLIBS) $(LIBS) $(LIB_WRAP) >> -+ $(SIEVE_LIBS) $(DEPLIBS) $(LIBS) $(LIB_WRAP) >> - >> --smmapd: smmapd.o libimap.a mutex_fake.o $(DEPLIBS) $(SERVICE) >> -+smmapd: smmapd.o libimap.a mutex_fake.o $(SIEVE_LIBS) $(DEPLIBS) $(SERVI= CE) >> - $(CC) $(LDFLAGS) -o smmapd $(SERVICE) smmapd.o mutex_fake.o libimap.a \ >> -- $(DEPLIBS) $(LIBS) $(LIB_WRAP) >> -+ $(SIEVE_LIBS) $(DEPLIBS) $(LIBS) $(LIB_WRAP) >> - >> - ### Command Line Utilities >> --arbitron: arbitron.o $(CLIOBJS) libimap.a $(DEPLIBS) >> -+arbitron: arbitron.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS) >> - $(CC) $(LDFLAGS) -o arbitron arbitron.o $(CLIOBJS) \ >> -- libimap.a $(DEPLIBS) $(LIBS) >> -+ libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS) >> -+ >> -+compile_sieve: compile_sieve.o libimap.a $(SIEVE_LIBS) $(DEPLIBS) >> -+ $(CC) $(LDFLAGS) -o compile_sieve compile_sieve.o $(CLIOBJS) \ >> -+ libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS) >> - >> --cvt_cyrusdb: cvt_cyrusdb.o mutex_fake.o libimap.a $(DEPLIBS) >> -+cvt_cyrusdb: cvt_cyrusdb.o mutex_fake.o libimap.a $(SIEVE_LIBS) $(DEPLIB= S) >> - $(CC) $(LDFLAGS) -o cvt_cyrusdb cvt_cyrusdb.o $(CLIOBJS) \ >> -- libimap.a $(DEPLIBS) $(LIBS) >> -+ libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS) >> - >> --chk_cyrus: chk_cyrus.o mutex_fake.o libimap.a $(DEPLIBS) >> -+chk_cyrus: chk_cyrus.o mutex_fake.o libimap.a $(SIEVE_LIBS) $(DEPLIBS) >> - $(CC) $(LDFLAGS) -o chk_cyrus chk_cyrus.o $(CLIOBJS) \ >> -- libimap.a $(DEPLIBS) $(LIBS) >> -+ libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS) >> - >> --deliver: deliver.o backend.o $(LMTPOBJS) mutex_fake.o libimap.a $(DEPLIB= S) >> -+deliver: deliver.o backend.o $(LMTPOBJS) mutex_fake.o libimap.a $(SIEVE_= LIBS) $(DEPLIBS) >> - $(CC) $(LDFLAGS) -o deliver deliver.o backend.o $(LMTPOBJS) \ >> -- mutex_fake.o libimap.a $(DEPLIBS) $(LIBS) >> -+ mutex_fake.o libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS) >> - >> --ctl_deliver: ctl_deliver.o $(CLIOBJS) libimap.a $(DEPLIBS) >> -+ctl_deliver: ctl_deliver.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS) >> - $(CC) $(LDFLAGS) -o \ >> -- $@ ctl_deliver.o $(CLIOBJS) libimap.a $(DEPLIBS) $(LIBS) >> -+ $@ ctl_deliver.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS) >> - >> --ctl_mboxlist: ctl_mboxlist.o mupdate-client.o $(CLIOBJS) libimap.a $(DEP= LIBS) >> -+ctl_mboxlist: ctl_mboxlist.o mupdate-client.o $(CLIOBJS) libimap.a $(SIE= VE_LIBS) $(DEPLIBS) >> - $(CC) $(LDFLAGS) -o $@ ctl_mboxlist.o mupdate-client.o $(CLIOBJS) \ >> -- libimap.a $(DEPLIBS) $(LIBS) >> -+ libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS) >> - >> --ctl_cyrusdb: ctl_cyrusdb.o $(CLIOBJS) libimap.a $(DEPLIBS) >> -+ctl_cyrusdb: ctl_cyrusdb.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS) >> - $(CC) $(LDFLAGS) -o \ >> -- $@ ctl_cyrusdb.o $(CLIOBJS) libimap.a $(DEPLIBS) $(LIBS) >> -+ $@ ctl_cyrusdb.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS) >> - >> --cyr_expire: cyr_expire.o $(CLIOBJS) libimap.a $(DEPLIBS) >> -+cyr_expire: cyr_expire.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS) >> - $(CC) $(LDFLAGS) -o $@ cyr_expire.o $(CLIOBJS) \ >> -- libimap.a $(DEPLIBS) $(LIBS) >> -+ libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS) >> - >> --fetchnews: fetchnews.o $(CLIOBJS) libimap.a $(DEPLIBS) >> -+fetchnews: fetchnews.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS) >> - $(CC) $(LDFLAGS) -o \ >> -- $@ fetchnews.o $(CLIOBJS) libimap.a $(DEPLIBS) $(LIBS) >> -+ $@ fetchnews.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS) >> - >> --squatter: squatter.o index.o squat_build.o $(CLIOBJS) libimap.a $(DEPLIB= S) >> -+squatter: squatter.o index.o squat_build.o $(CLIOBJS) libimap.a $(SIEVE_= LIBS) $(DEPLIBS) >> - $(CC) $(LDFLAGS) -o squatter squatter.o index.o squat_build.o \ >> -- $(CLIOBJS) libimap.a $(DEPLIBS) $(LIBS) >> -+ $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS) >> - >> --mbpath: mbpath.o $(CLIOBJS) libimap.a $(DEPLIBS) >> -+mbpath: mbpath.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS) >> - $(CC) $(LDFLAGS) -o mbpath mbpath.o $(CLIOBJS) libimap.a \ >> -- $(DEPLIBS) $(LIBS) >> -+ $(SIEVE_LIBS) $(DEPLIBS) $(LIBS) >> - >> --ipurge: ipurge.o $(CLIOBJS) libimap.a $(DEPLIBS) >> -+ipurge: ipurge.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS) >> - $(CC) $(LDFLAGS) -o ipurge ipurge.o $(CLIOBJS) \ >> -- libimap.a $(DEPLIBS) $(LIBS) >> -+ libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS) >> - >> --cyrdump: cyrdump.o index.o $(CLIOBJS) libimap.a $(DEPLIBS) >> -+cyrdump: cyrdump.o index.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS) >> - $(CC) $(LDFLAGS) -o cyrdump cyrdump.o index.o $(CLIOBJS) \ >> -- libimap.a $(DEPLIBS) $(LIBS) >> -+ libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS) >> - >> --mbexamine: mbexamine.o $(CLIOBJS) libimap.a $(DEPLIBS) >> -+mbexamine: mbexamine.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS) >> - $(CC) $(LDFLAGS) -o \ >> -- mbexamine mbexamine.o $(CLIOBJS) libimap.a $(DEPLIBS) $(LIBS) >> -+ mbexamine mbexamine.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(= LIBS) >> - >> --reconstruct: reconstruct.o $(CLIOBJS) libimap.a $(DEPLIBS) >> -+reconstruct: reconstruct.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS) >> - $(CC) $(LDFLAGS) -o \ >> -- reconstruct reconstruct.o $(CLIOBJS) libimap.a $(DEPLIBS) $(LIBS) >> -+ reconstruct reconstruct.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS= ) $(LIBS) >> - >> --quota: quota.o $(CLIOBJS) libimap.a $(DEPLIBS) >> -+quota: quota.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS) >> - $(CC) $(LDFLAGS) -o quota quota.o $(CLIOBJS) \ >> -- libimap.a $(DEPLIBS) $(LIBS) >> -+ libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LIBS) >> - >> --tls_prune: tls_prune.o tls.o $(CLIOBJS) libimap.a $(DEPLIBS) >> -+tls_prune: tls_prune.o tls.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIB= S) >> - $(CC) $(LDFLAGS) -o \ >> -- $@ tls_prune.o tls.o $(CLIOBJS) libimap.a $(DEPLIBS) $(LIBS) >> -+ $@ tls_prune.o tls.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(L= IBS) >> - >> - ### Other Misc Targets >> - >> -diff -Naur cyrus-imapd-2.2.12/imap/autosieve.c cyrus-imapd-2.2.12.autocre= ate2/imap/autosieve.c >> ---- cyrus-imapd-2.2.12/imap/autosieve.c 1970-01-01 02:00:00.000000000 +02= 00 >> -+++ cyrus-imapd-2.2.12.autocreate2/imap/autosieve.c 2005-10-19 14:48:57.9= 40098000 +0300 >> -@@ -0,0 +1,587 @@ >> -+#include >> -+#include >> -+#include >> -+ >> -+#ifdef HAVE_UNISTD_H >> -+#include >> -+#endif >> -+ >> -+#include >> -+#include >> -+#include >> -+#include >> -+#include >> -+#include >> -+#include >> -+#include >> -+#include >> -+#include >> -+ >> -+#include "global.h" >> -+#include "util.h" >> -+#include "mailbox.h" >> -+#include "imap_err.h" >> -+#include "sieve_interface.h" >> -+#include "script.h" >> -+ >> -+#define TIMSIEVE_FAIL -1 >> -+#define TIMSIEVE_OK 0 >> -+#define MAX_FILENAME 1024 >> -+ >> -+static int get_script_name(char *sievename, size_t buflen, const char *f= ilename); >> -+static int get_script_dir(char *sieve_script_dir, size_t buflen, char *u= serid, const char *sieve_dir); >> -+int autoadd_sieve(char *userid, const char *source_script); >> -+ >> -+static void fatal(const char *s, int code); >> -+static void foo(void); >> -+static int sieve_notify(void *ac __attribute__((unused)), >> -+ void *interp_context __attribute__((unused)), >> -+ void *script_context __attribute__((unused)), >> -+ void *message_context __attribute__((unused)), >> -+ const char **errmsg __attribute__((unused))); >> -+static int mysieve_error(int lineno, const char *msg, >> -+ void *i __attribute__((unused)), void *s); >> -+static int is_script_parsable(FILE *stream, char **errstr, sieve_script_= t **ret); >> -+ >> -+ >> -+sieve_vacation_t vacation2 =3D { >> -+ 0, /* min response */ >> -+ 0, /* max response */ >> -+ (sieve_callback *) &foo, /* autorespond() */ >> -+ (sieve_callback *) &foo /* send_response() */ >> -+}; >> -+ >> -+ >> -+/* >> -+ * Find the name of the sieve script >> -+ * given the source script and compiled script names >> -+ */ >> -+static int get_script_name(char *sievename, size_t buflen, const char *f= ilename) >> -+{ >> -+ char *p; >> -+ int r; >> -+ >> -+ p =3D strrchr(filename, '/'); >> -+ if (p =3D=3D NULL) >> -+ p =3D (char *) filename; >> -+ else >> -+ p++; >> -+ >> -+ r =3D strlcpy(sievename, p, buflen) - buflen; >> -+ return (r >=3D 0 || r =3D=3D -buflen ? 1 : 0); >> -+} >> -+ >> -+ >> -+/* >> -+ * Find the directory where the sieve scripts of the user >> -+ * reside >> -+ */ >> -+static int get_script_dir(char *sieve_script_dir, size_t buflen, char *u= serid, const char *sieve_dir) >> -+{ >> -+ char *user =3D NULL, *domain =3D NULL; >> -+ >> -+ /* Setup the user and the domain */ >> -+ if(config_virtdomains && (domain =3D strchr(userid, '@'))) { >> -+ user =3D (char *) xmalloc((domain - userid +1) * sizeof(char)); >> -+ strlcpy(user, userid, domain - userid + 1); >> -+ domain++; >> -+ } else >> -+ user =3D userid; >> -+ >> -+ /* Find the dir path where the sieve scripts of the user will resid= e */ >> -+ if (config_virtdomains && domain) { >> -+ if(snprintf(sieve_script_dir, buflen, "%s%s%c/%s/%c/%s/", >> -+ sieve_dir, FNAME_DOMAINDIR, dir_hash_c(domain), domain, di= r_hash_c(user), user) >=3D buflen) { >> -+ free(user); >> -+ return 1; >> -+ } >> -+ } else { >> -+ if(snprintf(sieve_script_dir, buflen, "%s/%c/%s/", >> -+ sieve_dir, dir_hash_c(user), user) >=3D buflen) >> -+ return 1; >> -+ } >> -+ >> -+ /* Free the xmalloced user memory, reserved above */ >> -+ if(user !=3D userid) >> -+ free(user); >> -+ >> -+ return 0; >> -+} >> -+ >> -+int autoadd_sieve(char *userid, const char *source_script) >> -+{ >> -+ sieve_script_t *s =3D NULL; >> -+ bytecode_info_t *bc =3D NULL; >> -+ char *err =3D NULL; >> -+ FILE *in_stream, *out_fp; >> -+ int out_fd, in_fd, r, k; >> -+ int do_compile =3D 0; >> -+ const char *sieve_dir =3D NULL; >> -+ const char *compiled_source_script =3D NULL; >> -+ char sievename[MAX_FILENAME]; >> -+ char sieve_script_name[MAX_FILENAME]; >> -+ char sieve_script_dir[MAX_FILENAME]; >> -+ char sieve_bcscript_name[MAX_FILENAME]; >> -+ char sieve_default[MAX_FILENAME]; >> -+ char sieve_tmpname[MAX_FILENAME]; >> -+ char sieve_bctmpname[MAX_FILENAME]; >> -+ char sieve_bclink_name[MAX_FILENAME]; >> -+ char buf[4096]; >> -+ mode_t oldmask; >> -+ struct stat statbuf; >> -+ >> -+ /* We don't support using the homedirectory, like timsieved */ >> -+ if (config_getswitch(IMAPOPT_SIEVEUSEHOMEDIR)) { >> -+ syslog(LOG_WARNING,"autocreate_sieve: autocreate_sieve does not = work with sieveusehomedir option in imapd.conf"); >> -+ return 1; >> -+ } >> -+ >> -+ /* Check if sievedir is defined in imapd.conf */ >> -+ if(!(sieve_dir =3D config_getstring(IMAPOPT_SIEVEDIR))) { >> -+ syslog(LOG_WARNING, "autocreate_sieve: sievedir option is not de= fined. Check imapd.conf"); >> -+ return 1; >> -+ } >> -+ >> -+ /* Check if autocreate_sieve_compiledscript is defined in imapd.conf= */ >> -+ if(!(compiled_source_script =3D config_getstring(IMAPOPT_AUTOCREATE= _SIEVE_COMPILEDSCRIPT))) { >> -+ syslog(LOG_WARNING, "autocreate_sieve: autocreate_sieve_compiled= script option is not defined. Compiling it"); >> -+ do_compile =3D 1; >> -+ } >> -+ >> -+ if(get_script_dir(sieve_script_dir, sizeof(sieve_script_dir), userid= , sieve_dir)) { >> -+ syslog(LOG_WARNING, "autocreate_sieve: Cannot find sieve scripts= directory"); >> -+ return 1; >> -+ } >> -+ >> -+ if (get_script_name(sievename, sizeof(sievename), source_script)) { >> -+ syslog(LOG_WARNING, "autocreate_sieve: Invalid sieve script %s",= source_script); >> -+ return 1; >> -+ } >> -+ >> -+ if(snprintf(sieve_tmpname, sizeof(sieve_tmpname), "%s%s.script.NEW",= sieve_script_dir, sievename) >=3D sizeof(sieve_tmpname)) { >> -+ syslog(LOG_WARNING, "autocreate_sieve: Invalid sieve path %s, %s= , %s", sieve_dir, sievename, userid); >> -+ return 1; >> -+ } >> -+ if(snprintf(sieve_bctmpname, sizeof(sieve_bctmpname), "%s%s.bc.NEW",= sieve_script_dir, sievename) >=3D sizeof(sieve_bctmpname)) { >> -+ syslog(LOG_WARNING, "autocreate_sieve: Invalid sieve path %s, %s= , %s", sieve_dir, sievename, userid); >> -+ return 1; >> -+ } >> -+ if(snprintf(sieve_script_name, sizeof(sieve_script_name), "%s%s.scri= pt",sieve_script_dir, sievename) >=3D sizeof(sieve_script_name)) { >> -+ syslog(LOG_WARNING, "autocreate_sieve: Invalid sieve path %s, %s= , %s", sieve_dir, sievename, userid); >> -+ return 1; >> -+ } >> -+ if(snprintf(sieve_bcscript_name, sizeof(sieve_bcscript_name), "%s%s.= bc",sieve_script_dir, sievename) >=3D sizeof(sieve_bcscript_name)) { >> -+ syslog(LOG_WARNING, "autocreate_sieve: Invalid sieve path %s, %s= , %s", sieve_dir, sievename, userid); >> -+ return 1; >> -+ } >> -+ if(snprintf(sieve_default, sizeof(sieve_default), "%s%s",sieve_scrip= t_dir,"defaultbc") >=3D sizeof(sieve_default)) { >> -+ syslog(LOG_WARNING, "autocreate_sieve: Invalid sieve path %s, %s= , %s", sieve_dir, sievename, userid); >> -+ return 1; >> -+ } >> -+ if(snprintf(sieve_bclink_name, sizeof(sieve_bclink_name), "%s.bc", s= ievename) >=3D sizeof(sieve_bclink_name)) { >> -+ syslog(LOG_WARNING, "autocreate_sieve: Invalid sieve path %s, %s= , %s", sieve_dir, sievename, userid); >> -+ return 1; >> -+ } >> -+ >> -+ /* Check if a default sieve filter alrady exists */ >> -+ if(!stat(sieve_default,&statbuf)) { >> -+ syslog(LOG_WARNING,"autocreate_sieve: Default sieve script alrea= dy exists"); >> -+ fclose(in_stream); >> -+ return 1; >> -+ } >> -+ >> -+ /* Open the source script. if there is a problem with that exit */ >> -+ in_stream =3D fopen(source_script, "r"); >> -+ if(!in_stream) { >> -+ syslog(LOG_WARNING,"autocreate_sieve: Unable to open sieve scrip= t %s. Check permissions",source_script); >> -+ return 1; >> -+ } >> -+ >> -+ >> -+ /* >> -+ * At this point we start the modifications of the filesystem >> -+ */ >> -+ >> -+ /* Create the directory where the sieve scripts will reside */ >> -+ r =3D cyrus_mkdir(sieve_script_dir, 0755); >> -+ if(r =3D=3D -1) { >> -+ /* If this fails we just leave */ >> -+ syslog(LOG_WARNING,"autocreate_sieve: Unable to create directory= %s. Check permissions",sieve_script_name); >> -+ return 1; >> -+ } >> -+ >> -+ /* >> -+ * We open the file that will be used as the bc file. If this file e= xists, overwrite it >> -+ * since something bad has happened. We open the file here so that t= his error checking is >> -+ * done before we try to open the rest of the files to start copying= etc. >> -+ */ >> -+ out_fd =3D open(sieve_bctmpname, O_CREAT|O_TRUNC|O_WRONLY, S_IRUSR|S= _IWUSR|S_IRGRP|S_IROTH); >> -+ if(out_fd < 0) { >> -+ if(errno =3D=3D EEXIST) { >> -+ syslog(LOG_WARNING,"autocreate_sieve: File %s already exists= . Probaly left over. Ignoring",sieve_bctmpname); >> -+ } else if (errno =3D=3D EACCES) { >> -+ syslog(LOG_WARNING,"autocreate_sieve: No access to create fi= le %s. Check permissions",sieve_bctmpname); >> -+ fclose(in_stream); >> -+ return 1; >> -+ } else { >> -+ syslog(LOG_WARNING,"autocreate_sieve: Unable to create %s. U= nknown error",sieve_bctmpname); >> -+ fclose(in_stream); >> -+ return 1; >> -+ } >> -+ } >> -+ >> -+ if(!do_compile && compiled_source_script && (in_fd =3D open(compiled= _source_script, O_RDONLY)) !=3D -1) { >> -+ while((r =3D read(in_fd, buf, sizeof(buf))) > 0) { >> -+ if((k=3Dwrite(out_fd, buf,r)) < 0) { >> -+ syslog(LOG_WARNING, "autocreate_sieve: Error writing to = file: %s, error: %d", sieve_bctmpname, errno); >> -+ close(out_fd); >> -+ close(in_fd); >> -+ fclose(in_stream); >> -+ unlink(sieve_bctmpname); >> -+ return 1; >> -+ } >> -+ } >> -+ >> -+ if(r =3D=3D 0) { /* EOF */ >> -+ close(out_fd); >> -+ close(in_fd); >> -+ } else if (r < 0) { >> -+ syslog(LOG_WARNING, "autocreate_sieve: Error reading compile= d script file: %s. Will try to compile it", >> -+ compiled_source_script); >> -+ close(in_fd); >> -+ do_compile =3D 1; >> -+ if(lseek(out_fd, 0, SEEK_SET)) { >> -+ syslog(LOG_WARNING, "autocreate_sieve: Major IO problem.= Aborting"); >> -+ return 1; >> -+ } >> -+ } >> -+ close(in_fd); >> -+ } else { >> -+ if(compiled_source_script) >> -+ syslog(LOG_WARNING,"autocreate_sieve: Problem opening comp= iled script file: %s. Compiling it", compiled_source_script); >> -+ do_compile =3D 1; >> -+ } >> -+ >> -+ >> -+ /* Because we failed to open a precompiled bc sieve script, we compi= le one */ >> -+ if(do_compile) { >> -+ if(is_script_parsable(in_stream,&err, &s) =3D=3D TIMSIEVE_FAIL) { >> -+ if(err && *err) { >> -+ syslog(LOG_WARNING,"autocreate_sieve: Error while parsing= script %s.",err); >> -+ free(err); >> -+ } else >> -+ syslog(LOG_WARNING,"autocreate_sieve: Error while parsin= g script"); >> -+ >> -+ unlink(sieve_bctmpname); >> -+ fclose(in_stream); >> -+ close(out_fd); >> -+ return 1; >> -+ } >> -+ >> -+ /* generate the bytecode */ >> -+ if(sieve_generate_bytecode(&bc, s) =3D=3D TIMSIEVE_FAIL) { >> -+ syslog(LOG_WARNING,"autocreate_sieve: problem compiling siev= e script"); >> -+ /* removing the copied script and cleaning up memory */ >> -+ unlink(sieve_bctmpname); >> -+ sieve_script_free(&s); >> -+ fclose(in_stream); >> -+ close(out_fd); >> -+ return 1; >> -+ } >> -+ >> -+ if(sieve_emit_bytecode(out_fd, bc) =3D=3D TIMSIEVE_FAIL) { >> -+ syslog(LOG_WARNING,"autocreate_sieve: problem emiting sieve = script"); >> -+ /* removing the copied script and cleaning up memory */ >> -+ unlink(sieve_bctmpname); >> -+ sieve_free_bytecode(&bc); >> -+ sieve_script_free(&s); >> -+ fclose(in_stream); >> -+ close(out_fd); >> -+ return 1; >> -+ } >> -+ >> -+ /* clean up the memory */ >> -+ sieve_free_bytecode(&bc); >> -+ sieve_script_free(&s); >> -+ } >> -+ >> -+ close(out_fd); >> -+ rewind(in_stream); >> -+ >> -+ /* Copy the initial script */ >> -+ oldmask =3D umask(077); >> -+ if((out_fp =3D fopen(sieve_tmpname, "w")) =3D=3D NULL) { >> -+ syslog(LOG_WARNING,"autocreate_sieve: Unable to open %s destinat= ion sieve script", sieve_tmpname); >> -+ unlink(sieve_bctmpname); >> -+ umask(oldmask); >> -+ fclose(in_stream); >> -+ return 1; >> -+ } >> -+ umask(oldmask); >> -+ >> -+ while((r =3D fread(buf,sizeof(char), sizeof(buf), in_stream))) { >> -+ if( fwrite(buf,sizeof(char), r, out_fp) !=3D r) { >> -+ syslog(LOG_WARNING,"autocreate_sieve: Problem writing to sie= ve script file: %s",sieve_tmpname); >> -+ fclose(out_fp); >> -+ unlink(sieve_tmpname); >> -+ unlink(sieve_bctmpname); >> -+ fclose(in_stream); >> -+ return 1; >> -+ } >> -+ } >> -+ >> -+ if(feof(in_stream)) { >> -+ fclose(out_fp); >> -+ } else { /* ferror */ >> -+ fclose(out_fp); >> -+ unlink(sieve_tmpname); >> -+ unlink(sieve_bctmpname); >> -+ fclose(in_stream); >> -+ return 1; >> -+ } >> -+ >> -+ /* Renaming the necessary stuff */ >> -+ if(rename(sieve_tmpname, sieve_script_name)) { >> -+ unlink(sieve_tmpname); >> -+ unlink(sieve_bctmpname); >> -+ return 1; >> -+ } >> -+ >> -+ if(rename(sieve_bctmpname, sieve_bcscript_name)) { >> -+ unlink(sieve_bctmpname); >> -+ unlink(sieve_bcscript_name); >> -+ return 1; >> -+ } >> -+ >> -+ /* end now with the symlink */ >> -+ if(symlink(sieve_bclink_name, sieve_default)) { >> -+ if(errno !=3D EEXIST) { >> -+ syslog(LOG_WARNING, "autocreate_sieve: problem making the de= fault link."); >> -+ /* Lets delete the files */ >> -+ unlink(sieve_script_name); >> -+ unlink(sieve_bcscript_name); >> -+ } >> -+ } >> -+ >> -+ /* >> -+ * If everything has succeeded AND we have compiled the script AND w= e have requested >> -+ * to generate the global script so that it is not compiled each tim= e then we create it. >> -+ */ >> -+ if(do_compile && >> -+ config_getswitch(IMAPOPT_GENERATE_COMPILED_SIEVE_SCRIPT)) { >> -+ >> -+ if(!compiled_source_script) { >> -+ syslog(LOG_WARNING, "autocreate_sieve: To save a compiled si= eve script, autocreate_sieve_compiledscript must have been defined in imapd.c= onf"); >> -+ return 0; >> -+ } >> -+ >> -+ if(snprintf(sieve_tmpname, sizeof(sieve_tmpname), "%s.NEW", comp= iled_source_script) >=3D sizeof(sieve_tmpname)) >> -+ return 0; >> -+ >> -+ /* >> -+ * Copy everything from the newly created bc sieve sieve script. >> -+ */ >> -+ if((in_fd =3D open(sieve_bcscript_name, O_RDONLY))<0) { >> -+ return 0; >> -+ } >> -+ >> -+ if((out_fd =3D open(sieve_tmpname, O_CREAT|O_EXCL|O_WRONLY, S_IR= USR|S_IWUSR|S_IRGRP|S_IROTH)) < 0) { >> -+ if(errno =3D=3D EEXIST) { >> -+ /* Someone is already doing this so just bail out. */ >> -+ syslog(LOG_WARNING, "autocreate_sieve: %s already exists.= Some other instance processing it, or it is left over", sieve_tmpname); >> -+ close(in_fd); >> -+ return 0; >> -+ } else if (errno =3D=3D EACCES) { >> -+ syslog(LOG_WARNING,"autocreate_sieve: No access to creat= e file %s. Check permissions",sieve_tmpname); >> -+ close(in_fd); >> -+ return 0; >> -+ } else { >> -+ syslog(LOG_WARNING,"autocreate_sieve: Unable to create %= s",sieve_tmpname); >> -+ close(in_fd); >> -+ return 0; >> -+ } >> -+ } >> -+ >> -+ while((r =3D read(in_fd, buf, sizeof(buf))) > 0) { >> -+ if((k =3D write(out_fd,buf,r)) < 0) { >> -+ syslog(LOG_WARNING, "autocreate_sieve: Error writing to = file: %s, error: %d", sieve_tmpname, errno); >> -+ close(out_fd); >> -+ close(in_fd); >> -+ unlink(sieve_tmpname); >> -+ return 0; >> -+ } >> -+ } >> -+ >> -+ if(r =3D=3D 0 ) { /*EOF */ >> -+ close(out_fd); >> -+ close(in_fd); >> -+ } else if (r < 0) { >> -+ syslog(LOG_WARNING, "autocreate_sieve: Error writing to = file: %s, error: %d", sieve_tmpname, errno); >> -+ close(out_fd); >> -+ close(in_fd); >> -+ unlink(sieve_tmpname); >> -+ return 0; >> -+ } >> -+ >> -+ /* Rename the temporary created sieve script to its final name. = */ >> -+ if(rename(sieve_tmpname, compiled_source_script)) { >> -+ if(errno !=3D EEXIST) { >> -+ unlink(sieve_tmpname); >> -+ unlink(compiled_source_script); >> -+ } >> -+ return 0; >> -+ } >> -+ >> -+ syslog(LOG_NOTICE, "autocreate_sieve: Compiled sieve script was = successfully saved in %s", compiled_source_script); >> -+ } >> -+ >> -+ return 0; >> -+} >> -+ >> -+static void fatal(const char *s, int code) >> -+{ >> -+ printf("Fatal error: %s (%d)\r\n", s, code); >> -+ exit(1); >> -+} >> -+ >> -+/* to make larry's stupid functions happy :) */ >> -+static void foo(void) >> -+{ >> -+ fatal("stub function called", 0); >> -+} >> -+ >> -+static int sieve_notify(void *ac __attribute__((unused)), >> -+ void *interp_context __attribute__((unused)), >> -+ void *script_context __attribute__((unused)), >> -+ void *message_context __attribute__((unused)), >> -+ const char **errmsg __attribute__((unused))) >> -+{ >> -+ fatal("stub function called", 0); >> -+ return SIEVE_FAIL; >> -+} >> -+ >> -+static int mysieve_error(int lineno, const char *msg, >> -+ void *i __attribute__((unused)), void *s) >> -+{ >> -+ char buf[1024]; >> -+ char **errstr =3D (char **) s; >> -+ >> -+ snprintf(buf, 80, "line %d: %s\r\n", lineno, msg); >> -+ *errstr =3D (char *) xrealloc(*errstr, strlen(*errstr) + strlen(buf)= + 30); >> -+ syslog(LOG_DEBUG, "%s", buf); >> -+ strcat(*errstr, buf); >> -+ >> -+ return SIEVE_OK; >> -+} >> -+ >> -+/* end the boilerplate */ >> -+ >> -+/* returns TRUE or FALSE */ >> -+int is_script_parsable(FILE *stream, char **errstr, sieve_script_t **ret) >> -+{ >> -+ sieve_interp_t *i; >> -+ sieve_script_t *s; >> -+ int res; >> -+ >> -+ res =3D sieve_interp_alloc(&i, NULL); >> -+ if (res !=3D SIEVE_OK) { >> -+ syslog(LOG_WARNING, "sieve_interp_alloc() returns %d\n", res); >> -+ return TIMSIEVE_FAIL; >> -+ } >> -+ >> -+ res =3D sieve_register_redirect(i, (sieve_callback *) &foo); >> -+ if (res !=3D SIEVE_OK) { >> -+ syslog(LOG_WARNING, "sieve_register_redirect() returns %d\n", re= s); >> -+ return TIMSIEVE_FAIL; >> -+ } >> -+ res =3D sieve_register_discard(i, (sieve_callback *) &foo); >> -+ if (res !=3D SIEVE_OK) { >> -+ syslog(LOG_WARNING, "sieve_register_discard() returns %d\n", res= ); >> -+ return TIMSIEVE_FAIL; >> -+ } >> -+ res =3D sieve_register_reject(i, (sieve_callback *) &foo); >> -+ if (res !=3D SIEVE_OK) { >> -+ syslog(LOG_WARNING, "sieve_register_reject() returns %d\n", res); >> -+ return TIMSIEVE_FAIL; >> -+ } >> -+ res =3D sieve_register_fileinto(i, (sieve_callback *) &foo); >> -+ if (res !=3D SIEVE_OK) { >> -+ syslog(LOG_WARNING, "sieve_register_fileinto() returns %d\n", re= s); >> -+ return TIMSIEVE_FAIL; >> -+ } >> -+ res =3D sieve_register_keep(i, (sieve_callback *) &foo); >> -+ if (res !=3D SIEVE_OK) { >> -+ syslog(LOG_WARNING, "sieve_register_keep() returns %d\n", res); >> -+ return TIMSIEVE_FAIL; >> -+ } >> -+ >> -+ res =3D sieve_register_imapflags(i, NULL); >> -+ if (res !=3D SIEVE_OK) { >> -+ syslog(LOG_WARNING, "sieve_register_imapflags() returns %d\n", r= es); >> -+ return TIMSIEVE_FAIL; >> -+ } >> -+ >> -+ res =3D sieve_register_size(i, (sieve_get_size *) &foo); >> -+ if (res !=3D SIEVE_OK) { >> -+ syslog(LOG_WARNING, "sieve_register_size() returns %d\n", res); >> -+ return TIMSIEVE_FAIL; >> -+ } >> -+ >> -+ res =3D sieve_register_header(i, (sieve_get_header *) &foo); >> -+ if (res !=3D SIEVE_OK) { >> -+ syslog(LOG_WARNING, "sieve_register_header() returns %d\n", res); >> -+ return TIMSIEVE_FAIL; >> -+ } >> -+ >> -+ res =3D sieve_register_envelope(i, (sieve_get_envelope *) &foo); >> -+ if (res !=3D SIEVE_OK) { >> -+ syslog(LOG_WARNING, "sieve_register_envelope() returns %d\n", re= s); >> -+ return TIMSIEVE_FAIL; >> -+ } >> -+ >> -+ res =3D sieve_register_vacation(i, &vacation2); >> -+ if (res !=3D SIEVE_OK) { >> -+ syslog(LOG_WARNING, "sieve_register_vacation() returns %d\n", re= s); >> -+ return TIMSIEVE_FAIL; >> -+ } >> -+ >> -+ res =3D sieve_register_notify(i, &sieve_notify); >> -+ if (res !=3D SIEVE_OK) { >> -+ syslog(LOG_WARNING, "sieve_register_notify() returns %d\n", res); >> -+ return TIMSIEVE_FAIL; >> -+ } >> -+ >> -+ res =3D sieve_register_parse_error(i, &mysieve_error); >> -+ if (res !=3D SIEVE_OK) { >> -+ syslog(LOG_WARNING, "sieve_register_parse_error() returns %d\n",= res); >> -+ return TIMSIEVE_FAIL; >> -+ } >> -+ >> -+ rewind(stream); >> -+ >> -+ *errstr =3D (char *) xmalloc(20 * sizeof(char)); >> -+ strcpy(*errstr, "script errors:\r\n"); >> -+ >> -+ res =3D sieve_script_parse(i, stream, errstr, &s); >> -+ >> -+ if (res =3D=3D SIEVE_OK) { >> -+ if(ret) { >> -+ *ret =3D s; >> -+ } else { >> -+ sieve_script_free(&s); >> -+ } >> -+ free(*errstr); >> -+ *errstr =3D NULL; >> -+ } >> -+ >> -+ /* free interpreter */ >> -+ sieve_interp_free(&i); >> -+ >> -+ return (res =3D=3D SIEVE_OK) ? TIMSIEVE_OK : TIMSIEVE_FAIL; >> -+} >> -+ >> -+/* >> -+ * Btw the initial date of this patch is Sep, 02 2004 which is the birth= day of >> -+ * Pavlos. Author of cyrusmaster. So consider this patch as his birthday= present >> -+ */ >> -+ >> -diff -Naur cyrus-imapd-2.2.12/imap/compile_sieve.c cyrus-imapd-2.2.12.aut= ocreate2/imap/compile_sieve.c >> ---- cyrus-imapd-2.2.12/imap/compile_sieve.c 1970-01-01 02:00:00.000000000= +0200 >> -+++ cyrus-imapd-2.2.12.autocreate2/imap/compile_sieve.c 2005-10-19 14:48:= 57.943407000 +0300 >> -@@ -0,0 +1,364 @@ >> -+/* This tool compiles the sieve script from a command >> -+line so that it can be used wby the autoadd patch */ >> -+#include >> -+#include >> -+ >> -+#include >> -+#include >> -+#ifdef HAVE_UNISTD_H >> -+#include >> -+#endif >> -+#include >> -+#include >> -+#include >> -+#include >> -+#include >> -+#include >> -+#include >> -+#include >> -+ >> -+#include "global.h" >> -+ >> -+#include "util.h" >> -+#include "mailbox.h" >> -+#include "imap_err.h" >> -+#include "sieve_interface.h" >> -+#include "script.h" >> -+ >> -+#include >> -+ >> -+#define TIMSIEVE_FAIL -1 >> -+#define TIMSIEVE_OK 0 >> -+#define MAX_FILENAME_SIZE 100 >> -+ >> -+/* Needed by libconfig */ >> -+const int config_need_data =3D 0; >> -+ >> -+static int is_script_parsable(FILE *stream, char **errstr, sieve_script_= t **ret); >> -+ >> -+static void fatal(const char *s, int code) >> -+{ >> -+ printf("Fatal error: %s (%d)\r\n", s, code); >> -+ >> -+ exit(1); >> -+} >> -+ >> -+void usage(void) >> -+{ >> -+ fprintf(stderr, >> -+ "Usage:\n\tcompile_sieve [-C ] [-i -o ]\n"); >> -+ exit(-1); >> -+} >> -+ >> -+ >> -+int main (int argc, char **argv) >> -+{ >> -+ >> -+ sieve_script_t *s =3D NULL; >> -+ bytecode_info_t *bc =3D NULL; >> -+ char *err =3D NULL; >> -+ FILE *in_stream; >> -+ int out_fd,r, k, opt; >> -+ char *source_script =3D NULL; >> -+ char *compiled_source_script =3D NULL; >> -+ mode_t oldmask; >> -+ struct stat statbuf; >> -+ char *alt_config =3D NULL; >> -+ extern char *optarg; >> -+ char sieve_tmpname[MAX_MAILBOX_NAME+1]; >> -+ >> -+ if (geteuid() =3D=3D 0) fatal("must run as the Cyrus user", EC_USAGE= ); >> -+ >> -+ while((opt =3D getopt(argc, argv, "C:i:o:")) !=3D EOF) { >> -+ switch (opt) { >> -+ case 'C': /* alt config file */ >> -+ alt_config =3D optarg; >> -+ break; >> -+ case 'i': /* input script file */ >> -+ source_script =3D optarg; >> -+ break; >> -+ case 'o': /* output script file */ >> -+ compiled_source_script =3D optarg; >> -+ break; >> -+ default: >> -+ usage(); >> -+ break; >> -+ } >> -+ } >> -+ >> -+ if(source_script && !compiled_source_script) { >> -+ fprintf(stderr, "No output file was defined\n"); >> -+ usage(); >> -+ } else if (!source_script && compiled_source_script) { >> -+ fprintf(stderr, "No input file was defined\n"); >> -+ usage(); >> -+ }=09 >> -+ >> -+ /* >> -+ * If no has been defined, then read them from >> -+ * the configuration file. >> -+ */ >> -+ if (!source_script && !compiled_source_script) { >> -+ cyrus_init(alt_config, "compile_sieve", 0); >> -+ >> -+ /* Initially check if we want to have the sieve script created */ >> -+ if(!(source_script =3D (char *) config_getstring(IMAPOPT_AUTOCREATE= _SIEVE_SCRIPT))) { >> -+ fprintf(stderr,"autocreate_sieve_script option not defined. Che= ck imapd.conf\n"); >> -+ return 1; >> -+ } >> -+ >> -+ /* Check if we have an already compiled sieve script*/ >> -+ if(!(compiled_source_script =3D (char *) config_getstring(IMAPOPT_A= UTOCREATE_SIEVE_COMPILEDSCRIPT))) { >> -+ fprintf(stderr, "autocreate_sieve_compiledscript option not def= ined. Check imapd.conf\n"); >> -+ return 1; >> -+ } >> -+ >> -+ if(!strrchr(source_script,'/') || !strrchr(compiled_source_script,'= /')) { >> -+ /* >> -+ * At this point the only think that is inconsistent is the directory >> -+ * that was created. But if the user will have any sieve scripts then >> -+ * they will eventually go there, so no big deal >> -+ */ >> -+ fprintf(stderr, >> -+ "In imapd.conf the full path of the filenames must be defined\n"); >> -+ return 1; >> -+ } >> -+ } >> -+ >> -+ printf("input file : %s, output file : %s\n", source_script, compile= d_source_script); >> -+ >> -+ >> -+ if(strlen(compiled_source_script) + sizeof(".NEW") + 1 > sizeof(siev= e_tmpname)) { >> -+ fprintf(stderr, "Filename %s is too big\n", compiled_source_script); >> -+ return 1; >> -+ } >> -+ =09 >> -+ snprintf(sieve_tmpname, sizeof(sieve_tmpname), "%s.NEW", compiled_so= urce_script); >> -+ >> -+ in_stream =3D fopen(source_script,"r"); >> -+ >> -+ if(!in_stream) { >> -+ fprintf(stderr,"Unable to open %s source sieve script\n",source_= script); >> -+ return; >> -+ } >> -+ >> -+ /* >> -+ * We open the file that will be used as the bc file. If this file e= xists, overwrite it >> -+ * since something bad has happened. We open the file here so that t= his error checking is >> -+ * done before we try to open the rest of the files to start copying= etc. >> -+ */ >> -+ out_fd =3D open(sieve_tmpname, O_CREAT|O_EXCL|O_WRONLY, S_IRUSR|S_IW= USR|S_IRGRP|S_IROTH); >> -+ if(out_fd < 0) { >> -+ if(errno =3D=3D EEXIST) { >> -+ fprintf(stderr, "File %s already exists\n", sieve_tmpname); >> -+ } else if (errno =3D=3D EACCES) { >> -+ fprintf(stderr,"No access to create file %s. Please check th= at you have the correct permissions\n", >> -+ sieve_tmpname); >> -+ } else { >> -+ fprintf(stderr,"Unable to create %s. Please check that you h= ave the correct permissions\n", >> -+ sieve_tmpname); >> -+ } >> -+=09 >> -+ fclose(in_stream); >> -+ return 1; >> -+ } >> -+ >> -+ if(is_script_parsable(in_stream,&err, &s) =3D=3D TIMSIEVE_FAIL) { >> -+ if(err && *err) { >> -+ fprintf(stderr, "Error while parsing script %s\n",err); >> -+ free(err); >> -+ } >> -+ else >> -+ fprintf(stderr,"Error while parsing script\n"); >> -+ unlink(sieve_tmpname); >> -+ fclose(in_stream); >> -+ close(out_fd); >> -+ return; >> -+ } >> -+ >> -+ >> -+ /* generate the bytecode */ >> -+ if(sieve_generate_bytecode(&bc,s) =3D=3D TIMSIEVE_FAIL) { >> -+ fprintf(stderr,"Error occured while compiling sieve script\n"); >> -+ /* removing the copied script and cleaning up memory */ >> -+ unlink(sieve_tmpname); >> -+ sieve_script_free(&s); >> -+ fclose(in_stream); >> -+ close(out_fd); >> -+ return; >> -+ } >> -+ if(sieve_emit_bytecode(out_fd,bc) =3D=3D TIMSIEVE_FAIL) { >> -+ fprintf(stderr, "Error occured while emitting sieve script\n"); >> -+ unlink(sieve_tmpname); >> -+ sieve_free_bytecode(&bc); >> -+ sieve_script_free(&s); >> -+ fclose(in_stream); >> -+ close(out_fd); >> -+ return; >> -+ } >> -+ >> -+ /* clean up the memory */ >> -+ sieve_free_bytecode(&bc); >> -+ sieve_script_free(&s); >> -+ >> -+ close(out_fd); >> -+ >> -+ if(rename(sieve_tmpname, compiled_source_script)) { >> -+ if(errno !=3D EEXIST) { >> -+ unlink(sieve_tmpname); >> -+ unlink(compiled_source_script); >> -+ return 1; >> -+ } >> -+ } >> -+ return 0; >> -+} >> -+ >> -+ >> -+/* to make larry's stupid functions happy :) */ >> -+static void foo(void) >> -+{ >> -+ fatal("stub function called", 0); >> -+} >> -+ >> -+extern sieve_vacation_t vacation2;/* =3D { >> -+ 0, / min response / >> -+ 0, / max response / >> -+ (sieve_callback *) &foo, / autorespond() / >> -+ (sieve_callback *) &foo / send_response() / >> -+}; */ >> -+ >> -+static int sieve_notify(void *ac __attribute__((unused)), >> -+ void *interp_context __attribute__((unused)), >> -+ void *script_context __attribute__((unused)), >> -+ void *message_context __attribute__((unused)), >> -+ const char **errmsg __attribute__((unused))) >> -+{ >> -+ fatal("stub function called", 0); >> -+ return SIEVE_FAIL; >> -+} >> -+ >> -+static int mysieve_error(int lineno, const char *msg, >> -+ void *i __attribute__((unused)), void *s) >> -+{ >> -+ char buf[1024]; >> -+ char **errstr =3D (char **) s; >> -+ >> -+ snprintf(buf, 80, "line %d: %s\r\n", lineno, msg); >> -+ *errstr =3D (char *) xrealloc(*errstr, strlen(*errstr) + strlen(buf)= + 30); >> -+ fprintf(stderr, "%s\n", buf); >> -+ strcat(*errstr, buf); >> -+ >> -+ return SIEVE_OK; >> -+} >> -+ >> -+/* end the boilerplate */ >> -+ >> -+/* returns TRUE or FALSE */ >> -+int is_script_parsable(FILE *stream, char **errstr, sieve_script_t **ret) >> -+{ >> -+ sieve_interp_t *i; >> -+ sieve_script_t *s; >> -+ int res; >> -+ >> -+ res =3D sieve_interp_alloc(&i, NULL); >> -+ if (res !=3D SIEVE_OK) { >> -+ fprintf(stderr, "sieve_interp_alloc() returns %d\n", res); >> -+ return TIMSIEVE_FAIL; >> -+ } >> -+ >> -+ res =3D sieve_register_redirect(i, (sieve_callback *) &foo); >> -+ if (res !=3D SIEVE_OK) { >> -+ fprintf(stderr, "sieve_register_redirect() returns %d\n", res); >> -+ return TIMSIEVE_FAIL; >> -+ } >> -+ res =3D sieve_register_discard(i, (sieve_callback *) &foo); >> -+ if (res !=3D SIEVE_OK) { >> -+ fprintf(stderr, "sieve_register_discard() returns %d\n", res); >> -+ return TIMSIEVE_FAIL; >> -+ } >> -+ res =3D sieve_register_reject(i, (sieve_callback *) &foo); >> -+ if (res !=3D SIEVE_OK) { >> -+ fprintf(stderr, "sieve_register_reject() returns %d\n", res); >> -+ return TIMSIEVE_FAIL; >> -+ } >> -+ res =3D sieve_register_fileinto(i, (sieve_callback *) &foo); >> -+ if (res !=3D SIEVE_OK) { >> -+ fprintf(stderr, "sieve_register_fileinto() returns %d\n", res); >> -+ return TIMSIEVE_FAIL; >> -+ } >> -+ res =3D sieve_register_keep(i, (sieve_callback *) &foo); >> -+ if (res !=3D SIEVE_OK) { >> -+ fprintf(stderr, "sieve_register_keep() returns %d\n", res); >> -+ return TIMSIEVE_FAIL; >> -+ } >> -+ >> -+ res =3D sieve_register_imapflags(i, NULL); >> -+ if (res !=3D SIEVE_OK) { >> -+ fprintf(stderr, "sieve_register_imapflags() returns %d\n", res); >> -+ return TIMSIEVE_FAIL; >> -+ } >> -+ >> -+ res =3D sieve_register_size(i, (sieve_get_size *) &foo); >> -+ if (res !=3D SIEVE_OK) { >> -+ fprintf(stderr, "sieve_register_size() returns %d\n", res); >> -+ return TIMSIEVE_FAIL; >> -+ } >> -+ >> -+ res =3D sieve_register_header(i, (sieve_get_header *) &foo); >> -+ if (res !=3D SIEVE_OK) { >> -+ fprintf(stderr, "sieve_register_header() returns %d\n", res); >> -+ return TIMSIEVE_FAIL; >> -+ } >> -+ >> -+ res =3D sieve_register_envelope(i, (sieve_get_envelope *) &foo); >> -+ if (res !=3D SIEVE_OK) { >> -+ fprintf(stderr, "sieve_register_envelope() returns %d\n", res); >> -+ return TIMSIEVE_FAIL; >> -+ } >> -+ >> -+ res =3D sieve_register_vacation(i, &vacation2); >> -+ if (res !=3D SIEVE_OK) { >> -+ fprintf(stderr, "sieve_register_vacation() returns %d\n", res); >> -+ return TIMSIEVE_FAIL; >> -+ } >> -+ >> -+ res =3D sieve_register_notify(i, &sieve_notify); >> -+ if (res !=3D SIEVE_OK) { >> -+ fprintf(stderr, "sieve_register_notify() returns %d\n", res); >> -+ return TIMSIEVE_FAIL; >> -+ } >> -+ >> -+ res =3D sieve_register_parse_error(i, &mysieve_error); >> -+ if (res !=3D SIEVE_OK) { >> -+ fprintf(stderr, "sieve_register_parse_error() returns %d\n", res= ); >> -+ return TIMSIEVE_FAIL; >> -+ } >> -+ >> -+ rewind(stream); >> -+ >> -+ *errstr =3D (char *) xmalloc(20 * sizeof(char)); >> -+ strcpy(*errstr, "script errors:\r\n"); >> -+ >> -+ res =3D sieve_script_parse(i, stream, errstr, &s); >> -+ >> -+ if (res =3D=3D SIEVE_OK) { >> -+ if(ret) { >> -+ *ret =3D s; >> -+ } else { >> -+ sieve_script_free(&s); >> -+ } >> -+ free(*errstr); >> -+ *errstr =3D NULL; >> -+ } >> -+ >> -+ /* free interpreter */ >> -+ sieve_interp_free(&i); >> -+ >> -+ return (res =3D=3D SIEVE_OK) ? TIMSIEVE_OK : TIMSIEVE_FAIL; >> -+} >> -+ >> -+ >> -+ >> -+ >> -+ >> -+ >> -diff -Naur cyrus-imapd-2.2.12/imap/imapd.c cyrus-imapd-2.2.12.autocreate2= /imap/imapd.c >> ---- cyrus-imapd-2.2.12/imap/imapd.c 2005-02-14 08:39:55.000000000 +0200 >> -+++ cyrus-imapd-2.2.12.autocreate2/imap/imapd.c 2005-10-19 14:48:57.96674= 9000 +0300 >> -@@ -158,6 +158,7 @@ >> - void motd_file(int fd); >> - void shut_down(int code); >> - void fatal(const char *s, int code); >> -+void autocreate_inbox(void); >> - >> - void cmdloop(void); >> - void cmd_login(char *tag, char *user); >> -@@ -1693,6 +1694,42 @@ >> - } >> - >> - /* >> -+ * Autocreate Inbox and subfolders upon login >> -+ */ >> -+void autocreate_inbox() >> -+{ >> -+ char inboxname[MAX_MAILBOX_NAME+1]; >> -+ int autocreatequota; >> -+ int r; >> -+ >> -+ /* >> -+ * Exlude admin's accounts >> -+ */ >> -+ if (imapd_userisadmin || imapd_userisproxyadmin) >> -+ return; >> -+ >> -+ /* >> -+ * Exclude anonymous >> -+ */ >> -+ if (!strcmp(imapd_userid, "anonymous")) >> -+ return; >> -+ >> -+ if ((autocreatequota =3D config_getint(IMAPOPT_AUTOCREATEQUOTA))) { >> -+ /* This is actyally not required >> -+ as long as the lenght of userid is ok */ >> -+ r =3D (*imapd_namespace.mboxname_tointernal) (&imapd_namespac= e, >> -+ "INBOX", imapd_userid, inboxname); >> -+ if (!r) >> -+ r =3D mboxlist_lookup(inboxname, NULL, NULL, NULL); >> -+ >> -+ if (r =3D=3D IMAP_MAILBOX_NONEXISTENT) >> -+ mboxlist_autocreateinbox(&imapd_namespace, imapd_userid, >> -+ imapd_authstate, inboxname, autocreatequota); >> -+ } >> -+} >> -+ >> -+ >> -+/* >> - * Perform a LOGIN command >> - */ >> - void cmd_login(char *tag, char *user) >> -@@ -1848,6 +1885,9 @@ >> - strcspn(imapd_userid, "@") : 0); >> - >> - freebuf(&passwdbuf); >> -+ >> -+ autocreate_inbox(); >> -+ >> - return; >> - } >> - >> -@@ -1993,6 +2033,8 @@ >> - config_virtdomains ? >> - strcspn(imapd_userid, "@") : 0); >> - >> -+ autocreate_inbox(); >> -+ >> - return; >> - } >> - >> -diff -Naur cyrus-imapd-2.2.12/imap/lmtpd.c cyrus-imapd-2.2.12.autocreate2= /imap/lmtpd.c >> ---- cyrus-imapd-2.2.12/imap/lmtpd.c 2004-12-17 18:32:15.000000000 +0200 >> -+++ cyrus-imapd-2.2.12.autocreate2/imap/lmtpd.c 2005-10-19 14:48:57.97114= 5000 +0300 >> -@@ -106,6 +106,8 @@ >> - static FILE *spoolfile(message_data_t *msgdata); >> - static void removespool(message_data_t *msgdata); >> - >> -+static int autocreate_inbox(char *rcpt_userid); >> -+ >> - /* current namespace */ >> - static struct namespace lmtpd_namespace; >> - >> -@@ -504,10 +506,55 @@ >> - exit(code); >> - } >> - >> -+/* >> -+ * Autocreate Inbox and subfolders upon login >> -+ */ >> -+int autocreate_inbox(char *rcpt_userid) >> -+{ >> -+ struct auth_state *authstate; >> -+ char inboxname[MAX_MAILBOX_NAME+1]; >> -+ int rcptisadmin; >> -+ int autocreatequota; >> -+ int r; >> -+ >> -+ if(rcpt_userid =3D=3D NULL) >> -+ return IMAP_MAILBOX_NONEXISTENT; >> -+ >> -+ /* >> -+ * Exclude anonymous >> -+ */ >> -+ if (!strcmp(rcpt_userid, "anonymous")) >> -+ return IMAP_MAILBOX_NONEXISTENT; >> -+ >> -+ /* >> -+ * Check for autocreatequota and createonpost >> -+ */ >> -+ if (!(autocreatequota =3D config_getint(IMAPOPT_AUTOCREATEQUOTA)) || >> -+ !(config_getswitch(IMAPOPT_CREATEONPOST))) >> -+ return IMAP_MAILBOX_NONEXISTENT; >> -+ >> -+ /* >> -+ * Exclude admin's accounts >> -+ */ >> -+ authstate =3D auth_newstate(rcpt_userid); >> -+ rcptisadmin =3D global_authisa(authstate, IMAPOPT_ADMINS); >> -+ if (rcptisadmin) >> -+ return IMAP_MAILBOX_NONEXISTENT; >> -+ >> -+ r =3D (*lmtpd_namespace.mboxname_tointernal) (&lmtpd_namespace, >> -+ "INBOX", rcpt_userid, inboxname); >> -+ if (!r) >> -+ r =3D mboxlist_autocreateinbox(&lmtpd_namespace, rcpt_userid, >> -+ authstate, inboxname, autocreatequota); >> -+ return r; >> -+} >> -+ >> -+ >> - static int verify_user(const char *user, const char *domain, const char = *mailbox, >> - long quotacheck, struct auth_state *authstate) >> - { >> - char namebuf[MAX_MAILBOX_NAME+1] =3D ""; >> -+ char *userinbox =3D NULL; >> - int r =3D 0; >> - >> - if ((!user && !mailbox) || >> -@@ -545,6 +592,28 @@ >> - */ >> - r =3D append_check(namebuf, MAILBOX_FORMAT_NORMAL, authstate, >> - !user ? ACL_POST : 0, quotacheck > 0 ? 0 : quotacheck); >> -+ if (r =3D=3D IMAP_MAILBOX_NONEXISTENT && user) { >> -+ if(domain) { >> -+ int k; >> -+ userinbox =3D (char *)xmalloc((strlen(user)+strlen(domain)+2)*sizeof(c= har)); >> -+ k =3D strlcpy(userinbox, user, strlen(user)+1); >> -+ *(userinbox + k) =3D '@'; >> -+ strlcpy(userinbox+k+1, domain, strlen(domain)+1); >> -+ } >> -+ else userinbox =3D user; >> -+ /* >> -+ * Try to create automatically the mailbox, if >> -+ * autocreate inbox option is enabled. >> -+ */ >> -+ r =3D autocreate_inbox(userinbox); >> -+=09 >> -+ if(userinbox !=3D user) >> -+ free(userinbox); >> -+ if (!r) >> -+ r =3D append_check(namebuf, MAILBOX_FORMAT_NORMAL, auths= tate, >> -+ 0, quotacheck > 0 ? 0 : quotacheck); >> -+ } >> -+ >> - } >> - >> - if (r) syslog(LOG_DEBUG, "verify_user(%s) failed: %s", namebuf, >> -diff -Naur cyrus-imapd-2.2.12/imap/mboxlist.c cyrus-imapd-2.2.12.autocrea= te2/imap/mboxlist.c >> ---- cyrus-imapd-2.2.12/imap/mboxlist.c 2004-07-26 21:08:03.000000000 +0300 >> -+++ cyrus-imapd-2.2.12.autocreate2/imap/mboxlist.c 2005-10-19 14:49:25.97= 2032000 +0300 >> -@@ -81,6 +81,12 @@ >> - #include "mboxlist.h" >> - #include "quota.h" >> - >> -+#ifdef USE_SIEVE >> -+extern int autoadd_sieve(char *userid, >> -+ const char *source_script); >> -+#endif >> -+ >> -+ >> - #define DB config_mboxlist_db >> - #define SUBDB config_subscription_db >> - >> -@@ -98,11 +104,29 @@ >> - static int mboxlist_changequota(const char *name, int matchlen, int mayc= reate, >> - void *rock); >> - >> -+static int mboxlist_autochangesub(char *name, int matchlen, int maycreat= e, >> -+ void *rock); >> -+ >> -+static int mboxlist_autosubscribe_sharedfolders(struct namespace *namesp= ace, >> -+ char *userid, char *auth_userid, >> -+ struct auth_state *auth_state); >> -+ >> - struct change_rock { >> - struct quota *quota; >> - struct txn **tid; >> - }; >> - >> -+/* >> -+ * Struct needed to be passed as void *rock to >> -+ * mboxlist_autochangesub(); >> -+ */ >> -+struct changesub_rock_st { >> -+ char *userid; >> -+ char *auth_userid; >> -+ struct auth_state *auth_state; >> -+}; >> -+ >> -+ >> - #define FNAME_SUBSSUFFIX ".sub" >> - >> - /* >> -@@ -3124,3 +3148,338 @@ >> - >> - return DB->abort(mbdb, tid); >> - } >> -+ >> -+/* >> -+ * Automatically subscribe user to *ALL* shared folders, >> -+ * one has permissions to be subscribed to. >> -+ * INBOX subfolders are excluded. >> -+ */ >> -+static int mboxlist_autochangesub(char *name, int matchlen, int maycreat= e, >> -+ void *rock) { >> -+ >> -+ struct changesub_rock_st *changesub_rock =3D (struct changesub_rock_st= *) rock; >> -+ char *userid =3D changesub_rock->userid; >> -+ char *auth_userid =3D changesub_rock->auth_userid; >> -+ struct auth_state *auth_state =3D changesub_rock->auth_state; >> -+ int r; >> -+ >> -+ >> -+ if((strlen(name) =3D=3D 5 && !strncmp(name, "INBOX", 5)) || /* Exclude= INBOX */ >> -+ (strlen(name) > 5 && !strncmp(name, "INBOX.",6)) || /* Exclude INB= OX subfolders */ >> -+ (strlen(name) > 4 && !strncmp(name, "user.", 5))) /* Exclude oth= er users' folders */ >> -+ return 0; >> -+ >> -+ >> -+ r =3D mboxlist_changesub(name, userid, auth_state, 1, 0); >> -+ >> -+ if (r) { >> -+ syslog(LOG_WARNING, >> -+ "autosubscribe: User %s to folder %s, subscription failed: = %s", >> -+ auth_userid, name, error_message(r)); >> -+ } else { >> -+ syslog(LOG_NOTICE, >> -+ "autosubscribe: User %s to folder %s, subscription succeede= d", >> -+ auth_userid, name); >> -+ } >> -+ >> -+ return 0; >> -+} >> -+ >> -+#define SEP '|' >> -+ >> -+/* >> -+ * Automatically subscribe user to a shared folder. >> -+ * Subscription is done successfully, if the shared >> -+ * folder exists and the user has the necessary >> -+ * permissions. >> -+ */ >> -+static int mboxlist_autosubscribe_sharedfolders(struct namespace *namesp= ace, >> -+ char *userid, char *auth_userid, >> -+ struct auth_state *auth_state) { >> -+ >> -+ const char *sub ; >> -+ char *p, *q, *next_sub; >> -+ char folder[MAX_MAILBOX_NAME+1], name[MAX_MAILBOX_NAME+1], mailboxna= me[MAX_MAILBOX_NAME+1]; >> -+ int len; >> -+ int r =3D 0; >> -+ int subscribe_all_sharedfolders =3D 0; >> -+ >> -+ subscribe_all_sharedfolders =3D config_getswitch(IMAPOPT_AUTOSUBSCRI= BE_ALL_SHAREDFOLDERS); >> -+ >> -+ /* >> -+ * If subscribeallsharedfolders is set to yes in imapd.conf, then >> -+ * subscribe user to every shared folder one has the apropriate >> -+ * permissions. >> -+ */ >> -+ if(subscribe_all_sharedfolders) { >> -+ char pattern[MAX_MAILBOX_PATH+1]; >> -+ struct changesub_rock_st changesub_rock; >> -+ >> -+ strcpy(pattern, "*"); >> -+ changesub_rock.userid =3D userid; >> -+ changesub_rock.auth_userid =3D auth_userid; >> -+ changesub_rock.auth_state =3D auth_state; >> -+ >> -+ r =3D mboxlist_findall(namespace, pattern, 0, userid, >> -+ auth_state, mboxlist_autochangesub, &changes= ub_rock); >> -+ >> -+ return r; >> -+ } >> -+ >> -+ if ((sub=3Dconfig_getstring(IMAPOPT_AUTOSUBSCRIBESHAREDFOLDERS)) =3D= =3D NULL) >> -+ return r; >> -+ >> -+ next_sub =3D (char *) sub; >> -+ while (*next_sub) { >> -+ for (p =3D next_sub ; isspace((int) *p) || *p =3D=3D SEP ; p++); >> -+ for (next_sub =3D p ; *next_sub && *next_sub !=3D SEP ; next_sub= ++); >> -+ for (q =3D next_sub ; q > p && (isspace((int) *q) || *q =3D=3D S= EP || !*q) ; q--); >> -+ if (!*p ) continue; >> -+ >> -+ len =3D q - p + 1; >> -+ /* Check for folder length */ >> -+ if (len > sizeof(folder)-1) >> -+ continue; >> -+ >> -+ if (!r) { >> -+ strncpy(folder, p, len); >> -+ folder[len] =3D '\0'; >> -+ >> -+ strlcpy(name, namespace->prefix[NAMESPACE_SHARED], sizeof= (name)); >> -+ len =3D strlcat(name, folder, sizeof(name)); >> -+ >> -+ r =3D (namespace->mboxname_tointernal) (namespace, name, = userid, >> -+ mailbo= xname); >> -+ } >> -+ >> -+ if (!r) >> -+ r =3D mboxlist_changesub(mailboxname, userid, auth_state,= 1, 0); >> -+ >> -+ if (!r) { >> -+ syslog(LOG_NOTICE, "autosubscribe: User %s to %s succeed= ed", >> -+ userid, folder); >> -+ } else { >> -+ syslog(LOG_WARNING, "autosubscribe: User %s to %s failed= : %s", >> -+ userid, folder, error_message(r)); >> -+ r =3D 0; >> -+ } >> -+ } >> -+ >> -+ return r; >> -+} >> -+ >> -+ >> -+ >> -+int mboxlist_autocreateinbox(struct namespace *namespace, >> -+ char *userid, >> -+ struct auth_state *auth_state, >> -+ char *mailboxname, int autocreatequota) { >> -+ char name [MAX_MAILBOX_NAME+1]; >> -+ char folder [MAX_MAILBOX_NAME+1]; >> -+ char *auth_userid =3D NULL; >> -+ char *partition =3D NULL; >> -+ const char *crt; >> -+ const char *sub; >> -+ char *p, *q, *next_crt, *next_sub; >> -+ int len; >> -+ int r =3D 0; >> -+ int numcrt =3D 0; >> -+ int numsub =3D 0; >> -+#ifdef USE_SIEVE >> -+ const char *source_script; >> -+#endif >> -+ >> -+ /* >> -+ * While this is not needed for admins >> -+ * and imap_admins accounts, it would be >> -+ * better to separate *all* admins and >> -+ * proxyservers from normal accounts >> -+ * (accounts that have mailboxes). >> -+ * UOA Specific note(1): Even if we do not >> -+ * exclude these servers-classes here, >> -+ * UOA specific code, will neither return >> -+ * role, nor create INBOX, because none of these >> -+ * administrative accounts belong to the >> -+ * mailRecipient objectclass, or have imapPartition. >> -+ * UOA Specific note(2): Another good reason for doing >> -+ * this, is to prevent the code, from getting into >> -+ * cyrus_ldap.c because of the continues MSA logins to LMTPd. >> -+ */ >> -+ >> -+ /* >> -+ * admins and the coresponding imap >> -+ * service, had already been excluded. >> -+ */ >> -+ >> -+ /* >> -+ * Do we really need group membership >> -+ * for admins or service_admins? >> -+ */ >> -+ if (global_authisa(auth_state, IMAPOPT_ADMINS)) return 0; >> -+ if (global_authisa(auth_state, IMAPOPT_ADMINS)) return 0; >> -+ >> -+ /* >> -+ * Do we really need group membership >> -+ * for proxyservers? >> -+ */ >> -+ if (global_authisa(auth_state, IMAPOPT_PROXYSERVERS)) return 0; >> -+ if (global_authisa(auth_state, IMAPOPT_PROXYSERVERS)) return 0; >> -+ >> -+ auth_userid =3D auth_canonuser(auth_state); >> -+ >> -+ if (auth_userid =3D=3D NULL) { >> -+ /* >> -+ * Couldn't get cannon userid >> -+ */ >> -+ syslog(LOG_ERR, >> -+ "Could not get cannon userid for user %s", userid); >> -+ return IMAP_PARTITION_UNKNOWN; >> -+ } >> -+ >> -+#if 0 >> -+ /* >> -+ * Get Partition info or return. >> -+ * (Here you should propably use >> -+ * you own "get_partition(char *userid)" >> -+ * function. Otherwise all new INBOXes will be >> -+ * created into whatever partition has been declared >> -+ * as default in your imapd.conf) >> -+ */ >> -+ >> -+ partition =3D get_partition(userid); >> -+ >> -+ if (partition =3D=3D NULL) { >> -+ /* >> -+ * Couldn't get partition info >> -+ */ >> -+ syslog(LOG_ERR, >> -+ "Could not get imapPartition info for user %s", useri= d); >> -+ return IMAP_PARTITION_UNKNOWN; >> -+ } >> -+#endif >> -+ >> -+ r =3D mboxlist_createmailbox(mailboxname, MAILBOX_FORMAT_NORMAL, NUL= L, >> -+ 1, userid, auth_state, 0, 0, 0); >> -+ >> -+ if (!r && autocreatequota > 0) >> -+ r =3D mboxlist_setquota(mailboxname, autocreatequota, 0); >> -+ >> -+ if (!r) >> -+ r =3D mboxlist_changesub(mailboxname, userid, >> -+ auth_state, 1, 1); >> -+ >> -+ if (!r) { >> -+ syslog(LOG_NOTICE, "autocreateinbox: User %s, INBOX was successfu= lly created in partition %s", >> -+ auth_userid, partition =3D=3D NULL ? "default" : partitio= n); >> -+ } else { >> -+ syslog(LOG_ERR, "autocreateinbox: User %s, INBOX failed. %s", >> -+ auth_userid, error_message(r)); >> -+ } >> -+ >> -+ >> -+#if 0 >> -+ /* Allocated from get_partition, and not needed any more */ >> -+ free_partition(partition); >> -+#endif >> -+ >> -+ if (r) return r; >> -+ >> -+ >> -+ /* INBOX's subfolders */ >> -+ if ((crt=3Dconfig_getstring(IMAPOPT_AUTOCREATEINBOXFOLDERS))) >> -+ sub=3Dconfig_getstring(IMAPOPT_AUTOSUBSCRIBEINBOXFOLDERS); >> -+ >> -+ /* Roll through crt */ >> -+ next_crt =3D (char *) crt; >> -+ while (next_crt!=3DNULL && *next_crt) { >> -+ for (p =3D next_crt ; isspace((int) *p) || *p =3D=3D SEP ; p++= ); >> -+ for (next_crt =3D p ; *next_crt && *next_crt !=3D SEP ; next_c= rt++); >> -+ for (q =3D next_crt ; q > p && (isspace((int) *q) || *q =3D=3D= SEP || !*q); q--); >> -+ >> -+ if (!*p) continue; >> -+ >> -+ len =3D q - p + 1; >> -+ >> -+ /* First time we check for length */ >> -+ if (len > sizeof(folder) - 5) >> -+ r =3D IMAP_MAILBOX_BADNAME; >> -+ >> -+ if (!r) { >> -+ strncpy(folder, p, len); >> -+ folder[len] =3D '\0'; >> -+ >> -+ strlcpy(name, namespace->prefix[NAMESPACE_INBOX], size= of(name)); >> -+ len =3D strlcat(name, folder, sizeof(name)); >> -+ } >> -+ >> -+ if (!r) >> -+ r =3D (namespace->mboxname_tointernal) (namespace, name, use= rid, >> -+ mailboxname); >> -+ if (!r) >> -+ r =3D mboxlist_createmailbox(mailboxname, MAILBOX_FORMAT_NO= RMAL, NULL, >> -+ 1, userid, auth_state, 0, 0,= 0); >> -+ >> -+ if (!r) { >> -+ numcrt++; >> -+ syslog(LOG_NOTICE, "autocreateinbox: User %s, subfolder %s c= reation succeeded.", >> -+ auth_userid, name); >> -+ } else { >> -+ syslog(LOG_WARNING, "autocreateinbox: User %s, subfolder %s= creation failed. %s", >> -+ auth_userid, name, error_message(r)); >> -+ r=3D0; >> -+ continue; >> -+ } >> -+ >> -+ /* Roll through sub */ >> -+ next_sub =3D (char *) sub; >> -+ while (next_sub!=3DNULL && *next_sub) { >> -+ for (p =3D next_sub ; isspace((int) *p) || *p =3D=3D SEP= ; p++); >> -+ for (next_sub =3D p ; *next_sub && *next_sub !=3D SEP ; = next_sub++); >> -+ for (q =3D next_sub ; q > p && (isspace((int) *q) || *q = =3D=3D SEP || !*q) ; q--); >> -+ if (!*p ) continue; >> -+ >> -+ len =3D q - p + 1; >> -+ >> -+ if (len !=3D strlen(folder) || strncmp(folder, p, len)) >> -+ continue; >> -+ >> -+ r =3D mboxlist_changesub(mailboxname, userid, auth_state= , 1, 1); >> -+ >> -+ if (!r) { >> -+ numsub++; >> -+ syslog(LOG_NOTICE,"autocreateinbox: User %s, subscrip= tion to %s succeeded", >> -+ auth_userid, name); >> -+ } else >> -+ syslog(LOG_WARNING, "autocreateinbox: User %s, subsc= ription to %s failed. %s", >> -+ auth_userid, name, error_message(r)); >> -+ >> -+ break; >> -+ } >> -+ } >> -+ >> -+ if (crt!=3DNULL && *crt) >> -+ syslog(LOG_INFO, "User %s, Inbox subfolders, created %d, subscrib= ed %d", >> -+ auth_userid, numcrt, numsub); >> -+ >> -+ /* >> -+ * Check if shared folders are available for subscription. >> -+ */ >> -+ mboxlist_autosubscribe_sharedfolders(namespace, userid, auth_userid,= auth_state); >> -+ >> -+#ifdef USE_SIEVE >> -+ /* >> -+ * Here the autocreate sieve script feature is iniated from. >> -+ */ >> -+ source_script =3D config_getstring(IMAPOPT_AUTOCREATE_SIEVE_SCRIPT); >> -+ >> -+ if (source_script) { >> -+ if (!autoadd_sieve(userid, source_script)) >> -+ syslog(LOG_NOTICE, "autocreate_sieve: User %s, default sieve= script creation succeeded", auth_userid); >> -+ else >> -+ syslog(LOG_WARNING, "autocreate_sieve: User %s, default siev= e script creation failed", auth_userid); >> -+ } >> -+#endif >> -+ >> -+ return r; >> -+} >> -+ >> -diff -Naur cyrus-imapd-2.2.12/imap/mboxlist.h cyrus-imapd-2.2.12.autocrea= te2/imap/mboxlist.h >> ---- cyrus-imapd-2.2.12/imap/mboxlist.h 2004-03-17 20:07:49.000000000 +0200 >> -+++ cyrus-imapd-2.2.12.autocreate2/imap/mboxlist.h 2005-10-19 14:48:58.02= 7033000 +0300 >> -@@ -197,4 +197,10 @@ >> - int mboxlist_commit(struct txn *tid); >> - int mboxlist_abort(struct txn *tid); >> - >> -+int mboxlist_autocreateinbox(struct namespace *namespace, >> -+ char *userid, >> -+ struct auth_state *auth_state, >> -+ char *mailboxname, int autocreatequota); >> -+ >> -+ >> - #endif >> -diff -Naur cyrus-imapd-2.2.12/imap/pop3d.c cyrus-imapd-2.2.12.autocreate2= /imap/pop3d.c >> ---- cyrus-imapd-2.2.12/imap/pop3d.c 2005-01-04 17:06:13.000000000 +0200 >> -+++ cyrus-imapd-2.2.12.autocreate2/imap/pop3d.c 2005-10-19 14:48:58.03333= 5000 +0300 >> -@@ -152,6 +152,8 @@ >> - static char popd_apop_chal[45 + MAXHOSTNAMELEN + 1]; /* */ >> - static void cmd_apop(char *response); >> - >> -+static int autocreate_inbox(char *inboxname, char *userid); >> -+ >> - static void cmd_auth(char *arg); >> - static void cmd_capa(void); >> - static void cmd_pass(char *pass); >> -@@ -1084,6 +1086,7 @@ >> - popd_userid =3D xstrdup(p); >> - prot_printf(popd_out, "+OK Name is a valid mailbox\r\n"); >> - } >> -+ >> - } >> - >> - void cmd_pass(char *pass) >> -@@ -1328,6 +1331,46 @@ >> - } >> - >> - /* >> -+ * Autocreate Inbox and subfolders upon login >> -+ */ >> -+int autocreate_inbox(char *inboxname, char *auth_userid) >> -+{ >> -+ struct auth_state *authstate; >> -+ int userisadmin; >> -+ int autocreatequota; >> -+ int r; >> -+ >> -+ if(inboxname =3D=3D NULL || auth_userid =3D=3D NULL) >> -+ return IMAP_MAILBOX_NONEXISTENT; >> -+ >> -+ /* >> -+ * Exclude anonymous >> -+ */ >> -+ if (!strcmp(popd_userid, "anonymous")) >> -+ return IMAP_MAILBOX_NONEXISTENT; >> -+ >> -+ /* >> -+ * Check for autocreatequota >> -+ */ >> -+ if (!(autocreatequota =3D config_getint(IMAPOPT_AUTOCREATEQUOTA))) >> -+ return IMAP_MAILBOX_NONEXISTENT; >> -+ >> -+ /* >> -+ * Exclude admin's accounts >> -+ */ >> -+ >> -+ authstate =3D auth_newstate(popd_userid); >> -+ userisadmin =3D global_authisa(authstate, IMAPOPT_ADMINS); >> -+ if (userisadmin) >> -+ return IMAP_MAILBOX_NONEXISTENT; >> -+ >> -+ r =3D mboxlist_autocreateinbox(&popd_namespace, auth_userid, >> -+ authstate, inboxname, autocreatequota); >> -+ return r; >> -+} >> -+ >> -+ >> -+/* >> - * Complete the login process by opening and locking the user's inbox >> - */ >> - int openinbox(void) >> -@@ -1349,6 +1392,10 @@ >> - userid, inboxname); >> - >> - if (!r) r =3D mboxlist_detail(inboxname, &type, NULL, &server, &acl,= NULL); >> -+ /* Try once again after autocreate_inbox */ >> -+ if (r =3D=3D IMAP_MAILBOX_NONEXISTENT && !(r =3D autocreate_inbox(in= boxname, userid))) >> -+ r =3D mboxlist_detail(inboxname, &type, NULL, &server, &acl, NUL= L); >> -+ >> - if (!r && (config_popuseacl =3D config_getswitch(IMAPOPT_POPUSEACL))= && >> - (!acl || >> - !((myrights =3D cyrus_acl_myrights(popd_authstate, acl)) & ACL_READ)))= { >> -diff -Naur cyrus-imapd-2.2.12/lib/auth.h cyrus-imapd-2.2.12.autocreate2/l= ib/auth.h >> ---- cyrus-imapd-2.2.12/lib/auth.h 2003-10-22 21:50:12.000000000 +0300 >> -+++ cyrus-imapd-2.2.12.autocreate2/lib/auth.h 2005-10-19 14:48:58.0353240= 00 +0300 >> -@@ -60,4 +60,6 @@ >> - extern struct auth_state *auth_newstate(const char *identifier); >> - extern void auth_freestate(struct auth_state *auth_state); >> - >> -+extern char *auth_canonuser(struct auth_state *auth_state); >> -+ >> - #endif /* INCLUDED_AUTH_H */ >> -diff -Naur cyrus-imapd-2.2.12/lib/auth_krb.c cyrus-imapd-2.2.12.autocreat= e2/lib/auth_krb.c >> ---- cyrus-imapd-2.2.12/lib/auth_krb.c 2003-11-11 05:26:00.000000000 +0200 >> -+++ cyrus-imapd-2.2.12.autocreate2/lib/auth_krb.c 2005-10-19 14:48:58.038= 180000 +0300 >> -@@ -338,3 +338,11 @@ >> - free((char *)auth_state); >> - } >> - >> -+char * >> -+auth_canonuser(struct auth_state *auth_state) >> -+{ >> -+ if (auth_state) >> -+ return auth_state->userid; >> -+ return NULL; >> -+} >> -+ >> -diff -Naur cyrus-imapd-2.2.12/lib/auth_krb5.c cyrus-imapd-2.2.12.autocrea= te2/lib/auth_krb5.c >> ---- cyrus-imapd-2.2.12/lib/auth_krb5.c 2004-01-16 17:28:58.000000000 +0200 >> -+++ cyrus-imapd-2.2.12.autocreate2/lib/auth_krb5.c 2005-10-19 14:48:58.04= 0108000 +0300 >> -@@ -193,4 +193,11 @@ >> - free(auth_state); >> - } >> - >> -+char * >> -+auth_canonuser(struct auth_state *auth_state) >> -+{ >> -+ if (auth_state) >> -+ return auth_state->userid; >> -+ return NULL; >> -+} >> - >> -diff -Naur cyrus-imapd-2.2.12/lib/auth_pts.c cyrus-imapd-2.2.12.autocreat= e2/lib/auth_pts.c >> ---- cyrus-imapd-2.2.12/lib/auth_pts.c 2004-02-25 01:11:37.000000000 +0200 >> -+++ cyrus-imapd-2.2.12.autocreate2/lib/auth_pts.c 2005-10-19 14:48:58.042= 343000 +0300 >> -@@ -349,3 +349,11 @@ >> - { >> - free(auth_state); >> - } >> -+ >> -+char *auth_canonuser(struct auth_state *auth_state) >> -+{ >> -+ if (auth_state) >> -+ return auth_state->userid.id; >> -+ return NULL; >> -+} >> -+ >> -diff -Naur cyrus-imapd-2.2.12/lib/auth_unix.c cyrus-imapd-2.2.12.autocrea= te2/lib/auth_unix.c >> ---- cyrus-imapd-2.2.12/lib/auth_unix.c 2004-09-14 01:49:29.000000000 +0300 >> -+++ cyrus-imapd-2.2.12.autocreate2/lib/auth_unix.c 2005-10-19 14:48:58.04= 4431000 +0300 >> -@@ -267,4 +267,11 @@ >> - free((char *)auth_state); >> - } >> - >> -+char *auth_canonuser(struct auth_state *auth_state) >> -+{ >> -+ if (auth_state) >> -+ return auth_state->userid; >> -+ >> -+ return NULL; >> -+} >> - >> -diff -Naur cyrus-imapd-2.2.12/lib/imapoptions cyrus-imapd-2.2.12.autocrea= te2/lib/imapoptions >> ---- cyrus-imapd-2.2.12/lib/imapoptions 2004-07-21 22:07:45.000000000 +0300 >> -+++ cyrus-imapd-2.2.12.autocreate2/lib/imapoptions 2005-10-19 14:48:58.04= 8748000 +0300 >> -@@ -169,6 +169,51 @@ >> - /* Number of seconds to wait before returning a timeout failure when >> - performing a client connection (e.g. in a murder enviornment) */ >> - >> -+{ "createonpost", 0, SWITCH } >> -+/* If yes, when lmtpd receives an incoming mail for an INBOX that does n= ot exist, >> -+ then the INBOX is automatically created by lmtpd. */ >> -+ >> -+{ "autocreateinboxfolders", NULL, STRING } >> -+/* If a user does not have an INBOX created then the INBOX as well as so= me INBOX subfolders are >> -+ created under two conditions. >> -+ 1. The user logins via the IMAP or the POP3 protocol. (autocreatequ= ota option must have a nonzero value) >> -+ 2. A message arrives for the user through the LMTPD protocol.(creat= eonpost option must yes) >> -+ autocreateinboxfolders is a list of INBOX's subfolders separated by a= "|", that are automatically created by the server >> -+ under the previous two situations. */ >> -+ >> -+{ "autosubscribeinboxfolders", NULL, STRING } >> -+/* A list of folder names, separated by "|" that the users get automatic= ally subscribed to, when their INBOX >> -+ is created. >> -+ These folder names must have been included in the autocreateinboxfolde= rs option of the imapd.conf. */ >> -+ >> -+{ "autosubscribesharedfolders", NULL, STRING } >> -+/* A list of shared folders (bulletin boards), separated by "|" that the= users get >> -+ automatically subscribed to, after their INBOX >> -+ is created. The shared folder must have been created and the user mus= t have the >> -+ required permissions to get subscribed to the it. Otherwise the subsc= ription fails. */ >> -+ >> -+{ "autosubscribe_all_sharedfolders", 0, SWITCH } >> -+/* If set to yes then the user is automatically subscribed to all shared= folders, one has permission >> -+ to subscribe to. */ >> -+ >> -+{ "autocreate_sieve_script", NULL, STRING } >> -+/* The full path of a file that contains a sieve script. This script aut= omatically becomes a >> -+ user's initial default sieve filter script. When this option is not d= efined, no default >> -+ sieve filter is created. The file must be readable by the cyrus daemo= n. */ >> -+ >> -+{ "autocreate_sieve_compiledscript", NULL, STRING } >> -+/* The full path of a file that contains a compiled in bytecode sieve sc= ript. This script >> -+ automatically becomes a user's initial default sieve filter script. >> -+ If this option is not specified, or the filename doesn't exist then t= he script defined >> -+ by autocreate_sieve_script is compiled on the fly and installed as th= e user's default >> -+ sieve script */ >> -+ >> -+{ "generate_compiled_sieve_script", 0, SWITCH } >> -+/* If set to yes and no compiled sieve script file exists then the sieve= script that is >> -+ compiled on the fly will be saved in the file name that autocreate_si= eve_compiledscript >> -+ option points. In order a compiled script to be generated, autocreate= _sieve_script and >> -+ autocreate_sieve_compiledscript must have valid values */ >> -+ >> - { "configdirectory", NULL, STRING } >> - /* The pathname of the IMAP configuration directory. This field is >> - required. */ >> -diff -Naur cyrus-imapd-2.2.12/notifyd/Makefile.in cyrus-imapd-2.2.12.auto= create2/notifyd/Makefile.in >> ---- cyrus-imapd-2.2.12/notifyd/Makefile.in 2004-05-28 21:03:06.000000000 = +0300 >> -+++ cyrus-imapd-2.2.12.autocreate2/notifyd/Makefile.in 2005-10-19 14:48:5= 8.050575000 +0300 >> -@@ -69,10 +69,11 @@ >> - SERVICE=3D../master/service.o >> - >> - IMAP_LIBS =3D @IMAP_LIBS@ @LIB_RT@ >> -+SIEVE_LIBS =3D @SIEVE_LIBS@ >> - IMAP_COM_ERR_LIBS =3D @IMAP_COM_ERR_LIBS@ >> - LIB_WRAP =3D @LIB_WRAP@ >> - LIBS =3D @ZEPHYR_LIBS@ @LIBS@ $(IMAP_COM_ERR_LIBS) >> --DEPLIBS=3D../imap/mutex_fake.o ../imap/libimap.a ../lib/libcyrus.a ../li= b/libcyrus_min.a @DEPLIBS@ >> -+DEPLIBS=3D../imap/mutex_fake.o ../imap/libimap.a $(SIEVE_LIBS) ../lib/li= bcyrus.a ../lib/libcyrus_min.a @DEPLIBS@ >> - >> - PURIFY=3D/usr/local/bin/purify >> - PUREOPT=3D-best-effort >> -diff -Naur cyrus-imapd-2.2.12/notifyd/notifyd.c cyrus-imapd-2.2.12.autocr= eate2/notifyd/notifyd.c >> ---- cyrus-imapd-2.2.12/notifyd/notifyd.c 2004-12-17 18:32:25.000000000 +0= 200 >> -+++ cyrus-imapd-2.2.12.autocreate2/notifyd/notifyd.c 2005-10-19 14:48:58.= 052220000 +0300 >> -@@ -97,7 +97,7 @@ >> - >> - #define NOTIFY_MAXSIZE 8192 >> - >> --int do_notify() >> -+static int do_notify() >> - { >> - struct sockaddr_un sun_data; >> - socklen_t sunlen =3D sizeof(sun_data); >> -diff -Naur cyrus-imapd-2.2.12/ptclient/Makefile.in cyrus-imapd-2.2.12.aut= ocreate2/ptclient/Makefile.in >> ---- cyrus-imapd-2.2.12/ptclient/Makefile.in 2004-05-28 21:03:08.000000000= +0300 >> -+++ cyrus-imapd-2.2.12.autocreate2/ptclient/Makefile.in 2005-10-19 14:48:= 58.053762000 +0300 >> -@@ -57,10 +57,11 @@ >> - AFS_LDFLAGS =3D @AFS_LDFLAGS@ @COM_ERR_LDFLAGS@ >> - AFS_LIBS =3D @AFS_LIBS@ >> - IMAP_LIBS =3D @IMAP_LIBS@ @LIB_RT@ >> -+SIEVE_LIBS =3D @SIEVE_LIBS@ >> - LIBS =3D $(IMAP_LIBS) @COM_ERR_LIBS@ >> - LIB_SASL =3D @LIB_SASL@ >> - LIB_WRAP =3D @LIB_WRAP@ >> --DEPLIBS =3D ../imap/libimap.a ../lib/libcyrus.a ../lib/libcyrus_min.a @D= EPLIBS@ >> -+DEPLIBS =3D ../imap/libimap.a $(SIEVE_LIBS) ../lib/libcyrus.a ../lib/lib= cyrus_min.a @DEPLIBS@ >> - UTIL_LIBS =3D ../imap/mutex_fake.o ../imap/cli_fatal.o >> - >> - LDAP_LIBS=3D@LDAP_LIBS@ >> diff --git a/src/patches/cyrus-imapd-2.2.12-gcc4.patch b/src/patches/cyrus= -imapd-2.2.12-gcc4.patch >> deleted file mode 100644 >> index 3363beaba..000000000 >> --- a/src/patches/cyrus-imapd-2.2.12-gcc4.patch >> +++ /dev/null >> @@ -1,48 +0,0 @@ >> ---- tools/config2header 2005/04/13 08:56:16 1.1 >> -+++ tools/config2header 2005/04/13 08:57:48 >> -@@ -214,7 +214,6 @@ >> - print HFILE <> - IMAPOPT_LAST >> - }; >> --extern struct imapopt_s imapopts[]; >> - >> - enum enum_value { >> - IMAP_ENUM_ZERO =3D 0, >> -@@ -260,6 +259,9 @@ >> - >> - print HFILE <> - }; >> -+ >> -+extern struct imapopt_s imapopts[]; >> -+ >> - #endif /* INCLUDED_IMAPOPTIONS_H */ >> - EOF >> - ; >> ---- imap/fud.c 2005/04/13 09:19:05 1.1 >> -+++ imap/fud.c 2005/04/13 09:20:02 >> -@@ -202,6 +202,7 @@ >> - r =3D begin_handling(); >> - >> - shut_down(r); >> -+ return 0; >> - } >> - >> - static void cyrus_timeout(int signo __attribute__((unused))) >> ---- imap/smmapd.c 2005/04/13 09:19:12 1.1 >> -+++ imap/smmapd.c 2005/04/13 09:19:50 >> -@@ -199,6 +199,7 @@ >> - r =3D begin_handling(); >> - >> - shut_down(r); >> -+ return 0; >> - } >> - >> - int verify_user(const char *key, long quotacheck, >> ---- notifyd/notifyd.c 2005/04/13 09:19:23 1.1 >> -+++ notifyd/notifyd.c 2005/04/13 09:19:39 >> -@@ -266,4 +266,5 @@ >> - r =3D do_notify(); >> - >> - shut_down(r); >> -+ return 0; >> - } --===============6388615284035769450==--