From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tom Rymes To: development@lists.ipfire.org Subject: Re: [PATCH] cyrus-imapd: Drop package Date: Wed, 05 Feb 2020 10:27:49 -0500 Message-ID: <96f04a24-30f5-b335-d472-45cd9001e329@rymes.com> In-Reply-To: <20200205114417.15888-1-michael.tremer@ipfire.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0249875616283566179==" List-Id: --===============0249875616283566179== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Would it be possible to push a version update (even if there are no=20 changes) and then monitor if there are any downloads? That way we could=20 know if there are any users and how many (or at least out of those users=20 that actually update from time to time). Tom 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. >=20 > 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 >=20 > diff --git a/config/backup/includes/cyrus-imapd b/config/backup/includes/cy= rus-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/packa= ges/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/Admin= .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/Shell= .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/mana= gesieve.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/Anno= tator > -#usr/lib/perl5/site_perl/5.30.0/MACHINE-linux-thread-multi/auto/Cyrus/Anno= tator/Daemon > -#usr/lib/perl5/site_perl/5.30.0/MACHINE-linux-thread-multi/auto/Cyrus/Anno= tator/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/IMAP= /.packlist > -#usr/lib/perl5/site_perl/5.30.0/MACHINE-linux-thread-multi/auto/Cyrus/IMAP= /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/SIEVE > -#usr/lib/perl5/site_perl/5.30.0/MACHINE-linux-thread-multi/auto/Cyrus/SIEV= E/managesieve > -#usr/lib/perl5/site_perl/5.30.0/MACHINE-linux-thread-multi/auto/Cyrus/SIEV= E/managesieve/.packlist > -#usr/lib/perl5/site_perl/5.30.0/MACHINE-linux-thread-multi/auto/Cyrus/SIEV= E/managesieve/managesieve.bs > -usr/lib/perl5/site_perl/5.30.0/MACHINE-linux-thread-multi/auto/Cyrus/SIEVE= /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/package= s/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/install= .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 USA= # > -# = # > -# 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/unins= tall.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 USA= # > -# = # > -# 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 USA= # > -# = # > -# 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/pat= ches/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.autocre= ate2/README.autocreate > ---- cyrus-imapd-2.2.12/README.autocreate 1970-01-01 02:00:00.000000000 +02= 00 > -+++ cyrus-imapd-2.2.12.autocreate2/README.autocreate 2005-10-19 14:48:57.9= 30991000 +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 o= f users' > -+INBOX folders. The creation of a user's INBOX is considered to be an exte= rnal task, > -+that has to be completed as part of the user e-mail account creation proc= edure. > -+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 pr= ocedure > -+ (e.g. sasldb, shadow, mysql, ldap). > -+b) Create the corresponding INBOX folder. > -+ > -+Alternatively, the user, if succesfully authenticated, may create his own= 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" o= ption, doesn't > -+lead to the automatic INBOX folder creation by Cyrus IMAP server. > -+In fact, "autocreate" means that the IMAP clients are allowed to automati= cally create > -+the user INBOX. > -+ > -+This patch adds the functionality of automatic creation of the users' INB= OX folders into > -+the Cyrus IMAP server. It is implemented as two features, namely the "cr= eate 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 a= ll 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 requirement= s are met. > -+Note that if the authenticatedID is allowed to proxy to another account f= or which > -+all of the above requirements are met, the corresponding INBOX folder for= 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 a= ll 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 functionalitie= s are > -+provided: > -+ > -+A) Automatic creation of INBOX subfolders controlled by "autocreateinboxf= olders" > -+configuration option. eg > -+ > -+autocreateinboxfolders: sent|drafts|spam|templates > -+ > -+B) Automatic subscription of INBOX subfolders controlled by "autosubscrib= einboxfolders" > -+configuration option. eg > -+ > -+autosubscribeinboxfolders: sent|spam > -+ > -+Obviously, only subscription to subfolders included in the "autocreateinb= oxfolder" > -+list is meaningfull. > -+ > -+C) Automatic subscription to shared folders (bulletin boards). The user g= ets > -+automatically subscribed to the shared folders declared in the "autosubsc= ribesharedfolders" > -+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' i= s a yes/no > -+option. When set to yes, the user is automatically subscribed to all shar= ed folders one > -+has permission to subscribe to. Please, note that when this option is set= 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. U= sually, a > -+default anti-spam script may me be written in a file and copied to each u= ser > -+sieve scripts upon the INBOX creation. The imapd.conf options that have b= een added > -+are 'autocreate_sieve_script', 'autocreate_sieve_compiledscript' and > -+'generate_compiled_sieve_script'. > -+ > -+autocreate_sieve_script configuration option refers to the full path of t= he 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 di= sabled) > -+eg autocreate_sieve_script: /etc/default_sieve_script > -+ > -+autocreate_sieve_compiledscript configuration option refers to the full p= ath of the > -+file that contains the bytecode compiled sieve script. If this filename i= s defined > -+in imapd.conf and the file exists, then it is automatically copied in the= user's sieve > -+directory. If it is not defined, then a bytecode sieve script gets on the= 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 comp= ilation 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 Uo= A. This > -+ tool is almost identical to the sievec utility, with the difference th= at 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 does= not exist. > -+ > -+NOTES : > -+1. In order this functionality to work, the following requirements must h= ave 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 g= enerating a > -+ bytecode compiled script, but not the validity of the bytecode sieve s= cript file. > -+ The administrator should make sure that the provided files contain a v= alid sieve > -+ script as well as the compiled script is updated every time the source= 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 s= ure that: > -+a) The MTA checks the validity of the e-mail recipient before sending the= e-mail to > -+LMTP. This is an RFC821 requirement. This usually expands to "the mta sho= uld 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 implementati= on checks > -+for the INBOX folder existence upon login, causing an extra mailbox looku= p 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 woul= d mess up > -+Cyrus code. The way it was implemented may not have been the most perform= ance > -+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-imap= d-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/autocre= ate > -+ > -diff -Naur cyrus-imapd-2.2.12/imap/Makefile.in cyrus-imapd-2.2.12.autocrea= te2/imap/Makefile.in > ---- cyrus-imapd-2.2.12/imap/Makefile.in 2004-05-28 21:03:02.000000000 +0300 > -+++ cyrus-imapd-2.2.12.autocreate2/imap/Makefile.in 2005-10-19 14:48:57.93= 5240000 +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_L= IBS) \ > - $(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) $(DEPLI= BS) $(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) $(SERVIC= E) > -+pop3d: pop3d.o backend.o tls.o mutex_fake.o libimap.a $(SIEVE_LIBS) $(DEP= LIBS) $(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) $(SERVIC= E) > - $(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) $(DEPLIBS) > - $(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 $(DEPLIBS) > -+deliver: deliver.o backend.o $(LMTPOBJS) mutex_fake.o libimap.a $(SIEVE_L= IBS) $(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 $(DEPL= IBS) > -+ctl_mboxlist: ctl_mboxlist.o mupdate-client.o $(CLIOBJS) libimap.a $(SIEV= E_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 $(DEPLIBS) > -+squatter: squatter.o index.o squat_build.o $(CLIOBJS) libimap.a $(SIEVE_L= IBS) $(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) $(L= IBS) > - > --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) $(DEPLIBS) > - $(CC) $(LDFLAGS) -o \ > -- $@ tls_prune.o tls.o $(CLIOBJS) libimap.a $(DEPLIBS) $(LIBS) > -+ $@ tls_prune.o tls.o $(CLIOBJS) libimap.a $(SIEVE_LIBS) $(DEPLIBS) $(LI= BS) > - > - ### Other Misc Targets > - > -diff -Naur cyrus-imapd-2.2.12/imap/autosieve.c cyrus-imapd-2.2.12.autocrea= te2/imap/autosieve.c > ---- cyrus-imapd-2.2.12/imap/autosieve.c 1970-01-01 02:00:00.000000000 +0200 > -+++ cyrus-imapd-2.2.12.autocreate2/imap/autosieve.c 2005-10-19 14:48:57.94= 0098000 +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 *fi= lename); > -+static int get_script_dir(char *sieve_script_dir, size_t buflen, char *us= erid, 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 *fi= lename) > -+{ > -+ 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 *us= erid, 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 reside= */ > -+ 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, dir= _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 w= ork 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 def= ined. 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_compileds= cript 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",s= ieve_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",s= ieve_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.scrip= t",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.b= c",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_script= _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", si= evename) >=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 alread= y 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 script= %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 ex= ists, overwrite it > -+ * since something bad has happened. We open the file here so that th= is 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 fil= e %s. Check permissions",sieve_bctmpname); > -+ fclose(in_stream); > -+ return 1; > -+ } else { > -+ syslog(LOG_WARNING,"autocreate_sieve: Unable to create %s. Un= known 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 f= ile: %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 compiled= 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 compi= led script file: %s. Compiling it", compiled_source_script); > -+ do_compile =3D 1; > -+ } > -+ > -+ > -+ /* Because we failed to open a precompiled bc sieve script, we compil= e 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 parsing= 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 sieve= 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 s= cript"); > -+ /* 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 destinati= on 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 siev= e 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 def= ault link."); > -+ /* Lets delete the files */ > -+ unlink(sieve_script_name); > -+ unlink(sieve_bcscript_name); > -+ } > -+ } > -+ > -+ /* > -+ * If everything has succeeded AND we have compiled the script AND we= have requested > -+ * to generate the global script so that it is not compiled each time= 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 sie= ve script, autocreate_sieve_compiledscript must have been defined in imapd.co= nf"); > -+ return 0; > -+ } > -+ > -+ if(snprintf(sieve_tmpname, sizeof(sieve_tmpname), "%s.NEW", compi= led_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_IRU= SR|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 create= 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 f= ile: %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 f= ile: %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 s= uccessfully 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", res= ); > -+ 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", res= ); > -+ 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", re= s); > -+ 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", res= ); > -+ return TIMSIEVE_FAIL; > -+ } > -+ > -+ res =3D sieve_register_vacation(i, &vacation2); > -+ if (res !=3D SIEVE_OK) { > -+ syslog(LOG_WARNING, "sieve_register_vacation() returns %d\n", res= ); > -+ 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 birthd= ay 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.auto= create2/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:5= 7.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. Chec= k imapd.conf\n"); > -+ return 1; > -+ } > -+ > -+ /* Check if we have an already compiled sieve script*/ > -+ if(!(compiled_source_script =3D (char *) config_getstring(IMAPOPT_AU= TOCREATE_SIEVE_COMPILEDSCRIPT))) { > -+ fprintf(stderr, "autocreate_sieve_compiledscript option not defi= ned. 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, compiled= _source_script); > -+ > -+ > -+ if(strlen(compiled_source_script) + sizeof(".NEW") + 1 > sizeof(sieve= _tmpname)) { > -+ fprintf(stderr, "Filename %s is too big\n", compiled_source_script); > -+ return 1; > -+ } > -+ =09 > -+ snprintf(sieve_tmpname, sizeof(sieve_tmpname), "%s.NEW", compiled_sou= rce_script); > -+ > -+ in_stream =3D fopen(source_script,"r"); > -+ > -+ if(!in_stream) { > -+ fprintf(stderr,"Unable to open %s source sieve script\n",source_s= cript); > -+ return; > -+ } > -+ > -+ /* > -+ * We open the file that will be used as the bc file. If this file ex= ists, overwrite it > -+ * since something bad has happened. We open the file here so that th= is 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_IWU= SR|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 tha= t you have the correct permissions\n", > -+ sieve_tmpname); > -+ } else { > -+ fprintf(stderr,"Unable to create %s. Please check that you ha= ve 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.966749= 000 +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_namespace, > -+ "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.971145= 000 +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(ch= ar)); > -+ 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, authst= ate, > -+ 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.autocreat= e2/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.972= 032000 +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 maycr= eate, > - void *rock); > - > -+static int mboxlist_autochangesub(char *name, int matchlen, int maycreate, > -+ void *rock); > -+ > -+static int mboxlist_autosubscribe_sharedfolders(struct namespace *namespa= ce, > -+ 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 maycreate, > -+ 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 INBO= X subfolders */ > -+ (strlen(name) > 4 && !strncmp(name, "user.", 5))) /* Exclude othe= r 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 succeeded= ", > -+ 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 *namespa= ce, > -+ 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], mailboxnam= e[MAX_MAILBOX_NAME+1]; > -+ int len; > -+ int r =3D 0; > -+ int subscribe_all_sharedfolders =3D 0; > -+ > -+ subscribe_all_sharedfolders =3D config_getswitch(IMAPOPT_AUTOSUBSCRIB= E_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, &changesu= b_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 SE= P || !*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, u= serid, > -+ mailbox= name); > -+ } > -+ > -+ if (!r) > -+ r =3D mboxlist_changesub(mailboxname, userid, auth_state, = 1, 0); > -+ > -+ if (!r) { > -+ syslog(LOG_NOTICE, "autosubscribe: User %s to %s succeede= d", > -+ 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", userid= ); > -+ return IMAP_PARTITION_UNKNOWN; > -+ } > -+#endif > -+ > -+ r =3D mboxlist_createmailbox(mailboxname, MAILBOX_FORMAT_NORMAL, NULL, > -+ 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 successful= ly created in partition %s", > -+ auth_userid, partition =3D=3D NULL ? "default" : partition= ); > -+ } 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_cr= t++); > -+ 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], sizeo= f(name)); > -+ len =3D strlcat(name, folder, sizeof(name)); > -+ } > -+ > -+ if (!r) > -+ r =3D (namespace->mboxname_tointernal) (namespace, name, user= id, > -+ mailboxname); > -+ if (!r) > -+ r =3D mboxlist_createmailbox(mailboxname, MAILBOX_FORMAT_NOR= MAL, NULL, > -+ 1, userid, auth_state, 0, 0, = 0); > -+ > -+ if (!r) { > -+ numcrt++; > -+ syslog(LOG_NOTICE, "autocreateinbox: User %s, subfolder %s cr= eation 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 ; n= ext_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, subscript= ion to %s succeeded", > -+ auth_userid, name); > -+ } else > -+ syslog(LOG_WARNING, "autocreateinbox: User %s, subscr= iption to %s failed. %s", > -+ auth_userid, name, error_message(r)); > -+ > -+ break; > -+ } > -+ } > -+ > -+ if (crt!=3DNULL && *crt) > -+ syslog(LOG_INFO, "User %s, Inbox subfolders, created %d, subscribe= d %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 sieve= script creation failed", auth_userid); > -+ } > -+#endif > -+ > -+ return r; > -+} > -+ > -diff -Naur cyrus-imapd-2.2.12/imap/mboxlist.h cyrus-imapd-2.2.12.autocreat= e2/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.027= 033000 +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.033335= 000 +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(inb= oxname, userid))) > -+ r =3D mboxlist_detail(inboxname, &type, NULL, &server, &acl, NULL= ); > -+ > - 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/li= b/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.03532400= 0 +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.autocreate= 2/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.0381= 80000 +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.autocreat= e2/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.040= 108000 +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.autocreate= 2/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.0423= 43000 +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.autocreat= e2/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.044= 431000 +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.autocreat= e2/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.048= 748000 +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 no= t 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 som= e INBOX subfolders are > -+ created under two conditions. > -+ 1. The user logins via the IMAP or the POP3 protocol. (autocreatequo= ta option must have a nonzero value) > -+ 2. A message arrives for the user through the LMTPD protocol.(create= onpost 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 automatica= lly subscribed to, when their INBOX > -+ is created. > -+ These folder names must have been included in the autocreateinboxfolder= s 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 must= have the > -+ required permissions to get subscribed to the it. Otherwise the subscr= iption 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 auto= matically becomes a > -+ user's initial default sieve filter script. When this option is not de= fined, no default > -+ sieve filter is created. The file must be readable by the cyrus daemon= . */ > -+ > -+{ "autocreate_sieve_compiledscript", NULL, STRING } > -+/* The full path of a file that contains a compiled in bytecode sieve scr= ipt. 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 th= e script defined > -+ by autocreate_sieve_script is compiled on the fly and installed as the= 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_sie= ve_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.autoc= reate2/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:58= .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 ../lib= /libcyrus_min.a @DEPLIBS@ > -+DEPLIBS=3D../imap/mutex_fake.o ../imap/libimap.a $(SIEVE_LIBS) ../lib/lib= cyrus.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.autocre= ate2/notifyd/notifyd.c > ---- cyrus-imapd-2.2.12/notifyd/notifyd.c 2004-12-17 18:32:25.000000000 +02= 00 > -+++ cyrus-imapd-2.2.12.autocreate2/notifyd/notifyd.c 2005-10-19 14:48:58.0= 52220000 +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.auto= create2/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:5= 8.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 @DE= PLIBS@ > -+DEPLIBS =3D ../imap/libimap.a $(SIEVE_LIBS) ../lib/libcyrus.a ../lib/libc= yrus_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; > - } >=20 --===============0249875616283566179==--