diff options
| author | Sam Varshavchik | 2020-10-28 21:59:09 -0400 | 
|---|---|---|
| committer | Sam Varshavchik | 2020-10-28 21:59:09 -0400 | 
| commit | 74de3a1641232253bdefc124fb45c80b84c4c122 (patch) | |
| tree | 9f97d0693cc7b9b26ba3de898d6b6ceaef590764 | |
| parent | 808b55c10de704bfbb55f6e03e266c5383bb586a (diff) | |
| parent | 188e332e9e77f6ea03bfc9e835b198bc09d54b62 (diff) | |
| download | courier-libs-74de3a1641232253bdefc124fb45c80b84c4c122.tar.bz2 | |
Merge branch 'master'.
38 files changed, 531 insertions, 567 deletions
| diff --git a/gpglib/README.html b/gpglib/README.html index a28d1a8..7fa6078 100644 --- a/gpglib/README.html +++ b/gpglib/README.html @@ -1,193 +1,151 @@  <?xml version="1.0" encoding="iso-8859-1"?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" -      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" +    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  <html xmlns="http://www.w3.org/1999/xhtml">  <head>    <title>GnuPG support in SqWebMail</title>    <meta name="MSSmartTagsPreventParsing" content="TRUE" />  </head> - -<body text="#000000" bgcolor="#FFFFFF" link="#0000EE" vlink="#551A8B" -alink="#FF0000" xml:lang="en" lang="en"> -<!-- Copyright 1998 - 2001 Double Precision, Inc.  See COPYING for --> -<!-- distribution information. --> - -<h1>GnuPG support in <code>SqWebMail</code></h1> - -<p>Table of contents:</p> -<ul> -  <li><a href="#intro">Introduction</a><br /> -    <br /> -  </li> -  <li><a href="#require">Requirements</a><br /> -    <br /> -  </li> -  <li><a href="#implementation">Implementation</a><br /> -    <br /> -  </li> -  <li><a href="#interop">Interoperability</a><br /> -    <br /> -  </li> -  <li><a href="#passphrase">Using passphrase-protected private keys</a><br /> -    <br /> -  </li> -  <li><a href="#bugs">Bugs</a><br /> -    <br /> -  </li> -  <li><a href="#random">Important note for Linux and other systems that use +<body xml:lang="en" lang="en"> +  <!-- Copyright 1998 - 2020 Double Precision, Inc.  See COPYING for --> +  <!-- distribution information. --> +  <h1>GnuPG support in <code>SqWebMail</code></h1> +  <p>Table of contents:</p> +  <ul> +    <li><a href="#intro">Introduction</a><br /> +    <br /></li> +    <li><a href="#require">Requirements</a><br /> +    <br /></li> +    <li><a href="#implementation">Implementation</a><br /> +    <br /></li> +    <li><a href="#interop">Interoperability</a><br /> +    <br /></li> +    <li><a href="#passphrase">Using passphrase-protected private keys</a><br /> +    <br /></li> +    <li><a href="#bugs">Bugs</a><br /> +    <br /></li> +    <li><a href="#random">Important note for Linux and other systems that use      the <code>/dev/random</code> device.</a><br /> -    <br /> -  </li> -</ul> - -<h2><a name="intro" id="intro">Introduction</a></h2> - -<p>This is experimental beta of GnuPG support in <code>SqWebMail</code>. The -following functionality is available:</p> -<ul> -  <li>Create new keypairs<br /> -    <br /> -  </li> -  <li>List public/private keys<br /> -    <br /> -  </li> -  <li>Delete keys<br /> -    <br /> -  </li> -  <li>Sign keys<br /> -    <br /> -  </li> -  <li>Export keys (attach them to the current message)<br /> -    <br /> -  </li> -  <li>Import keys from messages<br /> -    <br /> -  </li> -  <li>Sign outgoing messages<br /> -    <br /> -  </li> -  <li>Encrypt outgoing messages<br /> -    <br /> -  </li> -  <li>Display and verify signed messages<br /> -    <br /> -  </li> -  <li>Decrypt encrypted messages<br /> -    <br /> -  </li> -  <li>Reply and forward encrypted messages.  Correctly handle +    <br /></li> +  </ul> +  <h2><a name="intro" id="intro">Introduction</a></h2> +  <p>The following functionality is available:</p> +  <ul> +    <li>Create new keypairs<br /> +    <br /></li> +    <li>List public/private keys<br /> +    <br /></li> +    <li>Delete keys<br /> +    <br /></li> +    <li>Sign keys<br /> +    <br /></li> +    <li>Export keys (attach them to the current message)<br /> +    <br /></li> +    <li>Import keys from messages<br /> +    <br /></li> +    <li>Sign outgoing messages<br /> +    <br /></li> +    <li>Encrypt outgoing messages<br /> +    <br /></li> +    <li>Display and verify signed messages<br /> +    <br /></li> +    <li>Decrypt encrypted messages<br /> +    <br /></li> +    <li>Reply and forward encrypted messages. Correctly handle      multipart/alternative and multipart/related.<br /> -    <br /> -  </li> -</ul> - -<p><code>SqWebMail</code> creates and manages its own keyrings. -<code>$HOME/.gnupg</code> is not used. This allows GnuPG functions to work -for virtual accounts that have no home directory.</p> - -<h2><a name="require" id="require">Requirements</a></h2> - -<p>This implementation requires GnuPG, which is used for all of the heavy -lifting.  No encryption code exists in <code>SqWebMail</code> itself. The -configuration script searches the current PATH for the <code>gpg</code> -binary. The final <code>SqWebMail</code> binary gets the hardcoded absolute -path to the <code>gpg</code> binary. If <code>gpg</code> is not found in the -current PATH, <code>/usr/bin/gpg</code> will be used. Therefore, if GnuPG is -locally installed in a non-default location, make sure that <code>gpg</code> -can be found in the current PATH.</p> - -<h2><a name="implementation" id="implementation">Implementation</a></h2> - -<p><code><code>SqWebMail</code></code> runs <code>gpg</code> automatically to -handle all the actual tasks involved in encrypting and decrypting messages. -<code>make install</code> also installs two more binaries: -<code>reformime</code> and <code>mimegpg</code>. Those binaries do some other -things, and nothing really needs to be done about them, or to them, except to -know that they're there.</p> - -<h3>The <code>webgpg</code> script</h3> -<code>make install</code> automatically installs a shell script, -<code>webgpg</code>. Encryption/decryption capabilities for all mail accounts -are disabled by default. The <code>webgpg</code> script takes one argument - -the complete pathname to a Maildir. <code>webgpg</code> creates a new -subdirectory, <code>Maildir/gpg</code>, and initializes it. Once that -subdirectory is created, encryption/decryption in <code>SqWebMail</code> will -become available for that account. Not every mail account has to have -encryption/decryption enabled. This functionality can be selectively enabled -and disabled for individual accounts. - -<p>NOTE: <code>webgpg</code> script MUST be executed by the same userid and -groupid that owns the <code>Maildir</code> directory.</p> - -<p>NOTE: The current implementation consists of the bare minimum required to -get the overall functionality.  As a result, a number of shortcuts are taken -with respect to avoiding some hoops that GnuPG occasionally requires to be -jumped through.  For example, by default GnuPG requires that a public key -must be signed before it can be used for encryption.  <code>SqWebMail</code> -will automatically provide the "always-trust" option to bypass the check. -Basically, if you have the public key in your keyring, you can use it.</p> - -<h3>Issues with adding or activating encryption for existing accounts</h3> - -<p>Obviously, encryption/decryption takes additional server CPU cycles. There -is no hard and fast rule for how much additional load is needed. Fortunately, -this is not an "all or none" deal. Encryption support can be activated in a -controlled manner and phased in gradually, in steps, allowing the impact on -the web/mail server to be closely monitored, and controlled.</p> - -<h3>Issues with adding or activating encryption for new accounts</h3> - -<p>The <code>webgpg</code> script needs to be used to initialize encryption -support for newly-created accounts.  Many systems use the -<code>/etc/skel</code> directory as a template for setting up the initial -contents of new accounts.  In that case, use run "<code>webgpg -/etc/skel/Maildir</code>", and all new accounts will have encryption -automatically activated.</p> - -<h2><a name="interop" id="interop">Interoperability</a></h2> - -<p>As of now, <code>SqWebMail</code>'s encryption/decryption is experimental. -There's not been much interoperability testing with other encryption-capable -mail software.  It is very much possible that there are some interoperability -issues that will have to be worked out.</p> - -<p>The directory <code>Maildir/gpg</code> does pretty much what -<code>$HOME/.gnupg</code> does for the command-line <code>gpg</code> tool. -<code>SqWebMail</code> does not use <code>$HOME/.gnupg</code>, it keeps its -keyrings and other GnuPG-related stuff in the <code>Maildir/gpg</code> -directory. That's because <code>SqWebMail</code> can be configured to use -both physical system accounts and virtual mail accounts, and after -authenticating, there is no difference whatsoever between the two. Therefore, -<code>SqWebMail</code> has no concept of the $HOME directory. Its entire -universe consists of the <code>Maildir</code> directory, and its contents. -<code>SqWebMail</code> is completely unaware of the existence of -<code>$HOME/.gnupg</code>, and will never be aware of it. Any keypairs in -<code>$HOME/.gnupg</code> will have to be imported into -<code>Maildir/gpg</code>.</p> - -<h3>Importing keys</h3> - -<p>Since <code>$HOME/.gnupg</code> is not used, any existing keys will have -to be imported.  If shell access is available, the <code>pubring</code> and -<code>secring</code> files can simply be copied to <code>Maildir/gpg</code>. -The following procedure can be used to import keys in all other -circumstances. The following example imports keys from mail account M to -<code>SqWebMail</code> mail account W.</p> -<ul> -  <li>Create a temporary keypair in W.<br /> -    <br /> -  </li> -  <li>Create a new message, addressed to M, attach the new public key, and +    <br /></li> +  </ul> +  <p><code>SqWebMail</code> creates and manages its own keyrings. +  <code>$HOME/.gnupg</code> is not used. This allows GnuPG functions to work +  for virtual accounts that have no home directory.</p> +  <h2><a name="require" id="require">Requirements</a></h2> +  <p>This implementation requires GnuPG, which is used for all of the heavy +  lifting. No encryption code exists in <code>SqWebMail</code> itself. The +  configuration script searches the current PATH for the <code>gpg</code> +  binary. The final <code>SqWebMail</code> binary gets the hardcoded absolute +  path to the <code>gpg</code> binary. If <code>gpg</code> is not found in the +  current PATH, <code>/usr/bin/gpg</code> will be used. Therefore, if GnuPG is +  locally installed in a non-default location, make sure that <code>gpg</code> +  can be found in the current PATH.</p> +  <h2><a name="implementation" id="implementation">Implementation</a></h2> +  <p><code>SqWebMail</code> runs <code>gpg</code> automatically to handle all +  the actual tasks involved in encrypting and decrypting messages. <code>make +  install</code> also installs two more binaries: <code>reformime</code> and +  <code>mimegpg</code>. Those binaries do some other things, and nothing really +  needs to be done about them, or to them, except to know that they're +  there.</p> +  <h3>The <code>webgpg</code> script</h3> +  <p><code>make install</code> automatically installs a shell script, +  <code>webgpg</code>. Encryption/decryption capabilities for all mail accounts +  are disabled by default. The <code>webgpg</code> script takes one argument - +  the complete pathname to a Maildir. <code>webgpg</code> creates a new +  subdirectory, <code>Maildir/gpg</code>, and initializes it. Once that +  subdirectory is created, encryption/decryption in <code>SqWebMail</code> +  becomes available for that account. Not every mail account has to have +  encryption/decryption enabled. This functionality can be selectively enabled +  and disabled for individual accounts.</p> +  <p>NOTE: <code>webgpg</code> script MUST be executed by the same userid and +  groupid that owns the <code>Maildir</code> directory.</p> +  <p>NOTE: The current implementation consists of the bare minimum required to +  get the overall functionality. As a result, a number of shortcuts are taken +  with respect to avoiding some hoops that GnuPG occasionally requires to be +  jumped through. For example, by default GnuPG requires that a public key must +  be signed before it can be used for encryption. <code>SqWebMail</code> will +  automatically provide the "always-trust" option to bypass the check. +  Basically, if you have the public key in your keyring, you can use it.</p> +  <h3>Updating existing <code>Maildir/gpg</code> with <code>webgpg</code></h3> +  <p>Running <code>webgpg</code> installs <code>gpg.conf</code> and +  <code>gpg-agent.conf</code> in the new <code>gpg</code> subdirectory, or +  replaces the existing configuration files with the default versions.</p> +  <p>Older <code>gpg</code> subdirectories had an <code>options</code> file +  instead of <code>gpg.conf</code>. <code>webgpg</code> removes any existing +  <code>options</code> file before installing <code>gpg.conf</code></p> +  <h3>Issues with adding or activating encryption for existing accounts</h3> +  <p>Obviously, encryption/decryption takes additional server CPU cycles. There +  is no hard and fast rule for how much additional load is needed. Fortunately, +  this is not an "all or none" deal. Encryption support can be activated in a +  controlled manner and phased in gradually, in steps, allowing the impact on +  the web/mail server to be closely monitored, and controlled.</p> +  <h3>Issues with adding or activating encryption for new accounts</h3> +  <p>The <code>webgpg</code> script needs to be used to initialize encryption +  support for newly-created accounts. Many systems use the +  <code>/etc/skel</code> directory as a template for setting up the initial +  contents of new accounts. In that case, use run "<code>webgpg +  /etc/skel/Maildir</code>", and all new accounts will have encryption +  automatically activated.</p> +  <h2><a name="interop" id="interop">Interoperability</a></h2> +  <p>The directory <code>Maildir/gpg</code> does pretty much what +  <code>$HOME/.gnupg</code> does for the command-line <code>gpg</code> tool. +  <code>SqWebMail</code> does not use <code>$HOME/.gnupg</code>, it keeps its +  keyrings and other GnuPG-related stuff in the <code>Maildir/gpg</code> +  directory. That's because <code>SqWebMail</code> can be configured to use +  both physical system accounts and virtual mail accounts, and after +  authenticating, there is no difference whatsoever between the two. Therefore, +  <code>SqWebMail</code> has no concept of the $HOME directory. Its entire +  universe consists of the <code>Maildir</code> directory, and its contents. +  <code>SqWebMail</code> is completely unaware of the existence of +  <code>$HOME/.gnupg</code>, and will never be aware of it. Any keypairs in +  <code>$HOME/.gnupg</code> will have to be imported into +  <code>Maildir/gpg</code>.</p> +  <h3>Importing keys</h3> +  <p>Since <code>$HOME/.gnupg</code> is not used, any existing keys will have +  to be imported. If shell access is available, the <code>pubring</code> and +  <code>secring</code> files can simply be copied to <code>Maildir/gpg</code>. +  The following procedure can be used to import keys in all other +  circumstances. The following example imports keys from mail account M to +  <code>SqWebMail</code> mail account W.</p> +  <ul> +    <li>Create a temporary keypair in W.<br /> +    <br /></li> +    <li>Create a new message, addressed to M, attach the new public key, and      send it.<br /> -    <br /> -  </li> -  <li>In M, take the new public key and import it.<br /> -    <br /> -  </li> -  <li>Export M's secret key.  With GnuPG, use the following command: -    <pre>gpg --export-secret-key --armor [fingerprint]</pre> -    <p>The output from this command looks something like this:</p> -    <pre>-----BEGIN PGP PRIVATE KEY BLOCK----- +    <br /></li> +    <li>In M, take the new public key and import it.<br /> +    <br /></li> +    <li>Export M's secret key. With GnuPG, use the following command: +      <pre>gpg --export-secret-key --armor [fingerprint]</pre> +      <p>The output from this command looks something like this:</p> +      <pre>-----BEGIN PGP PRIVATE KEY BLOCK-----  Version: GnuPG v1.0.4 (GNU/Linux)  Comment: For info see http://www.gnupg.org @@ -197,13 +155,12 @@ NAYk2I6wXguwl4MOT0ebkEWM1WS9lTsto7cCzz0ovSg3xe82PozA/4s6E5UUgl1B  ...  RQj/UASJxoPEEDHAhfZ0FYPsDFbo/P///4nDiTQk6Pz///+J2I1l+FteXcOJ9lWJ  RSBQ/3Uc/3UY/3UU/3UQ/3UM/3UI6GsAAACDxBz/dSxqBf91KGoAicP/dST8McCJ ------END PGP PRIVATE KEY BLOCK-----</pre> -    <br /> -    <br /> -  </li> -  <li>Wrap this inside a MIME-formatted mail message.  The end result should +-----END PGP PRIVATE KEY BLOCK-----</pre><br /> +      <br /> +    </li> +    <li>Wrap this inside a MIME-formatted mail message. The end result should      look something like this: -    <pre>Mime-Version: 1.0 +      <pre>Mime-Version: 1.0  Content-Type: multipart/mixed; boundary="xxx"  --xxx @@ -226,13 +183,12 @@ RQj/UASJxoPEEDHAhfZ0FYPsDFbo/P///4nDiTQk6Pz///+J2I1l+FteXcOJ9lWJ  RSBQ/3Uc/3UY/3UU/3UQ/3UM/3UI6GsAAACDxBz/dSxqBf91KGoAicP/dST8McCJ  -----END PGP PRIVATE KEY BLOCK----- ---xxx</pre> -    <br /> -    <br /> -  </li> -  <li>Encrypt the whole message using W's public key.  The end result should +--xxx</pre><br /> +      <br /> +    </li> +    <li>Encrypt the whole message using W's public key. The end result should      look something like this: -    <pre>Mime-version: 1.0 +      <pre>Mime-version: 1.0  Content-Type: multipart/encrypted;      boundary="yyy";      protocol="application/pgp-encrypted" @@ -260,98 +216,76 @@ p0vPPRbdWCOTP7WGOygpHdRMLQSCxG4m+L9uG3roG5Uu7A==  =GutI  -----END PGP MESSAGE----- ---yyy--</pre> -    <br /> -  </li> -  <li>Mail this message to W.  Repeat the procedure with M's public key -    (<code>gpg --export-key --armor).  If you're handy with composing MIME -    messages, both keys can be sent in a single encrypted message. <br /> -    <br /> -    </code></li> -  <li>In <code>SqWebMail</code>, you should be able to decrypt the message +--yyy--</pre><br /> +    </li> +    <li>Mail this message to W. Repeat the procedure with M's public key +    (<code>gpg --export-key --armor). If you're handy with composing MIME +    messages, both keys can be sent in a single encrypted message.<br /> +    <br /></code></li> +    <li>In <code>SqWebMail</code>, you should be able to decrypt the message      containing the keys, and import them.</li> -</ul> - -<h2><a name="passphrase" id="passphrase">Using passphrase-protected private -keys</a></h2> - -<p>SqWebMail can handle passphrase-protected keys only when SSL is being -used. This is an artificial restriction that prevents passphrases from going -over the network, in the clear. When SSL is used, SqWebMail will -automatically prompt for a passphrase. Leave the passphrase field empty if -the secret key is not protected by a passphrase.</p> - -<h2><a name="bugs" id="bugs">Bugs</a></h2> -<ol> -  <li>Although <code>SqWebMail</code> contains mappings for many charsets, +  </ul> +  <h2><a name="passphrase" id="passphrase">Using passphrase-protected private +  keys</a></h2> +  <p>SqWebMail can handle passphrase-protected keys only when SSL is used. This +  is an artificial restriction that prevents passphrases from going over the +  network, in the clear. When SSL is used, SqWebMail will automatically prompt +  for a passphrase. Leave the passphrase field empty if the secret key is not +  protected by a passphrase.</p> +  <h2><a name="bugs" id="bugs">Bugs</a></h2> +  <ol> +    <li>Although <code>SqWebMail</code> contains mappings for many charsets,      GnuPG versions prior to 1.0.6 know only about <code>iso-8859-1</code> and      <code>iso-8859-2</code>. All messages displayed by <code>SqWebMail</code> -    from GnuPG 1.0.5 or earlier will come out in <code>iso-8859-1</code>. <br -    /> -    <br /> -  </li> -  <li>Currently, there are no command line options in GnuPG for removing key -    signatures (is that even possible?).  You can sign keys, but can't -    "unsign" them.<br /> -    <br /> -  </li> -  <li>There has not been any/much interoperability testing with other -    GnuPG/PGP mail software.  It is entirely possible that -    <code>SqWebMail</code>'s implementation is currently not interoperable, -    and may require some tinkering as time goes by.<br /> -    <br /> -  </li> -  <li>GnuPG will always blather "Warning: secret key NOT protected" when -    using keys not protected by a passphrase. This whinge is harmless, and -    can be ignored.<br /> -    <br /> -  </li> -  <li>The error message from GnuPG for a missing passphrase is not very -    helpful: "Unable to get tty input". This is because SqWebMail runs GnuPG -    with the --no-tty flag, and provides a passphrase separately, when it's -    entered. When SqWebMail does not provide a passphrase, GnuPG complains -    that tty input is disabled.<br /> -    <br /> -  </li> -</ol> - -<h2><a name="random" id="random">Important note for Linux and other systems -that use the <code>/dev/random</code> device.</a></h2> - -<p>If GnuPG is compiled on a system that has a <code>/dev/random</code> -device, GnuPG will use the <code>/dev/random</code> device as a source for -random entropy. The <code>/dev/random</code> device driver in Linux, and in -many other implementations, creates the entropy pool from system device -driver background activity. Unfortunately, it's is not a bottomless pit of -random entropy. When the random device driver entropy pool is empty, -<code>/dev/random</code> halts until device drivers create more noise.</p> - -<p>That means that when GnuPG is used on Linux, GnuPG may pause for an -excessive period of time, and issue its famous "please do something" prompt. -Since GnuPG is invoked in automatic mode, there is no other alternative, -except to wait until more device driver noise becomes available.</p> - -<p>This is more likely to happen when GnuPG is used to create new keypairs, -especially ones that are 1024 bits, or longer. Before deploying, extensive -testing is recommended to make sure that even an idle system generates -sufficient background noise so that the additional wait is not excessive. -There are several possible solutions that can also be used:</p> -<ol> -  <li>GnuPG can be optionally configured to use a pseudo-random generator +    from GnuPG 1.0.5 or earlier will come out in <code>iso-8859-1</code>.<br /> +    <br /></li> +    <li>Currently, there are no command line options in GnuPG for removing key +    signatures (is that even possible?). You can sign keys, but can't "unsign" +    them.<br /> +    <br /></li> +    <li>GnuPG may blather "Warning: secret key NOT protected" when using keys +    not protected by a passphrase. This whinge is harmless, and can be +    ignored.<br /> +    <br /></li> +    <li>The error message from GnuPG for a missing passphrase is not very +    helpful: "Unable to get tty input", or something similar. This is because +    SqWebMail runs GnuPG with the --no-tty flag, and provides a passphrase +    separately, when it's entered. When SqWebMail does not provide a +    passphrase, GnuPG complains that tty input is disabled.<br /> +    <br /></li> +  </ol> +  <h2><a name="random" id="random">Important note for Linux and other systems +  that use the <code>/dev/random</code> device.</a></h2> +  <p>If GnuPG is compiled on a system that has a <code>/dev/random</code> +  device, GnuPG will use the <code>/dev/random</code> device as a source for +  random entropy. The <code>/dev/random</code> device driver in Linux, and in +  many other implementations, creates the entropy pool from system device +  driver background activity. Unfortunately, it's is not a bottomless pit of +  random entropy. When the random device driver entropy pool is empty, +  <code>/dev/random</code> halts until device drivers create more noise.</p> +  <p>That means that when GnuPG is used on Linux, GnuPG may pause for an +  excessive period of time, and issue its famous "please do something" prompt. +  Since GnuPG is invoked in automatic mode, there is no other alternative, +  except to wait until more device driver noise becomes available.</p> +  <p>This is more likely to happen when GnuPG is used to create new keypairs, +  especially ones that are 1024 bits, or longer. Before deploying, extensive +  testing is recommended to make sure that even an idle system generates +  sufficient background noise so that the additional wait is not excessive. +  There are several possible solutions that can also be used:</p> +  <ol> +    <li>GnuPG can be optionally configured to use a pseudo-random generator      that does not use <code>/dev/random</code>, but instead uses several -    alternative sources of random junk. Consult GnuPG's documentation for -    more information.<br /> -    <br /> -  </li> -  <li>Many systems also have a <code>/dev/urandom</code> device, which +    alternative sources of random junk. Consult GnuPG's documentation for more +    information.<br /> +    <br /></li> +    <li>Many systems also have a <code>/dev/urandom</code> device, which      automatically generates pseudo-random noise if <code>/dev/random</code>      runs out of entropy. This makes it possible to simply remove the      <code>/dev/random</code> device and create a link from      <code>/dev/random</code> to <code>/dev/urandom</code>.</li> -</ol> - -<p>Although - technically - both approaches can theoretically result in -slightly less secure keypairs, practically the difference is probably -academic in nature.</p> +  </ol> +  <p>Although - technically - both approaches can theoretically result in +  slightly less secure keypairs, practically the difference is probably +  academic in nature.</p>  </body>  </html> diff --git a/gpglib/libgpg.c b/gpglib/libgpg.c index 7bea385..85714ec 100644 --- a/gpglib/libgpg.c +++ b/gpglib/libgpg.c @@ -72,12 +72,12 @@ int libmail_gpg_cleanup()  	return (rc);  } -static char *optionfile(const char *gpgdir) +static char *optionfile(const char *gpgdir, const char *suffix)  { -	char *p=malloc(strlen(gpgdir)+sizeof("/options")); +	char *p=malloc(strlen(gpgdir)+strlen(suffix)+1);  	if (p) -		strcat(strcpy(p, gpgdir), "/options"); +		strcat(strcpy(p, gpgdir), suffix);  	return (p);  } @@ -88,7 +88,7 @@ static char *optionfile(const char *gpgdir)  int libmail_gpg_has_gpg(const char *gpgdir)  { -	char *p=optionfile(gpgdir); +	char *p=optionfile(gpgdir, "/options");  	struct stat stat_buf;  	int rc; @@ -97,6 +97,16 @@ int libmail_gpg_has_gpg(const char *gpgdir)  	rc=stat(p, &stat_buf);  	free(p); + +	if (rc) +	{ +		p=optionfile(gpgdir, "/gpg.conf"); +		if (!p) +			return -1; +		rc=stat(p, &stat_buf); +		free(p); +	} +  	if (rc == 0)  		rc=stat(GPG, &stat_buf); diff --git a/gpglib/mimegpg.sgml b/gpglib/mimegpg.sgml index 3bce16f..10fa4f3 100644 --- a/gpglib/mimegpg.sgml +++ b/gpglib/mimegpg.sgml @@ -1,7 +1,7 @@  <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">  <!-- Copyright 1998 - 2008 Double Precision, Inc.  See COPYING for -->  <!-- distribution information. --> -<refentry> +<refentry id="mimegpg">    <info><author><firstname>Sam</firstname><surname>Varshavchik</surname><contrib>Author</contrib></author><productname>Courier Mail Server</productname></info>    <refmeta> @@ -30,7 +30,7 @@      </cmdsynopsis>    </refsynopsisdiv> -  <refsect1> +  <refsect1 id="mimegpg_description">      <title>DESCRIPTION</title>      <para> @@ -74,7 +74,7 @@ used in a non-interactive mode.  As always, secret keys that are  password-protected secret keys cannot be used in the <option>--no-tty</option>  mode, unless the <option>-p</option> option is used.</para> -    <refsect2> +    <refsect2 id="mimegpg_signing_and_encrypting_messages">        <title>SIGNING AND ENCRYPTING MESSAGES</title>        <para> @@ -103,7 +103,7 @@ themselves.  However, any <literal moreinfo="none">message/rfc822</literal> MIME  messages - are encrypted/signed in their entirety, headers and content.</para>      </refsect2> -    <refsect2> +    <refsect2 id="mimegpg_decrypting_and_checking_signatures">        <title>DECRYPTING AND CHECKING SIGNATURES</title>        <para> @@ -142,7 +142,7 @@ this is what got decrypted).</para>      </refsect2>    </refsect1> -  <refsect1> +  <refsect1 id="mimegpg_see_also">      <title>SEE ALSO</title>      <para> diff --git a/gpglib/webgpg.in b/gpglib/webgpg.in index c2cc962..04f9d73 100644 --- a/gpglib/webgpg.in +++ b/gpglib/webgpg.in @@ -1,7 +1,7 @@  #! @SHELL@  #  # -# Copyright 2001 Double Precision, Inc.  See COPYING for +# Copyright 2001-2020 Double Precision, Inc.  See COPYING for  # distribution information.  #  # This scripts initializes Maildir/gpg, enabling GPG code for the given @@ -14,15 +14,24 @@ maildir="$1"  # Sanity check  test ! -d "$maildir" && echo "$maildir: not a directory" >&2 && exit 1 +test ! -d "$maildir/cur" && echo "$maildir: not a directory" >&2 && exit 1 +test ! -d "$maildir/new" && echo "$maildir: not a directory" >&2 && exit 1 +test ! -d "$maildir/tmp" && echo "$maildir: not a directory" >&2 && exit 1  umask 077 -test -d "$maildir/gpg" && echo "$maildir/gpg: already exists" >&2 && exit 1 -test -f "$maildir/gpg/options" && echo "$maildir/gpg/options: already exists" >&2 && exit 1 -mkdir $maildir/gpg || exit 1 -cat >$maildir/gpg/options <<EOF +mkdir -p $maildir/gpg || exit 1 -force-v3-sigs +if test -f $maildir/gpg/options +then +	rm -f $maildir/gpg/options +	echo "$maildir/gpg/options removed, installing gpg.conf" +fi + +cat >$maildir/gpg/gpg.conf <<EOF + +use-agent +pinentry-mode loopback  escape-from-lines  lock-once  comment "" @@ -30,10 +39,15 @@ no-secmem-warning  EOF +cat >$maildir/gpg/gpg-agent.conf <<EOF +allow-loopback-pinentry +EOF +  owner=`@PERL@ -e '@a=stat "'$maildir'"; print "$a[4]:$a[5]";'`  chown -R $owner $maildir/gpg -echo "$maildir/gpg/options created, please verify that the options are correct." +echo "$maildir/gpg/gpg.conf and gpg-agent.conf created," +echo "please verify that the options are correct."  echo "See INSTALL for more information." diff --git a/imap/ChangeLog b/imap/ChangeLog index 93caab4..24d3ebc 100644 --- a/imap/ChangeLog +++ b/imap/ChangeLog @@ -1,3 +1,9 @@ +2020-10-27  Sam Varshavchik  <mrsam@courier-mta.com> + +	* waitlib: fix testwait.c failure with LTO enabled on F33. + +	* pop3login.c: fflush before STARTLS. +  5.0.11  2020-05-18  Sam Varshavchik  <mrsam@courier-mta.com> diff --git a/imap/courierpop3d.sgml b/imap/courierpop3d.sgml index a25319c..92108e4 100644 --- a/imap/courierpop3d.sgml +++ b/imap/courierpop3d.sgml @@ -1,7 +1,7 @@  <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">  <!-- Copyright 1998 - 2009 Double Precision, Inc.  See COPYING for -->  <!-- distribution information. --> -<refentry> +<refentry id="courierpop3d">    <info><author><firstname>Sam</firstname><surname>Varshavchik</surname><contrib>Author</contrib></author><productname>Courier Mail Server</productname></info>    <refmeta> @@ -29,7 +29,7 @@      </cmdsynopsis>    </refsynopsisdiv> -  <refsect1> +  <refsect1 id="courierpop3d_description">      <title>DESCRIPTION</title>      <para> @@ -99,7 +99,7 @@ Usually, the default maildir is  "<literal moreinfo="none">./Maildir</literal>".</para>    </refsect1> -  <refsect1> +  <refsect1 id="courierpop3d_see_also">      <title>SEE ALSO</title>      <para> diff --git a/imap/imapd.sgml b/imap/imapd.sgml index e842c20..43b8ec3 100644 --- a/imap/imapd.sgml +++ b/imap/imapd.sgml @@ -1,7 +1,7 @@  <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">  <!-- Copyright 1998 - 2007 Double Precision, Inc.  See COPYING for -->  <!-- distribution information. --> -<refentry> +<refentry id="imapd">    <info><author><firstname>Sam</firstname><surname>Varshavchik</surname><contrib>Author</contrib></author><productname>Courier Mail Server</productname></info>    <refmeta> @@ -31,7 +31,7 @@      </cmdsynopsis>    </refsynopsisdiv> -  <refsect1> +  <refsect1 id="imapd_description">      <title>DESCRIPTION</title>      <para> @@ -81,7 +81,7 @@ variable, then attempts to talk IMAP on standard input and output.</para>    </refsect1> -  <refsect1> +  <refsect1 id="imapd_files_and_environment_variables">      <title>FILES AND ENVIRONMENT VARIABLES</title>      <variablelist> @@ -136,7 +136,7 @@ Other environment variables are initialized from the  These files are loaded into the environment by the system startup script  that runs <command moreinfo="none">couriertcpd</command>.</para> -    <refsect2> +    <refsect2 id="imapd_realtime_concurrent_folder_status_updates">        <title>Realtime concurrent folder status updates</title>        <para> @@ -310,7 +310,7 @@ in IDLE mode (instead of in real time).        </variablelist>      </refsect2> -    <refsect2> +    <refsect2 id="imapd_verifying_realtime_concurrent_folder_status_updates">        <title>Verifying realtime concurrent folder status updates</title>        <para>  Use the following procedure to verify that realtime concurrent folder status @@ -482,7 +482,7 @@ all terminal windows have the same <literal moreinfo="none">EXISTS</literal> mes        </orderedlist>      </refsect2>    </refsect1> -  <refsect1> +  <refsect1 id="imapd_see_also">      <title>SEE ALSO</title>      <para> diff --git a/imap/makeimapaccess.sgml b/imap/makeimapaccess.sgml index a908891..8d53284 100644 --- a/imap/makeimapaccess.sgml +++ b/imap/makeimapaccess.sgml @@ -1,7 +1,7 @@  <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">  <!-- Copyright 1998 - 2009 Double Precision, Inc.  See COPYING for -->  <!-- distribution information. --> -<refentry> +<refentry id="makeimapaccess">    <info><author><firstname>Sam</firstname><surname>Varshavchik</surname><contrib>Author</contrib></author><productname>Courier Mail Server</productname></info>    <refmeta> @@ -21,7 +21,7 @@      </cmdsynopsis>    </refsynopsisdiv> -  <refsect1> +  <refsect1 id="makeimapaccess_description">      <title>DESCRIPTION</title>      <para> @@ -46,7 +46,7 @@        describes the general format of access files.</para> -    <refsect2> +    <refsect2 id="makeimapaccess_the_imapaccess_configuration_file">        <title>The <filename>imapaccess</filename> configuration file</title>        <para> @@ -64,7 +64,7 @@      </refsect2>    </refsect1> -  <refsect1> +  <refsect1 id="makeimapaccess_see_also">      <title>SEE ALSO</title>      <para>        <ulink url="couriertcpd.html"><citerefentry><refentrytitle>couriertcpd</refentrytitle><manvolnum>8</manvolnum></citerefentry></ulink>. diff --git a/imap/mkdhparams.sgml b/imap/mkdhparams.sgml index c275829..1941278 100644 --- a/imap/mkdhparams.sgml +++ b/imap/mkdhparams.sgml @@ -1,7 +1,7 @@  <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">  <!-- Copyright 2013 Double Precision, Inc.  See COPYING for -->  <!-- distribution information. --> -<refentry> +<refentry id="mkdhparams">    <info><author><firstname>Sam</firstname><surname>Varshavchik</surname><contrib>Author</contrib></author><productname>Courier Mail Server</productname></info>    <refmeta> @@ -21,7 +21,7 @@      </cmdsynopsis>    </refsynopsisdiv> -  <refsect1> +  <refsect1 id="mkdhparams_description">      <title>DESCRIPTION</title>      <para> @@ -38,7 +38,7 @@      </para>    </refsect1> -  <refsect1> +  <refsect1 id="mkdhparams_files">      <title>FILES</title>      <variablelist> @@ -53,7 +53,7 @@      </variablelist>    </refsect1> -  <refsect1> +  <refsect1 id="mkdhparams_environment_variables">      <title>ENVIRONMENT VARIABLES</title>      <variablelist> @@ -79,7 +79,7 @@      </para>    </note> -  <refsect1> +  <refsect1 id="mkdhparams_see_also">      <title>SEE ALSO</title>      <para> diff --git a/imap/mkimapdcert.sgml b/imap/mkimapdcert.sgml index 6b1c2f8..d367e13 100644 --- a/imap/mkimapdcert.sgml +++ b/imap/mkimapdcert.sgml @@ -1,7 +1,7 @@  <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">  <!-- Copyright 2000 - 2007 Double Precision, Inc.  See COPYING for -->  <!-- distribution information. --> -<refentry> +<refentry id="mkimapdcert">    <info><author><firstname>Sam</firstname><surname>Varshavchik</surname><contrib>Author</contrib></author><productname>Courier Mail Server</productname></info>    <refmeta> @@ -21,7 +21,7 @@      </cmdsynopsis>    </refsynopsisdiv> -  <refsect1> +  <refsect1 id="mkimapdcert_description">      <title>DESCRIPTION</title>      <para> @@ -50,7 +50,7 @@ will not work if <command moreinfo="none">@certsdir@/imapd.pem</command> already    </refsect1> -  <refsect1> +  <refsect1 id="mkimapdcert_files">      <title>FILES</title>      <variablelist> @@ -74,7 +74,7 @@ create the X.509 certificate.        </varlistentry>      </variablelist>    </refsect1> -  <refsect1> +  <refsect1 id="mkimapdcert_see_also">      <title>SEE ALSO</title>      <para> diff --git a/imap/mkpop3dcert.sgml b/imap/mkpop3dcert.sgml index abd4258..137c1c4 100644 --- a/imap/mkpop3dcert.sgml +++ b/imap/mkpop3dcert.sgml @@ -1,7 +1,7 @@  <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">  <!-- Copyright 2000 - 2007 Double Precision, Inc.  See COPYING for -->  <!-- distribution information. --> -<refentry> +<refentry id="mkpop3dcert">    <info><author><firstname>Sam</firstname><surname>Varshavchik</surname><contrib>Author</contrib></author><productname>Courier Mail Server</productname></info>    <refmeta> @@ -21,7 +21,7 @@      </cmdsynopsis>    </refsynopsisdiv> -  <refsect1> +  <refsect1 id="mkpop3dcert_description">      <title>DESCRIPTION</title>      <para> @@ -50,7 +50,7 @@ will not work if <command moreinfo="none">@datadir@/pop3d.pem</command> already    </refsect1> -  <refsect1> +  <refsect1 id="mkpop3dcert_files">      <title>FILES</title>      <variablelist> @@ -74,7 +74,7 @@ create the X.509 certificate.        </varlistentry>      </variablelist>    </refsect1> -  <refsect1> +  <refsect1 id="mkpop3dcert_see_also">      <title>SEE ALSO</title>      <para> diff --git a/imap/pop3login.c b/imap/pop3login.c index 611e927..5a67fda 100644 --- a/imap/pop3login.c +++ b/imap/pop3login.c @@ -100,7 +100,7 @@ static int	starttls()  		exit(1);  	}  	close(pipefd[0]); - +	fflush(stdin);  	putenv("POP3_STARTTLS=NO");  	putenv("POP3_TLS_REQUIRED=0");  	putenv("POP3_TLS=1"); diff --git a/liblock/lockmail.sgml b/liblock/lockmail.sgml index 11d7ed7..ccc5f70 100644 --- a/liblock/lockmail.sgml +++ b/liblock/lockmail.sgml @@ -1,7 +1,7 @@  <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">  <!-- Copyright 2002-2007 Double Precision, Inc.  See COPYING for -->  <!-- distribution information. --> -<refentry> +<refentry id="lockmail">    <info><author><firstname>Sam</firstname><surname>Varshavchik</surname><contrib>Author</contrib></author><productname>Courier Mail Server</productname></info>    <refmeta> @@ -26,7 +26,7 @@      </cmdsynopsis>    </refsynopsisdiv> -  <refsect1> +  <refsect1 id="lockmail_description">      <title>DESCRIPTION</title>      <para> @@ -50,7 +50,7 @@ After the mailbox is successfully locked, <command moreinfo="none">lockmail</com  When <replaceable>program</replaceable> terminates, <command moreinfo="none">lockmail</command>  removes the mailbox lock, and terminates itself.</para>    </refsect1> -  <refsect1> +  <refsect1 id="lockmail_options">      <title>OPTIONS</title>      <variablelist> @@ -74,7 +74,7 @@ The actual timeout is rounded up to the next five second interval        </varlistentry>      </variablelist>    </refsect1> -  <refsect1> +  <refsect1 id="lockmail_description">      <title>DESCRIPTION</title>      <para>  This section briefly describes the locking mechanism used by @@ -84,7 +84,7 @@ order to maximize compatibility with other mail software:  C-Client folder locks, dot-locks, and file locks.  </para> -    <refsect2> +    <refsect2 id="lockmail_c_client_folder_locks">        <title>C-Client folder locks</title>        <para>  Mail software based on the <literal moreinfo="none">C-Client</literal> library creates @@ -114,7 +114,7 @@ that are at least five minutes old.</para>        </note>      </refsect2> -    <refsect2> +    <refsect2 id="lockmail_dot_locks">        <title>dot-locks</title>        <para>  <command moreinfo="none">lockmail</command> @@ -148,7 +148,7 @@ will be content with using file-locking only.  </para>        </note>      </refsect2> -    <refsect2> +    <refsect2 id="lockmail_file_locks">        <title>File locks</title>        <para> @@ -181,7 +181,7 @@ obtained by <command moreinfo="none">lockmail</command> expire, and are consider  as <replaceable>program</replaceable>.</para>      </refsect2>    </refsect1> -  <refsect1> +  <refsect1 id="lockmail_exit_status">      <title>EXIT STATUS</title>      <para> @@ -193,7 +193,7 @@ exit status if it was unable to obtain a lock, or if  was killed by a signal.</para>    </refsect1> -  <refsect1> +  <refsect1 id="lockmail_see_also">      <title>SEE ALSO</title>      <para> diff --git a/liblog/courierlogger.sgml b/liblog/courierlogger.sgml index 47f7014..117f431 100644 --- a/liblog/courierlogger.sgml +++ b/liblog/courierlogger.sgml @@ -36,7 +36,7 @@    </refsynopsisdiv> -  <refsect1> +  <refsect1 id="courierlogger_description">      <title>DESCRIPTION</title>      <para> @@ -69,7 +69,7 @@ captured.</para>  In either case, each read line of text is sent as a syslog message.</para>    </refsect1> -  <refsect1> +  <refsect1 id="courierlogger_options">      <title>OPTIONS</title>      <variablelist>        <varlistentry> @@ -243,7 +243,7 @@ standard input is closed.</para>      </variablelist>    </refsect1> -  <refsect1> +  <refsect1 id="courierlogger_see_also">      <title>SEE ALSO</title>      <para> diff --git a/maildir/maildiracl.sgml b/maildir/maildiracl.sgml index ae6f95a..4d1d7d2 100644 --- a/maildir/maildiracl.sgml +++ b/maildir/maildiracl.sgml @@ -1,7 +1,7 @@  <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">  <!-- Copyright 2003-2009 Double Precision, Inc.  See COPYING for -->  <!-- distribution information. --> -<refentry> +<refentry id="maildiracl">    <info><author><firstname>Sam</firstname><surname>Varshavchik</surname><contrib>Author</contrib></author><productname>Courier Mail Server</productname></info>    <refmeta> @@ -56,7 +56,7 @@    </refsynopsisdiv> -  <refsect1> +  <refsect1 id="maildiracl_description">      <title>DESCRIPTION</title>      <para> @@ -87,7 +87,8 @@ on setting up virtual shared folders.</para>        </note> -    <refsect2><title>ACL overview</title> +      <refsect2 id="maildiracl_acl_overview"> +	<title>ACL overview</title>        <para>  ACLs provide a fine-grained mechanism for controlling @@ -148,7 +149,7 @@ may add messages to this folder (either uploading them one by one,  or copying messages from another folder).</para>  	  </listitem>  	</varlistentry> -	 +  	<varlistentry>  	  <term>l</term>  	  <listitem> @@ -160,7 +161,7 @@ right on this folder, the folder is effectively invisible to  <replaceable>identifier</replaceable>.</para>  	  </listitem>  	</varlistentry> -	 +  	<varlistentry>  	  <term>r</term>  	  <listitem> @@ -173,7 +174,7 @@ knows the name of this folder, it can open it even if  right on this folder.</para>  	  </listitem>  	</varlistentry> -	 +  	<varlistentry>  	  <term>s</term>  	  <listitem> @@ -201,7 +202,7 @@ may change other status flags of messages in this folder.  May also add or remove custom keywords on individual messages.</para>  	  </listitem>  	</varlistentry> -	 +  	<varlistentry>  	  <term>x</term>  	  <listitem> @@ -213,7 +214,7 @@ mailbox's subfoler.</para>  	</varlistentry>        </variablelist> -      <refsect3> +      <refsect3 id="maildiracl_negative_rights">  	<title>Negative rights</title>  	<para> @@ -227,7 +228,7 @@ applicable <replaceable>identifier</replaceable>, than subtracting any  negative rights, as specified in the following section.</para>        </refsect3> -      <refsect3> +      <refsect3 id="maildiracl_identifiers">  	<title>Identifiers</title>  	<para> @@ -330,7 +331,7 @@ seen/unseen, which requires additional rights).</para>        </refsect3>      </refsect2>    </refsect1> -  <refsect1> +  <refsect1 id="maildiracl_options">      <title>OPTIONS</title>      <cmdsynopsis sepchar=" "> @@ -459,7 +460,7 @@ This command computes access rights <quote>tom46</quote> has on    </refsect1> -  <refsect1> +  <refsect1 id="maildiracl_irrevocable_access_rights">      <title>IRREVOCABLE ACCESS RIGHTS</title>      <para> @@ -471,7 +472,7 @@ Attempts to set access control lists, that do not include these minimum  access rights, will be rejected.</para>    </refsect1> -  <refsect1> +  <refsect1 id="maildiracl_bugs">      <title>BUGS</title>      <para> @@ -499,7 +500,7 @@ The <quote>ACL overview</quote> portion of this manual page is a  parts of ACL2 that are not implemented.</para>    </refsect1> -  <refsect1> +  <refsect1 id="maildiracl_see_also">      <title>SEE ALSO</title>      <para> diff --git a/maildir/maildirkw.sgml b/maildir/maildirkw.sgml index dcdb579..760cd1e 100644 --- a/maildir/maildirkw.sgml +++ b/maildir/maildirkw.sgml @@ -1,7 +1,7 @@  <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">  <!-- Copyright 2003-2009 Double Precision, Inc.  See COPYING for -->  <!-- distribution information. --> -<refentry> +<refentry id="maildirkw">    <info><author><firstname>Sam</firstname><surname>Varshavchik</surname><contrib>Author</contrib></author><productname>Courier Mail Server</productname></info>    <refmeta> @@ -36,7 +36,7 @@      </cmdsynopsis>    </refsynopsisdiv> -  <refsect1> +  <refsect1 id="maildirkw_description">      <title>DESCRIPTION</title>      <para> @@ -84,7 +84,7 @@ protocol extension is used, which uses case sensitive keywords.</para>    </refsect1> -  <refsect1> +  <refsect1 id="maildirkw_see_also">      <title>SEE ALSO</title>      <para> diff --git a/maildir/maildirquota.sgml b/maildir/maildirquota.sgml index d09fa52..bd73e25 100644 --- a/maildir/maildirquota.sgml +++ b/maildir/maildirquota.sgml @@ -1,7 +1,7 @@  <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">  <!-- Copyright 1998 - 2008 Double Precision, Inc.  See COPYING for -->  <!-- distribution information. --> -<refentry> +<refentry id="maildirquota">    <info><author><firstname>Sam</firstname><surname>Varshavchik</surname><contrib>Author</contrib></author><productname>Courier Mail Server</productname></info>    <refmeta> @@ -24,7 +24,7 @@    </cmdsynopsis>    </refsynopsisdiv> -  <refsect1> +  <refsect1 id="maildirquota_description">      <title>DESCRIPTION</title>      <para> @@ -54,7 +54,7 @@ Both <command moreinfo="none">maildrop</command> and  <command moreinfo="none">deliverquota</command> will observe any  <command moreinfo="none">maildirmake</command>-requested quota.</para> -    <refsect2> +    <refsect2 id="maildirquota_limitations">        <title>LIMITATIONS</title>        <para>This quota mechanism will only work as long as @@ -104,7 +104,7 @@ Your maildir quota should be chosen so that it makes sense when compared to  the maximum message size allowed by your mail server.</para>      </refsect2> -    <refsect2> +    <refsect2 id="maildirquota_folders">        <title>FOLDERS</title>        <para> @@ -123,7 +123,7 @@ Quota enforcement will not work if you do that.</para>    </refsect1> -  <refsect1> +  <refsect1 id="maildirquota_see_also">      <title>SEE ALSO</title>      <para> diff --git a/maildrop/mailbot.sgml b/maildrop/mailbot.sgml index a2e891b..d1bf7f9 100644 --- a/maildrop/mailbot.sgml +++ b/maildrop/mailbot.sgml @@ -1,7 +1,7 @@  <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">  <!-- Copyright 1998 - 2009 Double Precision, Inc.  See COPYING for -->  <!-- distribution information. --> -<refentry> +<refentry id="mailbot">    <info><author><firstname>Sam</firstname><surname>Varshavchik</surname><contrib>Author</contrib></author><productname>Courier Mail Server</productname></info>    <refmeta> @@ -35,7 +35,7 @@ if (/^Subject: *info/)      </informalexample>    </refsynopsisdiv> -  <refsect1> +  <refsect1 id="mailbot_description">      <title>DESCRIPTION</title> @@ -76,7 +76,7 @@ The <option>-M</option> option formats the  the autoresponse itself as a MIME delivery status notification.</para>    </refsect1> -  <refsect1> +  <refsect1 id="mailbot_options">      <title>OPTIONS</title>      <variablelist> @@ -574,7 +574,7 @@ Set the <literal>Subject:</literal> header on the autoresponse to        </varlistentry>      </variablelist> -    <refsect2> +    <refsect2 id="mailbot_autoreplies_from_a_maildir_folder">        <title>Autoreplies from a maildir folder</title>        <para>In <filename>.mailfilter:</filename></para> @@ -621,7 +621,7 @@ to "./Maildir"</programlisting>    </refsect1> -  <refsect1> +  <refsect1 id="mailbot_see_also">      <title>SEE ALSO</title>      <para> diff --git a/maildrop/maildropex.sgml b/maildrop/maildropex.sgml index 4dc418e..a580ddd 100644 --- a/maildrop/maildropex.sgml +++ b/maildrop/maildropex.sgml @@ -1,7 +1,7 @@  <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">  <!-- Copyright 1998 - 2010 Double Precision, Inc.  See COPYING for -->  <!-- distribution information. --> -<refentry> +<refentry id="maildropex">    <info><author><firstname>Sam</firstname><surname>Varshavchik</surname><contrib>Author</contrib></author><productname>Courier Mail Server</productname></info>    <refmeta> @@ -24,7 +24,7 @@      </informalexample>    </refsynopsisdiv> -  <refsect1> +  <refsect1 id="maildropex_description">      <title>DESCRIPTION</title>      <para> @@ -45,7 +45,7 @@ are used when <command>maildrop</command> is  invoked in embedded mode.</para>    </refsect1> -  <refsect1> +  <refsect1 id="maildropex_examples">      <title>EXAMPLES</title>      <para> @@ -287,7 +287,7 @@ a list of everyone who sent you mail (of course, that can also be determined  by examining your mailbox).</para>    </refsect1> -  <refsect1> +  <refsect1 id="maildropex_see_also">      <title>SEE ALSO</title>      <para> diff --git a/maildrop/maildropfilter.sgml b/maildrop/maildropfilter.sgml index 8557f41..c329358 100644 --- a/maildrop/maildropfilter.sgml +++ b/maildrop/maildropfilter.sgml @@ -1,7 +1,7 @@  <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">  <!-- Copyright 1998 - 2014 Double Precision, Inc.  See COPYING for -->  <!-- distribution information. --> -<refentry> +<refentry id="maildropfilter">    <info><author><firstname>Sam</firstname><surname>Varshavchik</surname><contrib>Author</contrib></author><productname>Courier Mail Server</productname></info>    <refmeta> @@ -25,7 +25,7 @@      </informalexample>    </refsynopsisdiv> -  <refsect1> +  <refsect1 id="maildropfilter_description">      <title>DESCRIPTION</title>      <para> @@ -54,7 +54,7 @@        syntax errors will not cause mail to be bounced back if the error is caught        and fixed quickly.</para> -    <refsect2> +    <refsect2 id="maildropfilter_environment">        <title>Environment</title>        <para>  	<anchor id="environment"/> @@ -160,7 +160,7 @@ DEFAULT=$SAVEDEFAULT  	by the <systemitem class="resource">filter file</systemitem>, are reflected in the exported environment.</para>      </refsect2> -    <refsect2> +    <refsect2 id="maildropfilter_lexical_structure">        <title>Lexical structure</title>        <para> @@ -183,7 +183,7 @@ DEFAULT=$SAVEDEFAULT  	  backslash character.</para></note>      </refsect2> -    <refsect2> +    <refsect2 id="maildropfilter_literal_text">        <title>Literal text</title>        <para>  	Literal text in the <command>maildrop</command> filtering language is @@ -218,8 +218,7 @@ FOOBAR="Foo"'bar'      </refsect2> -    <refsect2> - +    <refsect2 id="maildropfilter_variable_substitution">        <title>Variable substitution</title>        <para> @@ -277,7 +276,7 @@ MAILBOX="${HOME-WORD}/Mailbox"      </refsect2> -    <refsect2> +    <refsect2 id="maildropfilter_command_line_arguments">        <title>Command line arguments</title>        <para> @@ -288,7 +287,7 @@ MAILBOX="${HOME-WORD}/Mailbox"  	may use those variables just like any other variables.</para>      </refsect2> -    <refsect2> +    <refsect2 id="maildropfilter_predefined_variables">        <title>Predefined variables</title>        <anchor id="predefined"/>        <para> @@ -429,8 +428,7 @@ MAILBOX="${HOME-WORD}/Mailbox"        </variablelist>      </refsect2> -    <refsect2> - +    <refsect2 id="maildropfilter_other_special_variables">        <title>Other special variables</title>        <para>  	The following variables are automatically used by <command>maildrop</command> when the @@ -521,8 +519,7 @@ MAILBOX="${HOME-WORD}/Mailbox"        </variablelist>      </refsect2> -    <refsect2> - +    <refsect2 id="maildropfilter_unquoted_text">        <title>Unquoted text</title>        <para> @@ -572,8 +569,7 @@ TEXT="This is a long \  	removed, resulting in "This is a long text string".</para>      </refsect2> -    <refsect2> - +    <refsect2 id="maildropfilter_command_substitution">        <title>Command substitution</title>        <para> @@ -599,7 +595,7 @@ DIR=`ls`  	made available to the command on standard input.</para>      </refsect2> -    <refsect2> +    <refsect2 id="maildropfilter_patterns">        <title>Patterns</title>        <anchor id="patterns"/> @@ -696,7 +692,7 @@ DIR=`ls`        </itemizedlist>      </refsect2> -    <refsect2> +    <refsect2 id="maildropfilter_pattern_options">        <title>Pattern options</title>        <anchor id="options"/> @@ -755,7 +751,7 @@ DIR=`ls`  	are silently combined into a single line, before the pattern is applied.</para>      </refsect2> -    <refsect2> +    <refsect2 id="maildropfilter_mime_encoding">        <title>MIME encoding</title>        <para> @@ -775,7 +771,7 @@ DIR=`ls`  	message (with a Mime-Version: 1.0 header).        </para>      </refsect2> -    <refsect2> +    <refsect2 id="maildropfilter_weighted_scoring">        <title>Weighted scoring</title>        <para> @@ -821,8 +817,7 @@ DIR=`ls`        </note>      </refsect2> -    <refsect2> - +    <refsect2 id="maildropfilter_pattern_match_results">        <title>Pattern Match Results</title>        <anchor id="patmatch"/> @@ -915,8 +910,7 @@ From: postmaster@localhost        </itemizedlist>      </refsect2> -    <refsect2> - +    <refsect2 id="maildropfilter_expressions">        <title>Expressions</title>        <para> @@ -926,7 +920,7 @@ From: postmaster@localhost  	converted to numbers, then the results of a mathematical operation is  	converted back into a text literal.</para> -      <refsect3> +      <refsect3 id="maildropfilter_operators">  	<title>Operators</title>  	<para> @@ -951,7 +945,7 @@ From: postmaster@localhost  	</blockquote>        </refsect3> -      <refsect3> +      <refsect3 id="maildropfilter_variable_assignment">  	<title>Variable assignment</title>  	<anchor id="assign"/> @@ -980,7 +974,7 @@ VARIABLE=<replaceable>expression</replaceable>        </refsect3> -      <refsect3> +      <refsect3 id="maildropfilter_cc___deliver_a_copy_of_the_message">  	<title>cc - deliver a copy of the message</title>  	<anchor id="cc"/> @@ -1016,7 +1010,7 @@ cc <replaceable>expression</replaceable>  	  code.</para>        </refsect3> -      <refsect3> +      <refsect3 id="maildropfilter_dotlock___create_a_manual_dot_lock">  	<title>dotlock - create a manual dot-lock</title>  	<anchor id="dotlock"/> @@ -1070,7 +1064,7 @@ dotlock <replaceable>expression</replaceable> {  	</note>        </refsect3> -      <refsect3> +      <refsect3 id="maildropfilter_echo___output_diagnostic_information">  	<title>echo - output diagnostic information</title>  	<anchor id="echo"/> @@ -1092,7 +1086,7 @@ echo <replaceable>expression</replaceable>  	  terminated with a \c, no newline will be printed.</para>        </refsect3> -      <refsect3> +      <refsect3 id="maildropfilter_exception___trap_fatal_errors">  	<title>exception - trap fatal errors</title>  	<anchor id="exception"/> @@ -1119,8 +1113,7 @@ exception {  	  resume immediately following the <command>exception</command> clause.</para>        </refsect3> -      <refsect3> - +      <refsect3 id="maildropfilter_exit___terminate_filtering_unconditionally">  	<title>exit - terminate filtering unconditionally</title>  	<anchor id="exit"/> @@ -1146,7 +1139,7 @@ exit  	  delivery instructions are not allowed.</para>        </refsect3> -      <refsect3> +      <refsect3 id="maildropfilter_flock___create_an_manual_flock___lock">  	<title>flock - create an manual flock() lock</title>  	<anchor id="flock"/> @@ -1194,7 +1187,7 @@ flock <replaceable>expression</replaceable> {  	</note>        </refsect3> -      <refsect3> +      <refsect3 id="maildropfilter_foreach___iterate_over_text_sections_matched_by_a_pattern">  	<title>foreach - iterate over text sections matched by a pattern</title>  	<blockquote>  	  <informalexample> @@ -1240,7 +1233,7 @@ foreach (expression) =~ /pattern/:options  	</para>        </refsect3> -      <refsect3> +      <refsect3 id="maildropfilter_if___conditional_execution">  	<title>if - conditional execution</title>  	<anchor id="if"/>  	<blockquote> @@ -1357,7 +1350,7 @@ elsif (<replaceable>expression</replaceable>)  	</para>        </refsect3> -      <refsect3> +      <refsect3 id="maildropfilter_import___access_original_environment_variable">  	<title>import - access original environment variable</title>  	<anchor id="import"/>  	<blockquote> @@ -1430,7 +1423,7 @@ PATH is /home/root/bin:/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin  	  <command>import</command> statement shows what it was.</para>        </refsect3> -      <refsect3> +      <refsect3 id="maildropfilter_include___execute_filtering_instructions_from_another_file">  	<title>include - execute filtering instructions from another file</title>  	<anchor id="include"/> @@ -1461,7 +1454,7 @@ include <replaceable>expression</replaceable>  	  code of <errorcode>EX_TEMPFAIL</errorcode>.</para>        </refsect3> -      <refsect3> +      <refsect3 id="maildropfilter_log__logfile___log_message_deliveries">  	<title>log, logfile - log message deliveries</title>  	<anchor id="log"/>  	<blockquote> @@ -1499,7 +1492,7 @@ log <replaceable>expression</replaceable>  	  standard output.</para>        </refsect3> -      <refsect3> +      <refsect3 id="maildropfilter_system___execute_a_system_command">  	<title>system - execute a system command</title>  	<anchor id="system"/> @@ -1521,7 +1514,7 @@ system <replaceable>expression</replaceable>  	   <command>maildrop</command>.</para>        </refsect3> -      <refsect3> +      <refsect3 id="maildropfilter_to___deliver_message_to_a_mailbox">  	<title>to - deliver message to a mailbox</title>  	<anchor id="to"/>  	<blockquote> @@ -1585,7 +1578,7 @@ to <replaceable>expression</replaceable>  	  delivering the message to the file.</para>        </refsect3> -      <refsect3> +      <refsect3 id="maildropfilter_while___repeatedly_execute_a_block_of_statements">  	<title>while - repeatedly execute a block of statements</title>  	<anchor id="while"/>  	<blockquote> @@ -1608,7 +1601,7 @@ while (<replaceable>expression</replaceable>)  	  the while loop is over. Take care to avoid infinite loops.</para>        </refsect3> -      <refsect3> +      <refsect3 id="maildropfilter_xfilter___filter_message_through_another_program">  	<title>xfilter - filter message through another program</title>  	<anchor id="xfilter"/> @@ -1632,7 +1625,7 @@ xfilter <replaceable>expression</replaceable>  	  <errorcode>EX_TEMPFAIL</errorcode>.</para>        </refsect3> -      <refsect3> +      <refsect3 id="maildropfilter______logical_or">  	<title>|| - logical or</title>  	<blockquote> @@ -1657,7 +1650,7 @@ xfilter <replaceable>expression</replaceable>  	  logical false value. Anything else is a logical true value.</para>        </refsect3> -      <refsect3> +      <refsect3 id="maildropfilter__amp__amp____logical_and">  	<title>&& - logical and</title>  	<blockquote> @@ -1683,7 +1676,7 @@ xfilter <replaceable>expression</replaceable>        </refsect3> -      <refsect3> +      <refsect3 id="maildropfilter__lt____lt_____gt____gt_______________numerical_comparison">  	<title><, <=, >, >=, ==, !=   - numerical comparison</title>  	<blockquote> @@ -1720,7 +1713,7 @@ xfilter <replaceable>expression</replaceable>  	</note>        </refsect3> -      <refsect3> +      <refsect3 id="maildropfilter_lt__le__gt__ge__eq__ne___text_comparison">  	<title>lt, le, gt, ge, eq, ne - text comparison</title>  	<blockquote> @@ -1758,7 +1751,7 @@ xfilter <replaceable>expression</replaceable>  	</note>        </refsect3> -      <refsect3> +      <refsect3 id="maildropfilter_____bitwise_or">  	<title>| - bitwise or</title>  	<blockquote> @@ -1775,7 +1768,7 @@ xfilter <replaceable>expression</replaceable>  	  right hand side.</para>        </refsect3> -      <refsect3> +      <refsect3 id="maildropfilter__amp____bitwise_and">  	<title>& - bitwise and</title>  	<blockquote> @@ -1792,7 +1785,7 @@ xfilter <replaceable>expression</replaceable>  	  right hand side.</para>        </refsect3> -      <refsect3> +      <refsect3 id="maildropfilter______________numerical_operations">  	<title>+, -, *, / - numerical operations</title>  	<blockquote> @@ -1815,8 +1808,7 @@ xfilter <replaceable>expression</replaceable>        </refsect3> -      <refsect3> - +      <refsect3 id="maildropfilter_____pattern__options___pattern_match_against_string">  	<title>=~ /pattern/:options - pattern match against string</title>  	<blockquote> @@ -1839,7 +1831,7 @@ xfilter <replaceable>expression</replaceable>  	<para>  	  See "<ulink url="#patterns">Patterns</ulink>" for more information.</para>        </refsect3> -      <refsect3> +      <refsect3 id="maildropfilter__pattern__options___pattern_match_against_message">  	<title>/pattern/:options - pattern match against message</title>  	<blockquote> @@ -1859,7 +1851,7 @@ xfilter <replaceable>expression</replaceable>  	  See "<ulink url="#patterns">Patterns</ulink>" for more information.</para>        </refsect3> -      <refsect3> +      <refsect3 id="maildropfilter________logical_bitwise_not_operator_">  	<title>!, ~ - logical/bitwise not operator.</title>  	<blockquote> @@ -1893,7 +1885,7 @@ xfilter <replaceable>expression</replaceable>  	  result.</para>        </refsect3> -      <refsect3> +      <refsect3 id="maildropfilter_escape_string____escape_special_characters_in_a_string_">  	<title>escape(string) - escape special characters in a string.</title>  	<blockquote>  	  <informalexample> @@ -1960,9 +1952,8 @@ if ( /^From:\s*(.*)/ )  	  result in fewer surprises.</para>        </refsect3> -      <refsect3> -	<title>gdbmopen, gdbmclose, gdbmfetch, gdbmstore - GDBM support in -	  <command>maildrop</command></title> +      <refsect3 id="maildropfilter_gdbmopen__gdbmclose__gdbmfetch__gdbmstore___gdbm_support_in_maildrop"> +	<title>gdbmopen, gdbmclose, gdbmfetch, gdbmstore - GDBM support in <command>maildrop</command></title>  	<para>  	  These functions provide support for GDBM database files. See <ulink url="maildropgdbm.html"><citerefentry><refentrytitle>maildropgdbm</refentrytitle><manvolnum>5</manvolnum></citerefentry></ulink>  	  for more information.</para> @@ -1975,7 +1966,7 @@ if ( /^From:\s*(.*)/ )  	</note>        </refsect3> -      <refsect3> +      <refsect3 id="maildropfilter_getaddr_string____extract_rfc_2822_addresses_from_a_header_">  	<title>getaddr(string) - extract RFC 2822 addresses from a header.</title>  	<anchor id="getaddr"/> @@ -2053,7 +2044,7 @@ foreach /^(To|Cc): .*/  	</note>        </refsect3> -      <refsect3> +      <refsect3 id="maildropfilter_hasaddr_string____search_for_an_address_">  	<title>hasaddr(string) - Search for an address.</title>  	<blockquote>  	  <informalexample> @@ -2086,7 +2077,7 @@ if ( hasaddr(<replaceable>string</replaceable>) )  	  of the address may be (but is not required to be) case sensitive.</para>        </refsect3> -      <refsect3> +      <refsect3 id="maildropfilter_length__string____length_of_a_string">  	<title>length (string) - length of a string</title>  	<blockquote>  	  <informalexample> @@ -2104,7 +2095,7 @@ if (length(<replaceable>string</replaceable>) > 80)  	  <replaceable>string</replaceable>.</para>        </refsect3> -      <refsect3> +      <refsect3 id="maildropfilter_lookup__expr___filename____options_____read_file_for_patterns">  	<title>lookup (expr, 'filename', 'options') - read file for patterns</title>  	<blockquote> @@ -2182,7 +2173,7 @@ friend@public  	</note>        </refsect3> -      <refsect3> +      <refsect3 id="maildropfilter_substr_string_start___count_____return_substring">  	<title>substr(string,start [,count]) - return substring</title>  	<blockquote> @@ -2203,7 +2194,7 @@ foo=substr($foo, 1, 10)  	  trimmed.</para>        </refsect3> -      <refsect3> +      <refsect3 id="maildropfilter_time___return_current_time">  	<title>time - return current time</title>  	<blockquote> @@ -2221,7 +2212,7 @@ foo=time  	  for an example of using the <function>time</function> function.</para>        </refsect3> -      <refsect3> +      <refsect3 id="maildropfilter_tolower_string____convert_string_to_lowercase_">  	<title>tolower(string) - Convert string to lowercase.</title>  	<blockquote> @@ -2238,7 +2229,7 @@ foo=tolower(<replaceable>string</replaceable>)  	  replaced by lowercase characters.</para>        </refsect3> -      <refsect3> +      <refsect3 id="maildropfilter_toupper_string____convert_string_to_uppercase_">  	<title>toupper(string) - Convert string to uppercase.</title>  	<blockquote> @@ -2256,7 +2247,7 @@ foo=toupper(<replaceable>string</replaceable>)        </refsect3>      </refsect2> -    <refsect2> +    <refsect2 id="maildropfilter_statements">        <title>Statements</title>        <para> @@ -2275,7 +2266,7 @@ foo=toupper(<replaceable>string</replaceable>)      </refsect2>    </refsect1> -  <refsect1> +  <refsect1 id="maildropfilter_bugs">      <title>BUGS</title>      <para> @@ -2289,7 +2280,7 @@ foo=toupper(<replaceable>string</replaceable>)        it's not in too many cases, so there.</para>    </refsect1> -  <refsect1> +  <refsect1 id="maildropfilter_see_also">      <title>SEE ALSO</title>      <para> diff --git a/maildrop/maildropgdbm.sgml b/maildrop/maildropgdbm.sgml index 4033fd6..702f725 100644 --- a/maildrop/maildropgdbm.sgml +++ b/maildrop/maildropgdbm.sgml @@ -1,7 +1,7 @@  <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">  <!-- Copyright 1998 - 2007 Double Precision, Inc.  See COPYING for -->  <!-- distribution information. --> -<refentry> +<refentry id="maildropgdbm">    <info><author><firstname>Sam</firstname><surname>Varshavchik</surname><contrib>Author</contrib></author><productname>Courier Mail Server</productname></info>    <refmeta> @@ -29,7 +29,7 @@ gdbmstore(key,value)      </informalexample>    </refsynopsisdiv> -  <refsect1> +  <refsect1 id="maildropgdbm_description">      <title>DESCRIPTION</title>      <para>  The gdbm family of functions provides access to the GDBM library - a library @@ -62,8 +62,7 @@ are unique. After storing an arbitrary key/value pair in the GDBM file, the  value associated with the given key can be quickly located and  retrieved.</para> -    <refsect2> - +    <refsect2 id="maildropgdbm_gdbmclose___close_gdbm_file">        <title>gdbmclose - close gdbm file</title>        <blockquote> @@ -78,7 +77,7 @@ gdbmclose  This function closes the current GDBM file.</para>      </refsect2> -    <refsect2> +    <refsect2 id="maildropgdbm_gdbmfetch___retrieve_data">        <title>gdbmfetch - retrieve data</title>        <blockquote> @@ -170,7 +169,7 @@ of time to complete.</para>        </note>      </refsect2> -    <refsect2> +    <refsect2 id="maildropgdbm_gdbmopen___open_gdbm_file">        <title>gdbmopen - open gdbm file</title>        <blockquote> @@ -244,8 +243,7 @@ The gdbmopen function returns 0 if the GDBM file was successfully opened,  non-zero otherwise.</para>      </refsect2> -    <refsect2> - +    <refsect2 id="maildropgdbm_gdbmstore___store_data">        <title>gdbmstore - store data</title>        <blockquote> diff --git a/maildrop/makedat.sgml b/maildrop/makedat.sgml index 4a8ffa9..6b69b56 100644 --- a/maildrop/makedat.sgml +++ b/maildrop/makedat.sgml @@ -1,7 +1,7 @@  <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">  <!-- Copyright 1998 - 2007 Double Precision, Inc.  See COPYING for -->  <!-- distribution information. --> -<refentry> +<refentry id="makedat">    <info><author><firstname>Sam</firstname><surname>Varshavchik</surname><contrib>Author</contrib></author><productname>Courier Mail Server</productname></info>    <refmeta> @@ -25,7 +25,7 @@      </cmdsynopsis>    </refsynopsisdiv> -  <refsect1> +  <refsect1 id="makedat_description">      <title>DESCRIPTION</title>      <para> @@ -109,7 +109,7 @@ Perl module to be installed separately. Download Net::CIDR from    </refsect1> -  <refsect1> +  <refsect1 id="makedat_bugs">      <title>BUGS</title>      <para> @@ -120,7 +120,7 @@ later.</para>    </refsect1> -  <refsect1> +  <refsect1 id="makedat_example">      <title>EXAMPLE</title>      <informalexample>        <programlisting format="linespecific"> @@ -134,7 +134,7 @@ Takes <filename moreinfo="none">blacklist</filename>, and creates  <filename moreinfo="none">/etc/mail/blacklist.tmp</filename> as a temporary file.</para>    </refsect1> -  <refsect1> +  <refsect1 id="makedat_see_also">      <title>SEE ALSO</title>      <para> diff --git a/maildrop/reformail.sgml b/maildrop/reformail.sgml index da6ff05..4413c3f 100644 --- a/maildrop/reformail.sgml +++ b/maildrop/reformail.sgml @@ -1,7 +1,7 @@  <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">  <!-- Copyright 1998 - 2007 Double Precision, Inc.  See COPYING for -->  <!-- distribution information. --> -<refentry> +<refentry id="reformail">    <info><author><firstname>Sam</firstname><surname>Varshavchik</surname><contrib>Author</contrib></author><productname>Courier Mail Server</productname></info>    <refmeta> @@ -49,7 +49,7 @@      </sidebar>    </refsynopsisdiv> -  <refsect1> +  <refsect1 id="reformail_description">      <title>DESCRIPTION</title>  <para> @@ -57,7 +57,7 @@ The <command>reformail</command> program reads a message on standard input,  reformats it  in some way, and writes the message to standard output:</para> -    <refsect2> +    <refsect2 id="reformail_splitting_mailboxes_into_individual_messages">        <title>Splitting mailboxes into individual messages</title>        <para> @@ -81,7 +81,7 @@ If <envar>FILENO</envar> is set to a non-numeric value,  <envar>FILENO</envar> will remain unchanged.</para>      </refsect2> -    <refsect2> +    <refsect2 id="reformail_detecting_duplicate_messages">        <title>Detecting duplicate messages</title>        <para> @@ -107,7 +107,7 @@ the cache file,      </refsect2> -    <refsect2> +    <refsect2 id="reformail_extracting_headers">        <title>Extracting headers</title>        <para> @@ -127,7 +127,7 @@ follows:</para>      </refsect2>    </refsect1> -  <refsect1> +  <refsect1 id="reformail_options">      <title>OPTIONS</title>      <variablelist> @@ -248,7 +248,7 @@ remove all occurrences except the last one.</para>      </variablelist>    </refsect1> -  <refsect1> +  <refsect1 id="reformail_autoreplies">      <title>AUTOREPLIES</title>      <anchor id="Autoreplies"/> @@ -259,7 +259,7 @@ remove all occurrences except the last one.</para>      </para>    </refsect1> -  <refsect1> +  <refsect1 id="reformail_bugs">      <title>BUGS</title>      <para> @@ -276,7 +276,7 @@ It's better to run <option>reformail</option> several times (use a pipe,  perhaps).</para>    </refsect1> -  <refsect1> +  <refsect1 id="reformail_see_also">      <title>SEE ALSO</title>      <para> diff --git a/rfc2045/makemime.sgml b/rfc2045/makemime.sgml index e32a9c4..b89b513 100644 --- a/rfc2045/makemime.sgml +++ b/rfc2045/makemime.sgml @@ -1,7 +1,7 @@  <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">  <!-- Copyright 2001-2007 Double Precision, Inc.  See COPYING for -->  <!-- distribution information. --> -<refentry> +<refentry id="makemime">    <info><author><firstname>Sam</firstname><surname>Varshavchik</surname><contrib>Author</contrib></author><productname>Courier Mail Server</productname></info>    <refmeta> @@ -27,7 +27,7 @@      </cmdsynopsis>    </refsynopsisdiv> -  <refsect1> +  <refsect1 id="makemime_description">      <title>DESCRIPTION</title>      <para> @@ -80,7 +80,7 @@ available to be used as an input file (which must be explicitly specified  by one of the options). Of course, only one input file can come from a single  pipe.</para> -    <refsect2> +    <refsect2 id="makemime_mime_overview">  <title>MIME overview</title>        <para> @@ -182,7 +182,7 @@ sections also exist, and their usage is defined by their respective  RFCs.</para>      </refsect2> -    <refsect2> +    <refsect2 id="makemime_creating_a_single_mime_section">        <title>Creating a single MIME section</title>        <cmdsynopsis sepchar=" "> @@ -271,7 +271,7 @@ options must follow the <option>-c</option> option.</para>        </note>      </refsect2> -    <refsect2> +    <refsect2 id="makemime_creating_a_multipart_mime_collection">        <title>Creating a multipart MIME collection</title>        <cmdsynopsis sepchar=" "> @@ -309,7 +309,7 @@ The collection is written to standard output, or the pipe or  to <replaceable>outputfile</replaceable>.</para>      </refsect2> -    <refsect2> +    <refsect2 id="makemime_creating_a_multipart_mime_section">        <title>Creating a multipart MIME section</title>        <cmdsynopsis sepchar=" "> @@ -353,7 +353,7 @@ headers may confuse <command moreinfo="none">makemime</command>, and it may not  handle them.</para>      </refsect2> -    <refsect2> +    <refsect2 id="makemime_recursive_mime_collections">  <title>Recursive MIME collections</title>        <para> @@ -413,7 +413,7 @@ Just add the  course), and send it on its way.</para>      </refsect2> -    <refsect2> +    <refsect2 id="makemime_building_complex_mime_encodings">        <title>Building complex MIME encodings</title>        <para> @@ -571,7 +571,7 @@ An equivalent argument file would be:</para>      </refsect2>    </refsect1> -  <refsect1> +  <refsect1 id="makemime_see_also">      <title>SEE ALSO</title>      <para> diff --git a/rfc2045/reformime.sgml b/rfc2045/reformime.sgml index 84f6ea5..c6becff 100644 --- a/rfc2045/reformime.sgml +++ b/rfc2045/reformime.sgml @@ -1,7 +1,7 @@  <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">  <!-- Copyright 1998 - 2010 Double Precision, Inc.  See COPYING for -->  <!-- distribution information. --> -<refentry> +<refentry id="reformime">    <info><author><firstname>Sam</firstname><surname>Varshavchik</surname><contrib>Author</contrib></author><productname>Courier Mail Server</productname></info>    <refmeta> @@ -22,7 +22,7 @@      </cmdsynopsis>    </refsynopsisdiv> -  <refsect1> +  <refsect1 id="reformime_description">      <title>DESCRIPTION</title>      <para>  <command>reformime</command> is a utility for reformatting @@ -92,7 +92,7 @@ Here's the output from      <para>  Arbitrarily complex MIME constructs are possible.</para>    </refsect1> -  <refsect1> +  <refsect1 id="reformime_options">      <title>OPTIONS</title>      <variablelist> @@ -237,7 +237,7 @@ Pipe the contents of the indicated MIME section to a program.</para>        </varlistentry>      </variablelist> -    <refsect2> +    <refsect2 id="reformime_extracting_rfc_2045_mime_section_s__to_file_s_">        <title>Extracting RFC 2045 MIME section(s) to file(s)</title>        <para> @@ -326,7 +326,7 @@ content that usually precedes a binary attachment.</para>        </note>      </refsect2> -    <refsect2> +    <refsect2 id="reformime_adding_rfc_2045_mime_headers">        <title>Adding RFC 2045 MIME headers</title>        <para> @@ -364,7 +364,7 @@ mail delivery, as a delivery failure may occur.        </para>      </refsect2> -    <refsect2> +    <refsect2 id="reformime_creating_multipart_digest_mime_digests">        <title>Creating <literal>multipart/digest</literal> MIME digests</title>        <para>The <option>-m</option> option creates a MIME digest. @@ -376,7 +376,7 @@ presumed to contain an RFC 2822-formatted message.  and writes it to standard output.</para>      </refsect2> -    <refsect2> +    <refsect2 id="reformime_translating_mime_headers">        <title>Translating MIME headers</title>        <para> @@ -470,7 +470,7 @@ is a structured header with RFC 2822 addresses.</para>      </refsect2>    </refsect1> -  <refsect1> +  <refsect1 id="reformime_see_also">      <title>SEE ALSO</title>      <para> diff --git a/rfc2045/rfc2045.sgml b/rfc2045/rfc2045.sgml index 788b21c..e65ffeb 100644 --- a/rfc2045/rfc2045.sgml +++ b/rfc2045/rfc2045.sgml @@ -1,7 +1,7 @@  <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">  <!-- Copyright 2001-2007 Double Precision, Inc.  See COPYING for -->  <!-- distribution information. --> -<refentry> +<refentry id="rfc2045">    <info><author><firstname>Sam</firstname><surname>Varshavchik</surname><contrib>Author</contrib></author><productname>Courier Mail Server</productname></info>    <refmeta> @@ -27,7 +27,7 @@ cc ... -lrfc2045 -lrfc822      </informalexample>    </refsynopsisdiv> -  <refsect1> +  <refsect1 id="rfc2045_description">      <title>DESCRIPTION</title>      <para> @@ -43,7 +43,7 @@ The rfc2045 library is used to:</para>      <para>  3) Optionally rewrite and reformat the message.</para> -    <refsect2> +    <refsect2 id="rfc2045_creating_an_rfc2045_structure">        <title>Creating an rfc2045 structure</title>        <informalexample>  	<programlisting format="linespecific"> @@ -123,8 +123,7 @@ function <function moreinfo="none">rfc2045_free</function>() deallocates and des  structure.</para>      </refsect2> -    <refsect2> - +    <refsect2 id="rfc2045_structure_of_a_mime_message">        <title>Structure of a MIME message</title>        <informalexample> @@ -229,7 +228,7 @@ ignored, and skipped over, when traversing the  <structname>rfc2045</structname> tree.</para>      </refsect2> -    <refsect2> +    <refsect2 id="rfc2045_basic_mime_information">        <title>Basic MIME information</title>        <informalexample> @@ -411,7 +410,7 @@ NULL, or an empty string.</para>      </refsect2> -    <refsect2> +    <refsect2 id="rfc2045_decoding_a_mime_section">        <title>Decoding a MIME section</title>        <informalexample> @@ -473,7 +472,7 @@ immediately stops and  <function moreinfo="none">rfc2045_cdecode</function>() or <function moreinfo="none">rfc2045_cdecode_end</function>() terminates with <function moreinfo="none">callback_func</function>'s return code.</para>      </refsect2> -    <refsect2> +    <refsect2 id="rfc2045_rewriting_mime_messages">        <title>Rewriting MIME messages</title>        <para> @@ -567,7 +566,7 @@ by <parameter moreinfo="none">appname</parameter>.</para>      </refsect2>    </refsect1> -  <refsect1> +  <refsect1 id="rfc2045_see_also">      <title>SEE ALSO</title>      <para> diff --git a/rfc822/rfc822.sgml b/rfc822/rfc822.sgml index f0d7c93..9255850 100644 --- a/rfc822/rfc822.sgml +++ b/rfc822/rfc822.sgml @@ -1,7 +1,7 @@  <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">  <!-- Copyright 2001-2007 Double Precision, Inc.  See COPYING for -->  <!-- distribution information. --> -<refentry> +<refentry id="rfc822">    <info><author><firstname>Sam</firstname><surname>Varshavchik</surname><contrib>Author</contrib></author><productname>Courier Mail Server</productname></info>    <refmeta> @@ -28,7 +28,7 @@ cc ... -lrfc822      </informalexample>    </refsynopsisdiv> -  <refsect1> +  <refsect1 id="rfc822_description">      <title>DESCRIPTION</title>      <para> @@ -60,7 +60,7 @@ its logical components: names and E-mail addresses.</para>  3) Allow some limited modifications of the parsed structure, and then  convert it back into a text string.</para> -    <refsect2> +    <refsect2 id="rfc822_tokenizing_an_e_mail_header">        <title>Tokenizing an E-mail header</title>        <informalexample> @@ -88,7 +88,7 @@ If <parameter moreinfo="none">err_func</parameter> argument, if not NULL, is a p  to a callback  function.  The function is called in the event that the E-mail header is  corrupted to the point that it cannot even be parsed.  This is a rare instance --- most forms of corruption are still valid at least on the lexical level.  +-- most forms of corruption are still valid at least on the lexical level.  The only time this error is reported is in the event of mismatched  parenthesis, angle brackets, or quotes.  The callback function receives the  <parameter moreinfo="none">header</parameter> pointer, an index to the syntax error in the @@ -120,7 +120,7 @@ and they must remain valid.</para>        </note>      </refsect2> -    <refsect2> +    <refsect2 id="rfc822_extracting_e_mail_addresses">        <title>Extracting E-mail addresses</title>        <informalexample> @@ -291,7 +291,7 @@ This happens with null addresses used as return addresses for delivery status  notifications.</para>      </refsect2> -    <refsect2> +    <refsect2 id="rfc822_working_with_e_mail_addresses">        <title>Working with E-mail addresses</title>        <informalexample>  	<programlisting format="linespecific"> @@ -303,11 +303,11 @@ void rfc822tok_print(const struct rfc822token *list,  void rfc822_print(const struct rfc822a *addrs,          void (*print_func)(char, void *),          void (*print_separator)(const char *, void *), void *callback_arg); -  +  void rfc822_addrlist(const struct rfc822a *addrs,                  void (*print_func)(char, void *),                  void *callback_arg); -  +  void rfc822_namelist(const struct rfc822a *addrs,                  void (*print_func)(char, void *),                  void *callback_arg); @@ -422,7 +422,7 @@ newline characters.</para>      </refsect2> -    <refsect2> +    <refsect2 id="rfc822_working_with_dates">        <title>Working with dates</title>        <informalexample>  	<programlisting format="linespecific"> @@ -449,7 +449,7 @@ which must be big enough to accommodate it.</para>      </refsect2> -    <refsect2> +    <refsect2 id="rfc822_working_with_8_bit_mime_encoded_headers">        <title>Working with 8-bit MIME-encoded headers</title>        <informalexample> @@ -457,26 +457,26 @@ which must be big enough to accommodate it.</para>  int error=rfc2047_decode(const char *text,                  int (*callback_func)(const char *, int, const char *, void *),                  void *callback_arg); -  +  extern char *str=rfc2047_decode_simple(const char *text); -  +  extern char *str=rfc2047_decode_enhanced(const char *text,                  const char *charset); -  +  void rfc2047_print(const struct rfc822a *a,          const char *charset,          void (*print_func)(char, void *),          void (*print_separator)(const char *, void *), void *); -  +  char *buffer=rfc2047_encode_str(const char *string,                  const char *charset); -  +  int error=rfc2047_encode_callback(const char *string,          const char *charset,          int (*func)(const char *, size_t, void *),          void *callback_arg); -  +  char *buffer=rfc2047_encode_header(const struct rfc822a *a,          const char *charset);  </programlisting> @@ -561,8 +561,7 @@ equivalent to <function moreinfo="none">rfc822_getaddrs</function>(), followed b      </refsect2> -    <refsect2> - +    <refsect2 id="rfc822_working_with_subjects">        <title>Working with subjects</title>        <informalexample> @@ -614,7 +613,7 @@ is not converted to uppercase.</para>      </refsect2>    </refsect1> -  <refsect1> +  <refsect1 id="rfc822_see_also">      <title>SEE ALSO</title>      <para> diff --git a/sqwebmail/ChangeLog b/sqwebmail/ChangeLog index bdde272..722f752 100644 --- a/sqwebmail/ChangeLog +++ b/sqwebmail/ChangeLog @@ -1,3 +1,7 @@ +2020-10-27  Sam Varshavchik  <mrsam@courier-mta.com> + +	* sqwebmailwebpgp: update for current gpg version. +  6.0.4  2020-05-18  Sam Varshavchik  <mrsam@courier-mta.com> diff --git a/sqwebmail/html/en-us/index.html b/sqwebmail/html/en-us/index.html index 069bf6a..39c3e7b 100644 --- a/sqwebmail/html/en-us/index.html +++ b/sqwebmail/html/en-us/index.html @@ -3,7 +3,7 @@         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">  <html xmlns="http://www.w3.org/1999/xhtml">  <head> -  <title>SqWebMail - Copyright 1999-2015 Double Precision, Inc.</title> +  <title>SqWebMail - Copyright 1999-2020 Double Precision, Inc.</title>    <link rel="stylesheet" type="text/css" href="[#SQWEBMAILCSS#]" />    <meta name="GENERATOR" content="amaya 8.0, see http://www.w3.org/Amaya/" />    <meta name="MSSmartTagsPreventParsing" content="TRUE" /> @@ -15,7 +15,7 @@    <frame src="[#s#]noframes=1" noresize="noresize" frameborder="0" />    <noframes>      <body> -    <h1>SqWebMail - Copyright 1999-2015 Double Precision, Inc.</h1> +    <h1>SqWebMail - Copyright 1999-2020 Double Precision, Inc.</h1>      <p>Your web browser does not support frames. Although SqWebMail uses      frames, 100% of functionality is available to web browsers that do not diff --git a/sqwebmail/images/logo.png b/sqwebmail/images/logo.pngBinary files differ index 5e9645a..56a2f6e 100644 --- a/sqwebmail/images/logo.png +++ b/sqwebmail/images/logo.png diff --git a/tcpd/couriertcpd.sgml b/tcpd/couriertcpd.sgml index 1d10157..4a835e3 100644 --- a/tcpd/couriertcpd.sgml +++ b/tcpd/couriertcpd.sgml @@ -1,7 +1,7 @@  <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd"> -<!-- Copyright 2000-2015 Double Precision, Inc.  See COPYING for --> +<!-- Copyright 2000-2020 Double Precision, Inc.  See COPYING for -->  <!-- distribution information. --> -<refentry> +<refentry id="couriertcpd">    <info><author><firstname>Sam</firstname><surname>Varshavchik</surname><contrib>Author</contrib></author><productname>Courier Mail Server</productname></info>    <refmeta> @@ -39,7 +39,7 @@ TCP server daemon</refpurpose>      </cmdsynopsis>    </refsynopsisdiv> -  <refsect1> +  <refsect1 id="couriertcpd_description">      <title>DESCRIPTION</title>      <para> @@ -68,7 +68,7 @@ which network connections will be rejected.</para>    </refsect1> -  <refsect1> +  <refsect1 id="couriertcpd_options">      <title>OPTIONS</title>      <variablelist> @@ -122,9 +122,9 @@ information.</para>        </varlistentry>        <varlistentry> -	<term>-block=<replaceable>zone</replaceable>[,<replaceable>var</replaceable>[/<replaceable>n.n.n.n</replaceable>][,<replaceable>msg</replaceable>]] +	<term>-block=<replaceable>zone</replaceable>[=<replaceable>display_zone</replaceable>][,<replaceable>var</replaceable>[/<replaceable>n.n.n.n</replaceable>][,<replaceable>msg</replaceable>]]  	  or -	-allow=<replaceable>zone</replaceable>[,<replaceable>var</replaceable>[/<replaceable>n.n.n.n</replaceable>[,]]]</term> +	-allow=<replaceable>zone</replaceable>[=<replaceable>display_zone</replaceable>][,<replaceable>var</replaceable>[/<replaceable>n.n.n.n</replaceable>[,]]]</term>  	<listitem>  	  <para>  Initialize the environment variable <replaceable>var</replaceable> if both of @@ -378,8 +378,7 @@ superuser can specify <option>-user</option>.</para>    </refsect1> -  <refsect1> - +  <refsect1 id="couriertcpd_multiple_port_list">      <title>MULTIPLE PORT LIST</title>      <anchor id="list"/> @@ -440,8 +439,7 @@ will create network connections on ports 25 and 999 of the IP address    </refsect1> -  <refsect1> - +  <refsect1 id="couriertcpd_access_file">      <title>ACCESS FILE</title>      <para> @@ -465,7 +463,7 @@ from one or more plain text  files. Blank lines in the text file are ignored. Lines that start with the #  character are also ignored.</para> -    <refsect2> +    <refsect2 id="couriertcpd_rejecting_and_accepting_connections_by_ip_address">        <title>Rejecting and accepting connections by IP address</title>        <para> @@ -529,7 +527,7 @@ connections to be rejected:</para>      </refsect2> -    <refsect2> +    <refsect2 id="couriertcpd_ipv6_addresses">        <title>IPv6 addresses</title>        <note> @@ -638,8 +636,7 @@ file, the entry for the most specific IP address.</para>        </para>      </refsect2> -    <refsect2> - +    <refsect2 id="couriertcpd_dns_access_lists">        <title>DNS ACCESS LISTS</title>        <para> @@ -681,6 +678,15 @@ file, the entry for the most specific IP address.</para>        </para>        <para> +	An optional <quote>=<replaceable>display_zone</replaceable></quote> +	follows the DNS zone. This sets the contents of +	<varname>BLOCK_ZONE</varname> DNS access list variable (see +	below), which defaults to the DNS zone name. This is only useful +	with <option>-allow</option>, since <option>-block</option> rejects +	the message, so nothing gets set anyway. +      </para> + +      <para>  	For IPv6 addresses, the DNS query consists of individual hexadecimal  	nybbles (in reverse order, like the IPv4 query).        </para> @@ -816,7 +822,7 @@ file, the entry for the most specific IP address.</para>        </para>      </refsect2> -    <refsect2> +    <refsect2 id="couriertcpd_multiple_dns_lists">        <title>MULTIPLE DNS LISTS</title>        <para> @@ -852,7 +858,7 @@ file, the entry for the most specific IP address.</para>        </para>      </refsect2> -    <refsect2> +    <refsect2 id="couriertcpd_additional_dns_access_list_variables">        <title>ADDITIONAL DNS ACCESS LIST VARIABLES</title>        <para> @@ -887,7 +893,8 @@ file, the entry for the most specific IP address.</para>  	  <term>BLOCK_ZONE</term>  	  <para>  	    The DNS zone of the succesfull access list lookup, like -	    <quote>dnsbl.example.com</quote>. +	    <quote>dnsbl.example.com</quote>, or an explicit +	    display zone name.  	  </para>  	</varlistentry>        </variablelist> @@ -901,7 +908,7 @@ file, the entry for the most specific IP address.</para>        </para>      </refsect2> -    <refsect2> +    <refsect2 id="couriertcpd_using_dns_whitelists_with_spf">        <title>USING DNS WHITELISTS WITH SPF</title>        <para> @@ -918,7 +925,7 @@ file, the entry for the most specific IP address.</para>      </refsect2>    </refsect1> -  <refsect1> +  <refsect1 id="couriertcpd_environment_variables">      <title>ENVIRONMENT VARIABLES</title>      <para> @@ -997,7 +1004,7 @@ TCP port of the remote end of the network connection.</para>      </variablelist>    </refsect1> -  <refsect1> +  <refsect1 id="couriertcpd_see_also">      <title>SEE ALSO</title>      <para> diff --git a/tcpd/couriertls.sgml b/tcpd/couriertls.sgml index c7971cc..82669e2 100644 --- a/tcpd/couriertls.sgml +++ b/tcpd/couriertls.sgml @@ -1,7 +1,7 @@  <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">  <!-- Copyright 2000-2018 Double Precision, Inc.  See COPYING for -->  <!-- distribution information. --> -<refentry> +<refentry id="couriertls">    <info><author><firstname>Sam</firstname><surname>Varshavchik</surname><contrib>Author</contrib></author><productname>Courier Mail Server</productname></info>    <refmeta> @@ -25,7 +25,7 @@ TLS/SSL protocol wrapper</refpurpose>      </cmdsynopsis>    </refsynopsisdiv> -  <refsect1> +  <refsect1 id="couriertls_description">      <title>DESCRIPTION</title>      <para> @@ -42,7 +42,7 @@ An application typically creates a network connection, then runs  connection with SSL/TLS.</para>    </refsect1> -  <refsect1> +  <refsect1 id="couriertls_options">      <title>OPTIONS</title>      <variablelist> @@ -175,7 +175,7 @@ If the program is not specified, the standard input and output of    </refsect1> -  <refsect1> +  <refsect1 id="couriertls_environment_variables">      <title>ENVIRONMENT VARIABLES</title>  <para> @@ -288,7 +288,7 @@ X.509 certificate according to the <option>-domain</option> option,      </variablelist>    </refsect1> -  <refsect1> +  <refsect1 id="couriertls_see_also">      <title>SEE ALSO</title>      <para> diff --git a/userdb/makeuserdb.sgml b/userdb/makeuserdb.sgml index f10270a..f1a9e84 100644 --- a/userdb/makeuserdb.sgml +++ b/userdb/makeuserdb.sgml @@ -34,7 +34,7 @@      </cmdsynopsis>    </refsynopsisdiv> -  <refsect1> +  <refsect1 id="makeuserdb_description">      <title>DESCRIPTION</title>      <para> @@ -69,7 +69,7 @@ The <option>-f</option> option creates  default <filename>@userdb@.dat</filename> from  <filename>@userdb@</filename>.</para> -    <refsect2> +    <refsect2 id="makeuserdb_format_of__userdb_">        <title>Format of <filename>@userdb@</filename></title>        <para>  <filename>@userdb@</filename> is a plain text file that can be created using @@ -89,7 +89,7 @@ Each line takes the following format:</para>  	</blockquote>  <para><replaceable>name</replaceable> is the account name. -<replaceable>name</replaceable> MUST contain only lowercase characters  +<replaceable>name</replaceable> MUST contain only lowercase characters  If <application>Courier</application> is  configured to treat lowercase and uppercase account names as  identical, <replaceable>name</replaceable> is followed by exactly one tab @@ -162,7 +162,7 @@ See  for additional information.</para>        </blockquote>      </refsect2> -    <refsect2> +    <refsect2 id="makeuserdb__userdb_shadow_dat">        <title><filename>@userdb@shadow.dat</filename></title>        <para> @@ -176,10 +176,8 @@ if <command>@userdb@</command> has any group  or world permissions.</para>      </refsect2> -    <refsect2> - -      <title>CONVERTING <filename>/etc/passwd</filename> -and vpopmail to <filename>@userdb@</filename> format</title> +    <refsect2 id="makeuserdb_converting__etc_passwd_and_vpopmail_to__userdb__format"> +      <title>CONVERTING <filename>/etc/passwd</filename> and vpopmail to <filename>@userdb@</filename> format</title>        <para>  <command>pw2userdb</command> reads the <filename>/etc/passwd</filename> and @@ -286,7 +284,7 @@ cleaning up again, afterwards.</para>      </refsect2>    </refsect1> -  <refsect1> +  <refsect1 id="makeuserdb_files">      <title>FILES</title>      <literallayout> @@ -298,7 +296,7 @@ cleaning up again, afterwards.</para>  </literallayout>    </refsect1> -  <refsect1> +  <refsect1 id="makeuserdb_bugs">      <title>BUGS</title> @@ -308,7 +306,7 @@ Perl's documentation notes that certain combinations of locking options may  not work with some networks.</para>    </refsect1> -  <refsect1> +  <refsect1 id="makeuserdb_see_also">      <title>SEE ALSO</title>      <para> @@ -321,4 +319,3 @@ not work with some networks.</para>    </refsect1>  </refentry> - diff --git a/userdb/userdb.sgml b/userdb/userdb.sgml index 6bb6a13..f3a110d 100644 --- a/userdb/userdb.sgml +++ b/userdb/userdb.sgml @@ -31,13 +31,13 @@        <arg choice='plain'>unset</arg>        <arg choice='req' rep='repeat'><replaceable>field</replaceable></arg>      </cmdsynopsis> -     +      <cmdsynopsis>        <command>userdb</command>        <arg choice='req'><replaceable>addr</replaceable></arg>        <arg choice='plain'>del</arg>      </cmdsynopsis> -     +      <cmdsynopsis>        <command>userdb</command>        <arg choice='req'><replaceable>path/addr</replaceable></arg> @@ -91,7 +91,7 @@      </cmdsynopsis>    </refsynopsisdiv> -  <refsect1> +  <refsect1 id="userdb_description">      <title>DESCRIPTION</title>      <para> @@ -185,7 +185,8 @@ record. Use  plus the record itself.</para> -    <refsect2><title>DISPLAYING <filename>@userdb@</filename></title> +    <refsect2 id="userdb_displaying__userdb_"> +      <title>DISPLAYING <filename>@userdb@</filename></title>        <para>  If the first argument to userdb @@ -211,9 +212,9 @@ all the fields in <filename>@userdb@</filename> for this      </refsect2> -    <refsect2> +    <refsect2 id="userdb_rebuilding__userdb__dat">        <title>REBUILDING <filename>@userdb@.dat</filename></title> -       +        <para>  The actual virtual account/address database is  <filename>@userdb@.dat</filename>. @@ -225,7 +226,7 @@ version. After running <command>userdb</command>, execute the    </refsect1> -  <refsect1> +  <refsect1 id="userdb_bugs">      <title>BUGS</title>      <para> @@ -240,7 +241,7 @@ however the subsequent  will fail with an error message.</para>    </refsect1> -  <refsect1> +  <refsect1 id="userdb_files">      <title>FILES</title>      <para> @@ -251,15 +252,14 @@ will fail with an error message.</para>  <filename> .tmp.filename</filename> - temporary file used to create new contents of <filename>filename</filename></para>    </refsect1> -  <refsect1> +  <refsect1 id="userdb_see_also">      <title>SEE ALSO</title>      <para>  <ulink url="makeuserdb.html"><citerefentry><refentrytitle>makeuserdb</refentrytitle><manvolnum>8</manvolnum></citerefentry></ulink>, -  +  <ulink url="userdbpw.html"><citerefentry><refentrytitle>userdbpw</refentrytitle><manvolnum>8</manvolnum></citerefentry></ulink></para>    </refsect1>  </refentry> - diff --git a/userdb/userdbpw.sgml b/userdb/userdbpw.sgml index 246c9cc..c824f32 100644 --- a/userdb/userdbpw.sgml +++ b/userdb/userdbpw.sgml @@ -33,7 +33,7 @@      </cmdsynopsis>    </refsynopsisdiv> -  <refsect1> +  <refsect1 id="userdbpw_description">      <title>DESCRIPTION</title>      <para><command>userdbpw</command> enables secure entry of encrypted @@ -115,7 +115,7 @@ to be specified in a way that cannot be easily viewed by  <citerefentry><refentrytitle>ps</refentrytitle><manvolnum>1</manvolnum></citerefentry>.</para>    </refsect1> -  <refsect1> +  <refsect1 id="userdbpw_see_also">      <title>SEE ALSO</title>      <para> diff --git a/waitlib/Makefile.am b/waitlib/Makefile.am index 33be798..5ce852d 100644 --- a/waitlib/Makefile.am +++ b/waitlib/Makefile.am @@ -1,5 +1,5 @@  # -# Copyright 1998 - 1999 Double Precision, Inc.  See COPYING for +# Copyright 1998 - 2020 Double Precision, Inc.  See COPYING for  # distribution information. @@ -10,7 +10,7 @@ EXTRA_DIST=confwait.c  libwaitlib_la_SOURCES=waitlib.c waitlib.h waitlib2.c -testwait_SOURCES=testwait.c testwait2.c +testwait_SOURCES=testwait.c  testwait_DEPENDENCIES=libwaitlib.la  testwait_LDADD=libwaitlib.la diff --git a/waitlib/testwait.c b/waitlib/testwait.c index fb0fe48..a720e49 100644 --- a/waitlib/testwait.c +++ b/waitlib/testwait.c @@ -1,5 +1,5 @@  /* -** Copyright 1998 - 2006 Double Precision, Inc. +** Copyright 1998 - 2020 Double Precision, Inc.  ** See COPYING for distribution information.  */ @@ -10,17 +10,20 @@  #include	<stdio.h>  #include	<stdlib.h>  #include	<signal.h> +#include	<pthread.h>  /* Stress test waitlib.c */  #define	NUMCHILDREN	100		/* Start 100 child processes */  #define	INITCHILDREN	10		/* Start with these many child procs */ -static unsigned started, finished; +static unsigned started; +static int reap_pipefd[2];  static void reap_child(pid_t p, int dummy)  { -	++finished; +	if (write(reap_pipefd[1], "", 1) < 0) +		; /* shut up gcc */  }  static RETSIGTYPE sighandler(int sig) @@ -58,8 +61,9 @@ int	main()  int	pipefd[2];  int	pipefd2[2];  char	c; +unsigned finished=0; -	if (pipe(pipefd) || pipe(pipefd2)) +	if (pipe(reap_pipefd) || pipe(pipefd) || pipe(pipefd2))  	{  		perror("pipe");  		exit(1); @@ -67,7 +71,7 @@ char	c;  	signal(SIGCHLD, sighandler); -	started=finished=0; +	started=0;  	while (started < INITCHILDREN)  	{  		if (start_child() == 0) @@ -87,13 +91,22 @@ char	c;  		; /* Shut gcc up */  	close(pipefd[1]);  	close(pipefd2[0]); -  	while (started < NUMCHILDREN)  		if (start_child() == 0)  			_exit(0);  	alarm(30);  	while (finished < started) -		foobar(); +	{ +		char c; +		int n=read(reap_pipefd[0], &c, 1); + +		if (n <= 0) +		{ +			fprintf(stderr, "pipe error\n"); +			exit(1); +		} +		++finished; +	}  	exit(0);  } diff --git a/waitlib/testwait2.c b/waitlib/testwait2.c deleted file mode 100644 index f64cc78..0000000 --- a/waitlib/testwait2.c +++ /dev/null @@ -1,9 +0,0 @@ -/* -** Copyright 1998 - 1999 Double Precision, Inc. -** See COPYING for distribution information. -*/ - - -void foobar() -{ -} | 
