rpms/cyrus-imapd/F-8 cyrus-imapd-2.3.11-autocreate-0.10-0.diff, NONE, 1.1 cyrus-imapd-2.3.11-autosieve-0.6.0.diff, NONE, 1.1 .cvsignore, 1.10, 1.11 cyrus-imapd.spec, 1.32, 1.33 sources, 1.12, 1.13 cyrus-imapd-2.3.9-autocreate-0.10-0.diff, 1.1, NONE cyrus-imapd-2.3.9-autosieve-0.6.0.diff, 1.1, NONE cyrus-imapd-2.3.9-getgrouplist.patch, 1.1, NONE cyrus-imapd-2.3.9-implicitdecl.patch, 1.1, NONE cyrus-imapd-2.3.9-myfatal.patch, 1.1, NONE
Tomas Janousek (tjanouse)
fedora-extras-commits at redhat.com
Tue Mar 25 10:28:17 UTC 2008
- Previous message (by thread): rpms/bluez-libs/devel .cvsignore, 1.34, 1.35 bluez-libs.spec, 1.50, 1.51 sources, 1.34, 1.35
- Next message (by thread): rpms/bluez-utils/devel .cvsignore, 1.32, 1.33 bluez-utils.spec, 1.95, 1.96 sources, 1.32, 1.33
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Author: tjanouse
Update of /cvs/extras/rpms/cyrus-imapd/F-8
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv1522
Modified Files:
.cvsignore cyrus-imapd.spec sources
Added Files:
cyrus-imapd-2.3.11-autocreate-0.10-0.diff
cyrus-imapd-2.3.11-autosieve-0.6.0.diff
Removed Files:
cyrus-imapd-2.3.9-autocreate-0.10-0.diff
cyrus-imapd-2.3.9-autosieve-0.6.0.diff
cyrus-imapd-2.3.9-getgrouplist.patch
cyrus-imapd-2.3.9-implicitdecl.patch
cyrus-imapd-2.3.9-myfatal.patch
Log Message:
* Tue Mar 25 2008 Tomas Janousek <tjanouse at redhat.com> - 2.3.11-1
- update to latest upstream
- (temporarily) dropped the rmquota+deletemailbox patch (doesn't apply)
cyrus-imapd-2.3.11-autocreate-0.10-0.diff:
--- NEW FILE cyrus-imapd-2.3.11-autocreate-0.10-0.diff ---
diff -Naur cyrus-imapd-2.3.11/README.autocreate cyrus-imapd-2.3.11-autocreate.uncompiled/README.autocreate
--- cyrus-imapd-2.3.11/README.autocreate 1970-01-01 02:00:00.000000000 +0200
+++ cyrus-imapd-2.3.11-autocreate.uncompiled/README.autocreate 2007-12-12 13:29:49.000000000 +0200
@@ -0,0 +1,211 @@
+Cyrus IMAP autocreate Inbox patch
+----------------------------------
+
+NOTE : This patch has been created at the University of Athens. For more info, as well
+as more patches on Cyrus IMAPD server, please visit http://email.uoa.gr/
+
+The design of Cyrus IMAP server does not predict the automatic creation of users'
+INBOX folders. The creation of a user's INBOX is considered to be an external task,
+that has to be completed as part of the user email account creation procedure.
+Hence, to create a new email account the site administrator has to:
+
+ a) Include the new account in the user database for the authentication procedure
+ (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 not careful readers may think, enabling the "autocreatequota" option, doesn't
+lead to the automatic INBOX folder creation by Cyrus IMAP server.
+In fact, "autocreate" means that the IMAP clients are allowed to automatically create
+the user INBOX.
+
+This patch adds the functionality of automatic creation of the users' INBOX folders into
+the Cyrus IMAP server. It is implemented as two features, namely the "create on login"
+and "create on post".
+
+
+
+Create on login
+===============
+This feauture provides automatic creation of a user's INBOX folder when all of the
+following requirements are met:
+
+i) The user has succesfully passed the authentication procedure.
+
+ii) The user's authorisation 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 authorisation ID INBOX folder
+does not exist.
+
+The user's first login is the most typical case when all four requirements are met.
+Note that if the authenticated ID is allowed to proxy to another account for which
+all of the above requirements are met, the corresponding INBOX folder for that account
+will be created.
+
+
+
+Create on post
+==============
+This feauture provides automatic creation of a user's INBOX folder when all of the
+following requirements are met.
+
+i) An email message addressed to the user has been received.
+
+ii) The recipient is not any of the imap_admins or admins accounts.
+Note that passing emails 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 functionalities are
+provided:
+
+ (A) Automatic creation of INBOX subfolders controlled by "autocreateinboxfolders"
+configuration option. eg
+
+autocreateinboxfolders: sent|drafts|spam|templates
+
+ (B) Automatic subscription of INBOX subfolders controlled by "autosubscribeinboxfolders"
+configuration option. eg
+
+autosubscribeinboxfolders: sent|spam
+
+Obviously, only subscription to subfolders included in the "autocreateinboxfolder"
+list is meaningful.
+
+ (C) Automatic subscription to shared folders (bulletin boards). The user gets
+automatically subscribed to the shared folders declared in the "autosubscribesharedfolders"
+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 appropriate permissions in order to be able to subscribe to the
+shared folder.
+
+* A new config option has been added. 'autosubscribe_all_sharedfolders' is a yes/no
+option. When set to yes, the user is automatically subscribed to all shared 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. Usually, a
+default anti-spam script may me be written in a file and copied to each user
+sieve scripts upon the INBOX creation. The imapd.conf options that have been added
+are 'autocreate_sieve_script', 'autocreate_sieve_compiledscript' and
+'generate_compiled_sieve_script'.
+
+autocreate_sieve_script configuration option refers to the full path of the file
+that contains the sieve script. The default value is null and if no file is defined,
+then no default script is created upon INBOX creation. (The feature is disabled)
+eg autocreate_sieve_script: /etc/default_sieve_script
+
+autocreate_sieve_compiledscript configuration option refers to the full path of the
+file that contains the bytecode compiled sieve script. If this filename is defined
+in imapd.conf and the file exists, then it is automatically copied in 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 compilation 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 UoA. This
+ tool is almost identical to the sievec utility, with the difference that 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 have been met:
+ - 'sieveusehomedir' option must be 'no' in the configuration (default).
+ - 'sievedir' option must have a valid value.
+2. Currently, this patch checks the validity of the source script while generating a
+ bytecode compiled script, but not the validity of the bytecode sieve script file.
+ The administrator should make sure that the provided files contain a valid sieve
+ script as well as the compiled script is updated every time the source script changes.
+
+
+ (E) The administrator may control for which users and/or groups may the INBOXes
+automatically be created. The autocreate_users option restricts the groups
+for which the patch will create the mailboxes.
+
+The default value of autocreate_users is anyone. So, if not set at all, the patch will
+work for all users. However, one may set:
+
+autocreate_users: user1 user2 group:group1 group:group2
+
+In that case, the INBOX will be created only for user1, user2 and the users that belong
+to group1 and group2.
+
+More refined control per service is provided by the options imap_autocreate_users,
+pop3_autocreate_users and lmtp_autocreate_users. These options override the
+autocreate_users option and offer per service control.
+
+Example:
+One may want to restrict the create on post functionality only for a specific group
+of users. To achieve this, the following lines must be added in the imapd.conf file:
+
+createonpost: yes
+lmtp_autocreate_users: group:groupname
+
+
+
+Issues to be considered
+=======================
+
+I) In order to use the create on post feauture one should be absolutely sure that:
+a) The MTA checks the validity of the email recipient before sending the email to
+LMTP. This is an RFC821 requirement. This usually expands to "the mta should be
+able to use the account database as user mailbox database".
+b) Only authorised accounts/services can talk to LMTP.
+
+II) Especially in the case of imap logins, the current patch implementation checks
+for the INBOX folder existence upon login, causing an extra mailbox lookup 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 would mess up
+Cyrus code. The way it was implemented may not have been the most performance
+optimised, but it produces a much cleaner and simple patch.
+
+
+
+Virtual Domains Support
+=======================
+
+Virtual domains are supported by all versions of the patch for cyrus-imapd-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.
[...1987 lines suppressed...]
+
#endif
struct auth_mech auth_krb =
@@ -379,4 +395,5 @@
&mymemberof,
&mynewstate,
&myfreestate,
+ &mycanonuser,
};
diff -Naur cyrus-imapd-2.3.11/lib/auth_krb5.c cyrus-imapd-2.3.11-autocreate.uncompiled/lib/auth_krb5.c
--- cyrus-imapd-2.3.11/lib/auth_krb5.c 2007-09-27 23:02:45.000000000 +0300
+++ cyrus-imapd-2.3.11-autocreate.uncompiled/lib/auth_krb5.c 2007-12-12 13:29:49.000000000 +0200
@@ -197,6 +197,14 @@
free(auth_state);
}
+static char *mycanonuser(struct auth_state *auth_state)
+{
+ if (auth_state)
+ return auth_state->userid;
+
+ return NULL;
+}
+
#else /* HAVE_GSSAPI_H */
static int mymemberof(
@@ -228,6 +236,12 @@
fatal("Authentication mechanism (krb5) not compiled in", EC_CONFIG);
}
+static char *mycanonuser(
+ struct auth_state *auth_state __attribute__((unused)))
+{
+ fatal("Authentication mechanism (krb5) not compiled in", EC_CONFIG);
+}
+
#endif
struct auth_mech auth_krb5 =
@@ -238,4 +252,5 @@
&mymemberof,
&mynewstate,
&myfreestate,
+ &mycanonuser,
};
diff -Naur cyrus-imapd-2.3.11/lib/auth_pts.c cyrus-imapd-2.3.11-autocreate.uncompiled/lib/auth_pts.c
--- cyrus-imapd-2.3.11/lib/auth_pts.c 2007-09-27 23:02:45.000000000 +0300
+++ cyrus-imapd-2.3.11-autocreate.uncompiled/lib/auth_pts.c 2007-12-12 13:29:49.000000000 +0200
@@ -511,6 +511,14 @@
free(auth_state);
}
+static char *mycanonuser(struct auth_state *auth_state)
+{
+ if (auth_state)
+ return auth_state->userid.id;
+
+ return NULL;
+}
+
struct auth_mech auth_pts =
{
"pts", /* name */
@@ -519,4 +527,5 @@
&mymemberof,
&mynewstate,
&myfreestate,
+ &mycanonuser,
};
diff -Naur cyrus-imapd-2.3.11/lib/auth_unix.c cyrus-imapd-2.3.11-autocreate.uncompiled/lib/auth_unix.c
--- cyrus-imapd-2.3.11/lib/auth_unix.c 2007-10-31 12:42:18.000000000 +0200
+++ cyrus-imapd-2.3.11-autocreate.uncompiled/lib/auth_unix.c 2007-12-12 13:29:49.000000000 +0200
@@ -314,6 +314,16 @@
free((char *)auth_state);
}
+static char *mycanonuser(auth_state)
+ struct auth_state *auth_state;
+{
+ if (auth_state)
+ return auth_state->userid;
+
+ return NULL;
+}
+
+
struct auth_mech auth_unix =
{
@@ -323,4 +333,5 @@
&mymemberof,
&mynewstate,
&myfreestate,
+ &mycanonuser,
};
diff -Naur cyrus-imapd-2.3.11/lib/imapoptions cyrus-imapd-2.3.11-autocreate.uncompiled/lib/imapoptions
--- cyrus-imapd-2.3.11/lib/imapoptions 2007-10-18 21:14:48.000000000 +0300
+++ cyrus-imapd-2.3.11-autocreate.uncompiled/lib/imapoptions 2007-12-12 13:29:49.000000000 +0200
@@ -177,6 +177,55 @@
/* Number of seconds to wait before returning a timeout failure when
performing a client connection (e.g. in a murder environment) */
+{ "createonpost", 0, SWITCH }
+/* If yes, when lmtpd receives an incoming mail for an INBOX that does not 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 some INBOX
+ subfolders are created under two conditions.
+ 1. The user logins via the IMAP or the POP3 protocol. (autocreatequota option must have a nonzero value)
+ 2. A message arrives for the user through the LMTPD protocol.(createonpost option must be 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 automatically subscribed to,
+ when their INBOX is created. These folder names must have been included in the
+ autocreateinboxfolders 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 it. Otherwise, subscribing to the shared folder fails. */
+
+{ "autosubscribe_all_sharedfolders", 0, SWITCH }
+/* If set to yes, 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 automatically becomes a
+ user's initial default sieve filter script. When this option is not defined, 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 script. 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 the 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, the sieve script which is
+ compiled on the fly will be saved in the file name that autocreate_sieve_compiledscript
+ option points to. In order a compiled script to be generated, autocreate_sieve_script and
+ autocreate_sieve_compiledscript must have valid values */
+
+{ "autocreate_users", "anyone", STRING }
+/* A space separated list of users and/or groups that are allowed their INBOX to be
+ automatically created. */
+
{ "configdirectory", NULL, STRING }
/* The pathname of the IMAP configuration directory. This field is
required. */
diff -Naur cyrus-imapd-2.3.11/notifyd/Makefile.in cyrus-imapd-2.3.11-autocreate.uncompiled/notifyd/Makefile.in
--- cyrus-imapd-2.3.11/notifyd/Makefile.in 2006-11-30 19:11:23.000000000 +0200
+++ cyrus-imapd-2.3.11-autocreate.uncompiled/notifyd/Makefile.in 2007-12-12 13:29:49.000000000 +0200
@@ -69,10 +69,11 @@
SERVICE=../master/service.o
IMAP_LIBS = @IMAP_LIBS@ @LIB_RT@
+SIEVE_LIBS = @SIEVE_LIBS@
IMAP_COM_ERR_LIBS = @IMAP_COM_ERR_LIBS@
LIB_WRAP = @LIB_WRAP@
LIBS = @ZEPHYR_LIBS@ @LIBS@ $(IMAP_COM_ERR_LIBS)
-DEPLIBS=../imap/mutex_fake.o ../imap/libimap.a ../lib/libcyrus.a ../lib/libcyrus_min.a @DEPLIBS@
+DEPLIBS=../imap/mutex_fake.o ../imap/libimap.a $(SIEVE_LIBS) ../lib/libcyrus.a ../lib/libcyrus_min.a @DEPLIBS@
PURIFY=/usr/local/bin/purify
PUREOPT=-best-effort
diff -Naur cyrus-imapd-2.3.11/notifyd/notifyd.c cyrus-imapd-2.3.11-autocreate.uncompiled/notifyd/notifyd.c
--- cyrus-imapd-2.3.11/notifyd/notifyd.c 2006-11-30 19:11:23.000000000 +0200
+++ cyrus-imapd-2.3.11-autocreate.uncompiled/notifyd/notifyd.c 2007-12-12 13:29:49.000000000 +0200
@@ -97,7 +97,7 @@
#define NOTIFY_MAXSIZE 8192
-int do_notify()
+static int do_notify()
{
struct sockaddr_un sun_data;
socklen_t sunlen = sizeof(sun_data);
diff -Naur cyrus-imapd-2.3.11/ptclient/Makefile.in cyrus-imapd-2.3.11-autocreate.uncompiled/ptclient/Makefile.in
--- cyrus-imapd-2.3.11/ptclient/Makefile.in 2006-11-30 19:11:24.000000000 +0200
+++ cyrus-imapd-2.3.11-autocreate.uncompiled/ptclient/Makefile.in 2007-12-12 13:29:49.000000000 +0200
@@ -57,10 +57,11 @@
AFS_LDFLAGS = @AFS_LDFLAGS@ @COM_ERR_LDFLAGS@
AFS_LIBS = @AFS_LIBS@
IMAP_LIBS = @IMAP_LIBS@ @LIB_RT@
+SIEVE_LIBS = @SIEVE_LIBS@
LIBS = $(IMAP_LIBS) @COM_ERR_LIBS@
LIB_SASL = @LIB_SASL@
LIB_WRAP = @LIB_WRAP@
-DEPLIBS = ../imap/libimap.a ../lib/libcyrus.a ../lib/libcyrus_min.a @DEPLIBS@
+DEPLIBS = ../imap/libimap.a $(SIEVE_LIBS) ../lib/libcyrus.a ../lib/libcyrus_min.a @DEPLIBS@
UTIL_LIBS = ../imap/mutex_fake.o ../imap/cli_fatal.o
LDAP_LIBS=@LDAP_LIBS@
cyrus-imapd-2.3.11-autosieve-0.6.0.diff:
--- NEW FILE cyrus-imapd-2.3.11-autosieve-0.6.0.diff ---
diff -Naur cyrus-imapd-2.3.11/README.autosievefolder cyrus-imapd-2.3.11-autosieve.uncompiled/README.autosievefolder
--- cyrus-imapd-2.3.11/README.autosievefolder 1970-01-01 02:00:00.000000000 +0200
+++ cyrus-imapd-2.3.11-autosieve.uncompiled/README.autosievefolder 2007-12-12 14:17:18.000000000 +0200
@@ -0,0 +1,42 @@
+Cyrus IMAP autosievefolder 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
+
+
+ When the lmtpd daemon receives an email message prior to delivering it to the
+INBOX folder of the user, checks if the user has specified sieve filters. If the
+user has specified sieve filters the filters are evaluated. If the message matches
+any of the filters the action that is specified in the filter is executed. If the action
+is FileInto it is stored in the subfolder specified in the filter. If the
+subfolder doesn't exist then the message is sent to the INBOX folder of the user.
+
+ With this patch if the folder doesn't exist AND the name of the subfolder is
+specified in the autosievefolders option, OR the anysievefolder is set to
+yes in the cyrus-imap configuration file then the subfolder is created and the mail
+is stored there.
+
+
+Check the following options of the imapd.conf file
+==================================================
+
+* anysievefolder : It must be "yes" in order to permit the autocreation of any
+INBOX subfolder requested by a sieve filter, through the "fileinto" action. (default = no)
+* autosievefolders : It is a "|" separated list of subfolders of INBOX that will be
+automatically created, if requested by a sieve filter, through the "fileinto"
+action. (default = null)
+ i.e. autosievefolders: Junk | Spam
+
+WARNING: anysievefolder, takes precedence over autosievefolders . Which means that if
+anysievefolder is set to "yes", cyrus will create any INBOX subfolder requested, no-matter what the value of autosievefolders is.
+
+
+Things to be done
+=================
+
+1. Support cyrus wildcards in the autosievefolders option.
+
+
+For more information and updates please visit http://email.uoa.gr/projects/cyrus/autosievefolder
+
diff -Naur cyrus-imapd-2.3.11/imap/lmtp_sieve.c cyrus-imapd-2.3.11-autosieve.uncompiled/imap/lmtp_sieve.c
--- cyrus-imapd-2.3.11/imap/lmtp_sieve.c 2007-09-28 05:27:46.000000000 +0300
+++ cyrus-imapd-2.3.11-autosieve.uncompiled/imap/lmtp_sieve.c 2007-12-12 14:17:18.000000000 +0200
@@ -88,6 +88,9 @@
struct auth_state *authstate;
} script_data_t;
+static int autosieve_subfolder(char *userid, struct auth_state *auth_state,
+ char *subfolder, struct namespace *namespace);
+
static char *make_sieve_db(const char *user)
{
static char buf[MAX_MAILBOX_PATH+1];
@@ -484,7 +487,20 @@
sd->username, mdata->notifyheader,
namebuf, quotaoverride, 0);
}
-
+
+ if (ret == IMAP_MAILBOX_NONEXISTENT) {
+ /* if "plus" folder under INBOX, then try to create it */
+ ret = autosieve_subfolder((char *) sd->username, sd->authstate, namebuf, mdata->namespace);
+
+ /* Try to deliver the mail again. */
+ if (!ret)
+ ret = deliver_mailbox(md->f, mdata->content, mdata->stage, md->size,
+ fc->imapflags->flag, fc->imapflags->nflags,
+ (char *) sd->username, sd->authstate, md->id,
+ sd->username, mdata->notifyheader,
+ namebuf, quotaoverride, 0);
+ }
+
if (!ret) {
snmp_increment(SIEVE_FILEINTO, 1);
return SIEVE_OK;
@@ -935,3 +951,80 @@
we'll do normal delivery */
return r;
}
+
+
+#define SEP '|'
+
+static int autosieve_subfolder(char *userid, struct auth_state *auth_state,
+ char *subfolder, struct namespace *namespace)
+{
+ char option_name_external[MAX_MAILBOX_NAME + 1];
+ char option_name_internal[MAX_MAILBOX_NAME + 1];
+ const char *subf ;
+ char *p, *q, *next_subf;
+ int len, r = 0;
+ int createsievefolder = 0;
+
+ /* Check if subfolder or userid are NULL */
+ if(userid == NULL || subfolder == NULL)
+ return IMAP_MAILBOX_NONEXISTENT;
+
+ syslog(LOG_DEBUG, "autosievefolder: autosieve_subfolder() was called for user %s, folder %s",
+ userid, subfolder);
+
+ if (config_getswitch(IMAPOPT_ANYSIEVEFOLDER)) {
+ createsievefolder = 1;
+ } else if ((subf = config_getstring(IMAPOPT_AUTOSIEVEFOLDERS)) != NULL) {
+ /* Roll through subf */
+ next_subf = (char *) subf;
+ while (*next_subf) {
+ for (p = next_subf ; isspace((int) *p) || *p == SEP ; p++);
+ for (next_subf = p ; *next_subf && *next_subf != SEP ; next_subf++);
+ for (q = next_subf ; q > p && (isspace((int) *q) || *q == SEP || !*q); q--);
+
+ if (!*p) continue;
+
+ len = q - p + 1;
+ /*
+ * This is a preliminary length check based on the assumption
+ * that the *final* internal format will be something
+ * like user.userid.subfolder(s).
+ */
+ if (len > sizeof(option_name_external) - strlen(userid) - 5)
+ return IMAP_MAILBOX_BADNAME;
+
+ strlcpy(option_name_external, namespace->prefix[NAMESPACE_INBOX], sizeof(option_name_external));
+ strncat(option_name_external, p, len);
+
+ /*
+ * Transform the option folder name to internal namespace and compare it
+ * with what must be created.
+ */
+ r = namespace->mboxname_tointernal(namespace, option_name_external, userid, option_name_internal);
+ if (r) continue;
+
+ if (!strcmp(option_name_internal, subfolder)) {
+ createsievefolder = 1;
+ break;
+ }
+ }
+ }
+
+ if (createsievefolder) {
+ /* Folder is already in internal namespace format */
+ r = mboxlist_createmailbox(subfolder, MAILBOX_FORMAT_NORMAL, NULL,
+ 1, userid, auth_state, 0, 0, 0);
+ if (!r) {
+ mboxlist_changesub(subfolder, userid, auth_state, 1, 1);
+ syslog(LOG_DEBUG, "autosievefolder: User %s, folder %s creation succeeded",
+ userid, subfolder);
+ return 0;
+ } else {
+ syslog(LOG_ERR, "autosievefolder: User %s, folder %s creation failed. %s",
+ userid, subfolder,error_message(r));
+ return r;
+ }
+ } else
+ return IMAP_MAILBOX_NONEXISTENT;
+}
+
diff -Naur cyrus-imapd-2.3.11/lib/imapoptions cyrus-imapd-2.3.11-autosieve.uncompiled/lib/imapoptions
--- cyrus-imapd-2.3.11/lib/imapoptions 2007-10-18 21:14:48.000000000 +0300
+++ cyrus-imapd-2.3.11-autosieve.uncompiled/lib/imapoptions 2007-12-12 14:17:18.000000000 +0200
@@ -906,6 +906,15 @@
/* If enabled, lmtpd will look for Sieve scripts in user's home
directories: ~user/.sieve. */
+{ "anysievefolder", 0, SWITCH }
+/* It must be "yes" in order to permit the autocreation of any INBOX subfolder
+ requested by a sieve filter, through the "fileinto" action. (default = no) */
+
+{ "autosievefolders", NULL, STRING }
+/* It is a "|" separated list of subfolders of INBOX that will be automatically created,
+ if requested by a sieve filter, through the "fileinto" action. (default = null)
+ i.e. autosievefolders: Junk | Spam */
+
{ "singleinstancestore", 1, SWITCH }
/* If enabled, imapd, lmtpd and nntpd attempt to only write one copy
of a message per partition and create hard links, resulting in a
Index: .cvsignore
===================================================================
RCS file: /cvs/extras/rpms/cyrus-imapd/F-8/.cvsignore,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- .cvsignore 22 Aug 2007 12:16:12 -0000 1.10
+++ .cvsignore 25 Mar 2008 10:27:37 -0000 1.11
@@ -1,3 +1,3 @@
cyrus_sharedbackup-0.1.tar.gz
-cyrus-imapd-2.3.9.tar.gz
-cyrus-imapd-2.3.9.tar.gz.sig
+cyrus-imapd-2.3.11.tar.gz
+cyrus-imapd-2.3.11.tar.gz.sig
Index: cyrus-imapd.spec
===================================================================
RCS file: /cvs/extras/rpms/cyrus-imapd/F-8/cyrus-imapd.spec,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -r1.32 -r1.33
--- cyrus-imapd.spec 25 Sep 2007 09:17:00 -0000 1.32
+++ cyrus-imapd.spec 25 Mar 2008 10:27:37 -0000 1.33
@@ -1,7 +1,7 @@
-%define upstream_ver 2.3.9
+%define upstream_ver 2.3.11
Name: cyrus-imapd
-Version: 2.3.9
-Release: 7%{?dist}
+Version: 2.3.11
+Release: 1%{?dist}
# ********************** BUILD TIME OPTIONS START **********************
@@ -130,9 +130,9 @@
Source30: cyrus-imapd-README.contrib
Source33: cyrus-imapd-README.skiplist_recovery
Patch0: cyrus-imapd-2.2.12-no_transfig.patch
-Patch1: http://email.uoa.gr/download/cyrus/cyrus-imapd-2.3.9/cyrus-imapd-2.3.9-autocreate-0.10-0.diff
-Patch2: http://email.uoa.gr/download/cyrus/cyrus-imapd-2.3.9/cyrus-imapd-2.3.9-autosieve-0.6.0.diff
-Patch3: http://email.uoa.gr/download/cyrus/cyrus-imapd-2.3.9/cyrus-imapd-2.3.9-rmquota+deletemailbox-0.2-1.diff
+Patch1: http://email.uoa.gr/download/cyrus/cyrus-imapd-2.3.9/cyrus-imapd-2.3.11-autocreate-0.10-0.diff
+Patch2: http://email.uoa.gr/download/cyrus/cyrus-imapd-2.3.9/cyrus-imapd-2.3.11-autosieve-0.6.0.diff
+#Patch3: http://email.uoa.gr/download/cyrus/cyrus-imapd-2.3.9/cyrus-imapd-2.3.9-rmquota+deletemailbox-0.2-1.diff
Patch4: http://servercc.oakton.edu/~jwade/cyrus/cyrus-imapd-2.1.3/cyrus-imapd-2.1.3-flock.patch
Patch5: cyrus-imapd-2.2.12-munge8bit.patch
Patch6: cyrus-imapd-2.1.16-getrlimit.patch
@@ -147,13 +147,10 @@
Patch16: cyrus-imapd-2.3.7-db4.5.patch
Patch17: cyrus-imapd-2.3.7-makeinstallfix.patch
Patch18: cyrus-imapd-2.3.7-krb4.patch
-Patch19: cyrus-imapd-2.3.9-implicitdecl.patch
-Patch20: cyrus-imapd-2.3.9-myfatal.patch
# Patches >= 100 are / will be fixed in CVS
Patch100: cyrus-imapd-2.3.1-make_md5.patch
Patch101: cyrus-imapd-2.3.1-backend_sigsegv.patch
Patch102: cyrus-imapd-2.3.1-replication_policycheck.patch
-Patch103: cyrus-imapd-2.3.9-getgrouplist.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
BuildRequires: autoconf >= 2.59
BuildRequires: cyrus-sasl-devel >= 2.1.15-1, perl, perl-devel, tcp_wrappers
@@ -169,6 +166,7 @@
Requires(postun): /sbin/service
Requires: %{name}-utils = %{version}-%{release}
Requires: cyrus-sasl-lib >= 2.1.15, file >= 3.35-1, %{_dbver}-utils
+Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version))
Obsoletes: cyrus-murder, cyrus-nntp
Provides: cyrus-murder, cyrus-nntp
@@ -238,7 +236,7 @@
%if %{AUTOCREATE}
%patch1 -p1 -b .autocreate
%patch2 -p1 -b .autosieve
-%patch3 -p1 -b .rmquota
+#%patch3 -p1 -b .rmquota
%endif
%patch4 -p1 -b .flock
# superseded by upstream munge8bit support
@@ -258,9 +256,6 @@
#%patch16 -p1 -b .db4.5
#%patch17 -p1 -b .makeinstallfix
%patch18 -p1 -b .krb4
-%patch19 -p1 -b .implicitdecl
-%patch20 -p1 -b .myfatal
-%patch103 -p1 -b .getgrouplist
# fixed upstream
#%patch100 -p1 -b .make_md5
# fixed upstream
@@ -354,18 +349,18 @@
%{__rm} -f doc/Makefile.dist*
%{__rm} -f doc/text/htmlstrip.c
-%{__install} -m 644 %{SOURCE23} doc/README.RPM
-%{__install} -m 644 %{SOURCE24} doc/README.HOWTO-recover-mailboxes.db
+%{__install} -m 644 %{SOURCE23} doc/README.RPM
+%{__install} -m 644 %{SOURCE24} doc/README.HOWTO-recover-mailboxes.db
%{__install} -m 644 %{SOURCE33} doc/README.skiplist_recovery
%if %{AUTOCREATE}
%{__install} -m 644 %{SOURCE8} doc/README.autocreate
%{__install} -m 644 %{SOURCE9} doc/README.autosievefolder
%endif
%{__install} -d doc/m4
-%{__install} -m 644 %{SOURCE26} doc/m4/cyrus-procmailrc
-%{__install} -m 644 %{SOURCE4} doc/m4/cyrus-user-procmailrc.template
-%{__install} -m 644 %{SOURCE27} doc/m4/%{name}-procmail+cyrus.mc
-%{__install} -m 644 %{SOURCE29} doc/m4/%{name}-sendmail-8.12.9-cyrusv2.m4
+%{__install} -m 644 %{SOURCE26} doc/m4/cyrus-procmailrc
+%{__install} -m 644 %{SOURCE4} doc/m4/cyrus-user-procmailrc.template
+%{__install} -m 644 %{SOURCE27} doc/m4/%{name}-procmail+cyrus.mc
+%{__install} -m 644 %{SOURCE29} doc/m4/%{name}-sendmail-8.12.9-cyrusv2.m4
# modify lmtp socket path in .conf files
%{__perl} -pi -e "s@/var/imap/@%{_vardata}/@" %{_confdir}/*.conf doc/cyrusv2.mc doc/m4/%{name}-sendmail-8.12.9-cyrusv2.m4
@@ -378,7 +373,7 @@
%endif
%install
-[ "%{buildroot}" != "/" ] && %{__rm} -rf %{buildroot}
+%{__rm} -rf %{buildroot}
# This hack is needed on RedHat > 7.3 to install the perl files correctly
%if %{_perlhack}
@@ -441,19 +436,23 @@
find %{buildroot}%{_libdir}/perl5/ -type f -name "*.so" -exec %{__chmod} 755 {} \;
# Install config files
-%{__install} -m 644 %{_cyrusconf} %{buildroot}%{_sysconfdir}/cyrus.conf
-%{__install} -m 644 %{SOURCE6} %{buildroot}%{_sysconfdir}/imapd.conf
-%{__install} -m 644 %{SOURCE7} %{buildroot}%{_sysconfdir}/pam.d/pop
-%{__install} -m 644 %{SOURCE7} %{buildroot}%{_sysconfdir}/pam.d/imap
-%{__install} -m 644 %{SOURCE7} %{buildroot}%{_sysconfdir}/pam.d/sieve
-%{__install} -m 644 %{SOURCE7} %{buildroot}%{_sysconfdir}/pam.d/mupdate
-%{__install} -m 644 %{SOURCE7} %{buildroot}%{_sysconfdir}/pam.d/lmtp
-%{__install} -m 644 %{SOURCE7} %{buildroot}%{_sysconfdir}/pam.d/nntp
-%{__install} -m 644 %{SOURCE7} %{buildroot}%{_sysconfdir}/pam.d/csync
-%{__install} -m 644 %{SOURCE12} %{buildroot}%{_sysconfdir}/sysconfig/%{name}
-%{__install} -m 644 %{SOURCE5} %{buildroot}%{_sysconfdir}/logrotate.d/%{name}
-%{__install} -m 755 %{SOURCE25} %{buildroot}%{_sysconfdir}/cron.daily/%{name}
-%{__install} -m 755 %{SOURCE11} %{buildroot}%{_sysconfdir}/rc.d/init.d/%{name}
+%{__install} -p -m 644 %{_cyrusconf} %{buildroot}%{_sysconfdir}/cyrus.conf
+%{__install} -p -m 644 %{SOURCE6} %{buildroot}%{_sysconfdir}/imapd.conf
+%{__install} -p -m 644 %{SOURCE7} %{buildroot}%{_sysconfdir}/pam.d/pop
+%{__install} -p -m 644 %{SOURCE7} %{buildroot}%{_sysconfdir}/pam.d/imap
+%{__install} -p -m 644 %{SOURCE7} %{buildroot}%{_sysconfdir}/pam.d/sieve
+%{__install} -p -m 644 %{SOURCE7} %{buildroot}%{_sysconfdir}/pam.d/mupdate
+%{__install} -p -m 644 %{SOURCE7} %{buildroot}%{_sysconfdir}/pam.d/lmtp
+%{__install} -p -m 644 %{SOURCE7} %{buildroot}%{_sysconfdir}/pam.d/nntp
+%{__install} -p -m 644 %{SOURCE7} %{buildroot}%{_sysconfdir}/pam.d/csync
+%{__install} -p -m 644 %{SOURCE12} %{buildroot}%{_sysconfdir}/sysconfig/%{name}
+%{__install} -p -m 644 %{SOURCE5} %{buildroot}%{_sysconfdir}/logrotate.d/%{name}
+%{__install} -p -m 755 %{SOURCE25} %{buildroot}%{_sysconfdir}/cron.daily/%{name}
+%{__install} -p -m 755 %{SOURCE11} %{buildroot}%{_sysconfdir}/rc.d/init.d/%{name}
+
+# fix conflicts with uw-imap
+mv %{buildroot}%{_mandir}/man8/imapd.8 %{buildroot}%{_mandir}/man8/imapd.8cyrus
+mv %{buildroot}%{_mandir}/man8/pop3d.8 %{buildroot}%{_mandir}/man8/pop3d.8cyrus
# Install templates
%{__install} -m 755 -d doc/conf
@@ -474,7 +473,7 @@
%{buildroot}%{_sysconfdir}/imapd.conf
%endif
-# Rename 'master' binary and manpage to avoid crash with postfix
+# Rename 'master' binary and manpage to avoid clash with postfix
%{__mv} -f %{buildroot}%{_cyrexecdir}/master %{buildroot}%{_cyrexecdir}/cyrus-master
%{__mv} -f %{buildroot}%{_mandir}/man8/master.8 %{buildroot}%{_mandir}/man8/cyrus-master.8
%{__mv} -f doc/man/master.8.html doc/man/cyrus-master.8.html
@@ -485,7 +484,7 @@
%{__perl} -pi -e 's/Master/Cyrus-master/g' doc/man/cyrus-master.8.html
%{__perl} -pi -e 's/MASTER/CYRUS-MASTER/g' doc/man/cyrus-master.8.html
-# Rename 'fetchnews' binary and manpage to avoid crash with leafnode
+# Rename 'fetchnews' binary and manpage to avoid clash with leafnode
%{__mv} -f %{buildroot}%{_cyrexecdir}/fetchnews %{buildroot}%{_cyrexecdir}/cyrfetchnews
%{__mv} -f %{buildroot}%{_mandir}/man8/fetchnews.8 %{buildroot}%{_mandir}/man8/cyrfetchnews.8
%{__mv} -f doc/man/fetchnews.8.html doc/man/cyrfetchnews.8.html
@@ -528,7 +527,7 @@
%{__rm} -f /perllocal.pod
%clean
-[ "%{buildroot}" != "/" ] && %{__rm} -rf %{buildroot}
+%{__rm} -rf %{buildroot}
%pre
# Let postun know whether cyrus-imapd was running
@@ -576,34 +575,6 @@
%{_sysconfdir}/imapd.conf
%endif
-%preun
-if [ $1 = 0 ]; then
- /sbin/service %{name} stop >/dev/null 2>&1 || :
- /sbin/chkconfig --del %{name}
- %{__rm} -f %{_vardata}/socket/* 2> /dev/null
- %{__rm} -f %{_vardata}/proc/* 2> /dev/null
-%if %{_withldap}
- %{__rm} -f %{_vardata}/ptclient/ptsock 2> /dev/null
-%endif
-fi
-
-%postun
-if [ $1 != 0 ]; then
- /sbin/service %{name} condrestart >/dev/null 2>&1 || :
-fi
-
-%pre utils
-# Create 'cyrus' user on target host
-%if %{SASLGROUP}
-/usr/sbin/groupadd -g %{gid} -r %{_saslgroup} 2> /dev/null || :
-/usr/sbin/useradd -c "Cyrus IMAP Server" -d %{_vardata} -g %{_cyrusgroup} \
- -G %{_saslgroup} -s /bin/bash -u %{uid} -r %{_cyrususer} 2> /dev/null || :
-%else
-/usr/sbin/useradd -c "Cyrus IMAP Server" -d %{_vardata} -g %{_cyrusgroup} \
- -s /bin/bash -u %{uid} -r %{_cyrususer} 2> /dev/null || :
-%endif
-
-%post utils
# Create SSL certificates
exec > /dev/null 2> /dev/null
%if %{use_etc_pki}
@@ -632,6 +603,34 @@
popd
fi
+%preun
+if [ $1 = 0 ]; then
+ /sbin/service %{name} stop >/dev/null 2>&1 || :
+ /sbin/chkconfig --del %{name}
+ %{__rm} -f %{_vardata}/socket/* 2> /dev/null
+ %{__rm} -f %{_vardata}/proc/* 2> /dev/null
+%if %{_withldap}
+ %{__rm} -f %{_vardata}/ptclient/ptsock 2> /dev/null
+%endif
+fi
+
+%postun
+if [ $1 != 0 ]; then
+ /sbin/service %{name} condrestart >/dev/null 2>&1 || :
+fi
+
+%pre utils
+# Create 'cyrus' user on target host
+%if %{SASLGROUP}
+/usr/sbin/groupadd -g %{gid} -r %{_saslgroup} 2> /dev/null || :
+/usr/sbin/useradd -c "Cyrus IMAP Server" -d %{_vardata} -g %{_cyrusgroup} \
+ -G %{_saslgroup} -s /bin/bash -u %{uid} -r %{_cyrususer} 2> /dev/null || :
+%else
+/usr/sbin/useradd -c "Cyrus IMAP Server" -d %{_vardata} -g %{_cyrusgroup} \
+ -s /bin/bash -u %{uid} -r %{_cyrususer} 2> /dev/null || :
+%endif
+
+%post utils
# Add service entries if necessary
if ! %{__grep} -q ^lmtp %{_sysconfdir}/services; then
echo -e 'lmtp\t\t24/tcp\t\t\t\t# LMTP Mail Delivery over TCP' >> %{_sysconfdir}/services
@@ -679,8 +678,8 @@
%defattr(0644,root,root,0755)
%config(noreplace) %{_sysconfdir}/cyrus.conf
%config(noreplace) %{_sysconfdir}/imapd.conf
-%attr(0755,root,root) %config %{_sysconfdir}/rc.d/init.d/%{name}
-%config %{_sysconfdir}/logrotate.d/%{name}
+%attr(0755,root,root) %{_sysconfdir}/rc.d/init.d/%{name}
+%{_sysconfdir}/logrotate.d/%{name}
%config(noreplace) %{_sysconfdir}/sysconfig/%{name}
%config(noreplace) %{_sysconfdir}/pam.d/pop
%config(noreplace) %{_sysconfdir}/pam.d/imap
@@ -689,7 +688,7 @@
%config(noreplace) %{_sysconfdir}/pam.d/mupdate
%config(noreplace) %{_sysconfdir}/pam.d/csync
%config(noreplace) %{_sysconfdir}/pam.d/nntp
-%attr(0755,root,root) %config %{_sysconfdir}/cron.daily/%{name}
+%attr(0755,root,root) %{_sysconfdir}/cron.daily/%{name}
%dir %{_cyrexecdir}
%attr(0755,root,root) %{_cyrexecdir}/arbitron
%attr(0755,root,root) %{_cyrexecdir}/arbitronsort.pl
@@ -701,6 +700,7 @@
%attr(0755,root,root) %{_cyrexecdir}/cvt_cyrusdb
%attr(0755,root,root) %{_cyrexecdir}/cyr_dbtool
%attr(0755,root,root) %{_cyrexecdir}/cyr_expire
+%attr(0755,root,root) %{_cyrexecdir}/cyr_synclog
%attr(0755,root,root) %{_cyrexecdir}/cyrdump
%attr(0755,root,root) %{_cyrexecdir}/cyrus-master
%attr(0755,root,root) %{_cyrexecdir}/deliver
@@ -710,6 +710,7 @@
%attr(0755,root,root) %{_cyrexecdir}/ipurge
%attr(0755,root,root) %{_cyrexecdir}/lmtpd
%attr(0755,root,root) %{_cyrexecdir}/lmtpproxyd
+%attr(0755,root,root) %{_cyrexecdir}/make_sha1
%attr(0755,root,root) %{_cyrexecdir}/masssievec
%attr(0755,root,root) %{_cyrexecdir}/mbexamine
%attr(0755,root,root) %{_cyrexecdir}/mbpath
@@ -803,6 +804,26 @@
%{_mandir}/man1/*
%changelog
+* Tue Mar 25 2008 Tomas Janousek <tjanouse at redhat.com> - 2.3.11-1
+- update to latest upstream
+- (temporarily) dropped the rmquota+deletemailbox patch (doesn't apply)
+
+* Wed Mar 19 2008 Rex Dieter <rdieter at fedoraproject.org> - 2.3.9-12
+- cyrus-imapd conflicts with uw-imap (#222506)
+
+* Tue Mar 18 2008 Tom "spot" Callaway <tcallawa at redhat.com> - 2.3.9-11
+- add Requires for versioned perl (libperl.so)
+
+* Wed Feb 20 2008 Fedora Release Engineering <rel-eng at fedoraproject.org> - 2.3.9-10
+- Autorebuild for GCC 4.3
+
+* Fri Feb 08 2008 Tomas Janousek <tjanouse at redhat.com> - 2.3.9-9
+- don't run cronjob if cyrus-imapd has never been started (#418191)
+
+* Tue Dec 04 2007 Tomas Janousek <tjanouse at redhat.com> - 2.3.9-8
+- move certificate creation from -utils postinst to main package
+- rebuild with newer openssl and openldap
+
* Sun Sep 23 2007 Tomas Janousek <tjanouse at redhat.com> - 2.3.9-7
- updated the getgrouplist patch
- fixed a few undeclared functions (and int to pointer conversions)
Index: sources
===================================================================
RCS file: /cvs/extras/rpms/cyrus-imapd/F-8/sources,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- sources 22 Aug 2007 12:16:12 -0000 1.12
+++ sources 25 Mar 2008 10:27:37 -0000 1.13
@@ -1,3 +1,3 @@
8f7a26b0556369827bb5c8084a3e3ea1 cyrus_sharedbackup-0.1.tar.gz
-113433c1fdc777e3b0466b5ce643b8bc cyrus-imapd-2.3.9.tar.gz
-030f3c404f6a2e8d53cd08722bca0176 cyrus-imapd-2.3.9.tar.gz.sig
+df632eb2a89e36e6296e4abd687435ed cyrus-imapd-2.3.11.tar.gz
+ad1350a4e871f2287081de6c8d4aecf9 cyrus-imapd-2.3.11.tar.gz.sig
--- cyrus-imapd-2.3.9-autocreate-0.10-0.diff DELETED ---
--- cyrus-imapd-2.3.9-autosieve-0.6.0.diff DELETED ---
--- cyrus-imapd-2.3.9-getgrouplist.patch DELETED ---
--- cyrus-imapd-2.3.9-implicitdecl.patch DELETED ---
--- cyrus-imapd-2.3.9-myfatal.patch DELETED ---
- Previous message (by thread): rpms/bluez-libs/devel .cvsignore, 1.34, 1.35 bluez-libs.spec, 1.50, 1.51 sources, 1.34, 1.35
- Next message (by thread): rpms/bluez-utils/devel .cvsignore, 1.32, 1.33 bluez-utils.spec, 1.95, 1.96 sources, 1.32, 1.33
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the fedora-extras-commits
mailing list