diff -ruN cyrus-imapd/Makefile.in cyrus-imapd-2.0.15-HIERSEP-r2/Makefile.in
--- cyrus-imapd/Makefile.in	Sat Jul  7 20:54:14 2001
+++ cyrus-imapd-2.0.15-HIERSEP-r2/Makefile.in	Sun Jul  8 16:59:57 2001
@@ -1,5 +1,5 @@
 # Top-level Makefile for cyrus software
-# $Id: Makefile.in,v 1.48 2001/07/07 19:54:14 leg Exp $
+# $Id: Makefile.in,v 1.45.2.4.2.3 2001/07/08 15:59:57 ken3 Exp $
 #
 # @configure_input@
 # 
@@ -58,7 +58,7 @@
 exec_prefix = @exec_prefix@
 cyrus_prefix = @cyrus_prefix@
 
-VERSION = 2.0.15
+VERSION = 2.0.15-HIERSEP-r2
 
 all:: 
 	@for d in  $(SUBDIRS); \
@@ -88,7 +88,7 @@
 	if [ \! -d dist ]; then mkdir dist ; fi
 	@echo "checking out the distribution"
 	@cd dist ; cvs -Q -d :pserver:anoncvs@cvs.andrew.cmu.edu:/cvs \
-		co -d cyrus-imapd-$(VERSION) cyrus
+		co -d cyrus-imapd-$(VERSION) -r hier-sep  cyrus
 	touch distcvs
 
 install::
diff -ruN cyrus-imapd/contrib/notify_unix/README cyrus-imapd-2.0.15-HIERSEP-r2/contrib/notify_unix/README
--- cyrus-imapd/contrib/notify_unix/README	Sat Jun 23 02:01:48 2001
+++ cyrus-imapd-2.0.15-HIERSEP-r2/contrib/notify_unix/README	Thu Jan  1 01:00:00 1970
@@ -1,17 +0,0 @@
-This directory contains two simple examples of UNIX notification daemons
-written in Perl.  Both daemons require installing the
-Net::Server::Prefork module, located in this directory.
-
-The Perl script 'simple_notify.pl' simply logs mail notifications--it
-shows the simplest possible handler.
-
-The Perl script 'mysql_notify.pl' also logs the notification, but in
-addition it looks up the username in a DB table in order to get additional
-information about the user. This could be used, for example, to get a
-user's instant messaging address from a database in order to send a
-notification message.  'mysql_notify.pl' requires a file /etc/notify
-that contains three lines: the DSN, username, and password to connect
-to the database.
-
-The shell script 'notify' is a sample init.d script for
-starting/stopping the perl daemon.
diff -ruN cyrus-imapd/doc/install-configure.html cyrus-imapd-2.0.15-HIERSEP-r2/doc/install-configure.html
--- cyrus-imapd/doc/install-configure.html	Thu Jul  5 16:47:39 2001
+++ cyrus-imapd-2.0.15-HIERSEP-r2/doc/install-configure.html	Sun Jul  8 16:59:58 2001
@@ -1,4 +1,4 @@
-<!-- $Id: install-configure.html,v 1.10 2001/07/05 15:47:39 ken3 Exp $ -->
+<!-- $Id: install-configure.html,v 1.9.4.1.2.1 2001/07/08 15:59:58 ken3 Exp $ -->
 <HTML>
 <HEAD>
 <TITLE>Configuring the IMAP Server
@@ -89,7 +89,9 @@
 them to receive mail, some problems will occur if admins are used as
 regular users. You also should <b>not</b> read mail as an
 administrator. You should have separate accounts for reading mail and
-administrating.
+administrating.  This is especially true if using the
+<tt>altnamespace</tt> option, because admins are <b>always</b>
+presented with the standard (internal) namespace.
 
 <p><li>Create the configuration directory specified by the
 "<tt>configdirectory</tt>" option in "<tt>imapd.conf.</tt>" The
@@ -408,5 +410,5 @@
 name.</p>
 
 <P><HR>
-last modified: $Date: 2001/07/05 15:47:39 $
+last modified: $Date: 2001/07/08 15:59:58 $
 </BODY></HTML>
diff -ruN cyrus-imapd/doc/install-perf.html cyrus-imapd-2.0.15-HIERSEP-r2/doc/install-perf.html
--- cyrus-imapd/doc/install-perf.html	Tue May  1 03:00:07 2001
+++ cyrus-imapd-2.0.15-HIERSEP-r2/doc/install-perf.html	Sun Jul  8 16:59:58 2001
@@ -1,4 +1,4 @@
-<!-- $Id: install-perf.html,v 1.2 2001/05/01 02:00:07 wcw Exp $ -->
+<!-- $Id: install-perf.html,v 1.1.4.1.2.1 2001/07/08 15:59:58 ken3 Exp $ -->
 <HTML>
 <HEAD>
 <TITLE>Performance Notes
@@ -64,7 +64,7 @@
 </ul>
 
 <P><HR>
-last modified: $Date: 2001/05/01 02:00:07 $
+last modified: $Date: 2001/07/08 15:59:58 $
 </BODY></HTML>
 
 
diff -ruN cyrus-imapd/doc/install.html cyrus-imapd-2.0.15-HIERSEP-r2/doc/install.html
--- cyrus-imapd/doc/install.html	Mon Jul  2 17:11:34 2001
+++ cyrus-imapd-2.0.15-HIERSEP-r2/doc/install.html	Sun Jul  8 16:59:58 2001
@@ -1,4 +1,4 @@
-<!-- $Id: install.html,v 1.6 2001/07/02 16:11:34 wcw Exp $ -->
+<!-- $Id: install.html,v 1.5.6.1 2001/07/08 15:59:58 ken3 Exp $ -->
 <HTML>
 <HEAD>
 <TITLE>Installing and Configuring the Cyrus IMAP Server</TITLE>
@@ -56,7 +56,7 @@
 </ul>
 
 <P><HR>
-last modified: $Date: 2001/07/02 16:11:34 $
+last modified: $Date: 2001/07/08 15:59:58 $
 <br>
 <A HREF="index.html">Return</A> to the Cyrus IMAP Server Home Page
 </BODY></HTML>
diff -ruN cyrus-imapd/doc/man/arbitron.8.html cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/arbitron.8.html
--- cyrus-imapd/doc/man/arbitron.8.html	Thu Jan  1 01:00:00 1970
+++ cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/arbitron.8.html	Sun Jul  8 17:04:44 2001
@@ -0,0 +1,62 @@
+<html>
+<head>
+<meta name="Content-Style" content="text/css">
+</head>
+<body>
+<a href="#NAME">NAME</a><br>
+<a href="#SYNOPSIS">SYNOPSIS</a><br>
+<a href="#DESCRIPTION">DESCRIPTION</a><br>
+<a href="#OPTIONS">OPTIONS</a><br>
+<a href="#FILES">FILES</a><br>
+<a href="#/etc/imapd.conf">/etc/imapd.conf</a><br>
+<!-- Creator     : groff version 1.15  -->
+<!-- CreationDate: Sun Jul  8 12:04:44 2001
+ -->
+<!-- Total number of pages: 1 -->
+<!-- Page: 1 -->
+<!-- left  margin: 100 -->
+<!-- right margin: 750 -->
+<a name="NAME"></a><h2>NAME</h2><p><font size=3>arbitron - arbitron mailboxes</p>
+<a name="SYNOPSIS"></a><h2>SYNOPSIS</h2><p><font size=3><B>arbitron</B> <font size=3>[ <font size=3><B>-C</B> <font size=3><I>config-file</I> <font size=3>] [ <font size=3><B>-d</B> <font size=3>days ] [ <font size=3><B>-p</B> <font size=3>months ]<br>
+<span style=" text-indent: 0.2700in;"></span><I>mailbox</I><font size=3>...</p>
+<a name="DESCRIPTION"></a><h2>DESCRIPTION</h2><p><font size=3><I>Arbitron</I> <font size=3>collects and reports readership statistics for mailboxes on the server. It also optionally prunes the mail- boxes of \Seen state for dormant users.</p>
+<p><font size=3><I>Arbitron</I> <font size=3>produces one line of output per mailbox, reporting the number of readers followed by a space and the name of the mailbox. <font size=3><B>IMPORTANT: This format is subject to change in future versions.</p>
+</B><p><font size=3>Each "reader" is a distinct authentication identity which has "s" rights to the mailbox and which has SELECTed the mailbox within the past <font size=3><I>days</I> <font size=3>days. Users are not counted as reading their own personal mailboxes. Personal mailboxes are not reported unless there is at least one reader other than the mailboxes owner.</p>
+<p><font size=3><I>Arbitron</I> <font size=3>reads its configuration options out of the <font size=3><I>imapd.conf</I><font size=3>(5) file unless specified otherwise by <font size=3><B>-C</B><font size=3>.</p>
+<a name="OPTIONS"></a><h2>OPTIONS</h2>
+<table width="100%"  rules="none"  frame="none"  cols="3">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="12.6154%">
+<p><font size=3><B>-C</B> <font size=3><I>config-file</p>
+</I><p><font size=3><B>-d</B> <font size=3><I>days</p>
+</I></td>
+<td valign="top" align="left"  width="7.3846%">
+</td>
+<td valign="top" align="left"  width="80.0000%">
+<p><font size=3>Read configuration options from <font size=3><I>config-file</I><font size=3>.</p>
+<p><font size=3>Count as a reader an authentication identity which has SELECTed the mailbox within <font size=3><I>days</I> <font size=3>days. Default is 30.</p>
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="12.6154%">
+<p><font size=3><B>-p</B> <font size=3><I>months</p>
+</I></td>
+<td valign="top" align="left"  width="7.3846%">
+</td>
+<td valign="top" align="left"  width="80.0000%">
+<p><font size=3>Prune \Seen state for users who have not SELECTed the mailbox within <font size=3><I>months</I> <font size=3>months.<br>
+Default is infinity.</p>
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="12.6154%">
+</td>
+<td valign="top" align="left"  width="7.3846%">
+</td>
+<td valign="top" align="left"  width="80.0000%">
+</td>
+</tr>
+</table>
+<br>
+<a name="FILES"></a><h2>FILES</h2><a name="/etc/imapd.conf"></a><h2>/etc/imapd.conf</h2></body>
+</html>
diff -ruN cyrus-imapd/doc/man/collectnews.8.html cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/collectnews.8.html
--- cyrus-imapd/doc/man/collectnews.8.html	Thu Jan  1 01:00:00 1970
+++ cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/collectnews.8.html	Sun Jul  8 17:04:44 2001
@@ -0,0 +1,26 @@
+<html>
+<head>
+<meta name="Content-Style" content="text/css">
+</head>
+<body>
+<a href="#NAME">NAME</a><br>
+<a href="#SYNOPSIS">SYNOPSIS</a><br>
+<a href="#DESCRIPTION">DESCRIPTION</a><br>
+<a href="#OPTIONS">OPTIONS</a><br>
+<a href="#FILES">FILES</a><br>
+<a href="#/etc/imapd.conf">/etc/imapd.conf</a><br>
+<!-- Creator     : groff version 1.15  -->
+<!-- CreationDate: Sun Jul  8 12:04:44 2001
+ -->
+<!-- Total number of pages: 1 -->
+<!-- Page: 1 -->
+<!-- left  margin: 100 -->
+<!-- right margin: 750 -->
+<a name="NAME"></a><h2>NAME</h2><p><font size=3>collectnews - add news articles to Cyrus header files</p>
+<a name="SYNOPSIS"></a><h2>SYNOPSIS</h2><p><font size=3><B>collectnews</B> <font size=3>[ <font size=3><B>-C</B> <font size=3><I>config-file</I> <font size=3>]</p>
+<a name="DESCRIPTION"></a><h2>DESCRIPTION</h2><p><font size=3><I>Collectnews</I> <font size=3>reads article data from the standard input. It uses this information to update the files necessary for reading the articles through the Cyrus IMAP server. <font size=3><I>Collectnews</I> <font size=3>is designed to be used by InterNetNews to update the IMAP database as the articles come in.</p>
+<p><font size=3>The input is processed as an INN overview stream written as a ``WR'' entry in the <font size=3><I>newsfeeds</I><font size=3>(5) file. This data consists of lines of text of the format newsgroup/article number, seperated by commas.</p>
+<p><font size=3><I>Collectnews</I> <font size=3>reads its configuration options out of the <font size=3><I>imapd.conf</I><font size=3>(5) file unless specified otherwise by <font size=3><B>-C</B><font size=3>. The optional <font size=3><I>newsprefix</I> <font size=3>option specifies a prefix to be prepended to newsgroup names to make the corresponding IMAP mailbox names. The required <font size=3><I>partition-news</I> <font size=3>option specifies the pathname prefix to the IMAP news mail- boxes. The value of <font size=3><I>partition-news</I> <font size=3>concatenated with the dots-to-slashes-converted value of <font size=3><I>newsprefix</I> <font size=3>must be the pathname of the news spool directory.</p>
+<a name="OPTIONS"></a><h2>OPTIONS</h2><p><font size=3><B>-C</B> <font size=3><I>config-file</I> <font size=3>Read configuration options from <font size=3><I>config-file</I><font size=3>.</p>
+<a name="FILES"></a><h2>FILES</h2><a name="/etc/imapd.conf"></a><h2>/etc/imapd.conf</h2></body>
+</html>
diff -ruN cyrus-imapd/doc/man/ctl_deliver.8.html cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/ctl_deliver.8.html
--- cyrus-imapd/doc/man/ctl_deliver.8.html	Thu Jan  1 01:00:00 1970
+++ cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/ctl_deliver.8.html	Sun Jul  8 17:04:44 2001
@@ -0,0 +1,51 @@
+<html>
+<head>
+<meta name="Content-Style" content="text/css">
+</head>
+<body>
+<a href="#NAME">NAME</a><br>
+<a href="#SYNOPSIS">SYNOPSIS</a><br>
+<a href="#DESCRIPTION">DESCRIPTION</a><br>
+<a href="#OPTIONS">OPTIONS</a><br>
+<a href="#FILES">FILES</a><br>
+<a href="#/etc/imapd.conf">/etc/imapd.conf</a><br>
+<a href="#SEE ALSO">SEE ALSO</a><br>
+<!-- Creator     : groff version 1.15  -->
+<!-- CreationDate: Sun Jul  8 12:04:44 2001
+ -->
+<!-- Total number of pages: 1 -->
+<!-- Page: 1 -->
+<!-- left  margin: 100 -->
+<!-- right margin: 699 -->
+<a name="NAME"></a><h2>NAME</h2><p><font size=3>ctl_deliver - perform operations on the duplicate delivery database</p>
+<a name="SYNOPSIS"></a><h2>SYNOPSIS</h2><p><font size=3><B>ctl_deliver</B> <font size=3>[ <font size=3><B>-C</B> <font size=3><I>config-file</I> <font size=3>] <font size=3><B>-r<br>
+ctl_deliver</B> <font size=3>[ <font size=3><B>-C</B> <font size=3><I>config-file</I> <font size=3>] <font size=3><B>-E</B> <font size=3><I>days<br>
+</I><B>ctl_deliver</B> <font size=3>[ <font size=3><B>-C</B> <font size=3><I>config-file</I> <font size=3>] <font size=3><B>-d -f</B> <font size=3><I>filename</p>
+</I><a name="DESCRIPTION"></a><h2>DESCRIPTION</h2><p><font size=3><I>Ctl_deliver</I> <font size=3>is used to perform various administrative operations on the duplicate delivery database.</p>
+<p><font size=3><I>Ctl_deliver</I> <font size=3>reads its configuration options out of the <font size=3><I>imapd.conf</I><font size=3>(5) file unless specified otherwise by <font size=3><B>-C</B><font size=3>.</p>
+<a name="OPTIONS"></a><h2>OPTIONS</h2>
+<table width="100%"  rules="none"  frame="none"  cols="3">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="13.6895%">
+<p><font size=3><B>-C</B> <font size=3><I>config-file</p>
+</I><p><font size=3><B>-r</p>
+</B><p><font size=3><B>-E</B> <font size=3><I>days</p>
+</I><p><font size=3><B>-d</p>
+</B><p><font size=3><B>-f</B> <font size=3><I>filename</p>
+</I></td>
+<td valign="top" align="left"  width="8.0134%">
+</td>
+<td valign="top" align="left"  width="78.2972%">
+<p><font size=3>Read configuration options from <font size=3><I>config-file</I><font size=3>.</p>
+<p><font size=3>Recover the database after an application or system failure.</p>
+<p><font size=3>Prune the database of entries older than <font size=3><I>days</I><font size=3>.</p>
+<p><font size=3>Dump the contents of the database to standard output in a portable flat-text format.</p>
+<p><font size=3>Use the database specified by <font size=3><I>filename</I><font size=3>.</p>
+</td>
+</tr>
+</table>
+<br>
+<a name="FILES"></a><h2>FILES</h2><a name="/etc/imapd.conf"></a><h2>/etc/imapd.conf</h2><a name="SEE ALSO"></a><h2>SEE ALSO</h2><p><font size=3><B>imapd.conf(5)</B><font size=3>, <font size=3><B>master(8)</B><br>
+</p>
+</body>
+</html>
diff -ruN cyrus-imapd/doc/man/ctl_mboxlist.8.html cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/ctl_mboxlist.8.html
--- cyrus-imapd/doc/man/ctl_mboxlist.8.html	Thu Jan  1 01:00:00 1970
+++ cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/ctl_mboxlist.8.html	Sun Jul  8 17:04:44 2001
@@ -0,0 +1,88 @@
+<html>
+<head>
+<meta name="Content-Style" content="text/css">
+</head>
+<body>
+<a href="#NAME">NAME</a><br>
+<a href="#SYNOPSIS">SYNOPSIS</a><br>
+<a href="#DESCRIPTION">DESCRIPTION</a><br>
+<a href="#OPTIONS">OPTIONS</a><br>
+<a href="#FILES">FILES</a><br>
+<a href="#/etc/imapd.conf">/etc/imapd.conf</a><br>
+<a href="#SEE ALSO">SEE ALSO</a><br>
+<!-- Creator     : groff version 1.15  -->
+<!-- CreationDate: Sun Jul  8 12:04:44 2001
+ -->
+<!-- Total number of pages: 1 -->
+<!-- Page: 1 -->
+<!-- left  margin: 100 -->
+<!-- right margin: 750 -->
+<a name="NAME"></a><h2>NAME</h2><p><font size=3>ctl_mboxlist - perform operations on the mailbox list database</p>
+<a name="SYNOPSIS"></a><h2>SYNOPSIS</h2>
+<table width="100%"  rules="none"  frame="none"  cols="2">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="43.3846%">
+<p><font size=3><B>ctl_mboxlist</B> <font size=3>[ <font size=3><B>-C</B> <font size=3><I>config-file</I> <font size=3>] <font size=3><B>-r<br>
+ctl_mboxlist</B> <font size=3>[ <font size=3><B>-C</B> <font size=3><I>config-file</I> <font size=3>] <font size=3><B>-c<br>
+ctl_mboxlist</B> <font size=3>[ <font size=3><B>-C</B> <font size=3><I>config-file</I> <font size=3>] <font size=3><B>-d</B> <font size=3>[ <font size=3><B>-f</B> <font size=3><I>filename</I> <font size=3>] <font size=3><B>ctl_mboxlist</B> <font size=3>[ <font size=3><B>-C</B> <font size=3><I>config-file</I> <font size=3>] <font size=3><B>-u</B> <font size=3>[ <font size=3><B>-f</B> <font size=3><I>filename</I> <font size=3>]</p>
+</td>
+<td valign="top" align="left"  width="56.6154%">
+</td>
+</tr>
+</table>
+<br>
+<a name="DESCRIPTION"></a><h2>DESCRIPTION</h2><p><font size=3><I>Ctl_mboxlist</I> <font size=3>is used to perform various administrative operations on the mailbox list database.</p>
+<p><font size=3><I>Ctl_mboxlist</I> <font size=3>reads its configuration options out of the <font size=3><I>imapd.conf</I><font size=3>(5) file unless specified otherwise by <font size=3><B>-C</B><font size=3>. The <font size=3><I>configdirectory</I> <font size=3>option is used to determine the default location of the mailbox list database.</p>
+<a name="OPTIONS"></a><h2>OPTIONS</h2>
+<table width="100%"  rules="none"  frame="none"  cols="3">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="12.6154%">
+<p><font size=3><B>-C</B> <font size=3><I>config-file</p>
+</I><p><font size=3><B>-r</p>
+</B><p><font size=3><B>-c</p>
+</B></td>
+<td valign="top" align="left"  width="7.3846%">
+</td>
+<td valign="top" align="left"  width="80.0000%">
+<p><font size=3>Read configuration options from <font size=3><I>config-file</I><font size=3>.</p>
+<p><font size=3>Recover the database after an application or system failure.</p>
+<p><font size=3>Checkpoint the database. Changes to the database which are part of committed transac- tions are written to disk.</p>
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="12.6154%">
+<p><font size=3><B>-d</p>
+</B><p><font size=3><B>-u</p>
+</B></td>
+<td valign="top" align="left"  width="7.3846%">
+</td>
+<td valign="top" align="left"  width="80.0000%">
+<p><font size=3>Dump the contents of the database to standard output in a portable flat-text format.</p>
+<p><font size=3>Load the contents of the database from standard input. The input MUST be in the format output using the <font size=3><B>-d</B> <font size=3>option.</p>
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="12.6154%">
+<p><font size=3><B>-f</B> <font size=3><I>filename</p>
+</I></td>
+<td valign="top" align="left"  width="7.3846%">
+</td>
+<td valign="top" align="left"  width="80.0000%">
+<p><font size=3>Use the database specified by <font size=3><I>filename</I> <font size=3>instead of the default (<font size=3><I>configdirectory</I><font size=3><B>/mail-<br>
+boxes.db</B><font size=3>).</p>
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="12.6154%">
+</td>
+<td valign="top" align="left"  width="7.3846%">
+</td>
+<td valign="top" align="left"  width="80.0000%">
+</td>
+</tr>
+</table>
+<br>
+<a name="FILES"></a><h2>FILES</h2><a name="/etc/imapd.conf"></a><h2>/etc/imapd.conf</h2><a name="SEE ALSO"></a><h2>SEE ALSO</h2><p><font size=3><B>imapd.conf(5)</B><font size=3>, <font size=3><B>master(8)</B><br>
+</p>
+</body>
+</html>
diff -ruN cyrus-imapd/doc/man/cyradm.1.html cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/cyradm.1.html
--- cyrus-imapd/doc/man/cyradm.1.html	Thu Jan  1 01:00:00 1970
+++ cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/cyradm.1.html	Sun Jul  8 17:04:45 2001
@@ -0,0 +1,319 @@
+<html>
+<head>
+<meta name="Content-Style" content="text/css">
+</head>
+<body>
+<a href="#COMMANDS FOR TCL SCRIPTS">COMMANDS FOR TCL SCRIPTS</a><br>
+<!-- Creator     : groff version 1.15  -->
+<!-- CreationDate: Sun Jul  8 12:04:45 2001
+ -->
+<!-- Total number of pages: 3 -->
+<!-- Page: 1 -->
+<!-- left  margin: 91 -->
+<!-- right margin: 759 -->
+<p align=center><img src="groff-html-1-21534.png" align="middle">
+<br>
+</p>
+
+<table width="100%"  rules="none"  frame="none"  cols="5">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="1.3473%">
+</td>
+<td valign="top" align="left"  width="9.5808%">
+<p><font size=2><B>OPTIONS<br>
+<font size=3><B>-file</B> <font size=3><I>script</p>
+</I></td>
+<td valign="top" align="left"  width="3.8922%">
+</td>
+<td valign="top" align="left"  width="27.5449%">
+<br>
+<p><font size=3>Execute commands from <font size=3><I>script</I><font size=3>.</p>
+</td>
+<td valign="top" align="left"  width="57.6347%">
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="1.3473%">
+</td>
+<td valign="top" align="left"  width="9.5808%">
+<p><font size=3><B>-user</B> <font size=3><I>user</p>
+</I><p><font size=3><B>-u</B> <font size=3><I>user</p>
+</I></td>
+<td valign="top" align="left"  width="3.8922%">
+</td>
+<td valign="top" align="left"  width="27.5449%">
+<p><font size=3>Log in to the server as <font size=3><I>user</I><font size=3>.</p>
+<p><font size=3>Short form of <font size=3><B>-user</B> <font size=3><I>user</I><font size=3>.</p>
+</td>
+<td valign="top" align="left"  width="57.6347%">
+</td>
+</tr>
+</table>
+
+<table width="100%"  rules="none"  frame="none"  cols="3">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="1.3473%">
+</td>
+<td valign="top" align="left"  width="97.3054%">
+<p><font size=3><B>-layers</B> <font size=3><I>number<br>
+<span style=" text-indent: 0.9000in;"></span></I>Specify the maximum allowable protection layer for the connection. 0 corresponds to no protec-<br>
+<span style=" text-indent: 0.9000in;"></span>tion, 1 to integrity protection, and more for n bits of privacy protection. Default is 10000, allowing<br>
+<span style=" text-indent: 0.9000in;"></span>virtually any protection mechanism.</p>
+<p><font size=3><B>-l</B> <font size=3><I>number</I> <font size=3>Short form of <font size=3><B>-layers</B> <font size=3><I>prot</I><font size=3>.</p>
+<p><font size=3><B>-mech</B> <font size=3><I>mechanism<br>
+<span style=" text-indent: 0.9000in;"></span></I>Specify the SASL mechanism to use for authentication.</p>
+<p><font size=3><B>-m</B> <font size=3><I>mechanism<br>
+<span style=" text-indent: 0.9000in;"></span></I>Short form of <font size=3><B>-mech</B> <font size=3><I>mechanism</I><font size=3>.</p>
+<p><font size=2><B>DESCRIPTION<br>
+<font size=3><B>Cyradm</B> <font size=3>is a simple Tcl-based administrative client for the Cyrus IMAP server. If invoked with a script, <font size=3><B>cyradm</B> <font size=3>reads Tcl commands from the file <font size=3><I>script</I> <font size=3>and evaluates them.</p>
+<p><font size=3>If invoked with <font size=3><I>host</I><font size=3>, <font size=3><B>cyradm</B> <font size=3>runs in interactive mode, connecting to <font size=3><I>host</I> <font size=3>on port <font size=3><I>port</I><font size=3>, authenticating, and then reading commands from the standard input and evaluating them. <font size=3><I>Port</I> <font size=3>defaults to the standard IMAP port. <font size=3><B>Cyradm</B> <font size=3>runs until the <font size=3><B>exit</B> <font size=3>command is invoked or until it reaches end-of-file on its standard input. If the file <font size=3><B>.cyradmrc</B> <font size=3>is in the home directory of the user, <font size=3><B>cyradm</B> <font size=3>evaluates the file as a Tcl script just before reading the first command from standard input, after connecting and authenticating to <font size=3><I>server</I><font size=3>.</p>
+<p><font size=2><B>INTERACTIVE COMMANDS<br>
+</B><font size=3>The following commands are available only in interactive mode. In all commands, a <font size=3><I>mailbox</I> <font size=3>or <font size=3><I>root</I> <font size=3>of ``.'' speci- fies the same mailbox used previously in that connection.</p>
+<p><font size=3><B>createmailbox</B> <font size=3><I>mailbox</I> <font size=3>[<font size=3><I>partition</I><font size=3>]<br>
+<span style=" text-indent: 0.3000in;"></span>The <font size=3><B>createmailbox</B> <font size=3>(or <font size=3><B>cm</B><font size=3>) command creates a new mailbox named <font size=3><I>mailbox</I><font size=3>. The optional <font size=3><I>partition</I> <font size=3>argu-<br>
+<span style=" text-indent: 0.3000in;"></span>ment specifies the partition name on which to create the mailbox.</p>
+<p><font size=3><B>deletemailbox</B> <font size=3><I>mailbox<br>
+<span style=" text-indent: 0.3000in;"></span></I>The <font size=3><B>deletemailbox</B> <font size=3>(or <font size=3><B>dm</B><font size=3>) command deletes the named mailbox.</p>
+<p><span style=" text-indent: 0.3000in;"></span><font size=3>Since administrators don't have implicit delete rights on all mailboxes, they may need to use <font size=3><B>setaclmailbox</B> <font size=3>to<br>
+<span style=" text-indent: 0.3000in;"></span>give themselves delete rights before trying to delete a mailbox.</p>
+<p><font size=3><B>renamemailbox</B> <font size=3><I>mailbox newmailbox</I> <font size=3>[<font size=3><I>partition</I><font size=3>]<br>
+<span style=" text-indent: 0.3000in;"></span>The <font size=3><B>renamemailbox</B> <font size=3>(or <font size=3><B>renm</B><font size=3>) command renames the named mailbox to <font size=3><I>newmailbox</I><font size=3>. The optional <font size=3><I>parti-<br>
+<span style=" text-indent: 0.3000in;"></span>tion</I> <font size=3>argument specifies the partition name on which to move the mailbox.</p>
+<p><font size=3><B>listmailbox [</B><font size=3><I>-subscribed</I><font size=3>] [<font size=3><I>pattern</I><font size=3>] [<font size=3><I>reference</I><font size=3>]<br>
+<span style=" text-indent: 0.3000in;"></span>The <font size=3><B>listmailbox</B> <font size=3>(or <font size=3><B>lm</B><font size=3>) command returns a list of mailbox names matching the string <font size=3><I>pattern</I><font size=3>. If <font size=3><I>pattern</I> <font size=3>is<br>
+<span style=" text-indent: 0.3000in;"></span>omitted, it defaults to ``*''. The optional <font size=3><I>reference</I> <font size=3>argument specifies the reference name relative to which<br>
+<span style=" text-indent: 0.3000in;"></span><I>pattern</I> <font size=3>is then interpreted.</p>
+<p><span style=" text-indent: 0.3000in;"></span><font size=3>Two wildcard characters are defined in <font size=3><I>pattern</I><font size=3>. The ``*'' wildcard matches zero or more characters. The<br>
+<span style=" text-indent: 0.3000in;"></span>``%'' wildcard is like the ``*'' wildcard except that it will not match the hierarchy separator, ``.''. For exam-<br>
+<span style=" text-indent: 0.3000in;"></span>ple, if ``listmailbox user.foo.%'' is specified, and the mailboxes ``user.foo.bar'' and ``user.foo.bar.old'' both<br>
+<span style=" text-indent: 0.3000in;"></span>exist, then ``user.foo.bar'' is listed, but ``user.foo.bar.old'' is not.</p>
+<p><span style=" text-indent: 0.3000in;"></span><font size=3>In some cases, where ``%'' is used as the last character of a pattern, non-mailbox names are listed in paren-<br>
+<span style=" text-indent: 0.3000in;"></span>theses. This indicates that the name is not actually a mailbox, yet there are sub-mailboxes underneath that<br>
+<span style=" text-indent: 0.3000in;"></span>name. For example, if ``listmailbox user.foo.%'' is specified, and the mailbox ``user.foo.bar.old'' exists, but<br>
+<span style=" text-indent: 0.3000in;"></span>``user.foo.bar'' does <font size=3><B>not</B> <font size=3>exist, then ``(user.foo.bar)'' is listed.</p>
+</td>
+<td valign="top" align="left"  width="1.3473%">
+</td>
+</tr>
+</table>
+
+<!-- Page: 2  -->
+<!-- left  margin: 100 -->
+<!-- right margin: 750 -->
+<p><font size=3><B>setaclmailbox</B> <font size=3><I>mailbox identifier rights</I> <font size=3>[<font size=3><I>identifier rights</I><font size=3>]...<br>
+<span style=" text-indent: 0.3000in;"></span>The <font size=3><B>setaclmailbox</B> <font size=3>(or <font size=3><B>sam</B><font size=3>) command modifies the access control list of the mailbox <font size=3><I>mailbox</I><font size=3>. One or more<br>
+<span style=" text-indent: 0.3000in;"></span><I>identifier</I><font size=3>-<font size=3><I>rights</I> <font size=3>pairs may be given after <font size=3><I>mailbox</I><font size=3>, each sets the ACL for <font size=3><I>identifier</I> <font size=3>to <font size=3><I>rights</I><font size=3>.</p>
+<p><span style=" text-indent: 0.3000in;"></span><font size=3><I>Rights</I> <font size=3>may be a set of access right letters:</p>
+
+<table width="100%"  rules="none"  frame="none"  cols="4">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="3.6923%">
+</td>
+<td valign="top" align="left"  width="1.5385%">
+<p><font size=3><B>l</p>
+</B><p><font size=3><B>r</p>
+</B></td>
+<td valign="top" align="left"  width="18.4615%">
+</td>
+<td valign="top" align="left"  width="76.3077%">
+<p><font size=3>lookup (mailbox is visible to LIST/LSUB/UNSEEN commands)</p>
+<p><font size=3>read (SELECT the mailbox, perform CHECK, FETCH, PARTIAL, SEARCH, COPY<br>
+from mailbox)</p>
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="3.6923%">
+</td>
+<td valign="top" align="left"  width="1.5385%">
+<p><font size=3><B>s</p>
+</B><p><font size=3><B>w</p>
+</B><p><font size=3><B>i</p>
+</B><p><font size=3><B>p</p>
+</B><p><font size=3><B>c</p>
+</B><p><font size=3><B>d</p>
+</B><p><font size=3><B>a</p>
+</B></td>
+<td valign="top" align="left"  width="18.4615%">
+</td>
+<td valign="top" align="left"  width="76.3077%">
+<p><font size=3>keep seen/unseen information across sessions (STORE \SEEN flag)</p>
+<p><font size=3>write (STORE flags other than \SEEN and \DELETED)</p>
+<p><font size=3>insert (perform APPEND, COPY into mailbox)</p>
+<p><font size=3>post (send mail to submission address for mailbox)</p>
+<p><font size=3>create (CREATE new sub-mailboxes in any implementation-defined hierarchy)</p>
+<p><font size=3>delete (STORE \DELETED flag, perform EXPUNGE)</p>
+<p><font size=3>administer (perform SETACL)</p>
+</td>
+</tr>
+</table>
+<p><font size=3>or one of the following words:</p>
+
+<table width="100%"  rules="none"  frame="none"  cols="5">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="3.6923%">
+</td>
+<td valign="top" align="left"  width="6.7692%">
+<p><font size=3><B>none</p>
+</B><p><font size=3><B>read</p>
+</B><p><font size=3><B>post</p>
+</B><p><font size=3><B>append</p>
+</B><p><font size=3><B>write</p>
+</B><p><font size=3><B>all</p>
+</B></td>
+<td valign="top" align="left"  width="2.4615%">
+</td>
+<td valign="top" align="left"  width="8.6154%">
+<p><font size=3>""</p>
+<p><font size=3>lrs</p>
+<p><font size=3>lrsp</p>
+<p><font size=3>lrsip</p>
+<p><font size=3>lrswipcd</p>
+<p><font size=3>lrswipcda</p>
+</td>
+<td valign="top" align="left"  width="78.4615%">
+</td>
+</tr>
+</table>
+<p><font size=3><B>deleteaclmailbox</B> <font size=3><I>mailbox identifier</I> <font size=3>[<font size=3><I>identifier</I><font size=3>]...<br>
+<span style=" text-indent: 0.3000in;"></span>The <font size=3><B>deleteaclmailbox</B> <font size=3>(or <font size=3><B>dam</B><font size=3>) command modifies the access control list of <font size=3><I>mailbox</I><font size=3>. One or more <font size=3><I>identi-<br>
+<span style=" text-indent: 0.3000in;"></span>fier</I><font size=3>s may be specified, each <font size=3><I>identifier</I> <font size=3>has its access control entry removed.</p>
+<p><font size=3><B>listaclmailbox</B> <font size=3><I>mailbox<br>
+<span style=" text-indent: 0.3000in;"></span></I>The <font size=3><B>listaclmailbox</B> <font size=3>(or <font size=3><B>lam</B><font size=3>) command returns a string containing the access control list of the mailbox <font size=3><I>mail-<br>
+<span style=" text-indent: 0.3000in;"></span>box</I><font size=3>.</p>
+<p><font size=3><B>setquota</B> <font size=3><I>root quota</I><font size=3>...<br>
+<span style=" text-indent: 0.3000in;"></span>The <font size=3><B>setquota</B> <font size=3>(or <font size=3><B>sq</B><font size=3>) command sets the limit on the quota root <font size=3><I>root</I> <font size=3>to <font size=3><I>quota</I><font size=3>. The <font size=3><I>quota</I> <font size=3>is one of the follow-<br>
+<span style=" text-indent: 0.3000in;"></span>ing:</p>
+
+<table width="100%"  rules="none"  frame="none"  cols="4">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="4.6154%">
+</td>
+<td valign="top" align="left"  width="1.0000%">
+<p><font size=3>-</p>
+<p><font size=3>-</p>
+</td>
+<td valign="top" align="left"  width="2.1538%">
+</td>
+<td valign="top" align="left"  width="92.6154%">
+<p><font size=3>A single numeric value, limiting the use of storage to that value</p>
+<p><font size=3>A list of one or more <font size=3><I>resource</I><font size=3>-<font size=3><I>value</I> <font size=3>pairs, limiting the use of each given <font size=3><I>resource</I> <font size=3>to the given numeric<br>
+<I>value</I><font size=3>. The Cyrus server does not support resources other than storage.</p>
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="4.6154%">
+</td>
+<td valign="top" align="left"  width="1.0000%">
+<p><font size=3>-</p>
+</td>
+<td valign="top" align="left"  width="2.1538%">
+</td>
+<td valign="top" align="left"  width="92.6154%">
+<p><font size=3><B>none</B><font size=3>, specifying no limits whatsoever</p>
+</td>
+</tr>
+</table>
+<p><font size=3><B>listquota</B> <font size=3><I>root<br>
+<span style=" text-indent: 0.3000in;"></span></I>The <font size=3><B>listquota</B> <font size=3>(or <font size=3><B>lq</B><font size=3>) command returns a string listing the quotas on the quota root <font size=3><I>root</I><font size=3>.</p>
+<p><font size=3><B>listquotaroot</B> <font size=3><I>mailbox<br>
+<span style=" text-indent: 0.3000in;"></span></I>The <font size=3><B>listquotaroot</B> <font size=3>(or <font size=3><B>lqr</B> <font size=3>or <font size=3><B>lqm</B><font size=3>) command returns a string listing the quota roots and quotas on the mailbox<br>
+<span style=" text-indent: 0.3000in;"></span><I>mailbox</I><font size=3>.</p>
+<p><font size=3><B>quit</B> <font size=3>Same as the Tcl command <font size=3><B>exit</B><font size=3>. Close the connection and exit <font size=3><B>cyradm</B><font size=3>.</p>
+<a name="COMMANDS FOR TCL SCRIPTS"></a><h2>COMMANDS FOR TCL SCRIPTS</h2><p><font size=3><B>Cyradm</B> <font size=3>adds one command to the standard Tcl command set.</p>
+<p><font size=3><B>cyradm connect</B> <font size=3><I>connection</I> <font size=3>[<font size=3><I>host</I><font size=3>] [<font size=3><I>port</I><font size=3>]<br>
+<span style=" text-indent: 0.3000in;"></span>The <font size=3><B>cyradm connect</B> <font size=3>command opens a connection to <font size=3><I>host</I> <font size=3>and creates a new Tcl command <font size=3><I>connection</I> <font size=3>that<br>
+<span style=" text-indent: 0.3000in;"></span>may be used to invoke various operations on the connection. <font size=3><I>Host</I> <font size=3>defaults to <font size=3><I>connection</I> <font size=3>and <font size=3><I>port</I> <font size=3>defaults to<br>
+<span style=" text-indent: 0.3000in;"></span>the standard IMAP port.</p>
+<p><span style=" text-indent: 0.3000in;"></span><font size=3>The <font size=3><B>cyradm connect</B> <font size=3>command returns its <font size=3><I>connection</I> <font size=3>argument.<br>
+</p>
+
+<!-- Page: 3  -->
+<!-- left  margin: 100 -->
+<!-- right margin: 750 -->
+<p><font size=3><I>connection</I> <font size=3><B>servername<br>
+<span style=" text-indent: 0.3000in;"></span></B>Returns the name of the host that <font size=3><I>connection</I> <font size=3>is connected to.</p>
+<p><font size=3><I>connection</I> <font size=3><B>authenticate</B> <font size=3>[<font size=3><I>switches</I><font size=3><B>]<br>
+<span style=" text-indent: 0.3000in;"></span></B>Authenticates the connection. Switches are:</p>
+
+<table width="100%"  rules="none"  frame="none"  cols="4">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="4.6154%">
+</td>
+<td valign="top" align="left"  width="18.0000%">
+<p><font size=3><B>-user</B> <font size=3><I>user</p>
+</I><p><font size=3><B>-pwcommand</B> <font size=3><I>script</p>
+</I></td>
+<td valign="top" align="left"  width="2.0000%">
+</td>
+<td valign="top" align="left"  width="75.3846%">
+<p><font size=3>Log in to the server as <font size=3><I>user</I><font size=3>.</p>
+<p><font size=3>Attempt a plaintext password login. The argument is a Tcl script which is executed to obtain the login information--the script must return a list with two elements, the user- name and the password. Before executing the script, the authenticate command will replace %-sequences as follows:</p>
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="4.6154%">
+</td>
+<td valign="top" align="left"  width="18.0000%">
+<p><font size=3><span style=" text-indent: 0.4200in;"></span>%%</p>
+<p><span style=" text-indent: 0.4200in;"></span><font size=3>%h</p>
+<p><span style=" text-indent: 0.4200in;"></span><font size=3>%u</p>
+</td>
+<td valign="top" align="left"  width="2.0000%">
+</td>
+<td valign="top" align="left"  width="75.3846%">
+<p><font size=3><span style=" text-indent: 0.4200in;"></span>replaced with a single %</p>
+<p><span style=" text-indent: 0.4200in;"></span><font size=3>replaced with the hostname of the server</p>
+<p><span style=" text-indent: 0.4200in;"></span><font size=3>replaced with the value of the <font size=3><B>-user</B> <font size=3>switch, or the empty string if the <font size=3><B>-user<br>
+<span style=" text-indent: 0.4200in;"></span></B>switch was not given</p>
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="4.6154%">
+</td>
+<td valign="top" align="left"  width="18.0000%">
+<p><font size=3><B>-layers</B> <font size=3><I>number</p>
+</I><p><font size=3><B>-mech</B> <font size=3><I>mechanism</p>
+</I></td>
+<td valign="top" align="left"  width="2.0000%">
+</td>
+<td valign="top" align="left"  width="75.3846%">
+<p><font size=3>Specify allowable protection mechanisms for the connection; see above.</p>
+<p><font size=3>Specify the SASL mechanism to use, if not plaintext login.</p>
+</td>
+</tr>
+</table>
+<p><font size=3><I>connection</I> <font size=3><B>createmailbox</B> <font size=3><I>mailbox</I> <font size=3>[<font size=3><I>partition</I><font size=3>]<br>
+<span style=" text-indent: 0.3000in;"></span>Creates a mailbox on <font size=3><I>connection</I><font size=3>. Arguments are the same as for the interactive version of the command.</p>
+<p><font size=3><I>connection</I> <font size=3><B>deletemailbox</B> <font size=3><I>mailbox<br>
+<span style=" text-indent: 0.3000in;"></span></I>Delete a mailbox on <font size=3><I>connection</I><font size=3>. Arguments are the same as for the interactive version of the command.</p>
+<p><font size=3><I>connection</I> <font size=3><B>renamemailbox</B> <font size=3><I>mailbox newmailbox</I> <font size=3>[<font size=3><I>partition</I><font size=3>]<br>
+<span style=" text-indent: 0.3000in;"></span>Renames a mailbox on <font size=3><I>connection</I><font size=3>. Arguments are the same as for the interactive version of the command.</p>
+<p><font size=3><I>connection</I> <font size=3><B>listmailbox [</B><font size=3><I>-subscribed</I><font size=3>] <font size=3><I>pattern</I> <font size=3>[<font size=3><I>reference</I><font size=3>]<br>
+<span style=" text-indent: 0.3000in;"></span>Returns a list describing mailboxes on <font size=3><I>connection</I> <font size=3>matching <font size=3><I>pattern</I><font size=3>. The optional <font size=3><I>reference</I> <font size=3>argument speci-<br>
+<span style=" text-indent: 0.3000in;"></span>fies the reference name relative to which <font size=3><I>pattern</I> <font size=3>is then interpreted.</p>
+<p><span style=" text-indent: 0.3000in;"></span><font size=3>The <font size=3><B>-subscribed</B> <font size=3>switch limits the returned mailboxes to those to which the user has subscribed.</p>
+<p><span style=" text-indent: 0.3000in;"></span><font size=3>The returned value contains a list with one entry for each matching mailbox. Each entry is a list containing<br>
+<span style=" text-indent: 0.3000in;"></span>three elements, the name, a list of mailbox attributes, and the hierarchy delimiter. If there is no hierarchy<br>
+<span style=" text-indent: 0.3000in;"></span>delimiter, the third element is the empty string.</p>
+<p><font size=3><I>connection</I> <font size=3><B>setaclmailbox</B> <font size=3><I>mailbox identifier rights</I> <font size=3>[...]<br>
+<span style=" text-indent: 0.3000in;"></span>Modifies an access control list on <font size=3><I>connection</I><font size=3>. Arguments are the same as for the interactive version of the<br>
+<span style=" text-indent: 0.3000in;"></span>command.</p>
+<p><font size=3><I>connection</I> <font size=3><B>deleteaclmailbox</B> <font size=3><I>mailbox identifier</I> <font size=3>[...]<br>
+<span style=" text-indent: 0.3000in;"></span>Modifies an access control list on <font size=3><I>connection</I><font size=3>. Arguments are the same as for the interactive version of the<br>
+<span style=" text-indent: 0.3000in;"></span>command.</p>
+<p><font size=3><I>connection</I> <font size=3><B>listaclmailbox</B> <font size=3><I>mailbox<br>
+<span style=" text-indent: 0.3000in;"></span></I>Returns a list containing the access control list of the mailbox <font size=3><I>mailbox</I> <font size=3>on <font size=3><I>connection</I><font size=3>. The returned list con-<br>
+<span style=" text-indent: 0.3000in;"></span>tains alternating <font size=3><I>identifier right</I> <font size=3>pairs.</p>
+<p><font size=3><I>connection</I> <font size=3><B>setquota</B> <font size=3><I>root</I> <font size=3>[<font size=3><I>resource limit</I><font size=3>]...<br>
+<span style=" text-indent: 0.3000in;"></span>Sets the limit on the quota root <font size=3><I>root</I> <font size=3>on <font size=3><I>connection</I><font size=3>. Zero or more <font size=3><I>resource limit</I> <font size=3>pairs may be specified, spec-<br>
+<span style=" text-indent: 0.3000in;"></span>ifying the limit for each resource.</p>
+<p><font size=3><I>connection</I> <font size=3><B>listquota</B> <font size=3><I>root<br>
+<span style=" text-indent: 0.3000in;"></span></I>Returns a list containing the quotas of the quota root <font size=3><I>root</I> <font size=3>on <font size=3><I>connection</I><font size=3>. The returned list contains zero or<br>
+<span style=" text-indent: 0.3000in;"></span>more <font size=3><I>resource usage limit</I> <font size=3>triplets.</p>
+<p><font size=3><I>connection</I> <font size=3><B>listquotaroot</B> <font size=3><I>mailbox<br>
+<span style=" text-indent: 0.3000in;"></span></I>Returns a list containing the quota roots and quotas on the mailbox <font size=3><I>mailbox</I> <font size=3>on <font size=3><I>connection</I><font size=3>. The returned list<br>
+<span style=" text-indent: 0.3000in;"></span>contains zero or more sublists; each sublist contains the name of a quota root followed by zero or more<br>
+<span style=" text-indent: 0.3000in;"></span><I>resource usage limit</I> <font size=3>triplets.<br>
+</p>
+</body>
+</html>
diff -ruN cyrus-imapd/doc/man/cyrus.conf.5.html cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/cyrus.conf.5.html
--- cyrus-imapd/doc/man/cyrus.conf.5.html	Thu Jan  1 01:00:00 1970
+++ cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/cyrus.conf.5.html	Sun Jul  8 17:04:45 2001
@@ -0,0 +1,258 @@
+<html>
+<head>
+<meta name="Content-Style" content="text/css">
+</head>
+<body>
+<a href="#NAME">NAME</a><br>
+<a href="#DESCRIPTION">DESCRIPTION</a><br>
+<a href="#SECTION DESCRIPTIONS">SECTION DESCRIPTIONS</a><br>
+<a href="#EXAMPLE">EXAMPLE</a><br>
+<a href="#ACCESS CONTROL">ACCESS CONTROL</a><br>
+<a href="#SEE ALSO">SEE ALSO</a><br>
+<!-- Creator     : groff version 1.15  -->
+<!-- CreationDate: Sun Jul  8 12:04:45 2001
+ -->
+<!-- Total number of pages: 2 -->
+<!-- Page: 1 -->
+<!-- left  margin: 100 -->
+<!-- right margin: 750 -->
+<a name="NAME"></a><h2>NAME</h2><p><font size=3>cyrus.conf - Cyrus configuration file</p>
+<a name="DESCRIPTION"></a><h2>DESCRIPTION</h2><p><font size=3><B>/etc/cyrus.conf</B> <font size=3>is the configuration file for the Cyrus <font size=3><B>master</B> <font size=3>process. It defines the startup procedures, services and events to be spawned by <font size=3><B>master</B><font size=3>.</p>
+<p><font size=3>The <font size=3><B>/etc/cyrus.conf</B> <font size=3>file consists of a series of entries divided into sections of the form</p>
+
+<table width="100%"  rules="none"  frame="none"  cols="5">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="20.0000%">
+</td>
+<td valign="top" align="left"  width="8.0000%">
+<p><font size=3><I>section</I> <font size=3>{</p>
+</td>
+<td valign="top" align="left"  width="12.0000%">
+</td>
+<td valign="top" align="left"  width="14.4615%">
+</td>
+<td valign="top" align="left"  width="45.5385%">
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="20.0000%">
+</td>
+<td valign="top" align="left"  width="8.0000%">
+</td>
+<td valign="top" align="left"  width="12.0000%">
+</td>
+<td valign="top" align="left"  width="14.4615%">
+<p><font size=3><I>name arguments<br>
+<span style=" text-indent: 0.5000in;"></span>...<br>
+<span style=" text-indent: 0.5000in;"></span>...<br>
+<span style=" text-indent: 0.5000in;"></span>...</p>
+</I></td>
+<td valign="top" align="left"  width="45.5385%">
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="20.0000%">
+</td>
+<td valign="top" align="left"  width="8.0000%">
+<p><font size=3>}</p>
+</td>
+<td valign="top" align="left"  width="12.0000%">
+</td>
+<td valign="top" align="left"  width="14.4615%">
+</td>
+<td valign="top" align="left"  width="45.5385%">
+</td>
+</tr>
+</table>
+<p><font size=3>where <font size=3><I>section</I> <font size=3>is the name of the section, <font size=3><I>name</I> <font size=3>is the name of the entry and <font size=3><I>arguments</I> <font size=3>is the whitespace-sepa- rated list of arguments for the entry.</p>
+<p><font size=3>Blank lines and lines beginning with ``#'' are ignored.</p>
+<a name="SECTION DESCRIPTIONS"></a><h2>SECTION DESCRIPTIONS</h2><p><font size=3>The paragraphs below detail the three sections (<font size=3><B>START</B><font size=3>, <font size=3><B>SERVICES</B><font size=3>, <font size=3><B>EVENTS</B><font size=3>) that can be placed in the <font size=3><B>/etc/cyrus.conf</B> <font size=3>file. The arguments that are available for each entry within the section are described, and each argument's default value is shown.</p>
+<p><font size=3>Arguments can appear in any order. Some arguments have no default value, these are listed with ``&lt;no default&gt;''. For string arguments, the value MUST be enclosed in double quotes.</p>
+
+<table width="100%"  rules="none"  frame="none"  cols="3">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="16.1538%">
+<p><font size=3><B><span style=" text-indent: 0.1800in;"></span>START</p>
+</B></td>
+<td valign="top" align="left"  width="3.8462%">
+</td>
+<td valign="top" align="left"  width="80.0000%">
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="16.1538%">
+</td>
+<td valign="top" align="left"  width="3.8462%">
+</td>
+<td valign="top" align="left"  width="80.0000%">
+<p><font size=3>This section lists the processes to run before any <font size=3><B>SERVICES</B> <font size=3>are spawned. This section is<br>
+typically used to initialize databases and start long running daemons.</p>
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="16.1538%">
+<p><font size=3><B>cmd=</B><font size=3>&lt;no default&gt;</p>
+</td>
+<td valign="top" align="left"  width="3.8462%">
+</td>
+<td valign="top" align="left"  width="80.0000%">
+</td>
+</tr>
+</table>
+<p><font size=3>The command (with options) to spawn as a child process. This string argument is required.</p>
+
+<table width="100%"  rules="none"  frame="none"  cols="3">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="16.1538%">
+<p><font size=3><B><span style=" text-indent: 0.1800in;"></span>SERVICES</p>
+</B></td>
+<td valign="top" align="left"  width="3.8462%">
+</td>
+<td valign="top" align="left"  width="80.0000%">
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="16.1538%">
+</td>
+<td valign="top" align="left"  width="3.8462%">
+</td>
+<td valign="top" align="left"  width="80.0000%">
+<p><font size=3>This section is the heart of the <font size=3><B>/etc/cyrus.conf</B> <font size=3>file. It lists the processes that should be<br>
+spawned to handle client connections made on certain Internet/UNIX sockets.</p>
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="16.1538%">
+<p><font size=3><B>cmd=</B><font size=3>&lt;no default&gt;</p>
+</td>
+<td valign="top" align="left"  width="3.8462%">
+</td>
+<td valign="top" align="left"  width="80.0000%">
+</td>
+</tr>
+</table>
+<p><font size=3>The command (with options) to spawn as a child process. This string argument is required.</p>
+<p><font size=3><B>listen=</B><font size=3>&lt;no default&gt;<br>
+<span style=" text-indent: 0.3000in;"></span>The UNIX or internet socket to listen on. This string field is required and takes one of the following forms:</p>
+<p><span style=" text-indent: 0.3000in;"></span><font size=3><I>path<br>
+<span style=" text-indent: 0.3000in;"></span></I>[ <font size=3><I>host</I> <font size=3><B>:</B> <font size=3>] <font size=3><I>port</p>
+</I><p><span style=" text-indent: 0.3000in;"></span><font size=3>where <font size=3><I>path</I> <font size=3>is the explicit path to a UNIX socket, <font size=3><I>host</I> <font size=3>is either the hostname or bracket-enclosed IP address<br>
+<span style=" text-indent: 0.3000in;"></span>of a network interface, and <font size=3><I>port</I> <font size=3>is either a port number or service name (as listed in <font size=3><B>/etc/services</B><font size=3>).</p>
+<p><font size=3><B>proto=</B><font size=3>tcp<br>
+<span style=" text-indent: 0.3000in;"></span>The protocol used for this service (<font size=3><I>tcp</I><font size=3>, <font size=3><I>udp</I><font size=3>). This string argument is optional.</p>
+<p><font size=3><B>prefork=</B><font size=3>0<br>
+<span style=" text-indent: 0.3000in;"></span>The number of instances of this service to always have running (for faster initial response time). This integer<br>
+<span style=" text-indent: 0.3000in;"></span>value is optional.</p>
+
+<table width="100%"  rules="none"  frame="none"  cols="3">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="16.1538%">
+<p><font size=3><B><span style=" text-indent: 0.1800in;"></span>EVENTS</p>
+</B></td>
+<td valign="top" align="left"  width="3.8462%">
+</td>
+<td valign="top" align="left"  width="80.0000%">
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="16.1538%">
+</td>
+<td valign="top" align="left"  width="3.8462%">
+</td>
+<td valign="top" align="left"  width="80.0000%">
+<p><font size=3>This section lists processes that should be run at specific intervals, similar to cron jobs.<br>
+This section is typically used to perform scheduled cleanup/maintenance.</p>
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="16.1538%">
+<p><font size=3><B>cmd=</B><font size=3>&lt;no default&gt;</p>
+</td>
+<td valign="top" align="left"  width="3.8462%">
+</td>
+<td valign="top" align="left"  width="80.0000%">
+</td>
+</tr>
+</table>
+<p><font size=3>The command (with options) to spawn as a child process. This string argument is required.</p>
+<p><font size=3><B>period=</B><font size=3>0<br>
+<span style=" text-indent: 0.3000in;"></span>The interval (in minutes) at which to run the command. This integer value is optional, but SHOULD be a pos-<br>
+<span style=" text-indent: 0.3000in;"></span>itive integer &gt; 10.<br>
+</p>
+
+<!-- Page: 2  -->
+<!-- left  margin: 100 -->
+<!-- right margin: 750 -->
+<a name="EXAMPLE"></a><h2>EXAMPLE</h2><p><font size=3># example cyrus.conf</p>
+
+<table width="100%"  rules="none"  frame="none"  cols="4">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="11.8462%">
+<p><font size=3>START {<br>
+<span style=" text-indent: 0.0600in;"></span>mboxlist</p>
+</td>
+<td valign="top" align="left"  width="3.5385%">
+</td>
+<td valign="top" align="left"  width="39.3846%">
+<br>
+<p><font size=3>cmd="ctl_mboxlist -r"</p>
+</td>
+<td valign="top" align="left"  width="45.2308%">
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="11.8462%">
+<p><font size=3><span style=" text-indent: 0.0600in;"></span>deliver<br>
+}</p>
+<p><font size=3>SERVICES {<br>
+<span style=" text-indent: 0.0600in;"></span>imap</p>
+</td>
+<td valign="top" align="left"  width="3.5385%">
+</td>
+<td valign="top" align="left"  width="39.3846%">
+<p><font size=3>cmd="ctl_deliver -r"</p>
+<p><font size=3>cmd="imapd" listen="imap" prefork=1</p>
+</td>
+<td valign="top" align="left"  width="45.2308%">
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="11.8462%">
+<p><font size=3><span style=" text-indent: 0.0600in;"></span>imaps<br>
+<span style=" text-indent: 0.0600in;"></span>lmtpunix<br>
+<span style=" text-indent: 0.0600in;"></span>lmtp<br>
+}</p>
+<p><font size=3>EVENTS {<br>
+<span style=" text-indent: 0.0600in;"></span>checkpoint</p>
+</td>
+<td valign="top" align="left"  width="3.5385%">
+</td>
+<td valign="top" align="left"  width="39.3846%">
+<p><font size=3>cmd="imapd -s" listen="imaps" prefork=0<br>
+cmd="lmtpd" listen="/var/imap/socket/lmtp"<br>
+cmd="lmtpd" listen="localhost:lmtp"</p>
+<p><font size=3>cmd="ctl_mboxlist -c" period=30</p>
+</td>
+<td valign="top" align="left"  width="45.2308%">
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="11.8462%">
+<p><font size=3><span style=" text-indent: 0.0600in;"></span>delprune<br>
+}</p>
+</td>
+<td valign="top" align="left"  width="3.5385%">
+</td>
+<td valign="top" align="left"  width="39.3846%">
+<p><font size=3>cmd="ctl_deliver -E 3" period=1440</p>
+</td>
+<td valign="top" align="left"  width="45.2308%">
+</td>
+</tr>
+</table>
+<br>
+<a name="ACCESS CONTROL"></a><h2>ACCESS CONTROL</h2><p><font size=3>When TCP Wrappers is used to control access to Cyrus services, the <font size=3><I>name</I> <font size=3>of the service entry should be used as the process name in the <font size=3><B>hosts_access(5)</B> <font size=3>table. For instance, in the example above, "imap", "imaps", "lmtpunix" and "lmtp" would be used as the process names. This allows a single daemon such as imapd to be run in different modes or configurations (i.e., SSL and non-SSL enabled) yet still have separate access control rules.</p>
+<a name="SEE ALSO"></a><h2>SEE ALSO</h2><p><font size=3><B>master(8)</B><font size=3>, <font size=3><B>imapd(8)</B><font size=3>, <font size=3><B>pop3d(8)</B><font size=3>, <font size=3><B>lmtpd(8)</B><font size=3>, <font size=3><B>timsieved(8)</B><font size=3>, <font size=3><B>idled(8)</B><font size=3>, <font size=3><B>hosts_access(5)</B><br>
+</p>
+</body>
+</html>
diff -ruN cyrus-imapd/doc/man/deliver.8.html cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/deliver.8.html
--- cyrus-imapd/doc/man/deliver.8.html	Thu Jan  1 01:00:00 1970
+++ cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/deliver.8.html	Sun Jul  8 17:04:45 2001
@@ -0,0 +1,79 @@
+<html>
+<head>
+<meta name="Content-Style" content="text/css">
+</head>
+<body>
+<a href="#NAME">NAME</a><br>
+<a href="#SYNOPSIS">SYNOPSIS</a><br>
+<a href="#DESCRIPTION">DESCRIPTION</a><br>
+<a href="#OPTIONS">OPTIONS</a><br>
+<a href="#NOTES">NOTES</a><br>
+<a href="#FILES">FILES</a><br>
+<a href="#/etc/imapd.conf">/etc/imapd.conf</a><br>
+<a href="#SEE ALSO">SEE ALSO</a><br>
+<a href="#lmtpd(8)">lmtpd(8)</a><br>
+<!-- Creator     : groff version 1.15  -->
+<!-- CreationDate: Sun Jul  8 12:04:45 2001
+ -->
+<!-- Total number of pages: 1 -->
+<!-- Page: 1 -->
+<!-- left  margin: 100 -->
+<!-- right margin: 750 -->
+<a name="NAME"></a><h2>NAME</h2><p><font size=3>deliver - deliver mail to an IMAP mailbox</p>
+<a name="SYNOPSIS"></a><h2>SYNOPSIS</h2>
+<table width="100%"  rules="none"  frame="none"  cols="2">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="41.6923%">
+<p><font size=3><B>deliver</B> <font size=3>[ <font size=3><B>-C</B> <font size=3><I>config-file</I> <font size=3>] [ <font size=3><B>-d</B> <font size=3>] [ <font size=3><B>-r</B> <font size=3><I>address</I> <font size=3>]<br>
+<span style=" text-indent: 0.2400in;"></span>[ <font size=3><B>-f</B> <font size=3><I>address</I> <font size=3>] [ <font size=3><B>-m</B> <font size=3><I>mailbox</I> <font size=3>] [ <font size=3><B>-a</B> <font size=3><I>auth-id</I> <font size=3>]<br>
+<span style=" text-indent: 0.2400in;"></span>[ <font size=3><B>-q</B> <font size=3>] [ <font size=3><I>userid</I> <font size=3>]...<br>
+<B>deliver</B> <font size=3>[ <font size=3><B>-C</B> <font size=3><I>config-file</I> <font size=3>] <font size=3><B>-l</p>
+</B></td>
+<td valign="top" align="left"  width="58.3077%">
+</td>
+</tr>
+</table>
+<br>
+<a name="DESCRIPTION"></a><h2>DESCRIPTION</h2><p><font size=3><I>Deliver</I> <font size=3>reads a message from the standard input and delivers it to one or more IMAP mailboxes.</p>
+<p><font size=3><I>Deliver</I> <font size=3>reads its configuration options out of the <font size=3><I>imapd.conf</I><font size=3>(5) file unless specified otherwise by <font size=3><B>-C</B><font size=3>.</p>
+<a name="OPTIONS"></a><h2>OPTIONS</h2>
+<table width="100%"  rules="none"  frame="none"  cols="3">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="12.6154%">
+<p><font size=3><B>-C</B> <font size=3><I>config-file</p>
+</I><p><font size=3><B>-d</p>
+</B><p><font size=3><B>-r</B> <font size=3><I>address</p>
+</I><p><font size=3><B>-f</B> <font size=3><I>address</p>
+</I><p><font size=3><B>-m</B> <font size=3><I>mailbox</p>
+</I></td>
+<td valign="top" align="left"  width="7.3846%">
+</td>
+<td valign="top" align="left"  width="80.0000%">
+<p><font size=3>Read configuration options from <font size=3><I>config-file</I><font size=3>.</p>
+<p><font size=3>Ignored for compatability with <font size=3><B>/bin/mail.</p>
+</B><p><font size=3>Insert a <font size=3><B>Return-Path:</B> <font size=3>header containing</p>
+<p><font size=3>Insert a <font size=3><B>Return-Path:</B> <font size=3>header containing</p>
+<p><font size=3>Deliver to <font size=3><I>mailbox</I><font size=3>. If any <font size=3><I>userid</I><font size=3>s are specified, attempts to deliver to user.<font size=3><I>userid</I><font size=3>.<font size=3><I>mailbox</I> <font size=3>for each <font size=3><I>userid</I><font size=3>. If the ACL on any such mailbox does not grant the sender the "p" right or if <font size=3><B>-m</B> <font size=3>is not specified, then delivers to the INBOX for the <font size=3><I>userid</I><font size=3>, regardless of the ACL on the INBOX.</p>
+<p><font size=3>If no <font size=3><I>userid</I><font size=3>s are specified, attempts to deliver to <font size=3><I>mailbox</I><font size=3>. If the ACL on <font size=3><I>mailbox</I> <font size=3>does not grant the sender the "p" right, the delivery fails.</p>
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="12.6154%">
+<p><font size=3><B>-a</B> <font size=3><I>auth-id</p>
+</I><p><font size=3><B>-q</p>
+</B><p><font size=3><B>-l</p>
+</B></td>
+<td valign="top" align="left"  width="7.3846%">
+</td>
+<td valign="top" align="left"  width="80.0000%">
+<p><font size=3>Specify the authorization id of the sender. Defaults to "anonymous".</p>
+<p><font size=3>Deliver message even when receiving mailbox is over quota.</p>
+<p><font size=3>Accept messages using the LMTP protocol.</p>
+</td>
+</tr>
+</table>
+<br>
+<a name="NOTES"></a><h2>NOTES</h2><p><font size=3>Depending on the setting of <font size=3><B>reject8bit</B> <font size=3>in <font size=3><B>imapd.conf(5)</B><font size=3>, deliver either rejects messages with 8-bit-set characters in the headers or changes these characters to `X'. This is because such characters can't be interpreted since the character set is not known, although some communities not well-served by US-ASCII assume that those charac- ters can be used to represent characters not present in US-ASCII.</p>
+<p><font size=3>A method for encoding 8-bit-set characters is provided by RFC 2047.</p>
+<a name="FILES"></a><h2>FILES</h2><a name="/etc/imapd.conf"></a><h2>/etc/imapd.conf</h2><a name="SEE ALSO"></a><h2>SEE ALSO</h2><a name="lmtpd(8)"></a><h2>lmtpd(8)</h2></body>
+</html>
diff -ruN cyrus-imapd/doc/man/fud.8.html cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/fud.8.html
--- cyrus-imapd/doc/man/fud.8.html	Thu Jan  1 01:00:00 1970
+++ cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/fud.8.html	Sun Jul  8 17:04:45 2001
@@ -0,0 +1,29 @@
+<html>
+<head>
+<meta name="Content-Style" content="text/css">
+</head>
+<body>
+<a href="#NAME">NAME</a><br>
+<a href="#SYNOPSIS">SYNOPSIS</a><br>
+<a href="#DESCRIPTION">DESCRIPTION</a><br>
+<a href="#OPTIONS">OPTIONS</a><br>
+<a href="#FILES">FILES</a><br>
+<a href="#/etc/imapd.conf">/etc/imapd.conf</a><br>
+<a href="#BUGS">BUGS</a><br>
+<!-- Creator     : groff version 1.15  -->
+<!-- CreationDate: Sun Jul  8 12:04:45 2001
+ -->
+<!-- Total number of pages: 1 -->
+<!-- Page: 1 -->
+<!-- left  margin: 100 -->
+<!-- right margin: 750 -->
+<a name="NAME"></a><h2>NAME</h2><p><font size=3>fud - provide information about user mailboxes</p>
+<a name="SYNOPSIS"></a><h2>SYNOPSIS</h2><p><font size=3><B>fud</B> <font size=3>[ <font size=3><B>-C</B> <font size=3><I>config-file</I> <font size=3>]</p>
+<a name="DESCRIPTION"></a><h2>DESCRIPTION</h2><p><font size=3><I>Fud</I> <font size=3>is a long lived datagram daemon started from inetd that provides information about when a user last read their mail, when mail last arrived in a user's mailbox, and how many messages are recent for that user.</p>
+<p><font size=3><I>Fud</I> <font size=3>reads its configuration options out of the <font size=3><I>imapd.conf</I><font size=3>(5) file unless specified otherwise by <font size=3><B>-C</B><font size=3>.</p>
+<a name="OPTIONS"></a><h2>OPTIONS</h2><p><font size=3><B>-C</B> <font size=3><I>config-file</I> <font size=3>Read configuration options from <font size=3><I>config-file</I><font size=3>.</p>
+<a name="FILES"></a><h2>FILES</h2><a name="/etc/imapd.conf"></a><h2>/etc/imapd.conf</h2><a name="BUGS"></a><h2>BUGS</h2><p><font size=3>Though not really a bug, <font size=3><B>FUD</B> <font size=3>will silently ignore any requests that it does not consider valid.</p>
+<p><font size=3><B>FUD</B> <font size=3>is an experimental interface meant to provide information to build a finger-like service around. Eventually it should be superceded by LDAP or ACAP (using the mailbox dataset).<br>
+</p>
+</body>
+</html>
diff -ruN cyrus-imapd/doc/man/idled.8.html cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/idled.8.html
--- cyrus-imapd/doc/man/idled.8.html	Thu Jan  1 01:00:00 1970
+++ cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/idled.8.html	Sun Jul  8 17:04:45 2001
@@ -0,0 +1,28 @@
+<html>
+<head>
+<meta name="Content-Style" content="text/css">
+</head>
+<body>
+<a href="#NAME">NAME</a><br>
+<a href="#SYNOPSIS">SYNOPSIS</a><br>
+<a href="#DESCRIPTION">DESCRIPTION</a><br>
+<a href="#OPTIONS">OPTIONS</a><br>
+<a href="#FILES">FILES</a><br>
+<a href="#/etc/imapd.conf">/etc/imapd.conf</a><br>
+<a href="#SEE ALSO">SEE ALSO</a><br>
+<!-- Creator     : groff version 1.15  -->
+<!-- CreationDate: Sun Jul  8 12:04:45 2001
+ -->
+<!-- Total number of pages: 1 -->
+<!-- Page: 1 -->
+<!-- left  margin: 100 -->
+<!-- right margin: 750 -->
+<a name="NAME"></a><h2>NAME</h2><p><font size=3>idled - provide near real-time updates for IMAP IDLE</p>
+<a name="SYNOPSIS"></a><h2>SYNOPSIS</h2><p><font size=3><B>idled</B> <font size=3>[ <font size=3><B>-C</B> <font size=3><I>config-file</I> <font size=3>]</p>
+<a name="DESCRIPTION"></a><h2>DESCRIPTION</h2><p><font size=3><I>Idled</I> <font size=3>is a long lived datagram daemon which receives notifications of mailbox changes and signals the appropriate <font size=3><I>imapd</I> <font size=3>to report the changes to the client. <font size=3><I>Idled</I> <font size=3>is usually started from <font size=3><I>master.</p>
+</I><p><font size=3><I>Idled</I> <font size=3>reads its configuration options out of the <font size=3><I>imapd.conf</I><font size=3>(5) file unless specified otherwise by <font size=3><B>-C</B><font size=3>. The <font size=3><I>idlesocket</I> <font size=3>option is used to specify the Unix domain socket to listen on for notifications.</p>
+<a name="OPTIONS"></a><h2>OPTIONS</h2><p><font size=3><B>-C</B> <font size=3><I>config-file</I> <font size=3>Read configuration options from <font size=3><I>config-file</I><font size=3>.</p>
+<a name="FILES"></a><h2>FILES</h2><a name="/etc/imapd.conf"></a><h2>/etc/imapd.conf</h2><a name="SEE ALSO"></a><h2>SEE ALSO</h2><p><font size=3><B>imapd.conf(5)</B><font size=3>, <font size=3><B>master(8)</B><br>
+</p>
+</body>
+</html>
diff -ruN cyrus-imapd/doc/man/imapd.8.html cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/imapd.8.html
--- cyrus-imapd/doc/man/imapd.8.html	Thu Jan  1 01:00:00 1970
+++ cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/imapd.8.html	Sun Jul  8 17:04:45 2001
@@ -0,0 +1,65 @@
+<html>
+<head>
+<meta name="Content-Style" content="text/css">
+</head>
+<body>
+<a href="#NAME">NAME</a><br>
+<a href="#SYNOPSIS">SYNOPSIS</a><br>
+<a href="#DESCRIPTION">DESCRIPTION</a><br>
+<a href="#OPTIONS">OPTIONS</a><br>
+<a href="#FILES">FILES</a><br>
+<a href="#/etc/imapd.conf">/etc/imapd.conf</a><br>
+<a href="#SEE ALSO">SEE ALSO</a><br>
+<!-- Creator     : groff version 1.15  -->
+<!-- CreationDate: Sun Jul  8 12:04:45 2001
+ -->
+<!-- Total number of pages: 1 -->
+<!-- Page: 1 -->
+<!-- left  margin: 100 -->
+<!-- right margin: 750 -->
+<a name="NAME"></a><h2>NAME</h2><p><font size=3>imapd - IMAP server process</p>
+<a name="SYNOPSIS"></a><h2>SYNOPSIS</h2><p><font size=3><B>imapd</B> <font size=3>[ <font size=3><B>-C</B> <font size=3><I>config-file</I> <font size=3>] [ <font size=3><B>-s</B> <font size=3>] [ <font size=3><B>-p</B> <font size=3><I>ssf</I> <font size=3>]</p>
+<a name="DESCRIPTION"></a><h2>DESCRIPTION</h2><p><font size=3><I>Imapd</I> <font size=3>is an IMAP4rev1 server. It accepts commands on its standard input and responds on its standard output. It MUST be invoked by <font size=3><I>master</I><font size=3>(8) with those descriptors attached to a remote client connection.</p>
+<p><font size=3><I>Imapd</I> <font size=3>reads its configuration options out of the <font size=3><I>imapd.conf</I><font size=3>(5) file unless specified otherwise by <font size=3><B>-C</B><font size=3>.</p>
+<p><font size=3>If the file msg/shutdown is created under the directory specified in the <font size=3><I>configdirectory</I> <font size=3>configuration option, then <font size=3><I>imapd</I> <font size=3>will shut down the connection, sending the first line contained in the file to the client as the reason. New connections are denied.</p>
+<p><font size=3>If the file msg/motd is created under the directory specified in the <font size=3><I>configdirectory</I> <font size=3>configuration option, then <font size=3><I>imapd</I> <font size=3>will send the first line contained in the file to clients upon connect as an ALERT message which IMAP-compliant clients are required to display. This option serves to annoy users mostly. Unfortunately clients tend to connect far more frequently than is apparent, causing each connection to generate a seperate server ALERT for each con- nection. Many clients do not display these properly, if they do anything with them at all.</p>
+<p><font size=3>If the directory log/<font size=3><I>user</I> <font size=3>exists under the directory specified in the <font size=3><I>configdirectory</I> <font size=3>configuration option, then <font size=3><I>imapd</I> <font size=3>will create protocol telemetry logs for sessions authenticating as <font size=3><I>user</I><font size=3>. The telemetry logs will be stored in the log/<font size=3><I>user</I> <font size=3>directory with a filename of the <font size=3><I>imapd</I> <font size=3>process-id.</p>
+<a name="OPTIONS"></a><h2>OPTIONS</h2>
+<table width="100%"  rules="none"  frame="none"  cols="3">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="12.6154%">
+<p><font size=3><B>-C</B> <font size=3><I>config-file</p>
+</I><p><font size=3><B>-s</p>
+</B></td>
+<td valign="top" align="left"  width="7.3846%">
+</td>
+<td valign="top" align="left"  width="80.0000%">
+<p><font size=3>Read configuration options from <font size=3><I>config-file</I><font size=3>.</p>
+<p><font size=3>Serve IMAP over SSL (imaps). All data to and from <font size=3><I>imapd</I> <font size=3>is encrypted using the Secure Sockets Layer.</p>
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="12.6154%">
+<p><font size=3><B>-p</B> <font size=3><I>ssf</p>
+</I></td>
+<td valign="top" align="left"  width="7.3846%">
+</td>
+<td valign="top" align="left"  width="80.0000%">
+<p><font size=3>Tell <font size=3><I>imapd</I> <font size=3>that an external layer exists. An SSF (security strength factor) of 1 means an<br>
+integrity protection layer exists. Any higher SSF implies some form of privacy protection.</p>
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="12.6154%">
+</td>
+<td valign="top" align="left"  width="7.3846%">
+</td>
+<td valign="top" align="left"  width="80.0000%">
+</td>
+</tr>
+</table>
+<br>
+<a name="FILES"></a><h2>FILES</h2><a name="/etc/imapd.conf"></a><h2>/etc/imapd.conf</h2><a name="SEE ALSO"></a><h2>SEE ALSO</h2><p><font size=3><B>imapd.conf(5)</B><font size=3>, <font size=3><B>master(8)</B><br>
+</p>
+</body>
+</html>
diff -ruN cyrus-imapd/doc/man/imapd.conf.5.html cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/imapd.conf.5.html
--- cyrus-imapd/doc/man/imapd.conf.5.html	Thu Jan  1 01:00:00 1970
+++ cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/imapd.conf.5.html	Sun Jul  8 17:04:45 2001
@@ -0,0 +1,221 @@
+<html>
+<head>
+<meta name="Content-Style" content="text/css">
+</head>
+<body>
+<a href="#NAME">NAME</a><br>
+<a href="#DESCRIPTION">DESCRIPTION</a><br>
+<a href="#FIELD DESCRIPTIONS">FIELD DESCRIPTIONS</a><br>
+<a href="#sasl_option">sasl_option</a><br>
+<a href="#SEE ALSO">SEE ALSO</a><br>
+<!-- Creator     : groff version 1.15  -->
+<!-- CreationDate: Sun Jul  8 12:04:45 2001
+ -->
+<!-- Total number of pages: 4 -->
+<!-- Page: 1 -->
+<!-- left  margin: 100 -->
+<!-- right margin: 750 -->
+<a name="NAME"></a><h2>NAME</h2><p><font size=3>imapd.conf - IMAP configuration file</p>
+<a name="DESCRIPTION"></a><h2>DESCRIPTION</h2><p><font size=3><B>/etc/imapd.conf</B> <font size=3>is the configuration file for the Cyrus IMAP server. It defines local parameters for IMAP.</p>
+<p><font size=3>Each line of the <font size=3><B>/etc/imapd.conf</B> <font size=3>file has the form</p>
+<p><span style=" text-indent: 1.3000in;"></span><font size=3><I>option</I><font size=3>: <font size=3><I>value</p>
+</I><p><font size=3>where <font size=3><I>option</I> <font size=3>is the name of the configuration option being set and <font size=3><I>value</I> <font size=3>is the value that the configuration option is being set to.</p>
+<p><font size=3>Blank lines and lines beginning with ``#'' are ignored.</p>
+<p><font size=3>For boolean options, the values ``yes'', ``on'', ``t'', and ``1'' turn the option on, the values ``no'', ``off'', ``f'', and ``0'' turn the option off.</p>
+<a name="FIELD DESCRIPTIONS"></a><h2>FIELD DESCRIPTIONS</h2><p><font size=3>The sections below detail options that can be placed in the <font size=3><B>/etc/imapd.conf</B> <font size=3>file, and show each option's default value. Some options have no default value, these are listed with ``&lt;no default&gt;''. Some options default to the empty string, these are listed with ``&lt;none&gt;''.</p>
+<p><font size=3><B>configdirectory:</B> <font size=3>&lt;no default&gt;<br>
+<span style=" text-indent: 0.3000in;"></span>The pathname of the IMAP configuration directory. This field is required.</p>
+<p><font size=3><B>defaultpartition:</B> <font size=3>default<br>
+<span style=" text-indent: 0.3000in;"></span>The partition name used by default for new mailboxes.</p>
+<p><font size=3><B>partition-</B><font size=3><I>name</I><font size=3><B>:</B> <font size=3>&lt;no default&gt;<br>
+<span style=" text-indent: 0.3000in;"></span>The pathname of the partition <font size=3><I>name</I><font size=3>. At least one field, for the partition named in the <font size=3><B>defaultpartition</B> <font size=3>option,<br>
+<span style=" text-indent: 0.3000in;"></span>is required. For example, if the value of the <font size=3><B>defaultpartion</B> <font size=3>option is <font size=3><B>default</B><font size=3>, then the <font size=3><B>partition-default</B> <font size=3>field<br>
+<span style=" text-indent: 0.3000in;"></span>is required.</p>
+<p><font size=3><B>unixhierarchysep:</B> <font size=3>no<br>
+<span style=" text-indent: 0.3000in;"></span>Use the UNIX separator character '/' for delimiting levels of mailbox hierarchy. The default is to use the net-<br>
+<span style=" text-indent: 0.3000in;"></span>news separator character '.'.</p>
+<p><font size=3><B>altnamespace:</B> <font size=3>no<br>
+<span style=" text-indent: 0.3000in;"></span>Use the alternate IMAP namespace, where personal folders reside at the same level in the hierarchy as<br>
+<span style=" text-indent: 0.3000in;"></span>INBOX.</p>
+<p><span style=" text-indent: 0.3000in;"></span><font size=3>This option ONLY applies where interaction takes place with the client/user. Currently this is limited to the<br>
+<span style=" text-indent: 0.3000in;"></span>IMAP protocol (imapd) and Sieve scripts (lmtpd). This option does NOT apply to admin tools such as<br>
+<span style=" text-indent: 0.3000in;"></span>cyradm (admins ONLY), reconstruct, quota, etc., NOR does it affect LMTP delivery of messages directly to<br>
+<span style=" text-indent: 0.3000in;"></span>mailboxes via plus-addressing.</p>
+<p><font size=3><B>userprefix:</B> <font size=3>Other Users<br>
+<span style=" text-indent: 0.3000in;"></span>If using the alternate IMAP namespace, the prefix for the other users namespace. The hierarchy delimiter<br>
+<span style=" text-indent: 0.3000in;"></span>will be automatically appended.</p>
+<p><font size=3><B>sharedprefix:</B> <font size=3>Shared Folders<br>
+<span style=" text-indent: 0.3000in;"></span>If using the alternate IMAP namespace, the prefix for the shared namespace. The hierarchy delimiter will<br>
+<span style=" text-indent: 0.3000in;"></span>be automatically appended.</p>
+<p><font size=3><B>umask:</B> <font size=3>077<br>
+<span style=" text-indent: 0.3000in;"></span>The umask value used by various Cyrus IMAP programs.</p>
+<p><font size=3><B>servername:</B> <font size=3>&lt;result returned by gethostname(2)&gt;<br>
+<span style=" text-indent: 0.3000in;"></span>This is the hostname visible in the greeting messages of the POP, IMAP and LMTP daemons. If it is unset,<br>
+<span style=" text-indent: 0.3000in;"></span>then the result returned from gethostname(2) is used.</p>
+<p><font size=3><B>allowanonymouslogin:</B> <font size=3>no<br>
+<span style=" text-indent: 0.3000in;"></span>Permit logins by the user "anonymous" using any password. Also allows use of the SASL ANONYMOUS<br>
+<span style=" text-indent: 0.3000in;"></span>mechanism.</p>
+<p><font size=3><B>allowplaintext:</B> <font size=3>yes<br>
+<span style=" text-indent: 0.3000in;"></span>Allow the use of the SASL PLAIN mechanism.</p>
+<p><font size=3><B>quotawarn:</B> <font size=3>90<br>
+<span style=" text-indent: 0.3000in;"></span>The percent of quota utilization over which the server generates warnings.<br>
+</p>
+
+<!-- Page: 2  -->
+<!-- left  margin: 100 -->
+<!-- right margin: 750 -->
+
+<table width="100%"  rules="none"  frame="none"  cols="3">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="70.6154%">
+<p><font size=3><B>timeout:</B> <font size=3>30<br>
+<span style=" text-indent: 0.3000in;"></span>The length of the IMAP server's inactivity autologout timer, in minutes.<br>
+<span style=" text-indent: 0.3000in;"></span>default.</p>
+<p><font size=3><B>imapidlepoll:</B> <font size=3>60</p>
+</td>
+<td valign="top" align="left"  width="1.3846%">
+</td>
+<td valign="top" align="left"  width="28.0000%">
+<br>
+<p><font size=3>The minimum value is 30, the</p>
+</td>
+</tr>
+</table>
+<p><font size=3>The interval (in seconds) for polling the mailbox for changes while running the IDLE command. This option<br>
+<span style=" text-indent: 0.3000in;"></span>is used when idled can not be contacted or when polling is used exclusively. The minimum value is 1. A<br>
+<span style=" text-indent: 0.3000in;"></span>value of 0 will disable polling (and disable IDLE if polling is the only method available).</p>
+<p><font size=3><B>imapidresponse:</B> <font size=3>yes<br>
+<span style=" text-indent: 0.3000in;"></span>If enabled, the server responds to an ID command with a parameter list containing: version, vendor, support-<br>
+<span style=" text-indent: 0.3000in;"></span>url, os, os-version, command, arguments, environment. Otherwise the server returns NIL.</p>
+<p><font size=3><B>poptimeout:</B> <font size=3>10<br>
+<span style=" text-indent: 0.3000in;"></span>Set the length of the POP server's inactivity autologout timer, in minutes. The minimum value is 10, the<br>
+<span style=" text-indent: 0.3000in;"></span>default.</p>
+<p><font size=3><B>popminpoll:</B> <font size=3>0<br>
+<span style=" text-indent: 0.3000in;"></span>Set the minimum amount of time the server forces users to wait between successive POP logins, in minutes.<br>
+<span style=" text-indent: 0.3000in;"></span>The default is 0.</p>
+<p><font size=3><B>popexpiretime:</B> <font size=3>0<br>
+<span style=" text-indent: 0.3000in;"></span>The number of days advertised as being the minimum a message may be left on the POP server before it is<br>
+<span style=" text-indent: 0.3000in;"></span>deleted (via the CAPA command, defined in the POP3 Extension Mechanism, which some clients may sup-<br>
+<span style=" text-indent: 0.3000in;"></span>port). "NEVER", the default, may be specified with a negative number. The Cyrus POP3 server never<br>
+<span style=" text-indent: 0.3000in;"></span>deletes mail, no matter what the value of this parameter is. However, if a site implements a less liberal pol-<br>
+<span style=" text-indent: 0.3000in;"></span>icy, it needs to change this parameter accordingly.</p>
+<p><font size=3><B>admins:</B> <font size=3>&lt;none&gt;<br>
+<span style=" text-indent: 0.3000in;"></span>The list of userids with administrative rights. Separate each userid with a space. Sites using Kerberos<br>
+<span style=" text-indent: 0.3000in;"></span>authentication may use separate "admin" instances.</p>
+<p><font size=3>Note that accounts used by users should not be administrators. Administrative accounts should not receive mail. That is, if user "jbRo" is a user reading mail, he should not also be in the admins line. Some problems may occur otherwise, most notably the ability of administrators to create top-level mailboxes visible to users, but not writable by users.</p>
+<p><font size=3><B>proxyservers:</B> <font size=3>&lt;none&gt;<br>
+<span style=" text-indent: 0.3000in;"></span>A list of users and groups that are allowed to proxy for other users, seperated by spaces. Any user listed in<br>
+<span style=" text-indent: 0.3000in;"></span>this will be allowed to login for any other user: use with caution.</p>
+<p><font size=3><B>defaultacl:</B> <font size=3>anyone lrs<br>
+<span style=" text-indent: 0.3000in;"></span>The Access Control List (ACL) placed on a newly-created (non-user) mailbox that does not have a parent<br>
+<span style=" text-indent: 0.3000in;"></span>mailbox.</p>
+<p><font size=3><B>newsspool:</B> <font size=3>&lt;no default&gt;<br>
+<span style=" text-indent: 0.3000in;"></span>The pathname of the news spool directory. Only used if the <font size=3><B>partition-news</B> <font size=3>configuration option is set.</p>
+<p><font size=3><B>newsprefix:</B> <font size=3>&lt;none&gt;<br>
+<span style=" text-indent: 0.3000in;"></span>Prefix to be prepended to newsgroup names to make the corresponding IMAP mailbox names.</p>
+<p><font size=3><B>autocreatequota:</B> <font size=3>0<br>
+<span style=" text-indent: 0.3000in;"></span>If nonzero, normal users may create their own IMAP accounts by creating the mailbox INBOX. The user's<br>
+<span style=" text-indent: 0.3000in;"></span>quota is set to the value if it is positive, otherwise the user has unlimited quota.</p>
+<p><font size=3><B>logtimestamps:</B> <font size=3>no<br>
+<span style=" text-indent: 0.3000in;"></span>Include notations in the protocol telemetry logs indicating the number of seconds since the last command or<br>
+<span style=" text-indent: 0.3000in;"></span>response.</p>
+<p><font size=3><B>plaintextloginpause:</B> <font size=3>0<br>
+<span style=" text-indent: 0.3000in;"></span>Number of seconds to pause after a successful plaintext login. For systems that support strong authentica-<br>
+<span style=" text-indent: 0.3000in;"></span>tion, this permits users to perceive a cost of using plaintext passwords. (This does not effect the use of<br>
+<span style=" text-indent: 0.3000in;"></span>PLAIN in SASL authentications.)</p>
+<p><font size=3><B>srvtab:</B> <font size=3>/etc/srvtab<br>
+<span style=" text-indent: 0.3000in;"></span>The pathname of <font size=3><I>srvtab</I> <font size=3>file containing the server's private key. This option is passed to the SASL library<br>
+<span style=" text-indent: 0.3000in;"></span>and overrides its default setting.</p>
+<p><font size=3><B>loginrealms:</B> <font size=3>&lt;none&gt;<br>
+<span style=" text-indent: 0.3000in;"></span>The list of remote realms whose users may log in using cross-realm authentications. Seperate each realm<br>
+<span style=" text-indent: 0.3000in;"></span>name by a space. (A cross-realm identity is considered any identity returned by SASL with an "@" in it.)<br>
+</p>
+
+<!-- Page: 3  -->
+<!-- left  margin: 100 -->
+<!-- right margin: 750 -->
+<p><font size=3><B>loginuseacl:</B> <font size=3>no<br>
+<span style=" text-indent: 0.3000in;"></span>If enabled, any authentication identity which has <font size=3><B>a</B> <font size=3>rights on a user's INBOX may log in as that user.</p>
+<p><font size=3><B>singleinstancestore:</B> <font size=3>yes<br>
+<span style=" text-indent: 0.3000in;"></span>If enabled, deliver running in LMTP mode attempts to only write one copy of a message per partition and<br>
+<span style=" text-indent: 0.3000in;"></span>create hard links, resulting in a potentially large disk savings.</p>
+<p><font size=3><B>reject8bit:</B> <font size=3>no<br>
+<span style=" text-indent: 0.3000in;"></span>If enabled, deliver rejects messages with 8-bit characters in the headers. Otherwise, 8-bit characters are<br>
+<span style=" text-indent: 0.3000in;"></span>changed to `X'. (A proper soultion to non-ASCII characters in headers is offered by RFC 2047 and its prede-<br>
+<span style=" text-indent: 0.3000in;"></span>cessors.)</p>
+<p><font size=3><B>postuser:</B> <font size=3>&lt;none&gt;</p>
+
+<table width="100%"  rules="none"  frame="none"  cols="7">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="71.0769%">
+<p><font size=3><span style=" text-indent: 0.3000in;"></span>Userid used to deliver messages to shared folders. For example,<br>
+<span style=" text-indent: 0.3000in;"></span>"bb+shared.blah" would be delivered to the "shared.blah" folder. By<br>
+<span style=" text-indent: 0.3000in;"></span>"+shared.blah" would be used.</p>
+<p><font size=3><B>netscapeurl:</B> <font size=3>http://andrew2.andrew.cmu.edu/cyrus/imapd/netscape-admin.html</p>
+</td>
+<td valign="top" align="left"  width="1.0000%">
+</td>
+<td valign="top" align="left"  width="8.1538%">
+<p><font size=3>if set to<br>
+<span style=" text-indent: 0.0500in;"></span>default,</p>
+</td>
+<td valign="top" align="left"  width="1.0000%">
+</td>
+<td valign="top" align="left"  width="16.6154%">
+<p><font size=3><span style=" text-indent: 0.0500in;"></span>"bb", email sent an email address</p>
+</td>
+<td valign="top" align="left"  width="1.3846%">
+</td>
+<td valign="top" align="left"  width="1.6923%">
+<p><font size=3>to<br>
+of</p>
+</td>
+</tr>
+</table>
+<p><font size=3>If enabled at compile time, this specifies a URL to reply when Netscape asks the server where the mail<br>
+<span style=" text-indent: 0.3000in;"></span>administration HTTP server is. The default is a site at CMU with a hopefully informative message; adminis-<br>
+<span style=" text-indent: 0.3000in;"></span>trators should set this to a local resource with some information of greater use.</p>
+<p><font size=3><B>sieveusehomedir:</B> <font size=3>false<br>
+<span style=" text-indent: 0.3000in;"></span>If enabled, deliver will look for Sieve scripts in user's home directories: <sup>~</sup>user/.sieve.</p>
+<p><font size=3><B>sievedir:</B> <font size=3>/usr/sieve<br>
+<span style=" text-indent: 0.3000in;"></span>If sieveusehomedir is false, this directory is searched for Sieve scripts.</p>
+<p><font size=3><B>sendmail:</B> <font size=3>/usr/lib/sendmail<br>
+<span style=" text-indent: 0.3000in;"></span>The pathname of the sendmail executable. Sieve uses sendmail for sending rejections, redirects and vaca-<br>
+<span style=" text-indent: 0.3000in;"></span>tion responses.</p>
+<p><font size=3><B>postmaster:</B> <font size=3>postmaster<br>
+<span style=" text-indent: 0.3000in;"></span>Username that is used as the 'From' address in rejection MDNs produced by sieve.</p>
+<p><font size=3><B>hashimapspool:</B> <font size=3>false<br>
+<span style=" text-indent: 0.3000in;"></span>If enabled, the partitions will also be hashed, in addition to the hashing done on configuration directories. This<br>
+<span style=" text-indent: 0.3000in;"></span>is recommended if one partition has a very bushy mailbox tree.</p>
+<p><font size=3><B>sieve_maxscriptsize:</B> <font size=3>32<br>
+<span style=" text-indent: 0.3000in;"></span>Maximum size (in kilobytes) any sieve script can be, enforced at submission by timsieved(8).</p>
+<p><font size=3><B>sieve_maxscripts:</B> <font size=3>5<br>
+<span style=" text-indent: 0.3000in;"></span>Maximum number of sieve scripts any user may have, enforced at submission by timsieved(8).</p>
+<p><font size=3><B>sasl_maximum_layer:</B> <font size=3>256<br>
+<span style=" text-indent: 0.3000in;"></span>Maximum SSF (security strength factor) that the server will allow a client to negotiate.</p>
+<p><font size=3><B>sasl_minimum_layer:</B> <font size=3>0<br>
+<span style=" text-indent: 0.3000in;"></span>The minimum SSF that the server will allow a client to negotiate. A value of 1 requires integrity protection;<br>
+<span style=" text-indent: 0.3000in;"></span>any higher value requires some amount of encryption.</p>
+<p><font size=3><B>sasl_pwcheck_method:</B> <font size=3>PAM<br>
+<span style=" text-indent: 0.3000in;"></span>The mechanism used by the server to verify plaintext passwords. Possible values also include "sasldb",<br>
+<span style=" text-indent: 0.3000in;"></span>"kerberos_v4", "passwd", and "shadow".</p>
+<p><font size=3><B>sasl_auto_transition:</B> <font size=3>no<br>
+<span style=" text-indent: 0.3000in;"></span>If enabled, the SASL library will automatically create authentication secrets when given a plaintext pass-<br>
+<span style=" text-indent: 0.3000in;"></span>word. See the SASL documentation.</p>
+<a name="sasl_option"></a><h2>sasl_option</h2><p><span style=" text-indent: 0.3000in;"></span><font size=3>Any other SASL option can be set by preceeding it with "sasl_". This file overrides the SASL configuration<br>
+<span style=" text-indent: 0.3000in;"></span>file.</p>
+<p><font size=3><B>lmtpsocket:</B> <font size=3>/var/imap/socket/lmtp<br>
+<span style=" text-indent: 0.3000in;"></span>Unix domain socket that lmtpd listens on.</p>
+<p><font size=3><B>idlesocket:</B> <font size=3>/var/imap/socket/idle<br>
+<span style=" text-indent: 0.3000in;"></span>Unix domain socket that idled listens on.</p>
+<p><font size=3><B>notifysocket:</B> <font size=3>/var/imap/socket/notify<br>
+<span style=" text-indent: 0.3000in;"></span>Unix domain socket that the new mail notification daemon listens on.<br>
+</p>
+
+<!-- Page: 4  -->
+<!-- left  margin: 100 -->
+<!-- right margin: 539 -->
+<a name="SEE ALSO"></a><h2>SEE ALSO</h2><p><font size=3><B>imapd(8)</B><font size=3>, <font size=3><B>pop3d(8)</B><font size=3>, <font size=3><B>lmtpd(8)</B><font size=3>, <font size=3><B>timsieved(8)</B><font size=3>, <font size=3><B>idled(8)</B><font size=3>, <font size=3><B>deliver(8)</B><font size=3>, <font size=3><B>master(8)</B><br>
+</p>
+</body>
+</html>
diff -ruN cyrus-imapd/doc/man/imclient.3.html cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/imclient.3.html
--- cyrus-imapd/doc/man/imclient.3.html	Thu Jan  1 01:00:00 1970
+++ cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/imclient.3.html	Sun Jul  8 17:04:45 2001
@@ -0,0 +1,338 @@
+<html>
+<head>
+<meta name="Content-Style" content="text/css">
+</head>
+<body>
+<a href="#NAME">NAME</a><br>
+<a href="#SYNOPSIS">SYNOPSIS</a><br>
+<a href="##include <cyrus/imclient.h>">#include <cyrus/imclient.h></a><br>
+<a href="#DESCRIPTION">DESCRIPTION</a><br>
+<a href="#imclient_connect()">imclient_connect()</a><br>
+<a href="#imclient_servername()">imclient_servername()</a><br>
+<a href="#imclient_addcallback()">imclient_addcallback()</a><br>
+<a href="#imclient_processoneevent()">imclient_processoneevent()</a><br>
+<a href="#imclient_authenticate()">imclient_authenticate()</a><br>
+<a href="#EXAMPLES">EXAMPLES</a><br>
+<a href="#BUGS">BUGS</a><br>
+<a href="#SEE ALSO">SEE ALSO</a><br>
+<a href="#select(2)">select(2)</a><br>
+<a href="#KEYWORDS">KEYWORDS</a><br>
+<a href="#COPYRIGHT">COPYRIGHT</a><br>
+<!-- Creator     : groff version 1.15  -->
+<!-- CreationDate: Sun Jul  8 12:04:45 2001
+ -->
+<!-- Total number of pages: 4 -->
+<!-- Page: 1 -->
+<!-- left  margin: 100 -->
+<!-- right margin: 747 -->
+<a name="NAME"></a><h2>NAME</h2><p><font size=3>imclient library - authenticating callback interface to IMAP/IMSP servers</p>
+<a name="SYNOPSIS"></a><h2>SYNOPSIS</h2><a name="#include <cyrus/imclient.h>"></a><h2>#include <cyrus/imclient.h></h2>
+<table width="100%"  rules="none"  frame="none"  cols="2">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="76.0433%">
+<p><font size=3><B>int imclient_connect(struct imclient **</B><font size=3><I>imclient</I><font size=3><B>, const char *</B><font size=3><I>host</I><font size=3><B>, const char *</B><font size=3><I>port</I><font size=3><B>);</p>
+</B><p><font size=3><B>void imclient_close (struct imclient *</B><font size=3><I>imclient</I><font size=3><B>);</p>
+</B><p><font size=3><B>void imclient_setflags(struct imclient *</B><font size=3><I>imclient</I><font size=3><B>, int</B><font size=3><I>flags</I><font size=3><B>);</p>
+</B><p><font size=3><B>void imclient_clearflags (struct imclient *</B><font size=3><I>imclient</I><font size=3><B>, int</B><font size=3><I>flags</I><font size=3><B>);</p>
+</B><p><font size=3><B>char* imclient_servername (struct imclient *</B><font size=3><I>imclient</I><font size=3><B>);</p>
+</B></td>
+<td valign="top" align="left"  width="23.9567%">
+</td>
+</tr>
+</table>
+<p><font size=3><B>void imclient_addcallback (struct imclient * imclient ,...);</p>
+</B>
+<table width="100%"  rules="none"  frame="none"  cols="2">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="99.0726%">
+<p><font size=3><B>void imclient_send (struct imclient *</B><font size=3><I>imclient</I><font size=3><B>, void (*</B><font size=3><I>finishproc</I><font size=3><B>)(), void *</B><font size=3><I>finishrock</I><font size=3><B>, const char *</B><font size=3><I>fmt</I><font size=3><B>, ...);</p>
+</B><p><font size=3><B>void imclient_getselectinfo (struct imclient *</B><font size=3><I>imclient</I><font size=3><B>, int *</B><font size=3><I>fd</I><font size=3><B>, int *</B> <font size=3><I>wanttowrite</I><font size=3><B>);</p>
+</B><p><font size=3><B>void imclient_processoneevent (struct imclient *</B><font size=3><I>imclient</I><font size=3><B>);</p>
+</B><p><font size=3><B>int imclient_authenticate (struct imclient *</B><font size=3><I>imclient</I><font size=3><B>, struct sasl_client **</B><font size=3><I>availmech</I><font size=3><B>, const char *</B><font size=3><I>service</I><font size=3><B>, const<br>
+char *</B><font size=3><I>user</I><font size=3><B>, int</B> <font size=3><I>protallowed</I><font size=3><B>);</p>
+</B></td>
+<td valign="top" align="left"  width="1.0000%">
+</td>
+</tr>
+</table>
+<a name="DESCRIPTION"></a><h2>DESCRIPTION</h2>
+<table width="100%"  rules="none"  frame="none"  cols="2">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="99.8454%">
+<p><font size=3>The imclient library functions are distributed with Cyrus IMAP and IMSP. These functions are used for building<br>
+IMAP/IMSP client software. These functions handle Kerberos authentication and can set callbacks based on the<br>
+keyword in untagged replies or based on the command tag at the end of command replies.</p>
+<p><font size=3>Users must link with the -lcyrus switch, and must supply a function called <font size=3><I>fatal</I> <font size=3>to be called in case of any error<br>
+within <font size=3><I>libcyrus.a.</p>
+</I><p><font size=3>All of the <font size=3><B>imclient</B> <font size=3>functions begin with the prefix <font size=3><I>imclient</I> <font size=3>and takes an argument of type <font size=3><B>struct imclient *</B> <font size=3>as the<br>
+first argument which is initialized by <font size=3><B>imclient_connect</B> <font size=3>and freed by <font size=3><B>imclient_close.</p>
+</B><p><font size=3>See below for a description of each function.</p>
+</td>
+<td valign="top" align="left"  width="1.0000%">
+</td>
+</tr>
+</table>
+<a name="imclient_connect()"></a><h2>imclient_connect()</h2>
+<table width="100%"  rules="none"  frame="none"  cols="2">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="4.6368%">
+</td>
+<td valign="top" align="left"  width="95.3632%">
+<p><font size=3>Connects the client server to the host. If successful, it returns 0 and sets the imclient argument to a pointer to<br>
+an <font size=3><B>imclient</B> <font size=3>struct. The <font size=3><B>imclient</B> <font size=3>struct represents the current connection, flags, and callbacks. On failure,<br>
+the current <font size=3><B>errno</B> <font size=3>is returned if a system call failed, -1 is returned if the host name was not found, and -2 is<br>
+returned if the service name was not found.</p>
+</td>
+</tr>
+</table>
+<p><font size=3><B>imclient_close()</p>
+</B>
+<table width="100%"  rules="none"  frame="none"  cols="3">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="1.0000%">
+</td>
+<td valign="top" align="left"  width="98.6090%">
+<p><font size=3><span style=" text-indent: 0.2700in;"></span>Closes and frees the <font size=3><B>imclient</B> <font size=3>connection.</p>
+<p><font size=3><B>imclient_setflags()<br>
+<span style=" text-indent: 0.2700in;"></span></B>Sets the flags specified by the <font size=3><B>flags</B> <font size=3>argument on the <font size=3><B>imclient</B> <font size=3>connection. Currently the only flag allowed is<br>
+<span style=" text-indent: 0.2700in;"></span><B>IMCLIENT_CONN_NONSYNCLITERAL</B> <font size=3>(this flag indicates that the server supports non-synchronizing<br>
+<span style=" text-indent: 0.2700in;"></span>literals described by the LITERAL+ extension).</p>
+</td>
+<td valign="top" align="left"  width="1.0000%">
+</td>
+</tr>
+</table>
+<p><font size=3><B>imclient_clearflags()<br>
+<span style=" text-indent: 0.3000in;"></span></B>Clears the flags specified by the <font size=3><B>flags</B> <font size=3>argument on the <font size=3><B>imclient</B> <font size=3>connection.</p>
+<a name="imclient_servername()"></a><h2>imclient_servername()</h2><p><span style=" text-indent: 0.3000in;"></span><font size=3>Returns a char * pointer to the name of the server connected to by <font size=3><B>imclient.</p>
+</B><a name="imclient_addcallback()"></a><h2>imclient_addcallback()</h2>
+<table width="100%"  rules="none"  frame="none"  cols="2">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="4.6368%">
+</td>
+<td valign="top" align="left"  width="95.3632%">
+<p><font size=3>Adds an untagged data callback to the <font size=3><B>imclient</B> <font size=3>connection. The function <font size=3><B>imclient_addcallback</B> <font size=3>takes call-<br>
+backs of the type <font size=3><B>imclient_proc_t</B> <font size=3>which is defined to be:<br>
+<span style=" text-indent: 1.2000in;"></span>typedef void imclient_proc_t (struct imclient *imclient, void *rock, struct imclient_reply<br>
+<span style=" text-indent: 1.2000in;"></span>*reply);</p>
+<p><font size=3>and <font size=3><B>struct imclient_reply *</B> <font size=3>is defined to be:</p>
+<p><span style=" text-indent: 1.2000in;"></span><font size=3>struct imclient_reply {<br>
+<span style=" text-indent: 1.8200in;"></span>char *keyword;<br>
+<span style=" text-indent: 1.8200in;"></span>long msgno;<br>
+<span style=" text-indent: 1.8200in;"></span>char *text;<br>
+<span style=" text-indent: 1.2000in;"></span>};</p>
+<p><font size=3>After the first argument <font size=3><B>imclient,</B> <font size=3>there can be zero or more instances of the set of <font size=3><B>keyword, flags, proc,</B> <font size=3>and</p>
+</td>
+</tr>
+</table>
+
+<!-- Page: 2  -->
+<!-- left  margin: 100 -->
+<!-- right margin: 750 -->
+
+<table width="100%"  rules="none"  frame="none"  cols="3">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="4.6154%">
+</td>
+<td valign="top" align="left"  width="94.9231%">
+<p><font size=3><B>rock,</B> <font size=3>each adding or changing a single callback. Each instance adds or changes the callback for <font size=3><B>keyword.<br>
+</B>The argument, <font size=3><B>flags,</B> <font size=3>specifies information about the parsing of the untagged data. <font size=3><B>proc</B> <font size=3>and <font size=3><B>rock</B> <font size=3>specify the<br>
+callback function and rock to invoke when the untagged data is received. <font size=3><B>proc</B> <font size=3>may be a null pointer, in<br>
+which case no function is invoked. The callback function may not call the functions <font size=3><B>imclient_close(),<br>
+imclient_send(), imclient_eof(), imclient_processoneevent(),</B> <font size=3>or <font size=3><B>imclient_authenticate()</B> <font size=3>on the connec-<br>
+tion. The callback function may over write the text of untagged data.</p>
+</td>
+<td valign="top" align="left"  width="1.0000%">
+</td>
+</tr>
+</table>
+<p><font size=3><B>imclient_send()</p>
+</B>
+<table width="100%"  rules="none"  frame="none"  cols="3">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="4.6154%">
+</td>
+<td valign="top" align="left"  width="93.3846%">
+<p><font size=3>Sends a new command to the <font size=3><B>imclient</B> <font size=3>connection. <font size=3><B>finishproc</B> <font size=3>and <font size=3><B>finnishrock</B> <font size=3>are the function and rock<br>
+called when the command completes. <font size=3><B>functionproc</B> <font size=3>may be a null pointer, in which case no callback is<br>
+made. The call back function may not call the functions <font size=3><B>imclient_close(), imclient_send(), imclient_eof(),<br>
+imclient_processoneevent(),</B> <font size=3>or <font size=3><B>imclient_authenticate()</B> <font size=3>on the connection. The argument, <font size=3><B>fmt</B> <font size=3>, is a print<br>
+like specification of the command. It must not include the tag as the tag is automatically added by<br>
+imclient_send(). The defined %-sequences are:</p>
+<p><span style=" text-indent: 1.2000in;"></span><font size=3><B>%%</B> <font size=3>for %</p>
+<p><span style=" text-indent: 1.2000in;"></span><font size=3><B>%a</B> <font size=3>for an IMAP atom</p>
+<p><span style=" text-indent: 1.2000in;"></span><font size=3><B>%s</B> <font size=3>for an astring (which will be quoted or literalized as needed)</p>
+<p><span style=" text-indent: 1.2000in;"></span><font size=3><B>%d</B> <font size=3>for a decimal</p>
+<p><span style=" text-indent: 1.2000in;"></span><font size=3><B>%u</B> <font size=3>for an unsigned decimal</p>
+<p><span style=" text-indent: 1.2000in;"></span><font size=3><B>%v</B> <font size=3>for #astring (argument is a null-terminated array of <font size=3><B>char *</B> <font size=3>which are written as<br>
+<span style=" text-indent: 1.2000in;"></span>space separated astrings)</p>
+</td>
+<td valign="top" align="left"  width="2.0000%">
+</td>
+</tr>
+</table>
+<p><font size=3><B>imclient_getselectinfo()<br>
+<span style=" text-indent: 0.3000in;"></span></B>Gets the information for calling <font size=3><B>select(2). fd</B> <font size=3>is filled in with the file descriptor to <font size=3><B>select(2)</B> <font size=3>for read. <font size=3><B>want-<br>
+<span style=" text-indent: 0.3000in;"></span>towrite</B> <font size=3>is filled in with a nonzero value if select should be used for write as well.</p>
+<a name="imclient_processoneevent()"></a><h2>imclient_processoneevent()</h2><p><span style=" text-indent: 0.3000in;"></span><font size=3>Processes one input or output event on the <font size=3><B>imclient</B> <font size=3>connection.</p>
+<a name="imclient_authenticate()"></a><h2>imclient_authenticate()</h2>
+<table width="100%"  rules="none"  frame="none"  cols="2">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="4.6154%">
+</td>
+<td valign="top" align="left"  width="95.3846%">
+<p><font size=3>Authenticates the <font size=3><B>imclient</B> <font size=3>connection using one of the mechanisms in <font size=3><B>availmech.</B> <font size=3>The argument, <font size=3><B>user,</B> <font size=3>if not<br>
+NULL, specifies the user to authenticate as. If the user is NULL, the current user is used. The argument<br>
+<B>protallowed</B> <font size=3>is a bitmask of permissible protection mechanisms.</p>
+<p><font size=3>On success, 0 is returned. On failure (i.e., "BAD" keyboard, or no authentication mechanisms worked), 1 is<br>
+returned. On extreme failure (premature "OK"), 2 is returned.</p>
+</td>
+</tr>
+</table>
+<a name="EXAMPLES"></a><h2>EXAMPLES</h2>
+<table width="100%"  rules="none"  frame="none"  cols="2">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="98.4615%">
+<p><font size=3>The following code is a possible skeletion of <font size=3><B>imclient</B> <font size=3>that relies on Kerberos to do authentication. This code pre-<br>
+forms an IMAP CAPABILITY request and prints out the result.</p>
+<p><font size=3>struct sasl_client;<br>
+#include &lt;cyrus/xmalloc.h&gt; /* example uses xstrdup */<br>
+#include &lt;cyrus/sasl.h&gt;<br>
+#include &lt;cyrus/imclient.h&gt;<br>
+#include &lt;stdio.h&gt;</p>
+<p><font size=3>extern struct sasl_client krb_sasl_client;</p>
+<p><font size=3>struct sasl_client *login_sasl_client[] = {</p>
+</td>
+<td valign="top" align="left"  width="1.5385%">
+</td>
+</tr>
+</table>
+<p><font size=3>&krb_sasl_client,<br>
+<span style=" text-indent: 0.1200in;"></span>NULL</p>
+
+<table width="100%"  rules="none"  frame="none"  cols="2">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="37.3846%">
+<p><font size=3>};<br>
+struct imclient *imclient;<br>
+char server[] = "cyrus.andrew.cmu.edu" ;<br>
+char port[] = "imap";</p>
+<p><font size=3>void fatal(char* message, int rc) {</p>
+</td>
+<td valign="top" align="left"  width="62.6154%">
+</td>
+</tr>
+</table>
+<p><font size=3>fprintf(stderr, "fatal error: %s\n", message);<br>
+<span style=" text-indent: 0.1200in;"></span>exit(rc);<br>
+}</p>
+<p><font size=3>static void callback_capability(struct imclient *imclient,<br>
+<span style=" text-indent: 2.0000in;"></span>void *rock,<br>
+</p>
+
+<!-- Page: 3  -->
+<!-- left  margin: 100 -->
+<!-- right margin: 721 -->
+<p><span style=" text-indent: 2.0000in;"></span><font size=3>struct imclient_reply *reply) {</p>
+
+<table width="100%"  rules="none"  frame="none"  cols="4">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="1.1272%">
+<p><font size=3>}</p>
+</td>
+<td valign="top" align="left"  width="1.0000%">
+</td>
+<td valign="top" align="left"  width="43.6393%">
+<p><font size=3>if (reply-&gt;text != NULL) {<br>
+<span style=" text-indent: 0.3800in;"></span>*((char**)rock) = xstrdup( reply-&gt;text );<br>
+}</p>
+</td>
+<td valign="top" align="left"  width="54.4283%">
+</td>
+</tr>
+</table>
+
+<table width="100%"  rules="none"  frame="none"  cols="2">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="58.2931%">
+<p><font size=3>static void end_command (struct imclient *connection, void*<br>
+<span style=" text-indent: 1.5000in;"></span>rock, struct imclient_reply *inmsg) {<br>
+<span style=" text-indent: 0.1200in;"></span>(*(int*)rock)--;<br>
+}</p>
+<p><font size=3>main() {</p>
+</td>
+<td valign="top" align="left"  width="41.7069%">
+</td>
+</tr>
+</table>
+
+<table width="100%"  rules="none"  frame="none"  cols="4">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="1.1272%">
+</td>
+<td valign="top" align="left"  width="1.0000%">
+</td>
+<td valign="top" align="left"  width="73.7520%">
+<p><font size=3>char* capability_string;<br>
+int nc;</p>
+<p><font size=3>if (imclient_connect(&imclient, server, port)) {<br>
+<span style=" text-indent: 0.3800in;"></span>fprintf(stderr,<br>
+<span style=" text-indent: 0.8800in;"></span>"error: Couldn't connect to %s %s\n",<br>
+<span style=" text-indent: 0.8800in;"></span>server, port);<br>
+<span style=" text-indent: 0.3800in;"></span>exit(1);<br>
+}</p>
+<p><font size=3>if (imclient_authenticate(imclient, login_sasl_client, "imap"<br>
+<span style=" text-indent: 1.5600in;"></span>/* service */,<br>
+<span style=" text-indent: 1.5600in;"></span>NULL /* user */, SASL_PROT_ANY)) {<br>
+<span style=" text-indent: 0.3800in;"></span>exit(1);<br>
+}</p>
+<p><font size=3>imclient_addcallback(imclient, "CAPABILITY",<br>
+<span style=" text-indent: 1.4100in;"></span>CALLBACK_NOLITERAL,<br>
+<span style=" text-indent: 1.4100in;"></span>callback_capability,<br>
+<span style=" text-indent: 1.4100in;"></span>&capability_string,<br>
+<span style=" text-indent: 1.4100in;"></span>NULL);</p>
+<p><font size=3>nc = 1;</p>
+<p><font size=3>imclient_send(imclient, end_command,<br>
+<span style=" text-indent: 0.9400in;"></span>(void*) &nc, "CAPABILITY");</p>
+<p><font size=3>while(nc &gt; 0) {<br>
+<span style=" text-indent: 0.3800in;"></span>imclient_processoneevent(imclient);<br>
+}</p>
+<p><font size=3>if (strstr("LITERAL+", capability_string)) {<br>
+<span style=" text-indent: 0.3800in;"></span>imclient_setflags(imclient, IMCLIENT_CONN_NONSYNCLITERAL);<br>
+}</p>
+<p><font size=3>imclient_send(imclient, NULL, NULL, "LOGOUT");<br>
+imclient_close(imclient);</p>
+<p><font size=3>printf("capability text is: %s\n", capability_string);</p>
+<p><font size=3>free(capability_string);</p>
+</td>
+<td valign="top" align="left"  width="24.3156%">
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="1.1272%">
+<p><font size=3>}</p>
+</td>
+<td valign="top" align="left"  width="1.0000%">
+</td>
+<td valign="top" align="left"  width="73.7520%">
+</td>
+<td valign="top" align="left"  width="24.3156%">
+</td>
+</tr>
+</table>
+<a name="BUGS"></a><h2>BUGS</h2><p><font size=3>No known bugs.</p>
+<a name="SEE ALSO"></a><h2>SEE ALSO</h2><p><font size=3><B>cyradm, imapd, imspd,</B> <font size=3>RFC2033 (IMAP LITERAL+ extension), RFC2060 (IMAP4rev1 specification), and<br>
+</p>
+<a name="select(2)"></a><h2>select(2)</h2>
+<!-- Page: 4  -->
+<!-- left  margin: 100 -->
+<!-- right margin: 741 -->
+<a name="KEYWORDS"></a><h2>KEYWORDS</h2><p><font size=3>IMAP, ACAP, IMSP, Kerberos, Authentication</p>
+<a name="COPYRIGHT"></a><h2>COPYRIGHT</h2><p><font size=3>Copyright 1997, Carnegie Mellon University. All Rights Reserved.</p>
+<p><font size=3>This software is made available for academic and research purposes only. No commercial license is hereby<br>
+granted. Copying and other reproduction is authorized only for research, education, and other non-commercial<br>
+purposes. No warranties, either expressed or implied, are made regarding the operation, use, or results of the<br>
+software. Such a release does not permit use of the code for commercial purposes or benefits by anyone without specific, additional permission by the owner of the code.<br>
+</p>
+</body>
+</html>
diff -ruN cyrus-imapd/doc/man/imtest.1.html cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/imtest.1.html
--- cyrus-imapd/doc/man/imtest.1.html	Thu Jan  1 01:00:00 1970
+++ cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/imtest.1.html	Sun Jul  8 17:04:46 2001
@@ -0,0 +1,92 @@
+<html>
+<head>
+<meta name="Content-Style" content="text/css">
+</head>
+<body>
+<a href="#NAME">NAME</a><br>
+<a href="#SYNOPSIS">SYNOPSIS</a><br>
+<a href="#DESCRIPTION">DESCRIPTION</a><br>
+<a href="#OPTIONS">OPTIONS</a><br>
+<a href="#SEE ALSO">SEE ALSO</a><br>
+<a href="#imapd(8)">imapd(8)</a><br>
+<!-- Creator     : groff version 1.15  -->
+<!-- CreationDate: Sun Jul  8 12:04:46 2001
+ -->
+<!-- Total number of pages: 1 -->
+<!-- Page: 1 -->
+<!-- left  margin: 100 -->
+<!-- right margin: 750 -->
+<a name="NAME"></a><h2>NAME</h2><p><font size=3>imtest - interactive IMAP test program</p>
+<a name="SYNOPSIS"></a><h2>SYNOPSIS</h2><p><font size=3><B>imtest</B> <font size=3>[ <font size=3><B>-t</B> <font size=3><I>keyfile</I> <font size=3>] [ <font size=3><B>-p</B> <font size=3><I>port</I> <font size=3>] [ <font size=3><B>-m</B> <font size=3><I>mechanism</I> <font size=3>]<br>
+<span style=" text-indent: 0.2100in;"></span>[ <font size=3><B>-u</B> <font size=3><I>user</I> <font size=3>] [ <font size=3><B>-a</B> <font size=3><I>user</I> <font size=3>] [ <font size=3><B>-k</B> <font size=3><I>num</I> <font size=3>] [ <font size=3><B>-l</B> <font size=3><I>num</I> <font size=3>]<br>
+<span style=" text-indent: 0.2100in;"></span>[ <font size=3><B>-r</B> <font size=3><I>realm</I> <font size=3>] [ <font size=3><B>-f</B> <font size=3><I>file</I> <font size=3>] [ <font size=3><B>-v</B> <font size=3>] [ <font size=3><B>-z</B> <font size=3>] <font size=3><I>hostname</p>
+</I><a name="DESCRIPTION"></a><h2>DESCRIPTION</h2><p><font size=3><I>imtest</I> <font size=3>is a utility that allows you to authenticate to a IMAP or IMSP server and interactively issue commands to it. Once authenticated you may issue any IMAP or IMSP command by simply typing it in. It is capable of multiple SASL authentication mechanisms and handles encryption layers transparently. This utility is often used for testing the operation of a imsp or imap server. Also those developing IMAP clients find it useful.</p>
+<a name="OPTIONS"></a><h2>OPTIONS</h2>
+<table width="100%"  rules="none"  frame="none"  cols="3">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="12.7692%">
+<p><font size=3><B>-t</B> <font size=3><I>keyfile</p>
+</I></td>
+<td valign="top" align="left"  width="7.2308%">
+</td>
+<td valign="top" align="left"  width="80.0000%">
+<p><font size=3>Enable TLS. <font size=3><I>keyfile</I> <font size=3>contains the TLS public and private keys. Specify <font size=3><B>""</B> <font size=3>to negotiate a TLS encryption layer but not use TLS authentication.</p>
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="12.7692%">
+<p><font size=3><B>-p</B> <font size=3><I>port</p>
+</I><p><font size=3><B>-m</B> <font size=3><I>mechanism</p>
+</I></td>
+<td valign="top" align="left"  width="7.2308%">
+</td>
+<td valign="top" align="left"  width="80.0000%">
+<p><font size=3>Port to connect to. If left off this defaults to <font size=3><B>imap</B> <font size=3>as defined in /etc/services.</p>
+<p><font size=3>Force imtest to use <font size=3><I>mechanism</I> <font size=3>for authentication. If not specified the strongest authentica- tion mechanism supported by the server is chosen. Specify <font size=3><B>login</B> <font size=3>to use the LOGIN com- mand instead of AUTHENTICATE.</p>
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="12.7692%">
+<p><font size=3><B>-u</B> <font size=3><I>user</p>
+</I><p><font size=3><B>-a</B> <font size=3><I>user</p>
+</I><p><font size=3><B>-k</B> <font size=3><I>num</p>
+</I><p><font size=3><B>-l</B> <font size=3><I>num</p>
+</I></td>
+<td valign="top" align="left"  width="7.2308%">
+</td>
+<td valign="top" align="left"  width="80.0000%">
+<p><font size=3>Username to use for authentication; defaults to the current user.</p>
+<p><font size=3>Authname to use for authentication; defaults to the current user.</p>
+<p><font size=3>Minimum protection layer required.</p>
+<p><font size=3>Maximum protection layer to use (<font size=3><B>0</B><font size=3>=none; <font size=3><B>1=</B><font size=3>integrity; etc). For example if you are using the KERBEROS_V4 authentication mechanism specifying <font size=3><B>0</B> <font size=3>will force imtest to not use any layer and specifying <font size=3><B>1</B> <font size=3>will force it to use the integrity layer. By default the maximum sup- ported protection layer will be used.</p>
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="12.7692%">
+<p><font size=3><B>-r</B> <font size=3><I>realm</p>
+</I></td>
+<td valign="top" align="left"  width="7.2308%">
+</td>
+<td valign="top" align="left"  width="80.0000%">
+<p><font size=3>Specify the <font size=3><I>realm</I> <font size=3>to use. Certain authentication mechanisms (e.g. DIGEST-MD5) may<br>
+require one to specify the realm.</p>
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="12.7692%">
+<p><font size=3><B>-f</B> <font size=3><I>file</p>
+</I><p><font size=3><B>-v</p>
+</B><p><font size=3><B>-z</p>
+</B></td>
+<td valign="top" align="left"  width="7.2308%">
+</td>
+<td valign="top" align="left"  width="80.0000%">
+<p><font size=3>Pipe <font size=3><I>file</I> <font size=3>into connection after authentication.</p>
+<p><font size=3>Verbose. Print out more information than usual.</p>
+<p><font size=3>Timing test.</p>
+</td>
+</tr>
+</table>
+<br>
+<a name="SEE ALSO"></a><h2>SEE ALSO</h2><a name="imapd(8)"></a><h2>imapd(8)</h2></body>
+</html>
diff -ruN cyrus-imapd/doc/man/installsieve.1.html cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/installsieve.1.html
--- cyrus-imapd/doc/man/installsieve.1.html	Thu Jan  1 01:00:00 1970
+++ cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/installsieve.1.html	Sun Jul  8 17:04:46 2001
@@ -0,0 +1,31 @@
+<html>
+<head>
+<meta name="Content-Style" content="text/css">
+</head>
+<body>
+<a href="#NAME">NAME</a><br>
+<a href="#SYNOPSIS">SYNOPSIS</a><br>
+<a href="#installsieve">installsieve</a><br>
+<a href="#DESCRIPTION">DESCRIPTION</a><br>
+<a href="#OPTIONS">OPTIONS</a><br>
+<!-- Creator     : groff version 1.15  -->
+<!-- CreationDate: Sun Jul  8 12:04:46 2001
+ -->
+<!-- Total number of pages: 1 -->
+<!-- Page: 1 -->
+<!-- left  margin: 100 -->
+<!-- right margin: 750 -->
+<a name="NAME"></a><h2>NAME</h2><p><font size=3>installsieve - user utility for managing sieve scripts</p>
+<a name="SYNOPSIS"></a><h2>SYNOPSIS</h2><a name="installsieve"></a><h2>installsieve</h2><a name="DESCRIPTION"></a><h2>DESCRIPTION</h2><p><font size=3><I>installsieve</I> <font size=3>is a utility that allows users to manage their sieve scripts kept on the server.</p>
+<a name="OPTIONS"></a><h2>OPTIONS</h2><p><font size=3><I>-v &lt;name&gt;</I> <font size=3>View script with the given name. The script if retrieved sucessfully is output to standard output.</p>
+<p><font size=3><I>-l</I> <font size=3>List all of the scripts currently on the server. If one of the scripts is active a arrow is printed indicating that it is the active script.</p>
+<p><font size=3><I>-p &lt;port&gt;</I> <font size=3>Port to connect to. If left off this defaults to "sieve" as defined in /etc/services.</p>
+<p><font size=3><I>-i &lt;file&gt;</I> <font size=3>Install a file onto the server. If a script with the same name already exists on the server it is overwritten. Upon sucessfully putting the script on the server the script is set active. If &lt;file&gt; has the extension .script it is chopped when put on the server since sieve names may not contain a '.'.</p>
+<p><font size=3><I>-a &lt;name&gt;</I> <font size=3>Set &lt;name&gt; as the active script. The list of available names can be obtained from the '-l' option..</p>
+<p><font size=3><I>-d &lt;name&gt;</I> <font size=3>Delete the sieve script on the server with &lt;name&gt;.</p>
+<p><font size=3><I>-m &lt;mechanism&gt;</I> <font size=3>Force installsieve to use &lt;mechanism&gt; for authentication. If not specified the strongest authen- tication mechanism is chosen.</p>
+<p><font size=3><I>-g &lt;name&gt;</I> <font size=3>Get the sieve script with &lt;name&gt; and save it to disk with a ".script" extension. If a file with that name already exists it is overwritten.</p>
+<p><font size=3><I>-u &lt;user&gt;</I> <font size=3>Userid/Authname to use for authentication; by default, the current user.<br>
+</p>
+</body>
+</html>
diff -ruN cyrus-imapd/doc/man/ipurge.8.html cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/ipurge.8.html
--- cyrus-imapd/doc/man/ipurge.8.html	Thu Jan  1 01:00:00 1970
+++ cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/ipurge.8.html	Sun Jul  8 17:04:46 2001
@@ -0,0 +1,72 @@
+<html>
+<head>
+<meta name="Content-Style" content="text/css">
+</head>
+<body>
+<a href="#NAME">NAME</a><br>
+<a href="#SYNOPSIS">SYNOPSIS</a><br>
+<a href="#DESCRIPTION">DESCRIPTION</a><br>
+<a href="#OPTIONS">OPTIONS</a><br>
+<a href="#FILES">FILES</a><br>
+<a href="#/etc/imapd.conf">/etc/imapd.conf</a><br>
+<!-- Creator     : groff version 1.15  -->
+<!-- CreationDate: Sun Jul  8 12:04:46 2001
+ -->
+<!-- Total number of pages: 1 -->
+<!-- Page: 1 -->
+<!-- left  margin: 100 -->
+<!-- right margin: 750 -->
+<a name="NAME"></a><h2>NAME</h2><p><font size=3>ipurge - delete mail from IMAP mailbox or partition based on age or size</p>
+<a name="SYNOPSIS"></a><h2>SYNOPSIS</h2><p><font size=3><B>ipurge</B> <font size=3>[ <font size=3><B>-C</B> <font size=3><I>config-file</I> <font size=3>] [ <font size=3><B>-x</B> <font size=3>]<br>
+<span style=" text-indent: 0.2100in;"></span>[ <font size=3><B>-d</B> <font size=3><I>days</I> <font size=3>| <font size=3><B>-b</B> <font size=3><I>bytes</I> <font size=3>| <font size=3><B>-k</B> <font size=3><I>Kbytes</I> <font size=3>| <font size=3><B>-m</B> <font size=3><I>Mbytes</I> <font size=3>]<br>
+<span style=" text-indent: 0.2100in;"></span>[ <font size=3><I>mailbox-pattern</I><font size=3>... ]</p>
+<a name="DESCRIPTION"></a><h2>DESCRIPTION</h2><p><font size=3><I>Ipurge</I> <font size=3>deletes messages from the mailbox(es) specified by <font size=3><I>mailbox-pattern</I> <font size=3>that are older or larger than specified by the <font size=3><B>-d</B><font size=3>, <font size=3><B>-b</B><font size=3>, <font size=3><B>-k</B> <font size=3>or <font size=3><B>-m</B> <font size=3>options. If no <font size=3><I>mailbox-pattern</I> <font size=3>is given, <font size=3><I>ipurge</I> <font size=3>works on all mailboxes. If the <font size=3><B>-x</B> <font size=3>option is given, the message age and size MUST match exactly those specified by <font size=3><B>-d</B><font size=3>, <font size=3><B>-b</B><font size=3>, <font size=3><B>-k</B> <font size=3>or <font size=3><B>-m</B><font size=3>. The are no default val- ues, and at least one of <font size=3><B>-d</B><font size=3>, <font size=3><B>-b</B><font size=3>, <font size=3><B>-k</B> <font size=3>or <font size=3><B>-m</B> <font size=3>MUST be specified.</p>
+<p><font size=3><I>Ipurge</I> <font size=3>reads its configuration options out of the <font size=3><I>imapd.conf</I><font size=3>(5) file unless specified otherwise by <font size=3><B>-C</B><font size=3>.</p>
+<a name="OPTIONS"></a><h2>OPTIONS</h2>
+<table width="100%"  rules="none"  frame="none"  cols="4">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="12.6154%">
+<p><font size=3><B>-C</B> <font size=3><I>config-file</p>
+</I><p><font size=3><B>-d</B> <font size=3><I>days</p>
+</I><p><font size=3><B>-b</B> <font size=3><I>bytes</p>
+</I><p><font size=3><B>-k</B> <font size=3><I>Kbytes</p>
+</I></td>
+<td valign="top" align="left"  width="7.3846%">
+</td>
+<td valign="top" align="left"  width="57.6923%">
+<p><font size=3>Read configuration options from <font size=3><I>config-file</I><font size=3>.</p>
+<p><font size=3>Age of message in <font size=3><I>days</I><font size=3>.</p>
+<p><font size=3>Size of message in <font size=3><I>bytes</I><font size=3>.</p>
+<p><font size=3>Size of message in <font size=3><I>Kbytes</I> <font size=3>(2<sup>^</sup>10 bytes).</p>
+</td>
+<td valign="top" align="left"  width="22.3077%">
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="12.6154%">
+<p><font size=3><B>-m</B> <font size=3><I>Mbytes</p>
+</I></td>
+<td valign="top" align="left"  width="7.3846%">
+</td>
+<td valign="top" align="left"  width="57.6923%">
+<p><font size=3>Size of message in <font size=3><I>Mbytes</I> <font size=3>(2<sup>^</sup>20 bytes).</p>
+</td>
+<td valign="top" align="left"  width="22.3077%">
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="12.6154%">
+<p><font size=3><B>-x</p>
+</B></td>
+<td valign="top" align="left"  width="7.3846%">
+</td>
+<td valign="top" align="left"  width="57.6923%">
+<p><font size=3>Perform an exact match on age or size (instead of older or larger).</p>
+</td>
+<td valign="top" align="left"  width="22.3077%">
+</td>
+</tr>
+</table>
+<br>
+<a name="FILES"></a><h2>FILES</h2><a name="/etc/imapd.conf"></a><h2>/etc/imapd.conf</h2></body>
+</html>
diff -ruN cyrus-imapd/doc/man/krb.equiv.5.html cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/krb.equiv.5.html
--- cyrus-imapd/doc/man/krb.equiv.5.html	Thu Jan  1 01:00:00 1970
+++ cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/krb.equiv.5.html	Sun Jul  8 17:04:46 2001
@@ -0,0 +1,35 @@
+<html>
+<head>
+<meta name="Content-Style" content="text/css">
+</head>
+<body>
+<a href="#NAME">NAME</a><br>
+<a href="#DESCRIPTION">DESCRIPTION</a><br>
+<a href="#SAMPLE FILE">SAMPLE FILE</a><br>
+<!-- Creator     : groff version 1.15  -->
+<!-- CreationDate: Sun Jul  8 12:04:46 2001
+ -->
+<!-- Total number of pages: 1 -->
+<!-- Page: 1 -->
+<!-- left  margin: 100 -->
+<!-- right margin: 750 -->
+<a name="NAME"></a><h2>NAME</h2><p><font size=3><B>/etc/krb.equiv</B> <font size=3>- Kerberos equivalences</p>
+<a name="DESCRIPTION"></a><h2>DESCRIPTION</h2><p><font size=3><I>krb.equiv</I> <font size=3>contains zero or more lines, each of which describes a mapping of a kerberos principal (<font size=3><I>userid@host</I><font size=3>) to a local user (<font size=3><I>userid</I> <font size=3>or alias). Each line of the file consists of two fields, separated by at least one whitespace char- acter; other blanks are ignored. The first field is the kerberos principal name to remap, and the second is the name of the corresponding local user.</p>
+<a name="SAMPLE FILE"></a><h2>SAMPLE FILE</h2>
+<table width="100%"  rules="none"  frame="none"  cols="2">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="29.0769%">
+<p><font size=3>tyq4@ANDY.CMU.EDU tyq4<br>
+tyq4@DEANNA.ORG tyq4<br>
+ty347@ECE.CMU.EDU tyq4<br>
+jj12@ANDY.CMU.EDU tick<br>
+tick@DEANNA.ORG tick<br>
+jy9o@ANDY.CMU.EDU jyager<br>
+jyager@CS.CMU.EDU jyager</p>
+</td>
+<td valign="top" align="left"  width="70.9231%">
+</td>
+</tr>
+</table>
+</body>
+</html>
diff -ruN cyrus-imapd/doc/man/lmtpd.8.html cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/lmtpd.8.html
--- cyrus-imapd/doc/man/lmtpd.8.html	Thu Jan  1 01:00:00 1970
+++ cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/lmtpd.8.html	Sun Jul  8 17:04:46 2001
@@ -0,0 +1,51 @@
+<html>
+<head>
+<meta name="Content-Style" content="text/css">
+</head>
+<body>
+<a href="#NAME">NAME</a><br>
+<a href="#SYNOPSIS">SYNOPSIS</a><br>
+<a href="#DESCRIPTION">DESCRIPTION</a><br>
+<a href="#OPTIONS">OPTIONS</a><br>
+<a href="#FILES">FILES</a><br>
+<a href="#/etc/imapd.conf">/etc/imapd.conf</a><br>
+<a href="#SEE ALSO">SEE ALSO</a><br>
+<!-- Creator     : groff version 1.15  -->
+<!-- CreationDate: Sun Jul  8 12:04:46 2001
+ -->
+<!-- Total number of pages: 1 -->
+<!-- Page: 1 -->
+<!-- left  margin: 100 -->
+<!-- right margin: 750 -->
+<a name="NAME"></a><h2>NAME</h2><p><font size=3>lmtpd - LMTP server process</p>
+<a name="SYNOPSIS"></a><h2>SYNOPSIS</h2><p><font size=3><B>lmtpd</B> <font size=3>[ <font size=3><B>-C</B> <font size=3><I>config-file</I> <font size=3>] [ <font size=3><B>-a</B> <font size=3>]</p>
+<a name="DESCRIPTION"></a><h2>DESCRIPTION</h2><p><font size=3><I>Lmtpd</I> <font size=3>is an LMTP server used to deliver mail to the IMAP mailstore. It accepts commands on its standard input and responds on its standard output. It MUST be invoked by <font size=3><I>master</I><font size=3>(8) with those descriptors attached to a remote client connection.</p>
+<p><font size=3><I>Lmtpd</I> <font size=3>reads its configuration options out of the <font size=3><I>imapd.conf</I><font size=3>(5) file unless specified otherwise by <font size=3><B>-C</B><font size=3>.</p>
+<a name="OPTIONS"></a><h2>OPTIONS</h2><p><font size=3><B>-C</B> <font size=3><I>config-file</I> <font size=3>Read configuration options from <font size=3><I>config-file</I><font size=3>.</p>
+
+<table width="100%"  rules="none"  frame="none"  cols="3">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="2.4615%">
+<p><font size=3><B>-a</p>
+</B></td>
+<td valign="top" align="left"  width="17.5385%">
+</td>
+<td valign="top" align="left"  width="80.0000%">
+<p><font size=3>Preauthorize connections initiated on an internet socket, instead of requiring LMTP AUTH.<br>
+This should only be used for connections coming from trusted hosts.</p>
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="2.4615%">
+</td>
+<td valign="top" align="left"  width="17.5385%">
+</td>
+<td valign="top" align="left"  width="80.0000%">
+</td>
+</tr>
+</table>
+<br>
+<a name="FILES"></a><h2>FILES</h2><a name="/etc/imapd.conf"></a><h2>/etc/imapd.conf</h2><a name="SEE ALSO"></a><h2>SEE ALSO</h2><p><font size=3><B>imapd.conf(5)</B><font size=3>, <font size=3><B>master(8)</B><br>
+</p>
+</body>
+</html>
diff -ruN cyrus-imapd/doc/man/master.8.html cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/master.8.html
--- cyrus-imapd/doc/man/master.8.html	Thu Jan  1 01:00:00 1970
+++ cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/master.8.html	Sun Jul  8 17:04:46 2001
@@ -0,0 +1,38 @@
+<html>
+<head>
+<meta name="Content-Style" content="text/css">
+</head>
+<body>
+<a href="#NAME">NAME</a><br>
+<a href="#SYNOPSIS">SYNOPSIS</a><br>
+<a href="#DESCRIPTION">DESCRIPTION</a><br>
+<a href="#OPTIONS">OPTIONS</a><br>
+<a href="#CONFIGURATION">CONFIGURATION</a><br>
+<a href="#NOTES">NOTES</a><br>
+<a href="#FILES">FILES</a><br>
+<a href="#/etc/cyrus.conf, /etc/imapd.conf">/etc/cyrus.conf, /etc/imapd.conf</a><br>
+<a href="#SEE ALSO">SEE ALSO</a><br>
+<!-- Creator     : groff version 1.15  -->
+<!-- CreationDate: Sun Jul  8 12:04:46 2001
+ -->
+<!-- Total number of pages: 1 -->
+<!-- Page: 1 -->
+<!-- left  margin: 100 -->
+<!-- right margin: 750 -->
+<a name="NAME"></a><h2>NAME</h2><p><font size=3>master - master Cyrus process</p>
+<a name="SYNOPSIS"></a><h2>SYNOPSIS</h2><p><font size=3><B>master</B> <font size=3>[ <font size=3><B>-l</B> <font size=3><I>listen queue</I> <font size=3>] [ <font size=3><B>-D</B> <font size=3>]</p>
+<a name="DESCRIPTION"></a><h2>DESCRIPTION</h2><p><font size=3><I>Master</I> <font size=3>is the process that controls all of the Cyrus processes. This process is responsible for creating all imapd, pop3d, lmtpd and sieved child processes. This process also initializes the Berkeley DB code and performs sched- uled cleanup/maintenance.</p>
+<p><font size=3>If this process dies, then no new sessions will be started.</p>
+<p><font size=3>It kills itself and all child processes when it receives a SIGTERM.</p>
+<a name="OPTIONS"></a><h2>OPTIONS</h2><p><font size=3><B>-l</B> <font size=3><I>listen queue backlog<br>
+<span style=" text-indent: 1.3000in;"></span></I>Increase the listen queue backlog. By default, the listen queue is set to 32. On systems<br>
+<span style=" text-indent: 1.3000in;"></span>with a high connection rate, it may be desirable to increase this value. refer to <font size=3><B>listen(2)</B> <font size=3>for<br>
+<span style=" text-indent: 1.3000in;"></span>details.</p>
+<p><font size=3><B>-D</B> <font size=3>Don't close stdin/stdout/stderr. Primiarly useful for debugging.</p>
+<a name="CONFIGURATION"></a><h2>CONFIGURATION</h2><p><font size=3>Upon execution, <font size=3><I>master</I> <font size=3>reads its configuration information out of the <font size=3><I>cyrus.conf</I><font size=3>(5) file.</p>
+<p><font size=3><I>Master</I> <font size=3>rereads its configuration file when it receives a hangup signal, SIGHUP. Services and events may be added, deleted or modified when the configuration file is reread. Any active services removed from the configura- tion file will be allowed to run until completion.</p>
+<a name="NOTES"></a><h2>NOTES</h2><p><font size=3>The environment variable <font size=3><B>CYRUS_VERBOSE</B> <font size=3>can be set to log additional debugging information. Setting the value to 1 results in base level logging. Setting it higher results in more log messages being generated.</p>
+<a name="FILES"></a><h2>FILES</h2><a name="/etc/cyrus.conf, /etc/imapd.conf"></a><h2>/etc/cyrus.conf, /etc/imapd.conf</h2><a name="SEE ALSO"></a><h2>SEE ALSO</h2><p><font size=3><B>cyrus.conf(5)</B><font size=3>, <font size=3><B>imapd.conf(5)</B><font size=3>, <font size=3><B>imapd(8)</B><font size=3>, <font size=3><B>pop3d(8)</B><font size=3>, <font size=3><B>lmtpd(8)</B><font size=3>, <font size=3><B>timsieved(8)</B><font size=3>, <font size=3><B>idled(8)</B><br>
+</p>
+</body>
+</html>
diff -ruN cyrus-imapd/doc/man/mbpath.8.html cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/mbpath.8.html
--- cyrus-imapd/doc/man/mbpath.8.html	Thu Jan  1 01:00:00 1970
+++ cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/mbpath.8.html	Sun Jul  8 17:04:46 2001
@@ -0,0 +1,27 @@
+<html>
+<head>
+<meta name="Content-Style" content="text/css">
+</head>
+<body>
+<a href="#NAME">NAME</a><br>
+<a href="#SYNOPSIS">SYNOPSIS</a><br>
+<a href="#DESCRIPTION">DESCRIPTION</a><br>
+<a href="#OPTIONS">OPTIONS</a><br>
+<a href="#FILES">FILES</a><br>
+<a href="#/etc/imapd.conf">/etc/imapd.conf</a><br>
+<!-- Creator     : groff version 1.15  -->
+<!-- CreationDate: Sun Jul  8 12:04:46 2001
+ -->
+<!-- Total number of pages: 1 -->
+<!-- Page: 1 -->
+<!-- left  margin: 100 -->
+<!-- right margin: 750 -->
+<a name="NAME"></a><h2>NAME</h2><p><font size=3>mbpath - translate mailbox names to filesystem paths</p>
+<a name="SYNOPSIS"></a><h2>SYNOPSIS</h2><p><font size=3><B>mbpath</B> <font size=3>[ <font size=3><B>-C</B> <font size=3><I>config-file</I> <font size=3>] [ <font size=3><B>-q</B> <font size=3>] [ <font size=3><I>mailbox-names</I><font size=3>... ]</p>
+<a name="DESCRIPTION"></a><h2>DESCRIPTION</h2><p><font size=3>Given a mailbox name or a space separated list of mailbox names, <font size=3><I>mbpath</I> <font size=3>outputs the filesystem path to the mail- box.</p>
+<p><font size=3><I>Mbpath</I> <font size=3>reads its configuration options out of the <font size=3><I>imapd.conf</I><font size=3>(5) file unless specified otherwise by <font size=3><B>-C</B><font size=3>.</p>
+<a name="OPTIONS"></a><h2>OPTIONS</h2><p><font size=3><B>-C</B> <font size=3><I>config-file</I> <font size=3>Read configuration options from <font size=3><I>config-file</I><font size=3>.</p>
+<p><font size=3><I>-q</I> <font size=3>suppress any error output.</p>
+<p><font size=3><I>-s</I> <font size=3>if any error occurs, stop processing the list of mailboxes and exit.</p>
+<a name="FILES"></a><h2>FILES</h2><a name="/etc/imapd.conf"></a><h2>/etc/imapd.conf</h2></body>
+</html>
diff -ruN cyrus-imapd/doc/man/pop3d.8.html cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/pop3d.8.html
--- cyrus-imapd/doc/man/pop3d.8.html	Thu Jan  1 01:00:00 1970
+++ cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/pop3d.8.html	Sun Jul  8 17:04:46 2001
@@ -0,0 +1,55 @@
+<html>
+<head>
+<meta name="Content-Style" content="text/css">
+</head>
+<body>
+<a href="#NAME">NAME</a><br>
+<a href="#SYNOPSIS">SYNOPSIS</a><br>
+<a href="#DESCRIPTION">DESCRIPTION</a><br>
+<a href="#OPTIONS">OPTIONS</a><br>
+<a href="#FILES">FILES</a><br>
+<a href="#/etc/imapd.conf">/etc/imapd.conf</a><br>
+<a href="#SEE ALSO">SEE ALSO</a><br>
+<!-- Creator     : groff version 1.15  -->
+<!-- CreationDate: Sun Jul  8 12:04:46 2001
+ -->
+<!-- Total number of pages: 1 -->
+<!-- Page: 1 -->
+<!-- left  margin: 100 -->
+<!-- right margin: 750 -->
+<a name="NAME"></a><h2>NAME</h2><p><font size=3>pop3d - POP3 server process</p>
+<a name="SYNOPSIS"></a><h2>SYNOPSIS</h2><p><font size=3><B>pop3d</B> <font size=3>[ <font size=3><B>-C</B> <font size=3><I>config-file</I> <font size=3>] [ <font size=3><B>-s</B> <font size=3>] [ <font size=3><B>-k</B> <font size=3>]</p>
+<a name="DESCRIPTION"></a><h2>DESCRIPTION</h2><p><font size=3><I>Pop3d</I> <font size=3>is a POP3 server. It accepts commands on its standard input and responds on its standard output. It MUST invoked by <font size=3><I>master</I><font size=3>(8) with those descriptors attached to a remote client connection.</p>
+<p><font size=3><I>Pop3d</I> <font size=3>reads its configuration options out of the <font size=3><I>imapd.conf</I><font size=3>(5) file unless specified otherwise by <font size=3><B>-C</B><font size=3>.</p>
+<p><font size=3>If the directory log/<font size=3><I>user</I> <font size=3>exists under the directory specified in the <font size=3><I>configdirectory</I> <font size=3>configuration option, then <font size=3><I>pop3d</I> <font size=3>will create protocol telemetry logs for sessions authenticating as <font size=3><I>user</I><font size=3>. The telemetry logs will be stored in the log/<font size=3><I>user</I> <font size=3>directory with a filename of the <font size=3><I>pop3d</I> <font size=3>process-id.</p>
+<a name="OPTIONS"></a><h2>OPTIONS</h2>
+<table width="100%"  rules="none"  frame="none"  cols="3">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="12.6154%">
+<p><font size=3><B>-C</B> <font size=3><I>config-file</p>
+</I><p><font size=3><B>-s</p>
+</B></td>
+<td valign="top" align="left"  width="7.3846%">
+</td>
+<td valign="top" align="left"  width="80.0000%">
+<p><font size=3>Read configuration options from <font size=3><I>config-file</I><font size=3>.</p>
+<p><font size=3>Serve POP3 over SSL (pop3s). All data to and from <font size=3><I>pop3d</I> <font size=3>is encrypted using the Secure<br>
+Sockets Layer.</p>
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="12.6154%">
+<p><font size=3><B>-k</p>
+</B></td>
+<td valign="top" align="left"  width="7.3846%">
+</td>
+<td valign="top" align="left"  width="80.0000%">
+<p><font size=3>Serve MIT's KPOP (Kerberized POP) protocol instead.</p>
+</td>
+</tr>
+</table>
+<br>
+<a name="FILES"></a><h2>FILES</h2><a name="/etc/imapd.conf"></a><h2>/etc/imapd.conf</h2><a name="SEE ALSO"></a><h2>SEE ALSO</h2><p><font size=3><B>imapd.conf(5)</B><font size=3>, <font size=3><B>master(8)</B><br>
+</p>
+</body>
+</html>
diff -ruN cyrus-imapd/doc/man/quota.8.html cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/quota.8.html
--- cyrus-imapd/doc/man/quota.8.html	Thu Jan  1 01:00:00 1970
+++ cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/quota.8.html	Sun Jul  8 17:04:46 2001
@@ -0,0 +1,27 @@
+<html>
+<head>
+<meta name="Content-Style" content="text/css">
+</head>
+<body>
+<a href="#NAME">NAME</a><br>
+<a href="#SYNOPSIS">SYNOPSIS</a><br>
+<a href="#DESCRIPTION">DESCRIPTION</a><br>
+<a href="#OPTIONS">OPTIONS</a><br>
+<a href="#FILES">FILES</a><br>
+<a href="#/etc/imapd.conf">/etc/imapd.conf</a><br>
+<!-- Creator     : groff version 1.15  -->
+<!-- CreationDate: Sun Jul  8 12:04:46 2001
+ -->
+<!-- Total number of pages: 1 -->
+<!-- Page: 1 -->
+<!-- left  margin: 100 -->
+<!-- right margin: 750 -->
+<a name="NAME"></a><h2>NAME</h2><p><font size=3>quota - report and optionally fix quota usage</p>
+<a name="SYNOPSIS"></a><h2>SYNOPSIS</h2><p><font size=3><B>quota</B> <font size=3>[ <font size=3><B>-C</B> <font size=3><I>config-file</I> <font size=3>] [ <font size=3><B>-f</B> <font size=3>] [ <font size=3><I>mailbox-prefix</I><font size=3>... ]</p>
+<a name="DESCRIPTION"></a><h2>DESCRIPTION</h2><p><font size=3><I>Quota</I> <font size=3>generates a report listing quota roots, giving their limits and usage. If the <font size=3><I>-f</I> <font size=3>option is given, <font size=3><I>quota</I> <font size=3>first fixes any inconsistencies in the quota subsystem, such as mailboxes with the wrong quota root or quota roots with the wrong quota usage reported. If any optional <font size=3><I>mailbox-prefix</I> <font size=3>arguments are given, the quota listing (and inconsis- tency fixing) is limited to quota roots with names that start with one of the given prefixes.</p>
+<p><font size=3>Running <font size=3><I>quota</I> <font size=3>with both the <font size=3><I>-f</I> <font size=3>option and <font size=3><I>mailbox-prefix</I> <font size=3>arguments is not recommended.</p>
+<p><font size=3><I>Quota</I> <font size=3>reads its configuration options out of the <font size=3><I>imapd.conf</I><font size=3>(5) file unless specified otherwise by <font size=3><B>-C</B><font size=3>.</p>
+<a name="OPTIONS"></a><h2>OPTIONS</h2><p><font size=3><B>-C</B> <font size=3><I>config-file</I> <font size=3>Read configuration options from <font size=3><I>config-file</I><font size=3>.</p>
+<p><font size=3><B>-f</B> <font size=3>Fix any inconsistencies in the quota subsystem before generating a report.</p>
+<a name="FILES"></a><h2>FILES</h2><a name="/etc/imapd.conf"></a><h2>/etc/imapd.conf</h2></body>
+</html>
diff -ruN cyrus-imapd/doc/man/reconstruct.8.html cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/reconstruct.8.html
--- cyrus-imapd/doc/man/reconstruct.8.html	Thu Jan  1 01:00:00 1970
+++ cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/reconstruct.8.html	Sun Jul  8 17:04:46 2001
@@ -0,0 +1,72 @@
+<html>
+<head>
+<meta name="Content-Style" content="text/css">
+</head>
+<body>
+<a href="#NAME">NAME</a><br>
+<a href="#SYNOPSIS">SYNOPSIS</a><br>
+<a href="#DESCRIPTION">DESCRIPTION</a><br>
+<a href="#OPTIONS">OPTIONS</a><br>
+<a href="#FILES">FILES</a><br>
+<a href="#/etc/imapd.conf">/etc/imapd.conf</a><br>
+<!-- Creator     : groff version 1.15  -->
+<!-- CreationDate: Sun Jul  8 12:04:46 2001
+ -->
+<!-- Total number of pages: 1 -->
+<!-- Page: 1 -->
+<!-- left  margin: 100 -->
+<!-- right margin: 750 -->
+<a name="NAME"></a><h2>NAME</h2><p><font size=3>reconstruct - reconstruct mailboxes</p>
+<a name="SYNOPSIS"></a><h2>SYNOPSIS</h2><p><font size=3><B>reconstruct</B> <font size=3>[ <font size=3><B>-C</B> <font size=3><I>config-file</I> <font size=3>] [ <font size=3><B>-r</B> <font size=3>] [ <font size=3><B>-f</B> <font size=3>] <font size=3><I>mailbox</I><font size=3>...<br>
+<B>reconstruct</B> <font size=3>[ <font size=3><B>-C</B> <font size=3><I>config-file</I> <font size=3>] <font size=3><B>-m</p>
+</B><a name="DESCRIPTION"></a><h2>DESCRIPTION</h2><p><font size=3><I>Reconstruct</I> <font size=3>rebuilds one or more IMAP mailboxes. When invoked with the <font size=3><B>-m</B> <font size=3>switch, it rebuilds the master mailboxes file. It can be used to recover from almost any sort of data corruption.</p>
+<p><font size=3>If <font size=3><I>Reconstruct</I> <font size=3>can find existing header and index files, it attempts to preserve any data in them that is not derivable from the message files themselves. The state <font size=3><I>reconstruct</I> <font size=3>attempts to preserve includes the flag names, flag state, and internaldate. <font size=3><I>Reconstruct</I> <font size=3>derives all other information from the message files.</p>
+<p><font size=3><I>Reconstruct</I> <font size=3>reads its configuration options out of the <font size=3><I>imapd.conf</I><font size=3>(5) file unless specified otherwise by <font size=3><B>-C</B><font size=3>. Any mailbox directory underneath the path specified in the <font size=3><I>partition-news</I> <font size=3>configuration option is assumed to be in news format.</p>
+<p><font size=3><I>Reconstruct</I> <font size=3>does not adjust the quota usage recorded in any quota root files. After running <font size=3><I>reconstruct</I><font size=3>, it is advis- able to run <font size=3><I>quota</I><font size=3>(8) with the <font size=3><I>-f</I> <font size=3>switch in order to fix the quota root files.</p>
+<a name="OPTIONS"></a><h2>OPTIONS</h2>
+<table width="100%"  rules="none"  frame="none"  cols="3">
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="12.6154%">
+<p><font size=3><B>-C</B> <font size=3><I>config-file</p>
+</I><p><font size=3><B>-r</p>
+</B></td>
+<td valign="top" align="left"  width="7.3846%">
+</td>
+<td valign="top" align="left"  width="80.0000%">
+<p><font size=3>Read configuration options from <font size=3><I>config-file</I><font size=3>.</p>
+<p><font size=3>Recursively reconstruct all sub-mailboxes of the mailboxes or mailbox prefixes given as arguments.</p>
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="12.6154%">
+<p><font size=3><B>-f</p>
+</B></td>
+<td valign="top" align="left"  width="7.3846%">
+</td>
+<td valign="top" align="left"  width="80.0000%">
+<p><font size=3>Examine the filesystem underneath mailbox, adding all directories found there as new mail- boxes. Useful for restoring mailboxes from backups.</p>
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="12.6154%">
+<p><font size=3><B>-m</p>
+</B></td>
+<td valign="top" align="left"  width="7.3846%">
+</td>
+<td valign="top" align="left"  width="80.0000%">
+<p><font size=3>Rebuild the <font size=3><I>mailboxes</I> <font size=3>file. Use whatever data in the existing <font size=3><I>mailboxes</I> <font size=3>file it can scav-<br>
+enge, then scans all partitions listed in the <font size=3><I>imapd.conf</I><font size=3>(5) file for additional mailboxes.</p>
+</td>
+</tr>
+<tr valign="top" align="left">
+<td valign="top" align="left"  width="12.6154%">
+</td>
+<td valign="top" align="left"  width="7.3846%">
+</td>
+<td valign="top" align="left"  width="80.0000%">
+</td>
+</tr>
+</table>
+<br>
+<a name="FILES"></a><h2>FILES</h2><a name="/etc/imapd.conf"></a><h2>/etc/imapd.conf</h2></body>
+</html>
diff -ruN cyrus-imapd/doc/man/rmnews.8.html cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/rmnews.8.html
--- cyrus-imapd/doc/man/rmnews.8.html	Thu Jan  1 01:00:00 1970
+++ cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/rmnews.8.html	Sun Jul  8 17:04:46 2001
@@ -0,0 +1,24 @@
+<html>
+<head>
+<meta name="Content-Style" content="text/css">
+</head>
+<body>
+<a href="#NAME">NAME</a><br>
+<a href="#SYNOPSIS">SYNOPSIS</a><br>
+<a href="#rmnews">rmnews</a><br>
+<a href="#DESCRIPTION">DESCRIPTION</a><br>
+<a href="#FILES">FILES</a><br>
+<a href="#/etc/imapd.conf">/etc/imapd.conf</a><br>
+<!-- Creator     : groff version 1.15  -->
+<!-- CreationDate: Sun Jul  8 12:04:46 2001
+ -->
+<!-- Total number of pages: 1 -->
+<!-- Page: 1 -->
+<!-- left  margin: 100 -->
+<!-- right margin: 750 -->
+<a name="NAME"></a><h2>NAME</h2><p><font size=3>rmnews - expunge and remove news articles</p>
+<a name="SYNOPSIS"></a><h2>SYNOPSIS</h2><a name="rmnews"></a><h2>rmnews</h2><a name="DESCRIPTION"></a><h2>DESCRIPTION</h2><p><font size=3><I>Rmnews</I> <font size=3>reads article data from the standard input. It then expunges and removes the listed articles. <font size=3><I>Rmnews</I> <font size=3>is designed to be used by InterNetNews to remove canceled, superseded, and expired news articles.</p>
+<p><font size=3>The input is processed as an INN <font size=3><I>expirerm</I> <font size=3>file listing or an INN cancel stream written as a ``WC'' entry in the <font size=3><I>newsfeeds</I><font size=3>(5) file. This data consists of lines of text, each containing a list of relative article pathnames, with a sin- gle space between entries. If a listed file is contained in an IMAP news mailbox, it is expunged out of that mail- box. In any case, each listed file is unlinked.</p>
+<p><font size=3><I>Rmnews</I> <font size=3>reads its configuration options out of the <font size=3><I>imapd.conf</I><font size=3>(5) file. The optional <font size=3><I>newsprefix</I> <font size=3>option specifies a prefix to be prepended to newsgroup names to make the corresponding IMAP mailbox names. The required <font size=3><I>par- tition-news</I> <font size=3>option specifies the pathname prefix to the IMAP news mailboxes. The value of <font size=3><I>partition-news</I> <font size=3>con- catenated with the dots-to-slashes-converted value of <font size=3><I>newsprefix</I> <font size=3>must be the pathname of the news spool direc- tory.</p>
+<a name="FILES"></a><h2>FILES</h2><a name="/etc/imapd.conf"></a><h2>/etc/imapd.conf</h2></body>
+</html>
diff -ruN cyrus-imapd/doc/man/syncnews.8.html cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/syncnews.8.html
--- cyrus-imapd/doc/man/syncnews.8.html	Thu Jan  1 01:00:00 1970
+++ cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/syncnews.8.html	Sun Jul  8 17:04:46 2001
@@ -0,0 +1,29 @@
+<html>
+<head>
+<meta name="Content-Style" content="text/css">
+</head>
+<body>
+<a href="#NAME">NAME</a><br>
+<a href="#SYNOPSIS">SYNOPSIS</a><br>
+<a href="#DESCRIPTION">DESCRIPTION</a><br>
+<a href="#OPTIONS">OPTIONS</a><br>
+<a href="#FILES">FILES</a><br>
+<a href="#/etc/imapd.conf">/etc/imapd.conf</a><br>
+<a href="#BUGS">BUGS</a><br>
+<!-- Creator     : groff version 1.15  -->
+<!-- CreationDate: Sun Jul  8 12:04:46 2001
+ -->
+<!-- Total number of pages: 1 -->
+<!-- Page: 1 -->
+<!-- left  margin: 100 -->
+<!-- right margin: 750 -->
+<a name="NAME"></a><h2>NAME</h2><p><font size=3>syncnews - synchronize IMAP news mailboxes with active file</p>
+<a name="SYNOPSIS"></a><h2>SYNOPSIS</h2><p><font size=3><B>syncnews</B> <font size=3>[ <font size=3><B>-C</B> <font size=3><I>config-file</I> <font size=3>] <font size=3><I>active-file</p>
+</I><a name="DESCRIPTION"></a><h2>DESCRIPTION</h2><p><font size=3><I>Syncnews</I> <font size=3>compares the list of IMAP news mailboxes with the news active file. News mailboxes which are not listed in the active file are removed. Newsgroups listed in the active file but not in the IMAP mailboxes file have IMAP mailboxes created.</p>
+<p><font size=3>A newsgroup must have a status of ``y'', ``m'', or ``n'' to be considered listed in the active file.</p>
+<p><font size=3><I>Syncnews</I> <font size=3>reads its configuration options out of the <font size=3><I>imapd.conf</I><font size=3>(5) file unless specified otherwise by <font size=3><B>-C</B><font size=3>.</p>
+<a name="OPTIONS"></a><h2>OPTIONS</h2><p><font size=3><B>-C</B> <font size=3><I>config-file</I> <font size=3>Read configuration options from <font size=3><I>config-file</I><font size=3>.</p>
+<a name="FILES"></a><h2>FILES</h2><a name="/etc/imapd.conf"></a><h2>/etc/imapd.conf</h2><a name="BUGS"></a><h2>BUGS</h2><p><font size=3>If a newsgroup is listed in the active file, but does not have the news spool directories created, <font size=3><I>syncnews</I> <font size=3>will cre- ate those news spool directories in the process of creating the IMAP mailbox. The created directories are likely to then have ownership and permissions that do not permit the news server to write article files.<br>
+</p>
+</body>
+</html>
diff -ruN cyrus-imapd/doc/man/timsieved.8.html cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/timsieved.8.html
--- cyrus-imapd/doc/man/timsieved.8.html	Thu Jan  1 01:00:00 1970
+++ cyrus-imapd-2.0.15-HIERSEP-r2/doc/man/timsieved.8.html	Sun Jul  8 17:04:46 2001
@@ -0,0 +1,28 @@
+<html>
+<head>
+<meta name="Content-Style" content="text/css">
+</head>
+<body>
+<a href="#NAME">NAME</a><br>
+<a href="#SYNOPSIS">SYNOPSIS</a><br>
+<a href="#DESCRIPTION">DESCRIPTION</a><br>
+<a href="#OPTIONS">OPTIONS</a><br>
+<a href="#FILES">FILES</a><br>
+<a href="#/etc/imapd.conf">/etc/imapd.conf</a><br>
+<a href="#SEE ALSO">SEE ALSO</a><br>
+<!-- Creator     : groff version 1.15  -->
+<!-- CreationDate: Sun Jul  8 12:04:46 2001
+ -->
+<!-- Total number of pages: 1 -->
+<!-- Page: 1 -->
+<!-- left  margin: 100 -->
+<!-- right margin: 750 -->
+<a name="NAME"></a><h2>NAME</h2><p><font size=3>timsieved - CMU hack for getting sieve scripts onto the server</p>
+<a name="SYNOPSIS"></a><h2>SYNOPSIS</h2><p><font size=3><B>timsieved</B> <font size=3>[ <font size=3><B>-C</B> <font size=3><I>config-file</I> <font size=3>]</p>
+<a name="DESCRIPTION"></a><h2>DESCRIPTION</h2><p><font size=3><I>timsieved</I> <font size=3>is a server that allows users to remotly manage their sieve scripts kept on the server. It accepts com- mands on its standard input and responds on its standard output. It MUST be invoked by <font size=3><I>master</I><font size=3>(8) with those descriptors attached to a remote client connection.</p>
+<p><font size=3><I>Timsieved</I> <font size=3>reads its configuration options out of the <font size=3><I>imapd.conf</I><font size=3>(5) file unless specified otherwise by <font size=3><B>-C</B><font size=3>.</p>
+<a name="OPTIONS"></a><h2>OPTIONS</h2><p><font size=3><B>-C</B> <font size=3><I>config-file</I> <font size=3>Read configuration options from <font size=3><I>config-file</I><font size=3>.</p>
+<a name="FILES"></a><h2>FILES</h2><a name="/etc/imapd.conf"></a><h2>/etc/imapd.conf</h2><a name="SEE ALSO"></a><h2>SEE ALSO</h2><p><font size=3><B>imapd.conf(5)</B><font size=3>, <font size=3><B>master(8)</B><br>
+</p>
+</body>
+</html>
diff -ruN cyrus-imapd/doc/overview.html cyrus-imapd-2.0.15-HIERSEP-r2/doc/overview.html
--- cyrus-imapd/doc/overview.html	Sat Jul  7 20:54:14 2001
+++ cyrus-imapd-2.0.15-HIERSEP-r2/doc/overview.html	Sun Jul  8 16:59:59 2001
@@ -33,6 +33,10 @@
 
 <UL>
 <LI><a href="#mboxname">Mailbox Namespace</a>
+<UL>
+<li><A href="#mboxnamestd">Standard (Internal) Namespace</A>
+<li><A href="#mboxnamealt">Alternate Namespace</A>
+</UL>
 <LI><a href="#acl">Access Control Lists</a>
 <UL>
 <li><A href="#aclrt">Access Rights</A>
@@ -114,6 +118,8 @@
 versions of the server may make the set of permissible characters
 configurable at each site.
 
+<H3><A NAME="mboxnamestd">Standard (Internal) Namespace</A></H3>
+
 <p>All personal mailboxes for user "<TT>bovik</TT>" begin with the
 string "<TT>user.bovik.</TT>".  For example, if user "<TT>bovik</TT>"
 had a personal "<TT>work</TT>" mailbox, it would be called
@@ -160,6 +166,26 @@
 "<TT>.comp.infosystems.www</TT>" resolves to
 "<TT>cmu.comp.infosystems.www</TT>".
 
+<H3><A NAME="mboxnamealt">Alternate Namespace</A></H3>
+
+The Cyrus IMAP server can also use an alternate namespace which allows
+a user's personal mailboxes to appear as if they reside at the same
+level as that user's <TT>INBOX</TT> as opposed to children of it.
+For example, if user "<TT>bovik</TT>" had a personal "<TT>work</TT>"
+mailbox, it would appear to user "<TT>bovik</TT>" as "<TT>work</TT>"
+instead of "<TT>INBOX.work</TT>" as it would in the standard namespace.
+
+<p>The alternate namespace does NOT change the behavior of mailboxes
+(as described elsewhere in this document) or how mailboxes are stored
+on the filesystem.  The mailboxes are always stored using their
+internal namespace names and the server simply translates mailbox
+names between the internal namespace names and the alternate namespace
+names when used by the client in the IMAP protocol and in Sieve
+scripts.
+
+<p>All tools for administering the server, including admins using cyradm,
+always use the internal namespace.
+
 <H2><A NAME="acl">Access Control Lists</A></H2>
 
 Access to each mailbox is controlled by each mailbox's access control list.
@@ -167,7 +193,7 @@
 for specifying the users or groups of users who have permission to
 access the mailboxes.
 
-<p>An ACL is a list of zero or more entries.  Each entry has an identifier
+An ACL is a list of zero or more entries.  Each entry has an identifier
 and a set of rights.  The identifier specifies the user or group of
 users for which the entry applies.  The set of rights is one or more
 letters or digits, each letter or digit conferring a particular privilege.
diff -ruN cyrus-imapd/imap/Makefile.in cyrus-imapd-2.0.15-HIERSEP-r2/imap/Makefile.in
--- cyrus-imapd/imap/Makefile.in	Sat Jun 23 04:14:01 2001
+++ cyrus-imapd-2.0.15-HIERSEP-r2/imap/Makefile.in	Sun Jul  8 16:59:59 2001
@@ -1,5 +1,5 @@
 # Makefile for cyrus imap server and associated programs
-# $Id: Makefile.in,v 1.137 2001/06/23 03:14:01 ken3 Exp $
+# $Id: Makefile.in,v 1.134.2.2.2.1 2001/07/08 15:59:59 ken3 Exp $
 # 
 # @configure_input@
 #
@@ -102,7 +102,8 @@
 LOBJS= append.o mailbox.o mboxlist.o mboxname.o message.o \
 	config.o imap_err.o proc.o setproctitle.o convert_code.o \
 	duplicate.o saslclient.o acapmbox.o signals.o \
-	base64.o imapparse.o telemetry.o user.o $(SEEN) $(NOTIFY) $(IDLE)
+	base64.o imapparse.o telemetry.o user.o namespace.o \
+	$(SEEN) $(NOTIFY) $(IDLE)
 
 IMAPDOBJS=pushstats.o imapd.o index.o tls.o
 
diff -ruN cyrus-imapd/imap/fud.c cyrus-imapd-2.0.15-HIERSEP-r2/imap/fud.c
--- cyrus-imapd/imap/fud.c	Thu Feb 22 19:27:16 2001
+++ cyrus-imapd-2.0.15-HIERSEP-r2/imap/fud.c	Thu May 31 05:40:42 2001
@@ -42,7 +42,7 @@
 
 #include <config.h>
 
-/* $Id: fud.c,v 1.22 2001/02/22 19:27:16 ken3 Exp $ */
+/* $Id: fud.c,v 1.22.2.2 2001/05/31 04:40:42 ken3 Exp $ */
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>
 #endif
@@ -207,7 +207,7 @@
     lastread = 0;
     lastarrived = 0;
 
-    r = mboxname_tointernal(name,who,mboxname);
+    r = mboxname_tointernal(name,NULL,who,mboxname);
     if (r) return r; 
 
     /*
diff -ruN cyrus-imapd/imap/idle_idled.c cyrus-imapd-2.0.15-HIERSEP-r2/imap/idle_idled.c
--- cyrus-imapd/imap/idle_idled.c	Sat Jun 16 03:30:17 2001
+++ cyrus-imapd-2.0.15-HIERSEP-r2/imap/idle_idled.c	Tue Jun 19 15:47:11 2001
@@ -38,7 +38,7 @@
  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: idle_idled.c,v 1.7 2001/06/16 02:30:17 ken3 Exp $ */
+/* $Id: idle_idled.c,v 1.5.2.1 2001/06/19 14:47:11 ken3 Exp $ */
 
 #include <sys/types.h>
 #include <sys/socket.h>
diff -ruN cyrus-imapd/imap/imap_err.c cyrus-imapd-2.0.15-HIERSEP-r2/imap/imap_err.c
--- cyrus-imapd/imap/imap_err.c	Thu Jan  1 01:00:00 1970
+++ cyrus-imapd-2.0.15-HIERSEP-r2/imap/imap_err.c	Sun Jul  8 17:04:44 2001
@@ -0,0 +1,72 @@
+/*
+ * imap_err.c:
+ * This file is automatically generated; please do not edit it.
+ */
+#if defined(__STDC__) || defined(_WINDOWS)
+#define NOARGS void
+#else
+#define NOARGS
+#define const
+#endif
+
+static const char * const text[] = {
+	   "System I/O error",
+	   "mail system storage has been exceeded",
+	   "Permission denied",
+	   "Over quota",
+	   "Too many user flags in mailbox",
+	   "Mailbox has an invalid format",
+	   "Operation is not supported on mailbox",
+	   "Mailbox does not exist",
+	   "Mailbox already exists",
+	   "Invalid mailbox name",
+	   "Mailbox is locked by POP server",
+	   "Unknown/invalid partition",
+	   "Invalid identifier",
+	   "Message contains NUL characters",
+	   "Message contains bare newlines",
+	   "Message contains non-ASCII characters in headers",
+	   "Message contains invalid header",
+	   "Message has no header/body separator",
+	   "Quota root does not exist",
+	   "Bad protocol",
+	   "Server(s) unavailable to complete operation",
+	   "Retry operation",
+	   "Unrecognized character set",
+	   "Invalid user",
+	   "Login incorrect",
+	   "Anonymous login is not permitted",
+	   "Unsupported quota resource",
+	   "Mailbox is over quota",
+	   "Mailbox is at %d%% of quota",
+	   "Message %d no longer exists",
+	   "Unable to checkpoint \\Seen state",
+	   "Unable to preserve \\Seen state",
+	   "No matching messages",
+	   "LOGOUT received",
+	   "Completed",
+    0
+};
+
+struct error_table {
+    char const * const * msgs;
+    long base;
+    int n_msgs;
+};
+struct et_list {
+    struct et_list *next;
+    const struct error_table * table;
+};
+extern struct et_list *_et_list;
+
+static const struct error_table et = { text, -1904809472L, 35 };
+
+static struct et_list link = { 0, 0 };
+
+void initialize_imap_error_table (NOARGS) {
+    if (!link.table) {
+        link.next = _et_list;
+        link.table = &et;
+        _et_list = &link;
+    }
+}
diff -ruN cyrus-imapd/imap/imap_err.h cyrus-imapd-2.0.15-HIERSEP-r2/imap/imap_err.h
--- cyrus-imapd/imap/imap_err.h	Thu Jan  1 01:00:00 1970
+++ cyrus-imapd-2.0.15-HIERSEP-r2/imap/imap_err.h	Sun Jul  8 17:04:44 2001
@@ -0,0 +1,45 @@
+/*
+ * imap_err.h:
+ * This file is automatically generated; please do not edit it.
+ */
+#define IMAP_IOERROR                             (-1904809472L)
+#define IMAP_NOSPACE                             (-1904809471L)
+#define IMAP_PERMISSION_DENIED                   (-1904809470L)
+#define IMAP_QUOTA_EXCEEDED                      (-1904809469L)
+#define IMAP_USERFLAG_EXHAUSTED                  (-1904809468L)
+#define IMAP_MAILBOX_BADFORMAT                   (-1904809467L)
+#define IMAP_MAILBOX_NOTSUPPORTED                (-1904809466L)
+#define IMAP_MAILBOX_NONEXISTENT                 (-1904809465L)
+#define IMAP_MAILBOX_EXISTS                      (-1904809464L)
+#define IMAP_MAILBOX_BADNAME                     (-1904809463L)
+#define IMAP_MAILBOX_POPLOCKED                   (-1904809462L)
+#define IMAP_PARTITION_UNKNOWN                   (-1904809461L)
+#define IMAP_INVALID_IDENTIFIER                  (-1904809460L)
+#define IMAP_MESSAGE_CONTAINSNULL                (-1904809459L)
+#define IMAP_MESSAGE_CONTAINSNL                  (-1904809458L)
+#define IMAP_MESSAGE_CONTAINS8BIT                (-1904809457L)
+#define IMAP_MESSAGE_BADHEADER                   (-1904809456L)
+#define IMAP_MESSAGE_NOBLANKLINE                 (-1904809455L)
+#define IMAP_QUOTAROOT_NONEXISTENT               (-1904809454L)
+#define IMAP_PROTOCOL_ERROR                      (-1904809453L)
+#define IMAP_SERVER_UNAVAILABLE                  (-1904809452L)
+#define IMAP_AGAIN                               (-1904809451L)
+#define IMAP_UNRECOGNIZED_CHARSET                (-1904809450L)
+#define IMAP_INVALID_USER                        (-1904809449L)
+#define IMAP_INVALID_LOGIN                       (-1904809448L)
+#define IMAP_ANONYMOUS_NOT_PERMITTED             (-1904809447L)
+#define IMAP_UNSUPPORTED_QUOTA                   (-1904809446L)
+#define IMAP_NO_OVERQUOTA                        (-1904809445L)
+#define IMAP_NO_CLOSEQUOTA                       (-1904809444L)
+#define IMAP_NO_MSGGONE                          (-1904809443L)
+#define IMAP_NO_CHECKSEEN                        (-1904809442L)
+#define IMAP_NO_CHECKPRESERVE                    (-1904809441L)
+#define IMAP_NO_NOSUCHMSG                        (-1904809440L)
+#define IMAP_BYE_LOGOUT                          (-1904809439L)
+#define IMAP_OK_COMPLETED                        (-1904809438L)
+extern void initialize_imap_error_table ();
+#define ERROR_TABLE_BASE_imap (-1904809472L)
+
+/* for compatibility with older versions... */
+#define init_imap_err_tbl initialize_imap_error_table
+#define imap_err_base ERROR_TABLE_BASE_imap
diff -ruN cyrus-imapd/imap/imapconf.h cyrus-imapd-2.0.15-HIERSEP-r2/imap/imapconf.h
--- cyrus-imapd/imap/imapconf.h	Thu Apr 26 18:17:14 2001
+++ cyrus-imapd-2.0.15-HIERSEP-r2/imap/imapconf.h	Sat Apr 28 01:54:01 2001
@@ -1,5 +1,5 @@
 /* config.h -- Configuration routines
- $Id: imapconf.h,v 1.7 2001/04/26 17:17:14 leg Exp $
+ $Id: imapconf.h,v 1.6.2.1 2001/04/28 00:54:01 ken3 Exp $
  
  * Copyright (c) 1998-2000 Carnegie Mellon University.  All rights reserved.
  *
diff -ruN cyrus-imapd/imap/imapd.c cyrus-imapd-2.0.15-HIERSEP-r2/imap/imapd.c
--- cyrus-imapd/imap/imapd.c	Fri Jul  6 02:51:20 2001
+++ cyrus-imapd-2.0.15-HIERSEP-r2/imap/imapd.c	Sun Jul  8 16:59:59 2001
@@ -38,7 +38,7 @@
  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: imapd.c,v 1.309 2001/07/06 01:51:20 ken3 Exp $ */
+/* $Id: imapd.c,v 1.304.2.8.2.6 2001/07/08 15:59:59 ken3 Exp $ */
 
 #include <config.h>
 
@@ -85,6 +85,7 @@
 #include "idle.h"
 #include "telemetry.h"
 #include "user.h"
+#include "namespace.h"
 
 #include "pushstats.h"		/* SNMP interface */
 
@@ -123,6 +124,9 @@
 static struct mailbox *imapd_mailbox;
 int imapd_exists;
 
+/* current namespace */
+static struct namespace imapd_namespace;
+
 static const char *monthname[] = {
     "jan", "feb", "mar", "apr", "may", "jun",
     "jul", "aug", "sep", "oct", "nov", "dec"
@@ -1486,10 +1490,20 @@
 
     if (!reply) reply = "User logged in";
 
+    prot_printf(imapd_out, "%s OK %s\r\n", tag, reply);
+
     /* Create telemetry log */
     imapd_logfd = telemetry_log(imapd_userid, imapd_in, imapd_out);
 
-    prot_printf(imapd_out, "%s OK %s\r\n", tag, reply);
+    /* Set namespace */
+    if (!namespace_init(&imapd_namespace, imapd_userisadmin)) {
+	syslog(LOG_ERR, "invalid namespace prefix in configuration file");
+	fatal("invalid namespace prefix in configuration file", EC_CONFIG);
+    }
+
+    /* Translate userid */
+    hier_sep_tointernal(imapd_userid, &imapd_namespace);
+
     return;
 }
 
@@ -1636,6 +1650,15 @@
     /* Create telemetry log */
     imapd_logfd = telemetry_log(imapd_userid, imapd_in, imapd_out);
 
+    /* Set namespace */
+    if (!namespace_init(&imapd_namespace, imapd_userisadmin)) {
+	syslog(LOG_ERR, "invalid namespace prefix in configuration file");
+	fatal("invalid namespace prefix in configuration file", EC_CONFIG);
+    }
+
+    /* Translate userid */
+    hier_sep_tointernal(imapd_userid, &imapd_namespace);
+
     return;
 }
 
@@ -2069,7 +2092,8 @@
     const char *parseerr = NULL;
 
     /* Set up the append */
-    r = mboxname_tointernal(name, imapd_userid, mailboxname);
+    r = (*imapd_namespace.mboxname_tointernal)(name, &imapd_namespace,
+					       imapd_userid, mailboxname);
     if (!r) {
 	r = append_setup(&mailbox, mailboxname, MAILBOX_FORMAT_NORMAL,
 			 imapd_userid, imapd_authstate, ACL_INSERT, size);
@@ -2263,7 +2287,8 @@
 	r = IMAP_MAILBOX_NONEXISTENT;
     }
     else {
-	r = mboxname_tointernal(name, imapd_userid, mailboxname);
+	r = (*imapd_namespace.mboxname_tointernal)(name, &imapd_namespace,
+						   imapd_userid, mailboxname);
     }
 
     if (!r) {
@@ -3187,7 +3212,8 @@
     char mailboxname[MAX_MAILBOX_NAME+1];
     char *copyuid;
 
-    r = mboxname_tointernal(name, imapd_userid, mailboxname);
+    r = (*imapd_namespace.mboxname_tointernal)(name, &imapd_namespace,
+					       imapd_userid, mailboxname);
     if (!r) {
 	r = index_copy(imapd_mailbox, sequence, usinguid, mailboxname,
 		       &copyuid);
@@ -3269,13 +3295,14 @@
 	r = IMAP_PERMISSION_DENIED;
     }
 
-    if (name[0] && name[strlen(name)-1] == '.') {
+    if (name[0] && name[strlen(name)-1] == imapd_namespace.hier_sep) {
 	/* We don't care about trailing hierarchy delimiters. */
 	name[strlen(name)-1] = '\0';
     }
 
     if (!r) {
-	r = mboxname_tointernal(name, imapd_userid, mailboxname);
+	r = (*imapd_namespace.mboxname_tointernal)(name, &imapd_namespace,
+						   imapd_userid, mailboxname);
     }
 
     if (!r) {
@@ -3347,7 +3374,8 @@
     int r;
     char mailboxname[MAX_MAILBOX_NAME+1];
 
-    r = mboxname_tointernal(name, imapd_userid, mailboxname);
+    r = (*imapd_namespace.mboxname_tointernal)(name, &imapd_namespace,
+					       imapd_userid, mailboxname);
 
     if (!r) {
 	r = mboxlist_deletemailbox(mailboxname, imapd_userisadmin,
@@ -3355,7 +3383,8 @@
     }
 
     /* was it a top-level user mailbox? */
-    if (!r && !strncmp(name, "user.", 5) && !strchr(name+5, '.')) {
+    if (!r &&
+	!strncmp(mailboxname, "user.", 5) && !strchr(mailboxname+5, '.')) {
 	struct tmplist *l = xmalloc(sizeof(struct tmplist));
 	int r2, i;
 
@@ -3420,8 +3449,12 @@
 	recursive_rename = 0;
     }
 
-    if (!r) r = mboxname_tointernal(oldname, imapd_userid, oldmailboxname);
-    if (!r) r = mboxname_tointernal(newname, imapd_userid, newmailboxname);
+    if (!r)
+	r = (*imapd_namespace.mboxname_tointernal)(oldname, &imapd_namespace,
+						   imapd_userid, oldmailboxname);
+    if (!r)
+	r = (*imapd_namespace.mboxname_tointernal)(newname, &imapd_namespace,
+						   imapd_userid, newmailboxname);
 
     /* if we're renaming something inside of something else, 
        don't recursively rename stuff */
@@ -3519,14 +3552,27 @@
 	if (*p == '%') *p = '?';
     }
 
+    /* Translate pattern */
+    hier_sep_tointernal(pattern, &imapd_namespace);
+
     if (!strcmp(namespace, "mailboxes")) {
-	mboxlist_findsub(pattern, imapd_userisadmin, 
-			 imapd_userid, imapd_authstate,
-			 mailboxdata, NULL, 0);
+	if (imapd_namespace.isalt)
+	    mboxlist_findsub_alt(pattern, &imapd_namespace, imapd_userisadmin, 
+				 imapd_userid, imapd_authstate,
+				 mailboxdata, NULL, 0);
+	else
+	    mboxlist_findsub(pattern, imapd_userisadmin, 
+			     imapd_userid, imapd_authstate,
+			     mailboxdata, NULL, 0);
     }
     else if (!strcmp(namespace, "all.mailboxes")) {
-	mboxlist_findall(pattern, imapd_userisadmin, imapd_userid,
-			 imapd_authstate, mailboxdata, NULL);
+	if (imapd_namespace.isalt)
+	    mboxlist_findall_alt(pattern, &imapd_namespace,
+				 imapd_userisadmin, imapd_userid,
+				 imapd_authstate, mailboxdata, NULL);
+	else
+	    mboxlist_findall(pattern, imapd_userisadmin, imapd_userid,
+			     imapd_authstate, mailboxdata, NULL);
     }
     else if (!strcmp(namespace, "bboards")
 	     || !strcmp(namespace, "all.bboards")) {
@@ -3562,13 +3608,14 @@
 
     /* Reset state in mstringdata */
     mstringdata(NULL, NULL, 0, 0);
-    
+
     if (!pattern[0] && !subscribed) {
 	/* Special case: query top-level hierarchy separator */
-	prot_printf(imapd_out, "* LIST (\\Noselect) \".\" \"\"\r\n");
+	prot_printf(imapd_out, "* LIST (\\Noselect) \"%c\" \"\"\r\n",
+		    imapd_namespace.hier_sep);
     } else {
 	/* Do we need to concatenate fields? */
-	if (!ignorereference || pattern[0] == '.') {
+	if (!ignorereference || pattern[0] == imapd_namespace.hier_sep) {
 	    /* Either
 	     * - name begins with dot
 	     * - we're configured to honor the reference argument */
@@ -3583,7 +3630,8 @@
 
 	    if (*reference) {
 		/* check for LIST A. .B, change to LIST "" A.B */
-		if (reference[reflen-1] == '.' && pattern[0] == '.') {
+		if (reference[reflen-1] == imapd_namespace.hier_sep &&
+		    pattern[0] == imapd_namespace.hier_sep) {
 		    reference[--reflen] = '\0';
 		}
 		strcpy(buf, reference);
@@ -3592,16 +3640,29 @@
 	    pattern = buf;
 	}
 
+	/* Translate pattern */
+	hier_sep_tointernal(pattern, &imapd_namespace);
+
 	if (subscribed) {
 	    int force = config_getswitch("allowallsubscribe", 0);
 
-	    mboxlist_findsub(pattern, imapd_userisadmin, imapd_userid,
-			     imapd_authstate, lsubdata, NULL, force);
+	    if (imapd_namespace.isalt)
+		mboxlist_findsub_alt(pattern, &imapd_namespace,
+				     imapd_userisadmin, imapd_userid,
+				     imapd_authstate, lsubdata, NULL, force);
+	    else
+		mboxlist_findsub(pattern, imapd_userisadmin, imapd_userid,
+				 imapd_authstate, lsubdata, NULL, force);
 	    lsubdata((char *)0, 0, 0, 0);
 	}
 	else {
-	    mboxlist_findall(pattern, imapd_userisadmin, imapd_userid,
-			     imapd_authstate, listdata, NULL);
+	    if (imapd_namespace.isalt)
+		mboxlist_findall_alt(pattern, &imapd_namespace,
+				     imapd_userisadmin, imapd_userid,
+				     imapd_authstate, listdata, NULL);
+	    else
+		mboxlist_findall(pattern, imapd_userisadmin, imapd_userid,
+				 imapd_authstate, listdata, NULL);
 	    listdata((char *)0, 0, 0, 0);
 	}
 
@@ -3625,7 +3686,8 @@
 
     if (namespace) lcase(namespace);
     if (!namespace || !strcmp(namespace, "mailbox")) {
-	r = mboxname_tointernal(name, imapd_userid, mailboxname);
+	r = (*imapd_namespace.mboxname_tointernal)(name, &imapd_namespace,
+						   imapd_userid, mailboxname);
 	if (!r) {
 	    r = mboxlist_changesub(mailboxname, imapd_userid, 
 				   imapd_authstate, add, force);
@@ -3664,7 +3726,8 @@
     char *acl;
     char *rights, *nextid;
 
-    r = mboxname_tointernal(name, imapd_userid, mailboxname);
+    r = (*imapd_namespace.mboxname_tointernal)(name, &imapd_namespace,
+					       imapd_userid, mailboxname);
 
     if (!r) {
 	r = mboxlist_lookup(mailboxname, (char **)0, &acl, NULL);
@@ -3746,7 +3809,8 @@
     char *acl;
     char *rightsdesc;
 
-    r = mboxname_tointernal(name, imapd_userid, mailboxname);
+    r = (*imapd_namespace.mboxname_tointernal)(name, &imapd_namespace,
+					       imapd_userid, mailboxname);
 
     if (!r) {
 	r = mboxlist_lookup(mailboxname, (char **)0, &acl, NULL);
@@ -3807,7 +3871,8 @@
     char *acl;
     char str[ACL_MAXSTR];
 
-    r = mboxname_tointernal(name, imapd_userid, mailboxname);
+    r = (*imapd_namespace.mboxname_tointernal)(name, &imapd_namespace,
+					       imapd_userid, mailboxname);
 
     if (!r) {
 	r = mboxlist_lookup(mailboxname, (char **)0, &acl, NULL);
@@ -3853,7 +3918,8 @@
     int r;
     char mailboxname[MAX_MAILBOX_NAME+1];
 
-    r = mboxname_tointernal(name, imapd_userid, mailboxname);
+    r = (*imapd_namespace.mboxname_tointernal)(name, &imapd_namespace,
+					       imapd_userid, mailboxname);
 
     if (!r) {
 	r = mboxlist_setacl(mailboxname, identifier, rights,
@@ -3880,25 +3946,30 @@
     int r;
     struct quota quota;
     char buf[MAX_MAILBOX_PATH];
+    char mailboxname[MAX_MAILBOX_NAME+1];
 
-    quota.root = name;
     quota.fd = -1;
 
     if (!imapd_userisadmin) r = IMAP_PERMISSION_DENIED;
     else {
-	mailbox_hash_quota(buf, quota.root);
-	quota.fd = open(buf, O_RDWR, 0);
-	if (quota.fd == -1) {
-	    r = IMAP_QUOTAROOT_NONEXISTENT;
-	}
-	else {
-	    r = mailbox_read_quota(&quota);
+	r = (*imapd_namespace.mboxname_tointernal)(name, &imapd_namespace,
+						   imapd_userid, mailboxname);
+	if (!r) {
+	    quota.root = mailboxname;
+	    mailbox_hash_quota(buf, quota.root);
+	    quota.fd = open(buf, O_RDWR, 0);
+	    if (quota.fd == -1) {
+		r = IMAP_QUOTAROOT_NONEXISTENT;
+	    }
+	    else {
+		r = mailbox_read_quota(&quota);
+	    }
 	}
     }
     
     if (!r) {
 	prot_printf(imapd_out, "* QUOTA ");
-	printastring(quota.root);
+	printastring(name);
 	prot_printf(imapd_out, " (");
 	if (quota.limit >= 0) {
 	    prot_printf(imapd_out, "STORAGE %u %d",
@@ -3934,7 +4005,8 @@
     int r;
     int doclose = 0;
 
-    r = mboxname_tointernal(name, imapd_userid, mailboxname);
+    r = (*imapd_namespace.mboxname_tointernal)(name, &imapd_namespace,
+					       imapd_userid, mailboxname);
 
     if (!r) {
 	r = mailbox_open_header(mailboxname, imapd_authstate, &mailbox);
@@ -3952,12 +4024,15 @@
 	prot_printf(imapd_out, "* QUOTAROOT ");
 	printastring(name);
 	if (mailbox.quota.root) {
+	    (*imapd_namespace.mboxname_toexternal)(mailbox.quota.root,
+						   &imapd_namespace,
+						   imapd_userid, mailboxname);
 	    prot_printf(imapd_out, " ");
-	    printastring(mailbox.quota.root);
+	    printastring(mailboxname);
 	    r = mailbox_read_quota(&mailbox.quota);
 	    if (!r) {
 		prot_printf(imapd_out, "\r\n* QUOTA ");
-		printastring(mailbox.quota.root);
+		printastring(mailboxname);
 		prot_printf(imapd_out, " (");
 		if (mailbox.quota.limit >= 0) {
 		    prot_printf(imapd_out, "STORAGE %u %d",
@@ -3996,6 +4071,7 @@
     static struct buf arg;
     char *p;
     int r;
+    char mailboxname[MAX_MAILBOX_NAME+1];
 
     c = prot_getc(imapd_in);
     if (c != '(') goto badlist;
@@ -4027,7 +4103,12 @@
     if (badresource) r = IMAP_UNSUPPORTED_QUOTA;
     else if (!imapd_userisadmin) r = IMAP_PERMISSION_DENIED;
     else {
-	r = mboxlist_setquota(quotaroot, newquota);
+	r = (*imapd_namespace.mboxname_tointernal)(quotaroot, &imapd_namespace,
+						   imapd_userid, mailboxname);
+
+	if (!r) {
+	    r = mboxlist_setquota(mailboxname, newquota);
+	}
     }
 
     if (r) {
@@ -4228,7 +4309,8 @@
 	index_check(imapd_mailbox, 0, 1);
     }
 
-    r = mboxname_tointernal(name, imapd_userid, mailboxname);
+    r = (*imapd_namespace.mboxname_tointernal)(name, &imapd_namespace,
+					       imapd_userid, mailboxname);
 
     if (!r) {
 	r = mailbox_open_header(mailboxname, imapd_authstate, &mailbox);
@@ -4293,10 +4375,6 @@
  * order to ensure the namespace response is correct on a server with
  * no shared namespace.
  */
-/* locations to set if the user can see a given namespace */
-#define NAMESPACE_INBOX  0
-#define NAMESPACE_USER   1
-#define NAMESPACE_SHARED 2
 static int namespacedata(name, matchlen, maycreate, rock)
     char* name;
     int matchlen;
@@ -4345,10 +4423,29 @@
 	free(pattern);
     }
 
-    prot_printf(imapd_out, "* NAMESPACE %s %s %s\r\n",
-		(sawone[NAMESPACE_INBOX]) ? "((\"INBOX.\" \".\"))" : "NIL",
-		(sawone[NAMESPACE_USER]) ? "((\"user.\" \".\"))" : "NIL",
-		(sawone[NAMESPACE_SHARED]) ? "((\"\" \".\"))" : "NIL");
+    prot_printf(imapd_out, "* NAMESPACE");
+    if (sawone[NAMESPACE_INBOX]) {
+	prot_printf(imapd_out, " ((\"%s\" \"%c\"))",
+		    imapd_namespace.prefix[NAMESPACE_INBOX],
+		    imapd_namespace.hier_sep);
+    } else {
+	prot_printf(imapd_out, " NIL");
+    }
+    if (sawone[NAMESPACE_USER]) {
+	prot_printf(imapd_out, " ((\"%s\" \"%c\"))",
+		    imapd_namespace.prefix[NAMESPACE_USER],
+		    imapd_namespace.hier_sep);
+    } else {
+	prot_printf(imapd_out, " NIL");
+    }
+    if (sawone[NAMESPACE_SHARED]) {
+	prot_printf(imapd_out, " ((\"%s\" \"%c\"))",
+		    imapd_namespace.prefix[NAMESPACE_SHARED],
+		    imapd_namespace.hier_sep);
+    } else {
+	prot_printf(imapd_out, " NIL");
+    }
+    prot_printf(imapd_out, "\r\n");
 
     prot_printf(imapd_out, "%s OK %s\r\n", tag,
 		error_message(IMAP_OK_COMPLETED));
@@ -5440,7 +5537,11 @@
 int maycreate;
 void* rock;
 {
-    prot_printf(imapd_out, "* MAILBOX %s\r\n", name);
+    char mboxname[MAX_MAILBOX_PATH+1];
+
+    (*imapd_namespace.mboxname_toexternal)(name, &imapd_namespace,
+					   imapd_userid, mboxname);
+    prot_printf(imapd_out, "* MAILBOX %s\r\n", mboxname);
     return 0;
 }
 
@@ -5454,6 +5555,7 @@
     static int sawuser = 0;
     int lastnamehassub = 0;
     int c;
+    char mboxname[MAX_MAILBOX_PATH+1];
 
     /* We have to reset the sawuser flag before each list command.
      * Handle it as a dirty hack.
@@ -5466,13 +5568,17 @@
     mstringdatacalls++;
     
     if (lastnamedelayed) {
-	if (name && strncmp(lastname, name, strlen(lastname)) == 0 &&
+	if (name && strcasecmp(lastname, "INBOX") != 0 &&
+	    strncmp(lastname, name, strlen(lastname)) == 0 &&
 	    name[strlen(lastname)] == '.') {
 	    lastnamehassub = 1;
 	}
-	prot_printf(imapd_out, "* %s (%s) \".\" ", cmd,
-	       lastnamehassub ? "" : "\\Noinferiors");
-	printastring(lastname);
+	prot_printf(imapd_out, "* %s (%s) \"%c\" ", cmd,
+		    lastnamehassub ? "" : "\\Noinferiors",
+		    imapd_namespace.hier_sep);
+	(*imapd_namespace.mboxname_toexternal)(lastname, &imapd_namespace,
+					       imapd_userid, mboxname);
+	printstring(mboxname);
 	prot_printf(imapd_out, "\r\n");
 	lastnamedelayed = 0;
     }
@@ -5507,8 +5613,11 @@
 
     c = name[matchlen];
     if (c) name[matchlen] = '\0';
-    prot_printf(imapd_out, "* %s (%s) \".\" ", cmd, c ? "\\Noselect" : "");
-    printstring(name);
+    prot_printf(imapd_out, "* %s (%s) \"%c\" ", cmd, c ? "\\Noselect" : "",
+		imapd_namespace.hier_sep);
+    (*imapd_namespace.mboxname_toexternal)(name, &imapd_namespace,
+					   imapd_userid, mboxname);
+    printstring(mboxname);
     prot_printf(imapd_out, "\r\n");
     if (c) name[matchlen] = c;
     return;
diff -ruN cyrus-imapd/imap/imapd.h cyrus-imapd-2.0.15-HIERSEP-r2/imap/imapd.h
--- cyrus-imapd/imap/imapd.h	Thu Mar 15 22:56:18 2001
+++ cyrus-imapd-2.0.15-HIERSEP-r2/imap/imapd.h	Tue Apr 17 23:19:07 2001
@@ -1,5 +1,5 @@
 /* imapd.h -- Common state for IMAP daemon
- * $Id: imapd.h,v 1.46 2001/03/15 22:56:18 leg Exp $
+ * $Id: imapd.h,v 1.46.2.1 2001/04/17 22:19:07 ken3 Exp $
  *
  * Copyright (c) 1999-2000 Carnegie Mellon University.  All rights reserved.
  *
@@ -47,6 +47,7 @@
 #include "prot.h"
 #include "charset.h"
 #include "mailbox.h"
+#include "namespace.h"
 
 /* Userid client has logged in as */
 extern char *imapd_userid;
diff -ruN cyrus-imapd/imap/index.c cyrus-imapd-2.0.15-HIERSEP-r2/imap/index.c
--- cyrus-imapd/imap/index.c	Tue Jun 19 14:58:58 2001
+++ cyrus-imapd-2.0.15-HIERSEP-r2/imap/index.c	Tue Jun 19 15:47:12 2001
@@ -41,7 +41,7 @@
  *
  */
 /*
- * $Id: index.c,v 1.165 2001/06/19 13:58:58 ken3 Exp $
+ * $Id: index.c,v 1.161.2.2 2001/06/19 14:47:12 ken3 Exp $
  */
 #include <config.h>
 
diff -ruN cyrus-imapd/imap/ipurge.c cyrus-imapd-2.0.15-HIERSEP-r2/imap/ipurge.c
--- cyrus-imapd/imap/ipurge.c	Sat Jul  7 20:37:26 2001
+++ cyrus-imapd-2.0.15-HIERSEP-r2/imap/ipurge.c	Sun Jul  8 17:00:00 2001
@@ -6,7 +6,7 @@
  *
  * includes support for ISPN virtual host extensions
  *
- * $Id: ipurge.c,v 1.11 2001/07/07 19:37:26 leg Exp $
+ * $Id: ipurge.c,v 1.10.4.1 2001/07/08 16:00:00 ken3 Exp $
  * Copyright (c) 2000 Carnegie Mellon University.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
diff -ruN cyrus-imapd/imap/mboxlist.c cyrus-imapd-2.0.15-HIERSEP-r2/imap/mboxlist.c
--- cyrus-imapd/imap/mboxlist.c	Sat Jun 23 04:14:02 2001
+++ cyrus-imapd-2.0.15-HIERSEP-r2/imap/mboxlist.c	Sun Jul  8 17:00:00 2001
@@ -40,7 +40,7 @@
  *
  */
 /*
- * $Id: mboxlist.c,v 1.148 2001/06/23 03:14:02 ken3 Exp $
+ * $Id: mboxlist.c,v 1.147.2.4.2.4 2001/07/08 16:00:00 ken3 Exp $
  */
 
 #include <config.h>
@@ -81,6 +81,7 @@
 #include "acap.h"
 #include "acapmbox.h"
 #include "mboxname.h"
+#include "namespace.h"
 
 #include "mboxlist.h"
 
@@ -407,8 +408,16 @@
 	     * Users by default have all access to their personal mailbox(es),
 	     * Nobody else starts with any access to same.
 	     */
-	    cyrus_acl_set(&acl, name+5, ACL_MODE_SET, ACL_ALL,
+	    identifier = xstrdup(name+5);
+	    if (config_getswitch("unixhierarchysep", 0)) {
+		/* Change DOTCHARs to '.' for ACL */
+		for (p = identifier; *p; p++) {
+		    if (*p == DOTCHAR) *p = '.';
+		}
+	    }
+	    cyrus_acl_set(&acl, identifier, ACL_MODE_SET, ACL_ALL,
 		    (cyrus_acl_canonproc_t *)0, (void *)0);
+	    free(identifier);
 	} else {
 	    defaultacl = identifier = 
 		xstrdup(config_getstring("defaultacl", "anyone lrs"));
@@ -1216,12 +1225,14 @@
 
 struct find_rock {
     struct glob *g;
-    int inbox;
+    struct namespace *namespace;
+    int find_namespace;
     int inboxoffset;
     const char *inboxcase;
     const char *usermboxname;
     int usermboxnamelen;
     int checkmboxlist;
+    int checkshared;
     int isadmin;
     struct auth_state *auth_state;
     int (*proc)(char *, int, int, void *rock);
@@ -1260,7 +1271,8 @@
     }
     if (matchlen == -1) return 0;
 
-    if (!rock->inbox && rock->usermboxname &&
+    if (rock->find_namespace != NAMESPACE_INBOX &&
+	rock->usermboxname &&
 	keylen >= rock->usermboxnamelen &&
 	(keylen == rock->usermboxnamelen || 
 	 key[rock->usermboxnamelen] == '.') &&
@@ -1268,7 +1280,15 @@
 	/* this would've been output with the inbox stuff, so skip it */
 	return 0;
     }
-    
+
+    if (rock->find_namespace == NAMESPACE_SHARED &&
+	rock->namespace && rock->namespace->isalt &&
+	!strncmp(key, "user", 4) &&
+	(key[4] == '\0' || key[4] == '.')) {
+	/* this would've been output with the user stuff, so skip it */
+	return 0;
+    }
+
     /* check acl */
     if (!rock->isadmin) {
 	/* check the acls */
@@ -1327,7 +1347,8 @@
 	memcpy(namebuf, key, keylen);
 	namebuf[keylen] = '\0';
 	
-	if (!rock->inbox && rock->usermboxname &&
+	if (rock->find_namespace != NAMESPACE_INBOX &&
+	    rock->usermboxname &&
 	    !strncmp(namebuf, rock->usermboxname, rock->usermboxnamelen)
 	    && (keylen == rock->usermboxnamelen || 
 		namebuf[rock->usermboxnamelen] == '.')) {
@@ -1357,8 +1378,18 @@
 	switch (r) {
 	case 0:
 	    /* found the entry; output it */
-	    r = (*rock->proc)(namebuf+rock->inboxoffset, matchlen, 
-			      1, rock->procrock);
+	    if (rock->find_namespace == NAMESPACE_SHARED &&
+		rock->checkshared && rock->namespace) {
+		/* special case:  LIST "" % -- output prefix only */
+		r = (*rock->proc)(rock->namespace->prefix[NAMESPACE_SHARED],
+				  strlen(rock->namespace->prefix[NAMESPACE_SHARED])-1,
+				  1, rock->procrock);
+		/* FIXME: short-circuit this */
+	    }
+	    else {
+		r = (*rock->proc)(namebuf+rock->inboxoffset, matchlen, 
+				  1, rock->procrock);
+	    }
 	    break;
 	    
 	case IMAP_MAILBOX_NONEXISTENT:
@@ -1399,10 +1430,12 @@
     int prefixlen;
 
     cbrock.g = glob_init(pattern, GLOB_HIERARCHY|GLOB_INBOXCASE);
+    cbrock.namespace = NULL;
     cbrock.inboxcase = glob_inboxcase(cbrock.g);
     cbrock.isadmin = isadmin;
     cbrock.auth_state = auth_state;
     cbrock.checkmboxlist = 0;	/* don't duplicate work */
+    cbrock.checkshared = 0;
     cbrock.proc = proc;
     cbrock.procrock = rock;
 
@@ -1468,7 +1501,7 @@
 	    cbrock.inboxoffset = strlen(userid);
 	}
 
-	cbrock.inbox = 1;
+	cbrock.find_namespace = NAMESPACE_INBOX;
 	/* iterate through prefixes matching usermboxname */
 	DB->foreach(mbdb,
 		    usermboxname, usermboxnamelen,
@@ -1476,7 +1509,7 @@
 		    NULL);
     }
 
-    cbrock.inbox = 0;
+    cbrock.find_namespace = NAMESPACE_USER;
     cbrock.inboxoffset = 0;
     if (usermboxnamelen) {
 	usermboxname[--usermboxnamelen] = '\0';
@@ -1496,6 +1529,180 @@
     return r;
 }
 
+int mboxlist_findall_alt(char *pattern, struct namespace *namespace,
+			 int isadmin, char *userid,
+			 struct auth_state *auth_state, int (*proc)(),
+			 void *rock)
+{
+    struct find_rock cbrock;
+    char usermboxname[MAX_MAILBOX_NAME+1], patbuf[MAX_MAILBOX_NAME+1];
+    int usermboxnamelen = 0;
+    const char *data;
+    int datalen;
+    int r = 0;
+    char *p;
+    int prefixlen, len;
+
+    cbrock.g = glob_init(pattern, GLOB_HIERARCHY|GLOB_INBOXCASE);
+    cbrock.namespace = namespace;
+    cbrock.inboxcase = glob_inboxcase(cbrock.g);
+    cbrock.isadmin = isadmin;
+    cbrock.auth_state = auth_state;
+    cbrock.checkmboxlist = 0;	/* don't duplicate work */
+    cbrock.checkshared = 0;
+    cbrock.proc = proc;
+    cbrock.procrock = rock;
+
+    /* Build usermboxname */
+    if (userid && !strchr(userid, '.') &&
+	strlen(userid)+5 < MAX_MAILBOX_NAME) {
+	strcpy(usermboxname, "user.");
+	strcat(usermboxname, userid);
+	usermboxnamelen = strlen(usermboxname);
+    }
+    else {
+	userid = 0;
+    }
+
+    /* Check for INBOX first of all */
+    if (userid) {
+	if (GLOB_TEST(cbrock.g, "INBOX") != -1) {
+	    r = DB->fetch(mbdb, usermboxname, usermboxnamelen,
+			  &data, &datalen, NULL);
+	    if (!r && data) {
+		r = (*proc)(cbrock.inboxcase, 5, 0, rock);
+	    }
+	}
+	strcpy(usermboxname+usermboxnamelen, ".");
+	usermboxnamelen++;
+
+	cbrock.usermboxname = usermboxname;
+	cbrock.usermboxnamelen = usermboxnamelen;
+    } else {
+	cbrock.usermboxname = NULL;
+	cbrock.usermboxnamelen = 0;
+    }
+
+    if (r) goto done;
+
+    glob_free(&cbrock.g);
+
+    /* Find fixed-string pattern prefix */
+    for (p = pattern; *p; p++) {
+	if (*p == '*' || *p == '%' || *p == '?') break;
+    }
+    prefixlen = p - pattern;
+
+    /*
+     * Personal (INBOX) namespace
+     *
+     * Append pattern to "INBOX.", search for those mailboxes next
+     */
+    if (userid) {
+	strcpy(patbuf, "INBOX.");
+	strcat(patbuf, pattern);
+	cbrock.g = glob_init(patbuf, GLOB_HIERARCHY|GLOB_INBOXCASE);
+	cbrock.inboxcase = glob_inboxcase(cbrock.g);
+	cbrock.inboxoffset = strlen(userid);
+	cbrock.find_namespace = NAMESPACE_INBOX;
+
+	/* iterate through prefixes matching usermboxname */
+	DB->foreach(mbdb,
+		    usermboxname, usermboxnamelen,
+		    &find_p, &find_cb, &cbrock,
+		    NULL);
+
+	glob_free(&cbrock.g);
+    }
+
+    if (usermboxnamelen) {
+	usermboxname[--usermboxnamelen] = '\0';
+	cbrock.usermboxname = usermboxname;
+	cbrock.usermboxnamelen = usermboxnamelen;
+    }
+
+    /*
+     * Other Users namespace
+     *
+     * If "Other Users*" can match pattern, search for those mailboxes next
+     */
+    len = strlen(namespace->prefix[NAMESPACE_USER])-1;
+    if (!strncmp(namespace->prefix[NAMESPACE_USER], pattern,
+		 prefixlen < len ? prefixlen : len)) {
+
+	if (prefixlen < len)
+	    cbrock.g = glob_init(pattern+prefixlen, GLOB_HIERARCHY);
+	else {
+	    strcpy(patbuf, "user");
+	    strcat(patbuf, pattern+len);
+	    cbrock.g = glob_init(patbuf, GLOB_HIERARCHY);
+	}
+	cbrock.find_namespace = NAMESPACE_USER;
+	cbrock.inboxoffset = 0;
+	
+	/* iterate through prefixes matching usermboxname */
+	DB->foreach(mbdb,
+		    "user", 4,
+		    &find_p, &find_cb, &cbrock,
+		    NULL);
+
+	glob_free(&cbrock.g);
+    }
+
+    /*
+     * Shared namespace
+     *
+     * search for all remaining mailboxes.
+     * just bother looking at the ones that have the same pattern prefix.
+     */
+    len = strlen(namespace->prefix[NAMESPACE_SHARED]);
+    if (!strncmp(namespace->prefix[NAMESPACE_SHARED], pattern,
+		 prefixlen < len - 1 ? prefixlen : len - 1)) {
+
+	cbrock.find_namespace = NAMESPACE_SHARED;
+	cbrock.inboxoffset = 0;
+
+	if (prefixlen < len) {
+	    /* Find pattern which matches shared namespace prefix */
+	    for (p = pattern+prefixlen; *p; p++) {
+		if (*p == '%') continue;
+		else if (*p == '.') p++;
+		break;
+	    }
+
+	    if (!*p) {
+		/* special case:  LIST "" % -- see if we have a shared mbox */
+		cbrock.g = glob_init("*", GLOB_HIERARCHY);
+		cbrock.checkshared = 1;
+	    }
+	    else {
+		cbrock.g = glob_init(p, GLOB_HIERARCHY);
+	    }
+		
+	    DB->foreach(mbdb,
+			"", 0,
+			&find_p, &find_cb, &cbrock,
+			NULL);
+	}
+	else if (pattern[len-1] == '.') {
+	    strcpy(patbuf, "");
+	    strcat(patbuf, pattern+len);
+	    cbrock.g = glob_init(patbuf, GLOB_HIERARCHY);
+
+	    pattern[prefixlen] = '\0';
+	    DB->foreach(mbdb,
+			pattern+len, prefixlen-len,
+			&find_p, &find_cb, &cbrock,
+			NULL);
+	}
+    }
+
+  done:
+    glob_free(&cbrock.g);
+
+    return r;
+}
+
 /*
  * Set the quota on or create a quota root
  */
@@ -1819,10 +2026,12 @@
     int prefixlen;
 
     cbrock.g = glob_init(pattern, GLOB_HIERARCHY|GLOB_INBOXCASE);
+    cbrock.namespace = NULL;
     cbrock.inboxcase = glob_inboxcase(cbrock.g);
     cbrock.isadmin = 1;		/* user can always see their subs */
     cbrock.auth_state = auth_state;
     cbrock.checkmboxlist = !force;
+    cbrock.checkshared = 0;
     cbrock.proc = proc;
     cbrock.procrock = rock;
 
@@ -1891,7 +2100,7 @@
 	    cbrock.inboxoffset = strlen(userid);
 	}
 
-	cbrock.inbox = 1;
+	cbrock.find_namespace = NAMESPACE_INBOX;
 	/* iterate through prefixes matching usermboxname */
 	SUBDB->foreach(subs,
 		       usermboxname, usermboxnamelen,
@@ -1905,7 +2114,7 @@
 	cbrock.usermboxnamelen = 0;
     }
 
-    cbrock.inbox = 0;
+    cbrock.find_namespace = NAMESPACE_USER;
     cbrock.inboxoffset = 0;
     if (usermboxnamelen) {
 	usermboxname[--usermboxnamelen] = '\0';
@@ -1916,6 +2125,191 @@
        just bother looking at the ones that have the same pattern prefix. */
     SUBDB->foreach(subs, pattern, prefixlen, 
 		   &find_p, &find_cb, &cbrock, NULL);
+
+  done:
+    if (subs) mboxlist_closesubs(subs);
+    glob_free(&cbrock.g);
+
+    return r;
+}
+
+int mboxlist_findsub_alt(char *pattern, struct namespace *namespace,
+			 int isadmin, char *userid, 
+			 struct auth_state *auth_state, 
+			 int (*proc)(), void *rock, int force)
+{
+    struct db *subs = NULL;
+    struct find_rock cbrock;
+    char usermboxname[MAX_MAILBOX_NAME+1], patbuf[MAX_MAILBOX_NAME+1];
+    int usermboxnamelen = 0;
+    const char *data;
+    int datalen;
+    int r = 0;
+    char *p;
+    int prefixlen, len;
+
+    cbrock.g = glob_init(pattern, GLOB_HIERARCHY|GLOB_INBOXCASE);
+    cbrock.namespace = namespace;
+    cbrock.inboxcase = glob_inboxcase(cbrock.g);
+    cbrock.isadmin = 1;		/* user can always see their subs */
+    cbrock.auth_state = auth_state;
+    cbrock.checkmboxlist = !force;
+    cbrock.checkshared = 0;
+    cbrock.proc = proc;
+    cbrock.procrock = rock;
+
+    /* open the subscription file that contains the mailboxes the 
+       user is subscribed to */
+    if ((r = mboxlist_opensubs(userid, &subs)) != 0) {
+	goto done;
+    }
+
+    /* Build usermboxname */
+    if (userid && !strchr(userid, '.') &&
+	strlen(userid)+5 < MAX_MAILBOX_NAME) {
+	strcpy(usermboxname, "user.");
+	strcat(usermboxname, userid);
+	usermboxnamelen = strlen(usermboxname);
+    }
+    else {
+	userid = 0;
+    }
+
+    /* Check for INBOX first of all */
+    if (userid) {
+	if (GLOB_TEST(cbrock.g, "INBOX") != -1) {
+	    r = SUBDB->fetch(subs, usermboxname, usermboxnamelen,
+			     &data, &datalen, NULL);
+	    if (!r && data) {
+		r = (*proc)(cbrock.inboxcase, 5, 0, rock);
+	    }
+	}
+	strcpy(usermboxname+usermboxnamelen, ".");
+	usermboxnamelen++;
+
+	cbrock.usermboxname = usermboxname;
+	cbrock.usermboxnamelen = usermboxnamelen;
+    }
+
+    if (r) goto done;
+
+    glob_free(&cbrock.g);
+
+    /* Find fixed-string pattern prefix */
+    for (p = pattern; *p; p++) {
+	if (*p == '*' || *p == '%' || *p == '?') break;
+    }
+    prefixlen = p - pattern;
+
+    /*
+     * Personal (INBOX) namespace
+     *
+     * Append pattern to "INBOX.", search for those subscriptions next
+     */
+    if (userid) {
+	strcpy(patbuf, "INBOX.");
+	strcat(patbuf, pattern);
+	cbrock.g = glob_init(patbuf, GLOB_HIERARCHY|GLOB_INBOXCASE);
+	cbrock.inboxcase = glob_inboxcase(cbrock.g);
+	cbrock.inboxoffset = strlen(userid);
+	cbrock.find_namespace = NAMESPACE_INBOX;
+
+	/* iterate through prefixes matching usermboxname */
+	SUBDB->foreach(subs,
+		       usermboxname, usermboxnamelen,
+		       &find_p, &find_cb, &cbrock,
+		       NULL);
+
+	glob_free(&cbrock.g);
+
+	cbrock.usermboxname = usermboxname;
+	cbrock.usermboxnamelen = usermboxnamelen;
+    } else {
+	cbrock.usermboxname = NULL;
+	cbrock.usermboxnamelen = 0;
+    }
+
+    if (usermboxnamelen) {
+	usermboxname[--usermboxnamelen] = '\0';
+	cbrock.usermboxname = usermboxname;
+	cbrock.usermboxnamelen = usermboxnamelen;
+    }
+
+    /*
+     * Other Users namespace
+     *
+     * If "Other Users*" can match pattern, search for those subscriptions next
+     */
+    len = strlen(namespace->prefix[NAMESPACE_USER])-1;
+    if (!strncmp(namespace->prefix[NAMESPACE_USER], pattern,
+		 prefixlen < len ? prefixlen : len)) {
+
+	if (prefixlen < len)
+	    cbrock.g = glob_init(pattern+prefixlen, GLOB_HIERARCHY);
+	else {
+	    strcpy(patbuf, "user");
+	    strcat(patbuf, pattern+len);
+	    cbrock.g = glob_init(patbuf, GLOB_HIERARCHY);
+	}
+	cbrock.find_namespace = NAMESPACE_USER;
+	cbrock.inboxoffset = 0;
+	
+	/* iterate through prefixes matching usermboxname */
+	SUBDB->foreach(subs,
+		       "user", 4,
+		       &find_p, &find_cb, &cbrock,
+		       NULL);
+
+	glob_free(&cbrock.g);
+    }
+
+    /*
+     * Shared namespace
+     *
+     * search for all remaining subscriptions.
+     * just bother looking at the ones that have the same pattern prefix.
+     */
+    len = strlen(namespace->prefix[NAMESPACE_SHARED]);
+    if (!strncmp(namespace->prefix[NAMESPACE_SHARED], pattern,
+		 prefixlen < len - 1 ? prefixlen : len - 1)) {
+
+	cbrock.find_namespace = NAMESPACE_SHARED;
+	cbrock.inboxoffset = 0;
+
+	if (prefixlen < len) {
+	    /* Find pattern which matches shared namespace prefix */
+	    for (p = pattern+prefixlen; *p; p++) {
+		if (*p == '%') continue;
+		else if (*p == '.') p++;
+		break;
+	    }
+
+	    if (!*p) {
+		/* special case:  LSUB "" % -- see if we have a shared mbox */
+		cbrock.g = glob_init("*", GLOB_HIERARCHY);
+		cbrock.checkshared = 1;
+	    }
+	    else {
+		cbrock.g = glob_init(p, GLOB_HIERARCHY);
+	    }
+
+	    SUBDB->foreach(subs,
+			   "", 0,
+			   &find_p, &find_cb, &cbrock,
+			   NULL);
+	}
+	else if (pattern[len-1] == '.') {
+	    strcpy(patbuf, "");
+	    strcat(patbuf, pattern+len);
+	    cbrock.g = glob_init(patbuf, GLOB_HIERARCHY);
+
+	    pattern[prefixlen] = '\0';
+	    SUBDB->foreach(subs,
+			   pattern+len, prefixlen-len,
+			   &find_p, &find_cb, &cbrock,
+			   NULL);
+	}
+    }
 
   done:
     if (subs) mboxlist_closesubs(subs);
diff -ruN cyrus-imapd/imap/mboxlist.h cyrus-imapd-2.0.15-HIERSEP-r2/imap/mboxlist.h
--- cyrus-imapd/imap/mboxlist.h	Sat Jun 23 04:14:03 2001
+++ cyrus-imapd-2.0.15-HIERSEP-r2/imap/mboxlist.h	Sun Jul  8 17:00:01 2001
@@ -41,7 +41,7 @@
  *
 
  * 
- * $Id: mboxlist.h,v 1.13 2001/06/23 03:14:03 ken3 Exp $
+ * $Id: mboxlist.h,v 1.12.4.1.2.1 2001/07/08 16:00:01 ken3 Exp $
  */
 
 #ifndef INCLUDED_MBOXLIST_H
@@ -52,6 +52,7 @@
 #include "auth.h"
 #include "acap.h"
 #include "mailbox.h"
+#include "namespace.h"
 
 /* --- cut here --- */
 #define CONFIG_DB_SUBS (&cyrusdb_flat)
@@ -115,11 +116,19 @@
 /* Find all mailboxes that match 'pattern'. */
 int mboxlist_findall(char *pattern, int isadmin, char *userid, 
 		     struct auth_state *auth_state, int (*proc)(), void *rock);
+int mboxlist_findall_alt(char *pattern, struct namespace *namespace,
+			 int isadmin, char *userid, 
+			 struct auth_state *auth_state, int (*proc)(),
+			 void *rock);
 
 /* Find subscribed mailboxes that match 'pattern'. */
 int mboxlist_findsub(char *pattern, int isadmin, char *userid, 
 		     struct auth_state *auth_state, int (*proc)(), void *rock,
 		     int force);
+int mboxlist_findsub_alt(char *pattern, struct namespace *namespace,
+			 int isadmin, char *userid, 
+			 struct auth_state *auth_state, int (*proc)(),
+			 void *rock, int force);
 
 /* given a mailbox 'name', where should we stage messages for it? 
    'stagedir' should be MAX_MAILBOX_PATH. */
diff -ruN cyrus-imapd/imap/mboxname.c cyrus-imapd-2.0.15-HIERSEP-r2/imap/mboxname.c
--- cyrus-imapd/imap/mboxname.c	Fri Jan  5 06:00:18 2001
+++ cyrus-imapd-2.0.15-HIERSEP-r2/imap/mboxname.c	Wed Jul  4 14:59:29 2001
@@ -1,5 +1,5 @@
 /* mboxname.c -- Mailbox list manipulation routines
- $Id: mboxname.c,v 1.20 2001/01/05 06:00:18 leg Exp $
+ $Id: mboxname.c,v 1.20.4.2.2.3 2001/07/04 13:59:29 ken3 Exp $
 
  * Copyright (c)1998-2000 Carnegie Mellon University.  All rights reserved.
  *
@@ -102,30 +102,179 @@
  * On success, results are placed in the buffer pointed to by
  * 'result', the buffer must be of size MAX_MAILBOX_NAME+1.
  */
-int mboxname_tointernal(const char *name, const char *userid, char *result)
+int mboxname_tointernal(const char *name, struct namespace *namespace,
+			const char *userid, char *result)
 {
+    /* Personal (INBOX) namespace */
     if ((name[0] == 'i' || name[0] == 'I') &&
 	!strncasecmp(name, "inbox", 5) &&
-	(name[5] == '\0' || name[5] == '.')) {
+	(name[5] == '\0' || name[5] == namespace->hier_sep)) {
 
-	if (!userid || strchr(userid, '.')) {
+	if (!userid || strchr(userid, namespace->hier_sep)) {
 	    return IMAP_MAILBOX_BADNAME;
 	}
 
-	if (strlen(name)+strlen(userid)+5 > MAX_MAILBOX_NAME) {
+	if (strlen(name+5)+strlen(userid)+5 > MAX_MAILBOX_NAME) {
 	    return IMAP_MAILBOX_BADNAME;
 	}
 
 	strcpy(result, "user.");
 	strcat(result, userid);
 	strcat(result, name+5);
+	hier_sep_tointernal(result+5+strlen(userid), namespace);
 	return 0;
     }
-	    
+
+    /* Other Users & Shared namespace */
     if (strlen(name) > MAX_MAILBOX_NAME) {
 	return IMAP_MAILBOX_BADNAME;
     }
     strcpy(result, name);
+    hier_sep_tointernal(result, namespace);
+    return 0;
+}
+
+int mboxname_tointernal_alt(const char *name, struct namespace *namespace,
+			    const char *userid, char *result)
+{
+    int prefixlen;
+
+    /* Shared namespace */
+    prefixlen = strlen(namespace->prefix[NAMESPACE_SHARED]);
+    if (!strncmp(name, namespace->prefix[NAMESPACE_SHARED], prefixlen-1) &&
+	(name[prefixlen-1] == '\0' || name[prefixlen-1] == namespace->hier_sep)) {
+
+	if (name[prefixlen-1] == '\0') {
+	    /* can't create folders using undelimited prefix */
+	    return IMAP_MAILBOX_BADNAME;
+	}
+
+	if (strlen(name+prefixlen) > MAX_MAILBOX_NAME) {
+	    return IMAP_MAILBOX_BADNAME;
+	}
+
+	strcpy(result, name+prefixlen);
+	hier_sep_tointernal(result, namespace);
+	return 0;
+    }
+
+    /* Other Users namespace */
+    prefixlen = strlen(namespace->prefix[NAMESPACE_USER]);
+    if (!strncmp(name, namespace->prefix[NAMESPACE_USER], prefixlen-1) &&
+	(name[prefixlen-1] == '\0' || name[prefixlen-1] == namespace->hier_sep)) {
+
+	if (name[prefixlen-1] == '\0') {
+	    /* can't create folders using undelimited prefix */
+	    return IMAP_MAILBOX_BADNAME;
+	}
+
+	if (strlen(name+prefixlen)+5 > MAX_MAILBOX_NAME) {
+	    return IMAP_MAILBOX_BADNAME;
+	}
+
+	strcpy(result, "user.");
+	strcat(result, name+prefixlen);
+	hier_sep_tointernal(result+5, namespace);
+	return 0;
+    }
+
+    /* Personal (INBOX) namespace */
+    if (!userid || strchr(userid, namespace->hier_sep)) {
+	return IMAP_MAILBOX_BADNAME;
+    }
+
+    if (strlen(userid)+5 > MAX_MAILBOX_NAME) {
+	return IMAP_MAILBOX_BADNAME;
+    }
+
+    strcpy(result, "user.");
+    strcat(result, userid);
+
+    /* INBOX */
+    if ((name[0] == 'i' || name[0] == 'I') &&
+	!strncasecmp(name, "inbox", 5) &&
+	(name[5] == '\0' || name[5] == namespace->hier_sep)) {
+
+	if (name[5] == namespace->hier_sep) {
+	    /* can't create folders under INBOX */
+	    return IMAP_MAILBOX_BADNAME;
+	}
+
+	return 0;
+    }
+
+    /* other personal folder */
+    if (strlen(result)+6 > MAX_MAILBOX_NAME) {
+	return IMAP_MAILBOX_BADNAME;
+    }
+    strcat(result, ".");
+    strcat(result, name);
+    hier_sep_tointernal(result+6+strlen(userid), namespace);
+    return 0;
+}
+
+/*
+ * Convert the internal mailbox 'name' to an external name.
+ * If 'userid' is non-null, it is the name of the current user.
+ * On success, results are placed in the buffer pointed to by
+ * 'result', the buffer must be of size MAX_MAILBOX_NAME+1.
+ */
+int mboxname_toexternal(const char *name, struct namespace *namespace,
+			const char *userid, char *result)
+{
+    strcpy(result, name);
+    hier_sep_toexternal(result, namespace);
+    return 0;
+}
+
+int mboxname_toexternal_alt(const char *name, struct namespace *namespace,
+			    const char *userid, char *result)
+{
+    /* Personal (INBOX) namespace */
+    if (!strncasecmp(name, "inbox", 5) &&
+	(name[5] == '\0' || name[5] == '.')) {
+	if (name[5] == '\0')
+	    strcpy(result, name);
+	else
+	    strcpy(result, name+6);
+    }
+    /* paranoia - this shouldn't be needed */
+    else if (!strncmp(name, "user.", 5) &&
+	     !strncmp(name+5, userid, strlen(userid)) &&
+	     (name[5+strlen(userid)] == '\0' ||
+	      name[5+strlen(userid)] == '.')) {
+	if (name[5+strlen(userid)] == '\0')
+	    strcpy(result, "INBOX");
+	else
+	    strcpy(result, name+5+strlen(userid)+1);
+    }
+
+    /* Other Users namespace */
+    else if (!strncmp(name, "user", 4) &&
+	     (name[4] == '\0' || name[4] == '.')) {
+	sprintf(result, "%.*s",
+		strlen(namespace->prefix[NAMESPACE_USER])-1,
+		namespace->prefix[NAMESPACE_USER]);
+	if (name[4] == '.') {
+	    sprintf(result+strlen(result), "%c%s",
+		    namespace->hier_sep, name+5);
+	}
+    }
+
+    /* Shared namespace */
+    else {
+	/* special case:  LIST/LSUB "" % */
+	if (!strncmp(name, namespace->prefix[NAMESPACE_SHARED],
+		     strlen(namespace->prefix[NAMESPACE_SHARED])-1)) {
+	    strcpy(result, name);
+	}
+	else {
+	    strcpy(result, namespace->prefix[NAMESPACE_SHARED]);
+	    strcat(result, name);
+	}
+    }
+
+    hier_sep_toexternal(result, namespace);
     return 0;
 }
 
@@ -192,6 +341,9 @@
     int sawutf7 = 0;
     unsigned c1, c2, c3, c4, c5, c6, c7, c8;
     int ucs4;
+    int unixsep;
+
+    unixsep = config_getswitch("unixhierarchysep", 0);
 
     if (strlen(name) > MAX_MAILBOX_NAME) return IMAP_MAILBOX_BADNAME;
     for (i = 0; i < NUM_BADMBOXPATTERNS; i++) {
@@ -270,7 +422,9 @@
 	    name++;		/* Skip over terminating '-' */
 	}
 	else {
-	    if (!strchr(GOODCHARS, *name++)) return IMAP_MAILBOX_BADNAME;
+	    if (!strchr(GOODCHARS, *name) && !(unixsep && *name == DOTCHAR))
+		return IMAP_MAILBOX_BADNAME;
+	    name++;
 	    sawutf7 = 0;
 	}
     }
diff -ruN cyrus-imapd/imap/mboxname.h cyrus-imapd-2.0.15-HIERSEP-r2/imap/mboxname.h
--- cyrus-imapd/imap/mboxname.h	Fri Jan  5 06:00:18 2001
+++ cyrus-imapd-2.0.15-HIERSEP-r2/imap/mboxname.h	Thu May 31 05:40:47 2001
@@ -1,5 +1,5 @@
 /* mboxname.h -- Mailbox list manipulation routines
- * $Id: mboxname.h,v 1.5 2001/01/05 06:00:18 leg Exp $
+ * $Id: mboxname.h,v 1.5.4.2 2001/05/31 04:40:47 ken3 Exp $
  *
  * Copyright (c) 1999-2000 Carnegie Mellon University.  All rights reserved.
  *
@@ -44,7 +44,16 @@
 #ifndef INCLUDED_MBOXNAME_H
 #define INCLUDED_MBOXNAME_H
 
-int mboxname_tointernal(const char *name, const char *userid, char *result);
+#include "namespace.h"
+
+int mboxname_tointernal(const char *name, struct namespace *namespace,
+			const char *userid, char *result);
+int mboxname_tointernal_alt(const char *name, struct namespace *namespace,
+			    const char *userid, char *result);
+int mboxname_toexternal(const char *name, struct namespace *namespace,
+			const char *userid, char *result);
+int mboxname_toexternal_alt(const char *name, struct namespace *namespace,
+			    const char *userid, char *result);
 int mboxname_userownsmailbox(char *userid, char *name);
 int mboxname_netnewscheck(char *name);
 int mboxname_policycheck(char *name);
diff -ruN cyrus-imapd/imap/mupdate.c cyrus-imapd-2.0.15-HIERSEP-r2/imap/mupdate.c
--- cyrus-imapd/imap/mupdate.c	Sat Jul  7 20:42:59 2001
+++ cyrus-imapd-2.0.15-HIERSEP-r2/imap/mupdate.c	Sun Jul  8 17:00:01 2001
@@ -879,7 +879,7 @@
 	/* just grab the update list and release the lock */
 	p = C->plist;
 	C->plist = NULL;
-	pthread_mutex_unlock(&C-m);
+	pthread_mutex_unlock(&C->m);
 
 	while (p != NULL) {
 	    /* send update */
diff -ruN cyrus-imapd/imap/namespace.c cyrus-imapd-2.0.15-HIERSEP-r2/imap/namespace.c
--- cyrus-imapd/imap/namespace.c	Thu Jan  1 01:00:00 1970
+++ cyrus-imapd-2.0.15-HIERSEP-r2/imap/namespace.c	Wed Jul  4 14:59:30 2001
@@ -0,0 +1,130 @@
+/* namespace.c -- Namespace manipulation routines
+ * $Id: namespace.c,v 1.1.2.4.2.3 2001/07/04 13:59:30 ken3 Exp $
+ *
+ * Copyright (c) 1999-2000 Carnegie Mellon University.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. The name "Carnegie Mellon University" must not be used to
+ *    endorse or promote products derived from this software without
+ *    prior written permission. For permission or any other legal
+ *    details, please contact  
+ *      Office of Technology Transfer
+ *      Carnegie Mellon University
+ *      5000 Forbes Avenue
+ *      Pittsburgh, PA  15213-3890
+ *      (412) 268-4387, fax: (412) 268-7395
+ *      tech-transfer@andrew.cmu.edu
+ *
+ * 4. Redistributions of any form whatsoever must retain the following
+ *    acknowledgment:
+ *    "This product includes software developed by Computing Services
+ *     at Carnegie Mellon University (http://www.cmu.edu/computing/)."
+ *
+ * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO
+ * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE
+ * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
+ * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
+ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+
+#include <config.h>
+
+#include <string.h>
+
+#include "imapconf.h"
+#include "mboxname.h"
+#include "namespace.h"
+
+/*
+ * Create namespace based on config options.
+ */
+int namespace_init(struct namespace *namespace, int force_std)
+{
+    const char *prefix;
+
+    namespace->hier_sep = config_getswitch("unixhierarchysep", 0) ? '/' : '.';
+    namespace->isalt = !force_std && config_getswitch("altnamespace", 0);
+
+    if (namespace->isalt) {
+	/* alternate namespace */
+	strcpy(namespace->prefix[NAMESPACE_INBOX], "");
+
+	prefix = config_getstring("userprefix", "Other Users");
+	if (!prefix || strlen(prefix) == 0 ||
+	    strlen(prefix) >= MAX_NAMESPACE_PREFIX ||
+	    strchr(prefix,namespace->hier_sep) != NULL)
+	    return 0;
+	sprintf(namespace->prefix[NAMESPACE_USER], "%.*s%c",
+		MAX_NAMESPACE_PREFIX-1, prefix, namespace->hier_sep);
+
+	prefix = config_getstring("sharedprefix", "Shared Folders");
+	if (!prefix || strlen(prefix) == 0 ||
+	    strlen(prefix) >= MAX_NAMESPACE_PREFIX ||
+	    strchr(prefix, namespace->hier_sep) != NULL ||
+	    !strncmp(namespace->prefix[NAMESPACE_USER], prefix, strlen(prefix)))
+	    return 0;
+	sprintf(namespace->prefix[NAMESPACE_SHARED], "%.*s%c",
+		MAX_NAMESPACE_PREFIX-1, prefix, namespace->hier_sep); 
+
+	namespace->mboxname_tointernal = mboxname_tointernal_alt;
+	namespace->mboxname_toexternal = mboxname_toexternal_alt;
+    }
+
+    else {
+	/* standard namespace */
+	sprintf(namespace->prefix[NAMESPACE_INBOX], "%s%c",
+		"INBOX", namespace->hier_sep);
+	sprintf(namespace->prefix[NAMESPACE_USER], "%s%c",
+		"user", namespace->hier_sep);
+	strcpy(namespace->prefix[NAMESPACE_SHARED], "");
+
+	namespace->mboxname_tointernal = mboxname_tointernal;
+	namespace->mboxname_toexternal = mboxname_toexternal;
+    }
+
+    return 1;
+}
+
+char *hier_sep_tointernal(char *name, struct namespace *namespace)
+{
+    char *p;
+
+    if (namespace->hier_sep == '/') {
+	/* change all '/'s to '.' and all '.'s to DOTCHAR */
+	for (p = name; *p; p++) {
+	    if (*p == '/') *p = '.';
+	    else if (*p == '.') *p = DOTCHAR;
+	}
+    }
+
+    return name;
+}
+
+char *hier_sep_toexternal(char *name, struct namespace *namespace)
+{
+    char *p;
+
+    if (namespace->hier_sep == '/') {
+	/* change all '.'s to '/' and all DOTCHARs to '.' */
+	for (p = name; *p; p++) {
+	    if (*p == '.') *p = '/';
+	    else if (*p == DOTCHAR) *p = '.';
+	}
+    }
+
+    return name;
+}
diff -ruN cyrus-imapd/imap/namespace.h cyrus-imapd-2.0.15-HIERSEP-r2/imap/namespace.h
--- cyrus-imapd/imap/namespace.h	Thu Jan  1 01:00:00 1970
+++ cyrus-imapd-2.0.15-HIERSEP-r2/imap/namespace.h	Wed Jul  4 02:37:01 2001
@@ -0,0 +1,70 @@
+/* namespace.h -- Namespace manipulation routines
+ * $Id: namespace.h,v 1.1.2.3.2.2 2001/07/04 01:37:01 ken3 Exp $
+ *
+ * Copyright (c) 1999-2000 Carnegie Mellon University.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. The name "Carnegie Mellon University" must not be used to
+ *    endorse or promote products derived from this software without
+ *    prior written permission. For permission or any other legal
+ *    details, please contact  
+ *      Office of Technology Transfer
+ *      Carnegie Mellon University
+ *      5000 Forbes Avenue
+ *      Pittsburgh, PA  15213-3890
+ *      (412) 268-4387, fax: (412) 268-7395
+ *      tech-transfer@andrew.cmu.edu
+ *
+ * 4. Redistributions of any form whatsoever must retain the following
+ *    acknowledgment:
+ *    "This product includes software developed by Computing Services
+ *     at Carnegie Mellon University (http://www.cmu.edu/computing/)."
+ *
+ * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO
+ * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY BE LIABLE
+ * FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
+ * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
+ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+
+#ifndef INCLUDED_NAMESPACE_H
+#define INCLUDED_NAMESPACE_H
+
+#define MAX_NAMESPACE_PREFIX 40
+
+#define DOTCHAR '^'
+
+enum { NAMESPACE_INBOX, NAMESPACE_USER, NAMESPACE_SHARED };
+
+struct namespace {
+    int isalt;
+    char prefix[3][MAX_NAMESPACE_PREFIX+1];
+    char hier_sep;
+    int (*mboxname_tointernal)(const char *name, struct namespace *namespace,
+			       const char *userid, char *result);
+    int (*mboxname_toexternal)(const char *name, struct namespace *namespace,
+			       const char *userid, char *result);
+};
+
+/* Initialize namespace (prefixes & hierarchy separator from imapd.conf) */
+int namespace_init(struct namespace *namespace, int force_std);
+
+char *hier_sep_tointernal(char *name, struct namespace *namespace);
+
+char *hier_sep_toexternal(char *name, struct namespace *namespace);
+
+#endif
diff -ruN cyrus-imapd/imap/pop3d.c cyrus-imapd-2.0.15-HIERSEP-r2/imap/pop3d.c
--- cyrus-imapd/imap/pop3d.c	Sat Jul  7 00:26:10 2001
+++ cyrus-imapd-2.0.15-HIERSEP-r2/imap/pop3d.c	Sun Jul  8 17:00:02 2001
@@ -40,7 +40,7 @@
  */
 
 /*
- * $Id: pop3d.c,v 1.98 2001/07/06 23:26:10 ken3 Exp $
+ * $Id: pop3d.c,v 1.90.2.3.2.3 2001/07/08 16:00:02 ken3 Exp $
  */
 #include <config.h>
 
@@ -82,6 +82,7 @@
 #include "mboxlist.h"
 #include "idle.h"
 #include "telemetry.h"
+#include "namespace.h"
 
 #ifdef HAVE_KRB
 /* kerberos des is purported to conflict with OpenSSL DES */
@@ -130,6 +131,9 @@
 
 static mailbox_decideproc_t expungedeleted;
 
+/* current namespace */
+static struct namespace popd_namespace;
+
 static void cmd_apop(char *user, char *digest);
 static int apop_enabled(void);
 static char popd_apop_chal[300]; /* timestamp (44) + config_servername (256) */
@@ -233,6 +237,12 @@
     /* setup for sending IMAP IDLE notifications */
     idle_enabled();
 
+    /* Set namespace */
+    if (!namespace_init(&popd_namespace, 0)) {
+	syslog(LOG_ERR, "invalid namespace prefix in configuration file");
+	fatal("invalid namespace prefix in configuration file", EC_CONFIG);
+    }
+
     while ((opt = getopt(argc, argv, "C:sk")) != EOF) {
 	switch(opt) {
 	case 'C': /* alt config file - handled by service::main() */
@@ -934,7 +944,8 @@
 	shut_down(0);
     }
     else if (!(p = auth_canonifyid(user)) ||
-	       strchr(p, '.') || strlen(p) + 6 > MAX_MAILBOX_PATH) {
+	     (popd_namespace.hier_sep == '.' && strchr(p, '.')) ||
+	     strlen(p) + 6 > MAX_MAILBOX_PATH) {
 	prot_printf(popd_out, "-ERR Invalid user\r\n");
 	syslog(LOG_NOTICE,
 	       "badlogin: %s plaintext %s invalid user",
@@ -1216,6 +1227,9 @@
     int minpoll;
 
     popd_login_time = time(0);
+
+    /* Translate userid */
+    hier_sep_tointernal(popd_userid, &popd_namespace);
 
     strcpy(inboxname, "user.");
     strcat(inboxname, popd_userid);
diff -ruN cyrus-imapd/imap/version.h cyrus-imapd-2.0.15-HIERSEP-r2/imap/version.h
--- cyrus-imapd/imap/version.h	Sat Jul  7 20:54:14 2001
+++ cyrus-imapd-2.0.15-HIERSEP-r2/imap/version.h	Sun Jul  8 17:00:02 2001
@@ -36,10 +36,10 @@
  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
  * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- * $Id: version.h,v 1.105 2001/07/07 19:54:14 leg Exp $
+ * $Id: version.h,v 1.102.2.4.2.2 2001/07/08 16:00:02 ken3 Exp $
  */
 
-#define _CYRUS_VERSION "v2.0.15"
+#define _CYRUS_VERSION "v2.0.15-HIERSEP-r2"
 
 /* EXTRA_IDENT is a hack to add some version information for which compile
  * was used to build this version (at CMU, but we don't care what you do with
diff -ruN cyrus-imapd/man/imapd.conf.5 cyrus-imapd-2.0.15-HIERSEP-r2/man/imapd.conf.5
--- cyrus-imapd/man/imapd.conf.5	Sat Jun 23 02:01:50 2001
+++ cyrus-imapd-2.0.15-HIERSEP-r2/man/imapd.conf.5	Sun Jul  8 17:00:02 2001
@@ -74,6 +74,25 @@
 partition named in the \fBdefaultpartition\fR option, is required.
 For example, if the value of the \fBdefaultpartion\fR option is
 \fBdefault\fR, then the \fBpartition-default\fR field is required.
+.IP "\fBunixhierarchysep:\fR no" 5
+Use the UNIX separator character '/' for delimiting levels of mailbox
+hierarchy.  The default is to use the netnews separator character '.'. 
+.IP "\fBaltnamespace:\fR no" 5
+Use the alternate IMAP namespace, where personal folders reside at the
+same level in the hierarchy as INBOX.
+.br
+.sp
+This option ONLY applies where interaction takes place with the
+client/user.  Currently this is limited to the IMAP protocol (imapd)
+and Sieve scripts (lmtpd).  This option does NOT apply to admin tools
+such as cyradm (admins ONLY), reconstruct, quota, etc., NOR does it
+affect LMTP delivery of messages directly to mailboxes via plus-addressing.
+.IP "\fBuserprefix:\fR Other Users" 5
+If using the alternate IMAP namespace, the prefix for the other users
+namespace.  The hierarchy delimiter will be automatically appended.
+.IP "\fBsharedprefix:\fR Shared Folders" 5
+If using the alternate IMAP namespace, the prefix for the shared
+namespace.  The hierarchy delimiter will be automatically appended.
 .IP "\fBumask:\fR 077" 5
 The umask value used by various Cyrus IMAP programs.
 .IP "\fBservername:\fR <result returned by gethostname(2)>" 5
diff -ruN cyrus-imapd/master/Makefile.in cyrus-imapd-2.0.15-HIERSEP-r2/master/Makefile.in
--- cyrus-imapd/master/Makefile.in	Sat Apr 28 15:40:33 2001
+++ cyrus-imapd-2.0.15-HIERSEP-r2/master/Makefile.in	Thu May 31 15:46:31 2001
@@ -1,5 +1,5 @@
 # Makefile for the Cyrus controlling process
-# $Id: Makefile.in,v 1.11 2001/04/28 14:40:33 ken3 Exp $
+# $Id: Makefile.in,v 1.10.4.1 2001/05/31 14:46:31 ken3 Exp $
 # 
 # @configure_input@
 #
diff -ruN cyrus-imapd/master/master.c cyrus-imapd-2.0.15-HIERSEP-r2/master/master.c
--- cyrus-imapd/master/master.c	Sat Jun 23 01:59:48 2001
+++ cyrus-imapd-2.0.15-HIERSEP-r2/master/master.c	Sun Jul  8 17:00:02 2001
@@ -39,7 +39,7 @@
  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: master.c,v 1.40 2001/06/23 00:59:48 ken3 Exp $ */
+/* $Id: master.c,v 1.35.2.2.2.1 2001/07/08 16:00:02 ken3 Exp $ */
 
 #include <config.h>
 
@@ -326,16 +326,19 @@
         if ((port = parse_listen(listen)) == NULL) {
             /* listen IS the port */
             if (!resolve_port(listen, s, &sin)) {
+		free(listen);
                 return;
             }
             sin.sin_addr.s_addr = INADDR_ANY;
         } else {
             /* listen is now just the address */
             if (!resolve_port(port, s, &sin)) {
+		free(listen);
                 return;
             }
             if (!resolve_host(listen, &sin)) {
 		s->exec = NULL;
+		free(listen);
                 return;
             }
         }
diff -ruN cyrus-imapd/master/service.c cyrus-imapd-2.0.15-HIERSEP-r2/master/service.c
--- cyrus-imapd/master/service.c	Mon May 21 21:10:17 2001
+++ cyrus-imapd-2.0.15-HIERSEP-r2/master/service.c	Thu May 31 15:46:32 2001
@@ -39,7 +39,7 @@
  * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: service.c,v 1.23 2001/05/21 20:10:17 leg Exp $ */
+/* $Id: service.c,v 1.21.2.1 2001/05/31 14:46:32 ken3 Exp $ */
 #include <config.h>
 
 #include <stdio.h>
