Clarify that we are GPLv2
[citadel.git] / citadel / docs / citadel.html
index f61182283f30d373b9b9fd0e1a7be436591152ed..210728d3c01442cfc05a24ffc33d2495e0beb109 100644 (file)
@@ -8,9 +8,8 @@
 <body>
 <div align="center">
 <h1>C I T A D E L</h1>
-<h2>a messaging and collaboration platform for BBS bbnd groupware
-applications</h2>
-Copyright &copy;1987-2005 by the Citadel development team:<br>
+<h2>an open source messaging and collaboration platform</h2>
+Copyright &copy;1987-2006 by the Citadel development team:<br>
 <br>
 <table align="center" border="0" cellpadding="2" cellspacing="2">
   <tbody>
@@ -36,8 +35,7 @@ others<br>
     <tr>
       <td valign="top">Art Cancro<br>
       </td>
-      <td valign="top"><i>overall system design and lead
-developer<br>
+      <td valign="top"><i>overall system design and lead developer<br>
       </i></td>
     </tr>
     <tr>
@@ -59,17 +57,16 @@ developer<br>
       </i></td>
     </tr>
     <tr>
-      <td valign="top">Michael Hampton<br>
+      <td valign="top">Wilfried Goesgens<br>
       </td>
-      <td valign="top"><i>client software development<br>
+      <td valign="top"><i>build system patches<br>
       </i></td>
     </tr>
     <tr>
-      <td style="vertical-align: top;">Urs Jannsen<br>
-      </td>
-      <td style="vertical-align: top;"><span style="font-style: italic;">text
-search algorithm</span><br>
+      <td valign="top">Michael Hampton<br>
       </td>
+      <td valign="top"><i>client software development<br>
+      </i></td>
     </tr>
     <tr>
       <td valign="top">Andru Luvisi<br>
@@ -86,8 +83,13 @@ search algorithm</span><br>
     <tr>
       <td valign="top">Stu Mark<br>
       </td>
-      <td valign="top"><i>additional client features, IGnet protocol
-design<br>
+      <td valign="top"><i>additional client features, IGnet protocol design<br>
+      </i></td>
+    </tr>
+    <tr>
+      <td valign="top">Edward S. Marshall<br>
+      </td>
+      <td valign="top"><i>RBL checking function design<br>
       </i></td>
     </tr>
     <tr>
@@ -102,11 +104,16 @@ design<br>
       <td valign="top"><i>assistance with project management<br>
       </i></td>
     </tr>
+    <tr>
+      <td valign="top">Trey Van Riper<br>
+      </td>
+      <td valign="top"><i>QA and portability enhancements<br>
+      </i></td>
+    </tr>
     <tr>
       <td valign="top">John Walker<br>
       </td>
-      <td valign="top"><i>author of public domain base64
-encoder/decoder<br>
+      <td valign="top"><i>author of public domain base64 encoder/decoder<br>
       </i></td>
     </tr>
     <tr>
@@ -125,14 +132,13 @@ encoder/decoder<br>
 </table>
 </div>
 <br>
-<div align="justify">The entire package is open source; you can
+<div align="justify">The entire package is open source software.  You may
 redistribute and/or modify it under the terms of the GNU General Public
-License as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.<br>
+License, version 2, which is included in this manual.<br>
 <br>
 This program is distributed in the hope that it will be useful, but
 WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.&nbsp; See the GNU
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 General Public License for more details. </div>
 <div align="justify"><br>
 For more information, visit either of these locations on
@@ -215,6 +221,9 @@ interval</a></li>
   <li><a href="#Database_maintenance">Database maintenance</a></li>
   <ol>
     <li><a href="#Introduction_">Introduction</a></li>
+    <li><a href="#Backing_up_your_Citadel_database">Backing up your
+Citadel database</a><br>
+    </li>
     <li><a href="#Database_repair">Database repair</a></li>
     <li><a href="#ImportingExporting_your_Citadel">Importing/Exporting
 your Citadel database</a><br>
@@ -579,7 +588,7 @@ processing) </li>
 the system. It is mandatory that the sysop have "root" access to the
 operating system. The following are required to install Citadel: </p>
 <ul>
-  <li>A Unix operating system (Linux, BSD, Solaris, Tru64, HP/UX) </li>
+  <li>A unix-like operating system (Linux, FreeBSD, Solaris, etc.) </li>
   <li>C compiler (<a href="http://gcc.gnu.org/">GCC</a> with <a
  href="http://www.gnu.org/software/make/make.html">gmake</a> is the
 recommended build environment) </li>
@@ -592,22 +601,26 @@ newer (if you want the calendar service to work)<br>
   <li>Enough disk space to hold all of the programs and data </li>
 </ul>
 <p>If you are running Citadel on a Linux system, it is STRONGLY
-recommended that you run it on a recent distribution (such as <a
- href="http://www.redhat.com">Red Hat</a> 7.3 or newer). A new-ish
+recommended that you run it on a recent distribution (such as Fedora
+Core 3 or newer). A new-ish
 distribution will have most or all of the prerequisite tools and
 libraries already integrated for you.</p>
-<h3>Now available:</h3>
+<h3>Other pieces which complete the Citadel system:</h3>
 <ul>
   <li>"WebCit", a gateway program to allow full access to Citadel via
 the World Wide Web. Interactive access through any Web browser. </li>
   <li>Access to Citadel via <i>any</i> standards-compliant e-mail
 program, thanks to Citadel's built-in SMTP, POP, and IMAP services.
 You can use Mozilla, Netscape, Evolution, Eudora, Pine, Outlook, etc.
-with Citadel. </li>
+with Citadel.</li>
+  <li>Access to Citadel's calendar and address book functions using any
+GroupDAV-enabled PIM client (requires WebCit).<br>
+  </li>
 </ul>
 <h3>Coming soon:</h3>
 <ul>
-  <li>Newer and better GUI-based clients.</li>
+  <li>More integration with third-party software.<br>
+  </li>
 </ul>
 <h3><a name="Everything_in_its_place..."></a>Everything in its place...</h3>
 <p>Hopefully you've unpacked the distribution archive into its own
@@ -639,11 +652,11 @@ will use <tt>/usr/local/citadel</tt>) and the shell should be either
 "citadel" in
 that directory, or a script that will start up the citadel client.
 Example:</p>
-<pre>bbs::100:1:Citadel Login:/usr/local/citadel:/usr/local/citadel/citadel<br></pre>
+<pre>citadel::100:1:Citadel Login:/usr/local/citadel:/usr/local/citadel/citadel<br></pre>
 <p>When you run setup later, you will be required to tell it the
 username or user ID of the account you created is, so it knows what
-user to run as. If you create an account called <tt>bbs</tt>, <tt>guest</tt>,
-or <tt>citadel</tt>, the setup program will automatically pick up the
+user to run as. If you create an account called <tt>citadel, bbs</tt>,
+or <tt>guest</tt>, the setup program will automatically pick up the
 user ID by default.</p>
 <p>For all other users in /etc/passwd (or in some other name service
 such as NIS), Citadel will automatically set up
@@ -762,7 +775,9 @@ your favorite text editor to write messages. To do this you simply put
 a line in your citadel.rc file like this:</p>
 <pre>editor=/usr/bin/vi<br></pre>
 <p>The above example would make Citadel call the vi editor when using
-the <tt><b>.E</b>nter <b>E</b>ditor</tt> command. You can also make
+the <tt><b>.E</b>nter <b>E</b>ditor</tt> command, or when a user
+selects the &quot;Always compose messages with the full-screen
+editor&quot; option.  You can also make
 it the default editor for the <tt><b>E</b>nter</tt> command by editing
 the <tt>citadel.rc</tt> file. <b>But be warned:</b> external editors
 on public systems can
@@ -782,8 +797,9 @@ else in your system. The variable <tt>PRINTCMD</tt> in <tt>citadel.rc</tt>
 specifies what command you use to print. Text is sent to the standard
 input (stdin) of the print command.</p>
 <p>So if you did this:</p>
-<pre>printcmd="nl|pr|lpr -Plocal"<br></pre>
-<p>...that would add line numbers, then paginate, then print on the
+<pre>printcmd="a2ps -o - |lpr -Plocal"<br></pre>
+<p>...that would convert the printed text to PostScript, then print on
+the
 printer named "local". There's tons of stuff you can do with this
 feature. For example, you could use a command like <tt>cat
 &lt;&lt;$HOME/archive</tt> to save copies of important messages in a
@@ -988,7 +1004,7 @@ install</tt> ?? </li>
 </ul>
 <p>To report a problem, you can log on to <a
  href="http://uncensored.citadel.org">UNCENSORED!</a> or any other BBS
-on the Citadel network which carries the <tt>Citadel&gt;</tt> room.
+on the Citadel network which carries the <tt>Citadel/UX&gt;</tt> room.
 Please DO NOT e-mail the developers directly. Post a request for help
 on the BBS, with all of the following information: </p>
 <ul>
@@ -1587,7 +1603,7 @@ only the sender and recipient of each individual message will receive a
 copy.</p>
 <p>The next set of options deals with the tuning of your system. It is
 usually safe to leave these untouched.</p>
-<pre>Server connection idle timeout (in seconds) [900]: <br>Maximum concurrent sessions [20]: <br>Maximum message length [10000000]: <br>Minimum number of worker threads [5]: <br>Maximum number of worker threads [256]: <br></pre>
+<pre>Server connection idle timeout (in seconds) [900]: <br>Maximum concurrent sessions [20]: <br>Maximum message length [10000000]: <br>Minimum number of worker threads [5]: <br>Maximum number of worker threads [256]: <br>Automatically delete committed database logs [Yes]:<br></pre>
 <p>The 'Server connection idle timeout' is for the connection between
 client and server software. It is <b>not</b> an idle timer for the
 user interface. 900 seconds (15 minutes) is the default and a sane
@@ -1611,9 +1627,18 @@ worker thread model, Citadel can handle a large number of concurrent
 sessions
 with a much smaller thread pool. If you don't know the programming
 theory
-behind multithreaded servers, you should leave these parameters alone.</p>
+behind multithreaded servers, you should leave these parameters alone.<br>
+</p>
+<p>'Automatically delete committed database logs' is a <span
+ style="font-style: italic;">crucial</span> setting which affects your
+system's disk utilization and backup recoverability.&nbsp; Please refer
+to the <a href="#Database_maintenance">database maintenance</a>
+section of this document to learn how the presence or absence of
+database logs affect your ability to reliably backup your Citadel
+system.<br>
+</p>
 <p>The next set of options affect how Citadel behaves on a network.</p>
-<pre>Server IP address (0.0.0.0 for 'any') [0.0.0.0]:<br>POP3 server port (-1 to disable) [110]:<br>POP3S server port (-1 to disable) [995]:<br>IMAP server port (-1 to disable) [143]:<br>IMAPS server port (-1 to disable) [993]:<br>SMTP MTA server port (-1 to disable) [25]:<br>SMTP MSA server port (-1 to disable) [587]:<br>SMTPS server port (-1 to disable) [465]:<br>Correct forged From: lines during authenticated SMTP [Yes]:<br></pre>
+<pre>Server IP address (0.0.0.0 for 'any') [0.0.0.0]:<br>POP3 server port (-1 to disable) [110]:<br>POP3S server port (-1 to disable) [995]:<br>IMAP server port (-1 to disable) [143]:<br>IMAPS server port (-1 to disable) [993]:<br>SMTP MTA server port (-1 to disable) [25]:<br>SMTP MSA server port (-1 to disable) [587]:<br>SMTPS server port (-1 to disable) [465]:<br>Correct forged From: lines during authenticated SMTP [Yes]:<br>Allow unauthenticated SMTP clients to spoof my domains [No]: No<br>Instantly expunge deleted IMAP messages [No]: Yes<br></pre>
 <p>"Server IP address" refers to the IP address on <span
  style="font-style: italic;">your server</span> to which Citadel's
 protocol services should be bound.&nbsp; Normally you will leave this
@@ -1682,7 +1707,27 @@ sense dictates that this is a good idea. Nevertheless, if you want to
 suppress
 this behavior, answer 'No' at the prompt (the default is 'Yes') and the
 headers
-will never be altered.<br>
+will never be altered.</p>
+<p>&quot;Instant expunge&quot; affects what happens when IMAP users delete
+messages.  As you may already know, messages are not <i>truly</i> deleted
+when an IMAP client sends a delete command; they are only <i>marked for
+deletion</i>.  The IMAP client must also send an &quot;expunge&quot; command
+to actually delete the message.  The Citadel server automatically expunges
+messages when the client logs out or selects a different folder, but if you
+select the Instant Expunge option, an expunge operation will automatically
+follow any delete operation (and the client will be notified, preventing any
+mailbox state problems).  This is a good option to select, for example, if you
+have users who leave their IMAP client software open all the time and are
+wondering why their deleted messages show up again when they log in from a
+different location (such as WebCit).</p>
+<p>&quot;Allow spoofing&quot; refers to the security level applied to
+non-authenticated SMTP clients.  Normally, when another host connects to
+Citadel via SMTP to deliver mail, Citadel will reject any attempt to send
+mail whose sender (From) address matches one of your host's own domains.  This
+forces your legitimate users to authenticate properly, and prevents foreign
+hosts (such as spammers) from forging mail from your domains.  If, however,
+this behavior is creating a problem for you, you can select this option to
+bypass this particular security check.<br>
 <span style="font-family: monospace;"><br>
 Connect this Citadel to an LDAP directory [No]: No</span><br>
 </p>
@@ -1691,7 +1736,8 @@ document.<br>
 </p>
 <p>The final set of options configures system-wide defaults for the
 auto-purger:</p>
-<pre>Default user purge time (days) [120]: <br>Default room purge time (days) [30]: <br>System default message expire policy (? for list) [0]: <br>Keep how many messages online? [150]:<br>Mailbox default message expire policy (? for list) [0]:<br>How often to run network jobs (in seconds) [1800]:<br>Enable full text search index (warning: resource intensive) [Yes]: Yes<br>Hour to run purges (0-23) [4]:<br></pre>
+<pre>Default user purge time (days) [120]: <br>Default room purge time (days) [30]: <br>System default message expire policy (? for list) [0]: <br>Keep how many messages online? [150]:<br>Mailbox default message expire policy (? for list) [0]:<br>How often to run network jobs (in seconds) [1800]:<br>Enable full text search index (warning: resource intensive) [Yes]: Yes<br>Hour to run purges (0-23) [4]:<br>
+Perform journaling of email messages [No]:<br>Perform journaling of non-email messages [No]:<br>Email destination of journalized messages [example@example.com]:<br></pre>
 <p>Any user who does not log in for the period specified in 'Default
 user purge time' will be deleted the next time a purge is run. This
 setting may be modified on a per-user basis.</p>
@@ -1732,12 +1778,24 @@ day.</p>
 build and maintain a searchable index of all messages on the
 system.&nbsp; This is a time and resource intensive process -- it could
 take days to build the index if you enable it on a large
-database.&nbsp; Once enabled, however, it will be updated incrementally
+database.&nbsp; It is also fairly memory intensive; we do not recommend
+that you enable the index unless your host system has at least 512 MB
+of memory.&nbsp; Once enabled, however, it will be updated
+incrementally
 and will not have any noticeable impact on the interactive response
 time of your system.&nbsp; The full text index is currently only
 searchable when using IMAP clients; other search facilities will be
-made available in the near future.<br>
-<span style="font-family: monospace;"></span></p>
+made available in the near future.</p>
+<p>The &quot;Perform journaling...&quot; options allow you to configure
+your Citadel server to send an extra copy of every message, along with
+recipient information if applicable, to the email address of your choice.
+The journaling destination address may be an account on the local Citadel
+server, an account on another Citadel server on your network, or an Internet
+email address.  These options, used in conjunction with an archiving service,
+allow you to build an archive of all messages which flow through your Citadel
+system.  This is typically used for regulatory compliance in industries which
+require such things.  Please refer to the <a href="journaling.html">journaling
+guide</a> for more details on this subject.</p>
 <p><span style="font-family: monospace;">Save this configuration? No</span><br>
 </p>
 <p>When you're done, enter 'Yes' to confirm the changes, or 'No' to
@@ -1824,6 +1882,12 @@ whatever) that all outbound mail be sent to an SMTP relay or forwarder.
 To configure this
 functionality, simply enter the domain name or IP address of your relay
 as a 'smart-host' entry.</p>
+<p>If your relay server is running on a port other
+than the standard SMTP port 25, you can also specify the port number
+using &quot;host:port&quot; syntax; i.e. <tt>relay99.myisp.com:2525</tt></p>
+<p>Furthermore, if your relay server requires authentication, you can
+specify it using username:password@host or username:password@host:port
+syntax; i.e. <tt>jsmith:pass123@relay99.myisp.com:25</tt></p>
 <p><b>directory:</b> a domain for which you are participating in
 directory services across any number of Citadel nodes. For example, if
 users who have addresses in the domain <tt>citadel.org</tt> are spread
@@ -1945,8 +2009,22 @@ server, while keeping the existing Unix mailboxes intact.&nbsp;
 However, it is beyond the scope of this document to detail the finer
 points of the configuration of Postfix or any other mailer, so refer to
 the documentation to those programs and keep in mind that Citadel has
-LMTP support.<span style="font-family: monospace;"><br>
-</span></p>
+LMTP support.<span style="font-family: monospace;"></span></p>
+<p>There are actually <i>two</i> LMTP sockets. One is called
+<tt>lmtp.socket</tt> and the other is called <tt>lmtp-unfiltered.socket</tt>
+(both are found in your Citadel directory). The difference should be
+obvious: messages submitted via <tt>lmtp.socket</tt> are subject to
+any
+spam filtering you may have configured (such as SpamAssassin), while
+messages
+submitted via <tt>lmtp-unfiltered.socket</tt> will bypass the filters.
+You
+would use the filtered socket when receiving mail from an external MTA
+such
+as Postfix, but you might want to use the unfiltered socket with
+utilities
+such as fetchmail.</p>
+<br>
 <p>For outbound mail, you
 can either allow Citadel to perform
 deliveries directly
@@ -2192,19 +2270,77 @@ record manager. &nbsp;It is robust, high-performance, and transactional.<br>
 A few small data files are kept in your main Citadel directory, but the
 databases are in the <tt>data/</tt> subdirectory. &nbsp;The files with
 names that begin with "cdb" are the databases themselves; the files
-with names that begin with "log" are the journals. &nbsp;Journal files
-will come and go as you use your system; when the database engine has
-determined that a particular log file is no longer needed, the file
-will automatically be deleted. &nbsp;Nevertheless, you should always
-ensure that there is ample disk space for the files to grow.<br>
+with names that begin with "log" are the logs (sometimes referred to as
+"journals").&nbsp; Log files will continue to appear as you use your
+system; each will grow to approximately 10 megabytes in size before a
+new one is started.&nbsp; There is a system configuration setting
+(found in <span style="font-family: monospace;"><span
+ style="font-weight: bold;">.A</span>ide <span
+ style="font-weight: bold;">S</span>ystem-configuration <span
+ style="font-weight: bold;">G</span>eneral</span> in the text mode
+client, or in <span style="font-family: monospace;">Administration
+--&gt; Edit site-wide configuration --&gt; Tuning</span> in the WebCit
+client) which specifies "Automatically delete committed database
+logs."&nbsp; If you have this option enabled, Citadel will
+automatically delete any log files whose contents have been fully
+committed to the database files.<br>
+<br>
+For more insight into how the database and log files work, you may wish
+to read the <a
+ href="http://www.sleepycat.com/docs/ref/transapp/archival.html">Berkeley
+DB documentation</a> on this subject.<br>
 <br>
-There is no need to shut down Citadel during backups. &nbsp;The data
-store may be backed up "hot." &nbsp;The makers of Berkeley DB suggest
-that you should back up the data files <i>first</i> and the log files <i>second</i>.
-&nbsp;This is the only method that will guarantee that a database which
-is being changed while you back it up will still be usable when you
-restore it
-from the tape later.<br>
+<h3><a name="Backing_up_your_Citadel_database"></a>Backing up your
+Citadel database</h3>
+<span style="font-weight: bold;">Please read this section carefully.</span><br>
+<br>
+There are two backup strategies you can use, depending on your site's
+availability requirements and disk space availability.<br>
+<h5>Strategy #1: Standard backup</h5>
+The standard (or "offline") backup is used when your Citadel server is
+configured to automatically delete committed database logs.&nbsp; The
+backup procedure is as follows:<br>
+<ol>
+  <li>Shut down the Citadel server.</li>
+  <li>Back up all files (database files, log files, etc.) to tape or
+some other backup media.</li>
+  <li>Start the Citadel server.</li>
+</ol>
+<span style="font-style: italic;">Advantage:</span> very little disk
+space is consumed by the logs.<br>
+<span style="font-style: italic;">Disadvantage:</span> Citadel is not
+available during backups.<br>
+<br>
+<h5>Strategy #2: "Hot" backup</h5>
+The "hot backup" procedure is used when your Citadel server is
+configured <span style="font-weight: bold;">not</span> to
+automatically delete committed database logs.&nbsp; The backup
+procedure is as follows:<br>
+<ol>
+  <li>Back up all files.&nbsp; Make sure the database files (<span
+ style="font-family: monospace;">cdb.*</span>) are backed up <span
+ style="font-style: italic;">before</span> the log files (<span
+ style="font-family: monospace;">log.*</span>).&nbsp; This will usually
+be the case, because the database files tend to appear first in both
+alphabetical and on-disk ordering of the <span
+ style="font-family: monospace;">data/</span> directory.</li>
+  <li>After verifying that your backup completed successfully, delete
+the committed log files with a command like this:</li>
+</ol>
+<span style="font-family: monospace;">/usr/local/citadel/sendcommand
+"CULL"</span><br>
+<br>
+<span style="font-style: italic;">Advantage:</span> Citadel continues
+to run normally during backups.<span style="font-style: italic;"><br>
+Disadvantage:</span> Much disk space is consumed by the log files,
+particularly if the full text indexer is turned on.<br>
+<br>
+<br>
+It is up to you to decide which backup strategy to use.&nbsp; <span
+ style="font-weight: bold;">Warning: if you configure Citadel to
+automatically delete committed database logs, and do not shut the
+Citadel service down during backups, there is no guarantee that your
+backups will be usable!</span><br>
 <br>
 <h3><a name="Database_repair"></a>Database repair</h3>
 Although Citadel's data store is quite reliable, database corruption
@@ -2590,10 +2726,7 @@ require textual input will read it from stdin. Commands which generate
 textual output will be sent to stdout.</p>
 <p>This utility is intended to be used to enable Citadel server
 commands to
-be executed from shell scripts. Review the script called <tt>weekly</tt>
-which ships with the Citadel distribution for an example of how this
-can
-be used.</p>
+be executed from shell scripts.</p>
 <p><b>NOTE:</b> be sure that this utility is not world-executable. It
 connects to the server in privileged mode, and therefore could present
 a security hole