Update of /cvsroot/tmda/tmda/htdocs
In directory sc8-pr-cvs1:/tmp/cvs-serv30596

Modified Files:
        tmda-cgi.ht tmda-cgi.html 
Log Message:
Prettied up listings.

Added information on using templates to create a URL-confirmation.


Index: tmda-cgi.ht
===================================================================
RCS file: /cvsroot/tmda/tmda/htdocs/tmda-cgi.ht,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- tmda-cgi.ht 5 Dec 2002 18:26:02 -0000       1.7
+++ tmda-cgi.ht 7 Dec 2002 04:11:21 -0000       1.8
@@ -1,386 +1,468 @@
-Title: tmda-cgi HOWTO
-Links: overview-links.h usage-links.h howto-links.h support-links.h
-
-<h1>tmda-cgi</h1>
-<hr>
-<h2>What is it?</h2>
-<p>tmda-cgi is an alpha-release program for managing your TMDA account over the 
-  web. At the time of this writing, tmda-cgi can:</p>
-<ul>
-  <li>Page through lists of pending e-mail (mail received by your MTA, but still 
-    awaiting confirmation) 
-  <li>View the text content (and see what sorts of attachments are included) in 
-    any of your pending e-mails 
-  <li>Release (move into your mail folder as if a confirmation had been received) 
-    any of your pending e-mails. 
-  <li>Delete any pending e-mail 
-  <li>Whitelist or blacklist the author of any pending e-mails. 
-</ul>
-<p>At the moment, tmda-cgi's focus is clearly manipulating pending e-mails. At 
-  some point, I would like tmda-cgi to become more of a general system tool. Features 
-  I hope to add soon include:</p>
-<ul>
-  <li>Filter configuration</li>
-  <li>List editing</li>
-  <li>Automated clean-ups of pending e-mails</li>
-  <li>E-mail address generation (keyword, dated, or sender)</li>
-</ul>
-<p>tmda-cgi provides quick and easy access to your pending e-mails. This is an 
-  ideal tool for users who either do not have access to a shell account or are 
-  intimidated by operating in a command-line environment.</p>
-<p>Although TMDA users do not generally need to mess with their pending e-mails, 
-  there are times when this is the most convenient way to go. For instance:</p>
-<ul>
-  <li>When you use a web site that says it will automatically mail you a password, 
-    authentication link, or a receipt for a transaction you are making right now, 
-    but you're not interested in any follow-up e-mail they will likely send you 
-    in the future (and you don't feel like generating a dated address). 
-    <p> Simply fill out the web form like you normally would and give your regular, 
-      filtered e-mail address. The web site will send the e-mail to your mail 
-      server, and your mail server will send a confirmation request back to the 
-      web site (which will most likely never be seen by a human being). Then log 
-      into tmda-cgi and manually release their letter. Any further mail they send 
-      you will sit quietly in your pending directory like the one you released. 
-  </li>
-  <li>To search your incoming mail for automated mailings you want to receive. 
-    <p> Using tmda-cgi regularly for a few weeks or months after you begin filtering 
-      your e-mail is a good way to make sure your filters are configured correctly. 
-  <li> 
-    <p>To look for &quot;lost&quot; e-mail. 
-    <p> It's really rare that e-mail will get lost, but it's bound to happen 
sometimes. 
-      Perhaps Aunt Margaret can't figure out what the confirmation e-mail meant 
-      (even though it is written in a very obvious way). Perhaps your boss was 
-      in a hurry and deleted the confirmation request thinking 
<em><strong>it</strong></em> 
-      was spam (or perhaps he has a really crappy spam filter that mistook the 
-      confirmation for spam). Perhaps Grandpa Joe sent you some e-mail from someone 
-      else's e-mail account and they deleted the confirmation request, not realizing 
-      what it was. 
-  <li> 
-    <p>To remind you <em><strong>why</strong></em> you got TMDA in the first place. 
-    <p> &quot;Wow, I would have gotten 100 e-mails about Viagara, cheap cigarettes, 
-      weight loss drugs, penis enlargement, and Nigerian swindles today! Now I 
-      remember why the rest of my family thinks that e-mail is a pain.&quot;</ul>
-<hr>
-<h2>Requirements</h2>
-<p>TBD. Until we do more testing it isn't clear what systems have problems with 
-  tmda-cgi.</p>
-<hr>
-<h2>Installation</h2>
-<p>tmda-cgi is provided in your distribution's <tt>contrib/cgi</tt> directory, 
-  however with this being alpha-revision software, revisions come out quite 
frequently. 
-  You should consider downloading from <a 
href="http://sourceforge.net/cvs/?group_id=24680"; target="_blank">CVS</a> 
-  and joining the <a href="mailto:[EMAIL PROTECTED]";>tmda-cgi mailing 
-  list</a> to keep up on the sub-project's current state of development.</p>
-<p>Once you've obtained a copy of tmda-cgi, you need to decide how you want to 
-  use tmda-cgi. tmda-cgi has been designed to run three different ways: system-wide, 
-  single-user, and in no-su modes.</p>
-<ul>
-  <li>In system-wide mode, multiple users can use tmda-cgi to access their TMDA 
-    system. The program launches as root and then performs a <tt>seteuid</tt> 
-    to run as the requested user once password authentication has been accomplished. 
-    This is the best solution for system administrators who wish to set up their 
-    TMDA system for use by multiple users.<br>
-  </li>
-  <li>In single-user mode, only one user can access tmda-cgi. That user will still 
-    need to authenticate their access with a password, but the program runs as 
-    the user who compiled it and therefore cannot access anyone else's personal 
-    data. If multiple users wish to install tmda-cgi in single-user mode (strange, 
-    but not absurd) then each user can compile a different 14k shell that launches 
-    the Python code. This method is less convenient than the system-wide 
installation, 
-    but it is the best solution for users without root access to their server, 
-    or for users who don't trust any program running as root that does not absolutely 
-    have to run as root.<br>
-  </li>
-  <li>no-su mode, which is in testing, runs the program with no special privileges 
-    of any sort. The downside of such an installation is that to allow the program 
-    access to your personal files (such as pending e-mails) you will have to make 
-    some of your files and directories group or world readable and writable. no-su 
-    mode is a good solution for an unusual breed of user: someone who doesn't 
-    trust the software, but trusts the other users on the server (since they could 
-    get read/write access to his/er pending e-mail)</li>
-</ul>
-<p><b><i>Notes:</i></b></p>
-<ul>
-  <li>tmda-cgi assumes it will run from within the source tree. No testing has 
-    been done to date to see if it will work in other locations.<br>
-  </li>
-  <li>You will have to recompile tmda-cgi if you move your configuration files 
-    or source tree.<br></li>
-  <li>You will have to recompile tmda-cgi if you change which mode (system-wide, 
-    single-user, or no-su) you run in.</li>
-</ul>
-<h3>Installing system-wide</h3>
-<p>As root, change to the cgi directory.</p>
-<blockquote> 
-  <pre># cd contrib/cgi</pre>
-</blockquote>
-<p>Compile tmda-cgi to a web directory that is configured to execute CGI. The 
-  filename you use is completely up to you. For example:</p>
-<blockquote> 
-  <pre># ./compile -t /path/to/cgi-bin/directory</pre>
-</blockquote>
-<p> or</p>
-<blockquote> 
-  <pre># ./compile -t /path/to/webpage/directory/index.cgi</pre>
-</blockquote>
-<p>Finally, tmda-cgi expects to find a variety of visual elements in a subdirectory 
-  called &quot;display&quot;. This directory should be located directly below 
-  the CGI itself. Sample files are provided in <tt>contrib/cgi/display</tt>. Feel 
-  free to use these files as-is or modify/replace them to personalize the program.</p>
-<p>The simplest way to provide this directory is with a symbolic link (assuming 
-  you have you web server configured to follow symbolic links). For example:</p>
-<blockquote>
-  <pre># ln -s display /path/to/webpage/directory</pre>
-</blockquote>
-<h3>Installing single-user</h3>
-<p>As the (only) user who will be able to access tmda-cgi, change to the cgi 
directory.</p>
-<blockquote> 
-  <pre>$ cd contrib/cgi</pre>
-</blockquote>
-<p>Compile tmda-cgi to a web directory that is configured to execute CGI. The 
-  filename you use is completely up to you. For example:</p>
-<blockquote> 
-  <pre>$ ./compile -t /path/to/cgi-bin/directory</pre>
-</blockquote>
-<p>or</p>
-<blockquote> 
-  <pre>$ ./compile -t /path/to/webpage/directory/index.cgi</pre>
-</blockquote>
-<p>Finally, tmda-cgi expects to find a variety of visual elements in a subdirectory 
-  called &quot;display&quot;. This directory should be located directly below 
-  the CGI itself. Sample files are provided in <tt>contrib/cgi/display</tt>. Feel 
-  free to use these files as-is or modify/replace them to personalize the program.</p>
-<p>The simplest way to provide this directory is with a symbolic link (assuming 
-  you have you web server configured to follow symbolic links). For example:</p>
-<blockquote> 
-  <pre>$ ln -s display /path/to/webpage/directory</pre>
-</blockquote>
-<h3>Installing no-su</h3>
-<p>To compile tmda-cgi for no-su mode, first change to the cgi directory.</p>
-<blockquote> 
-  <pre>$ cd contrib/cgi</pre>
-</blockquote>
-<p>Compile tmda-cgi to a web directory that is configured to execute CGI. The 
-  filename you use is completely up to you. For example:</p>
-<blockquote> 
-  <pre>$ ./compile -nt /path/to/cgi-bin/directory</pre>
-</blockquote>
-<p> or</p>
-<blockquote> 
-  <pre>$ ./compile -nt /path/to/webpage/directory/index.cgi</pre>
-</blockquote>
-<p>tmda-cgi expects to find a variety of visual elements in a subdirectory called 
-  &quot;display&quot;. This directory should be located directly below the CGI 
-  itself. Sample files are provided in <tt>contrib/cgi/display</tt>. Feel free 
-  to use these files as-is or modify/replace them to personalize the program.</p>
-<p>The simplest way to provide this directory is with a symbolic link (assuming 
-  you have you web server configured to follow symbolic links). For example:</p>
-<blockquote> 
-  <pre>$ ln -s display /path/to/webpage/directory</pre>
-</blockquote>
-<p>At this point you will have to change permissions on any existing pending mail 
-  and add something akin to:</p>
-<blockquote>
-  <pre>os.umask(027)</pre>
-</blockquote>
-<p>to your configuration file. That will make sure that future pending e-mails 
-  are written such that they can be read by group members (i.e. the CGI).</p>
-<p>If you multiple users plan on using tmda-cgi in no-su mode, then you might 
-  consider moving all of your TMDA files into one central location. This will 
-  make it easier to keep group permissions on your directories and files. Here's 
-  some sample directories and file contents I set up for my user <tt>cgitest</tt>:</p>
-<blockquote> 
-  <pre>/etc:
--rw-r--r--    1 root     root           22 Nov 24 23:54 tmda-cgi
--rw-r--r--    1 root     root          557 Nov 27 15:05 tmdarc
--rw-------    1 tofmipd  tofmipd        49 Nov 10 11:02 tofmipd
-
-/var:
-drwxr-s--x    3 root     nobody         72 Nov 27 11:24 tmda
-
-/var/tmda:
-drwx--s---    6 cgitest  nobody        200 Nov 27 11:39 cgitest
-
-/var/tmda/cgitest:
--rw-r-----    1 cgitest  nobody          0 Nov 27 11:39 config
--rw-r-----    1 cgitest  nobody         41 Nov 27 11:39 crypt_key
-drwx--s---    2 cgitest  nobody         96 Nov 27 12:55 filters
-drwx--s---    2 cgitest  nobody        144 Nov 27 12:59 lists
-drwx--s---    2 cgitest  nobody        120 Nov 27 12:57 logs
-drwxrws---    2 cgitest  nobody         48 Nov 27 11:37 pending
-drwx--s---    2 cgitest  nobody        768 Nov 29 09:54 responses
-
-/var/tmda/cgitest/filters:
--rw-rw----    1 cgitest  nobody        153 Nov 27 12:54 incoming
--rw-rw----    1 cgitest  nobody        150 Nov 27 12:55 outgoing
-
-/var/tmda/cgitest/lists:
--rw-rw----    1 cgitest  nobody          0 Nov 27 12:59 blacklist
--rw-rw----    1 cgitest  nobody          0 Nov 27 12:59 confirmed
--rw-rw----    1 cgitest  nobody          0 Nov 27 12:59 whitelist
-
-/var/tmda/cgitest/logs:
--rw-r-----    1 cgitest  nobody          0 Nov 27 12:57 debug
--rw-r-----    1 cgitest  nobody          0 Nov 27 12:57 in
--rw-r-----    1 cgitest  nobody          0 Nov 27 12:57 out
-
-/etc/tmda-cgi:
-cgitest:XPkY0q/9Uge9I
-
-/var/tmda/cgitest/filters/incoming:
-from-file /var/tmda/cgitest/lists/blacklist reject
-from-file /var/tmda/cgitest/lists/whitelist accept
-from-file /var/tmda/cgitest/lists/confirmed accept
-
-/var/tmda/cgitest/filters/outgoing:
-to-file /var/tmda/cgitest/lists/whitelist tag envelope dated=10d from bare
-to-file /var/tmda/cgitest/lists/confirmed tag envelope dated=10d from bare
-
-/etc/tmdarc:
-import Util
-
-DATADIR = &quot;/var/tmda/%s/&quot; % Util.getusername()
-CGI_ACTIVE = 1
-FILTER_INCOMING          = DATADIR + &quot;filters/incoming&quot;
-FILTER_OUTGOING          = DATADIR + &quot;filters/outgoing&quot;
-LOGFILE_DEBUG            = DATADIR + &quot;logs/debug&quot;
-LOGFILE_INCOMING         = DATADIR + &quot;logs/in&quot;
-LOGFILE_OUTGOING         = DATADIR + &quot;logs/out&quot;
-PENDING_BLACKLIST_APPEND = DATADIR + &quot;lists/blacklist&quot;
-PENDING_WHITELIST_APPEND = DATADIR + &quot;lists/whitelist&quot;
-os.umask(027)
-ADDED_HEADERS_CLIENT = { &quot;X-Primary-Address&quot;: &quot;%s@%s&quot; % \
-  (Util.getusername(), Util.gethostname()) }
-
-~cgitest/.qmail:
-|preline /usr/src/tmda/bin/tmda-filter -c /var/tmda/cgitest/config
-./Maildir/</pre>
-</blockquote>
-<p>tmda-cgi was compiled with the following:</p>
-<blockquote>
-  <pre>./compile -nc /var/tmda/~/config -t /www/tmda.cgi</pre>
-</blockquote>
-<p>Use the <tt>./compile -h</tt> for more details on how to use compile.</p>
-<h3>Passwords</h3>
-<p>tmda-cgi currently authenticate logins against user name &amp; password pairs 
-  stored in a password file (or files). tmda-cgi will look in two different places 
-  for password file(s), but it (they) must be readable by the CGI.</p>
-<p>If you are running in system-wide mode, the password file can be owned by root. 
-  If you are running in single-user mode, the password file can be owned by the 
-  user who will be running the CGI. If you are running in no-su mode, the file 
-  must either be owned by &quot;nobody&quot; (or whatever user your web server 
-  is configured to run as) or made globally readable See the table below for a 
-  better breakdown of your options.</p>
-<p>tmda-cgi first checks for a readable file called <tt>tmda-cgi</tt> in the same 
-  directory as the user's configuration file (if that location has been specified, 
-  otherwise it will look in <tt>~user/.tmda/tmda-cgi</tt>). It then tries 
<tt>/etc/tmda-cgi</tt> 
-  if it can't find a match or cannot read the file. This allows the system 
administrator 
-  to keep a list of access passwords while allowing the user to override what 
-  the sysadmin has set.</p>
-<table border="0" cellpadding="0" cellspacing="0">
-  <tr> 
-    <td width="35">&nbsp;</td>
-    <td width="10">&nbsp;</td>
-    <td>&nbsp;</td>
-    <td width="10">&nbsp;</td>
-    <td colspan="2" align="center" nowrap 
bgcolor="#FFFFCC"><tt>~user/.tmda/tmda-cgi</tt></td>
-    <td width="10" align="center" nowrap>&nbsp;</td>
-    <td colspan="2" align="center" nowrap 
bgcolor="#FFFFCC"><tt>/etc/tmda-cgi</tt></td>
-  </tr>
-  <tr> 
-    <td>&nbsp;</td>
-    <td>&nbsp;</td>
-    <td>&nbsp;</td>
-    <td>&nbsp;</td>
-    <td width="80" align="center" bgcolor="#FFFFCC">owner</td>
-    <td width="90" align="center" bgcolor="#FFFFCC">permissions</td>
-    <td align="center">&nbsp;</td>
-    <td width="80" align="center" bgcolor="#FFFFCC">owner</td>
-    <td width="90" align="center" bgcolor="#FFFFCC">permissions</td>
-  </tr>
-  <tr> 
-    <td>&nbsp;</td>
-    <td bgcolor="#CCFFFF">&nbsp;</td>
-    <td bgcolor="#CCFFFF">system-wide</td>
-    <td bgcolor="#CCFFFF">&nbsp;</td>
-    <td align="center" bgcolor="#CCFFCC">user</td>
-    <td align="center" bgcolor="#CCFFCC">600</td>
-    <td align="center" bgcolor="#CCFFFF">&nbsp;</td>
-    <td align="center" bgcolor="#CCFFCC">root</td>
-    <td align="center" bgcolor="#CCFFCC">600</td>
-  </tr>
-  <tr> 
-    <td>&nbsp;</td>
-    <td>&nbsp;</td>
-    <td>single-user</td>
-    <td>&nbsp;</td>
-    <td align="center" bgcolor="#FFFFCC">user</td>
-    <td align="center" bgcolor="#FFFFCC">600</td>
-    <td align="center">&nbsp;</td>
-    <td colspan="2" align="center" bgcolor="#FFFFCC">n/a</td>
-  </tr>
-  <tr> 
-    <td>&nbsp;</td>
-    <td bgcolor="#CCFFFF">&nbsp;</td>
-    <td bgcolor="#CCFFFF">no-su</td>
-    <td bgcolor="#CCFFFF">&nbsp;</td>
-    <td align="center" bgcolor="#CCFFCC">user</td>
-    <td align="center" bgcolor="#CCFFCC">644</td>
-    <td align="center" bgcolor="#CCFFFF">&nbsp;</td>
-    <td align="center" bgcolor="#CCFFCC">root<br>
-      nobody </td>
-    <td align="center" bgcolor="#CCFFCC">644<br>
-      600 </td>
-  </tr>
-  <tr> 
-    <td>&nbsp;</td>
-    <td colspan="8" align="center">File owner &amp; permission options</td>
-  </tr>
-</table>
-<p>The password file for tmda-cgi is formatted in much the same way as the password 
-  file for tofmipd. In fact, if you are using a password file with tofmipd and 
-  you wish to run tmda-cgi in system-wide mode, feel free to make a symbolic link 
-  between the two:</p>
-<blockquote> 
-  <pre> # ln -s /etc/tofmipd /etc/tmda-cgi</pre>
-</blockquote>
-<p>Password files for tmda-cgi look like:</p>
-<blockquote> 
-  <pre>&lt;user1&gt;:&lt;password1&gt;
-&lt;user2&gt;:&lt;password2&gt;</pre>
-</blockquote>
-<p>where each item in <tt>&lt;&gt;</tt> is replaced with text.</p>
-<p>The difference between this password file and the one for tofmipd is that the 
-  file does not need to have <br>
-  permissions of 400 or 600. If you, for example, are running in no-su mode, you 
-  will have to make your password file group or world readable.</p>
-<p>To keep the passwords secure, tmda-cgi will assume all passwords are DES encrypted 
-  if the file permissions are anything other than 400 or 600. Plaintext passwords 
-  will <i><b>not</b></i> work in such cases.</p>
-<p>Additionally, any entry with a blank password field, such as:</p>
-<blockquote> 
-  <pre>cantlogin:</pre>
-</blockquote>
-<p>will be prohibited from login, regardless of the file permissions.</p>
-<p><tt>contrib/cgi/genpass.py</tt> is provided for encrypted password generation. 
-  Output from <tt>genpass.py</tt> can be safely piped with <tt>&gt;</tt> or 
<tt>&gt;&gt;</tt> 
-  into a password file. For example:</p>
-<blockquote> 
-  <pre># contrib/cgi/genpass.py joe &gt;&gt; /etc/tmda-cgi</pre>
-</blockquote>
-<p> or</p>
-<blockquote> 
-  <pre>$ contrib/cgi/genpass.py joe &gt; /home/joe/.tmda/tmda-cgi</pre>
-</blockquote>
-<p>If you encounter difficulties logging in, the problem may be a result of incorrect 
-  permissions on your password file(s). To debug this, append a <tt>?debug=1</tt> 
-  onto the end of your CGI URL. This will display some diagnostic information 
-  if the login fails instead of simply saying &quot;Wrong password. Try 
again.&quot;</p>
-<hr>
-<h2>Configuration</h2>
-<p>tmda-cgi is configured by a set of parameters in your configuration file(s). 
-  All tmda-cgi configuration variables begin with a &quot;<tt>CGI_</tt>&quot; 
-  and are described on the <a href="config-vars.html">Configuration Variables</a> 
-  page.</p>
-<p><em><strong>Note:</strong></em> If you change nothing else, you will have to 
-  at least set the value for <a 
href="config-vars.html#CGI_ACTIVE"><tt>CGI_ACTIVE</tt></a>.</p>
+Title: tmda-cgi HOWTO
+Links: overview-links.h usage-links.h howto-links.h support-links.h 
+<h1>tmda-cgi</h1>
+<hr>
+<h2>What is it?</h2>
+<p>tmda-cgi is an alpha-release program for managing your TMDA account over the 
+  web. At the time of this writing, tmda-cgi can:</p>
+<ul>
+  <li>Page through lists of pending e-mail (mail received by your MTA, but still 
+    awaiting confirmation) 
+  <li>View the text content (and see what sorts of attachments are included) in 
+    any of your pending e-mails 
+  <li>Release (move into your mail folder as if a confirmation had been received) 
+    any of your pending e-mails. 
+  <li>Delete any pending e-mail 
+  <li>Whitelist or blacklist the author of any pending e-mails. 
+</ul>
+<p>At the moment, tmda-cgi's focus is clearly manipulating pending e-mails. At 
+  some point, I would like tmda-cgi to become more of a general system tool. Features 
+  I hope to add soon include:</p>
+<ul>
+  <li>Filter configuration</li>
+  <li>List editing</li>
+  <li>Automated clean-ups of pending e-mails</li>
+  <li>E-mail address generation (keyword, dated, or sender)</li>
+</ul>
+<p>tmda-cgi provides quick and easy access to your pending e-mails. This is an 
+  ideal tool for users who either do not have access to a shell account or are 
+  intimidated by operating in a command-line environment.</p>
+<p>Although TMDA users do not generally need to mess with their pending e-mails, 
+  there are times when this is the most convenient way to go. For instance:</p>
+<ul>
+  <li>When you use a web site that says it will automatically mail you a password, 
+    authentication link, or a receipt for a transaction you are making right now, 
+    but you're not interested in any follow-up e-mail they will likely send you 
+    in the future (and you don't feel like generating a dated address). 
+    <p> Simply fill out the web form like you normally would and give your regular, 
+      filtered e-mail address. The web site will send the e-mail to your mail 
+      server, and your mail server will send a confirmation request back to the 
+      web site (which will most likely never be seen by a human being). Then log 
+      into tmda-cgi and manually release their letter. Any further mail they send 
+      you will sit quietly in your pending directory like the one you released. 
+  </li>
+  <li>To search your incoming mail for automated mailings you want to receive. 
+    <p> Using tmda-cgi regularly for a few weeks or months after you begin filtering 
+      your e-mail is a good way to make sure your filters are configured correctly. 
+  <li> 
+    <p>To look for &quot;lost&quot; e-mail. 
+    <p> It's really rare that e-mail will get lost, but it's bound to happen 
+sometimes. 
+      Perhaps Aunt Margaret can't figure out what the confirmation e-mail meant 
+      (even though it is written in a very obvious way). Perhaps your boss was 
+      in a hurry and deleted the confirmation request thinking 
+<em><strong>it</strong></em> 
+      was spam (or perhaps he has a really crappy spam filter that mistook the 
+      confirmation for spam). Perhaps Grandpa Joe sent you some e-mail from someone 
+      else's e-mail account and they deleted the confirmation request, not realizing 
+      what it was. 
+  <li> 
+    <p>To remind you <em><strong>why</strong></em> you got TMDA in the first place. 
+    <p> &quot;Wow, I would have gotten 100 e-mails about Viagara, cheap cigarettes, 
+      weight loss drugs, penis enlargement, and Nigerian swindles today! Now I 
+      remember why the rest of my family thinks that e-mail is a pain.&quot;
+</ul>
+<hr>
+<h2>Requirements</h2>
+<p>TBD. Until we do more testing it isn't clear what systems have problems with 
+  tmda-cgi.</p>
+<hr>
+<h2>Installation</h2>
+<p>tmda-cgi is provided in your distribution's <tt>contrib/cgi</tt> directory, 
+  however with this being alpha-revision software, revisions come out quite 
+frequently. 
+  You should consider downloading from <a 
+href="http://sourceforge.net/cvs/?group_id=24680"; target="_blank">CVS</a> 
+  and joining the <a href="mailto:[EMAIL PROTECTED]";>tmda-cgi mailing 
+  list</a> to keep up on the sub-project's current state of development.</p>
+<p>Once you've obtained a copy of tmda-cgi, you need to decide how you want to 
+  use tmda-cgi. tmda-cgi has been designed to run three different ways: system-wide, 
+  single-user, and in no-su modes.</p>
+<ul>
+  <li>In system-wide mode, multiple users can use tmda-cgi to access their TMDA 
+    system. The program launches as root and then performs a <tt>seteuid</tt> 
+    to run as the requested user once password authentication has been accomplished. 
+    This is the best solution for system administrators who wish to set up their 
+    TMDA system for use by multiple users.<br>
+  </li>
+  <li>In single-user mode, only one user can access tmda-cgi. That user will still 
+    need to authenticate their access with a password, but the program runs as 
+    the user who compiled it and therefore cannot access anyone else's personal 
+    data. If multiple users wish to install tmda-cgi in single-user mode (strange, 
+    but not absurd) then each user can compile a different 14k shell that launches 
+    the Python code. This method is less convenient than the system-wide 
+installation, 
+    but it is the best solution for users without root access to their server, 
+    or for users who don't trust any program running as root that does not absolutely 
+    have to run as root.<br>
+  </li>
+  <li>no-su mode, which is in testing, runs the program with no special privileges 
+    of any sort. The downside of such an installation is that to allow the program 
+    access to your personal files (such as pending e-mails) you will have to make 
+    some of your files and directories group or world readable and writable. no-su 
+    mode is a good solution for an unusual breed of user: someone who doesn't 
+    trust the software, but trusts the other users on the server (since they could 
+    get read/write access to his/er pending e-mail)</li>
+</ul>
+<p><b><i>Notes:</i></b></p>
+<ul>
+  <li>tmda-cgi assumes it will run from within the source tree. No testing has 
+    been done to date to see if it will work in other locations.<br>
+  </li>
+  <li>You will have to recompile tmda-cgi if you move your configuration files 
+    or source tree.<br>
+  </li>
+  <li>You will have to recompile tmda-cgi if you change which mode (system-wide, 
+    single-user, or no-su) you run in.</li>
+</ul>
+<h3>Installing system-wide</h3>
+<p>As root, change to the cgi directory.</p>
+<blockquote> 
+  <pre># cd contrib/cgi</pre>
+</blockquote>
+<p>Compile tmda-cgi to a web directory that is configured to execute CGI. The 
+  filename you use is completely up to you. For example:</p>
+<blockquote> 
+  <pre># ./compile -t /path/to/cgi-bin/directory</pre>
+</blockquote>
+<p> or</p>
+<blockquote> 
+  <pre># ./compile -t /path/to/webpage/directory/index.cgi</pre>
+</blockquote>
+<p>Finally, tmda-cgi expects to find a variety of visual elements in a subdirectory 
+  called &quot;display&quot;. This directory should be located directly below 
+  the CGI itself. Sample files are provided in <tt>contrib/cgi/display</tt>. Feel 
+  free to use these files as-is or modify/replace them to personalize the program.</p>
+<p>The simplest way to provide this directory is with a symbolic link (assuming 
+  you have you web server configured to follow symbolic links). For example:</p>
+<blockquote> 
+  <pre># ln -s display /path/to/webpage/directory</pre>
+</blockquote>
+<h3>Installing single-user</h3>
+<p>As the (only) user who will be able to access tmda-cgi, change to the cgi 
+directory.</p>
+<blockquote> 
+  <pre>$ cd contrib/cgi</pre>
+</blockquote>
+<p>Compile tmda-cgi to a web directory that is configured to execute CGI. The 
+  filename you use is completely up to you. For example:</p>
+<blockquote> 
+  <pre>$ ./compile -t /path/to/cgi-bin/directory</pre>
+</blockquote>
+<p>or</p>
+<blockquote> 
+  <pre>$ ./compile -t /path/to/webpage/directory/index.cgi</pre>
+</blockquote>
+<p>Finally, tmda-cgi expects to find a variety of visual elements in a subdirectory 
+  called &quot;display&quot;. This directory should be located directly below 
+  the CGI itself. Sample files are provided in <tt>contrib/cgi/display</tt>. Feel 
+  free to use these files as-is or modify/replace them to personalize the program.</p>
+<p>The simplest way to provide this directory is with a symbolic link (assuming 
+  you have you web server configured to follow symbolic links). For example:</p>
+<blockquote> 
+  <pre>$ ln -s display /path/to/webpage/directory</pre>
+</blockquote>
+<h3>Installing no-su</h3>
+<p>To compile tmda-cgi for no-su mode, first change to the cgi directory.</p>
+<blockquote> 
+  <pre>$ cd contrib/cgi</pre>
+</blockquote>
+<p>Compile tmda-cgi to a web directory that is configured to execute CGI. The 
+  filename you use is completely up to you. For example:</p>
+<blockquote> 
+  <pre>$ ./compile -nt /path/to/cgi-bin/directory</pre>
+</blockquote>
+<p> or</p>
+<blockquote> 
+  <pre>$ ./compile -nt /path/to/webpage/directory/index.cgi</pre>
+</blockquote>
+<p>tmda-cgi expects to find a variety of visual elements in a subdirectory called 
+  &quot;display&quot;. This directory should be located directly below the CGI 
+  itself. Sample files are provided in <tt>contrib/cgi/display</tt>. Feel free 
+  to use these files as-is or modify/replace them to personalize the program.</p>
+<p>The simplest way to provide this directory is with a symbolic link (assuming 
+  you have you web server configured to follow symbolic links). For example:</p>
+<blockquote> 
+  <pre>$ ln -s display /path/to/webpage/directory</pre>
+</blockquote>
+<p>At this point you will have to change permissions on any existing pending mail 
+  and add something akin to:</p>
+<blockquote> 
+  <pre>os.umask(027)</pre>
+</blockquote>
+<p>to your configuration file. That will make sure that future pending e-mails 
+  are written such that they can be read by group members (i.e. the CGI).</p>
+<p>If you multiple users plan on using tmda-cgi in no-su mode, then you might 
+  consider moving all of your TMDA files into one central location. This will 
+  make it easier to keep group permissions on your directories and files. Here's 
+  some sample directories and file contents I set up for my user <tt>cgitest</tt>:</p>
+<blockquote> <tt>/etc:</tt> 
+  <table>
+    <tr> 
+      <td width="600" bgcolor="#CCCCCC"><tt>-rw-r--r-- &nbsp; &nbsp;1 root &nbsp; 
+&nbsp; root &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 22 Nov 24 23:54 tmda-cgi<br>
+-rw-r--r-- &nbsp; &nbsp;1 root &nbsp; &nbsp; root &nbsp; &nbsp; &nbsp; &nbsp; 
+&nbsp;557 Nov 27 15:05 tmdarc<br>
+-rw------- &nbsp; &nbsp;1 tofmipd &nbsp;tofmipd &nbsp; &nbsp; &nbsp; &nbsp;49 Nov 10 
+11:02 tofmipd</tt></td>
+    </tr>
+  </table><br>
+  <tt>/var:</tt> 
+  <table>
+    <tr> 
+      <td width="600" bgcolor="#CCCCCC"><tt>drwxr-s--x &nbsp; &nbsp;3 root &nbsp; 
+&nbsp; nobody &nbsp; &nbsp; &nbsp; &nbsp; 72 Nov 27 11:24 tmda</tt></td>
+    </tr>
+  </table><br>
+  <tt>/var/tmda:</tt> 
+  <table>
+    <tr> 
+      <td width="600" bgcolor="#CCCCCC"><tt>drwx--s--- &nbsp; &nbsp;6 cgitest 
+&nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp;200 Nov 27 11:39 cgitest</tt></td>
+    </tr>
+  </table><br>
+  <tt>/var/tmda/cgitest:</tt> 
+  <table>
+    <tr> 
+      <td width="600" bgcolor="#CCCCCC"><tt>-rw-r----- &nbsp; &nbsp;1 cgitest 
+&nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 Nov 27 11:39 config<br>
+-rw-r----- &nbsp; &nbsp;1 cgitest &nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp; 41 Nov 27 
+11:39 crypt_key<br>
+drwx--s--- &nbsp; &nbsp;2 cgitest &nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp; 96 Nov 27 
+12:55 filters<br>
+drwx--s--- &nbsp; &nbsp;2 cgitest &nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp;144 Nov 27 
+12:59 lists<br>
+drwx--s--- &nbsp; &nbsp;2 cgitest &nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp;120 Nov 27 
+12:57 logs<br>
+drwxrws--- &nbsp; &nbsp;2 cgitest &nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp; 48 Nov 27 
+11:37 pending<br>
+drwx--s--- &nbsp; &nbsp;2 cgitest &nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp;768 Nov 29 
+09:54 responses<br>
+drwxr-sr-x &nbsp; &nbsp;2 cgitest &nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp;200 Dec 
+&nbsp;6 20:33 templates</tt></td>
+    </tr>
+  </table><br>
+  <tt>/var/tmda/cgitest/filters:</tt> 
+  <table>
+    <tr> 
+      <td width="600" bgcolor="#CCCCCC"><tt>-rw-rw---- &nbsp; &nbsp;1 cgitest 
+&nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp;153 Nov 27 12:54 incoming<br>
+-rw-rw---- &nbsp; &nbsp;1 cgitest &nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp;150 Nov 27 
+12:55 outgoing</tt></td>
+    </tr>
+  </table><br>
+  <tt>/var/tmda/cgitest/lists:</tt> 
+  <table>
+    <tr> 
+      <td width="600" bgcolor="#CCCCCC"><tt>-rw-rw---- &nbsp; &nbsp;1 cgitest 
+&nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 Nov 27 12:59 blacklist<br>
+-rw-rw---- &nbsp; &nbsp;1 cgitest &nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 
+Nov 27 12:59 confirmed<br>
+-rw-rw---- &nbsp; &nbsp;1 cgitest &nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 
+Nov 27 12:59 whitelist</tt></td>
+    </tr>
+  </table><br>
+  <tt>/var/tmda/cgitest/logs:</tt> 
+  <table>
+    <tr> 
+      <td width="600" bgcolor="#CCCCCC"><tt>-rw-r----- &nbsp; &nbsp;1 cgitest 
+&nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 Nov 27 12:57 debug<br>
+-rw-r----- &nbsp; &nbsp;1 cgitest &nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 
+Nov 27 12:57 in<br>
+-rw-r----- &nbsp; &nbsp;1 cgitest &nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 
+Nov 27 12:57 out</tt></td>
+    </tr>
+  </table><br>
+  <tt>/var/tmda/cgitest/templates:</tt> 
+  <table>
+    <tr> 
+      <td width="600" bgcolor="#CCCCCC"><tt>-rw-r--r-- &nbsp; &nbsp;1 cgitest 
+&nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp;407 Dec &nbsp;6 20:30 bounce.txt<br>
+-rw-r--r-- &nbsp; &nbsp;1 cgitest &nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp;215 Dec 
+&nbsp;6 20:30 confirm_accept.txt<br>
+-rw-r--r-- &nbsp; &nbsp;1 cgitest &nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp;702 Dec 
+&nbsp;6 20:33 confirm_request.txt</tt></td>
+    </tr>
+  </table><br>
+  <tt>/etc/tmda-cgi:</tt> 
+  <table>
+    <tr> 
+      <td width="600" bgcolor="#CCCCCC"><tt>cgitest:XPkY0q/9Uge9I</tt></td>
+    </tr>
+  </table><br>
+  <tt>/var/tmda/cgitest/filters/incoming:</tt> 
+  <table>
+    <tr> 
+      <td width="600" bgcolor="#CCCCCC"><tt>from-file 
+/var/tmda/cgitest/lists/blacklist reject<br>
+from-file /var/tmda/cgitest/lists/whitelist accept<br>
+from-file /var/tmda/cgitest/lists/confirmed accept</tt></td>
+    </tr>
+  </table><br>
+  <tt>/var/tmda/cgitest/filters/outgoing:</tt> 
+  <table>
+    <tr> 
+      <td width="600" bgcolor="#CCCCCC"><tt>to-file /var/tmda/cgitest/lists/whitelist 
+tag envelope dated=10d from bare<br>
+to-file /var/tmda/cgitest/lists/confirmed tag envelope dated=10d from bare</tt></td>
+    </tr>
+  </table><br>
+  <tt>/var/tmda/cgitest/templates/confirm_request.txt:</tt> 
+  <table>
+    <tr> 
+      <td width="600" bgcolor="#CCCCCC"><tt>From.US-ASCII: "%(FULLNAME)s" 
+<%(recipient_address)s><br>
+Subject.US-ASCII: Please confirm your message<br>
+Reply-To.US-ASCII: %(confirm_accept_address)s<br>
+BodyCharset: US-ASCII<br>
+&nbsp;<br>
+This message was created automatically by mail delivery software<br>
+(TMDA).<br>
+&nbsp;<br>
+Your message attached below is being held because the address<br>
+<%(confirm_append_address)s> has not been verified.<br>
+&nbsp;<br>
+To release your message for delivery, please send an empty message<br>
+to the following address, surf the following link, or use your<br>
+mailer's "Reply" feature.<br>
+&nbsp;<br>
+ &nbsp; %(confirm_accept_address)s<br>
+&nbsp;<br>
+ &nbsp; %(confirm_accept_url)s<br>
+&nbsp;<br>
+This confirmation verifies that your message is legitimate and not<br>
+junk-mail. You should only have to confirm your address once.</tt></td>
+    </tr>
+  </table><br>
+  <tt>/etc/tmdarc:</tt> 
+  <table>
+    <tr> 
+      <td width="600" bgcolor="#CCCCCC"><tt>import Util<br>
+&nbsp;<br>
+# Allow group access to critical files<br>
+ALLOW_MODE_640 = 1<br>
+os.umask(0027)<br>
+&nbsp;<br>
+# Locate important files and directories<br>
+DATADIR = "/var/tmda/%s/" % os.environ["USER"]<br>
+CONFIRM_APPEND &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = DATADIR + "lists/whitelist"<br>
+FILTER_INCOMING &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= DATADIR + "filters/incoming"<br>
+FILTER_OUTGOING &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= DATADIR + "filters/outgoing"<br>
+LOGFILE_DEBUG &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= DATADIR + "logs/debug"<br>
+LOGFILE_INCOMING &nbsp; &nbsp; &nbsp; &nbsp; = DATADIR + "logs/in"<br>
+LOGFILE_OUTGOING &nbsp; &nbsp; &nbsp; &nbsp; = DATADIR + "logs/out"<br>
+PENDING_BLACKLIST_APPEND = DATADIR + "lists/blacklist"<br>
+PENDING_WHITELIST_APPEND = DATADIR + "lists/whitelist"<br>
+TEMPLATE_DIR &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = DATADIR + "templates/"<br>
+&nbsp;<br>
+# CGI location<br>
+CGI_URL = "http://wolfhome.com/~cgitest/index2.cgi";<br>
+<br>
+# Define X-Primary-Address key for TMDA-to-TMDA communications<br>
+ADDED_HEADERS_CLIENT = { "X-Primary-Address": "%s@%s" % \<br>
+ &nbsp;(os.environ["USER"], Util.gethostname()) }</tt></td>
+    </tr>
+  </table><br>
+  <tt>~cgitest/.qmail:</tt> 
+  <table>
+    <tr> 
+      <td width="600" bgcolor="#CCCCCC"><tt>|preline /usr/src/tmda/bin/tmda-filter -c 
+/var/tmda/cgitest/config<br>
+./Maildir/</tt></td>
+    </tr>
+  </table><br>
+</blockquote>
+<p>tmda-cgi was compiled with the following:</p>
+<blockquote> 
+  <pre>./compile -nc /var/tmda/~/config -t /www/tmda.cgi</pre>
+</blockquote>
+<p>Use the <tt>./compile -h</tt> for more details on how to use compile.</p>
+<h3>Passwords</h3>
+<p>tmda-cgi currently authenticate logins against user name &amp; password pairs 
+  stored in a password file (or files). tmda-cgi will look in two different places 
+  for password file(s), but it (they) must be readable by the CGI.</p>
+<p>If you are running in system-wide mode, the password file can be owned by root. 
+  If you are running in single-user mode, the password file can be owned by the 
+  user who will be running the CGI. If you are running in no-su mode, the file 
+  must either be owned by &quot;nobody&quot; (or whatever user your web server 
+  is configured to run as) or made globally readable See the table below for a 
+  better breakdown of your options.</p>
+<p>tmda-cgi first checks for a readable file called <tt>tmda-cgi</tt> in the same 
+  directory as the user's configuration file (if that location has been specified, 
+  otherwise it will look in <tt>~user/.tmda/tmda-cgi</tt>). It then tries 
+<tt>/etc/tmda-cgi</tt> 
+  if it can't find a match or cannot read the file. This allows the system 
+administrator 
+  to keep a list of access passwords while allowing the user to override what 
+  the sysadmin has set.</p>
+<table border="0" cellpadding="0" cellspacing="0">
+  <tr> 
+    <td width="35">&nbsp;</td>
+    <td width="10">&nbsp;</td>
+    <td>&nbsp;</td>
+    <td width="10">&nbsp;</td>
+    <td colspan="2" align="center" nowrap 
+bgcolor="#FFFFCC"><tt>~user/.tmda/tmda-cgi</tt></td>
+    <td width="10" align="center" nowrap>&nbsp;</td>
+    <td colspan="2" align="center" nowrap 
+bgcolor="#FFFFCC"><tt>/etc/tmda-cgi</tt></td>
+  </tr>
+  <tr> 
+    <td>&nbsp;</td>
+    <td>&nbsp;</td>
+    <td>&nbsp;</td>
+    <td>&nbsp;</td>
+    <td width="80" align="center" bgcolor="#FFFFCC">owner</td>
+    <td width="90" align="center" bgcolor="#FFFFCC">permissions</td>
+    <td align="center">&nbsp;</td>
+    <td width="80" align="center" bgcolor="#FFFFCC">owner</td>
+    <td width="90" align="center" bgcolor="#FFFFCC">permissions</td>
+  </tr>
+  <tr> 
+    <td>&nbsp;</td>
+    <td bgcolor="#CCFFFF">&nbsp;</td>
+    <td bgcolor="#CCFFFF">system-wide</td>
+    <td bgcolor="#CCFFFF">&nbsp;</td>
+    <td align="center" bgcolor="#CCFFCC">user</td>
+    <td align="center" bgcolor="#CCFFCC">600</td>
+    <td align="center" bgcolor="#CCFFFF">&nbsp;</td>
+    <td align="center" bgcolor="#CCFFCC">root</td>
+    <td align="center" bgcolor="#CCFFCC">600</td>
+  </tr>
+  <tr> 
+    <td>&nbsp;</td>
+    <td>&nbsp;</td>
+    <td>single-user</td>
+    <td>&nbsp;</td>
+    <td align="center" bgcolor="#FFFFCC">user</td>
+    <td align="center" bgcolor="#FFFFCC">600</td>
+    <td align="center">&nbsp;</td>
+    <td colspan="2" align="center" bgcolor="#FFFFCC">n/a</td>
+  </tr>
+  <tr> 
+    <td>&nbsp;</td>
+    <td bgcolor="#CCFFFF">&nbsp;</td>
+    <td bgcolor="#CCFFFF">no-su</td>
+    <td bgcolor="#CCFFFF">&nbsp;</td>
+    <td align="center" bgcolor="#CCFFCC">user</td>
+    <td align="center" bgcolor="#CCFFCC">644</td>
+    <td align="center" bgcolor="#CCFFFF">&nbsp;</td>
+    <td align="center" bgcolor="#CCFFCC">root<br>
+      nobody </td>
+    <td align="center" bgcolor="#CCFFCC">644<br>
+      600 </td>
+  </tr>
+  <tr> 
+    <td>&nbsp;</td>
+    <td colspan="8" align="center">File owner &amp; permission options</td>
+  </tr>
+</table>
+<p>The password file for tmda-cgi is formatted in much the same way as the password 
+  file for tofmipd. In fact, if you are using a password file with tofmipd and 
+  you wish to run tmda-cgi in system-wide mode, feel free to make a symbolic link 
+  between the two:</p>
+<blockquote> 
+  <pre> # ln -s /etc/tofmipd /etc/tmda-cgi</pre>
+</blockquote>
+<p>Password files for tmda-cgi look like:</p>
+<blockquote> 
+  <pre>&lt;user1&gt;:&lt;password1&gt;
+&lt;user2&gt;:&lt;password2&gt;</pre>
+</blockquote>
+<p>where each item in <tt>&lt;&gt;</tt> is replaced with text.</p>
+<p>The difference between this password file and the one for tofmipd is that the 
+  file does not need to have <br>
+  permissions of 400 or 600. If you, for example, are running in no-su mode, you 
+  will have to make your password file group or world readable.</p>
+<p>To keep the passwords secure, tmda-cgi will assume all passwords are DES encrypted 
+  if the file permissions are anything other than 400 or 600. Plaintext passwords 
+  will <i><b>not</b></i> work in such cases.</p>
+<p>Additionally, any entry with a blank password field, such as:</p>
+<blockquote> 
+  <pre>cantlogin:</pre>
+</blockquote>
+<p>will be prohibited from login, regardless of the file permissions.</p>
+<p><tt>contrib/cgi/genpass.py</tt> is provided for encrypted password generation. 
+  Output from <tt>genpass.py</tt> can be safely piped with <tt>&gt;</tt> or 
+<tt>&gt;&gt;</tt> 
+  into a password file. For example:</p>
+<blockquote> 
+  <pre># contrib/cgi/genpass.py joe &gt;&gt; /etc/tmda-cgi</pre>
+</blockquote>
+<p> or</p>
+<blockquote> 
+  <pre>$ contrib/cgi/genpass.py joe &gt; /home/joe/.tmda/tmda-cgi</pre>
+</blockquote>
+<p>If you encounter difficulties logging in, the problem may be a result of incorrect 
+  permissions on your password file(s). To debug this, append a <tt>?debug=1</tt> 
+  onto the end of your CGI URL. This will display some diagnostic information 
+  if the login fails instead of simply saying &quot;Wrong password. Try 
+again.&quot;</p>
+<hr>
+<h2>Configuration</h2>
+<p>tmda-cgi is configured by a set of parameters in your configuration file(s). 
+  All tmda-cgi configuration variables begin with a &quot;<tt>CGI_</tt>&quot; 
+  and are described on the <a href="config-vars.html">Configuration Variables</a> 
+  page.</p>
+<p><em><strong>Note:</strong></em> If you change nothing else, you will have to 
+  at least set the value for <a 
+href="config-vars.html#CGI_ACTIVE"><tt>CGI_ACTIVE</tt></a>.</p>

Index: tmda-cgi.html
===================================================================
RCS file: /cvsroot/tmda/tmda/htdocs/tmda-cgi.html,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- tmda-cgi.html       5 Dec 2002 18:26:29 -0000       1.3
+++ tmda-cgi.html       7 Dec 2002 04:11:22 -0000       1.4
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html>
 <!-- THIS PAGE IS AUTOMATICALLY GENERATED.  DO NOT EDIT. -->
-<!-- Thu Dec  5 10:52:54 2002 -->
+<!-- Fri Dec  6 22:10:12 2002 -->
 <!-- USING HT2HTML 2.0 -->
 <!-- SEE http://ht2html.sf.net -->
 <!-- User-specified headers:
@@ -160,389 +160,472 @@
 <!-- end of sidebar cell -->
 <!-- start of body cell -->
 <td valign="top" width="90%" class="body"><br>
-<h1>tmda-cgi</h1>
-<hr>
-<h2>What is it?</h2>
-<p>tmda-cgi is an alpha-release program for managing your TMDA account over the 
-  web. At the time of this writing, tmda-cgi can:</p>
-<ul>
-  <li>Page through lists of pending e-mail (mail received by your MTA, but still 
-    awaiting confirmation) 
-  <li>View the text content (and see what sorts of attachments are included) in 
-    any of your pending e-mails 
-  <li>Release (move into your mail folder as if a confirmation had been received) 
-    any of your pending e-mails. 
-  <li>Delete any pending e-mail 
-  <li>Whitelist or blacklist the author of any pending e-mails. 
-</ul>
-<p>At the moment, tmda-cgi's focus is clearly manipulating pending e-mails. At 
-  some point, I would like tmda-cgi to become more of a general system tool. Features 
-  I hope to add soon include:</p>
-<ul>
-  <li>Filter configuration</li>
-  <li>List editing</li>
-  <li>Automated clean-ups of pending e-mails</li>
-  <li>E-mail address generation (keyword, dated, or sender)</li>
-</ul>
-<p>tmda-cgi provides quick and easy access to your pending e-mails. This is an 
-  ideal tool for users who either do not have access to a shell account or are 
-  intimidated by operating in a command-line environment.</p>
-<p>Although TMDA users do not generally need to mess with their pending e-mails, 
-  there are times when this is the most convenient way to go. For instance:</p>
-<ul>
-  <li>When you use a web site that says it will automatically mail you a password, 
-    authentication link, or a receipt for a transaction you are making right now, 
-    but you're not interested in any follow-up e-mail they will likely send you 
-    in the future (and you don't feel like generating a dated address). 
-    <p> Simply fill out the web form like you normally would and give your regular, 
-      filtered e-mail address. The web site will send the e-mail to your mail 
-      server, and your mail server will send a confirmation request back to the 
-      web site (which will most likely never be seen by a human being). Then log 
-      into tmda-cgi and manually release their letter. Any further mail they send 
-      you will sit quietly in your pending directory like the one you released. 
-  </li>
-  <li>To search your incoming mail for automated mailings you want to receive. 
-    <p> Using tmda-cgi regularly for a few weeks or months after you begin filtering 
-      your e-mail is a good way to make sure your filters are configured correctly. 
-  <li> 
-    <p>To look for &quot;lost&quot; e-mail. 
-    <p> It's really rare that e-mail will get lost, but it's bound to happen 
sometimes. 
-      Perhaps Aunt Margaret can't figure out what the confirmation e-mail meant 
-      (even though it is written in a very obvious way). Perhaps your boss was 
-      in a hurry and deleted the confirmation request thinking 
<em><strong>it</strong></em> 
-      was spam (or perhaps he has a really crappy spam filter that mistook the 
-      confirmation for spam). Perhaps Grandpa Joe sent you some e-mail from someone 
-      else's e-mail account and they deleted the confirmation request, not realizing 
-      what it was. 
-  <li> 
-    <p>To remind you <em><strong>why</strong></em> you got TMDA in the first place. 
-    <p> &quot;Wow, I would have gotten 100 e-mails about Viagara, cheap cigarettes, 
-      weight loss drugs, penis enlargement, and Nigerian swindles today! Now I 
-      remember why the rest of my family thinks that e-mail is a pain.&quot;</ul>
-<hr>
-<h2>Requirements</h2>
-<p>TBD. Until we do more testing it isn't clear what systems have problems with 
-  tmda-cgi.</p>
-<hr>
-<h2>Installation</h2>
-<p>tmda-cgi is provided in your distribution's <tt>contrib/cgi</tt> directory, 
-  however with this being alpha-revision software, revisions come out quite 
frequently. 
-  You should consider downloading from <a 
href="http://sourceforge.net/cvs/?group_id=24680"; target="_blank">CVS</a> 
-  and joining the <a href="mailto:[EMAIL PROTECTED]";>tmda-cgi mailing 
-  list</a> to keep up on the sub-project's current state of development.</p>
-<p>Once you've obtained a copy of tmda-cgi, you need to decide how you want to 
-  use tmda-cgi. tmda-cgi has been designed to run three different ways: system-wide, 
-  single-user, and in no-su modes.</p>
-<ul>
-  <li>In system-wide mode, multiple users can use tmda-cgi to access their TMDA 
-    system. The program launches as root and then performs a <tt>seteuid</tt> 
-    to run as the requested user once password authentication has been accomplished. 
-    This is the best solution for system administrators who wish to set up their 
-    TMDA system for use by multiple users.<br>
-  </li>
-  <li>In single-user mode, only one user can access tmda-cgi. That user will still 
-    need to authenticate their access with a password, but the program runs as 
-    the user who compiled it and therefore cannot access anyone else's personal 
-    data. If multiple users wish to install tmda-cgi in single-user mode (strange, 
-    but not absurd) then each user can compile a different 14k shell that launches 
-    the Python code. This method is less convenient than the system-wide 
installation, 
-    but it is the best solution for users without root access to their server, 
-    or for users who don't trust any program running as root that does not absolutely 
-    have to run as root.<br>
-  </li>
-  <li>no-su mode, which is in testing, runs the program with no special privileges 
-    of any sort. The downside of such an installation is that to allow the program 
-    access to your personal files (such as pending e-mails) you will have to make 
-    some of your files and directories group or world readable and writable. no-su 
-    mode is a good solution for an unusual breed of user: someone who doesn't 
-    trust the software, but trusts the other users on the server (since they could 
-    get read/write access to his/er pending e-mail)</li>
-</ul>
-<p><b><i>Notes:</i></b></p>
-<ul>
-  <li>tmda-cgi assumes it will run from within the source tree. No testing has 
-    been done to date to see if it will work in other locations.<br>
-  </li>
-  <li>You will have to recompile tmda-cgi if you move your configuration files 
-    or source tree.<br></li>
-  <li>You will have to recompile tmda-cgi if you change which mode (system-wide, 
-    single-user, or no-su) you run in.</li>
-</ul>
-<h3>Installing system-wide</h3>
-<p>As root, change to the cgi directory.</p>
-<blockquote> 
-  <pre># cd contrib/cgi</pre>
-</blockquote>
-<p>Compile tmda-cgi to a web directory that is configured to execute CGI. The 
-  filename you use is completely up to you. For example:</p>
-<blockquote> 
-  <pre># ./compile -t /path/to/cgi-bin/directory</pre>
-</blockquote>
-<p> or</p>
-<blockquote> 
-  <pre># ./compile -t /path/to/webpage/directory/index.cgi</pre>
-</blockquote>
-<p>Finally, tmda-cgi expects to find a variety of visual elements in a subdirectory 
-  called &quot;display&quot;. This directory should be located directly below 
-  the CGI itself. Sample files are provided in <tt>contrib/cgi/display</tt>. Feel 
-  free to use these files as-is or modify/replace them to personalize the program.</p>
-<p>The simplest way to provide this directory is with a symbolic link (assuming 
-  you have you web server configured to follow symbolic links). For example:</p>
-<blockquote>
-  <pre># ln -s display /path/to/webpage/directory</pre>
-</blockquote>
-<h3>Installing single-user</h3>
-<p>As the (only) user who will be able to access tmda-cgi, change to the cgi 
directory.</p>
-<blockquote> 
-  <pre>$ cd contrib/cgi</pre>
-</blockquote>
-<p>Compile tmda-cgi to a web directory that is configured to execute CGI. The 
-  filename you use is completely up to you. For example:</p>
-<blockquote> 
-  <pre>$ ./compile -t /path/to/cgi-bin/directory</pre>
-</blockquote>
-<p>or</p>
-<blockquote> 
-  <pre>$ ./compile -t /path/to/webpage/directory/index.cgi</pre>
-</blockquote>
-<p>Finally, tmda-cgi expects to find a variety of visual elements in a subdirectory 
-  called &quot;display&quot;. This directory should be located directly below 
-  the CGI itself. Sample files are provided in <tt>contrib/cgi/display</tt>. Feel 
-  free to use these files as-is or modify/replace them to personalize the program.</p>
-<p>The simplest way to provide this directory is with a symbolic link (assuming 
-  you have you web server configured to follow symbolic links). For example:</p>
-<blockquote> 
-  <pre>$ ln -s display /path/to/webpage/directory</pre>
-</blockquote>
-<h3>Installing no-su</h3>
-<p>To compile tmda-cgi for no-su mode, first change to the cgi directory.</p>
-<blockquote> 
-  <pre>$ cd contrib/cgi</pre>
-</blockquote>
-<p>Compile tmda-cgi to a web directory that is configured to execute CGI. The 
-  filename you use is completely up to you. For example:</p>
-<blockquote> 
-  <pre>$ ./compile -nt /path/to/cgi-bin/directory</pre>
-</blockquote>
-<p> or</p>
-<blockquote> 
-  <pre>$ ./compile -nt /path/to/webpage/directory/index.cgi</pre>
-</blockquote>
-<p>tmda-cgi expects to find a variety of visual elements in a subdirectory called 
-  &quot;display&quot;. This directory should be located directly below the CGI 
-  itself. Sample files are provided in <tt>contrib/cgi/display</tt>. Feel free 
-  to use these files as-is or modify/replace them to personalize the program.</p>
-<p>The simplest way to provide this directory is with a symbolic link (assuming 
-  you have you web server configured to follow symbolic links). For example:</p>
-<blockquote> 
-  <pre>$ ln -s display /path/to/webpage/directory</pre>
-</blockquote>
-<p>At this point you will have to change permissions on any existing pending mail 
-  and add something akin to:</p>
-<blockquote>
-  <pre>os.umask(027)</pre>
-</blockquote>
-<p>to your configuration file. That will make sure that future pending e-mails 
-  are written such that they can be read by group members (i.e. the CGI).</p>
-<p>If you multiple users plan on using tmda-cgi in no-su mode, then you might 
-  consider moving all of your TMDA files into one central location. This will 
-  make it easier to keep group permissions on your directories and files. Here's 
-  some sample directories and file contents I set up for my user <tt>cgitest</tt>:</p>
-<blockquote> 
-  <pre>/etc:
--rw-r--r--    1 root     root           22 Nov 24 23:54 tmda-cgi
--rw-r--r--    1 root     root          557 Nov 27 15:05 tmdarc
--rw-------    1 tofmipd  tofmipd        49 Nov 10 11:02 tofmipd
-
-/var:
-drwxr-s--x    3 root     nobody         72 Nov 27 11:24 tmda
-
-/var/tmda:
-drwx--s---    6 cgitest  nobody        200 Nov 27 11:39 cgitest
-
-/var/tmda/cgitest:
--rw-r-----    1 cgitest  nobody          0 Nov 27 11:39 config
--rw-r-----    1 cgitest  nobody         41 Nov 27 11:39 crypt_key
-drwx--s---    2 cgitest  nobody         96 Nov 27 12:55 filters
-drwx--s---    2 cgitest  nobody        144 Nov 27 12:59 lists
-drwx--s---    2 cgitest  nobody        120 Nov 27 12:57 logs
-drwxrws---    2 cgitest  nobody         48 Nov 27 11:37 pending
-drwx--s---    2 cgitest  nobody        768 Nov 29 09:54 responses
-
-/var/tmda/cgitest/filters:
--rw-rw----    1 cgitest  nobody        153 Nov 27 12:54 incoming
--rw-rw----    1 cgitest  nobody        150 Nov 27 12:55 outgoing
-
-/var/tmda/cgitest/lists:
--rw-rw----    1 cgitest  nobody          0 Nov 27 12:59 blacklist
--rw-rw----    1 cgitest  nobody          0 Nov 27 12:59 confirmed
--rw-rw----    1 cgitest  nobody          0 Nov 27 12:59 whitelist
-
-/var/tmda/cgitest/logs:
--rw-r-----    1 cgitest  nobody          0 Nov 27 12:57 debug
--rw-r-----    1 cgitest  nobody          0 Nov 27 12:57 in
--rw-r-----    1 cgitest  nobody          0 Nov 27 12:57 out
-
-/etc/tmda-cgi:
-cgitest:XPkY0q/9Uge9I
-
-/var/tmda/cgitest/filters/incoming:
-from-file /var/tmda/cgitest/lists/blacklist reject
-from-file /var/tmda/cgitest/lists/whitelist accept
-from-file /var/tmda/cgitest/lists/confirmed accept
-
-/var/tmda/cgitest/filters/outgoing:
-to-file /var/tmda/cgitest/lists/whitelist tag envelope dated=10d from bare
-to-file /var/tmda/cgitest/lists/confirmed tag envelope dated=10d from bare
-
-/etc/tmdarc:
-import Util
-
-DATADIR = &quot;/var/tmda/%s/&quot; % Util.getusername()
-CGI_ACTIVE = 1
-FILTER_INCOMING          = DATADIR + &quot;filters/incoming&quot;
-FILTER_OUTGOING          = DATADIR + &quot;filters/outgoing&quot;
-LOGFILE_DEBUG            = DATADIR + &quot;logs/debug&quot;
-LOGFILE_INCOMING         = DATADIR + &quot;logs/in&quot;
-LOGFILE_OUTGOING         = DATADIR + &quot;logs/out&quot;
-PENDING_BLACKLIST_APPEND = DATADIR + &quot;lists/blacklist&quot;
-PENDING_WHITELIST_APPEND = DATADIR + &quot;lists/whitelist&quot;
-os.umask(027)
-ADDED_HEADERS_CLIENT = { &quot;X-Primary-Address&quot;: &quot;%s@%s&quot; % \
-  (Util.getusername(), Util.gethostname()) }
-
-~cgitest/.qmail:
-|preline /usr/src/tmda/bin/tmda-filter -c /var/tmda/cgitest/config
-./Maildir/</pre>
-</blockquote>
-<p>tmda-cgi was compiled with the following:</p>
-<blockquote>
-  <pre>./compile -nc /var/tmda/~/config -t /www/tmda.cgi</pre>
-</blockquote>
-<p>Use the <tt>./compile -h</tt> for more details on how to use compile.</p>
-<h3>Passwords</h3>
-<p>tmda-cgi currently authenticate logins against user name &amp; password pairs 
-  stored in a password file (or files). tmda-cgi will look in two different places 
-  for password file(s), but it (they) must be readable by the CGI.</p>
-<p>If you are running in system-wide mode, the password file can be owned by root. 
-  If you are running in single-user mode, the password file can be owned by the 
-  user who will be running the CGI. If you are running in no-su mode, the file 
-  must either be owned by &quot;nobody&quot; (or whatever user your web server 
-  is configured to run as) or made globally readable See the table below for a 
-  better breakdown of your options.</p>
-<p>tmda-cgi first checks for a readable file called <tt>tmda-cgi</tt> in the same 
-  directory as the user's configuration file (if that location has been specified, 
-  otherwise it will look in <tt>~user/.tmda/tmda-cgi</tt>). It then tries 
<tt>/etc/tmda-cgi</tt> 
-  if it can't find a match or cannot read the file. This allows the system 
administrator 
-  to keep a list of access passwords while allowing the user to override what 
-  the sysadmin has set.</p>
-<table border="0" cellpadding="0" cellspacing="0">
-  <tr> 
-    <td width="35">&nbsp;</td>
-    <td width="10">&nbsp;</td>
-    <td>&nbsp;</td>
-    <td width="10">&nbsp;</td>
-    <td colspan="2" align="center" nowrap 
bgcolor="#FFFFCC"><tt>~user/.tmda/tmda-cgi</tt></td>
-    <td width="10" align="center" nowrap>&nbsp;</td>
-    <td colspan="2" align="center" nowrap 
bgcolor="#FFFFCC"><tt>/etc/tmda-cgi</tt></td>
-  </tr>
-  <tr> 
-    <td>&nbsp;</td>
-    <td>&nbsp;</td>
-    <td>&nbsp;</td>
-    <td>&nbsp;</td>
-    <td width="80" align="center" bgcolor="#FFFFCC">owner</td>
-    <td width="90" align="center" bgcolor="#FFFFCC">permissions</td>
-    <td align="center">&nbsp;</td>
-    <td width="80" align="center" bgcolor="#FFFFCC">owner</td>
-    <td width="90" align="center" bgcolor="#FFFFCC">permissions</td>
-  </tr>
-  <tr> 
-    <td>&nbsp;</td>
-    <td bgcolor="#CCFFFF">&nbsp;</td>
-    <td bgcolor="#CCFFFF">system-wide</td>
-    <td bgcolor="#CCFFFF">&nbsp;</td>
-    <td align="center" bgcolor="#CCFFCC">user</td>
-    <td align="center" bgcolor="#CCFFCC">600</td>
-    <td align="center" bgcolor="#CCFFFF">&nbsp;</td>
-    <td align="center" bgcolor="#CCFFCC">root</td>
-    <td align="center" bgcolor="#CCFFCC">600</td>
-  </tr>
-  <tr> 
-    <td>&nbsp;</td>
-    <td>&nbsp;</td>
-    <td>single-user</td>
-    <td>&nbsp;</td>
-    <td align="center" bgcolor="#FFFFCC">user</td>
-    <td align="center" bgcolor="#FFFFCC">600</td>
-    <td align="center">&nbsp;</td>
-    <td colspan="2" align="center" bgcolor="#FFFFCC">n/a</td>
-  </tr>
-  <tr> 
-    <td>&nbsp;</td>
-    <td bgcolor="#CCFFFF">&nbsp;</td>
-    <td bgcolor="#CCFFFF">no-su</td>
-    <td bgcolor="#CCFFFF">&nbsp;</td>
-    <td align="center" bgcolor="#CCFFCC">user</td>
-    <td align="center" bgcolor="#CCFFCC">644</td>
-    <td align="center" bgcolor="#CCFFFF">&nbsp;</td>
-    <td align="center" bgcolor="#CCFFCC">root<br>
-      nobody </td>
-    <td align="center" bgcolor="#CCFFCC">644<br>
-      600 </td>
-  </tr>
-  <tr> 
-    <td>&nbsp;</td>
-    <td colspan="8" align="center">File owner &amp; permission options</td>
-  </tr>
-</table>
-<p>The password file for tmda-cgi is formatted in much the same way as the password 
-  file for tofmipd. In fact, if you are using a password file with tofmipd and 
-  you wish to run tmda-cgi in system-wide mode, feel free to make a symbolic link 
-  between the two:</p>
-<blockquote> 
-  <pre> # ln -s /etc/tofmipd /etc/tmda-cgi</pre>
-</blockquote>
-<p>Password files for tmda-cgi look like:</p>
-<blockquote> 
-  <pre>&lt;user1&gt;:&lt;password1&gt;
-&lt;user2&gt;:&lt;password2&gt;</pre>
-</blockquote>
-<p>where each item in <tt>&lt;&gt;</tt> is replaced with text.</p>
-<p>The difference between this password file and the one for tofmipd is that the 
-  file does not need to have <br>
-  permissions of 400 or 600. If you, for example, are running in no-su mode, you 
-  will have to make your password file group or world readable.</p>
-<p>To keep the passwords secure, tmda-cgi will assume all passwords are DES encrypted 
-  if the file permissions are anything other than 400 or 600. Plaintext passwords 
-  will <i><b>not</b></i> work in such cases.</p>
-<p>Additionally, any entry with a blank password field, such as:</p>
-<blockquote> 
-  <pre>cantlogin:</pre>
-</blockquote>
-<p>will be prohibited from login, regardless of the file permissions.</p>
-<p><tt>contrib/cgi/genpass.py</tt> is provided for encrypted password generation. 
-  Output from <tt>genpass.py</tt> can be safely piped with <tt>&gt;</tt> or 
<tt>&gt;&gt;</tt> 
-  into a password file. For example:</p>
-<blockquote> 
-  <pre># contrib/cgi/genpass.py joe &gt;&gt; /etc/tmda-cgi</pre>
-</blockquote>
-<p> or</p>
-<blockquote> 
-  <pre>$ contrib/cgi/genpass.py joe &gt; /home/joe/.tmda/tmda-cgi</pre>
-</blockquote>
-<p>If you encounter difficulties logging in, the problem may be a result of incorrect 
-  permissions on your password file(s). To debug this, append a <tt>?debug=1</tt> 
-  onto the end of your CGI URL. This will display some diagnostic information 
-  if the login fails instead of simply saying &quot;Wrong password. Try 
again.&quot;</p>
-<hr>
-<h2>Configuration</h2>
-<p>tmda-cgi is configured by a set of parameters in your configuration file(s). 
-  All tmda-cgi configuration variables begin with a &quot;<tt>CGI_</tt>&quot; 
-  and are described on the <a href="config-vars.html">Configuration Variables</a> 
-  page.</p>
-<p><em><strong>Note:</strong></em> If you change nothing else, you will have to 
-  at least set the value for <a 
href="config-vars.html#CGI_ACTIVE"><tt>CGI_ACTIVE</tt></a>.</p>
+<h1>tmda-cgi</h1>
+<hr>
+<h2>What is it?</h2>
+<p>tmda-cgi is an alpha-release program for managing your TMDA account over the 
+  web. At the time of this writing, tmda-cgi can:</p>
+<ul>
+  <li>Page through lists of pending e-mail (mail received by your MTA, but still 
+    awaiting confirmation) 
+  <li>View the text content (and see what sorts of attachments are included) in 
+    any of your pending e-mails 
+  <li>Release (move into your mail folder as if a confirmation had been received) 
+    any of your pending e-mails. 
+  <li>Delete any pending e-mail 
+  <li>Whitelist or blacklist the author of any pending e-mails. 
+</ul>
+<p>At the moment, tmda-cgi's focus is clearly manipulating pending e-mails. At 
+  some point, I would like tmda-cgi to become more of a general system tool. Features 
+  I hope to add soon include:</p>
+<ul>
+  <li>Filter configuration</li>
+  <li>List editing</li>
+  <li>Automated clean-ups of pending e-mails</li>
+  <li>E-mail address generation (keyword, dated, or sender)</li>
+</ul>
+<p>tmda-cgi provides quick and easy access to your pending e-mails. This is an 
+  ideal tool for users who either do not have access to a shell account or are 
+  intimidated by operating in a command-line environment.</p>
+<p>Although TMDA users do not generally need to mess with their pending e-mails, 
+  there are times when this is the most convenient way to go. For instance:</p>
+<ul>
+  <li>When you use a web site that says it will automatically mail you a password, 
+    authentication link, or a receipt for a transaction you are making right now, 
+    but you're not interested in any follow-up e-mail they will likely send you 
+    in the future (and you don't feel like generating a dated address). 
+    <p> Simply fill out the web form like you normally would and give your regular, 
+      filtered e-mail address. The web site will send the e-mail to your mail 
+      server, and your mail server will send a confirmation request back to the 
+      web site (which will most likely never be seen by a human being). Then log 
+      into tmda-cgi and manually release their letter. Any further mail they send 
+      you will sit quietly in your pending directory like the one you released. 
+  </li>
+  <li>To search your incoming mail for automated mailings you want to receive. 
+    <p> Using tmda-cgi regularly for a few weeks or months after you begin filtering 
+      your e-mail is a good way to make sure your filters are configured correctly. 
+  <li> 
+    <p>To look for &quot;lost&quot; e-mail. 
+    <p> It's really rare that e-mail will get lost, but it's bound to happen 
+sometimes. 
+      Perhaps Aunt Margaret can't figure out what the confirmation e-mail meant 
+      (even though it is written in a very obvious way). Perhaps your boss was 
+      in a hurry and deleted the confirmation request thinking 
+<em><strong>it</strong></em> 
+      was spam (or perhaps he has a really crappy spam filter that mistook the 
+      confirmation for spam). Perhaps Grandpa Joe sent you some e-mail from someone 
+      else's e-mail account and they deleted the confirmation request, not realizing 
+      what it was. 
+  <li> 
+    <p>To remind you <em><strong>why</strong></em> you got TMDA in the first place. 
+    <p> &quot;Wow, I would have gotten 100 e-mails about Viagara, cheap cigarettes, 
+      weight loss drugs, penis enlargement, and Nigerian swindles today! Now I 
+      remember why the rest of my family thinks that e-mail is a pain.&quot;
+</ul>
+<hr>
+<h2>Requirements</h2>
+<p>TBD. Until we do more testing it isn't clear what systems have problems with 
+  tmda-cgi.</p>
+<hr>
+<h2>Installation</h2>
+<p>tmda-cgi is provided in your distribution's <tt>contrib/cgi</tt> directory, 
+  however with this being alpha-revision software, revisions come out quite 
+frequently. 
+  You should consider downloading from <a 
+href="http://sourceforge.net/cvs/?group_id=24680"; target="_blank">CVS</a> 
+  and joining the <a href="mailto:[EMAIL PROTECTED]";>tmda-cgi mailing 
+  list</a> to keep up on the sub-project's current state of development.</p>
+<p>Once you've obtained a copy of tmda-cgi, you need to decide how you want to 
+  use tmda-cgi. tmda-cgi has been designed to run three different ways: system-wide, 
+  single-user, and in no-su modes.</p>
+<ul>
+  <li>In system-wide mode, multiple users can use tmda-cgi to access their TMDA 
+    system. The program launches as root and then performs a <tt>seteuid</tt> 
+    to run as the requested user once password authentication has been accomplished. 
+    This is the best solution for system administrators who wish to set up their 
+    TMDA system for use by multiple users.<br>
+  </li>
+  <li>In single-user mode, only one user can access tmda-cgi. That user will still 
+    need to authenticate their access with a password, but the program runs as 
+    the user who compiled it and therefore cannot access anyone else's personal 
+    data. If multiple users wish to install tmda-cgi in single-user mode (strange, 
+    but not absurd) then each user can compile a different 14k shell that launches 
+    the Python code. This method is less convenient than the system-wide 
+installation, 
+    but it is the best solution for users without root access to their server, 
+    or for users who don't trust any program running as root that does not absolutely 
+    have to run as root.<br>
+  </li>
+  <li>no-su mode, which is in testing, runs the program with no special privileges 
+    of any sort. The downside of such an installation is that to allow the program 
+    access to your personal files (such as pending e-mails) you will have to make 
+    some of your files and directories group or world readable and writable. no-su 
+    mode is a good solution for an unusual breed of user: someone who doesn't 
+    trust the software, but trusts the other users on the server (since they could 
+    get read/write access to his/er pending e-mail)</li>
+</ul>
+<p><b><i>Notes:</i></b></p>
+<ul>
+  <li>tmda-cgi assumes it will run from within the source tree. No testing has 
+    been done to date to see if it will work in other locations.<br>
+  </li>
+  <li>You will have to recompile tmda-cgi if you move your configuration files 
+    or source tree.<br>
+  </li>
+  <li>You will have to recompile tmda-cgi if you change which mode (system-wide, 
+    single-user, or no-su) you run in.</li>
+</ul>
+<h3>Installing system-wide</h3>
+<p>As root, change to the cgi directory.</p>
+<blockquote> 
+  <pre># cd contrib/cgi</pre>
+</blockquote>
+<p>Compile tmda-cgi to a web directory that is configured to execute CGI. The 
+  filename you use is completely up to you. For example:</p>
+<blockquote> 
+  <pre># ./compile -t /path/to/cgi-bin/directory</pre>
+</blockquote>
+<p> or</p>
+<blockquote> 
+  <pre># ./compile -t /path/to/webpage/directory/index.cgi</pre>
+</blockquote>
+<p>Finally, tmda-cgi expects to find a variety of visual elements in a subdirectory 
+  called &quot;display&quot;. This directory should be located directly below 
+  the CGI itself. Sample files are provided in <tt>contrib/cgi/display</tt>. Feel 
+  free to use these files as-is or modify/replace them to personalize the program.</p>
+<p>The simplest way to provide this directory is with a symbolic link (assuming 
+  you have you web server configured to follow symbolic links). For example:</p>
+<blockquote> 
+  <pre># ln -s display /path/to/webpage/directory</pre>
+</blockquote>
+<h3>Installing single-user</h3>
+<p>As the (only) user who will be able to access tmda-cgi, change to the cgi 
+directory.</p>
+<blockquote> 
+  <pre>$ cd contrib/cgi</pre>
+</blockquote>
+<p>Compile tmda-cgi to a web directory that is configured to execute CGI. The 
+  filename you use is completely up to you. For example:</p>
+<blockquote> 
+  <pre>$ ./compile -t /path/to/cgi-bin/directory</pre>
+</blockquote>
+<p>or</p>
+<blockquote> 
+  <pre>$ ./compile -t /path/to/webpage/directory/index.cgi</pre>
+</blockquote>
+<p>Finally, tmda-cgi expects to find a variety of visual elements in a subdirectory 
+  called &quot;display&quot;. This directory should be located directly below 
+  the CGI itself. Sample files are provided in <tt>contrib/cgi/display</tt>. Feel 
+  free to use these files as-is or modify/replace them to personalize the program.</p>
+<p>The simplest way to provide this directory is with a symbolic link (assuming 
+  you have you web server configured to follow symbolic links). For example:</p>
+<blockquote> 
+  <pre>$ ln -s display /path/to/webpage/directory</pre>
+</blockquote>
+<h3>Installing no-su</h3>
+<p>To compile tmda-cgi for no-su mode, first change to the cgi directory.</p>
+<blockquote> 
+  <pre>$ cd contrib/cgi</pre>
+</blockquote>
+<p>Compile tmda-cgi to a web directory that is configured to execute CGI. The 
+  filename you use is completely up to you. For example:</p>
+<blockquote> 
+  <pre>$ ./compile -nt /path/to/cgi-bin/directory</pre>
+</blockquote>
+<p> or</p>
+<blockquote> 
+  <pre>$ ./compile -nt /path/to/webpage/directory/index.cgi</pre>
+</blockquote>
+<p>tmda-cgi expects to find a variety of visual elements in a subdirectory called 
+  &quot;display&quot;. This directory should be located directly below the CGI 
+  itself. Sample files are provided in <tt>contrib/cgi/display</tt>. Feel free 
+  to use these files as-is or modify/replace them to personalize the program.</p>
+<p>The simplest way to provide this directory is with a symbolic link (assuming 
+  you have you web server configured to follow symbolic links). For example:</p>
+<blockquote> 
+  <pre>$ ln -s display /path/to/webpage/directory</pre>
+</blockquote>
+<p>At this point you will have to change permissions on any existing pending mail 
+  and add something akin to:</p>
+<blockquote> 
+  <pre>os.umask(027)</pre>
+</blockquote>
+<p>to your configuration file. That will make sure that future pending e-mails 
+  are written such that they can be read by group members (i.e. the CGI).</p>
+<p>If you multiple users plan on using tmda-cgi in no-su mode, then you might 
+  consider moving all of your TMDA files into one central location. This will 
+  make it easier to keep group permissions on your directories and files. Here's 
+  some sample directories and file contents I set up for my user <tt>cgitest</tt>:</p>
+<blockquote> <tt>/etc:</tt> 
+  <table>
+    <tr> 
+      <td width="600" bgcolor="#CCCCCC"><tt>-rw-r--r-- &nbsp; &nbsp;1 root &nbsp; 
+&nbsp; root &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 22 Nov 24 23:54 tmda-cgi<br>
+-rw-r--r-- &nbsp; &nbsp;1 root &nbsp; &nbsp; root &nbsp; &nbsp; &nbsp; &nbsp; 
+&nbsp;557 Nov 27 15:05 tmdarc<br>
+-rw------- &nbsp; &nbsp;1 tofmipd &nbsp;tofmipd &nbsp; &nbsp; &nbsp; &nbsp;49 Nov 10 
+11:02 tofmipd</tt></td>
+    </tr>
+  </table><br>
+  <tt>/var:</tt> 
+  <table>
+    <tr> 
+      <td width="600" bgcolor="#CCCCCC"><tt>drwxr-s--x &nbsp; &nbsp;3 root &nbsp; 
+&nbsp; nobody &nbsp; &nbsp; &nbsp; &nbsp; 72 Nov 27 11:24 tmda</tt></td>
+    </tr>
+  </table><br>
+  <tt>/var/tmda:</tt> 
+  <table>
+    <tr> 
+      <td width="600" bgcolor="#CCCCCC"><tt>drwx--s--- &nbsp; &nbsp;6 cgitest 
+&nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp;200 Nov 27 11:39 cgitest</tt></td>
+    </tr>
+  </table><br>
+  <tt>/var/tmda/cgitest:</tt> 
+  <table>
+    <tr> 
+      <td width="600" bgcolor="#CCCCCC"><tt>-rw-r----- &nbsp; &nbsp;1 cgitest 
+&nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 Nov 27 11:39 config<br>
+-rw-r----- &nbsp; &nbsp;1 cgitest &nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp; 41 Nov 27 
+11:39 crypt_key<br>
+drwx--s--- &nbsp; &nbsp;2 cgitest &nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp; 96 Nov 27 
+12:55 filters<br>
+drwx--s--- &nbsp; &nbsp;2 cgitest &nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp;144 Nov 27 
+12:59 lists<br>
+drwx--s--- &nbsp; &nbsp;2 cgitest &nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp;120 Nov 27 
+12:57 logs<br>
+drwxrws--- &nbsp; &nbsp;2 cgitest &nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp; 48 Nov 27 
+11:37 pending<br>
+drwx--s--- &nbsp; &nbsp;2 cgitest &nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp;768 Nov 29 
+09:54 responses<br>
+drwxr-sr-x &nbsp; &nbsp;2 cgitest &nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp;200 Dec 
+&nbsp;6 20:33 templates</tt></td>
+    </tr>
+  </table><br>
+  <tt>/var/tmda/cgitest/filters:</tt> 
+  <table>
+    <tr> 
+      <td width="600" bgcolor="#CCCCCC"><tt>-rw-rw---- &nbsp; &nbsp;1 cgitest 
+&nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp;153 Nov 27 12:54 incoming<br>
+-rw-rw---- &nbsp; &nbsp;1 cgitest &nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp;150 Nov 27 
+12:55 outgoing</tt></td>
+    </tr>
+  </table><br>
+  <tt>/var/tmda/cgitest/lists:</tt> 
+  <table>
+    <tr> 
+      <td width="600" bgcolor="#CCCCCC"><tt>-rw-rw---- &nbsp; &nbsp;1 cgitest 
+&nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 Nov 27 12:59 blacklist<br>
+-rw-rw---- &nbsp; &nbsp;1 cgitest &nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 
+Nov 27 12:59 confirmed<br>
+-rw-rw---- &nbsp; &nbsp;1 cgitest &nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 
+Nov 27 12:59 whitelist</tt></td>
+    </tr>
+  </table><br>
+  <tt>/var/tmda/cgitest/logs:</tt> 
+  <table>
+    <tr> 
+      <td width="600" bgcolor="#CCCCCC"><tt>-rw-r----- &nbsp; &nbsp;1 cgitest 
+&nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 Nov 27 12:57 debug<br>
+-rw-r----- &nbsp; &nbsp;1 cgitest &nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 
+Nov 27 12:57 in<br>
+-rw-r----- &nbsp; &nbsp;1 cgitest &nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0 
+Nov 27 12:57 out</tt></td>
+    </tr>
+  </table><br>
+  <tt>/var/tmda/cgitest/templates:</tt> 
+  <table>
+    <tr> 
+      <td width="600" bgcolor="#CCCCCC"><tt>-rw-r--r-- &nbsp; &nbsp;1 cgitest 
+&nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp;407 Dec &nbsp;6 20:30 bounce.txt<br>
+-rw-r--r-- &nbsp; &nbsp;1 cgitest &nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp;215 Dec 
+&nbsp;6 20:30 confirm_accept.txt<br>
+-rw-r--r-- &nbsp; &nbsp;1 cgitest &nbsp;nobody &nbsp; &nbsp; &nbsp; &nbsp;702 Dec 
+&nbsp;6 20:33 confirm_request.txt</tt></td>
+    </tr>
+  </table><br>
+  <tt>/etc/tmda-cgi:</tt> 
+  <table>
+    <tr> 
+      <td width="600" bgcolor="#CCCCCC"><tt>cgitest:XPkY0q/9Uge9I</tt></td>
+    </tr>
+  </table><br>
+  <tt>/var/tmda/cgitest/filters/incoming:</tt> 
+  <table>
+    <tr> 
+      <td width="600" bgcolor="#CCCCCC"><tt>from-file 
+/var/tmda/cgitest/lists/blacklist reject<br>
+from-file /var/tmda/cgitest/lists/whitelist accept<br>
+from-file /var/tmda/cgitest/lists/confirmed accept</tt></td>
+    </tr>
+  </table><br>
+  <tt>/var/tmda/cgitest/filters/outgoing:</tt> 
+  <table>
+    <tr> 
+      <td width="600" bgcolor="#CCCCCC"><tt>to-file /var/tmda/cgitest/lists/whitelist 
+tag envelope dated=10d from bare<br>
+to-file /var/tmda/cgitest/lists/confirmed tag envelope dated=10d from bare</tt></td>
+    </tr>
+  </table><br>
+  <tt>/var/tmda/cgitest/templates/confirm_request.txt:</tt> 
+  <table>
+    <tr> 
+      <td width="600" bgcolor="#CCCCCC"><tt>From.US-ASCII: "%(FULLNAME)s" 
+<%(recipient_address)s><br>
+Subject.US-ASCII: Please confirm your message<br>
+Reply-To.US-ASCII: %(confirm_accept_address)s<br>
+BodyCharset: US-ASCII<br>
+&nbsp;<br>
+This message was created automatically by mail delivery software<br>
+(TMDA).<br>
+&nbsp;<br>
+Your message attached below is being held because the address<br>
+<%(confirm_append_address)s> has not been verified.<br>
+&nbsp;<br>
+To release your message for delivery, please send an empty message<br>
+to the following address, surf the following link, or use your<br>
+mailer's "Reply" feature.<br>
+&nbsp;<br>
+ &nbsp; %(confirm_accept_address)s<br>
+&nbsp;<br>
+ &nbsp; %(confirm_accept_url)s<br>
+&nbsp;<br>
+This confirmation verifies that your message is legitimate and not<br>
+junk-mail. You should only have to confirm your address once.</tt></td>
+    </tr>
+  </table><br>
+  <tt>/etc/tmdarc:</tt> 
+  <table>
+    <tr> 
+      <td width="600" bgcolor="#CCCCCC"><tt>import Util<br>
+&nbsp;<br>
+# Allow group access to critical files<br>
+ALLOW_MODE_640 = 1<br>
+os.umask(0027)<br>
+&nbsp;<br>
+# Locate important files and directories<br>
+DATADIR = "/var/tmda/%s/" % os.environ["USER"]<br>
+CONFIRM_APPEND &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = DATADIR + "lists/whitelist"<br>
+FILTER_INCOMING &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= DATADIR + "filters/incoming"<br>
+FILTER_OUTGOING &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= DATADIR + "filters/outgoing"<br>
+LOGFILE_DEBUG &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;= DATADIR + "logs/debug"<br>
+LOGFILE_INCOMING &nbsp; &nbsp; &nbsp; &nbsp; = DATADIR + "logs/in"<br>
+LOGFILE_OUTGOING &nbsp; &nbsp; &nbsp; &nbsp; = DATADIR + "logs/out"<br>
+PENDING_BLACKLIST_APPEND = DATADIR + "lists/blacklist"<br>
+PENDING_WHITELIST_APPEND = DATADIR + "lists/whitelist"<br>
+TEMPLATE_DIR &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = DATADIR + "templates/"<br>
+&nbsp;<br>
+# CGI location<br>
+CGI_URL = "http://wolfhome.com/~cgitest/index2.cgi";<br>
+<br>
+# Define X-Primary-Address key for TMDA-to-TMDA communications<br>
+ADDED_HEADERS_CLIENT = { "X-Primary-Address": "%s@%s" % \<br>
+ &nbsp;(os.environ["USER"], Util.gethostname()) }</tt></td>
+    </tr>
+  </table><br>
+  <tt>~cgitest/.qmail:</tt> 
+  <table>
+    <tr> 
+      <td width="600" bgcolor="#CCCCCC"><tt>|preline /usr/src/tmda/bin/tmda-filter -c 
+/var/tmda/cgitest/config<br>
+./Maildir/</tt></td>
+    </tr>
+  </table><br>
+</blockquote>
+<p>tmda-cgi was compiled with the following:</p>
+<blockquote> 
+  <pre>./compile -nc /var/tmda/~/config -t /www/tmda.cgi</pre>
+</blockquote>
+<p>Use the <tt>./compile -h</tt> for more details on how to use compile.</p>
+<h3>Passwords</h3>
+<p>tmda-cgi currently authenticate logins against user name &amp; password pairs 
+  stored in a password file (or files). tmda-cgi will look in two different places 
+  for password file(s), but it (they) must be readable by the CGI.</p>
+<p>If you are running in system-wide mode, the password file can be owned by root. 
+  If you are running in single-user mode, the password file can be owned by the 
+  user who will be running the CGI. If you are running in no-su mode, the file 
+  must either be owned by &quot;nobody&quot; (or whatever user your web server 
+  is configured to run as) or made globally readable See the table below for a 
+  better breakdown of your options.</p>
+<p>tmda-cgi first checks for a readable file called <tt>tmda-cgi</tt> in the same 
+  directory as the user's configuration file (if that location has been specified, 
+  otherwise it will look in <tt>~user/.tmda/tmda-cgi</tt>). It then tries 
+<tt>/etc/tmda-cgi</tt> 
+  if it can't find a match or cannot read the file. This allows the system 
+administrator 
+  to keep a list of access passwords while allowing the user to override what 
+  the sysadmin has set.</p>
+<table border="0" cellpadding="0" cellspacing="0">
+  <tr> 
+    <td width="35">&nbsp;</td>
+    <td width="10">&nbsp;</td>
+    <td>&nbsp;</td>
+    <td width="10">&nbsp;</td>
+    <td colspan="2" align="center" nowrap 
+bgcolor="#FFFFCC"><tt>~user/.tmda/tmda-cgi</tt></td>
+    <td width="10" align="center" nowrap>&nbsp;</td>
+    <td colspan="2" align="center" nowrap 
+bgcolor="#FFFFCC"><tt>/etc/tmda-cgi</tt></td>
+  </tr>
+  <tr> 
+    <td>&nbsp;</td>
+    <td>&nbsp;</td>
+    <td>&nbsp;</td>
+    <td>&nbsp;</td>
+    <td width="80" align="center" bgcolor="#FFFFCC">owner</td>
+    <td width="90" align="center" bgcolor="#FFFFCC">permissions</td>
+    <td align="center">&nbsp;</td>
+    <td width="80" align="center" bgcolor="#FFFFCC">owner</td>
+    <td width="90" align="center" bgcolor="#FFFFCC">permissions</td>
+  </tr>
+  <tr> 
+    <td>&nbsp;</td>
+    <td bgcolor="#CCFFFF">&nbsp;</td>
+    <td bgcolor="#CCFFFF">system-wide</td>
+    <td bgcolor="#CCFFFF">&nbsp;</td>
+    <td align="center" bgcolor="#CCFFCC">user</td>
+    <td align="center" bgcolor="#CCFFCC">600</td>
+    <td align="center" bgcolor="#CCFFFF">&nbsp;</td>
+    <td align="center" bgcolor="#CCFFCC">root</td>
+    <td align="center" bgcolor="#CCFFCC">600</td>
+  </tr>
+  <tr> 
+    <td>&nbsp;</td>
+    <td>&nbsp;</td>
+    <td>single-user</td>
+    <td>&nbsp;</td>
+    <td align="center" bgcolor="#FFFFCC">user</td>
+    <td align="center" bgcolor="#FFFFCC">600</td>
+    <td align="center">&nbsp;</td>
+    <td colspan="2" align="center" bgcolor="#FFFFCC">n/a</td>
+  </tr>
+  <tr> 
+    <td>&nbsp;</td>
+    <td bgcolor="#CCFFFF">&nbsp;</td>
+    <td bgcolor="#CCFFFF">no-su</td>
+    <td bgcolor="#CCFFFF">&nbsp;</td>
+    <td align="center" bgcolor="#CCFFCC">user</td>
+    <td align="center" bgcolor="#CCFFCC">644</td>
+    <td align="center" bgcolor="#CCFFFF">&nbsp;</td>
+    <td align="center" bgcolor="#CCFFCC">root<br>
+      nobody </td>
+    <td align="center" bgcolor="#CCFFCC">644<br>
+      600 </td>
+  </tr>
+  <tr> 
+    <td>&nbsp;</td>
+    <td colspan="8" align="center">File owner &amp; permission options</td>
+  </tr>
+</table>
+<p>The password file for tmda-cgi is formatted in much the same way as the password 
+  file for tofmipd. In fact, if you are using a password file with tofmipd and 
+  you wish to run tmda-cgi in system-wide mode, feel free to make a symbolic link 
+  between the two:</p>
+<blockquote> 
+  <pre> # ln -s /etc/tofmipd /etc/tmda-cgi</pre>
+</blockquote>
+<p>Password files for tmda-cgi look like:</p>
+<blockquote> 
+  <pre>&lt;user1&gt;:&lt;password1&gt;
+&lt;user2&gt;:&lt;password2&gt;</pre>
+</blockquote>
+<p>where each item in <tt>&lt;&gt;</tt> is replaced with text.</p>
+<p>The difference between this password file and the one for tofmipd is that the 
+  file does not need to have <br>
+  permissions of 400 or 600. If you, for example, are running in no-su mode, you 
+  will have to make your password file group or world readable.</p>
+<p>To keep the passwords secure, tmda-cgi will assume all passwords are DES encrypted 
+  if the file permissions are anything other than 400 or 600. Plaintext passwords 
+  will <i><b>not</b></i> work in such cases.</p>
+<p>Additionally, any entry with a blank password field, such as:</p>
+<blockquote> 
+  <pre>cantlogin:</pre>
+</blockquote>
+<p>will be prohibited from login, regardless of the file permissions.</p>
+<p><tt>contrib/cgi/genpass.py</tt> is provided for encrypted password generation. 
+  Output from <tt>genpass.py</tt> can be safely piped with <tt>&gt;</tt> or 
+<tt>&gt;&gt;</tt> 
+  into a password file. For example:</p>
+<blockquote> 
+  <pre># contrib/cgi/genpass.py joe &gt;&gt; /etc/tmda-cgi</pre>
+</blockquote>
+<p> or</p>
+<blockquote> 
+  <pre>$ contrib/cgi/genpass.py joe &gt; /home/joe/.tmda/tmda-cgi</pre>
+</blockquote>
+<p>If you encounter difficulties logging in, the problem may be a result of incorrect 
+  permissions on your password file(s). To debug this, append a <tt>?debug=1</tt> 
+  onto the end of your CGI URL. This will display some diagnostic information 
+  if the login fails instead of simply saying &quot;Wrong password. Try 
+again.&quot;</p>
+<hr>
+<h2>Configuration</h2>
+<p>tmda-cgi is configured by a set of parameters in your configuration file(s). 
+  All tmda-cgi configuration variables begin with a &quot;<tt>CGI_</tt>&quot; 
+  and are described on the <a href="config-vars.html">Configuration Variables</a> 
+  page.</p>
+<p><em><strong>Note:</strong></em> If you change nothing else, you will have to 
+  at least set the value for <a 
+href="config-vars.html#CGI_ACTIVE"><tt>CGI_ACTIVE</tt></a>.</p>
 
 </td><!-- end of body cell -->
 </tr><!-- end of sidebar/body row -->

_______________________________________
tmda-cvs mailing list
http://tmda.net/lists/listinfo/tmda-cvs

Reply via email to