Initial checkin
authorBastard Operator From GNU <sysadmin@gnu.org>
Wed, 18 May 2011 17:25:54 +0000 (13:25 -0400)
committerBastard Operator From GNU <sysadmin@gnu.org>
Wed, 18 May 2011 17:25:54 +0000 (13:25 -0400)
84 files changed:
cgi-bin/.namazurc [new file with mode: 0644]
cgi-bin/.namazurc.in [new file with mode: 0644]
cgi-bin/.namazurc.in.dist [new file with mode: 0644]
cgi-bin/extract-mesg.cgi [new file with mode: 0755]
cgi-bin/extract-mesg.cgi.in [new file with mode: 0755]
cgi-bin/extract-mesg.cgi.in.dist [new file with mode: 0755]
cgi-bin/mesg.cgi [new file with mode: 0755]
cgi-bin/mesg.cgi.in [new file with mode: 0755]
cgi-bin/mesg.cgi.in.dist [new file with mode: 0755]
cgi-bin/mknmzrc [new file with mode: 0644]
cgi-bin/mknmzrc.in [new file with mode: 0644]
cgi-bin/mknmzrc.in.dist [new file with mode: 0644]
cgi-bin/mnav.cgi [new file with mode: 0755]
cgi-bin/mnav.cgi.in [new file with mode: 0755]
cgi-bin/mnav.cgi.in.dist [new file with mode: 0755]
cgi-bin/namazu.cgi [new symlink]
cgi-bin/template/NMZ.body [new file with mode: 0644]
cgi-bin/template/NMZ.body.in [new file with mode: 0644]
cgi-bin/template/NMZ.body.in.dist [new file with mode: 0644]
cgi-bin/template/NMZ.foot [new file with mode: 0644]
cgi-bin/template/NMZ.foot.in [new file with mode: 0644]
cgi-bin/template/NMZ.foot.in.dist [new file with mode: 0644]
cgi-bin/template/NMZ.head [new file with mode: 0644]
cgi-bin/template/NMZ.head.in [new file with mode: 0644]
cgi-bin/template/NMZ.head.in.dist [new file with mode: 0644]
cgi-bin/template/NMZ.result.normal [new file with mode: 0644]
cgi-bin/template/NMZ.result.normal.in [new file with mode: 0644]
cgi-bin/template/NMZ.result.normal.in.dist [new file with mode: 0644]
cgi-bin/template/NMZ.result.short [new file with mode: 0644]
cgi-bin/template/NMZ.result.short.in [new file with mode: 0644]
cgi-bin/template/NMZ.result.short.in.dist [new file with mode: 0644]
cgi-bin/template/NMZ.tips [new file with mode: 0644]
cgi-bin/template/NMZ.tips.in [new file with mode: 0644]
cgi-bin/template/NMZ.tips.in.dist [new file with mode: 0644]
etc/.htaccess [new file with mode: 0644]
etc/.htaccess.in [new file with mode: 0644]
etc/.htaccess.in.dist [new file with mode: 0644]
etc/apache.conf [new file with mode: 0644]
etc/apache.conf.in [new file with mode: 0644]
etc/apache.conf.in.dist [new file with mode: 0644]
etc/crontab [new file with mode: 0644]
etc/crontab.in [new file with mode: 0644]
etc/crontab.in.dist [new file with mode: 0644]
etc/logrotate.conf [new file with mode: 0644]
etc/logrotate.conf.in [new file with mode: 0644]
etc/logrotate.conf.in.dist [new file with mode: 0644]
lib/MHArc/CGI.pm [new file with mode: 0644]
lib/MHArc/Config.pm [new file with mode: 0644]
lib/MHArc/ListDef.pm [new file with mode: 0644]
lib/MHArc/MailUtil.pm [new file with mode: 0644]
lib/MHArc/Namazu.pm [new file with mode: 0644]
lib/MHArc/Util.pm [new file with mode: 0644]
lib/common.mrc [new file with mode: 0644]
lib/common.mrc.da [new file with mode: 0644]
lib/common.mrc.da.in [new file with mode: 0644]
lib/common.mrc.da.in.dist [new file with mode: 0644]
lib/common.mrc.en [new file with mode: 0644]
lib/common.mrc.en.in [new file with mode: 0644]
lib/common.mrc.en.in.dist [new file with mode: 0644]
lib/common.mrc.in [new file with mode: 0644]
lib/common.mrc.in.dist [new file with mode: 0644]
lib/common.mrc.pl [new file with mode: 0644]
lib/common.mrc.pl.in [new file with mode: 0644]
lib/common.mrc.pl.in.dist [new file with mode: 0644]
lib/config.sh [new file with mode: 0644]
lib/config.sh.backup [new file with mode: 0644]
lib/config.sh.cache.pl [new file with mode: 0644]
lib/config.sh.dist [new file with mode: 0644]
lib/lists.def [new file with mode: 0644]
lib/lists.def.dist [new file with mode: 0644]
lib/lists.def.new [new file with mode: 0644]
lib/lists.def.old [new file with mode: 0644]
lib/mrc/_logo.mrc [new file with mode: 0644]
lib/mrc/_logo.mrc.in [new file with mode: 0644]
lib/mrc/_logo.mrc.in.dist [new file with mode: 0644]
lib/mrc/_nosearch.mrc [new file with mode: 0644]
lib/mrc/_nosearch.mrc.in [new file with mode: 0644]
lib/mrc/_nosearch.mrc.in.dist [new file with mode: 0644]
lib/mrc/_nospam.mrc [new file with mode: 0644]
lib/mrc/_nospam.mrc.in [new file with mode: 0644]
lib/mrc/_nospam.mrc.in.dist [new file with mode: 0644]
lib/mrc/_nothread.mrc [new file with mode: 0644]
lib/mrc/_nothread.mrc.in [new file with mode: 0644]
lib/mrc/_nothread.mrc.in.dist [new file with mode: 0644]

diff --git a/cgi-bin/.namazurc b/cgi-bin/.namazurc
new file mode 100644 (file)
index 0000000..611122c
--- /dev/null
@@ -0,0 +1,10 @@
+# $Id: .namazurc.in.dist,v 1.2 2002/03/06 19:33:45 ehood Exp $
+# This is a Namazu configuration file for namazu or namazu.cgi.
+
+Index   /home/mharc/html
+Template /home/mharc/cgi-bin/template
+Replace         /home/mharc/html/ /archive/html/
+Logging         off
+#Lang   en
+#Scoring tfidf
+#EmphasisTags  "<strong class=\"keyword\">"   "</strong>"
diff --git a/cgi-bin/.namazurc.in b/cgi-bin/.namazurc.in
new file mode 100644 (file)
index 0000000..9c82beb
--- /dev/null
@@ -0,0 +1,10 @@
+# $Id: .namazurc.in.dist,v 1.2 2002/03/06 19:33:45 ehood Exp $
+# This is a Namazu configuration file for namazu or namazu.cgi.
+
+Index   @@HTML_DIR@@
+Template @@MKNMZ_TMPL_DIR@@
+Replace         @@HTML_DIR@@/ @@HTML_URL@@/
+Logging         off
+#Lang   en
+#Scoring tfidf
+#EmphasisTags  "<strong class=\"keyword\">"   "</strong>"
diff --git a/cgi-bin/.namazurc.in.dist b/cgi-bin/.namazurc.in.dist
new file mode 100644 (file)
index 0000000..9c82beb
--- /dev/null
@@ -0,0 +1,10 @@
+# $Id: .namazurc.in.dist,v 1.2 2002/03/06 19:33:45 ehood Exp $
+# This is a Namazu configuration file for namazu or namazu.cgi.
+
+Index   @@HTML_DIR@@
+Template @@MKNMZ_TMPL_DIR@@
+Replace         @@HTML_DIR@@/ @@HTML_URL@@/
+Logging         off
+#Lang   en
+#Scoring tfidf
+#EmphasisTags  "<strong class=\"keyword\">"   "</strong>"
diff --git a/cgi-bin/extract-mesg.cgi b/cgi-bin/extract-mesg.cgi
new file mode 100755 (executable)
index 0000000..5972fdb
--- /dev/null
@@ -0,0 +1,215 @@
+#!/usr/bin/perl
+##--------------------------------------------------------------------------##
+##  File:
+##      $Id: extract-mesg.cgi.in.dist,v 1.5 2002/09/20 03:29:28 ehood Exp $
+##  Author:
+##      Earl Hood       earl@earlhood.com
+##  Description:
+##     POD at end-of-file.
+##--------------------------------------------------------------------------##
+##  Copyright (C) 2002 Earl Hood <earl@earlhood.com>
+##
+##  This program is free software; you can redistribute it and/or modify
+##  it under the terms of the GNU General Public License as published by
+##  the Free Software Foundation; either version 2 of the License, or
+##  (at your option) any later version.
+##  
+##  This program is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+##  GNU General Public License for more details.
+##  
+##  You should have received a copy of the GNU General Public License
+##  along with this program; if not, write to the Free Software
+##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+##  02111-1307, USA
+##--------------------------------------------------------------------------##
+
+package MHArc::extract_mesg_cgi;
+
+use lib '/home/mharc/lib';
+
+use CGI::Carp;
+use MHArc::CGI;
+
+#############################################################################
+##     BEGIN: Config Section
+#############################################################################
+
+## Full pathname to where raw archives are located.
+my $mbox_archive_root = '/home/mharc/mbox';
+
+## Message media-type: This is the media-type this script will return
+## to the client when serving up the raw mail message.  Note, some
+## browsers actually support message/rfc822, but this could potentially
+## cause XSS HTML email attacks, so use with caution.
+my $message_media_type = 'text/plain';
+
+#############################################################################
+##     END: Config Section
+#############################################################################
+
+$ENV{'PATH'} = '/usr/local/bin:/bin:/usr/bin';
+
+## Query argument name to contain name of archive
+my $argname_archive = 'a';
+
+## Query argument name to contain month
+my $argname_month = 'm';
+
+## Query argument name to contain message-id
+my $argname_id = 'i';
+
+## Mbox message separator: Try to be more strict than '^From ', but
+## not too strict to deal with possible variations.
+my $msgsep = '^From \S+.*\d+:\d+:\d+';
+
+MAIN: {
+  my $form     = MHArc::CGI::parse_input();
+  my $archive  = $form->{$argname_archive} || "";
+  my $month    = $form->{$argname_month} || "";
+  my $id       = $form->{$argname_id} || "";
+
+  my $list_dir;
+  if (($month !~ /^\d{4}(?:-\d{2})?$/) ||
+      ($id !~ /.\@./) ||
+      ($archive !~ /\S/) ||
+      ($archive =~ /\.\./) ||
+      (! -d ($list_dir = join('/', $mbox_archive_root,$archive)))) {
+    warn qq/Invalid arguments: a=$archive, m=$month, i=$id\n/;
+    MHArc::CGI::print_input_error();
+    last MAIN;
+  }
+
+  # Check if list has raw archive access disabled.
+  if (-e join('/', $list_dir, '.noraw')) {
+    MHArc::CGI::print_forbidden();
+    last MAIN;
+  }
+
+  my $gzipped = 0;
+  my $mbox_file = join('/', $list_dir, $month);
+  if (! -e $mbox_file) {
+    $mbox_file .= '.gz';
+    $gzipped = 1;
+  }
+  if (! -e $mbox_file) {
+    warn qq/"$mbox_file" does not exist\n/;
+    MHArc::CGI::print_input_error();
+    last MAIN;
+  }
+
+  local(*MBOX);
+  if ($gzipped) {
+    if (!open(MBOX, "gzip -dc '$mbox_file' |")) {
+      warn qq/Unable to exec "gzip -dc '$mbox_file'": $!\n/;
+      MHArc::CGI::print_error();
+      last MAIN;
+    }
+  } else {
+    if (!open(MBOX, $mbox_file)) {
+      warn qq/Unable to open "$mbox_file": $!\n/;
+      MHArc::CGI::print_error();
+      last MAIN;
+    }
+  }
+
+  local $_;
+  my $cache     = '';
+  my $in_header = 1;
+  my $msg_id    = '';
+  my $found     = 0;
+
+  SCAN: while (<MBOX>) {
+    if (/$msgsep/o) {
+      $cache = '';
+      $in_header = 1;
+      next SCAN;
+    }
+    next SCAN  unless $in_header;
+
+    if (/^\r?$/) {
+      $cache = '';
+      $in_header = 0;
+      next SCAN;
+    }
+
+    $cache .= $_;
+    if (s/^message-id:\s*//i) {
+      s/\s+\Z//;
+      s/[<>]//g;
+      if ($_ eq $id) {
+       $found = 1;
+       last SCAN;
+      }
+      $cache = '';
+      $in_header = 0;
+    }
+  }
+
+  if (!$found) {
+    MHArc::CGI::print_not_found_error();
+    close(MBOX);
+    last MAIN;
+  }
+
+  MHArc::CGI::print_content_type($message_media_type);
+  print STDOUT $cache;
+  while (<MBOX>) {
+    last  if /$msgsep/o;
+    print STDOUT $_;
+  }
+  close(MBOX);
+}
+
+########################################################################
+__END__
+
+=head1 NAME
+
+extract-mesg.cgi - mharc CGI program to retrieve raw version of a message
+
+=head1 SYNOPSIS
+
+  http://.../cgi-bin/extract-mesg.cgi?a=<archive-name>&m=<period>&i=<message-id>
+
+=head1 DESCRIPTION
+
+This CGI program retrieves the raw version of a message from an
+archive archived at a specified period and with a specified message-id.
+
+The CGI program will output the retrieved message to the web client.
+
+=head1 CGI OPTIONS
+
+=over
+
+=item C<a>
+
+The name of the archive.  Archive names are defined by C<lists.def>.
+
+=item C<i>
+
+The message-id.
+
+=item C<m>
+
+The period in YYYY-MM or YYYY format.
+
+=back
+
+=head1 VERSION
+
+C<$Id: extract-mesg.cgi.in.dist,v 1.5 2002/09/20 03:29:28 ehood Exp $>
+
+=head1 AUTHOR
+
+Earl Hood, earl@earlhood.com
+
+This module is part of the mharc archiving system and comes with
+ABSOLUTELY NO WARRANTY and may be copied only under the terms of
+the GNU General Public License, which may be found in the MHArc
+distribution.
+
+=cut
+
diff --git a/cgi-bin/extract-mesg.cgi.in b/cgi-bin/extract-mesg.cgi.in
new file mode 100755 (executable)
index 0000000..c588509
--- /dev/null
@@ -0,0 +1,215 @@
+#!/usr/bin/perl
+##--------------------------------------------------------------------------##
+##  File:
+##      $Id: extract-mesg.cgi.in.dist,v 1.5 2002/09/20 03:29:28 ehood Exp $
+##  Author:
+##      Earl Hood       earl@earlhood.com
+##  Description:
+##     POD at end-of-file.
+##--------------------------------------------------------------------------##
+##  Copyright (C) 2002 Earl Hood <earl@earlhood.com>
+##
+##  This program is free software; you can redistribute it and/or modify
+##  it under the terms of the GNU General Public License as published by
+##  the Free Software Foundation; either version 2 of the License, or
+##  (at your option) any later version.
+##  
+##  This program is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+##  GNU General Public License for more details.
+##  
+##  You should have received a copy of the GNU General Public License
+##  along with this program; if not, write to the Free Software
+##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+##  02111-1307, USA
+##--------------------------------------------------------------------------##
+
+package MHArc::extract_mesg_cgi;
+
+use lib '@@SW_ROOT@@/lib';
+
+use CGI::Carp;
+use MHArc::CGI;
+
+#############################################################################
+##     BEGIN: Config Section
+#############################################################################
+
+## Full pathname to where raw archives are located.
+my $mbox_archive_root = '@@MBOX_DIR@@';
+
+## Message media-type: This is the media-type this script will return
+## to the client when serving up the raw mail message.  Note, some
+## browsers actually support message/rfc822, but this could potentially
+## cause XSS HTML email attacks, so use with caution.
+my $message_media_type = 'text/plain';
+
+#############################################################################
+##     END: Config Section
+#############################################################################
+
+$ENV{'PATH'} = '/usr/local/bin:/bin:/usr/bin';
+
+## Query argument name to contain name of archive
+my $argname_archive = 'a';
+
+## Query argument name to contain month
+my $argname_month = 'm';
+
+## Query argument name to contain message-id
+my $argname_id = 'i';
+
+## Mbox message separator: Try to be more strict than '^From ', but
+## not too strict to deal with possible variations.
+my $msgsep = '^From \S+.*\d+:\d+:\d+';
+
+MAIN: {
+  my $form     = MHArc::CGI::parse_input();
+  my $archive  = $form->{$argname_archive} || "";
+  my $month    = $form->{$argname_month} || "";
+  my $id       = $form->{$argname_id} || "";
+
+  my $list_dir;
+  if (($month !~ /^\d{4}(?:-\d{2})?$/) ||
+      ($id !~ /.\@./) ||
+      ($archive !~ /\S/) ||
+      ($archive =~ /\.\./) ||
+      (! -d ($list_dir = join('/', $mbox_archive_root,$archive)))) {
+    warn qq/Invalid arguments: a=$archive, m=$month, i=$id\n/;
+    MHArc::CGI::print_input_error();
+    last MAIN;
+  }
+
+  # Check if list has raw archive access disabled.
+  if (-e join('/', $list_dir, '.noraw')) {
+    MHArc::CGI::print_forbidden();
+    last MAIN;
+  }
+
+  my $gzipped = 0;
+  my $mbox_file = join('/', $list_dir, $month);
+  if (! -e $mbox_file) {
+    $mbox_file .= '.gz';
+    $gzipped = 1;
+  }
+  if (! -e $mbox_file) {
+    warn qq/"$mbox_file" does not exist\n/;
+    MHArc::CGI::print_input_error();
+    last MAIN;
+  }
+
+  local(*MBOX);
+  if ($gzipped) {
+    if (!open(MBOX, "gzip -dc '$mbox_file' |")) {
+      warn qq/Unable to exec "gzip -dc '$mbox_file'": $!\n/;
+      MHArc::CGI::print_error();
+      last MAIN;
+    }
+  } else {
+    if (!open(MBOX, $mbox_file)) {
+      warn qq/Unable to open "$mbox_file": $!\n/;
+      MHArc::CGI::print_error();
+      last MAIN;
+    }
+  }
+
+  local $_;
+  my $cache     = '';
+  my $in_header = 1;
+  my $msg_id    = '';
+  my $found     = 0;
+
+  SCAN: while (<MBOX>) {
+    if (/$msgsep/o) {
+      $cache = '';
+      $in_header = 1;
+      next SCAN;
+    }
+    next SCAN  unless $in_header;
+
+    if (/^\r?$/) {
+      $cache = '';
+      $in_header = 0;
+      next SCAN;
+    }
+
+    $cache .= $_;
+    if (s/^message-id:\s*//i) {
+      s/\s+\Z//;
+      s/[<>]//g;
+      if ($_ eq $id) {
+       $found = 1;
+       last SCAN;
+      }
+      $cache = '';
+      $in_header = 0;
+    }
+  }
+
+  if (!$found) {
+    MHArc::CGI::print_not_found_error();
+    close(MBOX);
+    last MAIN;
+  }
+
+  MHArc::CGI::print_content_type($message_media_type);
+  print STDOUT $cache;
+  while (<MBOX>) {
+    last  if /$msgsep/o;
+    print STDOUT $_;
+  }
+  close(MBOX);
+}
+
+########################################################################
+__END__
+
+=head1 NAME
+
+extract-mesg.cgi - mharc CGI program to retrieve raw version of a message
+
+=head1 SYNOPSIS
+
+  http://.../cgi-bin/extract-mesg.cgi?a=<archive-name>&m=<period>&i=<message-id>
+
+=head1 DESCRIPTION
+
+This CGI program retrieves the raw version of a message from an
+archive archived at a specified period and with a specified message-id.
+
+The CGI program will output the retrieved message to the web client.
+
+=head1 CGI OPTIONS
+
+=over
+
+=item C<a>
+
+The name of the archive.  Archive names are defined by C<lists.def>.
+
+=item C<i>
+
+The message-id.
+
+=item C<m>
+
+The period in YYYY-MM or YYYY format.
+
+=back
+
+=head1 VERSION
+
+C<$Id: extract-mesg.cgi.in.dist,v 1.5 2002/09/20 03:29:28 ehood Exp $>
+
+=head1 AUTHOR
+
+Earl Hood, earl@earlhood.com
+
+This module is part of the mharc archiving system and comes with
+ABSOLUTELY NO WARRANTY and may be copied only under the terms of
+the GNU General Public License, which may be found in the MHArc
+distribution.
+
+=cut
+
diff --git a/cgi-bin/extract-mesg.cgi.in.dist b/cgi-bin/extract-mesg.cgi.in.dist
new file mode 100755 (executable)
index 0000000..c588509
--- /dev/null
@@ -0,0 +1,215 @@
+#!/usr/bin/perl
+##--------------------------------------------------------------------------##
+##  File:
+##      $Id: extract-mesg.cgi.in.dist,v 1.5 2002/09/20 03:29:28 ehood Exp $
+##  Author:
+##      Earl Hood       earl@earlhood.com
+##  Description:
+##     POD at end-of-file.
+##--------------------------------------------------------------------------##
+##  Copyright (C) 2002 Earl Hood <earl@earlhood.com>
+##
+##  This program is free software; you can redistribute it and/or modify
+##  it under the terms of the GNU General Public License as published by
+##  the Free Software Foundation; either version 2 of the License, or
+##  (at your option) any later version.
+##  
+##  This program is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+##  GNU General Public License for more details.
+##  
+##  You should have received a copy of the GNU General Public License
+##  along with this program; if not, write to the Free Software
+##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+##  02111-1307, USA
+##--------------------------------------------------------------------------##
+
+package MHArc::extract_mesg_cgi;
+
+use lib '@@SW_ROOT@@/lib';
+
+use CGI::Carp;
+use MHArc::CGI;
+
+#############################################################################
+##     BEGIN: Config Section
+#############################################################################
+
+## Full pathname to where raw archives are located.
+my $mbox_archive_root = '@@MBOX_DIR@@';
+
+## Message media-type: This is the media-type this script will return
+## to the client when serving up the raw mail message.  Note, some
+## browsers actually support message/rfc822, but this could potentially
+## cause XSS HTML email attacks, so use with caution.
+my $message_media_type = 'text/plain';
+
+#############################################################################
+##     END: Config Section
+#############################################################################
+
+$ENV{'PATH'} = '/usr/local/bin:/bin:/usr/bin';
+
+## Query argument name to contain name of archive
+my $argname_archive = 'a';
+
+## Query argument name to contain month
+my $argname_month = 'm';
+
+## Query argument name to contain message-id
+my $argname_id = 'i';
+
+## Mbox message separator: Try to be more strict than '^From ', but
+## not too strict to deal with possible variations.
+my $msgsep = '^From \S+.*\d+:\d+:\d+';
+
+MAIN: {
+  my $form     = MHArc::CGI::parse_input();
+  my $archive  = $form->{$argname_archive} || "";
+  my $month    = $form->{$argname_month} || "";
+  my $id       = $form->{$argname_id} || "";
+
+  my $list_dir;
+  if (($month !~ /^\d{4}(?:-\d{2})?$/) ||
+      ($id !~ /.\@./) ||
+      ($archive !~ /\S/) ||
+      ($archive =~ /\.\./) ||
+      (! -d ($list_dir = join('/', $mbox_archive_root,$archive)))) {
+    warn qq/Invalid arguments: a=$archive, m=$month, i=$id\n/;
+    MHArc::CGI::print_input_error();
+    last MAIN;
+  }
+
+  # Check if list has raw archive access disabled.
+  if (-e join('/', $list_dir, '.noraw')) {
+    MHArc::CGI::print_forbidden();
+    last MAIN;
+  }
+
+  my $gzipped = 0;
+  my $mbox_file = join('/', $list_dir, $month);
+  if (! -e $mbox_file) {
+    $mbox_file .= '.gz';
+    $gzipped = 1;
+  }
+  if (! -e $mbox_file) {
+    warn qq/"$mbox_file" does not exist\n/;
+    MHArc::CGI::print_input_error();
+    last MAIN;
+  }
+
+  local(*MBOX);
+  if ($gzipped) {
+    if (!open(MBOX, "gzip -dc '$mbox_file' |")) {
+      warn qq/Unable to exec "gzip -dc '$mbox_file'": $!\n/;
+      MHArc::CGI::print_error();
+      last MAIN;
+    }
+  } else {
+    if (!open(MBOX, $mbox_file)) {
+      warn qq/Unable to open "$mbox_file": $!\n/;
+      MHArc::CGI::print_error();
+      last MAIN;
+    }
+  }
+
+  local $_;
+  my $cache     = '';
+  my $in_header = 1;
+  my $msg_id    = '';
+  my $found     = 0;
+
+  SCAN: while (<MBOX>) {
+    if (/$msgsep/o) {
+      $cache = '';
+      $in_header = 1;
+      next SCAN;
+    }
+    next SCAN  unless $in_header;
+
+    if (/^\r?$/) {
+      $cache = '';
+      $in_header = 0;
+      next SCAN;
+    }
+
+    $cache .= $_;
+    if (s/^message-id:\s*//i) {
+      s/\s+\Z//;
+      s/[<>]//g;
+      if ($_ eq $id) {
+       $found = 1;
+       last SCAN;
+      }
+      $cache = '';
+      $in_header = 0;
+    }
+  }
+
+  if (!$found) {
+    MHArc::CGI::print_not_found_error();
+    close(MBOX);
+    last MAIN;
+  }
+
+  MHArc::CGI::print_content_type($message_media_type);
+  print STDOUT $cache;
+  while (<MBOX>) {
+    last  if /$msgsep/o;
+    print STDOUT $_;
+  }
+  close(MBOX);
+}
+
+########################################################################
+__END__
+
+=head1 NAME
+
+extract-mesg.cgi - mharc CGI program to retrieve raw version of a message
+
+=head1 SYNOPSIS
+
+  http://.../cgi-bin/extract-mesg.cgi?a=<archive-name>&m=<period>&i=<message-id>
+
+=head1 DESCRIPTION
+
+This CGI program retrieves the raw version of a message from an
+archive archived at a specified period and with a specified message-id.
+
+The CGI program will output the retrieved message to the web client.
+
+=head1 CGI OPTIONS
+
+=over
+
+=item C<a>
+
+The name of the archive.  Archive names are defined by C<lists.def>.
+
+=item C<i>
+
+The message-id.
+
+=item C<m>
+
+The period in YYYY-MM or YYYY format.
+
+=back
+
+=head1 VERSION
+
+C<$Id: extract-mesg.cgi.in.dist,v 1.5 2002/09/20 03:29:28 ehood Exp $>
+
+=head1 AUTHOR
+
+Earl Hood, earl@earlhood.com
+
+This module is part of the mharc archiving system and comes with
+ABSOLUTELY NO WARRANTY and may be copied only under the terms of
+the GNU General Public License, which may be found in the MHArc
+distribution.
+
+=cut
+
diff --git a/cgi-bin/mesg.cgi b/cgi-bin/mesg.cgi
new file mode 100755 (executable)
index 0000000..fb454c2
--- /dev/null
@@ -0,0 +1,201 @@
+#!/usr/bin/perl
+##--------------------------------------------------------------------------##
+##  File:
+##      $Id: mesg.cgi.in.dist,v 1.1 2002/09/03 16:30:47 ehood Exp $
+##  Author:
+##      Earl Hood       earl@earlhood.com
+##  Description:
+##     POD at end-of-file.
+##--------------------------------------------------------------------------##
+##  Copyright (C) 2002 Earl Hood <earl@earlhood.com>
+##
+##  This program is free software; you can redistribute it and/or modify
+##  it under the terms of the GNU General Public License as published by
+##  the Free Software Foundation; either version 2 of the License, or
+##  (at your option) any later version.
+##  
+##  This program is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+##  GNU General Public License for more details.
+##  
+##  You should have received a copy of the GNU General Public License
+##  along with this program; if not, write to the Free Software
+##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+##  02111-1307, USA
+##--------------------------------------------------------------------------##
+
+package MHArc::mesg_cgi;
+
+use lib '/home/mharc/lib';
+
+use Fcntl;
+use CGI::Carp;
+use MHArc::CGI;
+use MHArc::Namazu qw(
+  nmz_load_rc
+  nmz_get_field
+  nmz_msg_id_search
+);
+
+#############################################################################
+##     BEGIN: Config Section
+#############################################################################
+
+## Full pathname to where html archives are located.
+my $html_archive_root = '/home/mharc/html';
+
+#############################################################################
+##     END: Config Section
+#############################################################################
+
+$ENV{'PATH'} = '/usr/local/bin:/bin:/usr/bin';
+
+## Query argument name to contain name of archive
+my $argname_archive = 'a';
+
+## Query argument name to contain message-id
+my $argname_id = 'i';
+
+## Namazu conf file (should be the same used by namazu.cgi)
+my $namazurc = '.namazurc';
+
+MAIN: {
+  my $form     = MHArc::CGI::parse_input();
+  my $archive  = $form->{$argname_archive} || "";
+  my $id       = $form->{$argname_id} || "";
+  my $host     = $ENV{'HTTP_HOST'} || $ENV{'SERVER_NAME'} ||
+                 $ENV{'SERVER_ADDR'} || "localhost";
+  my $port     = $ENV{'SERVER_PORT'} || "";
+  if ($port && $port ne '80') {
+    $port = ":$port";
+  } else {
+    $port = "";
+  }
+  my $server_url= "http://$host$port";
+
+  my $list_dir = undef;
+  if (($id !~ /.\@./) ||
+      ($archive !~ /\S/) ||
+      ($archive =~ /\.\./) ||
+      (! -d ($list_dir = join('/', $html_archive_root,$archive)))) {
+    warn qq/Invalid arguments: a=$archive, i=$id\n/;
+    MHArc::CGI::print_input_error();
+    last MAIN;
+  }
+
+  my $nmzrc = nmz_load_rc($namazurc);
+  if (!defined($nmzrc)) {
+    MHArc::CGI::print_script_error();
+    last MAIN;
+  }
+
+  my $pathname = find_id($list_dir, $id);
+  if (!defined($pathname)) {
+    MHArc::CGI::print_not_found_error();
+    last MAIN;
+  }
+  if (! -e $pathname) {
+    warn qq/"$pathname" does not exist\n/;
+    MHArc::CGI::print_not_found_error();
+    last MAIN;
+  }
+
+  # Apply replace string to pathname
+  my $url = $pathname;
+  foreach my $r (@{$nmzrc->{'replace'}}) {
+    my $pos = index($pathname, $r->[0]);
+    if ($pos == 0) {
+      $url = $r->[1] . substr($pathname, length($r->[0]));
+      last;
+    }
+  }
+
+  # Print out message page
+  local(*MESG);
+  if (!open(MESG, $pathname)) {
+    warn qq/Unable top open "$pathname": $!\n/;
+    MHArc::CGI::print_script_error();
+    last MAIN;
+  }
+
+  MHArc::CGI::print_content_type('text/html');
+  my $did_base = 0;
+  my $str;
+  foreach $str (<MESG>) {
+    print STDOUT $str;
+    next  if $did_base;
+    if ($str =~ /<head>/i) {
+      print STDOUT '<base href="'. $server_url . $url . '">', "\n";
+      $did_base = 1;
+    }
+  }
+  close(MESG);
+}
+
+#############################################################################
+##     Generic subroutines for CGI use
+#############################################################################
+
+sub find_id {
+  my $list_dir = shift;
+  my $id       = shift;
+
+  my $docid = nmz_msg_id_search($list_dir, $id);
+  if ($docid < 0) {
+    return undef;
+  }
+  return nmz_get_field($list_dir, $docid, 'uri');
+}
+
+########################################################################
+__END__
+
+=head1 NAME
+
+mesg.cgi - mharc CGI program to retrieve a message by message-id
+
+=head1 SYNOPSIS
+
+  http://.../cgi-bin/mesg.cgi?a=<archive-name>&i=<message-id>
+
+=head1 DESCRIPTION
+
+This CGI program retrieves a message from a specified archive with
+a give message-id.  The CGI program's main purpose is to provide
+a persistent URL to archived messages that is immune to archive
+rebuilds.
+
+The CGI program will output the retrieved message to the web client.
+The message will have a C<E<lt>base hrefE<gt>> tag added so relative
+links in the message page will function properly.
+
+=head1 CGI OPTIONS
+
+=over
+
+=item C<a>
+
+The name of the archive.  Archive names are defined by C<lists.def>.
+
+=item C<i>
+
+The message-id.
+
+=back
+
+=head1 VERSION
+
+C<$Id: mesg.cgi.in.dist,v 1.1 2002/09/03 16:30:47 ehood Exp $>
+
+=head1 AUTHOR
+
+Earl Hood, earl@earlhood.com
+
+This module is part of the mharc archiving system and comes with
+ABSOLUTELY NO WARRANTY and may be copied only under the terms of
+the GNU General Public License, which may be found in the MHArc
+distribution.
+
+=cut
+
diff --git a/cgi-bin/mesg.cgi.in b/cgi-bin/mesg.cgi.in
new file mode 100755 (executable)
index 0000000..156ccb2
--- /dev/null
@@ -0,0 +1,201 @@
+#!/usr/bin/perl
+##--------------------------------------------------------------------------##
+##  File:
+##      $Id: mesg.cgi.in.dist,v 1.1 2002/09/03 16:30:47 ehood Exp $
+##  Author:
+##      Earl Hood       earl@earlhood.com
+##  Description:
+##     POD at end-of-file.
+##--------------------------------------------------------------------------##
+##  Copyright (C) 2002 Earl Hood <earl@earlhood.com>
+##
+##  This program is free software; you can redistribute it and/or modify
+##  it under the terms of the GNU General Public License as published by
+##  the Free Software Foundation; either version 2 of the License, or
+##  (at your option) any later version.
+##  
+##  This program is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+##  GNU General Public License for more details.
+##  
+##  You should have received a copy of the GNU General Public License
+##  along with this program; if not, write to the Free Software
+##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+##  02111-1307, USA
+##--------------------------------------------------------------------------##
+
+package MHArc::mesg_cgi;
+
+use lib '@@SW_ROOT@@/lib';
+
+use Fcntl;
+use CGI::Carp;
+use MHArc::CGI;
+use MHArc::Namazu qw(
+  nmz_load_rc
+  nmz_get_field
+  nmz_msg_id_search
+);
+
+#############################################################################
+##     BEGIN: Config Section
+#############################################################################
+
+## Full pathname to where html archives are located.
+my $html_archive_root = '@@HTML_DIR@@';
+
+#############################################################################
+##     END: Config Section
+#############################################################################
+
+$ENV{'PATH'} = '/usr/local/bin:/bin:/usr/bin';
+
+## Query argument name to contain name of archive
+my $argname_archive = 'a';
+
+## Query argument name to contain message-id
+my $argname_id = 'i';
+
+## Namazu conf file (should be the same used by namazu.cgi)
+my $namazurc = '.namazurc';
+
+MAIN: {
+  my $form     = MHArc::CGI::parse_input();
+  my $archive  = $form->{$argname_archive} || "";
+  my $id       = $form->{$argname_id} || "";
+  my $host     = $ENV{'HTTP_HOST'} || $ENV{'SERVER_NAME'} ||
+                 $ENV{'SERVER_ADDR'} || "localhost";
+  my $port     = $ENV{'SERVER_PORT'} || "";
+  if ($port && $port ne '80') {
+    $port = ":$port";
+  } else {
+    $port = "";
+  }
+  my $server_url= "http://$host$port";
+
+  my $list_dir = undef;
+  if (($id !~ /.\@./) ||
+      ($archive !~ /\S/) ||
+      ($archive =~ /\.\./) ||
+      (! -d ($list_dir = join('/', $html_archive_root,$archive)))) {
+    warn qq/Invalid arguments: a=$archive, i=$id\n/;
+    MHArc::CGI::print_input_error();
+    last MAIN;
+  }
+
+  my $nmzrc = nmz_load_rc($namazurc);
+  if (!defined($nmzrc)) {
+    MHArc::CGI::print_script_error();
+    last MAIN;
+  }
+
+  my $pathname = find_id($list_dir, $id);
+  if (!defined($pathname)) {
+    MHArc::CGI::print_not_found_error();
+    last MAIN;
+  }
+  if (! -e $pathname) {
+    warn qq/"$pathname" does not exist\n/;
+    MHArc::CGI::print_not_found_error();
+    last MAIN;
+  }
+
+  # Apply replace string to pathname
+  my $url = $pathname;
+  foreach my $r (@{$nmzrc->{'replace'}}) {
+    my $pos = index($pathname, $r->[0]);
+    if ($pos == 0) {
+      $url = $r->[1] . substr($pathname, length($r->[0]));
+      last;
+    }
+  }
+
+  # Print out message page
+  local(*MESG);
+  if (!open(MESG, $pathname)) {
+    warn qq/Unable top open "$pathname": $!\n/;
+    MHArc::CGI::print_script_error();
+    last MAIN;
+  }
+
+  MHArc::CGI::print_content_type('text/html');
+  my $did_base = 0;
+  my $str;
+  foreach $str (<MESG>) {
+    print STDOUT $str;
+    next  if $did_base;
+    if ($str =~ /<head>/i) {
+      print STDOUT '<base href="'. $server_url . $url . '">', "\n";
+      $did_base = 1;
+    }
+  }
+  close(MESG);
+}
+
+#############################################################################
+##     Generic subroutines for CGI use
+#############################################################################
+
+sub find_id {
+  my $list_dir = shift;
+  my $id       = shift;
+
+  my $docid = nmz_msg_id_search($list_dir, $id);
+  if ($docid < 0) {
+    return undef;
+  }
+  return nmz_get_field($list_dir, $docid, 'uri');
+}
+
+########################################################################
+__END__
+
+=head1 NAME
+
+mesg.cgi - mharc CGI program to retrieve a message by message-id
+
+=head1 SYNOPSIS
+
+  http://.../cgi-bin/mesg.cgi?a=<archive-name>&i=<message-id>
+
+=head1 DESCRIPTION
+
+This CGI program retrieves a message from a specified archive with
+a give message-id.  The CGI program's main purpose is to provide
+a persistent URL to archived messages that is immune to archive
+rebuilds.
+
+The CGI program will output the retrieved message to the web client.
+The message will have a C<E<lt>base hrefE<gt>> tag added so relative
+links in the message page will function properly.
+
+=head1 CGI OPTIONS
+
+=over
+
+=item C<a>
+
+The name of the archive.  Archive names are defined by C<lists.def>.
+
+=item C<i>
+
+The message-id.
+
+=back
+
+=head1 VERSION
+
+C<$Id: mesg.cgi.in.dist,v 1.1 2002/09/03 16:30:47 ehood Exp $>
+
+=head1 AUTHOR
+
+Earl Hood, earl@earlhood.com
+
+This module is part of the mharc archiving system and comes with
+ABSOLUTELY NO WARRANTY and may be copied only under the terms of
+the GNU General Public License, which may be found in the MHArc
+distribution.
+
+=cut
+
diff --git a/cgi-bin/mesg.cgi.in.dist b/cgi-bin/mesg.cgi.in.dist
new file mode 100755 (executable)
index 0000000..156ccb2
--- /dev/null
@@ -0,0 +1,201 @@
+#!/usr/bin/perl
+##--------------------------------------------------------------------------##
+##  File:
+##      $Id: mesg.cgi.in.dist,v 1.1 2002/09/03 16:30:47 ehood Exp $
+##  Author:
+##      Earl Hood       earl@earlhood.com
+##  Description:
+##     POD at end-of-file.
+##--------------------------------------------------------------------------##
+##  Copyright (C) 2002 Earl Hood <earl@earlhood.com>
+##
+##  This program is free software; you can redistribute it and/or modify
+##  it under the terms of the GNU General Public License as published by
+##  the Free Software Foundation; either version 2 of the License, or
+##  (at your option) any later version.
+##  
+##  This program is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+##  GNU General Public License for more details.
+##  
+##  You should have received a copy of the GNU General Public License
+##  along with this program; if not, write to the Free Software
+##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+##  02111-1307, USA
+##--------------------------------------------------------------------------##
+
+package MHArc::mesg_cgi;
+
+use lib '@@SW_ROOT@@/lib';
+
+use Fcntl;
+use CGI::Carp;
+use MHArc::CGI;
+use MHArc::Namazu qw(
+  nmz_load_rc
+  nmz_get_field
+  nmz_msg_id_search
+);
+
+#############################################################################
+##     BEGIN: Config Section
+#############################################################################
+
+## Full pathname to where html archives are located.
+my $html_archive_root = '@@HTML_DIR@@';
+
+#############################################################################
+##     END: Config Section
+#############################################################################
+
+$ENV{'PATH'} = '/usr/local/bin:/bin:/usr/bin';
+
+## Query argument name to contain name of archive
+my $argname_archive = 'a';
+
+## Query argument name to contain message-id
+my $argname_id = 'i';
+
+## Namazu conf file (should be the same used by namazu.cgi)
+my $namazurc = '.namazurc';
+
+MAIN: {
+  my $form     = MHArc::CGI::parse_input();
+  my $archive  = $form->{$argname_archive} || "";
+  my $id       = $form->{$argname_id} || "";
+  my $host     = $ENV{'HTTP_HOST'} || $ENV{'SERVER_NAME'} ||
+                 $ENV{'SERVER_ADDR'} || "localhost";
+  my $port     = $ENV{'SERVER_PORT'} || "";
+  if ($port && $port ne '80') {
+    $port = ":$port";
+  } else {
+    $port = "";
+  }
+  my $server_url= "http://$host$port";
+
+  my $list_dir = undef;
+  if (($id !~ /.\@./) ||
+      ($archive !~ /\S/) ||
+      ($archive =~ /\.\./) ||
+      (! -d ($list_dir = join('/', $html_archive_root,$archive)))) {
+    warn qq/Invalid arguments: a=$archive, i=$id\n/;
+    MHArc::CGI::print_input_error();
+    last MAIN;
+  }
+
+  my $nmzrc = nmz_load_rc($namazurc);
+  if (!defined($nmzrc)) {
+    MHArc::CGI::print_script_error();
+    last MAIN;
+  }
+
+  my $pathname = find_id($list_dir, $id);
+  if (!defined($pathname)) {
+    MHArc::CGI::print_not_found_error();
+    last MAIN;
+  }
+  if (! -e $pathname) {
+    warn qq/"$pathname" does not exist\n/;
+    MHArc::CGI::print_not_found_error();
+    last MAIN;
+  }
+
+  # Apply replace string to pathname
+  my $url = $pathname;
+  foreach my $r (@{$nmzrc->{'replace'}}) {
+    my $pos = index($pathname, $r->[0]);
+    if ($pos == 0) {
+      $url = $r->[1] . substr($pathname, length($r->[0]));
+      last;
+    }
+  }
+
+  # Print out message page
+  local(*MESG);
+  if (!open(MESG, $pathname)) {
+    warn qq/Unable top open "$pathname": $!\n/;
+    MHArc::CGI::print_script_error();
+    last MAIN;
+  }
+
+  MHArc::CGI::print_content_type('text/html');
+  my $did_base = 0;
+  my $str;
+  foreach $str (<MESG>) {
+    print STDOUT $str;
+    next  if $did_base;
+    if ($str =~ /<head>/i) {
+      print STDOUT '<base href="'. $server_url . $url . '">', "\n";
+      $did_base = 1;
+    }
+  }
+  close(MESG);
+}
+
+#############################################################################
+##     Generic subroutines for CGI use
+#############################################################################
+
+sub find_id {
+  my $list_dir = shift;
+  my $id       = shift;
+
+  my $docid = nmz_msg_id_search($list_dir, $id);
+  if ($docid < 0) {
+    return undef;
+  }
+  return nmz_get_field($list_dir, $docid, 'uri');
+}
+
+########################################################################
+__END__
+
+=head1 NAME
+
+mesg.cgi - mharc CGI program to retrieve a message by message-id
+
+=head1 SYNOPSIS
+
+  http://.../cgi-bin/mesg.cgi?a=<archive-name>&i=<message-id>
+
+=head1 DESCRIPTION
+
+This CGI program retrieves a message from a specified archive with
+a give message-id.  The CGI program's main purpose is to provide
+a persistent URL to archived messages that is immune to archive
+rebuilds.
+
+The CGI program will output the retrieved message to the web client.
+The message will have a C<E<lt>base hrefE<gt>> tag added so relative
+links in the message page will function properly.
+
+=head1 CGI OPTIONS
+
+=over
+
+=item C<a>
+
+The name of the archive.  Archive names are defined by C<lists.def>.
+
+=item C<i>
+
+The message-id.
+
+=back
+
+=head1 VERSION
+
+C<$Id: mesg.cgi.in.dist,v 1.1 2002/09/03 16:30:47 ehood Exp $>
+
+=head1 AUTHOR
+
+Earl Hood, earl@earlhood.com
+
+This module is part of the mharc archiving system and comes with
+ABSOLUTELY NO WARRANTY and may be copied only under the terms of
+the GNU General Public License, which may be found in the MHArc
+distribution.
+
+=cut
+
diff --git a/cgi-bin/mknmzrc b/cgi-bin/mknmzrc
new file mode 100644 (file)
index 0000000..cfe0038
--- /dev/null
@@ -0,0 +1,203 @@
+# $Id: mknmzrc.in.dist,v 1.3 2002/03/06 22:47:29 ehood Exp $
+# This is a Namazu configuration file for mknmz.
+#
+package conf;  # Don't remove this line!
+
+#===================================================================
+#
+# Administrator's email address
+#
+$ADDRESS = 'sysadmin@gnu.org';
+
+
+#===================================================================
+#
+# Regular Expression Patterns
+#
+
+#
+# This pattern specifies HTML suffixes.
+#
+$HTML_SUFFIX = "html|[ps]html";
+
+#
+# This pattern specifies file names which will be targeted.
+# NOTE: It can be specified by --allow=regex option.
+#       Do NOT use `$' or `^' anchors.
+#       Case-insensitive.
+#
+$ALLOW_FILE =  ".*\\.(?:$HTML_SUFFIX)|.*\\.txt" . # HTML, plain text
+               "|.*\\.gz|.*\\.Z|.*\\.bz2" .       # Compressed files
+               "|\\d+|[-\\w]+\\.[1-9n]";          # Mail/News, man
+
+#
+# This pattern specifies file names which will NOT be targeted.
+# NOTE: It can be specified by --deny=regex option.
+#       Do NOT use `$' or `^' anchors.
+#       Case-insensitive.
+#
+$DENY_FILE = "(index|threads)\\.html|.*\\.(gif|png|jpg|jpeg)|.*\\.tar\\.gz|core|.*\\.bak|.*~|\\..*|\x23.*";
+
+#
+# This pattern specifies PATHNAMEs which will NOT be targeted.
+# NOTE: Usually specified by --exclude=regex option.
+#
+# $EXCLUDE_PATH = undef;
+
+#
+# This pattern specifies file names which can be omitted 
+# in URI.  e.g., 'index.html|index.htm|Default.html'
+#
+# NOTE: This is similar to Apache's "DirectoryIndex" directive.
+#
+# $DIRECTORY_INDEX = "";
+
+#
+# This pattern specifies Mail/News's fields in its header which 
+# should be searchable.  NOTE: case-insensitive
+#
+# $REMAIN_HEADER = "From|Date|Message-ID";
+
+#
+# This pattern specifies fields which used for field-specified 
+# searching.  NOTE: case-insensitive
+# 
+# $SEARCH_FIELD = "message-id|subject|from|date|uri|newsgroups|to|summary|size";
+
+#
+# This pattern specifies meta tags which used for field-specified 
+# searching.  NOTE: case-insensitive
+#
+# $META_TAGS = "keywords|description";
+
+#
+# This pattern specifies aliases for NMZ.field.* files.
+# NOTE: Editing NOT recommended.
+#
+# %FIELD_ALIASES = ('title' => 'subject', 'author' => 'from');
+
+#
+# This pattern specifies HTML elements which should be replaced with 
+# null string when removing them. Normally, the elements are replaced 
+# with a single space character.
+#
+# $NON_SEPARATION_ELEMENTS = 'A|TT|CODE|SAMP|KBD|VAR|B|STRONG|I|EM|CITE|FONT|U|'.
+#                        'STRIKE|BIG|SMALL|DFN|ABBR|ACRONYM|Q|SUB|SUP|SPAN|BDO';
+
+#===================================================================
+# 
+# Critical Numbers
+# 
+
+# 
+# The max size of files which can be loaded in memory at once.
+# If you have much memory, you can increase the value.
+# If you have less memory, you can decrease the value.
+#
+$ON_MEMORY_MAX   = 5000000;
+
+#
+# The max file size for indexing. Files larger than this 
+# will be ignored.
+# NOTE: This value is usually larger than TEXT_SIZE_MAX because 
+#       binary-formated files such as PDF, Word are larger.
+#
+$FILE_SIZE_MAX   = 500000;
+
+#
+# The max text size for indexing. Files larger than this 
+# will be ignored.
+#
+$TEXT_SIZE_MAX   =  100000;
+
+#
+# The max length of a word. the word longer than this will be ignored.
+#
+$WORD_LENG_MAX   = 40;
+
+
+#
+# Weights for HTML elements which are used for term weightning.
+#
+# %Weight = 
+#     (
+#      'html' => {
+#          'title'  => 16,
+#          'h1'     => 8,
+#          'h2'     => 7,
+#          'h3'     => 6,
+#          'h4'     => 5,
+#          'h5'     => 4,
+#          'h6'     => 3,
+#          'a'      => 4,
+#          'strong' => 2,
+#          'em'     => 2,
+#          'kbd'    => 2,
+#          'samp'   => 2,
+#          'var'    => 2,
+#          'code'   => 2,
+#          'cite'   => 2,
+#          'abbr'   => 2,
+#          'acronym'=> 2,
+#          'dfn'    => 2,
+#      },
+#      'metakey' => 32, # for <meta name="keywords" content="foo bar">
+#      'headers' => 8,  # for Mail/News' headers
+# );
+
+#
+# The max length of a HTML-tagged string which can be processed for
+# term weighting. 
+# NOTE: There are not a few people has a bad manner using 
+#       <h[1-6]> for changing a font size.
+#
+# $INVALID_LENG = 128; 
+
+#
+# The max length of a field.
+# This MUST be smaller than libnamazu.h's BUFSIZE (usually 1024).
+#
+# $MAX_FIELD_LENGTH = 200;
+
+
+#===================================================================
+#
+# Softwares for handling a Japanese text
+#
+
+#
+# Network Kanji Filter nkf v1.62 or later
+#
+# $NKF = "no"; 
+
+#
+# KAKASI
+#
+# $KAKASI = "no -ieuc -oeuc -w";
+
+#
+# ChaSen 1.51 or later (simple wakatigaki)
+#
+# $CHASEN = "no -j -F '\%m '";
+
+#
+# ChaSen 1.51 or later (with noun words extraction)
+#
+# $CHASEN_NOUN = "no -j -F '\%m %H\\n'";
+
+#
+# Default Japanese processer: KAKASI or ChaSen.
+#
+# $WAKATI  = $none;
+
+
+#===================================================================
+#
+# Directories
+#
+# $LIBDIR = "@PERLLIBDIR@";
+# $FILTERDIR = "@FILTERDIR@";
+# $TEMPLATEDIR = "@TEMPLATEDIR@";
+
+# 1;
+
diff --git a/cgi-bin/mknmzrc.in b/cgi-bin/mknmzrc.in
new file mode 100644 (file)
index 0000000..d732a13
--- /dev/null
@@ -0,0 +1,203 @@
+# $Id: mknmzrc.in.dist,v 1.3 2002/03/06 22:47:29 ehood Exp $
+# This is a Namazu configuration file for mknmz.
+#
+package conf;  # Don't remove this line!
+
+#===================================================================
+#
+# Administrator's email address
+#
+$ADDRESS = '@@ADMIN_ADDRESS@@';
+
+
+#===================================================================
+#
+# Regular Expression Patterns
+#
+
+#
+# This pattern specifies HTML suffixes.
+#
+$HTML_SUFFIX = "html|[ps]html";
+
+#
+# This pattern specifies file names which will be targeted.
+# NOTE: It can be specified by --allow=regex option.
+#       Do NOT use `$' or `^' anchors.
+#       Case-insensitive.
+#
+$ALLOW_FILE =  ".*\\.(?:$HTML_SUFFIX)|.*\\.txt" . # HTML, plain text
+               "|.*\\.gz|.*\\.Z|.*\\.bz2" .       # Compressed files
+               "|\\d+|[-\\w]+\\.[1-9n]";          # Mail/News, man
+
+#
+# This pattern specifies file names which will NOT be targeted.
+# NOTE: It can be specified by --deny=regex option.
+#       Do NOT use `$' or `^' anchors.
+#       Case-insensitive.
+#
+$DENY_FILE = "(index|threads)\\.html|.*\\.(gif|png|jpg|jpeg)|.*\\.tar\\.gz|core|.*\\.bak|.*~|\\..*|\x23.*";
+
+#
+# This pattern specifies PATHNAMEs which will NOT be targeted.
+# NOTE: Usually specified by --exclude=regex option.
+#
+# $EXCLUDE_PATH = undef;
+
+#
+# This pattern specifies file names which can be omitted 
+# in URI.  e.g., 'index.html|index.htm|Default.html'
+#
+# NOTE: This is similar to Apache's "DirectoryIndex" directive.
+#
+# $DIRECTORY_INDEX = "";
+
+#
+# This pattern specifies Mail/News's fields in its header which 
+# should be searchable.  NOTE: case-insensitive
+#
+# $REMAIN_HEADER = "From|Date|Message-ID";
+
+#
+# This pattern specifies fields which used for field-specified 
+# searching.  NOTE: case-insensitive
+# 
+# $SEARCH_FIELD = "message-id|subject|from|date|uri|newsgroups|to|summary|size";
+
+#
+# This pattern specifies meta tags which used for field-specified 
+# searching.  NOTE: case-insensitive
+#
+# $META_TAGS = "keywords|description";
+
+#
+# This pattern specifies aliases for NMZ.field.* files.
+# NOTE: Editing NOT recommended.
+#
+# %FIELD_ALIASES = ('title' => 'subject', 'author' => 'from');
+
+#
+# This pattern specifies HTML elements which should be replaced with 
+# null string when removing them. Normally, the elements are replaced 
+# with a single space character.
+#
+# $NON_SEPARATION_ELEMENTS = 'A|TT|CODE|SAMP|KBD|VAR|B|STRONG|I|EM|CITE|FONT|U|'.
+#                        'STRIKE|BIG|SMALL|DFN|ABBR|ACRONYM|Q|SUB|SUP|SPAN|BDO';
+
+#===================================================================
+# 
+# Critical Numbers
+# 
+
+# 
+# The max size of files which can be loaded in memory at once.
+# If you have much memory, you can increase the value.
+# If you have less memory, you can decrease the value.
+#
+$ON_MEMORY_MAX   = 5000000;
+
+#
+# The max file size for indexing. Files larger than this 
+# will be ignored.
+# NOTE: This value is usually larger than TEXT_SIZE_MAX because 
+#       binary-formated files such as PDF, Word are larger.
+#
+$FILE_SIZE_MAX   = 500000;
+
+#
+# The max text size for indexing. Files larger than this 
+# will be ignored.
+#
+$TEXT_SIZE_MAX   =  100000;
+
+#
+# The max length of a word. the word longer than this will be ignored.
+#
+$WORD_LENG_MAX   = 40;
+
+
+#
+# Weights for HTML elements which are used for term weightning.
+#
+# %Weight = 
+#     (
+#      'html' => {
+#          'title'  => 16,
+#          'h1'     => 8,
+#          'h2'     => 7,
+#          'h3'     => 6,
+#          'h4'     => 5,
+#          'h5'     => 4,
+#          'h6'     => 3,
+#          'a'      => 4,
+#          'strong' => 2,
+#          'em'     => 2,
+#          'kbd'    => 2,
+#          'samp'   => 2,
+#          'var'    => 2,
+#          'code'   => 2,
+#          'cite'   => 2,
+#          'abbr'   => 2,
+#          'acronym'=> 2,
+#          'dfn'    => 2,
+#      },
+#      'metakey' => 32, # for <meta name="keywords" content="foo bar">
+#      'headers' => 8,  # for Mail/News' headers
+# );
+
+#
+# The max length of a HTML-tagged string which can be processed for
+# term weighting. 
+# NOTE: There are not a few people has a bad manner using 
+#       <h[1-6]> for changing a font size.
+#
+# $INVALID_LENG = 128; 
+
+#
+# The max length of a field.
+# This MUST be smaller than libnamazu.h's BUFSIZE (usually 1024).
+#
+# $MAX_FIELD_LENGTH = 200;
+
+
+#===================================================================
+#
+# Softwares for handling a Japanese text
+#
+
+#
+# Network Kanji Filter nkf v1.62 or later
+#
+# $NKF = "no"; 
+
+#
+# KAKASI
+#
+# $KAKASI = "no -ieuc -oeuc -w";
+
+#
+# ChaSen 1.51 or later (simple wakatigaki)
+#
+# $CHASEN = "no -j -F '\%m '";
+
+#
+# ChaSen 1.51 or later (with noun words extraction)
+#
+# $CHASEN_NOUN = "no -j -F '\%m %H\\n'";
+
+#
+# Default Japanese processer: KAKASI or ChaSen.
+#
+# $WAKATI  = $none;
+
+
+#===================================================================
+#
+# Directories
+#
+# $LIBDIR = "@PERLLIBDIR@";
+# $FILTERDIR = "@FILTERDIR@";
+# $TEMPLATEDIR = "@TEMPLATEDIR@";
+
+# 1;
+
diff --git a/cgi-bin/mknmzrc.in.dist b/cgi-bin/mknmzrc.in.dist
new file mode 100644 (file)
index 0000000..d732a13
--- /dev/null
@@ -0,0 +1,203 @@
+# $Id: mknmzrc.in.dist,v 1.3 2002/03/06 22:47:29 ehood Exp $
+# This is a Namazu configuration file for mknmz.
+#
+package conf;  # Don't remove this line!
+
+#===================================================================
+#
+# Administrator's email address
+#
+$ADDRESS = '@@ADMIN_ADDRESS@@';
+
+
+#===================================================================
+#
+# Regular Expression Patterns
+#
+
+#
+# This pattern specifies HTML suffixes.
+#
+$HTML_SUFFIX = "html|[ps]html";
+
+#
+# This pattern specifies file names which will be targeted.
+# NOTE: It can be specified by --allow=regex option.
+#       Do NOT use `$' or `^' anchors.
+#       Case-insensitive.
+#
+$ALLOW_FILE =  ".*\\.(?:$HTML_SUFFIX)|.*\\.txt" . # HTML, plain text
+               "|.*\\.gz|.*\\.Z|.*\\.bz2" .       # Compressed files
+               "|\\d+|[-\\w]+\\.[1-9n]";          # Mail/News, man
+
+#
+# This pattern specifies file names which will NOT be targeted.
+# NOTE: It can be specified by --deny=regex option.
+#       Do NOT use `$' or `^' anchors.
+#       Case-insensitive.
+#
+$DENY_FILE = "(index|threads)\\.html|.*\\.(gif|png|jpg|jpeg)|.*\\.tar\\.gz|core|.*\\.bak|.*~|\\..*|\x23.*";
+
+#
+# This pattern specifies PATHNAMEs which will NOT be targeted.
+# NOTE: Usually specified by --exclude=regex option.
+#
+# $EXCLUDE_PATH = undef;
+
+#
+# This pattern specifies file names which can be omitted 
+# in URI.  e.g., 'index.html|index.htm|Default.html'
+#
+# NOTE: This is similar to Apache's "DirectoryIndex" directive.
+#
+# $DIRECTORY_INDEX = "";
+
+#
+# This pattern specifies Mail/News's fields in its header which 
+# should be searchable.  NOTE: case-insensitive
+#
+# $REMAIN_HEADER = "From|Date|Message-ID";
+
+#
+# This pattern specifies fields which used for field-specified 
+# searching.  NOTE: case-insensitive
+# 
+# $SEARCH_FIELD = "message-id|subject|from|date|uri|newsgroups|to|summary|size";
+
+#
+# This pattern specifies meta tags which used for field-specified 
+# searching.  NOTE: case-insensitive
+#
+# $META_TAGS = "keywords|description";
+
+#
+# This pattern specifies aliases for NMZ.field.* files.
+# NOTE: Editing NOT recommended.
+#
+# %FIELD_ALIASES = ('title' => 'subject', 'author' => 'from');
+
+#
+# This pattern specifies HTML elements which should be replaced with 
+# null string when removing them. Normally, the elements are replaced 
+# with a single space character.
+#
+# $NON_SEPARATION_ELEMENTS = 'A|TT|CODE|SAMP|KBD|VAR|B|STRONG|I|EM|CITE|FONT|U|'.
+#                        'STRIKE|BIG|SMALL|DFN|ABBR|ACRONYM|Q|SUB|SUP|SPAN|BDO';
+
+#===================================================================
+# 
+# Critical Numbers
+# 
+
+# 
+# The max size of files which can be loaded in memory at once.
+# If you have much memory, you can increase the value.
+# If you have less memory, you can decrease the value.
+#
+$ON_MEMORY_MAX   = 5000000;
+
+#
+# The max file size for indexing. Files larger than this 
+# will be ignored.
+# NOTE: This value is usually larger than TEXT_SIZE_MAX because 
+#       binary-formated files such as PDF, Word are larger.
+#
+$FILE_SIZE_MAX   = 500000;
+
+#
+# The max text size for indexing. Files larger than this 
+# will be ignored.
+#
+$TEXT_SIZE_MAX   =  100000;
+
+#
+# The max length of a word. the word longer than this will be ignored.
+#
+$WORD_LENG_MAX   = 40;
+
+
+#
+# Weights for HTML elements which are used for term weightning.
+#
+# %Weight = 
+#     (
+#      'html' => {
+#          'title'  => 16,
+#          'h1'     => 8,
+#          'h2'     => 7,
+#          'h3'     => 6,
+#          'h4'     => 5,
+#          'h5'     => 4,
+#          'h6'     => 3,
+#          'a'      => 4,
+#          'strong' => 2,
+#          'em'     => 2,
+#          'kbd'    => 2,
+#          'samp'   => 2,
+#          'var'    => 2,
+#          'code'   => 2,
+#          'cite'   => 2,
+#          'abbr'   => 2,
+#          'acronym'=> 2,
+#          'dfn'    => 2,
+#      },
+#      'metakey' => 32, # for <meta name="keywords" content="foo bar">
+#      'headers' => 8,  # for Mail/News' headers
+# );
+
+#
+# The max length of a HTML-tagged string which can be processed for
+# term weighting. 
+# NOTE: There are not a few people has a bad manner using 
+#       <h[1-6]> for changing a font size.
+#
+# $INVALID_LENG = 128; 
+
+#
+# The max length of a field.
+# This MUST be smaller than libnamazu.h's BUFSIZE (usually 1024).
+#
+# $MAX_FIELD_LENGTH = 200;
+
+
+#===================================================================
+#
+# Softwares for handling a Japanese text
+#
+
+#
+# Network Kanji Filter nkf v1.62 or later
+#
+# $NKF = "no"; 
+
+#
+# KAKASI
+#
+# $KAKASI = "no -ieuc -oeuc -w";
+
+#
+# ChaSen 1.51 or later (simple wakatigaki)
+#
+# $CHASEN = "no -j -F '\%m '";
+
+#
+# ChaSen 1.51 or later (with noun words extraction)
+#
+# $CHASEN_NOUN = "no -j -F '\%m %H\\n'";
+
+#
+# Default Japanese processer: KAKASI or ChaSen.
+#
+# $WAKATI  = $none;
+
+
+#===================================================================
+#
+# Directories
+#
+# $LIBDIR = "@PERLLIBDIR@";
+# $FILTERDIR = "@FILTERDIR@";
+# $TEMPLATEDIR = "@TEMPLATEDIR@";
+
+# 1;
+
diff --git a/cgi-bin/mnav.cgi b/cgi-bin/mnav.cgi
new file mode 100755 (executable)
index 0000000..f1bd726
--- /dev/null
@@ -0,0 +1,183 @@
+#!/usr/bin/perl
+##--------------------------------------------------------------------------##
+##  File:
+##      $Id: mnav.cgi.in.dist,v 1.5 2002/10/17 03:11:31 ehood Exp $
+##  Author:
+##      Earl Hood       earl@earlhood.com
+##  Description:
+##     POD at end-of-file.
+##--------------------------------------------------------------------------##
+##  Copyright (C) 2001-2002    Earl Hood <earl@earlhood.com>
+##
+##  This program is free software; you can redistribute it and/or modify
+##  it under the terms of the GNU General Public License as published by
+##  the Free Software Foundation; either version 2 of the License, or
+##  (at your option) any later version.
+##  
+##  This program is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+##  GNU General Public License for more details.
+##  
+##  You should have received a copy of the GNU General Public License
+##  along with this program; if not, write to the Free Software
+##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+##  02111-1307, USA
+##--------------------------------------------------------------------------##
+
+package mnav_cgi;
+
+use lib '/home/mharc/lib';
+
+use CGI::Carp;
+use MHArc::CGI;
+
+#############################################################################
+##     BEGIN: Config Section
+#############################################################################
+
+## Full pathname to where HTML archives are located.
+my $html_archive_root = '/home/mharc/html';
+
+## URL pathname to where HTML archives are located.
+my $url_archive_root = '/archive/html';
+
+#############################################################################
+##     END: Config Section
+#############################################################################
+
+## Query argument name to contain name of archive
+my $argname_archive = 'a';
+
+## Query argumant name to contain nav direction ('next' or 'prev')
+my $argname_direction = 'd';
+
+## Query argument name to contain month
+my $argname_month = 'm';
+
+## Query argument name to contain type of index
+my $argname_type = 't';
+
+MAIN: {
+  my $form     = MHArc::CGI::parse_input();
+  my $archive  = $form->{$argname_archive};
+  my $direction = $form->{$argname_direction};
+  my $month    = $form->{$argname_month};
+  my $type     = $form->{$argname_type};
+  my $host     = $ENV{'HTTP_HOST'} || $ENV{'SERVER_NAME'} ||
+                 $ENV{'SERVER_ADDR'} || 'localhost';
+  my $port     = $ENV{'SERVER_PORT'} || "";
+  my $http     = ($ENV{'HTTPS'} eq 'on') ? 'https' : 'http';
+  if ($port && $port ne '80') {
+    $port = ":$port";
+  } else {
+    $port = "";
+  }
+
+  if (($archive =~ /\.\./) || ($archive =~ /[\\\/]/)) {
+    warn qq/Fishy looking archive setting: $archive\n/;
+    MHArc::CGI::print_input_error();
+    last MAIN;
+  }
+  if ($month !~ /^\d+(?:-\d+)?/) {
+    warn qq/Invalid month: $month\n/;
+    MHArc::CGI::print_input_error();
+    last MAIN;
+  }
+
+  my $server_url= "$http://$host$port";
+  my $dir      = join('/', $html_archive_root, $archive);
+  my $url      = $server_url . join('/', $url_archive_root, $archive);
+
+  local(*DIR);
+  if (!opendir(DIR, $dir)) {
+      warn qq/Unable to open "$dir": $!\n/;
+      MHArc::CGI::print_location($url);
+      last MAIN;
+  }
+
+  my @months = sort grep { /^\d+(?:-\d+)?/ } readdir(DIR);
+  close(DIR);
+  if (scalar(@months) <= 0) {
+    # No month directories, so jump to top index
+    MHArc::CGI::print_location($url);
+    last MAIN;
+  }
+
+  # Search for current month in listing
+  my($i);
+  for ($i=0; $i <= $#months; ++$i) {
+    last if $month eq $months[$i];
+  }
+  # Adjust offset according to direction
+  if ($direction =~ /prev/) { --$i; } else { ++$i; }
+  if (($i < 0) || ($i > $#months)) {
+    # Hit bounds, so jump user to top index
+    MHArc::CGI::print_location($url);
+    last MAIN;
+  }
+
+  # Redirect user to new month
+  $url .= '/' . $months[$i] . '/' .
+         ($type eq 't' ? 'threads.html' : 'index.html');
+  MHArc::CGI::print_location($url)
+}
+
+########################################################################
+__END__
+
+=head1 NAME
+
+mnav.cgi - mharc CGI program to navigate between period indexes
+
+=head1 SYNOPSIS
+
+  http://.../cgi-bin/mnav?a=<archive>&m=<period>&d=<direction>&t=<type>
+
+=head1 DESCRIPTION
+
+This CGI program is used for the next/prev period navigation for
+an archive.
+
+The CGI program will send a client redirect URL to the period index
+determined by specified input.
+
+=head1 CGI OPTIONS
+
+=over
+
+=item C<a>
+
+The name of the archive.  Archive names are defined by C<lists.def>.
+
+=item C<d>
+
+The direction.  Possible values are "C<prev>" or "C<next>".
+
+=item C<m>
+
+The period in YYYY-MM or YYYY format.
+
+=item C<t>
+
+The type of index to goto.  For thread index, the value should be
+set to "C<t>".  If not set, or set to something else, date indexes
+are used.
+
+=back
+
+=head1 VERSION
+
+C<$Id: mnav.cgi.in.dist,v 1.5 2002/10/17 03:11:31 ehood Exp $>
+
+=head1 AUTHOR
+
+Earl Hood, earl@earlhood.com
+
+This module is part of the mharc archiving system and comes with
+ABSOLUTELY NO WARRANTY and may be copied only under the terms of
+the GNU General Public License, which may be found in the MHArc
+distribution.
+
+=cut
+
diff --git a/cgi-bin/mnav.cgi.in b/cgi-bin/mnav.cgi.in
new file mode 100755 (executable)
index 0000000..f415bf1
--- /dev/null
@@ -0,0 +1,183 @@
+#!/usr/bin/perl
+##--------------------------------------------------------------------------##
+##  File:
+##      $Id: mnav.cgi.in.dist,v 1.5 2002/10/17 03:11:31 ehood Exp $
+##  Author:
+##      Earl Hood       earl@earlhood.com
+##  Description:
+##     POD at end-of-file.
+##--------------------------------------------------------------------------##
+##  Copyright (C) 2001-2002    Earl Hood <earl@earlhood.com>
+##
+##  This program is free software; you can redistribute it and/or modify
+##  it under the terms of the GNU General Public License as published by
+##  the Free Software Foundation; either version 2 of the License, or
+##  (at your option) any later version.
+##  
+##  This program is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+##  GNU General Public License for more details.
+##  
+##  You should have received a copy of the GNU General Public License
+##  along with this program; if not, write to the Free Software
+##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+##  02111-1307, USA
+##--------------------------------------------------------------------------##
+
+package mnav_cgi;
+
+use lib '@@SW_ROOT@@/lib';
+
+use CGI::Carp;
+use MHArc::CGI;
+
+#############################################################################
+##     BEGIN: Config Section
+#############################################################################
+
+## Full pathname to where HTML archives are located.
+my $html_archive_root = '@@HTML_DIR@@';
+
+## URL pathname to where HTML archives are located.
+my $url_archive_root = '@@HTML_URL@@';
+
+#############################################################################
+##     END: Config Section
+#############################################################################
+
+## Query argument name to contain name of archive
+my $argname_archive = 'a';
+
+## Query argumant name to contain nav direction ('next' or 'prev')
+my $argname_direction = 'd';
+
+## Query argument name to contain month
+my $argname_month = 'm';
+
+## Query argument name to contain type of index
+my $argname_type = 't';
+
+MAIN: {
+  my $form     = MHArc::CGI::parse_input();
+  my $archive  = $form->{$argname_archive};
+  my $direction = $form->{$argname_direction};
+  my $month    = $form->{$argname_month};
+  my $type     = $form->{$argname_type};
+  my $host     = $ENV{'HTTP_HOST'} || $ENV{'SERVER_NAME'} ||
+                 $ENV{'SERVER_ADDR'} || 'localhost';
+  my $port     = $ENV{'SERVER_PORT'} || "";
+  my $http     = ($ENV{'HTTPS'} eq 'on') ? 'https' : 'http';
+  if ($port && $port ne '80') {
+    $port = ":$port";
+  } else {
+    $port = "";
+  }
+
+  if (($archive =~ /\.\./) || ($archive =~ /[\\\/]/)) {
+    warn qq/Fishy looking archive setting: $archive\n/;
+    MHArc::CGI::print_input_error();
+    last MAIN;
+  }
+  if ($month !~ /^\d+(?:-\d+)?/) {
+    warn qq/Invalid month: $month\n/;
+    MHArc::CGI::print_input_error();
+    last MAIN;
+  }
+
+  my $server_url= "$http://$host$port";
+  my $dir      = join('/', $html_archive_root, $archive);
+  my $url      = $server_url . join('/', $url_archive_root, $archive);
+
+  local(*DIR);
+  if (!opendir(DIR, $dir)) {
+      warn qq/Unable to open "$dir": $!\n/;
+      MHArc::CGI::print_location($url);
+      last MAIN;
+  }
+
+  my @months = sort grep { /^\d+(?:-\d+)?/ } readdir(DIR);
+  close(DIR);
+  if (scalar(@months) <= 0) {
+    # No month directories, so jump to top index
+    MHArc::CGI::print_location($url);
+    last MAIN;
+  }
+
+  # Search for current month in listing
+  my($i);
+  for ($i=0; $i <= $#months; ++$i) {
+    last if $month eq $months[$i];
+  }
+  # Adjust offset according to direction
+  if ($direction =~ /prev/) { --$i; } else { ++$i; }
+  if (($i < 0) || ($i > $#months)) {
+    # Hit bounds, so jump user to top index
+    MHArc::CGI::print_location($url);
+    last MAIN;
+  }
+
+  # Redirect user to new month
+  $url .= '/' . $months[$i] . '/' .
+         ($type eq 't' ? 'threads.html' : 'index.html');
+  MHArc::CGI::print_location($url)
+}
+
+########################################################################
+__END__
+
+=head1 NAME
+
+mnav.cgi - mharc CGI program to navigate between period indexes
+
+=head1 SYNOPSIS
+
+  http://.../cgi-bin/mnav?a=<archive>&m=<period>&d=<direction>&t=<type>
+
+=head1 DESCRIPTION
+
+This CGI program is used for the next/prev period navigation for
+an archive.
+
+The CGI program will send a client redirect URL to the period index
+determined by specified input.
+
+=head1 CGI OPTIONS
+
+=over
+
+=item C<a>
+
+The name of the archive.  Archive names are defined by C<lists.def>.
+
+=item C<d>
+
+The direction.  Possible values are "C<prev>" or "C<next>".
+
+=item C<m>
+
+The period in YYYY-MM or YYYY format.
+
+=item C<t>
+
+The type of index to goto.  For thread index, the value should be
+set to "C<t>".  If not set, or set to something else, date indexes
+are used.
+
+=back
+
+=head1 VERSION
+
+C<$Id: mnav.cgi.in.dist,v 1.5 2002/10/17 03:11:31 ehood Exp $>
+
+=head1 AUTHOR
+
+Earl Hood, earl@earlhood.com
+
+This module is part of the mharc archiving system and comes with
+ABSOLUTELY NO WARRANTY and may be copied only under the terms of
+the GNU General Public License, which may be found in the MHArc
+distribution.
+
+=cut
+
diff --git a/cgi-bin/mnav.cgi.in.dist b/cgi-bin/mnav.cgi.in.dist
new file mode 100755 (executable)
index 0000000..f415bf1
--- /dev/null
@@ -0,0 +1,183 @@
+#!/usr/bin/perl
+##--------------------------------------------------------------------------##
+##  File:
+##      $Id: mnav.cgi.in.dist,v 1.5 2002/10/17 03:11:31 ehood Exp $
+##  Author:
+##      Earl Hood       earl@earlhood.com
+##  Description:
+##     POD at end-of-file.
+##--------------------------------------------------------------------------##
+##  Copyright (C) 2001-2002    Earl Hood <earl@earlhood.com>
+##
+##  This program is free software; you can redistribute it and/or modify
+##  it under the terms of the GNU General Public License as published by
+##  the Free Software Foundation; either version 2 of the License, or
+##  (at your option) any later version.
+##  
+##  This program is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+##  GNU General Public License for more details.
+##  
+##  You should have received a copy of the GNU General Public License
+##  along with this program; if not, write to the Free Software
+##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+##  02111-1307, USA
+##--------------------------------------------------------------------------##
+
+package mnav_cgi;
+
+use lib '@@SW_ROOT@@/lib';
+
+use CGI::Carp;
+use MHArc::CGI;
+
+#############################################################################
+##     BEGIN: Config Section
+#############################################################################
+
+## Full pathname to where HTML archives are located.
+my $html_archive_root = '@@HTML_DIR@@';
+
+## URL pathname to where HTML archives are located.
+my $url_archive_root = '@@HTML_URL@@';
+
+#############################################################################
+##     END: Config Section
+#############################################################################
+
+## Query argument name to contain name of archive
+my $argname_archive = 'a';
+
+## Query argumant name to contain nav direction ('next' or 'prev')
+my $argname_direction = 'd';
+
+## Query argument name to contain month
+my $argname_month = 'm';
+
+## Query argument name to contain type of index
+my $argname_type = 't';
+
+MAIN: {
+  my $form     = MHArc::CGI::parse_input();
+  my $archive  = $form->{$argname_archive};
+  my $direction = $form->{$argname_direction};
+  my $month    = $form->{$argname_month};
+  my $type     = $form->{$argname_type};
+  my $host     = $ENV{'HTTP_HOST'} || $ENV{'SERVER_NAME'} ||
+                 $ENV{'SERVER_ADDR'} || 'localhost';
+  my $port     = $ENV{'SERVER_PORT'} || "";
+  my $http     = ($ENV{'HTTPS'} eq 'on') ? 'https' : 'http';
+  if ($port && $port ne '80') {
+    $port = ":$port";
+  } else {
+    $port = "";
+  }
+
+  if (($archive =~ /\.\./) || ($archive =~ /[\\\/]/)) {
+    warn qq/Fishy looking archive setting: $archive\n/;
+    MHArc::CGI::print_input_error();
+    last MAIN;
+  }
+  if ($month !~ /^\d+(?:-\d+)?/) {
+    warn qq/Invalid month: $month\n/;
+    MHArc::CGI::print_input_error();
+    last MAIN;
+  }
+
+  my $server_url= "$http://$host$port";
+  my $dir      = join('/', $html_archive_root, $archive);
+  my $url      = $server_url . join('/', $url_archive_root, $archive);
+
+  local(*DIR);
+  if (!opendir(DIR, $dir)) {
+      warn qq/Unable to open "$dir": $!\n/;
+      MHArc::CGI::print_location($url);
+      last MAIN;
+  }
+
+  my @months = sort grep { /^\d+(?:-\d+)?/ } readdir(DIR);
+  close(DIR);
+  if (scalar(@months) <= 0) {
+    # No month directories, so jump to top index
+    MHArc::CGI::print_location($url);
+    last MAIN;
+  }
+
+  # Search for current month in listing
+  my($i);
+  for ($i=0; $i <= $#months; ++$i) {
+    last if $month eq $months[$i];
+  }
+  # Adjust offset according to direction
+  if ($direction =~ /prev/) { --$i; } else { ++$i; }
+  if (($i < 0) || ($i > $#months)) {
+    # Hit bounds, so jump user to top index
+    MHArc::CGI::print_location($url);
+    last MAIN;
+  }
+
+  # Redirect user to new month
+  $url .= '/' . $months[$i] . '/' .
+         ($type eq 't' ? 'threads.html' : 'index.html');
+  MHArc::CGI::print_location($url)
+}
+
+########################################################################
+__END__
+
+=head1 NAME
+
+mnav.cgi - mharc CGI program to navigate between period indexes
+
+=head1 SYNOPSIS
+
+  http://.../cgi-bin/mnav?a=<archive>&m=<period>&d=<direction>&t=<type>
+
+=head1 DESCRIPTION
+
+This CGI program is used for the next/prev period navigation for
+an archive.
+
+The CGI program will send a client redirect URL to the period index
+determined by specified input.
+
+=head1 CGI OPTIONS
+
+=over
+
+=item C<a>
+
+The name of the archive.  Archive names are defined by C<lists.def>.
+
+=item C<d>
+
+The direction.  Possible values are "C<prev>" or "C<next>".
+
+=item C<m>
+
+The period in YYYY-MM or YYYY format.
+
+=item C<t>
+
+The type of index to goto.  For thread index, the value should be
+set to "C<t>".  If not set, or set to something else, date indexes
+are used.
+
+=back
+
+=head1 VERSION
+
+C<$Id: mnav.cgi.in.dist,v 1.5 2002/10/17 03:11:31 ehood Exp $>
+
+=head1 AUTHOR
+
+Earl Hood, earl@earlhood.com
+
+This module is part of the mharc archiving system and comes with
+ABSOLUTELY NO WARRANTY and may be copied only under the terms of
+the GNU General Public License, which may be found in the MHArc
+distribution.
+
+=cut
+
diff --git a/cgi-bin/namazu.cgi b/cgi-bin/namazu.cgi
new file mode 120000 (symlink)
index 0000000..715722f
--- /dev/null
@@ -0,0 +1 @@
+/usr/lib/cgi-bin/namazu.cgi
\ No newline at end of file
diff --git a/cgi-bin/template/NMZ.body b/cgi-bin/template/NMZ.body
new file mode 100644 (file)
index 0000000..f7706f1
--- /dev/null
@@ -0,0 +1,184 @@
+<h2><a name="query">Query</a></h2>
+
+<h3><a name="query-term">Single term query</a></h3>
+<p>
+The query specifies only one term for retrieving all
+documents which contain the term. e.g., 
+</p>
+
+<p class="example">
+namazu
+</p>
+
+<h3><a name="query-and">AND query</a></h3> 
+
+<p>
+The query specifies two or more terms for retrieving all
+documents which contain both terms. You can insert the
+<code class="operator">and</code> operator between the terms. e.g., 
+</p>
+
+<p class="example">
+Linux and Netscape
+</p>
+
+<p>
+You can ommit the <code class="operator">and</code> operator.  Terms which is
+separated by one ore more spaces is assumed to be AND query.
+</p>
+
+<h3><a name="query-or">OR query</a></h3>
+<p>
+The query specifies two or more terms for retrieving all
+documents which contain either term. You can insert the
+<code class="operator">or</code> operator between the terms.
+e.g.,
+</p>
+
+<p class="example">
+Linux or FreeBSD
+</p>
+
+<h3><a name="query-not">NOT query</a></h3>
+<p>
+The query specifies two or more terms for retrieving all
+documents which contain a first term but does't contain the
+following terms. You can insert the <code class="operator">not</code>
+operator between the terms to do NOT query.  e.g.,
+</p>
+
+<p class="example">
+Linux not UNIX
+</p>
+
+
+<h3><a name="query-grouping">Grouping</a></h3>
+<p>
+You can group queries by surrounding them by
+parentheses. The parentheses should be separated by one or
+more spaces. e.g., 
+</p>
+
+<p class="example">
+( Linux or FreeBSD ) and Netscape not Windows
+</p>
+
+<h3><a name="query-phrase">Phrase searching</a></h3>
+<p>
+You can search for a phrase which consists of two or more terms
+by surrounding them with double quotes like
+<code class="operator">"..."</code> or with braces like <code class="operator">{...}</code>.
+In Namazu, precision of phrase searching is not 100 %,
+so it causes wrong results occasionally. e.g.,
+</p>
+
+<p class="example">
+{GNU Emacs}
+</p>
+
+<!-- foo
+<p>
+You must choose the latter with Tkanamzu or namazu.el.
+</p>
+-->
+
+<h3><a name="query-substring">Substring matching</a></h3>
+<p>
+The are three types of substring matching searching.
+</p>
+
+<dl> 
+<dt>Prefix matching
+<dd><code class="example">inter*</code> (terms which begin with <code>inter</code>)
+<dt>Inside matching
+<dd><code class="example">*text*</code> (terms which contain <code>text</code>) 
+<dt>Suffix matching
+<dd><code class="example">*net</code> (terms which terminated
+with <code>net</code>)
+</dl>
+
+
+<h3><a name="query-regex">Regular expressions</a></h3>
+
+<p>
+You can use regular expressions for pattern matching. The
+regular expressions must be surrounded by slashes like <code
+class="operator">/.../</code>. Namazu uses <a
+href="http://www.ruby-lang.org/">Ruby</a>'s regular
+regular expressions engine. It offers generally <a
+href="http://www.perl.com/">Perl</a> compatible flavor.
+e.g.,
+</p>
+
+<p class="example">
+/pro(gram|blem)s?/
+</p>
+
+
+<h3><a name="query-field">Field-specified searching</a></h3>
+<p>
+You can limit your search to specific fields such as
+<code>Subject:</code>, <code>From:</code>,
+<code>Message-Id:</code>. It's especially convenient for
+Mail/News documents. e.g.,
+</p>
+
+<ul>
+<li><code class="example">+subject:Linux</code><br>
+(Retrieving all documents which contain <code>Linux</code>
+in a <code>Subject:</code> field)
+
+<li><code class="example">+subject:"GNU Emacs"</code><br>
+(Retrieving all documents which contain <code>GNU Emacs</code>
+in a <code>Subject:</code> field)
+
+<li><code class="example">+from:foo@bar.jp</code><br>
+(Retrieving all documents which contain <code>foo@bar.jp</code>
+in a <code>From:</code> field)
+
+
+<li><code class="example">+message-id:&lt;199801240555.OAA18737@foo.bar.jp&gt;</code><br>
+(Retrieving a certain document which contains specified
+<code>Message-Id:</code>)
+</ul>
+
+<h3><a name="query-notes">Notes</a></h3>
+
+<ul>
+<li>In any queries, Namazu ignores case distinctions of
+alphabet characters. In other words, Namazu does
+case-insensitive pattern matching in any time.
+
+
+<li>Japanese phrases are forced to be segmented into
+morphemes automatically and are handled them as <a
+href="#query-phrase">phrase searching</a>. This processing
+causes invalid segmentation occasionally.
+
+
+<li>Alphabet, numbers or a part of symbols (duplicated in
+ASCII) characters which defined in JIS X 0208 (Japanese
+Industrial Standards) are handled as ASCII characters.
+
+<li>Namazu can handle a term which contains symbols like
+<code>TCP/IP</code>.  Since this handling isn't complete,
+you can describe <code>TCP and IP</code> instead of
+<code>TCP/IP</code>, but it may cause noisy results.
+
+
+<li>Substring matching and field-specified searching takes
+more time than other methods.
+
+<li>If you want to use <code class="operator">and</code>,
+<code class="operator">or</code> or <code
+class="operator">not</code> simply as terms, you can
+surround them respectively with double quotes like <code
+class="operator">"..."</code> or braces like <code
+class="operator">{...}</code>. 
+
+<!-- foo
+You must choose the latter with Tkanamzu or namazu.el.
+-->
+
+</ul>
+
diff --git a/cgi-bin/template/NMZ.body.in b/cgi-bin/template/NMZ.body.in
new file mode 100644 (file)
index 0000000..f7706f1
--- /dev/null
@@ -0,0 +1,184 @@
+<h2><a name="query">Query</a></h2>
+
+<h3><a name="query-term">Single term query</a></h3>
+<p>
+The query specifies only one term for retrieving all
+documents which contain the term. e.g., 
+</p>
+
+<p class="example">
+namazu
+</p>
+
+<h3><a name="query-and">AND query</a></h3> 
+
+<p>
+The query specifies two or more terms for retrieving all
+documents which contain both terms. You can insert the
+<code class="operator">and</code> operator between the terms. e.g., 
+</p>
+
+<p class="example">
+Linux and Netscape
+</p>
+
+<p>
+You can ommit the <code class="operator">and</code> operator.  Terms which is
+separated by one ore more spaces is assumed to be AND query.
+</p>
+
+<h3><a name="query-or">OR query</a></h3>
+<p>
+The query specifies two or more terms for retrieving all
+documents which contain either term. You can insert the
+<code class="operator">or</code> operator between the terms.
+e.g.,
+</p>
+
+<p class="example">
+Linux or FreeBSD
+</p>
+
+<h3><a name="query-not">NOT query</a></h3>
+<p>
+The query specifies two or more terms for retrieving all
+documents which contain a first term but does't contain the
+following terms. You can insert the <code class="operator">not</code>
+operator between the terms to do NOT query.  e.g.,
+</p>
+
+<p class="example">
+Linux not UNIX
+</p>
+
+
+<h3><a name="query-grouping">Grouping</a></h3>
+<p>
+You can group queries by surrounding them by
+parentheses. The parentheses should be separated by one or
+more spaces. e.g., 
+</p>
+
+<p class="example">
+( Linux or FreeBSD ) and Netscape not Windows
+</p>
+
+<h3><a name="query-phrase">Phrase searching</a></h3>
+<p>
+You can search for a phrase which consists of two or more terms
+by surrounding them with double quotes like
+<code class="operator">"..."</code> or with braces like <code class="operator">{...}</code>.
+In Namazu, precision of phrase searching is not 100 %,
+so it causes wrong results occasionally. e.g.,
+</p>
+
+<p class="example">
+{GNU Emacs}
+</p>
+
+<!-- foo
+<p>
+You must choose the latter with Tkanamzu or namazu.el.
+</p>
+-->
+
+<h3><a name="query-substring">Substring matching</a></h3>
+<p>
+The are three types of substring matching searching.
+</p>
+
+<dl> 
+<dt>Prefix matching
+<dd><code class="example">inter*</code> (terms which begin with <code>inter</code>)
+<dt>Inside matching
+<dd><code class="example">*text*</code> (terms which contain <code>text</code>) 
+<dt>Suffix matching
+<dd><code class="example">*net</code> (terms which terminated
+with <code>net</code>)
+</dl>
+
+
+<h3><a name="query-regex">Regular expressions</a></h3>
+
+<p>
+You can use regular expressions for pattern matching. The
+regular expressions must be surrounded by slashes like <code
+class="operator">/.../</code>. Namazu uses <a
+href="http://www.ruby-lang.org/">Ruby</a>'s regular
+regular expressions engine. It offers generally <a
+href="http://www.perl.com/">Perl</a> compatible flavor.
+e.g.,
+</p>
+
+<p class="example">
+/pro(gram|blem)s?/
+</p>
+
+
+<h3><a name="query-field">Field-specified searching</a></h3>
+<p>
+You can limit your search to specific fields such as
+<code>Subject:</code>, <code>From:</code>,
+<code>Message-Id:</code>. It's especially convenient for
+Mail/News documents. e.g.,
+</p>
+
+<ul>
+<li><code class="example">+subject:Linux</code><br>
+(Retrieving all documents which contain <code>Linux</code>
+in a <code>Subject:</code> field)
+
+<li><code class="example">+subject:"GNU Emacs"</code><br>
+(Retrieving all documents which contain <code>GNU Emacs</code>
+in a <code>Subject:</code> field)
+
+<li><code class="example">+from:foo@bar.jp</code><br>
+(Retrieving all documents which contain <code>foo@bar.jp</code>
+in a <code>From:</code> field)
+
+
+<li><code class="example">+message-id:&lt;199801240555.OAA18737@foo.bar.jp&gt;</code><br>
+(Retrieving a certain document which contains specified
+<code>Message-Id:</code>)
+</ul>
+
+<h3><a name="query-notes">Notes</a></h3>
+
+<ul>
+<li>In any queries, Namazu ignores case distinctions of
+alphabet characters. In other words, Namazu does
+case-insensitive pattern matching in any time.
+
+
+<li>Japanese phrases are forced to be segmented into
+morphemes automatically and are handled them as <a
+href="#query-phrase">phrase searching</a>. This processing
+causes invalid segmentation occasionally.
+
+
+<li>Alphabet, numbers or a part of symbols (duplicated in
+ASCII) characters which defined in JIS X 0208 (Japanese
+Industrial Standards) are handled as ASCII characters.
+
+<li>Namazu can handle a term which contains symbols like
+<code>TCP/IP</code>.  Since this handling isn't complete,
+you can describe <code>TCP and IP</code> instead of
+<code>TCP/IP</code>, but it may cause noisy results.
+
+
+<li>Substring matching and field-specified searching takes
+more time than other methods.
+
+<li>If you want to use <code class="operator">and</code>,
+<code class="operator">or</code> or <code
+class="operator">not</code> simply as terms, you can
+surround them respectively with double quotes like <code
+class="operator">"..."</code> or braces like <code
+class="operator">{...}</code>. 
+
+<!-- foo
+You must choose the latter with Tkanamzu or namazu.el.
+-->
+
+</ul>
+
diff --git a/cgi-bin/template/NMZ.body.in.dist b/cgi-bin/template/NMZ.body.in.dist
new file mode 100644 (file)
index 0000000..f7706f1
--- /dev/null
@@ -0,0 +1,184 @@
+<h2><a name="query">Query</a></h2>
+
+<h3><a name="query-term">Single term query</a></h3>
+<p>
+The query specifies only one term for retrieving all
+documents which contain the term. e.g., 
+</p>
+
+<p class="example">
+namazu
+</p>
+
+<h3><a name="query-and">AND query</a></h3> 
+
+<p>
+The query specifies two or more terms for retrieving all
+documents which contain both terms. You can insert the
+<code class="operator">and</code> operator between the terms. e.g., 
+</p>
+
+<p class="example">
+Linux and Netscape
+</p>
+
+<p>
+You can ommit the <code class="operator">and</code> operator.  Terms which is
+separated by one ore more spaces is assumed to be AND query.
+</p>
+
+<h3><a name="query-or">OR query</a></h3>
+<p>
+The query specifies two or more terms for retrieving all
+documents which contain either term. You can insert the
+<code class="operator">or</code> operator between the terms.
+e.g.,
+</p>
+
+<p class="example">
+Linux or FreeBSD
+</p>
+
+<h3><a name="query-not">NOT query</a></h3>
+<p>
+The query specifies two or more terms for retrieving all
+documents which contain a first term but does't contain the
+following terms. You can insert the <code class="operator">not</code>
+operator between the terms to do NOT query.  e.g.,
+</p>
+
+<p class="example">
+Linux not UNIX
+</p>
+
+
+<h3><a name="query-grouping">Grouping</a></h3>
+<p>
+You can group queries by surrounding them by
+parentheses. The parentheses should be separated by one or
+more spaces. e.g., 
+</p>
+
+<p class="example">
+( Linux or FreeBSD ) and Netscape not Windows
+</p>
+
+<h3><a name="query-phrase">Phrase searching</a></h3>
+<p>
+You can search for a phrase which consists of two or more terms
+by surrounding them with double quotes like
+<code class="operator">"..."</code> or with braces like <code class="operator">{...}</code>.
+In Namazu, precision of phrase searching is not 100 %,
+so it causes wrong results occasionally. e.g.,
+</p>
+
+<p class="example">
+{GNU Emacs}
+</p>
+
+<!-- foo
+<p>
+You must choose the latter with Tkanamzu or namazu.el.
+</p>
+-->
+
+<h3><a name="query-substring">Substring matching</a></h3>
+<p>
+The are three types of substring matching searching.
+</p>
+
+<dl> 
+<dt>Prefix matching
+<dd><code class="example">inter*</code> (terms which begin with <code>inter</code>)
+<dt>Inside matching
+<dd><code class="example">*text*</code> (terms which contain <code>text</code>) 
+<dt>Suffix matching
+<dd><code class="example">*net</code> (terms which terminated
+with <code>net</code>)
+</dl>
+
+
+<h3><a name="query-regex">Regular expressions</a></h3>
+
+<p>
+You can use regular expressions for pattern matching. The
+regular expressions must be surrounded by slashes like <code
+class="operator">/.../</code>. Namazu uses <a
+href="http://www.ruby-lang.org/">Ruby</a>'s regular
+regular expressions engine. It offers generally <a
+href="http://www.perl.com/">Perl</a> compatible flavor.
+e.g.,
+</p>
+
+<p class="example">
+/pro(gram|blem)s?/
+</p>
+
+
+<h3><a name="query-field">Field-specified searching</a></h3>
+<p>
+You can limit your search to specific fields such as
+<code>Subject:</code>, <code>From:</code>,
+<code>Message-Id:</code>. It's especially convenient for
+Mail/News documents. e.g.,
+</p>
+
+<ul>
+<li><code class="example">+subject:Linux</code><br>
+(Retrieving all documents which contain <code>Linux</code>
+in a <code>Subject:</code> field)
+
+<li><code class="example">+subject:"GNU Emacs"</code><br>
+(Retrieving all documents which contain <code>GNU Emacs</code>
+in a <code>Subject:</code> field)
+
+<li><code class="example">+from:foo@bar.jp</code><br>
+(Retrieving all documents which contain <code>foo@bar.jp</code>
+in a <code>From:</code> field)
+
+
+<li><code class="example">+message-id:&lt;199801240555.OAA18737@foo.bar.jp&gt;</code><br>
+(Retrieving a certain document which contains specified
+<code>Message-Id:</code>)
+</ul>
+
+<h3><a name="query-notes">Notes</a></h3>
+
+<ul>
+<li>In any queries, Namazu ignores case distinctions of
+alphabet characters. In other words, Namazu does
+case-insensitive pattern matching in any time.
+
+
+<li>Japanese phrases are forced to be segmented into
+morphemes automatically and are handled them as <a
+href="#query-phrase">phrase searching</a>. This processing
+causes invalid segmentation occasionally.
+
+
+<li>Alphabet, numbers or a part of symbols (duplicated in
+ASCII) characters which defined in JIS X 0208 (Japanese
+Industrial Standards) are handled as ASCII characters.
+
+<li>Namazu can handle a term which contains symbols like
+<code>TCP/IP</code>.  Since this handling isn't complete,
+you can describe <code>TCP and IP</code> instead of
+<code>TCP/IP</code>, but it may cause noisy results.
+
+
+<li>Substring matching and field-specified searching takes
+more time than other methods.
+
+<li>If you want to use <code class="operator">and</code>,
+<code class="operator">or</code> or <code
+class="operator">not</code> simply as terms, you can
+surround them respectively with double quotes like <code
+class="operator">"..."</code> or braces like <code
+class="operator">{...}</code>. 
+
+<!-- foo
+You must choose the latter with Tkanamzu or namazu.el.
+-->
+
+</ul>
+
diff --git a/cgi-bin/template/NMZ.foot b/cgi-bin/template/NMZ.foot
new file mode 100644 (file)
index 0000000..6e5abdb
--- /dev/null
@@ -0,0 +1,7 @@
+<hr>
+<address>
+This search system is powered by 
+<strong><a href="http://www.namazu.org/">Namazu</a></strong>
+</address>
+</body>
+</html>
diff --git a/cgi-bin/template/NMZ.foot.in b/cgi-bin/template/NMZ.foot.in
new file mode 100644 (file)
index 0000000..6e5abdb
--- /dev/null
@@ -0,0 +1,7 @@
+<hr>
+<address>
+This search system is powered by 
+<strong><a href="http://www.namazu.org/">Namazu</a></strong>
+</address>
+</body>
+</html>
diff --git a/cgi-bin/template/NMZ.foot.in.dist b/cgi-bin/template/NMZ.foot.in.dist
new file mode 100644 (file)
index 0000000..6e5abdb
--- /dev/null
@@ -0,0 +1,7 @@
+<hr>
+<address>
+This search system is powered by 
+<strong><a href="http://www.namazu.org/">Namazu</a></strong>
+</address>
+</body>
+</html>
diff --git a/cgi-bin/template/NMZ.head b/cgi-bin/template/NMZ.head
new file mode 100644 (file)
index 0000000..e9f2743
--- /dev/null
@@ -0,0 +1,81 @@
+<html>
+<head>
+<title>Mail Archive Search</title>
+<style type="text/css"><!--
+  strong.keyword { color: Red; }
+  p.example      { text-indent: 1em; 
+                   color: Navy;
+                  font-weight: bold;
+                   font-family: monospace; }
+  code           { color: Navy;
+                   font-family: monospace; }
+  code.example   { color: Navy;
+                  font-weight: bold;
+                   font-family: monospace; }
+  code.operator  { color: Navy;
+                   font-family: monospace; 
+                  font-weight: bold; }
+--></style>
+<script>
+function getArgs() {
+  var args = new Object();
+  if (location.search.length <= 1) return args;
+  var pairs = location.search.substring(1).split("&");
+  for (var i=0; i < pairs.length; ++i) {
+    var pos = pairs[i].indexOf('=');
+    if (pos < 0) {
+      args[pairs[i]] = "";
+      continue;
+    }
+    args[pairs[i].substring(0,pos)] = unescape(pairs[i].substring(pos+1));
+  }
+  return args;
+}
+var queryArgs = getArgs();
+var idxname = queryArgs["idxname"];
+</script>
+</head>
+<body lang="en">
+<script>
+document.writeln("<h1><a href=\"/archive/html/" + idxname +"/\">" +
+                idxname + " archive</a> search</h1>");
+</script>
+<form method="get" action="{cgi}">
+<p><strong>Search String:</strong> 
+<input type="text" name="query" size="40">
+<input type="submit" name="submit" value="Search!">
+<script>
+document.writeln("<input type=\"hidden\" name=\"idxname\" value=\"" + 
+                idxname + "\">");
+document.writeln("<a href=\"{cgi}?idxname=" + idxname +
+                "\">[How to search]</a><br>");
+</script>
+<strong>Display:</strong>
+<select name="max">
+<option value="10">10</option>
+<option selected value="20">20</option>
+<option value="30">30</option>
+<option value="50">50</option>
+<option value="100">100</option>
+</select>
+<strong>Description:</strong>
+<select name="result">
+<option selected value="normal">normal</option>
+<option value="short">short</option>
+</select>
+<strong>Sort:</strong>
+<select name="sort">
+<option selected value="score">by score
+<option value="date:late">in reverse chronological order</option>
+<option value="date:early">in chronological order</option>
+<option value="field:subject:ascending">by title in ascending order</option>
+<option value="field:subject:descending">by title in descending order</option>
+<option value="field:from:ascending">by author in ascending order</option>
+<option value="field:from:descending">by author in descending order</option>
+<option value="field:size:ascending">by size in ascending order</option>
+<option value="field:size:descending">by size in descending order</option>
+<option value="field:uri:ascending">by URI in ascending order</option>
+<option value="field:uri:descending">by URI in descending order</option>
+</select>
+</p>
+</form>
diff --git a/cgi-bin/template/NMZ.head.in b/cgi-bin/template/NMZ.head.in
new file mode 100644 (file)
index 0000000..6d7f091
--- /dev/null
@@ -0,0 +1,81 @@
+<html>
+<head>
+<title>Mail Archive Search</title>
+<style type="text/css"><!--
+  strong.keyword { color: Red; }
+  p.example      { text-indent: 1em; 
+                   color: Navy;
+                  font-weight: bold;
+                   font-family: monospace; }
+  code           { color: Navy;
+                   font-family: monospace; }
+  code.example   { color: Navy;
+                  font-weight: bold;
+                   font-family: monospace; }
+  code.operator  { color: Navy;
+                   font-family: monospace; 
+                  font-weight: bold; }
+--></style>
+<script>
+function getArgs() {
+  var args = new Object();
+  if (location.search.length <= 1) return args;
+  var pairs = location.search.substring(1).split("&");
+  for (var i=0; i < pairs.length; ++i) {
+    var pos = pairs[i].indexOf('=');
+    if (pos < 0) {
+      args[pairs[i]] = "";
+      continue;
+    }
+    args[pairs[i].substring(0,pos)] = unescape(pairs[i].substring(pos+1));
+  }
+  return args;
+}
+var queryArgs = getArgs();
+var idxname = queryArgs["idxname"];
+</script>
+</head>
+<body lang="en">
+<script>
+document.writeln("<h1><a href=\"@@HTML_URL@@/" + idxname +"/\">" +
+                idxname + " archive</a> search</h1>");
+</script>
+<form method="get" action="{cgi}">
+<p><strong>Search String:</strong> 
+<input type="text" name="query" size="40">
+<input type="submit" name="submit" value="Search!">
+<script>
+document.writeln("<input type=\"hidden\" name=\"idxname\" value=\"" + 
+                idxname + "\">");
+document.writeln("<a href=\"{cgi}?idxname=" + idxname +
+                "\">[How to search]</a><br>");
+</script>
+<strong>Display:</strong>
+<select name="max">
+<option value="10">10</option>
+<option selected value="20">20</option>
+<option value="30">30</option>
+<option value="50">50</option>
+<option value="100">100</option>
+</select>
+<strong>Description:</strong>
+<select name="result">
+<option selected value="normal">normal</option>
+<option value="short">short</option>
+</select>
+<strong>Sort:</strong>
+<select name="sort">
+<option selected value="score">by score
+<option value="date:late">in reverse chronological order</option>
+<option value="date:early">in chronological order</option>
+<option value="field:subject:ascending">by title in ascending order</option>
+<option value="field:subject:descending">by title in descending order</option>
+<option value="field:from:ascending">by author in ascending order</option>
+<option value="field:from:descending">by author in descending order</option>
+<option value="field:size:ascending">by size in ascending order</option>
+<option value="field:size:descending">by size in descending order</option>
+<option value="field:uri:ascending">by URI in ascending order</option>
+<option value="field:uri:descending">by URI in descending order</option>
+</select>
+</p>
+</form>
diff --git a/cgi-bin/template/NMZ.head.in.dist b/cgi-bin/template/NMZ.head.in.dist
new file mode 100644 (file)
index 0000000..6d7f091
--- /dev/null
@@ -0,0 +1,81 @@
+<html>
+<head>
+<title>Mail Archive Search</title>
+<style type="text/css"><!--
+  strong.keyword { color: Red; }
+  p.example      { text-indent: 1em; 
+                   color: Navy;
+                  font-weight: bold;
+                   font-family: monospace; }
+  code           { color: Navy;
+                   font-family: monospace; }
+  code.example   { color: Navy;
+                  font-weight: bold;
+                   font-family: monospace; }
+  code.operator  { color: Navy;
+                   font-family: monospace; 
+                  font-weight: bold; }
+--></style>
+<script>
+function getArgs() {
+  var args = new Object();
+  if (location.search.length <= 1) return args;
+  var pairs = location.search.substring(1).split("&");
+  for (var i=0; i < pairs.length; ++i) {
+    var pos = pairs[i].indexOf('=');
+    if (pos < 0) {
+      args[pairs[i]] = "";
+      continue;
+    }
+    args[pairs[i].substring(0,pos)] = unescape(pairs[i].substring(pos+1));
+  }
+  return args;
+}
+var queryArgs = getArgs();
+var idxname = queryArgs["idxname"];
+</script>
+</head>
+<body lang="en">
+<script>
+document.writeln("<h1><a href=\"@@HTML_URL@@/" + idxname +"/\">" +
+                idxname + " archive</a> search</h1>");
+</script>
+<form method="get" action="{cgi}">
+<p><strong>Search String:</strong> 
+<input type="text" name="query" size="40">
+<input type="submit" name="submit" value="Search!">
+<script>
+document.writeln("<input type=\"hidden\" name=\"idxname\" value=\"" + 
+                idxname + "\">");
+document.writeln("<a href=\"{cgi}?idxname=" + idxname +
+                "\">[How to search]</a><br>");
+</script>
+<strong>Display:</strong>
+<select name="max">
+<option value="10">10</option>
+<option selected value="20">20</option>
+<option value="30">30</option>
+<option value="50">50</option>
+<option value="100">100</option>
+</select>
+<strong>Description:</strong>
+<select name="result">
+<option selected value="normal">normal</option>
+<option value="short">short</option>
+</select>
+<strong>Sort:</strong>
+<select name="sort">
+<option selected value="score">by score
+<option value="date:late">in reverse chronological order</option>
+<option value="date:early">in chronological order</option>
+<option value="field:subject:ascending">by title in ascending order</option>
+<option value="field:subject:descending">by title in descending order</option>
+<option value="field:from:ascending">by author in ascending order</option>
+<option value="field:from:descending">by author in descending order</option>
+<option value="field:size:ascending">by size in ascending order</option>
+<option value="field:size:descending">by size in descending order</option>
+<option value="field:uri:ascending">by URI in ascending order</option>
+<option value="field:uri:descending">by URI in descending order</option>
+</select>
+</p>
+</form>
diff --git a/cgi-bin/template/NMZ.result.normal b/cgi-bin/template/NMZ.result.normal
new file mode 100644 (file)
index 0000000..cd8d609
--- /dev/null
@@ -0,0 +1,5 @@
+<dt>${namazu::counter}. <strong><a href="${uri}">${title}</a></strong> (score: ${namazu::score})
+<dd><strong>Author</strong>: <em>${author}</em>
+<dd><strong>Date</strong>: <em>${date}</em>
+<dd>${summary}
+<dd><a href="${uri}">${uri}</a> (${size} bytes)<br><br>
diff --git a/cgi-bin/template/NMZ.result.normal.in b/cgi-bin/template/NMZ.result.normal.in
new file mode 100644 (file)
index 0000000..cd8d609
--- /dev/null
@@ -0,0 +1,5 @@
+<dt>${namazu::counter}. <strong><a href="${uri}">${title}</a></strong> (score: ${namazu::score})
+<dd><strong>Author</strong>: <em>${author}</em>
+<dd><strong>Date</strong>: <em>${date}</em>
+<dd>${summary}
+<dd><a href="${uri}">${uri}</a> (${size} bytes)<br><br>
diff --git a/cgi-bin/template/NMZ.result.normal.in.dist b/cgi-bin/template/NMZ.result.normal.in.dist
new file mode 100644 (file)
index 0000000..cd8d609
--- /dev/null
@@ -0,0 +1,5 @@
+<dt>${namazu::counter}. <strong><a href="${uri}">${title}</a></strong> (score: ${namazu::score})
+<dd><strong>Author</strong>: <em>${author}</em>
+<dd><strong>Date</strong>: <em>${date}</em>
+<dd>${summary}
+<dd><a href="${uri}">${uri}</a> (${size} bytes)<br><br>
diff --git a/cgi-bin/template/NMZ.result.short b/cgi-bin/template/NMZ.result.short
new file mode 100644 (file)
index 0000000..7f087a9
--- /dev/null
@@ -0,0 +1,2 @@
+<dt>${namazu::counter}. <strong><a href="${uri}">${title}</a></strong> (score: ${namazu::score})
+<dd><a href="${uri}">${uri}</a> (${size} bytes)<br><br>
diff --git a/cgi-bin/template/NMZ.result.short.in b/cgi-bin/template/NMZ.result.short.in
new file mode 100644 (file)
index 0000000..7f087a9
--- /dev/null
@@ -0,0 +1,2 @@
+<dt>${namazu::counter}. <strong><a href="${uri}">${title}</a></strong> (score: ${namazu::score})
+<dd><a href="${uri}">${uri}</a> (${size} bytes)<br><br>
diff --git a/cgi-bin/template/NMZ.result.short.in.dist b/cgi-bin/template/NMZ.result.short.in.dist
new file mode 100644 (file)
index 0000000..7f087a9
--- /dev/null
@@ -0,0 +1,2 @@
+<dt>${namazu::counter}. <strong><a href="${uri}">${title}</a></strong> (score: ${namazu::score})
+<dd><a href="${uri}">${uri}</a> (${size} bytes)<br><br>
diff --git a/cgi-bin/template/NMZ.tips b/cgi-bin/template/NMZ.tips
new file mode 100644 (file)
index 0000000..b19d4d6
--- /dev/null
@@ -0,0 +1,60 @@
+<h2><a name="tips">Tips on searching</a></h2>
+
+<p>
+If you have trouble with searching, you can check the following tips.
+</p>
+
+<ul>
+<li>Check a spelling of your keyword<br>
+Namazu can't find anything with wrong spelling.
+
+<li>Add keywords<br>
+
+If you gained no results or too few results, you can add one
+or more related keywords with <code
+class="operator">or</code> operator. It makes your search
+more hittable. e.g., <br>
+<code class="example">tex or ptex or latex or latex2e</code><br>
+
+If you gaind too many results, you can add one or more
+related keywords with <code class="operator">and</code>
+operator. It makes your search more limited. e.g., <br>
+<code class="example">latex and dvi2ps and eps</code>
+
+<li>Try substring matching<br>
+
+If you gained no results or too few results, you can try
+substring matching. 
+
+You can specify <code class="example">tex*</code> to
+search for terms which begin with
+<code>tex</code> (e.g., <code>tex</code>,
+<code>texi2html</code>,
+<code>texindex</code>, <code>text</code>).
+<br>
+
+You can specify <code class="example">*tex</code> to
+search for terms which terminated with <code>tex</code> (e.g.,
+<code>bibtex</code>, 
+<code>jlatex</code>, <code>latex</code>,
+<code>platex</code>, <code>ptex</code>, <code>vertex</code>).
+<br>
+
+You can specify <code class="example">*tex*</code> to
+search for terms which contain <code>tex</code> (many).
+<br>
+
+<li>You tried phrase searching but it hit documents which
+didn't contain your phrase.<br>
+
+It's a defect of Namazu. Precision of phrase searching is
+not 100 %, so it cause wrong results occasionally.
+
+<li>You want to use <code class="operator">and</code>,
+<code class="operator">or</code> or <code
+class="operator">not</code> as ordinary keywords<br>
+You can surround them respectively with double quotes like <code
+class="operator">"..."</code> or braces like <code
+class="operator">{...}</code>.
+
+</ul>
diff --git a/cgi-bin/template/NMZ.tips.in b/cgi-bin/template/NMZ.tips.in
new file mode 100644 (file)
index 0000000..b19d4d6
--- /dev/null
@@ -0,0 +1,60 @@
+<h2><a name="tips">Tips on searching</a></h2>
+
+<p>
+If you have trouble with searching, you can check the following tips.
+</p>
+
+<ul>
+<li>Check a spelling of your keyword<br>
+Namazu can't find anything with wrong spelling.
+
+<li>Add keywords<br>
+
+If you gained no results or too few results, you can add one
+or more related keywords with <code
+class="operator">or</code> operator. It makes your search
+more hittable. e.g., <br>
+<code class="example">tex or ptex or latex or latex2e</code><br>
+
+If you gaind too many results, you can add one or more
+related keywords with <code class="operator">and</code>
+operator. It makes your search more limited. e.g., <br>
+<code class="example">latex and dvi2ps and eps</code>
+
+<li>Try substring matching<br>
+
+If you gained no results or too few results, you can try
+substring matching. 
+
+You can specify <code class="example">tex*</code> to
+search for terms which begin with
+<code>tex</code> (e.g., <code>tex</code>,
+<code>texi2html</code>,
+<code>texindex</code>, <code>text</code>).
+<br>
+
+You can specify <code class="example">*tex</code> to
+search for terms which terminated with <code>tex</code> (e.g.,
+<code>bibtex</code>, 
+<code>jlatex</code>, <code>latex</code>,
+<code>platex</code>, <code>ptex</code>, <code>vertex</code>).
+<br>
+
+You can specify <code class="example">*tex*</code> to
+search for terms which contain <code>tex</code> (many).
+<br>
+
+<li>You tried phrase searching but it hit documents which
+didn't contain your phrase.<br>
+
+It's a defect of Namazu. Precision of phrase searching is
+not 100 %, so it cause wrong results occasionally.
+
+<li>You want to use <code class="operator">and</code>,
+<code class="operator">or</code> or <code
+class="operator">not</code> as ordinary keywords<br>
+You can surround them respectively with double quotes like <code
+class="operator">"..."</code> or braces like <code
+class="operator">{...}</code>.
+
+</ul>
diff --git a/cgi-bin/template/NMZ.tips.in.dist b/cgi-bin/template/NMZ.tips.in.dist
new file mode 100644 (file)
index 0000000..b19d4d6
--- /dev/null
@@ -0,0 +1,60 @@
+<h2><a name="tips">Tips on searching</a></h2>
+
+<p>
+If you have trouble with searching, you can check the following tips.
+</p>
+
+<ul>
+<li>Check a spelling of your keyword<br>
+Namazu can't find anything with wrong spelling.
+
+<li>Add keywords<br>
+
+If you gained no results or too few results, you can add one
+or more related keywords with <code
+class="operator">or</code> operator. It makes your search
+more hittable. e.g., <br>
+<code class="example">tex or ptex or latex or latex2e</code><br>
+
+If you gaind too many results, you can add one or more
+related keywords with <code class="operator">and</code>
+operator. It makes your search more limited. e.g., <br>
+<code class="example">latex and dvi2ps and eps</code>
+
+<li>Try substring matching<br>
+
+If you gained no results or too few results, you can try
+substring matching. 
+
+You can specify <code class="example">tex*</code> to
+search for terms which begin with
+<code>tex</code> (e.g., <code>tex</code>,
+<code>texi2html</code>,
+<code>texindex</code>, <code>text</code>).
+<br>
+
+You can specify <code class="example">*tex</code> to
+search for terms which terminated with <code>tex</code> (e.g.,
+<code>bibtex</code>, 
+<code>jlatex</code>, <code>latex</code>,
+<code>platex</code>, <code>ptex</code>, <code>vertex</code>).
+<br>
+
+You can specify <code class="example">*tex*</code> to
+search for terms which contain <code>tex</code> (many).
+<br>
+
+<li>You tried phrase searching but it hit documents which
+didn't contain your phrase.<br>
+
+It's a defect of Namazu. Precision of phrase searching is
+not 100 %, so it cause wrong results occasionally.
+
+<li>You want to use <code class="operator">and</code>,
+<code class="operator">or</code> or <code
+class="operator">not</code> as ordinary keywords<br>
+You can surround them respectively with double quotes like <code
+class="operator">"..."</code> or braces like <code
+class="operator">{...}</code>.
+
+</ul>
diff --git a/etc/.htaccess b/etc/.htaccess
new file mode 100644 (file)
index 0000000..2f1124b
--- /dev/null
@@ -0,0 +1,38 @@
+############################################################################
+## $Id: .htaccess.in.dist,v 1.3 2002/09/15 03:43:29 ehood Exp $
+## Description:
+##     Sample Apache local configuration file to deny access to special
+##     files.  If local configuration files are not enabled, then these
+##      settings would have to be present in httpd.conf.
+##     
+##     To use this file, copy the generated .htaccess file to the
+##     root of the installation when
+##     'make configure' is done, or create a symlink to it by
+##     executing the following command from the installation root:
+##
+##       ln -s ./etc/.htacess
+##
+##     This way, you do not have to re-copy each time you make
+##     changes to this file.
+##
+############################################################################
+
+# Deny access to files that we probably do not want the public to
+# see.  The main one is .mhonarc.db files, especially if we have
+# mail address obfsucation in the HTML archives.
+<Files ~ "^(NMZ|\.proc|procmail|msgid.cache|.mhonarc.db|config\.sh|lists\.def)">
+    Order allow,deny
+    Deny from all
+</Files>
+
+# Deny access to log files
+<Files ~ "\.log$">
+    Order allow,deny
+    Deny from all
+</Files>
+
+# Deny access to temporary incoming mail file used by filter-spool
+<Files ~ ".newmail$">
+    Order allow,deny
+    Deny from all
+</Files>
diff --git a/etc/.htaccess.in b/etc/.htaccess.in
new file mode 100644 (file)
index 0000000..2f1124b
--- /dev/null
@@ -0,0 +1,38 @@
+############################################################################
+## $Id: .htaccess.in.dist,v 1.3 2002/09/15 03:43:29 ehood Exp $
+## Description:
+##     Sample Apache local configuration file to deny access to special
+##     files.  If local configuration files are not enabled, then these
+##      settings would have to be present in httpd.conf.
+##     
+##     To use this file, copy the generated .htaccess file to the
+##     root of the installation when
+##     'make configure' is done, or create a symlink to it by
+##     executing the following command from the installation root:
+##
+##       ln -s ./etc/.htacess
+##
+##     This way, you do not have to re-copy each time you make
+##     changes to this file.
+##
+############################################################################
+
+# Deny access to files that we probably do not want the public to
+# see.  The main one is .mhonarc.db files, especially if we have
+# mail address obfsucation in the HTML archives.
+<Files ~ "^(NMZ|\.proc|procmail|msgid.cache|.mhonarc.db|config\.sh|lists\.def)">
+    Order allow,deny
+    Deny from all
+</Files>
+
+# Deny access to log files
+<Files ~ "\.log$">
+    Order allow,deny
+    Deny from all
+</Files>
+
+# Deny access to temporary incoming mail file used by filter-spool
+<Files ~ ".newmail$">
+    Order allow,deny
+    Deny from all
+</Files>
diff --git a/etc/.htaccess.in.dist b/etc/.htaccess.in.dist
new file mode 100644 (file)
index 0000000..2f1124b
--- /dev/null
@@ -0,0 +1,38 @@
+############################################################################
+## $Id: .htaccess.in.dist,v 1.3 2002/09/15 03:43:29 ehood Exp $
+## Description:
+##     Sample Apache local configuration file to deny access to special
+##     files.  If local configuration files are not enabled, then these
+##      settings would have to be present in httpd.conf.
+##     
+##     To use this file, copy the generated .htaccess file to the
+##     root of the installation when
+##     'make configure' is done, or create a symlink to it by
+##     executing the following command from the installation root:
+##
+##       ln -s ./etc/.htacess
+##
+##     This way, you do not have to re-copy each time you make
+##     changes to this file.
+##
+############################################################################
+
+# Deny access to files that we probably do not want the public to
+# see.  The main one is .mhonarc.db files, especially if we have
+# mail address obfsucation in the HTML archives.
+<Files ~ "^(NMZ|\.proc|procmail|msgid.cache|.mhonarc.db|config\.sh|lists\.def)">
+    Order allow,deny
+    Deny from all
+</Files>
+
+# Deny access to log files
+<Files ~ "\.log$">
+    Order allow,deny
+    Deny from all
+</Files>
+
+# Deny access to temporary incoming mail file used by filter-spool
+<Files ~ ".newmail$">
+    Order allow,deny
+    Deny from all
+</Files>
diff --git a/etc/apache.conf b/etc/apache.conf
new file mode 100644 (file)
index 0000000..440d613
--- /dev/null
@@ -0,0 +1,77 @@
+############################################################################
+## $Id: apache.conf.in.dist,v 1.8 2003/08/09 18:01:39 ehood Exp $
+## Description:
+##     The following are template/example Apache configuration
+##     directives that apply to the mail archives.
+##
+##     IMPORTANT: MAKE SURE TO REVIEW THE DIRECTIVES HERE IF
+##                USE THIS FILE AGAINST ANY SECURITY CONCERNS
+##                YOU MAY HAVE.
+############################################################################
+
+<IfModule mod_alias.c>
+    # Uncomment and change the following if ROOT_URL in config.sh 
+    # is not already directly accessible from a web client.
+    #Alias /archive "/home/mharc"
+
+    # Enable mharc CGI programs.  Alternate enabling method is
+    # defined below.
+    ScriptAlias /archive/cgi-bin/ "/home/mharc/cgi-bin/"
+</IfModule>
+
+<Directory /home/mharc>
+    AllowOverride All
+
+    Options MultiViews Indexes FollowSymLinks
+    IndexOptions FancyIndexing NameWidth=* SuppressSize SuppressLastModified
+
+    # Make sure namazu index files are not visible in directory listings
+    IndexIgnore NMZ.*
+
+    # Deny access to files that we probably do not want the public to
+    # see.  The main one is .mhonarc.db files, especially if we have
+    # mail address obfsucation in the HTML archives.
+    <Files ~ "^(NMZ|\.proc|procmail|msgid.cache|.mhonarc.db|config\.sh|lists\.def)">
+       Order allow,deny
+       Deny from all
+    </Files>
+
+    # Deny access to log files
+    <Files ~ "\.log$">
+       Order allow,deny
+       Deny from all
+    </Files>
+
+    # Deny access to temporary incoming mail file used by filter-spool
+    <Files ~ ".newmail$">
+       Order allow,deny
+       Deny from all
+    </Files>
+
+    # Limit the types of HTTP methods allowed
+    <Limit GET POST OPTIONS PROPFIND>
+        Order allow,deny
+        Allow from all
+    </Limit>
+    <Limit PUT DELETE PATCH PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
+        Order deny,allow
+        Deny from all
+    </Limit>
+</Directory>
+
+# Enable CGI execution for cgi-bin directory.  This is probably not
+# necessary if the above ScriptAlias directive is used.
+<Directory /home/mharc/cgi-bin>
+    Options +ExecCGI
+    <IfModule mod_mime.c>
+       AddHandler cgi-script .cgi
+    </IfModule>
+</Directory>
+
+# Browsing access to raw mail archives.
+<Directory /home/mharc/mbox/*/>
+    AllowOverride All
+    Options Indexes FollowSymLinks
+    IndexOptions FancyIndexing SuppressDescription
+</Directory>
+
diff --git a/etc/apache.conf.in b/etc/apache.conf.in
new file mode 100644 (file)
index 0000000..ecd40f7
--- /dev/null
@@ -0,0 +1,77 @@
+############################################################################
+## $Id: apache.conf.in.dist,v 1.8 2003/08/09 18:01:39 ehood Exp $
+## Description:
+##     The following are template/example Apache configuration
+##     directives that apply to the mail archives.
+##
+##     IMPORTANT: MAKE SURE TO REVIEW THE DIRECTIVES HERE IF
+##                USE THIS FILE AGAINST ANY SECURITY CONCERNS
+##                YOU MAY HAVE.
+############################################################################
+
+<IfModule mod_alias.c>
+    # Uncomment and change the following if ROOT_URL in config.sh 
+    # is not already directly accessible from a web client.
+    #Alias @@ROOT_URL@@ "@@SW_ROOT@@"
+
+    # Enable mharc CGI programs.  Alternate enabling method is
+    # defined below.
+    ScriptAlias @@CGI_URL@@/ "@@CGI_DIR@@/"
+</IfModule>
+
+<Directory @@SW_ROOT@@>
+    AllowOverride All
+
+    Options MultiViews Indexes FollowSymLinks
+    IndexOptions FancyIndexing NameWidth=* SuppressSize SuppressLastModified
+
+    # Make sure namazu index files are not visible in directory listings
+    IndexIgnore NMZ.*
+
+    # Deny access to files that we probably do not want the public to
+    # see.  The main one is .mhonarc.db files, especially if we have
+    # mail address obfsucation in the HTML archives.
+    <Files ~ "^(NMZ|\.proc|procmail|msgid.cache|.mhonarc.db|config\.sh|lists\.def)">
+       Order allow,deny
+       Deny from all
+    </Files>
+
+    # Deny access to log files
+    <Files ~ "\.log$">
+       Order allow,deny
+       Deny from all
+    </Files>
+
+    # Deny access to temporary incoming mail file used by filter-spool
+    <Files ~ ".newmail$">
+       Order allow,deny
+       Deny from all
+    </Files>
+
+    # Limit the types of HTTP methods allowed
+    <Limit GET POST OPTIONS PROPFIND>
+        Order allow,deny
+        Allow from all
+    </Limit>
+    <Limit PUT DELETE PATCH PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
+        Order deny,allow
+        Deny from all
+    </Limit>
+</Directory>
+
+# Enable CGI execution for cgi-bin directory.  This is probably not
+# necessary if the above ScriptAlias directive is used.
+<Directory @@SW_ROOT@@/cgi-bin>
+    Options +ExecCGI
+    <IfModule mod_mime.c>
+       AddHandler cgi-script .cgi
+    </IfModule>
+</Directory>
+
+# Browsing access to raw mail archives.
+<Directory @@MBOX_DIR@@/*/>
+    AllowOverride All
+    Options Indexes FollowSymLinks
+    IndexOptions FancyIndexing SuppressDescription
+</Directory>
+
diff --git a/etc/apache.conf.in.dist b/etc/apache.conf.in.dist
new file mode 100644 (file)
index 0000000..ecd40f7
--- /dev/null
@@ -0,0 +1,77 @@
+############################################################################
+## $Id: apache.conf.in.dist,v 1.8 2003/08/09 18:01:39 ehood Exp $
+## Description:
+##     The following are template/example Apache configuration
+##     directives that apply to the mail archives.
+##
+##     IMPORTANT: MAKE SURE TO REVIEW THE DIRECTIVES HERE IF
+##                USE THIS FILE AGAINST ANY SECURITY CONCERNS
+##                YOU MAY HAVE.
+############################################################################
+
+<IfModule mod_alias.c>
+    # Uncomment and change the following if ROOT_URL in config.sh 
+    # is not already directly accessible from a web client.
+    #Alias @@ROOT_URL@@ "@@SW_ROOT@@"
+
+    # Enable mharc CGI programs.  Alternate enabling method is
+    # defined below.
+    ScriptAlias @@CGI_URL@@/ "@@CGI_DIR@@/"
+</IfModule>
+
+<Directory @@SW_ROOT@@>
+    AllowOverride All
+
+    Options MultiViews Indexes FollowSymLinks
+    IndexOptions FancyIndexing NameWidth=* SuppressSize SuppressLastModified
+
+    # Make sure namazu index files are not visible in directory listings
+    IndexIgnore NMZ.*
+
+    # Deny access to files that we probably do not want the public to
+    # see.  The main one is .mhonarc.db files, especially if we have
+    # mail address obfsucation in the HTML archives.
+    <Files ~ "^(NMZ|\.proc|procmail|msgid.cache|.mhonarc.db|config\.sh|lists\.def)">
+       Order allow,deny
+       Deny from all
+    </Files>
+
+    # Deny access to log files
+    <Files ~ "\.log$">
+       Order allow,deny
+       Deny from all
+    </Files>
+
+    # Deny access to temporary incoming mail file used by filter-spool
+    <Files ~ ".newmail$">
+       Order allow,deny
+       Deny from all
+    </Files>
+
+    # Limit the types of HTTP methods allowed
+    <Limit GET POST OPTIONS PROPFIND>
+        Order allow,deny
+        Allow from all
+    </Limit>
+    <Limit PUT DELETE PATCH PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
+        Order deny,allow
+        Deny from all
+    </Limit>
+</Directory>
+
+# Enable CGI execution for cgi-bin directory.  This is probably not
+# necessary if the above ScriptAlias directive is used.
+<Directory @@SW_ROOT@@/cgi-bin>
+    Options +ExecCGI
+    <IfModule mod_mime.c>
+       AddHandler cgi-script .cgi
+    </IfModule>
+</Directory>
+
+# Browsing access to raw mail archives.
+<Directory @@MBOX_DIR@@/*/>
+    AllowOverride All
+    Options Indexes FollowSymLinks
+    IndexOptions FancyIndexing SuppressDescription
+</Directory>
+
diff --git a/etc/crontab b/etc/crontab
new file mode 100644 (file)
index 0000000..e4b5722
--- /dev/null
@@ -0,0 +1,17 @@
+# $Id: crontab.in.dist,v 1.4 2003/08/09 18:02:42 ehood Exp $
+#      Template crontab for archive user.  Messages are processed on
+#      an hourly basis.  However, for one day of the week new message
+#      processing is not done to allow for cleanup.
+#
+57 * * * 1-6    /home/mharc/bin/logcmd -log /home/mharc/log/cron.log -- /home/mharc/bin/read-mail
+57 0,4-23 * * 0 /home/mharc/bin/logcmd -log /home/mharc/log/cron.log -- /home/mharc/bin/read-mail
+57 1 * * 0      /home/mharc/bin/logcmd -log /home/mharc/log/cron.log -- /home/mharc/bin/gc-search-indexes
+57 3 * * 0      /home/mharc/bin/logcmd -log /home/mharc/log/cron.log -- /home/mharc/bin/compress-mboxes
+#
+#      Uncomment the following and edit pathname to logrotate(8) program
+#      if you want log rotation of mharc log files.  The default frequency
+#      is once a week to match frequence of mharc provided logrotate.conf.
+#      Logrotate is provided under RedHat Linux and and other linux and
+#      Unix distros.
+#
+#57 2 * * 0    /usr/sbin/logrotate -s /home/mharc/etc/logrotate.status /home/mharc/etc/logrotate.conf
diff --git a/etc/crontab.in b/etc/crontab.in
new file mode 100644 (file)
index 0000000..2a1aff0
--- /dev/null
@@ -0,0 +1,17 @@
+# $Id: crontab.in.dist,v 1.4 2003/08/09 18:02:42 ehood Exp $
+#      Template crontab for archive user.  Messages are processed on
+#      an hourly basis.  However, for one day of the week new message
+#      processing is not done to allow for cleanup.
+#
+57 * * * 1-6    @@SW_ROOT@@/bin/logcmd -log @@SW_ROOT@@/log/cron.log -- @@SW_ROOT@@/bin/read-mail
+57 0,4-23 * * 0 @@SW_ROOT@@/bin/logcmd -log @@SW_ROOT@@/log/cron.log -- @@SW_ROOT@@/bin/read-mail
+57 1 * * 0      @@SW_ROOT@@/bin/logcmd -log @@SW_ROOT@@/log/cron.log -- @@SW_ROOT@@/bin/gc-search-indexes
+57 3 * * 0      @@SW_ROOT@@/bin/logcmd -log @@SW_ROOT@@/log/cron.log -- @@SW_ROOT@@/bin/compress-mboxes
+#
+#      Uncomment the following and edit pathname to logrotate(8) program
+#      if you want log rotation of mharc log files.  The default frequency
+#      is once a week to match frequence of mharc provided logrotate.conf.
+#      Logrotate is provided under RedHat Linux and and other linux and
+#      Unix distros.
+#
+#57 2 * * 0    /usr/sbin/logrotate -s @@SW_ROOT@@/etc/logrotate.status @@SW_ROOT@@/etc/logrotate.conf
diff --git a/etc/crontab.in.dist b/etc/crontab.in.dist
new file mode 100644 (file)
index 0000000..2a1aff0
--- /dev/null
@@ -0,0 +1,17 @@
+# $Id: crontab.in.dist,v 1.4 2003/08/09 18:02:42 ehood Exp $
+#      Template crontab for archive user.  Messages are processed on
+#      an hourly basis.  However, for one day of the week new message
+#      processing is not done to allow for cleanup.
+#
+57 * * * 1-6    @@SW_ROOT@@/bin/logcmd -log @@SW_ROOT@@/log/cron.log -- @@SW_ROOT@@/bin/read-mail
+57 0,4-23 * * 0 @@SW_ROOT@@/bin/logcmd -log @@SW_ROOT@@/log/cron.log -- @@SW_ROOT@@/bin/read-mail
+57 1 * * 0      @@SW_ROOT@@/bin/logcmd -log @@SW_ROOT@@/log/cron.log -- @@SW_ROOT@@/bin/gc-search-indexes
+57 3 * * 0      @@SW_ROOT@@/bin/logcmd -log @@SW_ROOT@@/log/cron.log -- @@SW_ROOT@@/bin/compress-mboxes
+#
+#      Uncomment the following and edit pathname to logrotate(8) program
+#      if you want log rotation of mharc log files.  The default frequency
+#      is once a week to match frequence of mharc provided logrotate.conf.
+#      Logrotate is provided under RedHat Linux and and other linux and
+#      Unix distros.
+#
+#57 2 * * 0    /usr/sbin/logrotate -s @@SW_ROOT@@/etc/logrotate.status @@SW_ROOT@@/etc/logrotate.conf
diff --git a/etc/logrotate.conf b/etc/logrotate.conf
new file mode 100644 (file)
index 0000000..ff6e862
--- /dev/null
@@ -0,0 +1,13 @@
+# $Id: logrotate.conf.in.dist,v 1.1 2003/08/09 18:02:42 ehood Exp $
+#      Sample logrotate(8) configuration file for rotating mharc
+#      log files.  logrotate is provided under RedHat Linux and
+#      and other linux and Unix distros.
+#
+compress
+
+/home/mharc/log/*.log {
+  rotate 5
+  weekly
+  missingok
+}
+
diff --git a/etc/logrotate.conf.in b/etc/logrotate.conf.in
new file mode 100644 (file)
index 0000000..c595d88
--- /dev/null
@@ -0,0 +1,13 @@
+# $Id: logrotate.conf.in.dist,v 1.1 2003/08/09 18:02:42 ehood Exp $
+#      Sample logrotate(8) configuration file for rotating mharc
+#      log files.  logrotate is provided under RedHat Linux and
+#      and other linux and Unix distros.
+#
+compress
+
+@@LOG_DIR@@/*.log {
+  rotate 5
+  weekly
+  missingok
+}
+
diff --git a/etc/logrotate.conf.in.dist b/etc/logrotate.conf.in.dist
new file mode 100644 (file)
index 0000000..c595d88
--- /dev/null
@@ -0,0 +1,13 @@
+# $Id: logrotate.conf.in.dist,v 1.1 2003/08/09 18:02:42 ehood Exp $
+#      Sample logrotate(8) configuration file for rotating mharc
+#      log files.  logrotate is provided under RedHat Linux and
+#      and other linux and Unix distros.
+#
+compress
+
+@@LOG_DIR@@/*.log {
+  rotate 5
+  weekly
+  missingok
+}
+
diff --git a/lib/MHArc/CGI.pm b/lib/MHArc/CGI.pm
new file mode 100644 (file)
index 0000000..c165983
--- /dev/null
@@ -0,0 +1,177 @@
+##--------------------------------------------------------------------------##
+##  File:
+##     $Id: CGI.pm,v 1.2 2002/09/18 17:23:29 ehood Exp $
+##  Description:
+##     POD at end of file.
+##--------------------------------------------------------------------------##
+##  Copyright (C) 2002 Earl Hood <earl@earlhood.com>
+##
+##  This program is free software; you can redistribute it and/or modify
+##  it under the terms of the GNU General Public License as published by
+##  the Free Software Foundation; either version 2 of the License, or
+##  (at your option) any later version.
+##  
+##  This program is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+##  GNU General Public License for more details.
+##  
+##  You should have received a copy of the GNU General Public License
+##  along with this program; if not, write to the Free Software
+##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+##  02111-1307, USA
+##--------------------------------------------------------------------------##
+
+package MHArc::CGI;
+
+use Exporter;
+@ISA = qw(Exporter);
+
+@EXPORT_OK = qw(
+  &parse_input
+  &print_content_type
+  &print_error
+  &print_forbidden
+  &print_input_error
+  &print_location
+  &print_not_found_error
+  &print_script_error
+);
+
+##--------------------------------------------------------------------------##
+
+BEGIN {
+  $Debug = 0;
+}
+
+##--------------------------------------------------------------------------##
+
+sub parse_input {
+    my($method) = ($ENV{"REQUEST_METHOD"}) || 'GET';
+    my($data);
+    if ($method eq "GET") {
+       $data = $ENV{"QUERY_STRING"} || "";
+    } elsif ($method eq "POST") {
+       read(STDIN, $data, $ENV{"CONTENT_LENGTH"});
+    } else {
+       warn qq/Unknown method: $method/;
+       return undef;
+    }
+
+    my(@pairs, $name, $value);
+    local $_;
+
+    my $form = { };
+    if ($data ne '') {
+       @pairs = split(/&/, $data);
+       foreach (@pairs) {
+           ($name, $value) = split(/=/);
+           $name = expandstr($name);
+           $value = expandstr($value);
+           $form->{$name} = $value;
+       }
+    }
+    $form;
+}
+
+sub print_forbidden {
+  print STDOUT 'Status: 403 Forbidden', "\r\n";
+  print_content_type('text/plain');
+  print STDOUT "Access Denied\n";
+}
+
+sub print_input_error {
+  print STDOUT 'Status: 400 Bad Request', "\r\n";
+  print_content_type('text/plain');
+  print STDOUT "Input Error\n";
+}
+
+sub print_error {
+  print_content_type('text/plain');
+  print STDOUT "Script Error\n";
+}
+
+sub print_not_found_error {
+  print STDOUT 'Status: 404 Not Found', "\r\n";
+  print_content_type('text/plain');
+  print STDOUT "Not Found\n";
+}
+
+sub print_location {
+  print STDOUT 'Location: ', $_[0], "\r\n\r\n";
+}
+
+sub print_content_type {
+    my($type) = shift;
+    print STDOUT "Content-type: $type\r\n\r\n";
+}
+
+sub expandstr {
+    my($str) = shift;
+    $str =~ tr/+/ /;
+    $str =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/ge;
+    $str;
+}
+
+##--------------------------------------------------------------------------##
+1;
+__END__
+
+=head1 NAME
+
+MHArc::CGI - General CGI-related utilities for mail archiving system.
+
+=head1 SYNOPSIS
+
+  use MHArc::CGI;
+
+=head1 DESCRIPTION
+
+This module contains a collection of CGI-related utility routines used
+by the various mharc CGI programs.
+
+=head1 VARIABLES
+
+The following module variables can be set to affect the behavior
+of the utility routines:
+
+=over
+
+=item C<$Debug>
+
+If set to a true value, routines will print out debugging information,
+if appropriate.
+
+=back
+
+=head1 ROUTINES
+
+By default, no routines are exported into the calling namespace.
+Routines in this module can be imported by explicitly listing the
+routines to import in the C<use> declaration:
+
+  use MHArc::CGI qw( parse_input );
+
+The following routines are availale:
+
+=over
+
+=item ...
+
+=back
+
+=head1 VERSION
+
+C<$Id: CGI.pm,v 1.2 2002/09/18 17:23:29 ehood Exp $>
+
+=head1 AUTHOR
+
+Earl Hood, earl@earlhood.com
+
+This module is part of the mharc archiving system and comes with
+ABSOLUTELY NO WARRANTY and may be copied only under the terms of
+the GNU General Public License, which may be found in the MHArc
+distribution.
+
+=cut
+
diff --git a/lib/MHArc/Config.pm b/lib/MHArc/Config.pm
new file mode 100644 (file)
index 0000000..0c8f78b
--- /dev/null
@@ -0,0 +1,245 @@
+##---------------------------------------------------------------------------##
+##  File:
+##     $Id: Config.pm,v 1.8 2002/09/20 02:58:38 ehood Exp $
+##  Description:
+##     POD at end of file.
+##---------------------------------------------------------------------------##
+##  Copyright (C) 2002 Earl Hood <earl@earlhood.com>
+##
+##  This program is free software; you can redistribute it and/or modify
+##  it under the terms of the GNU General Public License as published by
+##  the Free Software Foundation; either version 2 of the License, or
+##  (at your option) any later version.
+##  
+##  This program is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+##  GNU General Public License for more details.
+##  
+##  You should have received a copy of the GNU General Public License
+##  along with this program; if not, write to the Free Software
+##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+##  02111-1307, USA
+##---------------------------------------------------------------------------##
+
+package MHArc::Config;
+
+BEGIN {
+  $Debug   = 0;
+  $Cache   = 1;
+}
+
+sub load {
+    my $self   = { };
+    my $mod    = shift;        # Name of module
+    my $fname  = shift;        # Filename to read configuration from
+    my $class  = ref($mod) || $mod;
+
+    bless $self, $class;
+    $self->read_filename($fname);
+}
+
+sub read_filename {
+  my $self     = shift;
+  my $in_file  = shift;
+
+  READ_FILE: {
+    if ($in_file eq '-') {
+      $fh = \*STDIN;
+      $self->parse_config_sh($fh);
+      last READ_FILE;
+    }
+
+    my $filename = $in_file;
+    my $cache_file = $in_file . '.cache.pl';
+
+    if ($Cache) {
+      my $cache_mtime;
+      if (-e $cache_file) {
+       $cache_mtime = (stat(_))[9];
+       print 'Cache mtime: ', $cache_mtime, "\n"  if $Debug;
+      }
+      if (!(-e $filename)) {
+       $filename .= '.dist';
+       if (-e $filename) {
+         warn qq/Warning: Using "$filename"\n/;
+       } else {
+         die qq/ERROR: "$in_file" does not exist\n/;
+       }
+      }
+      my $file_mtime = (stat(_))[9];
+      print 'Config mtime: ', $file_mtime, "\n"  if $Debug;
+      if (defined($cache_mtime) && ($cache_mtime >= $file_mtime)) {
+       print "Using cache\n"  if $Debug;
+       delete $INC{$cache_file};
+       my $vars;
+       eval {
+         $vars = require $cache_file;
+       };
+       if ($@) {
+         warn qq/Warning: Problem requiring "$cache_file": $@\n/;
+       } else {
+         $self = $vars;
+         last READ_FILE;
+       }
+      }
+    }
+
+    local(*FILE);
+    open(FILE, $filename) ||
+       die qq/ERROR: Unable to open "$filename": $!\n/;
+    print "Using $filename\n"  if $Debug;
+    $self->parse_config_sh(\*FILE);
+    close(FILE);
+
+    if ($Cache) {
+      eval {
+       require Data::Dumper;
+       local $Data::Dumper::Terse = 1;
+       local $Data::Dumper::Indent = 0;
+       print 'Create cache ', $cache_file, "\n"  if $Debug;
+       open(FILE, '>'.$cache_file) ||
+           die qq/Unable to create "$cache_file": $!\n/;
+       print FILE '# DO NOT EDIT THIS FILE!', "\n",
+                  Data::Dumper::Dumper($self), ';';
+       close(FILE);
+      };
+      if ($@) {
+       warn qq/Warning: Problem writing "$cache_file": $@\n/;
+       unlink($cache_file);
+      };
+    }
+  }
+
+  # Check for MHONARC_LIB, and if defined, add to perl's @INC
+  if ($self->{'MHONARC_LIB'}) {
+    print 'Adding ', $self->{'MHONARC_LIB'}, "to \@INC\n"  if $Debug;
+    unshift(@INC, $self->{'MHONARC_LIB'});
+  }
+  $self;
+}
+
+sub parse_config_sh {
+  my $self  = shift;
+  my $fh    = shift;
+
+  my($line, $key, $value);
+  while (defined($line = <$fh>)) {
+    next unless $line =~ /\S/;
+    next if     $line =~ /^\s*#/;
+    chomp $line;
+    ($key, $value) = split(/=/, $line, 2);
+
+    if ($value =~ s/^'//) {
+      $value =~ s/'$//;
+    } else {
+      $value =~ s/^"//; $value =~ s/"$//;
+      $value = _expand_vars($self, $value);
+    }
+    $self->{$key} = $value;
+  }
+}
+
+sub dump_config {
+  my $self = shift;
+  my $fh   = shift;
+
+  foreach my $key (sort keys %$self) {
+    print $fh $key, '=', $self->{$key}, "\n";
+  }
+}
+
+sub _expand_vars {
+  my $map     = shift;
+  my $str     = shift;
+
+  $str =~ s/(^|[^\$])\$(\{[^}]+\}|[\w]+)/$1 . _var_lookup($map, $2);/ge;
+  $str;
+}
+
+sub _var_lookup {
+  my $map     = shift;
+  my $key     = shift;
+  $key =~ s/[{}]//g;
+  defined($map->{$key}) ? $map->{$key} :
+      defined($ENV{$key}) ? $ENV{$key} : "";
+}
+
+#my $config = MHArc::Config->load('-');
+#foreach (sort keys %$config) {
+#  print "$_=", $config->{$_}, "\n";
+#}
+
+#==========================================================================
+1;
+__END__
+
+=head1 NAME
+
+MHArc::Config - Load mail archive configuration file
+
+=head1 SYNOPSIS
+
+  $conf = MHArc::Config->load($filename);
+  print $conf->{'HTML_DIR'};
+
+=head1 DESCRIPTION
+
+This module will load in the archive configuration file.  The
+archive configuration file defines variables in Bourne shell syntax format.
+
+B<NOTE:> Only a subset of the Bourne shell syntax is supported, so do
+not get fancy with the file.
+
+The C<load> static method will create a new configuration instance
+that is a bless hash reference.  The variables defined in the file
+will be the hash keys.
+
+B<NOTE:> If the filename specified does not exist, then the C<load()>
+method will check for the filename with a C<.dist> extension.  It
+is recommended to not rely on the C<.dist> version since it will
+get overwritten on software updates.
+
+=head1 CACHING
+
+This module will create a cached version of the file loaded to
+make subsequent loadings quicker.  The cached file will be called
+C<E<lt>filenameE<gt>.cache.pl> and will contain the configuration
+data in a Perl format.
+
+When loading the configuration of a file, the timestamps of the
+cache file and the regular file are compared.  If the cache is newer,
+it is used.  Else, the regular file will be loaded and a new cache
+file created.
+
+=head1 VARIABLES
+
+=over
+
+=item C<$MHArc::Config::Cache>
+
+If set to C<0>, no cache processing will be done.  Configuration will
+be loaded directly from specified file.
+
+=item C<$MHArc::Config::Debug>
+
+If set to C<1>, diagnostic information will be printed.  This variable
+should only be used for debugging and not in production.
+
+=back
+
+=head1 VERSION
+
+C<$Id: Config.pm,v 1.8 2002/09/20 02:58:38 ehood Exp $>
+
+=head1 AUTHOR
+
+Earl Hood, earl@earlhood.com
+
+This module is part of the mharc archiving system and comes with
+ABSOLUTELY NO WARRANTY and may be copied only under the terms of
+the GNU General Public License, which may be found in the MHArc
+distribution.
+
+=cut
+
diff --git a/lib/MHArc/ListDef.pm b/lib/MHArc/ListDef.pm
new file mode 100644 (file)
index 0000000..5713aaf
--- /dev/null
@@ -0,0 +1,139 @@
+##---------------------------------------------------------------------------##
+##  File:
+##     $Id: ListDef.pm,v 1.5 2003/07/16 00:49:58 ehood Exp $
+##  Description:
+##---------------------------------------------------------------------------##
+##  Copyright (C) 2002 Earl Hood <earl@earlhood.com>
+##
+##  This program is free software; you can redistribute it and/or modify
+##  it under the terms of the GNU General Public License as published by
+##  the Free Software Foundation; either version 2 of the License, or
+##  (at your option) any later version.
+##  
+##  This program is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+##  GNU General Public License for more details.
+##  
+##  You should have received a copy of the GNU General Public License
+##  along with this program; if not, write to the Free Software
+##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+##  02111-1307, USA
+##---------------------------------------------------------------------------##
+
+package MHArc::ListDef;
+
+sub _DEF_ORDER() { return '-X-DEF-ORDER-'; }
+
+sub new {
+    my $self   = { };
+    my $mod    = shift;        # Name of module
+    my $fh     = shift;        # Filehandle to read definitions from
+    my $class  = ref($mod) || $mod;
+
+    bless $self, $class;
+    $self->{_DEF_ORDER} = [ ];
+    $self->load_file($fh);
+}
+
+sub load_file {
+  my $self = shift;
+  my $file = shift;
+  my $fh;
+
+  local(*LISTDEF);
+  if (!ref($file)) {
+    if (!open(LISTDEF, $file)) {
+      die qq/ERROR: Unable to open "$file": $!\n/;
+    }
+    $fh = \*LISTDEF;
+      
+  } else {
+    $fh = $file;
+  }
+
+  my $name = undef;
+  my($key, $line);
+
+  while (defined($line = <$fh>)) {
+    next unless $line =~ /\S/;
+    next if     $line =~ /^\s*#/;
+    chomp $line;
+    ($key, $value) = $line =~ /^([^:]+):\s*(.*)$/;
+    $key = lc $key;
+    if ($key eq 'name') {
+      $value =~ s/\s//g;
+      $name = $value;
+      push(@{$self->{_DEF_ORDER}}, $name);
+      $self->{$name}{'name'} = [ $name ];
+      next;
+    }
+    if (!defined($name)) {
+      warn qq/Warning: No name defined for '$line'\n/;
+      next;
+    }
+
+    if (defined($self->{$name}{$key})) {
+      push(@{$self->{$name}{$key}}, $value);
+    } else {
+      $self->{$name}{$key} = [ $value ];
+    }
+  }
+
+  if (!ref($file)) {
+    close($fh);
+  }
+
+  $self;
+}
+
+sub get_names {
+  my $self = shift;
+  @{$self->{_DEF_ORDER}};
+}
+
+1;
+__END__
+
+=head1 NAME
+
+MHArc::ListDef - Load mailing lists definition file
+
+=head1 SYNOPSIS
+
+  $def = MHArc::ListDef->new($fh);
+  $def = MHArc::ListDef->new($filename);
+
+  # Return list of names in order defined
+  @names = $def->get_names;
+
+  # Access an option
+  $description = $def->{$name}{'description'}[0];
+
+=head1 DESCRIPTION
+
+This module parses a mailing list definition file for use in the
+auto-mail archiving system.
+
+The C<new> method either takes a filehandle reference or a filename
+string.
+
+=head1 SEE ALSO
+
+L<mk-procmailrc|mk-procmailrc>
+
+=head1 VERSION
+
+C<$Id: ListDef.pm,v 1.5 2003/07/16 00:49:58 ehood Exp $>
+
+=head1 AUTHOR
+
+Earl Hood, earl@earlhood.com
+
+This module is part of the mharc archiving system and comes with
+ABSOLUTELY NO WARRANTY and may be copied only under the terms of
+the GNU General Public License, which may be found in the MHArc
+distribution.
+
+=cut
+
diff --git a/lib/MHArc/MailUtil.pm b/lib/MHArc/MailUtil.pm
new file mode 100644 (file)
index 0000000..4902bc8
--- /dev/null
@@ -0,0 +1,160 @@
+##--------------------------------------------------------------------------##
+##  File:
+##     $Id: MailUtil.pm,v 1.3 2002/09/13 07:24:18 ehood Exp $
+##  Description:
+##     POD at end of file.
+##--------------------------------------------------------------------------##
+##  Copyright (C) 2002 Earl Hood <earl@earlhood.com>
+##
+##  This program is free software; you can redistribute it and/or modify
+##  it under the terms of the GNU General Public License as published by
+##  the Free Software Foundation; either version 2 of the License, or
+##  (at your option) any later version.
+##  
+##  This program is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+##  GNU General Public License for more details.
+##  
+##  You should have received a copy of the GNU General Public License
+##  along with this program; if not, write to the Free Software
+##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+##  02111-1307, USA
+##--------------------------------------------------------------------------##
+
+package MHArc::MailUtil;
+
+use Exporter;
+@ISA = qw(Exporter);
+
+@EXPORT_OK = qw(
+  &extract_date
+);
+
+##--------------------------------------------------------------------------##
+
+BEGIN {
+  $Debug = 0;
+}
+
+##--------------------------------------------------------------------------##
+
+sub extract_date {
+  my $fields      = shift;
+  my @dfs         = @_;
+
+  local $_;
+  my @date_fields = ( );
+  if (!@dfs) {
+    @date_fields = ( ['received',0],['delivery-date',0],['date',0] );
+  } else {
+    foreach (@dfs) {
+      s/\s//g;  tr/A-Z/a-z/;
+      if (s/\[(\d+)\]//) {
+       push(@date_fields, [ $_, $1 ]);
+      } else {
+       push(@date_fields, [ $_, 0 ]);
+      }
+    }
+  }
+
+  my @date;
+  my($field_str, $unix_time, $df, $i);
+  foreach (@date_fields) {
+    ($df, $i) = @$_;
+    if (defined($field_str = $fields->{$df}[$i])) {
+      print qq/Debug: $df: $field_str\n/  if $Debug;
+      if ($df eq 'received') {
+       my @ra = split(/;/, $field_str);
+       $field_str = pop(@ra);
+      }
+      @date = mhonarc::parse_date($field_str);
+      if (scalar(@date)) {
+       print qq/Debug: \@date=/, join('|',@date), qq/\n/  if $Debug;
+       $unix_time = mhonarc::get_time_from_date(@date[1..$#date]);
+       last;
+      }
+    }
+  }
+  if (!defined($unix_time)) {
+    print qq/Debug: Unable to parse date, using current time\n/  if $Debug;
+    $unix_time = time;
+  }
+  $unix_time;
+}
+
+##--------------------------------------------------------------------------##
+1;
+__END__
+
+=head1 NAME
+
+MHArc::MailUtil - General mail-related utilities for mail archiving system.
+
+=head1 SYNOPSIS
+
+  use MHArc::MailUtil;
+
+=head1 DESCRIPTION
+
+This module contains a collection of mail-related utility routines.
+
+=head1 VARIABLES
+
+The following module variables can be set to affect the behavior
+of the utility routines:
+
+=over
+
+=item C<$Debug>
+
+If set to a true value, routines will print out debuging information.
+
+=back
+
+=head1 ROUTINES
+
+By default, no routines are exported into the calling namespace.
+Routines in this module can be imported by explicitly listing the
+routines to import in the C<use> declaration:
+
+  use MHArc::MailUtil qw( extract_date );
+
+The following routines are availale:
+
+=over
+
+=item C<extract_date($fields, I<@date_fields>)>
+
+Extract the date from message header fields represented by C<$fields>.
+Any additional arguments are treated as message fields names (which
+should be lowercase names) to examine to find the date.  If no fields
+names are specified, than the following fields are checked in order:
+C<Received>, C<Delivery-Date>, and C<Date>.
+
+The return value of this function is the date of the message in
+Unix time format: the same as what is returned by Perl's
+builtin C<time> function.
+
+=back
+
+=head1 DEPENDENCIES
+
+Functions in this module assume that the MHonArc libraries have
+already been loaded.
+
+=head1 VERSION
+
+C<$Id: MailUtil.pm,v 1.3 2002/09/13 07:24:18 ehood Exp $>
+
+=head1 AUTHOR
+
+Earl Hood, earl@earlhood.com
+
+This module is part of the mharc archiving system and comes with
+ABSOLUTELY NO WARRANTY and may be copied only under the terms of
+the GNU General Public License, which may be found in the mharc
+distribution.
+
+=cut
+
diff --git a/lib/MHArc/Namazu.pm b/lib/MHArc/Namazu.pm
new file mode 100644 (file)
index 0000000..8bd3e3e
--- /dev/null
@@ -0,0 +1,262 @@
+##--------------------------------------------------------------------------##
+##  File:
+##     $Id: Namazu.pm,v 1.1 2002/09/03 16:30:47 ehood Exp $
+##  Description:
+##     POD at end of file.
+##--------------------------------------------------------------------------##
+##  Copyright (C) 2002 Earl Hood <earl@earlhood.com>
+##
+##  This program is free software; you can redistribute it and/or modify
+##  it under the terms of the GNU General Public License as published by
+##  the Free Software Foundation; either version 2 of the License, or
+##  (at your option) any later version.
+##  
+##  This program is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+##  GNU General Public License for more details.
+##  
+##  You should have received a copy of the GNU General Public License
+##  along with this program; if not, write to the Free Software
+##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+##  02111-1307, USA
+##--------------------------------------------------------------------------##
+
+package MHArc::Namazu;
+
+use Exporter;
+@ISA = qw(Exporter);
+
+@EXPORT_OK = qw(
+  &nmz_get_field
+  &nmz_load_rc
+  &nmz_msg_id_search
+);
+
+use Fcntl;
+
+##--------------------------------------------------------------------------##
+
+BEGIN {
+  $Debug = 0;
+}
+
+##--------------------------------------------------------------------------##
+
+sub nmz_msg_id_search {
+  my $index_dir = shift;
+  my $id       = shift;
+
+  # check format of message-id
+  $id =~ s/\A\s+//;
+  $id =~ s/\s+\Z//;
+  if ($id !~ /\A<[^>]>\Z/) {
+    $id = '<'.$id.'>';
+  }
+
+  # Pathname to nmz field message-id file
+  my $id_file = join('/', $index_dir, 'NMZ.field.message-id');
+  if (! -e $id_file) {
+    warn qq/"$id_file" does not exist\n/;
+    return undef;
+  }
+
+  local(*F);
+  local($_);
+  # see if message-id exists in archive
+  if (!open(F, $id_file)) {
+    warn qq/Unable to open "$id_file": $!\n/;
+    return undef;
+  }
+  my $line = undef;
+  while (<F>) {
+    chomp;
+    if (/^[^<]/) {
+      # message-id in file not surrounded by <>'s
+      $_ = '<'.$_.'>';
+    }
+    if ($id eq $_) {
+      $line = $.;
+      last;
+    }
+  }
+  close(F);
+
+  $line;
+}
+
+sub nmz_load_rc {
+  my $file = shift;
+
+  local(*NMZRC);
+  if (!open(NMZRC, $file)) {
+    warn qq/Unable to open "$file": $!\n/;
+    return undef;
+  }
+
+  local $_;
+  my $rc = { };
+  my @index = ( );
+  my $replace = ( );
+  while (<NMZRC>) {
+    next  if /^\s*#/;
+    next  unless /\S/;
+    chomp;
+    my($opt, $value) = split(' ', $_, 2);
+    $opt = lc $opt;
+    if ($opt eq 'index') {
+      $value =~ s/\s+\Z//;
+      push(@index, $value);
+      next;
+    }
+    if ($opt eq 'replace') {
+      $value =~ s/\s+\Z//;
+      push(@replace, [ split(' ', $value, 2) ]);
+      next;
+    }
+  }
+  $rc->{'index'} = [ @index ];
+  $rc->{'replace'} = [ @replace ];
+  $rc;
+}
+
+sub nmz_get_field {
+  my $index      = shift;    # Pathname of directory containing namazu index
+  my $docid      = shift;    # Document ID (i.e. Line number)
+  my $field      = lc shift; # Field to get value for
+
+  my $value       = undef;
+  my $field_file   = join('/', $index, ('NMZ.field.'.$field));
+  my $field_file_i = $field_file . '.i';
+
+  local(*F);
+  if (!sysopen(F, $field_file_i, (O_RDONLY))) {
+    warn qq/Unable to open "$field_file_i": $!\n/;
+    return undef;
+  }
+  if (!defined(sysseek(F, (4*($docid-1)), SEEK_SET))) {
+    warn qq/Unable to seek on "$field_file_i": $!\n/;
+    close(F);
+    return undef;
+  }
+  my $n = 4;
+  my $bytes = '';
+  while ($n > 0) {
+    my $i = sysread(F, $bytes, $n, 4-$n);
+    if (!defined($i)) {
+      warn qq/sysread error for "$field_file_i": $!\n/;
+      close(F);
+      return undef;
+    }
+    if ($i == 0) {
+      warn qq/Unexpected of EOF for "$field_file_i"\n/;
+      close(F);
+      return undef;
+    }
+    $n -= $i;
+  }
+  close(F);
+
+  my $offset = unpack('N', $bytes);
+  if (!open(F, $field_file)) {
+    warn qq/Unable to open "$field_file": $!\n/;
+    return undef;
+  }
+  if (!seek(F, $offset, SEEK_SET)) {
+    warn qq/Unable to seek to $offset on "$field_file": $!\n/;
+    close(F);
+    return undef;
+  }
+  $value = scalar(<F>);
+  chomp $value  if defined($value);
+  close(F);
+
+  $value;
+}
+
+##--------------------------------------------------------------------------##
+1;
+__END__
+
+=head1 NAME
+
+MHArc::Namazu - General Namazu-related utilities for mail archiving system.
+
+=head1 SYNOPSIS
+
+  use MHArc::Namazu;
+
+=head1 DESCRIPTION
+
+This module contains a collection of Namazu-related utility routines.
+
+=head1 VARIABLES
+
+The following module variables can be set to affect the behavior
+of the utility routines:
+
+=over
+
+=item C<$Debug>
+
+If set to a true value, routines will print out debugging information,
+if appropriate.
+
+=back
+
+=head1 ROUTINES
+
+By default, no routines are exported into the calling namespace.
+Routines in this module can be imported by explicitly listing the
+routines to import in the C<use> declaration:
+
+  use MHArc::Namazu qw( nmz_get_field );
+
+The following routines are availale:
+
+=over
+
+=item C<nmz_get_field($index, $docid, $field)>
+
+Retrieve the value of a field for a document. C<$index> is the
+pathname of the directory containing Namazu index files.  C<$docid>
+is the ID of the document to retrieve a field value of.  Document
+ID correlate to the line numbers within C<NMZ.field.I<field-name>>
+files.  C<$field> is the field to retrieve the value of.
+
+The return value of this function is the field value, or C<undef> if
+the field value could not determined.
+
+Any error messages generated by this function are printed via Perl's
+C<warn> operator.
+
+=item C<nmz_load_rc($filename)>
+
+Parse Namazu configuration file denoted by C<$filename>.  The return
+value is a hash reference where the keys are the option names (normalized
+ot lowercases) and the values are the values associated with
+the options.  The actual value types depends on the option.
+
+If the conf file cannot be loaded, C<undef> is returned.
+
+=back
+
+=head1 DEPENDENCIES
+
+C<Fcntl>
+
+=head1 VERSION
+
+C<$Id: Namazu.pm,v 1.1 2002/09/03 16:30:47 ehood Exp $>
+
+=head1 AUTHOR
+
+Earl Hood, earl@earlhood.com
+
+This module is part of the mharc archiving system and comes with
+ABSOLUTELY NO WARRANTY and may be copied only under the terms of
+the GNU General Public License, which may be found in the MHArc
+distribution.
+
+=cut
+
diff --git a/lib/MHArc/Util.pm b/lib/MHArc/Util.pm
new file mode 100644 (file)
index 0000000..df1c42c
--- /dev/null
@@ -0,0 +1,208 @@
+##--------------------------------------------------------------------------##
+##  File:
+##     $Id: Util.pm,v 1.5 2002/09/13 07:24:18 ehood Exp $
+##  Description:
+##     POD at end of file.
+##--------------------------------------------------------------------------##
+##  Copyright (C) 2002 Earl Hood <earl@earlhood.com>
+##
+##  This program is free software; you can redistribute it and/or modify
+##  it under the terms of the GNU General Public License as published by
+##  the Free Software Foundation; either version 2 of the License, or
+##  (at your option) any later version.
+##  
+##  This program is distributed in the hope that it will be useful,
+##  but WITHOUT ANY WARRANTY; without even the implied warranty of
+##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+##  GNU General Public License for more details.
+##  
+##  You should have received a copy of the GNU General Public License
+##  along with this program; if not, write to the Free Software
+##  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+##  02111-1307, USA
+##--------------------------------------------------------------------------##
+
+package MHArc::Util;
+
+use Exporter;
+@ISA = qw(Exporter);
+
+@EXPORT_OK = qw(
+  &ch_dir
+  &cmd
+  &exec_prg
+  &mk_dir
+  &run_prg
+  &usage
+);
+
+##--------------------------------------------------------------------------##
+
+BEGIN {
+  $ECHO_CMDS = 0;
+  $ECHO_ONLY = 0;
+}
+
+##--------------------------------------------------------------------------##
+
+sub cmd {
+  print "@_\n" if $ECHO_CMDS || $ECHO_ONLY;
+  if ($ECHO_ONLY) {
+    return 0;   # bogus ok exit status
+  }
+  system @_;
+}
+
+sub ch_dir {
+  my $dir = shift;
+  print "chdir $dir\n" if $ECHO_CMDS || $ECHO_ONLY;
+  if ($ECHO_ONLY) {
+    return 0;
+  }
+  chdir $dir;
+}
+
+sub run_prg {
+  print "@_\n"  if $ECHO_CMDS || $ECHO_ONLY;
+  if (!$ECHO_ONLY) {
+    my $wait = system @_;
+    die qq/system @_ failed: $?\n/  if $wait;
+  }
+}
+
+sub mk_dir {
+  my $dir       = shift;
+  my $mask      = shift;
+  print "mkdir $dir\n"  if $ECHO_CMDS || $ECHO_ONLY;
+
+  if ($ECHO_ONLY) {
+    return 0;
+  } else {
+    if (defined($mask)) {
+      mkdir $dir, $mask;
+    } else {
+      mkdir $dir, 0777;
+    }
+  }
+}
+
+sub exec_prg {
+  print "@_\n"  if $ECHO_CMDS || $ECHO_ONLY;
+  if ($ECHO_ONLY) {
+    exit 0;
+  } else {
+    exec(@_);
+    die qq/exec @_ failed: $?\n/;
+  }
+}
+
+sub usage {
+  require Pod::Usage;
+  my $verbose = shift;
+  if ($verbose == 0) {
+    Pod::Usage::pod2usage(-verbose => $verbose);
+  } else {
+    my $pager = $ENV{'PAGER'} || 'more';
+    local(*PAGER);
+    my $fh = (-t STDOUT && open(PAGER, "|$pager")) ? \*PAGER : \*STDOUT;
+    Pod::Usage::pod2usage(-verbose => $verbose,
+                         -output  => $fh);
+  }
+}
+
+##--------------------------------------------------------------------------##
+1;
+__END__
+
+=head1 NAME
+
+MHArc::Util - General utilities for mail archiving system.
+
+=head1 SYNOPSIS
+
+  use MHArc::Util;
+
+=head1 DESCRIPTION
+
+This module contains a collection of utility routines.
+
+=head1 VARIABLES
+
+The following module variables can be set to affect the behavior
+of the utility routines:
+
+=over
+
+=item C<$ECHO_CMDS>
+
+If set to a true value, any routines that execute shell commands,
+or external programs, will print the command to be executed to the
+default filehandle.
+
+The default value for C<$ECHO_CMDS> is 0.
+
+=item C<$ECHO_ONLY>
+
+If set to a true value, any routines that execute shell commands,
+will only print the command to be executed to the default filehandle
+if C<$ECHO_CMDS> is true.  The command itself will not be
+executed at all.
+
+The default value for C<$ECHO_ONLY> is 0.
+
+=back
+
+=head1 ROUTINES
+
+By default, no routines are exported into the calling namespace.
+Routines in this module can be imported by explicitly listing the
+routines to import in the C<use> declaration:
+
+  use MHArc::Util qw( run_prg );
+
+The following routines are availale:
+
+=over
+
+=item C<ch_dir($dir)>
+
+Change the current working directory.
+
+=item C<cmd(LIST)>
+
+Execute external program.  The return value is the wait(2) status
+of the program invoked.
+
+=item C<mk_dir($dir, $mask)>
+
+Create specified directory.  C<$mask> is optional, and if
+not specified, will default to C<0777>.
+
+=item C<run_prg(LIST)>
+
+Execute external program and terminate process if program returns
+a non-zero status.
+
+=item C<usage($verbosity)>
+
+Display usage information of program based upon embedded POD.
+The C<$verbosity> argument has the same meaning as the C<-verbose>
+option to C<Pod::Usage::pod2usage>.
+
+=back
+
+=head1 VERSION
+
+C<$Id: Util.pm,v 1.5 2002/09/13 07:24:18 ehood Exp $>
+
+=head1 AUTHOR
+
+Earl Hood, earl@earlhood.com
+
+This module is part of the mharc archiving system and comes with
+ABSOLUTELY NO WARRANTY and may be copied only under the terms of
+the GNU General Public License, which may be found in the mharc
+distribution.
+
+=cut
+
diff --git a/lib/common.mrc b/lib/common.mrc
new file mode 100644 (file)
index 0000000..507db76
--- /dev/null
@@ -0,0 +1,529 @@
+<!-- $Id: common.mrc.in.dist,v 1.17 2002/07/23 05:51:46 ehood Exp $  -->
+<!-- ================================================================== -->
+<!--   MHonArc Resource File for Mail Archives                         -->
+<!--   Description:
+         This is the main resource file for the mail archives.
+         it contains all the common formatting characteristics
+         used across archives.  Archive specific settings can
+         be set via command-line options the bin/web-archive
+         program.
+  -->
+<!-- ================================================================== -->
+
+<!-- CONLEN should only be set of Content-Length is accurate for the
+     system.  Mail delivery under Solaris sets it properly.
+     XXX: Should probably move this to command-line invocation.
+  -->
+<ConLen>
+
+<!-- Added POSIXSTRFTIME so that we can print out timezone specs for
+     archive generation (RT #244804) - baughj, 2005.06.16
+  -->
+<POSIXSTRFTIME>
+
+<!-- Added for rt#106039 -- bernie -->
+<TextEncode>
+utf-8; MHonArc::UTF8::to_utf8; MHonArc/UTF8.pm
+</TextEncode>
+
+<-- With data translated to UTF-8, it simplifies CHARSETCONVERTERS -->
+<CharsetConverters override>
+default; mhonarc::htmlize
+</CharsetConverters>
+
+<-- Need to also register UTF-8-aware text clipping function -->
+<TextClipFunc>
+MHonArc::UTF8::clip; MHonArc/UTF8.pm
+</TextClipFunc>
+
+<!-- ================================================================== -->
+<!--   Custom Variable Defintions                                      -->
+<!-- ================================================================== -->
+<!--
+       The following variables defined by the web-archive program
+       and not here:
+         $ALL-LISTS-URL$       URL to all archive listing.
+         $CUR-PERIOD$          Current period in YYYY or YYYY-MM format.
+         $LIST-NAME$           Archive/list name and search index name.
+         $LIST-TITLE$          Archive/list title: generally equals
+                               $LIST-NAME$, but can be different like for
+                               CVS commit archives.
+         $PNAV-CGI$            URL to period navigation cgi program.
+         $SEARCH-CGI$          URL to search cgi program.
+  -->
+
+<SPAMMODE>
+
+<AddressModifyCode>
+$_ = 'address@hidden';
+</AddressModifyCode>
+
+<!-- Variables representing period links for index pages.
+  -->
+<DefineVar chop>
+PREV-PERIOD-LABEL
+Prev&nbsp;Period
+</DefineVar>
+
+<DefineVar chop>
+NEXT-PERIOD-LABEL
+Next&nbsp;Period
+</DefineVar>
+
+<DefineVar chop>
+PREV-PERIOD-LINK
+[<a href="$PNAV-CGI$?a=$LIST-NAME$&amp;m=$CUR-PERIOD$&amp;d=prev">$PREV-PERIOD-LABEL$</a>]
+</DefineVar>
+
+<DefineVar chop>
+NEXT-PERIOD-LINK
+[<a href="$PNAV-CGI$?a=$LIST-NAME$&amp;m=$CUR-PERIOD$&amp;d=next">$NEXT-PERIOD-LABEL$</a>]
+</DefineVar>
+
+<DefineVar chop>
+TPREV-PERIOD-LINK
+[<a href="$PNAV-CGI$?a=$LIST-NAME$&amp;m=$CUR-PERIOD$&amp;d=prev&amp;t=t">$PREV-PERIOD-LABEL$</a>]
+</DefineVar>
+
+<DefineVar chop>
+TNEXT-PERIOD-LINK
+[<a href="$PNAV-CGI$?a=$LIST-NAME$&amp;m=$CUR-PERIOD$&amp;d=next&amp;t=t">$NEXT-PERIOD-LABEL$</a>]
+</DefineVar>
+
+<!-- Variable representing markup of search form.
+  -->
+<DefineVar>
+SEARCH-FORM
+<form method="get" action="$SEARCH-CGI$">
+<input type="text" name="query" size="30">
+<input type="submit" name="submit" value="Search">
+<input type="hidden" name="idxname" value="$LIST-NAME$">
+<a href="$SEARCH-CGI$?idxname=$LIST-NAME$">Advanced</a>
+</form>
+</DefineVar>
+
+<DefineVar chop>
+THREAD-IDX-LINK
+[<b><a href="$TIDXFNAME$">Thread&nbsp;Index</a></b>]
+</DefineVar>
+
+<DefineVar chop>
+DATE-IDX-LINK
+[<b><a href="$IDXFNAME$">Date&nbsp;Index</a></b>]
+</DefineVar>
+
+<!-- Main index page nav links if MULTIPG is ever used.
+     This variable could be reference by list-specific resource files
+     if MULTIPG is activated.
+  -->
+<DefineVar>
+MAIN-PAGE-LINKS
+<hr size=1 noshade>
+<table width="100%" border=0 cellpadding=0 cellspacing=0>
+<tr align="center">
+<th colspan=4><small>Page $PAGENUM$ of $NUMOFPAGES$</small></th>
+<tr>
+<td align="left"
+><small>[<a href="$PG(FIRST)$">First&nbsp;Page</a>]</small></td>
+<td align="right"><small>$PGLINK(PREV)$</small></td>
+<td align="left"><small>$PGLINK(NEXT)$</small></td>
+<td align="right"><small>[<a href="$PG(LAST)$">Last&nbsp;Page</a>]</small></td>
+</tr>
+</table>
+<hr size=1 noshade>
+</DefineVar>
+
+<!-- Thread index page nav links if MULTIPG ever used.
+     This variable could be reference by list-specific resource files
+     if MULTIPG is activated.
+  -->
+<DefineVar>
+THREAD-PAGE-LINKS
+<hr size=1 noshade>
+<table width="100%" border=0 cellpadding=0 cellspacing=0>
+<tr align="center">
+<th colspan=4><small>Page $PAGENUM$ of $NUMOFPAGES$</small></th>
+<tr>
+<td align="left"
+><small>[<a href="$PG(TFIRST)$">First&nbsp;Page</a>]</small></td>
+<td align="right"><small>$PGLINK(TPREV)$</small></td>
+<td align="left"><small>$PGLINK(TNEXT)$</small></td>
+<td align="right"><small>[<a href="$PG(TLAST)$">Last&nbsp;Page</a>]</small></td>
+</tr>
+</table>
+<hr size=1 noshade>
+</DefineVar>
+
+<!-- ================================================================== -->
+<!--   General Resources                                               -->
+<!-- ================================================================== -->
+
+<!-- Since we specify resource settings everytime, no need to save
+     them in archive database.
+  -->
+<NoSaveResources>
+
+<!-- Arguments to content filters.
+     CAUTION: Verify options against security concerns and make
+             any changes accordingly.
+  -->
+<MIMEArgs override>
+m2h_external::filter;  inline useicon
+m2h_text_plain::filter;        attachcheck quote maxwidth=80
+m2h_text_html::filter; notitle
+</MIMEArgs>
+
+<!-- Stricter MSGSEP.  Not important if CONLEN active.
+     XXX: Should this strict setting exist or should we just use
+         MHonArc's default value for MSGSEP as the default?
+  -->
+<MsgSep>
+^From \S+\s+\S+\s+\S+\s+\d+\s+\d+:\d+:\d+\s+\d+
+</MsgSep>
+
+<!-- Icons settings copied from documentation.  Works with
+     Apache server.  Icons not used in index, but attachment
+     filter is given useicon argument.  If Apache is not used,
+     or the icon URLs are different, this resource needs to
+     be changed or the useicon argument removed from
+     m2h_external::filter.
+  -->
+<Icons>
+application/*;[20x22]/icons/generic.png
+application/msword;[20x22]/icons/layout.png
+application/postscript;[20x22]/icons/ps.png
+application/rtf;[20x22]/icons/layout.png
+application/x-csh;[20x22]/icons/script.png
+application/x-dvi;[20x22]/icons/dvi.png
+application/x-gtar;[20x22]/icons/tar.png
+application/x-gzip;[20x22]/icons/compressed.png
+application/x-ksh;[20x22]/icons/script.png
+application/x-latex;[20x22]/icons/tex.png
+application/octet-stream;[20x22]/icons/binary.png
+application/x-patch;[20x22]/icons/patch.png
+application/pdf;[20x22]/icons/pdf.png
+application/x-script;[20x22]/icons/script.png
+application/x-sh;[20x22]/icons/script.png
+application/x-tar;[20x22]/icons/tar.png
+application/x-tex;[20x22]/icons/tex.png
+application/x-zip-compressed;[20x22]/icons/compressed.png
+application/zip;[20x22]/icons/compressed.png
+audio/*;[20x22]/icons/sound1.png
+chemical/*;[20x22]/icons/sphere2.png
+image/*;[20x22]/icons/image2.png
+message/external-body;[20x22]/icons/link.png
+multipart/*;[20x22]/icons/layout.png
+text/*;[20x22]/icons/text.png
+video/*;[20x22]/icons/movie.png
+*/*;[20x22]/icons/generic.png
+</Icons>
+
+<!-- ================================================================== -->
+<!--   Main Index                                                      -->
+<!-- ================================================================== -->
+
+<!-- Set sorting order of main index pages: Reverse chronological.  -->
+<Sort>
+<Reverse>
+
+<!-- Show dates in local time. -->
+<UseLocalTime>
+
+<!-- Make date index the default page for the archive. -->
+<IdxFName>
+index.html
+</IdxFName>
+
+<MsgLocalDateFmt>
+%B %d, %Y
+</MsgLocalDateFmt>
+
+<IdxPgBegin>
+<!doctype html public "-//W3C//DTD HTML//EN">
+<html>
+<head>
+<title>$IDXTITLE$</title>
+</head>
+<body>
+<center>
+<em>Archives are refreshed every 30 minutes - for details, please visit
+<a href="http://lists.gnu.org/archive/html/">the main index</a>.</em>
+<br>
+You can also <a href="ftp://lists.gnu.org/$LIST-NAME$/">download the archives in mbox format</a>.</em>
+<p>
+<table border=0 cellspacing=2 cellpadding=0 bgcolor="#000000">
+<tr><td><table border=0 bgcolor="#FFFFCC">
+<tr><td><big><big><b>$IDXTITLE$</b></big></big></td></tr></table></tr></table>
+<small><nobr>$THREAD-IDX-LINK$[<a href="../"
+>Top</a>][<a href="$ALL-LISTS-URL$">All Lists</a>]</nobr
+></small>
+$SEARCH-FORM$
+</center>
+</IdxPgBegin>
+
+<ListBegin>
+<table width="100%">
+<tr valign="bottom">
+<td align="left"><nobr>$PREV-PERIOD-LINK$</nobr></td>
+<td align="center"><small
+>Last Modified: $MSGLOCALDATE(LAST;%a %b %d %Y %H:%M:%S %z)$<br>
+Messages in reverse chronological order</small></td>
+<td align="right"><nobr>$NEXT-PERIOD-LINK$</nobr></td>
+</tr>
+</table>
+<hr size="1" noshade>
+<ul>
+</ListBegin>
+
+<!-- Date listing is done in day groups with the each day listed in bold
+     and messages for that date listed under it.
+  -->
+<DayBegin>
+<li><strong>$MSGLOCALDATE$</strong>
+<ul>
+</DayBegin>
+
+<DayEnd>
+</li></ul>
+</DayEnd>
+
+<LITemplate>
+<li>$SUBJECT$, <i>$FROMNAME$</i>, <tt>$MSGLOCALDATE(CUR;%H:%M)$</tt></li>
+</LITemplate>
+
+<ListEnd>
+</ul>
+<hr size="1" noshade>
+<table width="100%">
+<tr valign="bottom">
+<td align="left"><nobr>$PREV-PERIOD-LINK$</nobr></td>
+<td align="right"><nobr>$NEXT-PERIOD-LINK$</nobr></td>
+</tr>
+</table>
+</ListEnd>
+
+<!-- ================================================================== -->
+<!--   Thread Index                                                    -->
+<!-- ================================================================== -->
+
+<!-- Reverse thread order. -->
+<TReverse>
+
+<!-- Show no indicator of subject-based thread detection since most
+     people do not care.
+     NOTE: The blank line is important!
+  -->
+<TSubjectBeg>
+
+</TSubjectBeg>
+
+<TIdxPgBegin>
+<!doctype html public "-//W3C//DTD HTML//EN">
+<html>
+<head>
+<title>$TIDXTITLE$</title>
+</head>
+<body>
+<center>
+<em>Archives are refreshed every 30 minutes - for details, please visit <a
+href="http://lists.gnu.org/archive/html/">the main index</a>.</em>
+<br>
+You can also <a href="ftp://lists.gnu.org/$LIST-NAME$/">download the archives in mbox format</a>.</em>
+<p>
+<table border=0 cellspacing=2 cellpadding=0 bgcolor="#000000">
+<tr><td><table border=0 bgcolor="#FFFFCC">
+<tr><td><big><big><b>$TIDXTITLE$</b></big></big></td></tr></table></tr></table>
+<small><nobr
+>$DATE-IDX-LINK$[<a href="../"
+>Top</a>][<a href="$ALL-LISTS-URL$">All Lists</a>]</nobr
+></small>
+$SEARCH-FORM$
+</center>
+</TIdxPgBegin>
+
+<THead>
+<table width="100%">
+<tr valign="bottom">
+<td align="left"><nobr>$TPREV-PERIOD-LINK$</nobr></td>
+<td align="center"><small
+>Last Modified: $MSGLOCALDATE(LAST;%a %b %d %Y %H:%M:%S %z)$<br>
+Threads in reverse chronological order</small></td>
+<td align="right"><nobr>$TNEXT-PERIOD-LINK$</nobr></td>
+</tr>
+</table>
+<hr size="1" noshade>
+<ul>
+</THead>
+
+<TTopBegin>
+<li><b>$SUBJECT$</b>, <i>$FROMNAME$</i>, <tt>$MSGLOCALDATE(CUR;%Y/%m/%d)$</tt>
+</TTopBegin>
+
+<TLiTxt>
+<li><b>$SUBJECT$</b>, <i>$FROMNAME$</i>, <tt>$MSGLOCALDATE(CUR;%Y/%m/%d)$</tt>
+</TLiTxt>
+
+<TSingleTxt>
+<li><b>$SUBJECT$</b>, <i>$FROMNAME$</i>, <tt>$MSGLOCALDATE(CUR;%Y/%m/%d)$</tt>
+</TSingleTxt>
+
+<TFoot>
+</ul>
+<hr size="1" noshade>
+<table width="100%">
+<tr valign="bottom">
+<td align="left"><nobr>$TPREV-PERIOD-LINK$</nobr></td>
+<td align="right"><nobr>$TNEXT-PERIOD-LINK$</nobr></td>
+</tr>
+</table>
+</TFoot>
+
+<!-- ================================================================== -->
+<!--   Message Pages                                                   -->
+<!-- ================================================================== -->
+
+<ModTime>
+
+<!-- We clip the subject title to 72 characters to prevent ugly pages
+     due to very long subject lines.  The full subject text will still
+     be shown in the formatted message header.
+  -->
+<MsgPgBegin>
+<!doctype html public "-//W3C//DTD HTML//EN">
+<html>
+<head>
+<title>$SUBJECTNA:72$</title>
+</head>
+<body>
+<center>
+<table border=0 cellspacing=2 cellpadding=0 bgcolor="#000000">
+<tr><td><table border=0 bgcolor="#FFFFCC">
+<tr><td><big><b>$LIST-TITLE$</b></big></td></tr></table></tr></table>
+<small><nobr>[<a href="../"
+>Top</a>][<a href="$ALL-LISTS-URL$">All Lists</a>]</small></nobr>
+$SEARCH-FORM$
+</center>
+</MsgPgBegin>
+
+<TopLinks>
+<hr>
+$BUTTON(PREV)$$BUTTON(NEXT)$$BUTTON(TPREV)$$BUTTON(TNEXT)$[<a
+href="$IDXFNAME$#$MSGNUM$">Date Index</a>][<a
+href="$TIDXFNAME$#$MSGNUM$">Thread Index</a>]
+</TopLinks>
+
+<SubjectHeader>
+<h2>$SUBJECTNA:72$</h2>
+<hr>
+<table border=0>
+<tbody>
+<tr>
+<td align="right" valign="top">
+<b>From</b>: </td>
+<td align="left">
+$FROMNAME$</td>
+</tr>
+</SubjectHeader>
+
+<!-- Format message header in a table. -->
+
+<FieldOrder>
+subject
+date
+user-agent
+</FieldOrder>
+
+<Fieldsbeg>
+
+</FieldsBeg>
+
+<LabelBeg>
+<tr>
+<td align="right" valign="top">
+</LabelBeg>
+
+<LabelEnd>
+: </td>
+</LabelEnd>
+
+<FldBeg>
+<td align="left">
+</FldBeg>
+
+<FldEnd>
+</td>
+</tr>
+</FldEnd>
+
+<FieldsEnd>
+</tbody>
+</table>
+</FieldsEnd>
+
+<LabelStyles>
+-default-:b
+</LabelStyles>
+
+<!-- Disable explicit follow-up/references section and use $TSLICE$ instead.
+  -->
+<NoFolRefs>
+
+<!-- Set TSLICE resource to represent default $TSLICE$ behavior and
+     mainly to set the maximum message page update ranges when messages
+     are added to the archive.  I.e.  The before and after values
+     should represent the largest before and after values we will use
+     with $TSLICE$.
+  -->
+<TSlice>
+10:10:1
+</TSlice>
+
+<!-- We set up slice formatting so current message in thread is not
+     hyperlinked and "greyed out".  We could probably use CSS to
+     do this, but <font> seems to still work with most popular
+     graphical browsers.
+  -->
+<TSliceBeg>
+<ul>
+</TSliceBeg>
+
+<TSliceTopBeginCur>
+<li><font color="#666666"><strong>$SUBJECTNA$</strong>,
+<em>$FROMNAME$</em></font>&nbsp;<b>&lt;=</b>
+</TSliceTopBeginCur>
+
+<TSliceLiTxtCur>
+<li><font color="#666666"><strong>$SUBJECTNA$</strong>,
+<em>$FROMNAME$</em></font>&nbsp;<b>&lt;=</b>
+</TSliceLiTxtCur>
+
+<TSliceSingleTxtCur>
+<li><font color="#666666"><strong>$SUBJECTNA$</strong>,
+<em>$FROMNAME$</em></font>&nbsp;<b>&lt;=</b>
+</TSliceSingleTxtCur>
+
+<TSliceEnd>
+</ul>
+</TSliceEnd>
+
+<!-- Modify end of message body to include thread slice.  We also
+     include convenient next/prev-in-thread links since scanning
+     slice can be inconvenient for simple thread reading.
+  -->
+<MsgBodyEnd>
+<hr>
+<form method="post" action="/mp/yyz.py" enctype="multipart/form-data">
+<input type="hidden" name="a" value="$FROMADDRNAME$">
+<input type="hidden" name="b" value="$SUBJECTNA$">
+<input type="hidden" name="d" value="$MSGID$">
+<input type="hidden" name="c" value="$FROMADDRDOMAIN$">
+<center>reply via email to<br><input type="submit" value=" $FROMNAME$ "></center>
+</form>
+<hr>
+<table width="100%">
+<tr><td align="left">$BUTTON(TPREVIN)$</td>
+<td align="center"><b>Current Thread</b></td>
+<td align="right">$BUTTON(TNEXTIN)$</td></tr></table>
+$TSLICE$
+<hr>
+</MsgBodyEnd>
diff --git a/lib/common.mrc.da b/lib/common.mrc.da
new file mode 100644 (file)
index 0000000..577f2e0
--- /dev/null
@@ -0,0 +1,126 @@
+<!-- $Id: common.mrc.da.in.dist,v 1.1 2003/08/09 18:05:12 ehood Exp $ -->
+<!-- ================================================================== -->
+<!--   Description:
+         Danish (da) locale settings for common.mrc.
+  -->
+<!-- ================================================================== -->
+<!--  Contributer:                                                     --
+  --   Lars Jorgensen                                                  --
+<!-- ================================================================== -->
+
+<!-- Variable for defining any <meta http-equiv> tags. -->
+<DefineVar chop>
+HTTP-EQUIV
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+</DefineVar>
+
+<DefineVar chop>
+PREV-PERIOD-LABEL
+Forrige&nbsp;Periode
+</DefineVar>
+
+<DefineVar chop>
+NEXT-PERIOD-LABEL
+N&aelig;ste&nbsp;Periode
+</DefineVar>
+
+<DefineVar chop>
+ADV-SEARCH-LABEL
+Avanceret
+</DefineVar>
+
+<DefineVar chop>
+THREAD-IDX-LABEL
+Tr&aring;d-indeks
+</DefineVar>
+
+<DefineVar chop>
+DATE-IDX-LABEL
+Dato-indeks
+</DefineVar>
+
+<DefineVar chop>
+TOP-LINK-LABEL
+Top
+</DefineVar>
+
+<DefineVar chop>
+ALL-LISTS-LABEL
+Alle&nbsp;Lister
+</DefineVar>
+
+<DefineVar chop>
+PREV-MSG-BUTTON-LABEL
+&lt;forrige
+</DefineVar>
+
+<DefineVar chop>
+NEXT-MSG-BUTTON-LABEL
+n&aelig;ste&gt;
+</DefineVar>
+
+<DefineVar chop>
+DATE-IDX-BUTTON-LABEL
+Dato
+</DefineVar>
+
+<DefineVar chop>
+THREAD-IDX-BUTTON-LABEL
+Tr&aring;d
+</DefineVar>
+
+<DefineVar chop>
+ORIGINAL-MSG-LINK-LABEL
+Original
+</DefineVar>
+
+<DefineVar chop>
+BOOKMARK-LINK-LABEL
+Bookmark&nbsp;Link
+</DefineVar>
+
+<DefineVar chop>
+PREV-IN-THREAD-LABEL
+&lt;Forrige&nbsp;i&nbsp;Tr&aring;d
+</DefineVar>
+
+<DefineVar chop>
+NEXT-IN-THREAD-LABEL
+N&aelig;ste&nbsp;i&nbsp;Tr&aring;d&gt;
+</DefineVar>
+
+<DefineVar chop>
+CURRENT-THREAD-LABEL
+Nuv&aelig;rende&nbsp;Tr&aring;d
+</DefineVar>
+
+<DefineVar chop>
+MORE-SUBJECT-LABEL
+Flere&nbsp;med&nbsp;dette&nbsp;emne...
+</DefineVar>
+
+<DefineVar chop>
+PREV-BY-DATE-LABEL
+Forrige&nbsp;i&nbsp;Dator&aelig;kkef&oslash;lge
+</DefineVar>
+
+<DefineVar chop>
+NEXT-BY-DATE-LABEL
+N&aelig;ste&nbsp;i&nbsp;Dator&aelig;kkef&oslash;lge
+</DefineVar>
+
+<DefineVar chop>
+PREV-BY-THREAD-LABEL
+Forrige&nbsp;i&nbsp;Tr&aring;dr&aelig;kkef&oslash;lge
+</DefineVar>
+
+<DefineVar chop>
+NEXT-BY-THREAD-LABEL
+N&aelig;ste&nbsp;i&nbsp;Tr&aring;dr&aelig;kkef&oslash;lge
+</DefineVar>
+
+<DefineVar chop>
+INDEXES-LABEL
+Indekser
+</DefineVar>
+
diff --git a/lib/common.mrc.da.in b/lib/common.mrc.da.in
new file mode 100644 (file)
index 0000000..577f2e0
--- /dev/null
@@ -0,0 +1,126 @@
+<!-- $Id: common.mrc.da.in.dist,v 1.1 2003/08/09 18:05:12 ehood Exp $ -->
+<!-- ================================================================== -->
+<!--   Description:
+         Danish (da) locale settings for common.mrc.
+  -->
+<!-- ================================================================== -->
+<!--  Contributer:                                                     --
+  --   Lars Jorgensen                                                  --
+<!-- ================================================================== -->
+
+<!-- Variable for defining any <meta http-equiv> tags. -->
+<DefineVar chop>
+HTTP-EQUIV
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+</DefineVar>
+
+<DefineVar chop>
+PREV-PERIOD-LABEL
+Forrige&nbsp;Periode
+</DefineVar>
+
+<DefineVar chop>
+NEXT-PERIOD-LABEL
+N&aelig;ste&nbsp;Periode
+</DefineVar>
+
+<DefineVar chop>
+ADV-SEARCH-LABEL
+Avanceret
+</DefineVar>
+
+<DefineVar chop>
+THREAD-IDX-LABEL
+Tr&aring;d-indeks
+</DefineVar>
+
+<DefineVar chop>
+DATE-IDX-LABEL
+Dato-indeks
+</DefineVar>
+
+<DefineVar chop>
+TOP-LINK-LABEL
+Top
+</DefineVar>
+
+<DefineVar chop>
+ALL-LISTS-LABEL
+Alle&nbsp;Lister
+</DefineVar>
+
+<DefineVar chop>
+PREV-MSG-BUTTON-LABEL
+&lt;forrige
+</DefineVar>
+
+<DefineVar chop>
+NEXT-MSG-BUTTON-LABEL
+n&aelig;ste&gt;
+</DefineVar>
+
+<DefineVar chop>
+DATE-IDX-BUTTON-LABEL
+Dato
+</DefineVar>
+
+<DefineVar chop>
+THREAD-IDX-BUTTON-LABEL
+Tr&aring;d
+</DefineVar>
+
+<DefineVar chop>
+ORIGINAL-MSG-LINK-LABEL
+Original
+</DefineVar>
+
+<DefineVar chop>
+BOOKMARK-LINK-LABEL
+Bookmark&nbsp;Link
+</DefineVar>
+
+<DefineVar chop>
+PREV-IN-THREAD-LABEL
+&lt;Forrige&nbsp;i&nbsp;Tr&aring;d
+</DefineVar>
+
+<DefineVar chop>
+NEXT-IN-THREAD-LABEL
+N&aelig;ste&nbsp;i&nbsp;Tr&aring;d&gt;
+</DefineVar>
+
+<DefineVar chop>
+CURRENT-THREAD-LABEL
+Nuv&aelig;rende&nbsp;Tr&aring;d
+</DefineVar>
+
+<DefineVar chop>
+MORE-SUBJECT-LABEL
+Flere&nbsp;med&nbsp;dette&nbsp;emne...
+</DefineVar>
+
+<DefineVar chop>
+PREV-BY-DATE-LABEL
+Forrige&nbsp;i&nbsp;Dator&aelig;kkef&oslash;lge
+</DefineVar>
+
+<DefineVar chop>
+NEXT-BY-DATE-LABEL
+N&aelig;ste&nbsp;i&nbsp;Dator&aelig;kkef&oslash;lge
+</DefineVar>
+
+<DefineVar chop>
+PREV-BY-THREAD-LABEL
+Forrige&nbsp;i&nbsp;Tr&aring;dr&aelig;kkef&oslash;lge
+</DefineVar>
+
+<DefineVar chop>
+NEXT-BY-THREAD-LABEL
+N&aelig;ste&nbsp;i&nbsp;Tr&aring;dr&aelig;kkef&oslash;lge
+</DefineVar>
+
+<DefineVar chop>
+INDEXES-LABEL
+Indekser
+</DefineVar>
+
diff --git a/lib/common.mrc.da.in.dist b/lib/common.mrc.da.in.dist
new file mode 100644 (file)
index 0000000..577f2e0
--- /dev/null
@@ -0,0 +1,126 @@
+<!-- $Id: common.mrc.da.in.dist,v 1.1 2003/08/09 18:05:12 ehood Exp $ -->
+<!-- ================================================================== -->
+<!--   Description:
+         Danish (da) locale settings for common.mrc.
+  -->
+<!-- ================================================================== -->
+<!--  Contributer:                                                     --
+  --   Lars Jorgensen                                                  --
+<!-- ================================================================== -->
+
+<!-- Variable for defining any <meta http-equiv> tags. -->
+<DefineVar chop>
+HTTP-EQUIV
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+</DefineVar>
+
+<DefineVar chop>
+PREV-PERIOD-LABEL
+Forrige&nbsp;Periode
+</DefineVar>
+
+<DefineVar chop>
+NEXT-PERIOD-LABEL
+N&aelig;ste&nbsp;Periode
+</DefineVar>
+
+<DefineVar chop>
+ADV-SEARCH-LABEL
+Avanceret
+</DefineVar>
+
+<DefineVar chop>
+THREAD-IDX-LABEL
+Tr&aring;d-indeks
+</DefineVar>
+
+<DefineVar chop>
+DATE-IDX-LABEL
+Dato-indeks
+</DefineVar>
+
+<DefineVar chop>
+TOP-LINK-LABEL
+Top
+</DefineVar>
+
+<DefineVar chop>
+ALL-LISTS-LABEL
+Alle&nbsp;Lister
+</DefineVar>
+
+<DefineVar chop>
+PREV-MSG-BUTTON-LABEL
+&lt;forrige
+</DefineVar>
+
+<DefineVar chop>
+NEXT-MSG-BUTTON-LABEL
+n&aelig;ste&gt;
+</DefineVar>
+
+<DefineVar chop>
+DATE-IDX-BUTTON-LABEL
+Dato
+</DefineVar>
+
+<DefineVar chop>
+THREAD-IDX-BUTTON-LABEL
+Tr&aring;d
+</DefineVar>
+
+<DefineVar chop>
+ORIGINAL-MSG-LINK-LABEL
+Original
+</DefineVar>
+
+<DefineVar chop>
+BOOKMARK-LINK-LABEL
+Bookmark&nbsp;Link
+</DefineVar>
+
+<DefineVar chop>
+PREV-IN-THREAD-LABEL
+&lt;Forrige&nbsp;i&nbsp;Tr&aring;d
+</DefineVar>
+
+<DefineVar chop>
+NEXT-IN-THREAD-LABEL
+N&aelig;ste&nbsp;i&nbsp;Tr&aring;d&gt;
+</DefineVar>
+
+<DefineVar chop>
+CURRENT-THREAD-LABEL
+Nuv&aelig;rende&nbsp;Tr&aring;d
+</DefineVar>
+
+<DefineVar chop>
+MORE-SUBJECT-LABEL
+Flere&nbsp;med&nbsp;dette&nbsp;emne...
+</DefineVar>
+
+<DefineVar chop>
+PREV-BY-DATE-LABEL
+Forrige&nbsp;i&nbsp;Dator&aelig;kkef&oslash;lge
+</DefineVar>
+
+<DefineVar chop>
+NEXT-BY-DATE-LABEL
+N&aelig;ste&nbsp;i&nbsp;Dator&aelig;kkef&oslash;lge
+</DefineVar>
+
+<DefineVar chop>
+PREV-BY-THREAD-LABEL
+Forrige&nbsp;i&nbsp;Tr&aring;dr&aelig;kkef&oslash;lge
+</DefineVar>
+
+<DefineVar chop>
+NEXT-BY-THREAD-LABEL
+N&aelig;ste&nbsp;i&nbsp;Tr&aring;dr&aelig;kkef&oslash;lge
+</DefineVar>
+
+<DefineVar chop>
+INDEXES-LABEL
+Indekser
+</DefineVar>
+
diff --git a/lib/common.mrc.en b/lib/common.mrc.en
new file mode 100644 (file)
index 0000000..46f6626
--- /dev/null
@@ -0,0 +1,122 @@
+<!-- $Id: common.mrc.en.in.dist,v 1.1 2003/08/09 18:05:12 ehood Exp $  -->
+<!-- ================================================================== -->
+<!--   Description:
+         English (en) locale settings for common.mrc.
+  -->
+<!-- ================================================================== -->
+
+<!-- Variable for defining any <meta http-equiv> tags. -->
+<DefineVar chop>
+HTTP-EQUIV
+</DefineVar>
+
+<DefineVar chop>
+PREV-PERIOD-LABEL
+Prev&nbsp;Period
+</DefineVar>
+
+<DefineVar chop>
+NEXT-PERIOD-LABEL
+Next&nbsp;Period
+</DefineVar>
+
+<DefineVar chop>
+ADV-SEARCH-LABEL
+Advanced
+</DefineVar>
+
+<DefineVar chop>
+THREAD-IDX-LABEL
+Thread&nbsp;Index
+</DefineVar>
+
+<DefineVar chop>
+DATE-IDX-LABEL
+Date&nbsp;Index
+</DefineVar>
+
+<DefineVar chop>
+TOP-LINK-LABEL
+Top
+</DefineVar>
+
+<DefineVar chop>
+ALL-LISTS-LABEL
+All&nbsp;Lists
+</DefineVar>
+
+<DefineVar chop>
+PREV-MSG-BUTTON-LABEL
+&lt;prev
+</DefineVar>
+
+<DefineVar chop>
+NEXT-MSG-BUTTON-LABEL
+next&gt;
+</DefineVar>
+
+<DefineVar chop>
+DATE-IDX-BUTTON-LABEL
+Date
+</DefineVar>
+
+<DefineVar chop>
+THREAD-IDX-BUTTON-LABEL
+Thread
+</DefineVar>
+
+<DefineVar chop>
+ORIGINAL-MSG-LINK-LABEL
+Original
+</DefineVar>
+
+<DefineVar chop>
+BOOKMARK-LINK-LABEL
+Permanent&nbsp;Link
+</DefineVar>
+
+<DefineVar chop>
+PREV-IN-THREAD-LABEL
+&lt;Prev&nbsp;in&nbsp;Thread
+</DefineVar>
+
+<DefineVar chop>
+NEXT-IN-THREAD-LABEL
+Next&nbsp;in&nbsp;Thread&gt;
+</DefineVar>
+
+<DefineVar chop>
+CURRENT-THREAD-LABEL
+Current&nbsp;Thread
+</DefineVar>
+
+<DefineVar chop>
+MORE-SUBJECT-LABEL
+More&nbsp;with&nbsp;this&nbsp;subject...
+</DefineVar>
+
+<DefineVar chop>
+PREV-BY-DATE-LABEL
+Previous&nbsp;by&nbsp;Date
+</DefineVar>
+
+<DefineVar chop>
+NEXT-BY-DATE-LABEL
+Next&nbsp;by&nbsp;Date
+</DefineVar>
+
+<DefineVar chop>
+PREV-BY-THREAD-LABEL
+Previous&nbsp;by&nbsp;Thread
+</DefineVar>
+
+<DefineVar chop>
+NEXT-BY-THREAD-LABEL
+Next&nbsp;by&nbsp;Thread
+</DefineVar>
+
+<DefineVar chop>
+INDEXES-LABEL
+Indexes
+</DefineVar>
+
diff --git a/lib/common.mrc.en.in b/lib/common.mrc.en.in
new file mode 100644 (file)
index 0000000..46f6626
--- /dev/null
@@ -0,0 +1,122 @@
+<!-- $Id: common.mrc.en.in.dist,v 1.1 2003/08/09 18:05:12 ehood Exp $  -->
+<!-- ================================================================== -->
+<!--   Description:
+         English (en) locale settings for common.mrc.
+  -->
+<!-- ================================================================== -->
+
+<!-- Variable for defining any <meta http-equiv> tags. -->
+<DefineVar chop>
+HTTP-EQUIV
+</DefineVar>
+
+<DefineVar chop>
+PREV-PERIOD-LABEL
+Prev&nbsp;Period
+</DefineVar>
+
+<DefineVar chop>
+NEXT-PERIOD-LABEL
+Next&nbsp;Period
+</DefineVar>
+
+<DefineVar chop>
+ADV-SEARCH-LABEL
+Advanced
+</DefineVar>
+
+<DefineVar chop>
+THREAD-IDX-LABEL
+Thread&nbsp;Index
+</DefineVar>
+
+<DefineVar chop>
+DATE-IDX-LABEL
+Date&nbsp;Index
+</DefineVar>
+
+<DefineVar chop>
+TOP-LINK-LABEL
+Top
+</DefineVar>
+
+<DefineVar chop>
+ALL-LISTS-LABEL
+All&nbsp;Lists
+</DefineVar>
+
+<DefineVar chop>
+PREV-MSG-BUTTON-LABEL
+&lt;prev
+</DefineVar>
+
+<DefineVar chop>
+NEXT-MSG-BUTTON-LABEL
+next&gt;
+</DefineVar>
+
+<DefineVar chop>
+DATE-IDX-BUTTON-LABEL
+Date
+</DefineVar>
+
+<DefineVar chop>
+THREAD-IDX-BUTTON-LABEL
+Thread
+</DefineVar>
+
+<DefineVar chop>
+ORIGINAL-MSG-LINK-LABEL
+Original
+</DefineVar>
+
+<DefineVar chop>
+BOOKMARK-LINK-LABEL
+Permanent&nbsp;Link
+</DefineVar>
+
+<DefineVar chop>
+PREV-IN-THREAD-LABEL
+&lt;Prev&nbsp;in&nbsp;Thread
+</DefineVar>
+
+<DefineVar chop>
+NEXT-IN-THREAD-LABEL
+Next&nbsp;in&nbsp;Thread&gt;
+</DefineVar>
+
+<DefineVar chop>
+CURRENT-THREAD-LABEL
+Current&nbsp;Thread
+</DefineVar>
+
+<DefineVar chop>
+MORE-SUBJECT-LABEL
+More&nbsp;with&nbsp;this&nbsp;subject...
+</DefineVar>
+
+<DefineVar chop>
+PREV-BY-DATE-LABEL
+Previous&nbsp;by&nbsp;Date
+</DefineVar>
+
+<DefineVar chop>
+NEXT-BY-DATE-LABEL
+Next&nbsp;by&nbsp;Date
+</DefineVar>
+
+<DefineVar chop>
+PREV-BY-THREAD-LABEL
+Previous&nbsp;by&nbsp;Thread
+</DefineVar>
+
+<DefineVar chop>
+NEXT-BY-THREAD-LABEL
+Next&nbsp;by&nbsp;Thread
+</DefineVar>
+
+<DefineVar chop>
+INDEXES-LABEL
+Indexes
+</DefineVar>
+
diff --git a/lib/common.mrc.en.in.dist b/lib/common.mrc.en.in.dist
new file mode 100644 (file)
index 0000000..46f6626
--- /dev/null
@@ -0,0 +1,122 @@
+<!-- $Id: common.mrc.en.in.dist,v 1.1 2003/08/09 18:05:12 ehood Exp $  -->
+<!-- ================================================================== -->
+<!--   Description:
+         English (en) locale settings for common.mrc.
+  -->
+<!-- ================================================================== -->
+
+<!-- Variable for defining any <meta http-equiv> tags. -->
+<DefineVar chop>
+HTTP-EQUIV
+</DefineVar>
+
+<DefineVar chop>
+PREV-PERIOD-LABEL
+Prev&nbsp;Period
+</DefineVar>
+
+<DefineVar chop>
+NEXT-PERIOD-LABEL
+Next&nbsp;Period
+</DefineVar>
+
+<DefineVar chop>
+ADV-SEARCH-LABEL
+Advanced
+</DefineVar>
+
+<DefineVar chop>
+THREAD-IDX-LABEL
+Thread&nbsp;Index
+</DefineVar>
+
+<DefineVar chop>
+DATE-IDX-LABEL
+Date&nbsp;Index
+</DefineVar>
+
+<DefineVar chop>
+TOP-LINK-LABEL
+Top
+</DefineVar>
+
+<DefineVar chop>
+ALL-LISTS-LABEL
+All&nbsp;Lists
+</DefineVar>
+
+<DefineVar chop>
+PREV-MSG-BUTTON-LABEL
+&lt;prev
+</DefineVar>
+
+<DefineVar chop>
+NEXT-MSG-BUTTON-LABEL
+next&gt;
+</DefineVar>
+
+<DefineVar chop>
+DATE-IDX-BUTTON-LABEL
+Date
+</DefineVar>
+
+<DefineVar chop>
+THREAD-IDX-BUTTON-LABEL
+Thread
+</DefineVar>
+
+<DefineVar chop>
+ORIGINAL-MSG-LINK-LABEL
+Original
+</DefineVar>
+
+<DefineVar chop>
+BOOKMARK-LINK-LABEL
+Permanent&nbsp;Link
+</DefineVar>
+
+<DefineVar chop>
+PREV-IN-THREAD-LABEL
+&lt;Prev&nbsp;in&nbsp;Thread
+</DefineVar>
+
+<DefineVar chop>
+NEXT-IN-THREAD-LABEL
+Next&nbsp;in&nbsp;Thread&gt;
+</DefineVar>
+
+<DefineVar chop>
+CURRENT-THREAD-LABEL
+Current&nbsp;Thread
+</DefineVar>
+
+<DefineVar chop>
+MORE-SUBJECT-LABEL
+More&nbsp;with&nbsp;this&nbsp;subject...
+</DefineVar>
+
+<DefineVar chop>
+PREV-BY-DATE-LABEL
+Previous&nbsp;by&nbsp;Date
+</DefineVar>
+
+<DefineVar chop>
+NEXT-BY-DATE-LABEL
+Next&nbsp;by&nbsp;Date
+</DefineVar>
+
+<DefineVar chop>
+PREV-BY-THREAD-LABEL
+Previous&nbsp;by&nbsp;Thread
+</DefineVar>
+
+<DefineVar chop>
+NEXT-BY-THREAD-LABEL
+Next&nbsp;by&nbsp;Thread
+</DefineVar>
+
+<DefineVar chop>
+INDEXES-LABEL
+Indexes
+</DefineVar>
+
diff --git a/lib/common.mrc.in b/lib/common.mrc.in
new file mode 100644 (file)
index 0000000..adf9af8
--- /dev/null
@@ -0,0 +1,514 @@
+<!-- $Id: common.mrc.in.dist,v 1.17 2002/07/23 05:51:46 ehood Exp $  -->
+<!-- ================================================================== -->
+<!--   MHonArc Resource File for Mail Archives                         -->
+<!--   Description:
+         This is the main resource file for the mail archives.
+         it contains all the common formatting characteristics
+         used across archives.  Archive specific settings can
+         be set via command-line options the bin/web-archive
+         program.
+  -->
+<!-- ================================================================== -->
+
+<!-- CONLEN should only be set of Content-Length is accurate for the
+     system.  Mail delivery under Solaris sets it properly.
+     XXX: Should probably move this to command-line invocation.
+  -->
+<ConLen>
+
+<!-- Added POSIXSTRFTIME so that we can print out timezone specs for
+     archive generation (RT #244804) - baughj, 2005.06.16
+  -->
+<POSIXSTRFTIME>
+
+<!-- ================================================================== -->
+<!--   Custom Variable Defintions                                      -->
+<!-- ================================================================== -->
+<!--
+       The following variables defined by the web-archive program
+       and not here:
+         $ALL-LISTS-URL$       URL to all archive listing.
+         $CUR-PERIOD$          Current period in YYYY or YYYY-MM format.
+         $LIST-NAME$           Archive/list name and search index name.
+         $LIST-TITLE$          Archive/list title: generally equals
+                               $LIST-NAME$, but can be different like for
+                               CVS commit archives.
+         $PNAV-CGI$            URL to period navigation cgi program.
+         $SEARCH-CGI$          URL to search cgi program.
+  -->
+
+<SPAMMODE>
+
+<AddressModifyCode>
+$_ = 'address@hidden';
+</AddressModifyCode>
+
+<!-- Variables representing period links for index pages.
+  -->
+<DefineVar chop>
+PREV-PERIOD-LABEL
+Prev&nbsp;Period
+</DefineVar>
+
+<DefineVar chop>
+NEXT-PERIOD-LABEL
+Next&nbsp;Period
+</DefineVar>
+
+<DefineVar chop>
+PREV-PERIOD-LINK
+[<a href="$PNAV-CGI$?a=$LIST-NAME$&amp;m=$CUR-PERIOD$&amp;d=prev">$PREV-PERIOD-LABEL$</a>]
+</DefineVar>
+
+<DefineVar chop>
+NEXT-PERIOD-LINK
+[<a href="$PNAV-CGI$?a=$LIST-NAME$&amp;m=$CUR-PERIOD$&amp;d=next">$NEXT-PERIOD-LABEL$</a>]
+</DefineVar>
+
+<DefineVar chop>
+TPREV-PERIOD-LINK
+[<a href="$PNAV-CGI$?a=$LIST-NAME$&amp;m=$CUR-PERIOD$&amp;d=prev&amp;t=t">$PREV-PERIOD-LABEL$</a>]
+</DefineVar>
+
+<DefineVar chop>
+TNEXT-PERIOD-LINK
+[<a href="$PNAV-CGI$?a=$LIST-NAME$&amp;m=$CUR-PERIOD$&amp;d=next&amp;t=t">$NEXT-PERIOD-LABEL$</a>]
+</DefineVar>
+
+<!-- Variable representing markup of search form.
+  -->
+<DefineVar>
+SEARCH-FORM
+<form method="get" action="$SEARCH-CGI$">
+<input type="text" name="query" size="30">
+<input type="submit" name="submit" value="Search">
+<input type="hidden" name="idxname" value="$LIST-NAME$">
+<a href="$SEARCH-CGI$?idxname=$LIST-NAME$">Advanced</a>
+</form>
+</DefineVar>
+
+<DefineVar chop>
+THREAD-IDX-LINK
+[<b><a href="$TIDXFNAME$">Thread&nbsp;Index</a></b>]
+</DefineVar>
+
+<DefineVar chop>
+DATE-IDX-LINK
+[<b><a href="$IDXFNAME$">Date&nbsp;Index</a></b>]
+</DefineVar>
+
+<!-- Main index page nav links if MULTIPG is ever used.
+     This variable could be reference by list-specific resource files
+     if MULTIPG is activated.
+  -->
+<DefineVar>
+MAIN-PAGE-LINKS
+<hr size=1 noshade>
+<table width="100%" border=0 cellpadding=0 cellspacing=0>
+<tr align="center">
+<th colspan=4><small>Page $PAGENUM$ of $NUMOFPAGES$</small></th>
+<tr>
+<td align="left"
+><small>[<a href="$PG(FIRST)$">First&nbsp;Page</a>]</small></td>
+<td align="right"><small>$PGLINK(PREV)$</small></td>
+<td align="left"><small>$PGLINK(NEXT)$</small></td>
+<td align="right"><small>[<a href="$PG(LAST)$">Last&nbsp;Page</a>]</small></td>
+</tr>
+</table>
+<hr size=1 noshade>
+</DefineVar>
+
+<!-- Thread index page nav links if MULTIPG ever used.
+     This variable could be reference by list-specific resource files
+     if MULTIPG is activated.
+  -->
+<DefineVar>
+THREAD-PAGE-LINKS
+<hr size=1 noshade>
+<table width="100%" border=0 cellpadding=0 cellspacing=0>
+<tr align="center">
+<th colspan=4><small>Page $PAGENUM$ of $NUMOFPAGES$</small></th>
+<tr>
+<td align="left"
+><small>[<a href="$PG(TFIRST)$">First&nbsp;Page</a>]</small></td>
+<td align="right"><small>$PGLINK(TPREV)$</small></td>
+<td align="left"><small>$PGLINK(TNEXT)$</small></td>
+<td align="right"><small>[<a href="$PG(TLAST)$">Last&nbsp;Page</a>]</small></td>
+</tr>
+</table>
+<hr size=1 noshade>
+</DefineVar>
+
+<!-- ================================================================== -->
+<!--   General Resources                                               -->
+<!-- ================================================================== -->
+
+<!-- Since we specify resource settings everytime, no need to save
+     them in archive database.
+  -->
+<NoSaveResources>
+
+<!-- Arguments to content filters.
+     CAUTION: Verify options against security concerns and make
+             any changes accordingly.
+  -->
+<MIMEArgs override>
+m2h_external::filter;  inline useicon
+m2h_text_plain::filter;        attachcheck quote maxwidth=80
+m2h_text_html::filter; notitle
+</MIMEArgs>
+
+<!-- Stricter MSGSEP.  Not important if CONLEN active.
+     XXX: Should this strict setting exist or should we just use
+         MHonArc's default value for MSGSEP as the default?
+  -->
+<MsgSep>
+^From \S+\s+\S+\s+\S+\s+\d+\s+\d+:\d+:\d+\s+\d+
+</MsgSep>
+
+<!-- Icons settings copied from documentation.  Works with
+     Apache server.  Icons not used in index, but attachment
+     filter is given useicon argument.  If Apache is not used,
+     or the icon URLs are different, this resource needs to
+     be changed or the useicon argument removed from
+     m2h_external::filter.
+  -->
+<Icons>
+application/*;[20x22]/icons/generic.png
+application/msword;[20x22]/icons/layout.png
+application/postscript;[20x22]/icons/ps.png
+application/rtf;[20x22]/icons/layout.png
+application/x-csh;[20x22]/icons/script.png
+application/x-dvi;[20x22]/icons/dvi.png
+application/x-gtar;[20x22]/icons/tar.png
+application/x-gzip;[20x22]/icons/compressed.png
+application/x-ksh;[20x22]/icons/script.png
+application/x-latex;[20x22]/icons/tex.png
+application/octet-stream;[20x22]/icons/binary.png
+application/x-patch;[20x22]/icons/patch.png
+application/pdf;[20x22]/icons/pdf.png
+application/x-script;[20x22]/icons/script.png
+application/x-sh;[20x22]/icons/script.png
+application/x-tar;[20x22]/icons/tar.png
+application/x-tex;[20x22]/icons/tex.png
+application/x-zip-compressed;[20x22]/icons/compressed.png
+application/zip;[20x22]/icons/compressed.png
+audio/*;[20x22]/icons/sound1.png
+chemical/*;[20x22]/icons/sphere2.png
+image/*;[20x22]/icons/image2.png
+message/external-body;[20x22]/icons/link.png
+multipart/*;[20x22]/icons/layout.png
+text/*;[20x22]/icons/text.png
+video/*;[20x22]/icons/movie.png
+*/*;[20x22]/icons/generic.png
+</Icons>
+
+<!-- ================================================================== -->
+<!--   Main Index                                                      -->
+<!-- ================================================================== -->
+
+<!-- Set sorting order of main index pages: Reverse chronological.  -->
+<Sort>
+<Reverse>
+
+<!-- Show dates in local time. -->
+<UseLocalTime>
+
+<!-- Make date index the default page for the archive. -->
+<IdxFName>
+index.html
+</IdxFName>
+
+<MsgLocalDateFmt>
+%B %d, %Y
+</MsgLocalDateFmt>
+
+<IdxPgBegin>
+<!doctype html public "-//W3C//DTD HTML//EN">
+<html>
+<head>
+<title>$IDXTITLE$</title>
+</head>
+<body>
+<center>
+<em>Archives are refreshed every 30 minutes - for details, please visit
+<a href="http://lists.gnu.org/archive/html/">the main index</a>.</em>
+<br>
+You can also <a href="ftp://lists.gnu.org/$LIST-NAME$/">download the archives in mbox format</a>.</em>
+<p>
+<table border=0 cellspacing=2 cellpadding=0 bgcolor="#000000">
+<tr><td><table border=0 bgcolor="#FFFFCC">
+<tr><td><big><big><b>$IDXTITLE$</b></big></big></td></tr></table></tr></table>
+<small><nobr>$THREAD-IDX-LINK$[<a href="../"
+>Top</a>][<a href="$ALL-LISTS-URL$">All Lists</a>]</nobr
+></small>
+$SEARCH-FORM$
+</center>
+</IdxPgBegin>
+
+<ListBegin>
+<table width="100%">
+<tr valign="bottom">
+<td align="left"><nobr>$PREV-PERIOD-LINK$</nobr></td>
+<td align="center"><small
+>Last Modified: $MSGLOCALDATE(LAST;%a %b %d %Y %H:%M:%S %z)$<br>
+Messages in reverse chronological order</small></td>
+<td align="right"><nobr>$NEXT-PERIOD-LINK$</nobr></td>
+</tr>
+</table>
+<hr size="1" noshade>
+<ul>
+</ListBegin>
+
+<!-- Date listing is done in day groups with the each day listed in bold
+     and messages for that date listed under it.
+  -->
+<DayBegin>
+<li><strong>$MSGLOCALDATE$</strong>
+<ul>
+</DayBegin>
+
+<DayEnd>
+</li></ul>
+</DayEnd>
+
+<LITemplate>
+<li>$SUBJECT$, <i>$FROMNAME$</i>, <tt>$MSGLOCALDATE(CUR;%H:%M)$</tt></li>
+</LITemplate>
+
+<ListEnd>
+</ul>
+<hr size="1" noshade>
+<table width="100%">
+<tr valign="bottom">
+<td align="left"><nobr>$PREV-PERIOD-LINK$</nobr></td>
+<td align="right"><nobr>$NEXT-PERIOD-LINK$</nobr></td>
+</tr>
+</table>
+</ListEnd>
+
+<!-- ================================================================== -->
+<!--   Thread Index                                                    -->
+<!-- ================================================================== -->
+
+<!-- Reverse thread order. -->
+<TReverse>
+
+<!-- Show no indicator of subject-based thread detection since most
+     people do not care.
+     NOTE: The blank line is important!
+  -->
+<TSubjectBeg>
+
+</TSubjectBeg>
+
+<TIdxPgBegin>
+<!doctype html public "-//W3C//DTD HTML//EN">
+<html>
+<head>
+<title>$TIDXTITLE$</title>
+</head>
+<body>
+<center>
+<em>Archives are refreshed every 30 minutes - for details, please visit <a
+href="http://lists.gnu.org/archive/html/">the main index</a>.</em>
+<br>
+You can also <a href="ftp://lists.gnu.org/$LIST-NAME$/">download the archives in mbox format</a>.</em>
+<p>
+<table border=0 cellspacing=2 cellpadding=0 bgcolor="#000000">
+<tr><td><table border=0 bgcolor="#FFFFCC">
+<tr><td><big><big><b>$TIDXTITLE$</b></big></big></td></tr></table></tr></table>
+<small><nobr
+>$DATE-IDX-LINK$[<a href="../"
+>Top</a>][<a href="$ALL-LISTS-URL$">All Lists</a>]</nobr
+></small>
+$SEARCH-FORM$
+</center>
+</TIdxPgBegin>
+
+<THead>
+<table width="100%">
+<tr valign="bottom">
+<td align="left"><nobr>$TPREV-PERIOD-LINK$</nobr></td>
+<td align="center"><small
+>Last Modified: $MSGLOCALDATE(LAST;%a %b %d %Y %H:%M:%S %z)$<br>
+Threads in reverse chronological order</small></td>
+<td align="right"><nobr>$TNEXT-PERIOD-LINK$</nobr></td>
+</tr>
+</table>
+<hr size="1" noshade>
+<ul>
+</THead>
+
+<TTopBegin>
+<li><b>$SUBJECT$</b>, <i>$FROMNAME$</i>, <tt>$MSGLOCALDATE(CUR;%Y/%m/%d)$</tt>
+</TTopBegin>
+
+<TLiTxt>
+<li><b>$SUBJECT$</b>, <i>$FROMNAME$</i>, <tt>$MSGLOCALDATE(CUR;%Y/%m/%d)$</tt>
+</TLiTxt>
+
+<TSingleTxt>
+<li><b>$SUBJECT$</b>, <i>$FROMNAME$</i>, <tt>$MSGLOCALDATE(CUR;%Y/%m/%d)$</tt>
+</TSingleTxt>
+
+<TFoot>
+</ul>
+<hr size="1" noshade>
+<table width="100%">
+<tr valign="bottom">
+<td align="left"><nobr>$TPREV-PERIOD-LINK$</nobr></td>
+<td align="right"><nobr>$TNEXT-PERIOD-LINK$</nobr></td>
+</tr>
+</table>
+</TFoot>
+
+<!-- ================================================================== -->
+<!--   Message Pages                                                   -->
+<!-- ================================================================== -->
+
+<ModTime>
+
+<!-- We clip the subject title to 72 characters to prevent ugly pages
+     due to very long subject lines.  The full subject text will still
+     be shown in the formatted message header.
+  -->
+<MsgPgBegin>
+<!doctype html public "-//W3C//DTD HTML//EN">
+<html>
+<head>
+<title>$SUBJECTNA:72$</title>
+</head>
+<body>
+<center>
+<table border=0 cellspacing=2 cellpadding=0 bgcolor="#000000">
+<tr><td><table border=0 bgcolor="#FFFFCC">
+<tr><td><big><b>$LIST-TITLE$</b></big></td></tr></table></tr></table>
+<small><nobr>[<a href="../"
+>Top</a>][<a href="$ALL-LISTS-URL$">All Lists</a>]</small></nobr>
+$SEARCH-FORM$
+</center>
+</MsgPgBegin>
+
+<TopLinks>
+<hr>
+$BUTTON(PREV)$$BUTTON(NEXT)$$BUTTON(TPREV)$$BUTTON(TNEXT)$[<a
+href="$IDXFNAME$#$MSGNUM$">Date Index</a>][<a
+href="$TIDXFNAME$#$MSGNUM$">Thread Index</a>]
+</TopLinks>
+
+<SubjectHeader>
+<h2>$SUBJECTNA:72$</h2>
+<hr>
+<table border=0>
+<tbody>
+<tr>
+<td align="right" valign="top">
+<b>From</b>: </td>
+<td align="left">
+$FROMNAME$</td>
+</tr>
+</SubjectHeader>
+
+<!-- Format message header in a table. -->
+
+<FieldOrder>
+subject
+date
+user-agent
+</FieldOrder>
+
+<Fieldsbeg>
+
+</FieldsBeg>
+
+<LabelBeg>
+<tr>
+<td align="right" valign="top">
+</LabelBeg>
+
+<LabelEnd>
+: </td>
+</LabelEnd>
+
+<FldBeg>
+<td align="left">
+</FldBeg>
+
+<FldEnd>
+</td>
+</tr>
+</FldEnd>
+
+<FieldsEnd>
+</tbody>
+</table>
+</FieldsEnd>
+
+<LabelStyles>
+-default-:b
+</LabelStyles>
+
+<!-- Disable explicit follow-up/references section and use $TSLICE$ instead.
+  -->
+<NoFolRefs>
+
+<!-- Set TSLICE resource to represent default $TSLICE$ behavior and
+     mainly to set the maximum message page update ranges when messages
+     are added to the archive.  I.e.  The before and after values
+     should represent the largest before and after values we will use
+     with $TSLICE$.
+  -->
+<TSlice>
+10:10:1
+</TSlice>
+
+<!-- We set up slice formatting so current message in thread is not
+     hyperlinked and "greyed out".  We could probably use CSS to
+     do this, but <font> seems to still work with most popular
+     graphical browsers.
+  -->
+<TSliceBeg>
+<ul>
+</TSliceBeg>
+
+<TSliceTopBeginCur>
+<li><font color="#666666"><strong>$SUBJECTNA$</strong>,
+<em>$FROMNAME$</em></font>&nbsp;<b>&lt;=</b>
+</TSliceTopBeginCur>
+
+<TSliceLiTxtCur>
+<li><font color="#666666"><strong>$SUBJECTNA$</strong>,
+<em>$FROMNAME$</em></font>&nbsp;<b>&lt;=</b>
+</TSliceLiTxtCur>
+
+<TSliceSingleTxtCur>
+<li><font color="#666666"><strong>$SUBJECTNA$</strong>,
+<em>$FROMNAME$</em></font>&nbsp;<b>&lt;=</b>
+</TSliceSingleTxtCur>
+
+<TSliceEnd>
+</ul>
+</TSliceEnd>
+
+<!-- Modify end of message body to include thread slice.  We also
+     include convenient next/prev-in-thread links since scanning
+     slice can be inconvenient for simple thread reading.
+  -->
+<MsgBodyEnd>
+<hr>
+<form method="post" action="/mp/yyz.py" enctype="multipart/form-data">
+<input type="hidden" name="a" value="$FROMADDRNAME$">
+<input type="hidden" name="b" value="$SUBJECTNA$">
+<input type="hidden" name="d" value="$MSGID$">
+<input type="hidden" name="c" value="$FROMADDRDOMAIN$">
+<center>reply via email to<br><input type="submit" value=" $FROMNAME$ "></center>
+</form>
+<hr>
+<table width="100%">
+<tr><td align="left">$BUTTON(TPREVIN)$</td>
+<td align="center"><b>Current Thread</b></td>
+<td align="right">$BUTTON(TNEXTIN)$</td></tr></table>
+$TSLICE$
+<hr>
+</MsgBodyEnd>
diff --git a/lib/common.mrc.in.dist b/lib/common.mrc.in.dist
new file mode 100644 (file)
index 0000000..f019aa9
--- /dev/null
@@ -0,0 +1,796 @@
+<!-- $Id: common.mrc.in.dist,v 1.22 2003/07/16 00:49:58 ehood Exp $  -->
+<!-- ================================================================== -->
+<!--   MHonArc resource file for mharc mail archives                   -->
+<!--   Description:
+         This is the main resource file for the mail archives.
+         it contains all the common formatting characteristics
+         used across archives.  Archive specific settings can
+         be set via command-line options the bin/web-archive
+         program.
+  -->
+<!-- ================================================================== -->
+
+<!-- ================================================================== -->
+<!--   Custom Variable Defintions                                      -->
+<!-- ================================================================== -->
+<!--
+       The following variables defined by the web-archive program
+       and not here:
+         $ALL-LISTS-URL$       URL to all archive listing.
+         $CUR-PERIOD$          Current period in YYYY or YYYY-MM format.
+         $LIST-NAME$           Archive/list name and search index name.
+         $LIST-TITLE$          Archive/list title: generally equals
+                               $LIST-NAME$, but can be different like for
+                               CVS commit archives.
+         $PNAV-CGI$            URL to period navigation cgi program.
+         $SEARCH-CGI$          URL to search cgi program.
+  -->
+
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+<!--  Custom Text Variables                                             -->
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+<!--   The following variable can be redefined to allow for
+       language variations.
+  -->
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+
+<!-- Variable for defining any <meta http-equiv> tags. -->
+<DefineVar chop>
+HTTP-EQUIV
+</DefineVar>
+
+<DefineVar chop>
+PREV-PERIOD-LABEL
+Prev&nbsp;Period
+</DefineVar>
+
+<DefineVar chop>
+NEXT-PERIOD-LABEL
+Next&nbsp;Period
+</DefineVar>
+
+<DefineVar chop>
+ADV-SEARCH-LABEL
+Advanced
+</DefineVar>
+
+<DefineVar chop>
+THREAD-IDX-LABEL
+Thread&nbsp;Index
+</DefineVar>
+
+<DefineVar chop>
+DATE-IDX-LABEL
+Date&nbsp;Index
+</DefineVar>
+
+<DefineVar chop>
+TOP-LINK-LABEL
+Top
+</DefineVar>
+
+<DefineVar chop>
+ALL-LISTS-LABEL
+All&nbsp;Lists
+</DefineVar>
+
+<DefineVar chop>
+PREV-MSG-BUTTON-LABEL
+&lt;prev
+</DefineVar>
+
+<DefineVar chop>
+NEXT-MSG-BUTTON-LABEL
+next&gt;
+</DefineVar>
+
+<DefineVar chop>
+DATE-IDX-BUTTON-LABEL
+Date
+</DefineVar>
+
+<DefineVar chop>
+THREAD-IDX-BUTTON-LABEL
+Thread
+</DefineVar>
+
+<DefineVar chop>
+ORIGINAL-MSG-LINK-LABEL
+Original
+</DefineVar>
+
+<DefineVar chop>
+BOOKMARK-LINK-LABEL
+Permanent&nbsp;Link
+</DefineVar>
+
+<DefineVar chop>
+PREV-IN-THREAD-LABEL
+&lt;Prev&nbsp;in&nbsp;Thread
+</DefineVar>
+
+<DefineVar chop>
+NEXT-IN-THREAD-LABEL
+Next&nbsp;in&nbsp;Thread&gt;
+</DefineVar>
+
+<DefineVar chop>
+CURRENT-THREAD-LABEL
+Current&nbsp;Thread
+</DefineVar>
+
+<DefineVar chop>
+MORE-SUBJECT-LABEL
+More&nbsp;with&nbsp;this&nbsp;subject...
+</DefineVar>
+
+<DefineVar chop>
+PREV-BY-DATE-LABEL
+Previous&nbsp;by&nbsp;Date
+</DefineVar>
+
+<DefineVar chop>
+NEXT-BY-DATE-LABEL
+Next&nbsp;by&nbsp;Date
+</DefineVar>
+
+<DefineVar chop>
+PREV-BY-THREAD-LABEL
+Previous&nbsp;by&nbsp;Thread
+</DefineVar>
+
+<DefineVar chop>
+NEXT-BY-THREAD-LABEL
+Next&nbsp;by&nbsp;Thread
+</DefineVar>
+
+<DefineVar chop>
+INDEXES-LABEL
+Indexes
+</DefineVar>
+
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+<!--  Links and Buttons                                                 -->
+<!-- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -->
+
+<DefineVar chop>
+STYLESHEET-LINK
+<link rel="stylesheet" type="text/css" href="@@HTML_URL@@/stylesheet.css">
+</DefineVar>
+
+<DefineVar chop>
+PREV-PERIOD-LINK
+&lt;<a href="$PNAV-CGI$?a=$LIST-NAME$&amp;m=$CUR-PERIOD$&amp;d=prev">$PREV-PERIOD-LABEL$</a>]
+</DefineVar>
+
+<DefineVar chop>
+NEXT-PERIOD-LINK
+[<a href="$PNAV-CGI$?a=$LIST-NAME$&amp;m=$CUR-PERIOD$&amp;d=next">$NEXT-PERIOD-LABEL$</a>&gt;
+</DefineVar>
+
+<DefineVar chop>
+TPREV-PERIOD-LINK
+&lt;<a href="$PNAV-CGI$?a=$LIST-NAME$&amp;m=$CUR-PERIOD$&amp;d=prev&amp;t=t">$PREV-PERIOD-LABEL$</a>]
+</DefineVar>
+
+<DefineVar chop>
+TNEXT-PERIOD-LINK
+[<a href="$PNAV-CGI$?a=$LIST-NAME$&amp;m=$CUR-PERIOD$&amp;d=next&amp;t=t">$NEXT-PERIOD-LABEL$</a>&gt;
+</DefineVar>
+
+<DefineVar chop>
+PREV-PERIOD-BUTTON
+<span class="periodLink">$PREV-PERIOD-LINK$</span>
+</DefineVar>
+
+<DefineVar chop>
+NEXT-PERIOD-BUTTON
+<span class="periodLink">$NEXT-PERIOD-LINK$</span>
+</DefineVar>
+
+<DefineVar chop>
+TPREV-PERIOD-BUTTON
+<span class="periodLink">$TPREV-PERIOD-LINK$</span>
+</DefineVar>
+
+<DefineVar chop>
+TNEXT-PERIOD-BUTTON
+<span class="periodLink">$TNEXT-PERIOD-LINK$</span>
+</DefineVar>
+
+<DefineVar chop>
+THREAD-IDX-LINK
+[<b><a href="$TIDXFNAME$">$THREAD-IDX-LABEL$</a></b>]
+</DefineVar>
+
+<DefineVar chop>
+DATE-IDX-LINK
+[<b><a href="$IDXFNAME$">$DATE-IDX-LABEL$</a></b>]
+</DefineVar>
+
+<!-- Variable representing markup of search form. -->
+<DefineVar>
+SEARCH-FORM
+<form method="get" action="$SEARCH-CGI$"
+><nobr><input type="text" name="query" size="20"
+><input type="submit" name="submit" value="Search"
+></nobr><input type="hidden" name="idxname" value="$LIST-NAME$">
+<small><nobr>[<a href="$SEARCH-CGI$?idxname=$LIST-NAME$">$ADV-SEARCH-LABEL$</a>]</nobr></small></form>
+</DefineVar>
+
+<!-- ================================================================== -->
+<!--   General Resources                                               -->
+<!-- ================================================================== -->
+
+<!-- Since we specify resource settings everytime, no need to save
+     them in archive database.
+  -->
+<NoSaveResources>
+
+<!-- We should give credit where credit is due, but the style of
+     the link does not go well with what we are trying to do here.
+  -->
+<NoDoc>
+
+<!-- Arguments to content filters.
+     CAUTION: Verify options against security concerns and make
+             any changes accordingly.
+
+     Summary of settings:
+       . Inline images if no disposition provided.
+       . Use content-type-based icons for attachments, see ICONS
+         setting below.
+       . Text/plain attachments should be saved to a separate file.
+         By default, MHonArc inlines all text/plain entities.
+       . Italicize quoted text in messages.
+       . Make sure line lengths in text messages do not exceed 80
+         characters.
+       . Suppress output of HTML document title for HTML entities.
+  -->
+<MIMEArgs override>
+m2h_external::filter;  inline useicon
+m2h_text_plain::filter;        attachcheck quote maxwidth=80
+m2h_text_html::filter; notitle
+</MIMEArgs>
+
+<!-- A little stricter MSGSEP.  Not important if CONLEN active.
+     Try to be more strict than '^From ', but not too strict to deal
+     with possible variations.
+  -->
+<MsgSep>
+^From \S+.*\d+:\d+:\d+
+</MsgSep>
+
+<!-- Icons settings copied from documentation.  Works with
+     Apache server.  Icons not used in index, but attachment
+     filter is given useicon argument.  If Apache is not used,
+     or the icon URLs are different, this resource needs to
+     be changed or the useicon argument removed from
+     m2h_external::filter.
+  -->
+<Icons>
+application/*;[20x22]/icons/generic.gif
+application/msword;[20x22]/icons/layout.gif
+application/postscript;[20x22]/icons/ps.gif
+application/rtf;[20x22]/icons/layout.gif
+application/x-csh;[20x22]/icons/script.gif
+application/x-dvi;[20x22]/icons/dvi.gif
+application/x-gtar;[20x22]/icons/tar.gif
+application/x-gzip;[20x22]/icons/compressed.gif
+application/x-ksh;[20x22]/icons/script.gif
+application/x-latex;[20x22]/icons/tex.gif
+application/octet-stream;[20x22]/icons/binary.gif
+application/x-patch;[20x22]/icons/patch.gif
+application/pdf;[20x22]/icons/pdf.gif
+application/x-script;[20x22]/icons/script.gif
+application/x-sh;[20x22]/icons/script.gif
+application/x-tar;[20x22]/icons/tar.gif
+application/x-tex;[20x22]/icons/tex.gif
+application/x-zip-compressed;[20x22]/icons/compressed.gif
+application/zip;[20x22]/icons/compressed.gif
+audio/*;[20x22]/icons/sound1.gif
+chemical/*;[20x22]/icons/sphere2.gif
+image/*;[20x22]/icons/image2.gif
+message/external-body;[20x22]/icons/link.gif
+multipart/*;[20x22]/icons/layout.gif
+text/*;[20x22]/icons/text.gif
+video/*;[20x22]/icons/movie.gif
+*/*;[20x22]/icons/generic.gif
+</Icons>
+
+<!-- ================================================================== -->
+<!--   Main Index                                                      -->
+<!-- ================================================================== -->
+
+<!-- Set sorting order of main index pages: Reverse chronological.  -->
+<Sort>
+<Reverse>
+
+<!-- Show dates in local time. -->
+<UseLocalTime>
+
+<!-- Make date index the default page for the archive. -->
+<IdxFName>
+index.html
+</IdxFName>
+
+<!-- Default date format to use for dates.  This can be overridden
+     on a per resource variable instance.
+  -->
+<MsgLocalDateFmt>
+%B %d, %Y
+</MsgLocalDateFmt>
+
+<IdxPgBegin>
+<html>
+<head>
+$HTTP-EQUIV$
+<title>$IDXTITLE$</title>
+$STYLESHEET-LINK$
+</head>
+<body>
+<center>
+<div class="idxTitle">
+<span class="listTitle"><strong>$IDXTITLE$</strong></span>
+</div>
+<div class="metaIdxNav">
+<nobr>$THREAD-IDX-LINK$<nobr>
+<nobr>[<a href="../">$TOP-LINK-LABEL$</a>]</nobr>
+<nobr>[<a href="$ALL-LISTS-URL$">$ALL-LISTS-LABEL$</a>]</nobr>
+</div>
+</center>
+</IdxPgBegin>
+
+<ListBegin>
+<table width="100%">
+<tr>
+<td align="left">$PREV-PERIOD-BUTTON$</td>
+<td align="center">$SEARCH-FORM$</td>
+<td align="right">$NEXT-PERIOD-BUTTON$</td>
+</tr>
+</table>
+<div class="dateList">
+</ListBegin>
+
+<!-- Date listing is done in day groups with the each day listed in bold
+     and messages for that date listed under it.
+  -->
+<DayBegin>
+<div class="dayGroup">
+<strong>$MSGLOCALDATE$</strong>
+<ul>
+</DayBegin>
+
+<DayEnd>
+</ul>
+</div>
+</DayEnd>
+
+<LITemplate>
+<li>$SUBJECT$, <i>$FROMNAME$</i>, <tt>$MSGLOCALDATE(CUR;%H:%M)$</tt></li>
+</LITemplate>
+
+<ListEnd>
+</div>
+<table width="100%">
+<tr valign="bottom">
+<td align="left">$PREV-PERIOD-BUTTON$</td>
+<td align="right">$NEXT-PERIOD-BUTTON$</td>
+</tr>
+</table>
+</ListEnd>
+
+<!-- ================================================================== -->
+<!--   Thread Index                                                    -->
+<!-- ================================================================== -->
+
+<!-- Reverse thread order. -->
+<TReverse>
+
+<!-- Show no indicator of subject-based thread detection since most
+     people do not care.
+     NOTE: The blank line is important!
+  -->
+<TSubjectBeg>
+
+</TSubjectBeg>
+
+<TIdxPgBegin>
+<html>
+<head>
+$HTTP-EQUIV$
+<title>$TIDXTITLE$</title>
+$STYLESHEET-LINK$
+</head>
+<body>
+<center>
+<div class="idxTitle">
+<span class="listTitle"><strong>$TIDXTITLE$</strong></span>
+</div>
+<div class="metaIdxNav">
+<nobr>$DATE-IDX-LINK$<nobr>
+<nobr>[<a href="../">$TOP-LINK-LABEL$</a>]</nobr>
+<nobr>[<a href="$ALL-LISTS-URL$">$ALL-LISTS-LABEL$</a>]</nobr>
+</div>
+</center>
+</TIdxPgBegin>
+
+<THead>
+<table width="100%">
+<tr>
+<td align="left">$TPREV-PERIOD-BUTTON$</td>
+<td align="center">$SEARCH-FORM$</td>
+<td align="right">$TNEXT-PERIOD-BUTTON$</td>
+</tr>
+</table>
+<div class="threadList">
+<ul>
+</THead>
+
+<TTopBegin>
+<li><div class="threadGroup">
+<b>$SUBJECT$</b>, <i>$FROMNAME$</i>, <tt>$MSGLOCALDATE(CUR;%Y/%m/%d)$</tt>
+</TTopBegin>
+
+<TTopEnd>
+</div></li>
+</TTopEnd>
+
+<TLiTxt>
+<li><b>$SUBJECT$</b>, <i>$FROMNAME$</i>, <tt>$MSGLOCALDATE(CUR;%Y/%m/%d)$</tt>
+</TLiTxt>
+
+<TSingleTxt>
+<li><div class="tSingle">
+<b>$SUBJECT$</b>, <i>$FROMNAME$</i>, <tt>$MSGLOCALDATE(CUR;%Y/%m/%d)$</tt>
+</div></li>
+</TSingleTxt>
+
+<TFoot>
+</ul>
+</div>
+<table width="100%">
+<tr valign="bottom">
+<td align="left">$TPREV-PERIOD-BUTTON$</td>
+<td align="right">$TNEXT-PERIOD-BUTTON$</td>
+</tr>
+</table>
+</TFoot>
+
+<!-- ================================================================== -->
+<!--   Message Pages                                                   -->
+<!-- ================================================================== -->
+
+<ModTime>
+
+<!-- We clip the subject title to 72 characters to prevent ugly pages
+     due to very long subject lines.  The full subject text will still
+     be shown in the formatted message header.
+  -->
+<MsgPgBegin>
+<html>
+<head>
+$HTTP-EQUIV$
+<title>$SUBJECTNA:72$</title>
+$STYLESHEET-LINK$
+<link rev="made" href="mailto:$FROMADDR$">
+<link rel="start" href="../">
+<link rel="contents" href="$TIDXFNAME$#$MSGNUM$">
+<link rel="index" href="$IDXFNAME$#$MSGNUM$">
+<link rel="prev" href="$MSG(TPREV)$">
+<link rel="next" href="$MSG(TNEXT)$">
+</head>
+<body>
+<center>
+<div class="msgTitle">
+<span class="listTitle"><strong>$LIST-TITLE$</strong></span>
+</div>
+<div class="metaIdxNav">
+<nobr>[<a href="../">$TOP-LINK-LABEL$</a>]</nobr>
+<nobr>[<a href="$ALL-LISTS-URL$">$ALL-LISTS-LABEL$</a>]</nobr>
+</div>
+</center>
+</MsgPgBegin>
+
+<!-- Top navigation. -->
+<PrevButton chop>
+<a href="$MSG(PREV)$">$PREV-MSG-BUTTON-LABEL$</a>
+</PrevButton>
+<NextButton chop>
+<a href="$MSG(NEXT)$">$NEXT-MSG-BUTTON-LABEL$</a>
+</NextButton>
+<TPrevButton chop>
+<a href="$MSG(TPREV)$">$PREV-MSG-BUTTON-LABEL$</a>
+</TPrevButton>
+<TNextButton chop>
+<a href="$MSG(TNEXT)$">$NEXT-MSG-BUTTON-LABEL$</a>
+</TNextButton>
+
+<PrevButtonIA chop>
+<span class="iaText">$PREV-MSG-BUTTON-LABEL$</span>
+</PrevButtonIA>
+<NextButtonIA chop>
+<span class="iaText">$NEXT-MSG-BUTTON-LABEL$</span>
+</NextButtonIA>
+<TPrevButtonIA chop>
+<span class="iaText">$PREV-MSG-BUTTON-LABEL$</span>
+</TPrevButtonIA>
+<TNextButtonIA chop>
+<span class="iaText">$NEXT-MSG-BUTTON-LABEL$</span>
+</TNextButtonIA>
+
+<!-- The following variables represent nav buttons for use in TOPLINKS
+     resource.  We use variables so TOPLINKS can be modified without
+     redefining TOPLINKS.
+  -->
+<DefineVar chop>
+TOP-DATE-NAV
+<span class="topDateNav"><nobr>$BUTTON(PREV)$&nbsp;<strong
+>[<a href="$IDXFNAME$#$MSGNUM$">$DATE-IDX-BUTTON-LABEL$</a>]</strong
+>&nbsp;$BUTTON(NEXT)$</nobr></span>
+</DefineVar>
+
+<DefineVar chop>
+TOP-THREAD-NAV
+<span class="topThreadNav"><nobr>$BUTTON(TPREV)$&nbsp;<strong
+>[<a href="$TIDXFNAME$#$MSGNUM$">$THREAD-IDX-BUTTON-LABEL$</a>]</strong
+>&nbsp;$BUTTON(TNEXT)$</nobr></span>
+</DefineVar>
+
+<DefineVar chop>
+ORIGINAL-LINK
+<span class="orgLink"
+>[<a href="$EXTRACT-CGI$?a=$LIST-NAME:U$&amp;m=$CUR-PERIOD$&amp;i=$MSGID:U$"
+>$ORIGINAL-MSG-LINK-LABEL$</a>]</span>
+</DefineVar>
+
+<DefineVar chop>
+BOOKMARK-LINK
+<span class="bookmarkLink"
+>[<a href="$MESG-CGI$?a=$LIST-NAME:U$&amp;i=$MSGID:U$"
+>$BOOKMARK-LINK-LABEL$</a>]</span>
+</DefineVar>
+
+<DefineVar chop>
+AUTHOR-LINK
+<span class="authorLink">from
+[<a href="$SEARCH-CGI$?query=%2Bfrom%3A$FROMADDR:U$&amp;idxname=$LIST-NAME$&amp;sort=date%3Alate"
+><em>$FROMNAME$</em></a>]</span>
+</DefineVar>
+
+<TopLinks>
+<center>
+<div class="topLinks">
+<table class="mainNav" width="100%">
+<tr>
+<td width="33%" align="left">$TOP-DATE-NAV$</td>
+<td width="34%" align="center">$SEARCH-FORM$</td>
+<td width="33%" align="right">$TOP-THREAD-NAV$</td>
+</tr>
+</table>
+</div>
+</center>
+</TopLinks>
+
+<!-- Make sure subject heading is not too long.
+     NOTE: We put the div tag for the message head here since the converted
+          message header cannot be modified after first conversion.
+  -->
+<SubjectHeader>
+<div class="msgSubject">
+<h2>$SUBJECTNA:72$</h2>
+<div class="msgLinks">
+<table width="100%">
+<tr valign="baseline">
+<td align="left">$AUTHOR-LINK$</td>
+<td align="right">$BOOKMARK-LINK$$ORIGINAL-LINK$</td>
+</tr></table>
+</div>
+</div>
+<div class="msgHead">
+</SubjectHeader>
+
+<!-- Format message header in a table. -->
+<Fieldsbeg>
+<table>
+</FieldsBeg>
+
+<LabelBeg>
+<tr valign="baseline">
+<th align="right">
+</LabelBeg>
+
+<LabelEnd>
+: </th>
+</LabelEnd>
+
+<FldBeg>
+<td align="left">
+</FldBeg>
+
+<FldEnd>
+</td>
+</tr>
+</FldEnd>
+
+<FieldsEnd>
+</table>
+</FieldsEnd>
+
+<LabelStyles>
+-default-:strong
+</LabelStyles>
+
+<!-- Put div markers to close message head and start message body.
+  -->
+<HeadBodySep>
+</div>
+<div class="msgBody">
+<table cellspacing="1" width="100%"><tr><td>
+</HeadBodySep>
+
+<!-- Disable explicit follow-up/references section and use $TSLICE$ instead.
+  -->
+<NoFolRefs>
+
+<!-- Set TSLICE resource to represent default $TSLICE$ behavior and
+     mainly to set the maximum message page update ranges when messages
+     are added to the archive.  I.e.  The before and after values
+     should represent the largest before and after values we will use
+     with $TSLICE$.
+  -->
+<TSlice>
+10:10:1
+</TSlice>
+
+<!-- We set up slice formatting so current message in thread is not
+     hyperlinked and "greyed out".  We could probably use CSS to
+     do this, but <font> seems to still work with most popular
+     graphical browsers.
+  -->
+<TSliceBeg>
+<ul>
+</TSliceBeg>
+
+<TSliceTopBegin>
+<li><b>$SUBJECT$</b>, <i>$FROMNAME$</i>
+</TSliceTopBegin>
+
+<TSliceLiTxt>
+<li><b>$SUBJECT$</b>, <i>$FROMNAME$</i>
+</TSliceLiTxt>
+
+<TSliceSingleTxt>
+<li><b>$SUBJECT$</b>, <i>$FROMNAME$</i>
+</TSliceSingleTxt>
+
+<TSliceTopBeginCur>
+<li><span class="sliceCur"><strong>$SUBJECTNA$</strong>,
+<em>$FROMNAME$</em>&nbsp;<b></span>&lt;=</b>
+</TSliceTopBeginCur>
+
+<TSliceLiTxtCur>
+<li><span class="sliceCur"><strong>$SUBJECTNA$</strong>,
+<em>$FROMNAME$</em>&nbsp;<b></span>&lt;=</b>
+</TSliceLiTxtCur>
+
+<TSliceSingleTxtCur>
+<li><span class="sliceCur"><strong>$SUBJECTNA$</strong>,
+<em>$FROMNAME$</em>&nbsp;<b></span>&lt;=</b>
+</TSliceSingleTxtCur>
+
+<TSliceEnd>
+</ul>
+</TSliceEnd>
+
+<TPrevInButton chop>
+<a href="$MSG(TPREVIN)$"><strong>$PREV-IN-THREAD-LABEL$</strong></a>]
+</TPrevInButton>
+<TNextInButton>
+[<a href="$MSG(TNEXTIN)$"><strong>$NEXT-IN-THREAD-LABEL$</strong></a>
+</TNextInButton>
+
+<TPrevInButtonIA chop>
+<span class="iaText"><strong>$PREV-IN-THREAD-LABEL$</strong>]</span>
+</TPrevInButtonIA>
+<TNextInButtonIA chop>
+<span class="iaText">[<strong>$NEXT-IN-THREAD-LABEL$</strong></span>
+</TNextInButtonIA>
+
+<!-- The TSLICE-LISTING variable represents the thread slice listing
+     at the bottom of message pages.  If threading is not needed for
+     an archive, this variable can be redefined to the empty string
+     in the archive specific resource file.
+  -->
+<DefineVar chop>
+TSLICE-LISTING
+<div class="tSlice">
+<table cellspacing="1" cellpadding="4" width="100%">
+<tr valign="baseline">
+<td align="left">$BUTTON(TPREVIN)$</td>
+<th align="center" width="100%"><strong>$CURRENT-THREAD-LABEL$</strong></th>
+<td align="right">$BUTTON(TNEXTIN)$</td></tr>
+<tr class="tSliceList"><td colspan="3">
+$TSLICE$
+</td></tr>
+</table></div>
+</DefineVar>
+
+<DefineVar chop>
+SUBJECT-LINK
+<span class="subjectLink">[<a href="$SEARCH-CGI$?query=$NMZ-SUBJECT-QUERY:U$&amp;idxname=$LIST-NAME$&amp;sort=date%3Alate"
+>$MORE-SUBJECT-LABEL$</a>]</span>
+</DefineVar>
+
+<!-- Modify end of message body to include thread slice.  We also
+     include convenient next/prev-in-thread links since scanning
+     slice can be inconvenient for simple thread reading.
+  -->
+<MsgBodyEnd>
+</td></tr></table>
+</div>
+<div class="msgLinks">
+<table width="100%">
+<tr valign="baseline">
+<td align="center">$SUBJECT-LINK$</td>
+</tr></table>
+</div>
+$TSLICE-LISTING$
+</MsgBodyEnd>
+
+<!-- The following variable represents the index links for use in BOTLINKS.
+     We use a variable so archives that disable an index, or add one,
+     can just change this variable instead of redefining BOTLINKS.
+  -->
+<DefineVar chop>
+BOTTOM-IDX-LINKS
+[<a href="$IDXFNAME$#$MSGNUM$"><strong>$DATE-IDX-BUTTON-LABEL$</strong></a>]
+[<a href="$TIDXFNAME$#$MSGNUM$"><strong>$THREAD-IDX-BUTTON-LABEL$</strong></a>]
+</DefineVar>
+
+<!-- Use a table to format bottom links
+  -->
+<PrevLink chop>
+<tr valign="baseline">
+<th align="right">$PREV-BY-DATE-LABEL$:&nbsp;</th>
+<td width="100%"><strong><a href="$MSG(PREV)$">$SUBJECT(PREV)$</a></strong>, <em>$FROMNAME(PREV)$</em></td>
+</tr>
+</PrevLink>
+
+<NextLink chop>
+<tr valign="baseline">
+<th align="right">$NEXT-BY-DATE-LABEL$:&nbsp;</th>
+<td width="100%"><strong><a href="$MSG(NEXT)$">$SUBJECT(NEXT)$</a></strong>, <em>$FROMNAME(NEXT)$</em></td>
+</tr>
+</NextLink>
+
+<TPrevLink chop>
+<tr valign="baseline">
+<th align="right">$PREV-BY-THREAD-LABEL$:&nbsp;</th>
+<td width="100%"><strong><a href="$MSG(TPREV)$">$SUBJECT(TPREV)$</a></strong>, <em>$FROMNAME(TPREV)$</em></td>
+</tr>
+</TPrevLink>
+
+<TNextLink chop>
+<tr valign="baseline">
+<th align="right">$NEXT-BY-THREAD-LABEL$:&nbsp;</th>
+<td width="100%"><strong><a href="$MSG(TNEXT)$">$SUBJECT(TNEXT)$</a></strong>, <em>$FROMNAME(TNEXT)$</em></td>
+</tr>
+</TNextLink>
+
+<BotLinks>
+<div class="botLinks">
+<table width="100%">
+$LINK(PREV)$
+$LINK(NEXT)$
+$LINK(TPREV)$
+$LINK(TNEXT)$
+<tr valign="baseline">
+<th align="right">$INDEXES-LABEL$:&nbsp;</th>
+<td>$BOTTOM-IDX-LINKS$
+[<a href="../"><strong>$TOP-LINK-LABEL$</strong></a>]
+[<a href="$ALL-LISTS-URL$"><strong>$ALL-LISTS-LABEL$</strong></a>]</td>
+</tr>
+</table>
+</div>
+</BotLinks>
diff --git a/lib/common.mrc.pl b/lib/common.mrc.pl
new file mode 100644 (file)
index 0000000..690ff07
--- /dev/null
@@ -0,0 +1,124 @@
+<!-- $Id: common.mrc.pl.in.dist,v 1.1 2003/08/09 18:05:12 ehood Exp $  -->
+<!-- ================================================================== -->
+<!--   Description:
+         Polish (pl) locale settings for common.mrc.
+       Contributer:
+         Bartosz Feski
+  -->
+<!-- ================================================================== -->
+
+<!-- Variable for defining any <meta http-equiv> tags. -->
+<DefineVar chop>
+HTTP-EQUIV
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
+</DefineVar>
+
+<DefineVar chop>
+PREV-PERIOD-LABEL
+Poprzedni&nbsp;okres
+</DefineVar>
+<DefineVar chop>
+NEXT-PERIOD-LABEL
+Nastêpny&nbsp;okres
+</DefineVar>
+<DefineVar chop>
+ADV-SEARCH-LABEL
+Zaawansowane
+</DefineVar>
+
+<DefineVar chop>
+THREAD-IDX-LABEL
+Wed³ug&nbsp;w±tków
+</DefineVar>
+<DefineVar chop>
+DATE-IDX-LABEL
+Wed³ug&nbsp;dat
+</DefineVar>
+  
+<DefineVar chop>
+TOP-LINK-LABEL
+Pocz±tek
+</DefineVar>
+   
+<DefineVar chop>
+ALL-LISTS-LABEL
+Wszystkie&nbsp;listy
+</DefineVar>
+
+<DefineVar chop>
+PREV-MSG-BUTTON-LABEL
+&lt;poprzedni
+</DefineVar>
+<DefineVar chop>
+NEXT-MSG-BUTTON-LABEL
+nastêpny&gt;
+</DefineVar>
+  
+<DefineVar chop>
+DATE-IDX-BUTTON-LABEL
+Wg&nbsp;dat
+</DefineVar>
+   
+<DefineVar chop>
+THREAD-IDX-BUTTON-LABEL
+Wg&nbsp;w±tków
+</DefineVar>
+   
+<DefineVar chop>
+ORIGINAL-MSG-LINK-LABEL
+Oryginalna&nbsp;wiadomo¶æ
+</DefineVar>
+<DefineVar chop>
+BOOKMARK-LINK-LABEL
+Sta³y&nbsp;odsy³acz
+</DefineVar>
+  
+<DefineVar chop>
+PREV-IN-THREAD-LABEL
+&lt;Poprzedni&nbsp;w&nbsp;w±tku
+</DefineVar>
+   
+<DefineVar chop>
+NEXT-IN-THREAD-LABEL
+Nastêpny&nbsp;w&nbsp;w±tku&gt;
+</DefineVar>
+
+<DefineVar chop>
+CURRENT-THREAD-LABEL
+Bie¿±cy&nbsp;w±tek
+</DefineVar>
+<DefineVar chop>
+MORE-SUBJECT-LABEL
+Wiêcej&nbsp;z&nbsp;takim&nbsp;tematem...
+</DefineVar>
+  
+<DefineVar chop>
+PREV-BY-DATE-LABEL
+Poprzedni&nbsp;wg&nbsp;daty
+</DefineVar>
+   
+<DefineVar chop>
+NEXT-BY-DATE-LABEL
+Nastêpny&nbsp;wg&nbsp;daty
+</DefineVar>
+
+<DefineVar chop>
+PREV-BY-THREAD-LABEL
+Poprzedni&nbsp;wg&nbsp;w±tku
+</DefineVar>
+<DefineVar chop>
+NEXT-BY-THREAD-LABEL
+Nastêpny&nbsp;wg&nbsp;w±tku
+</DefineVar>
+  
+<DefineVar chop>
+INDEXES-LABEL
+Wykazy
+</DefineVar>
diff --git a/lib/common.mrc.pl.in b/lib/common.mrc.pl.in
new file mode 100644 (file)
index 0000000..690ff07
--- /dev/null
@@ -0,0 +1,124 @@
+<!-- $Id: common.mrc.pl.in.dist,v 1.1 2003/08/09 18:05:12 ehood Exp $  -->
+<!-- ================================================================== -->
+<!--   Description:
+         Polish (pl) locale settings for common.mrc.
+       Contributer:
+         Bartosz Feski
+  -->
+<!-- ================================================================== -->
+
+<!-- Variable for defining any <meta http-equiv> tags. -->
+<DefineVar chop>
+HTTP-EQUIV
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
+</DefineVar>
+
+<DefineVar chop>
+PREV-PERIOD-LABEL
+Poprzedni&nbsp;okres
+</DefineVar>
+<DefineVar chop>
+NEXT-PERIOD-LABEL
+Nastêpny&nbsp;okres
+</DefineVar>
+<DefineVar chop>
+ADV-SEARCH-LABEL
+Zaawansowane
+</DefineVar>
+
+<DefineVar chop>
+THREAD-IDX-LABEL
+Wed³ug&nbsp;w±tków
+</DefineVar>
+<DefineVar chop>
+DATE-IDX-LABEL
+Wed³ug&nbsp;dat
+</DefineVar>
+  
+<DefineVar chop>
+TOP-LINK-LABEL
+Pocz±tek
+</DefineVar>
+   
+<DefineVar chop>
+ALL-LISTS-LABEL
+Wszystkie&nbsp;listy
+</DefineVar>
+
+<DefineVar chop>
+PREV-MSG-BUTTON-LABEL
+&lt;poprzedni
+</DefineVar>
+<DefineVar chop>
+NEXT-MSG-BUTTON-LABEL
+nastêpny&gt;
+</DefineVar>
+  
+<DefineVar chop>
+DATE-IDX-BUTTON-LABEL
+Wg&nbsp;dat
+</DefineVar>
+   
+<DefineVar chop>
+THREAD-IDX-BUTTON-LABEL
+Wg&nbsp;w±tków
+</DefineVar>
+   
+<DefineVar chop>
+ORIGINAL-MSG-LINK-LABEL
+Oryginalna&nbsp;wiadomo¶æ
+</DefineVar>
+<DefineVar chop>
+BOOKMARK-LINK-LABEL
+Sta³y&nbsp;odsy³acz
+</DefineVar>
+  
+<DefineVar chop>
+PREV-IN-THREAD-LABEL
+&lt;Poprzedni&nbsp;w&nbsp;w±tku
+</DefineVar>
+   
+<DefineVar chop>
+NEXT-IN-THREAD-LABEL
+Nastêpny&nbsp;w&nbsp;w±tku&gt;
+</DefineVar>
+
+<DefineVar chop>
+CURRENT-THREAD-LABEL
+Bie¿±cy&nbsp;w±tek
+</DefineVar>
+<DefineVar chop>
+MORE-SUBJECT-LABEL
+Wiêcej&nbsp;z&nbsp;takim&nbsp;tematem...
+</DefineVar>
+  
+<DefineVar chop>
+PREV-BY-DATE-LABEL
+Poprzedni&nbsp;wg&nbsp;daty
+</DefineVar>
+   
+<DefineVar chop>
+NEXT-BY-DATE-LABEL
+Nastêpny&nbsp;wg&nbsp;daty
+</DefineVar>
+
+<DefineVar chop>
+PREV-BY-THREAD-LABEL
+Poprzedni&nbsp;wg&nbsp;w±tku
+</DefineVar>
+<DefineVar chop>
+NEXT-BY-THREAD-LABEL
+Nastêpny&nbsp;wg&nbsp;w±tku
+</DefineVar>
+  
+<DefineVar chop>
+INDEXES-LABEL
+Wykazy
+</DefineVar>
diff --git a/lib/common.mrc.pl.in.dist b/lib/common.mrc.pl.in.dist
new file mode 100644 (file)
index 0000000..690ff07
--- /dev/null
@@ -0,0 +1,124 @@
+<!-- $Id: common.mrc.pl.in.dist,v 1.1 2003/08/09 18:05:12 ehood Exp $  -->
+<!-- ================================================================== -->
+<!--   Description:
+         Polish (pl) locale settings for common.mrc.
+       Contributer:
+         Bartosz Feski
+  -->
+<!-- ================================================================== -->
+
+<!-- Variable for defining any <meta http-equiv> tags. -->
+<DefineVar chop>
+HTTP-EQUIV
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
+</DefineVar>
+
+<DefineVar chop>
+PREV-PERIOD-LABEL
+Poprzedni&nbsp;okres
+</DefineVar>
+<DefineVar chop>
+NEXT-PERIOD-LABEL
+Nastêpny&nbsp;okres
+</DefineVar>
+<DefineVar chop>
+ADV-SEARCH-LABEL
+Zaawansowane
+</DefineVar>
+
+<DefineVar chop>
+THREAD-IDX-LABEL
+Wed³ug&nbsp;w±tków
+</DefineVar>
+<DefineVar chop>
+DATE-IDX-LABEL
+Wed³ug&nbsp;dat
+</DefineVar>
+  
+<DefineVar chop>
+TOP-LINK-LABEL
+Pocz±tek
+</DefineVar>
+   
+<DefineVar chop>
+ALL-LISTS-LABEL
+Wszystkie&nbsp;listy
+</DefineVar>
+
+<DefineVar chop>
+PREV-MSG-BUTTON-LABEL
+&lt;poprzedni
+</DefineVar>
+<DefineVar chop>
+NEXT-MSG-BUTTON-LABEL
+nastêpny&gt;
+</DefineVar>
+  
+<DefineVar chop>
+DATE-IDX-BUTTON-LABEL
+Wg&nbsp;dat
+</DefineVar>
+   
+<DefineVar chop>
+THREAD-IDX-BUTTON-LABEL
+Wg&nbsp;w±tków
+</DefineVar>
+   
+<DefineVar chop>
+ORIGINAL-MSG-LINK-LABEL
+Oryginalna&nbsp;wiadomo¶æ
+</DefineVar>
+<DefineVar chop>
+BOOKMARK-LINK-LABEL
+Sta³y&nbsp;odsy³acz
+</DefineVar>
+  
+<DefineVar chop>
+PREV-IN-THREAD-LABEL
+&lt;Poprzedni&nbsp;w&nbsp;w±tku
+</DefineVar>
+   
+<DefineVar chop>
+NEXT-IN-THREAD-LABEL
+Nastêpny&nbsp;w&nbsp;w±tku&gt;
+</DefineVar>
+
+<DefineVar chop>
+CURRENT-THREAD-LABEL
+Bie¿±cy&nbsp;w±tek
+</DefineVar>
+<DefineVar chop>
+MORE-SUBJECT-LABEL
+Wiêcej&nbsp;z&nbsp;takim&nbsp;tematem...
+</DefineVar>
+  
+<DefineVar chop>
+PREV-BY-DATE-LABEL
+Poprzedni&nbsp;wg&nbsp;daty
+</DefineVar>
+   
+<DefineVar chop>
+NEXT-BY-DATE-LABEL
+Nastêpny&nbsp;wg&nbsp;daty
+</DefineVar>
+
+<DefineVar chop>
+PREV-BY-THREAD-LABEL
+Poprzedni&nbsp;wg&nbsp;w±tku
+</DefineVar>
+<DefineVar chop>
+NEXT-BY-THREAD-LABEL
+Nastêpny&nbsp;wg&nbsp;w±tku
+</DefineVar>
+  
+<DefineVar chop>
+INDEXES-LABEL
+Wykazy
+</DefineVar>
diff --git a/lib/config.sh b/lib/config.sh
new file mode 100644 (file)
index 0000000..1369b86
--- /dev/null
@@ -0,0 +1,226 @@
+##-------------------------------------------------------------------------
+##  File:
+##     $Id: config.sh.dist,v 1.19 2003/08/09 18:04:08 ehood Exp $
+##  Description:
+##     This is the main configuration file for the web mail archiving
+##     system.  The syntax of this file follows a subset of the Bourne
+##     shell syntax.  The reason for the simplicity is so the Perl
+##     program can easily parse this file.  The shell scripts can
+##     just source this file directly.
+##
+##     Normal environment variables can be referenced when defining
+##     the value of a variable.
+##-------------------------------------------------------------------------
+
+##-------------------------------------------------------------------------
+##  Main variables to verify
+##-------------------------------------------------------------------------
+
+# The SW_ROOT setting is the most important since other variables are
+# based upon it.  It should be the pathname to the directory you installed
+# mharc.
+SW_ROOT=/home/mharc
+
+# MHonArc library path: If MHonArc libraries are not in Perl's default
+# search path, add it here.
+MHONARC_LIB=/usr/share/mhonarc
+
+# Pathname to source mail spool file: Modify to reflect you system.
+# The reference to LOGNAME is an environment variable normally defined
+# by the system to represent the username.
+#
+#   NOTE: If your environment does not define LOGNAME, make sure
+#        to replace the variable with an appropriate value.
+#
+ORGMAIL=/var/spool/mail/$LOGNAME
+
+# Set to 1 if $ORGMAIL is pathname to a mail spool file.  Else set
+# to 0.  This affects how locking is done in filter-spool
+IS_MAIL_SPOOL=1
+
+# Root URL to mail archives.  This variable should represent what
+# root URL path will be for web browsers to access your archives.
+# The *_URL variables below are, by default, based upon this variable.
+#
+#   NOTE: For portability, it is best to exclude the server name
+#        portion of the URL and only the path component.
+#
+ROOT_URL=/archive
+
+# Email address of administrator: Used in MKNMZ_RC.
+ADMIN_ADDRESS=sysadmin@gnu.org
+
+##-------------------------------------------------------------------------
+##  The variables after here can generally be left as-is, but you may
+##  want to to check if you want more granular customization.
+##-------------------------------------------------------------------------
+
+# Pathname to lists.def.
+LISTS_DEF_FILE=$SW_ROOT/lib/lists.def
+
+# Pathname of procmailrc (generated from $LISTS_DEF_FILE)
+PROCMAILRC=$SW_ROOT/procmailrc.mharc
+
+# Pathname of directory containing logs
+LOG_DIR=$SW_ROOT/log
+
+# Pathname of directory containing CGI programs
+CGI_DIR=$SW_ROOT/cgi-bin
+
+# Pathname of directory containing raw mail archives.
+MBOX_DIR=$SW_ROOT/mbox
+
+# Pathname of directory containing HTML mail archives.
+HTML_DIR=$SW_ROOT/html
+
+# Directory containing informational pages about each list archive.
+INFO_DIR=$SW_ROOT/info
+
+# Pathname to directory containing list-specific MHonArc resource files.
+MHA_RC_DIR=$SW_ROOT/lib/mrc
+
+# Pathname to main MHonArc resource file.
+MHA_RC=$SW_ROOT/lib/common.mrc
+
+# Pathname of archive lists index page.  This page provides a list
+# of all archives available.
+ALL_LISTS_FILE=$HTML_DIR/lists.html
+
+# Pathname of header template for archive lists index page.  The
+# header template defines the markup that should occur before the
+# all archive listing.
+ALL_LISTS_HEADER=$HTML_DIR/.PNM.all-head
+
+# Pathname of footer template for archive lists index page.  The
+# footer template defines the markup that should occur after the
+# all archive listing.
+ALL_LISTS_FOOTER=$HTML_DIR/.PNM.all-foot
+
+# Text label HTML strings for all-lists table.  These can be changed
+# to fit a particular locale
+ALL_LISTS_LABEL_NAME='Name'
+ALL_LISTS_LABEL_INDEXES='Current&nbsp;Index'
+ALL_LISTS_LABEL_LAST_UPDATED='Last&nbsp;Updated'
+ALL_LISTS_LABEL_INFO='[info]'
+ALL_LISTS_LABEL_DATE='[Date]'
+ALL_LISTS_LABEL_THREADS='[Thread]'
+
+# The date/time format for showing the Last Updated time of archives
+# on all-lists page.  The format is what is supported by strftime.
+ALL_LISTS_DATE_FORMAT='%Y-%m-%d %H:%M:%S %z'
+
+# Pathname of header template for period index pages.
+MAIN_HEADER=$HTML_DIR/.PNM.head
+
+# Pathname of footer template for period index pages.
+MAIN_FOOTER=$HTML_DIR/.PNM.foot
+
+# SEARCH_CGI url should not have to be changed, but the namazu.cgi
+# program will need to be copied to $SW_ROOT/cgi-bin directory.
+SEARCH_CGI=$ROOT_URL/cgi-bin/namazu.cgi
+
+# URL to mbox archives.  This should be a URL that would access the
+# the filesystem location defined by MBOX_DIR.
+MBOX_URL=$ROOT_URL/mbox
+
+# URL to html archives.  This should be a URL that would access the
+# the filesystem location defined by HTML_DIR.
+HTML_URL=$ROOT_URL/html
+
+# Base URL containing informational pages about each list archive.
+# This should be a URL that would access the the filesystem location
+# defined by INFO_DIR.
+INFO_URL=$ROOT_URL/info
+
+# URL providing list of all archives.  This URL would provide the
+# user a listing of all the archives available.
+ALL_LISTS_URL=$HTML_URL
+
+# URL to CGI programs This should be a URL that would access the the
+# filesystem location defined by CGI_DIR.
+CGI_URL=$ROOT_URL/cgi-bin
+
+# URL to period navigation CGI program
+MNAV_CGI=$CGI_URL/mnav.cgi
+
+# URL to raw message extraction CGI program
+EXTRACT_CGI=$CGI_URL/extract-mesg.cgi
+
+# URL to persistent message reference CGI program
+MESG_CGI=$CGI_URL/mesg.cgi
+
+# Pathname to procmail program.  If procmail is not in your normal
+# search path, change this to the absolate pathname to the program.
+PROCMAIL=/usr/bin/procmail
+
+# Procmail search path for $PROCMAILRC.
+PROCMAIL_PATH=$SW_ROOT/bin:/usr/local/bin:/bin:/usr/bin
+
+# Pathname to formail program.  If formail is not in your normal
+# search path, change this to the absolate pathname to the program.
+FORMAIL=/usr/bin/formail
+
+# Pathname to lockfile program.  If lockfile is not in your normal
+# search path, change this to the absolate pathname to the program.
+LOCKFILE=/usr/bin/lockfile
+
+# Pathname to mknmz program.  If mknmz is not in your normal
+# search path, change this to the absolate pathname to the program.
+MKNMZ=/usr/bin/mknmz
+
+# Pathname to resource file for mknmz
+MKNMZ_RC=$SW_ROOT/cgi-bin/mknmzrc
+
+# Directory containing templates for namazu
+MKNMZ_TMPL_DIR=$SW_ROOT/cgi-bin/template
+
+# Lock time out in seconds when processing $ORGMAIL: If the lock
+# is older than specified time, then the lock will be removed by
+# force.
+#ORGMAIL_LOCK_TIMEOUT=3600
+
+# Options to procmail: Uncomment and change as needed if you want
+# define extra procmail variables
+#PROCMAILVARS="VERBOSE=yes LOGABSTRACT=yes"
+
+# Address to receive all unmatched messages.  If this variable
+# is defined, the "catch" archive will be disabled and all
+# messages that do not match an archive will be forward to $CATCH_ADDRESS.
+#CATCH_ADDRESS=
+
+# Name of the "catch" archive: Uncomment and change to desired
+# value.  Note, value should start with a "." for searching to
+# be automatically disabled.
+#CATCH_ARCHIVE=.catch
+
+# Disable catch archive: Uncomment and change value to 1 if you
+# do not want a catch archive.  If CATCH_ADDRESS is defined, this
+# variable has no effect.  However, if CATCH_ADDRESS is blank and
+# you disable the catch archive, all unmatched messages will be quietly
+# dropped.
+#DISABLE_CATCH_ARCHIVE=0
+
+# Age of mailbox file, in seconds, to be considered for processing:
+# This value should have a value which properly reflects how often
+# mail is processed.  Here, 86400 = 1 day.  Since the default template
+# crontab settings have mail processed hourly, this should be a
+# reasonable setting.  However, if you decrease the frequency of mail
+# processing, you may need to increase MTIME_AGE.
+MTIME_AGE=86400
+
+# Maximum size, in bytes, of msgid cache for detecting duplicate
+# messages.  The larger of volume of messages you process, that
+# larger the cache size should be.  The default size of 16K will
+# roughly cache that last 300 messages-ids.
+#MSGID_CACHE_SIZE=16384
+
+# Destination mailbox for final rule in $PROCMAILRC.
+# It is OKAY for this to be /dev/null.  See mk-procmailrc manpage
+# for more information.
+#FINAL_MSG_DESTINATION=/dev/null
+
+# Message header fields to determine date of a message.  Format same
+# as the DATEFIELDS resource of MHonArc.  This variable is used
+# be extract-mesg-date and is passed into MHonArc via the DATEFIELDS
+# resource.
+#MSG_DATE_FIELDS='received:delivery-date:date'
diff --git a/lib/config.sh.backup b/lib/config.sh.backup
new file mode 100644 (file)
index 0000000..8a29580
--- /dev/null
@@ -0,0 +1,226 @@
+##-------------------------------------------------------------------------
+##  File:
+##     $Id: config.sh.dist,v 1.19 2003/08/09 18:04:08 ehood Exp $
+##  Description:
+##     This is the main configuration file for the web mail archiving
+##     system.  The syntax of this file follows a subset of the Bourne
+##     shell syntax.  The reason for the simplicity is so the Perl
+##     program can easily parse this file.  The shell scripts can
+##     just source this file directly.
+##
+##     Normal environment variables can be referenced when defining
+##     the value of a variable.
+##-------------------------------------------------------------------------
+
+##-------------------------------------------------------------------------
+##  Main variables to verify
+##-------------------------------------------------------------------------
+
+# The SW_ROOT setting is the most important since other variables are
+# based upon it.  It should be the pathname to the directory you installed
+# mharc.
+SW_ROOT=/home/mharc
+
+# MHonArc library path: If MHonArc libraries are not in Perl's default
+# search path, add it here.
+MHONARC_LIB=/usr/lib/MHonArc
+
+# Pathname to source mail spool file: Modify to reflect you system.
+# The reference to LOGNAME is an environment variable normally defined
+# by the system to represent the username.
+#
+#   NOTE: If your environment does not define LOGNAME, make sure
+#        to replace the variable with an appropriate value.
+#
+ORGMAIL=/var/spool/mail/$LOGNAME
+
+# Set to 1 if $ORGMAIL is pathname to a mail spool file.  Else set
+# to 0.  This affects how locking is done in filter-spool
+IS_MAIL_SPOOL=1
+
+# Root URL to mail archives.  This variable should represent what
+# root URL path will be for web browsers to access your archives.
+# The *_URL variables below are, by default, based upon this variable.
+#
+#   NOTE: For portability, it is best to exclude the server name
+#        portion of the URL and only the path component.
+#
+ROOT_URL=/archive
+
+# Email address of administrator: Used in MKNMZ_RC.
+ADMIN_ADDRESS=sysadmin@gnu.org
+
+##-------------------------------------------------------------------------
+##  The variables after here can generally be left as-is, but you may
+##  want to to check if you want more granular customization.
+##-------------------------------------------------------------------------
+
+# Pathname to lists.def.
+LISTS_DEF_FILE=$SW_ROOT/lib/lists.def
+
+# Pathname of procmailrc (generated from $LISTS_DEF_FILE)
+PROCMAILRC=$SW_ROOT/procmailrc.mharc
+
+# Pathname of directory containing logs
+LOG_DIR=$SW_ROOT/log
+
+# Pathname of directory containing CGI programs
+CGI_DIR=$SW_ROOT/cgi-bin
+
+# Pathname of directory containing raw mail archives.
+MBOX_DIR=$SW_ROOT/mbox
+
+# Pathname of directory containing HTML mail archives.
+HTML_DIR=$SW_ROOT/html
+
+# Directory containing informational pages about each list archive.
+INFO_DIR=$SW_ROOT/info
+
+# Pathname to directory containing list-specific MHonArc resource files.
+MHA_RC_DIR=$SW_ROOT/lib/mrc
+
+# Pathname to main MHonArc resource file.
+MHA_RC=$SW_ROOT/lib/common.mrc
+
+# Pathname of archive lists index page.  This page provides a list
+# of all archives available.
+ALL_LISTS_FILE=$HTML_DIR/lists.html
+
+# Pathname of header template for archive lists index page.  The
+# header template defines the markup that should occur before the
+# all archive listing.
+ALL_LISTS_HEADER=$HTML_DIR/.PNM.all-head
+
+# Pathname of footer template for archive lists index page.  The
+# footer template defines the markup that should occur after the
+# all archive listing.
+ALL_LISTS_FOOTER=$HTML_DIR/.PNM.all-foot
+
+# Text label HTML strings for all-lists table.  These can be changed
+# to fit a particular locale
+ALL_LISTS_LABEL_NAME='Name'
+ALL_LISTS_LABEL_INDEXES='Current&nbsp;Index'
+ALL_LISTS_LABEL_LAST_UPDATED='Last&nbsp;Updated'
+ALL_LISTS_LABEL_INFO='[info]'
+ALL_LISTS_LABEL_DATE='[Date]'
+ALL_LISTS_LABEL_THREADS='[Thread]'
+
+# The date/time format for showing the Last Updated time of archives
+# on all-lists page.  The format is what is supported by strftime.
+ALL_LISTS_DATE_FORMAT='%Y-%m-%d %H:%M:%S'
+
+# Pathname of header template for period index pages.
+MAIN_HEADER=$HTML_DIR/.PNM.head
+
+# Pathname of footer template for period index pages.
+MAIN_FOOTER=$HTML_DIR/.PNM.foot
+
+# SEARCH_CGI url should not have to be changed, but the namazu.cgi
+# program will need to be copied to $SW_ROOT/cgi-bin directory.
+SEARCH_CGI=$ROOT_URL/cgi-bin/namazu.cgi
+
+# URL to mbox archives.  This should be a URL that would access the
+# the filesystem location defined by MBOX_DIR.
+MBOX_URL=$ROOT_URL/mbox
+
+# URL to html archives.  This should be a URL that would access the
+# the filesystem location defined by HTML_DIR.
+HTML_URL=$ROOT_URL/html
+
+# Base URL containing informational pages about each list archive.
+# This should be a URL that would access the the filesystem location
+# defined by INFO_DIR.
+INFO_URL=$ROOT_URL/info
+
+# URL providing list of all archives.  This URL would provide the
+# user a listing of all the archives available.
+ALL_LISTS_URL=$HTML_URL
+
+# URL to CGI programs This should be a URL that would access the the
+# filesystem location defined by CGI_DIR.
+CGI_URL=$ROOT_URL/cgi-bin
+
+# URL to period navigation CGI program
+MNAV_CGI=$CGI_URL/mnav.cgi
+
+# URL to raw message extraction CGI program
+EXTRACT_CGI=$CGI_URL/extract-mesg.cgi
+
+# URL to persistent message reference CGI program
+MESG_CGI=$CGI_URL/mesg.cgi
+
+# Pathname to procmail program.  If procmail is not in your normal
+# search path, change this to the absolate pathname to the program.
+PROCMAIL=/usr/bin/procmail
+
+# Procmail search path for $PROCMAILRC.
+PROCMAIL_PATH=$SW_ROOT/bin:/usr/local/bin:/bin:/usr/bin
+
+# Pathname to formail program.  If formail is not in your normal
+# search path, change this to the absolate pathname to the program.
+FORMAIL=/usr/bin/formail
+
+# Pathname to lockfile program.  If lockfile is not in your normal
+# search path, change this to the absolate pathname to the program.
+LOCKFILE=/usr/bin/lockfile
+
+# Pathname to mknmz program.  If mknmz is not in your normal
+# search path, change this to the absolate pathname to the program.
+MKNMZ=/usr/bin/mknmz
+
+# Pathname to resource file for mknmz
+MKNMZ_RC=$SW_ROOT/cgi-bin/mknmzrc
+
+# Directory containing templates for namazu
+MKNMZ_TMPL_DIR=$SW_ROOT/cgi-bin/template
+
+# Lock time out in seconds when processing $ORGMAIL: If the lock
+# is older than specified time, then the lock will be removed by
+# force.
+#ORGMAIL_LOCK_TIMEOUT=3600
+
+# Options to procmail: Uncomment and change as needed if you want
+# define extra procmail variables
+#PROCMAILVARS="VERBOSE=yes LOGABSTRACT=yes"
+
+# Address to receive all unmatched messages.  If this variable
+# is defined, the "catch" archive will be disabled and all
+# messages that do not match an archive will be forward to $CATCH_ADDRESS.
+#CATCH_ADDRESS=
+
+# Name of the "catch" archive: Uncomment and change to desired
+# value.  Note, value should start with a "." for searching to
+# be automatically disabled.
+#CATCH_ARCHIVE=.catch
+
+# Disable catch archive: Uncomment and change value to 1 if you
+# do not want a catch archive.  If CATCH_ADDRESS is defined, this
+# variable has no effect.  However, if CATCH_ADDRESS is blank and
+# you disable the catch archive, all unmatched messages will be quietly
+# dropped.
+#DISABLE_CATCH_ARCHIVE=0
+
+# Age of mailbox file, in seconds, to be considered for processing:
+# This value should have a value which properly reflects how often
+# mail is processed.  Here, 86400 = 1 day.  Since the default template
+# crontab settings have mail processed hourly, this should be a
+# reasonable setting.  However, if you decrease the frequency of mail
+# processing, you may need to increase MTIME_AGE.
+MTIME_AGE=86400
+
+# Maximum size, in bytes, of msgid cache for detecting duplicate
+# messages.  The larger of volume of messages you process, that
+# larger the cache size should be.  The default size of 16K will
+# roughly cache that last 300 messages-ids.
+#MSGID_CACHE_SIZE=16384
+
+# Destination mailbox for final rule in $PROCMAILRC.
+# It is OKAY for this to be /dev/null.  See mk-procmailrc manpage
+# for more information.
+#FINAL_MSG_DESTINATION=/dev/null
+
+# Message header fields to determine date of a message.  Format same
+# as the DATEFIELDS resource of MHonArc.  This variable is used
+# be extract-mesg-date and is passed into MHonArc via the DATEFIELDS
+# resource.
+#MSG_DATE_FIELDS='received:delivery-date:date'
diff --git a/lib/config.sh.cache.pl b/lib/config.sh.cache.pl
new file mode 100644 (file)
index 0000000..fbaf905
--- /dev/null
@@ -0,0 +1,2 @@
+# DO NOT EDIT THIS FILE!
+bless( {'LOCKFILE' => '/usr/bin/lockfile','ALL_LISTS_FILE' => '/home/mharc/html/lists.html','CGI_URL' => '/archive/cgi-bin','INFO_URL' => '/archive/info','PROCMAIL_PATH' => '/home/mharc/bin:/usr/local/bin:/bin:/usr/bin','MHONARC_LIB' => '/usr/share/mhonarc','ROOT_URL' => '/archive','MKNMZ' => '/usr/bin/mknmz','ADMIN_ADDRESS' => 'sysadmin@gnu.org','ALL_LISTS_HEADER' => '/home/mharc/html/.PNM.all-head','ALL_LISTS_LABEL_LAST_UPDATED' => 'Last&nbsp;Updated','MAIN_FOOTER' => '/home/mharc/html/.PNM.foot','ORGMAIL' => '/var/spool/mail/mharc','MHA_RC' => '/home/mharc/lib/common.mrc','SEARCH_CGI' => '/archive/cgi-bin/namazu.cgi','LISTS_DEF_FILE' => '/home/mharc/lib/lists.def','ALL_LISTS_LABEL_THREADS' => '[Thread]','EXTRACT_CGI' => '/archive/cgi-bin/extract-mesg.cgi','MKNMZ_TMPL_DIR' => '/home/mharc/cgi-bin/template','ALL_LISTS_LABEL_NAME' => 'Name','HTML_DIR' => '/home/mharc/html','PROCMAILRC' => '/home/mharc/procmailrc.mharc','MHA_RC_DIR' => '/home/mharc/lib/mrc','ALL_LISTS_FOOTER' => '/home/mharc/html/.PNM.all-foot','CGI_DIR' => '/home/mharc/cgi-bin','LOG_DIR' => '/home/mharc/log','INFO_DIR' => '/home/mharc/info','MTIME_AGE' => '86400','FORMAIL' => '/usr/bin/formail','ALL_LISTS_LABEL_INFO' => '[info]','ALL_LISTS_DATE_FORMAT' => '%Y-%m-%d %H:%M:%S %z','SW_ROOT' => '/home/mharc','HTML_URL' => '/archive/html','ALL_LISTS_LABEL_INDEXES' => 'Current&nbsp;Index','PROCMAIL' => '/usr/bin/procmail','IS_MAIL_SPOOL' => '1','ALL_LISTS_URL' => '/archive/html','MBOX_URL' => '/archive/mbox','MESG_CGI' => '/archive/cgi-bin/mesg.cgi','ALL_LISTS_LABEL_DATE' => '[Date]','MAIN_HEADER' => '/home/mharc/html/.PNM.head','MKNMZ_RC' => '/home/mharc/cgi-bin/mknmzrc','MNAV_CGI' => '/archive/cgi-bin/mnav.cgi','MBOX_DIR' => '/home/mharc/mbox'}, 'MHArc::Config' );
\ No newline at end of file
diff --git a/lib/config.sh.dist b/lib/config.sh.dist
new file mode 100644 (file)
index 0000000..e14e049
--- /dev/null
@@ -0,0 +1,226 @@
+##-------------------------------------------------------------------------
+##  File:
+##     $Id: config.sh.dist,v 1.19 2003/08/09 18:04:08 ehood Exp $
+##  Description:
+##     This is the main configuration file for the web mail archiving
+##     system.  The syntax of this file follows a subset of the Bourne
+##     shell syntax.  The reason for the simplicity is so the Perl
+##     program can easily parse this file.  The shell scripts can
+##     just source this file directly.
+##
+##     Normal environment variables can be referenced when defining
+##     the value of a variable.
+##-------------------------------------------------------------------------
+
+##-------------------------------------------------------------------------
+##  Main variables to verify
+##-------------------------------------------------------------------------
+
+# The SW_ROOT setting is the most important since other variables are
+# based upon it.  It should be the pathname to the directory you installed
+# mharc.
+SW_ROOT=/home/mharc
+
+# MHonArc library path: If MHonArc libraries are not in Perl's default
+# search path, add it here.
+MHONARC_LIB=
+
+# Pathname to source mail spool file: Modify to reflect you system.
+# The reference to LOGNAME is an environment variable normally defined
+# by the system to represent the username.
+#
+#   NOTE: If your environment does not define LOGNAME, make sure
+#        to replace the variable with an appropriate value.
+#
+ORGMAIL=/var/spool/mail/$LOGNAME
+
+# Set to 1 if $ORGMAIL is pathname to a mail spool file.  Else set
+# to 0.  This affects how locking is done in filter-spool
+IS_MAIL_SPOOL=1
+
+# Root URL to mail archives.  This variable should represent what
+# root URL path will be for web browsers to access your archives.
+# The *_URL variables below are, by default, based upon this variable.
+#
+#   NOTE: For portability, it is best to exclude the server name
+#        portion of the URL and only the path component.
+#
+ROOT_URL=/archive
+
+# Email address of administrator: Used in MKNMZ_RC.
+ADMIN_ADDRESS=
+
+##-------------------------------------------------------------------------
+##  The variables after here can generally be left as-is, but you may
+##  want to to check if you want more granular customization.
+##-------------------------------------------------------------------------
+
+# Pathname to lists.def.
+LISTS_DEF_FILE=$SW_ROOT/lib/lists.def
+
+# Pathname of procmailrc (generated from $LISTS_DEF_FILE)
+PROCMAILRC=$SW_ROOT/procmailrc.mharc
+
+# Pathname of directory containing logs
+LOG_DIR=$SW_ROOT/log
+
+# Pathname of directory containing CGI programs
+CGI_DIR=$SW_ROOT/cgi-bin
+
+# Pathname of directory containing raw mail archives.
+MBOX_DIR=$SW_ROOT/mbox
+
+# Pathname of directory containing HTML mail archives.
+HTML_DIR=$SW_ROOT/html
+
+# Directory containing informational pages about each list archive.
+INFO_DIR=$SW_ROOT/info
+
+# Pathname to directory containing list-specific MHonArc resource files.
+MHA_RC_DIR=$SW_ROOT/lib/mrc
+
+# Pathname to main MHonArc resource file.
+MHA_RC=$SW_ROOT/lib/common.mrc
+
+# Pathname of archive lists index page.  This page provides a list
+# of all archives available.
+ALL_LISTS_FILE=$HTML_DIR/lists.html
+
+# Pathname of header template for archive lists index page.  The
+# header template defines the markup that should occur before the
+# all archive listing.
+ALL_LISTS_HEADER=$HTML_DIR/.PNM.all-head
+
+# Pathname of footer template for archive lists index page.  The
+# footer template defines the markup that should occur after the
+# all archive listing.
+ALL_LISTS_FOOTER=$HTML_DIR/.PNM.all-foot
+
+# Text label HTML strings for all-lists table.  These can be changed
+# to fit a particular locale
+ALL_LISTS_LABEL_NAME='Name'
+ALL_LISTS_LABEL_INDEXES='Current&nbsp;Index'
+ALL_LISTS_LABEL_LAST_UPDATED='Last&nbsp;Updated'
+ALL_LISTS_LABEL_INFO='[info]'
+ALL_LISTS_LABEL_DATE='[Date]'
+ALL_LISTS_LABEL_THREADS='[Thread]'
+
+# The date/time format for showing the Last Updated time of archives
+# on all-lists page.  The format is what is supported by strftime.
+ALL_LISTS_DATE_FORMAT='%Y-%m-%d %H:%M:%S'
+
+# Pathname of header template for period index pages.
+MAIN_HEADER=$HTML_DIR/.PNM.head
+
+# Pathname of footer template for period index pages.
+MAIN_FOOTER=$HTML_DIR/.PNM.foot
+
+# SEARCH_CGI url should not have to be changed, but the namazu.cgi
+# program will need to be copied to $SW_ROOT/cgi-bin directory.
+SEARCH_CGI=$ROOT_URL/cgi-bin/namazu.cgi
+
+# URL to mbox archives.  This should be a URL that would access the
+# the filesystem location defined by MBOX_DIR.
+MBOX_URL=$ROOT_URL/mbox
+
+# URL to html archives.  This should be a URL that would access the
+# the filesystem location defined by HTML_DIR.
+HTML_URL=$ROOT_URL/html
+
+# Base URL containing informational pages about each list archive.
+# This should be a URL that would access the the filesystem location
+# defined by INFO_DIR.
+INFO_URL=$ROOT_URL/info
+
+# URL providing list of all archives.  This URL would provide the
+# user a listing of all the archives available.
+ALL_LISTS_URL=$HTML_URL
+
+# URL to CGI programs This should be a URL that would access the the
+# filesystem location defined by CGI_DIR.
+CGI_URL=$ROOT_URL/cgi-bin
+
+# URL to period navigation CGI program
+MNAV_CGI=$CGI_URL/mnav.cgi
+
+# URL to raw message extraction CGI program
+EXTRACT_CGI=$CGI_URL/extract-mesg.cgi
+
+# URL to persistent message reference CGI program
+MESG_CGI=$CGI_URL/mesg.cgi
+
+# Pathname to procmail program.  If procmail is not in your normal
+# search path, change this to the absolate pathname to the program.
+PROCMAIL=/usr/bin/procmail
+
+# Procmail search path for $PROCMAILRC.
+PROCMAIL_PATH=$SW_ROOT/bin:/usr/local/bin:/bin:/usr/bin
+
+# Pathname to formail program.  If formail is not in your normal
+# search path, change this to the absolate pathname to the program.
+FORMAIL=/usr/bin/formail
+
+# Pathname to lockfile program.  If lockfile is not in your normal
+# search path, change this to the absolate pathname to the program.
+LOCKFILE=/usr/bin/lockfile
+
+# Pathname to mknmz program.  If mknmz is not in your normal
+# search path, change this to the absolate pathname to the program.
+MKNMZ=/usr/bin/mknmz
+
+# Pathname to resource file for mknmz
+MKNMZ_RC=$SW_ROOT/cgi-bin/mknmzrc
+
+# Directory containing templates for namazu
+MKNMZ_TMPL_DIR=$SW_ROOT/cgi-bin/template
+
+# Lock time out in seconds when processing $ORGMAIL: If the lock
+# is older than specified time, then the lock will be removed by
+# force.
+#ORGMAIL_LOCK_TIMEOUT=3600
+
+# Options to procmail: Uncomment and change as needed if you want
+# define extra procmail variables
+#PROCMAILVARS="VERBOSE=yes LOGABSTRACT=yes"
+
+# Address to receive all unmatched messages.  If this variable
+# is defined, the "catch" archive will be disabled and all
+# messages that do not match an archive will be forward to $CATCH_ADDRESS.
+#CATCH_ADDRESS=
+
+# Name of the "catch" archive: Uncomment and change to desired
+# value.  Note, value should start with a "." for searching to
+# be automatically disabled.
+#CATCH_ARCHIVE=.catch
+
+# Disable catch archive: Uncomment and change value to 1 if you
+# do not want a catch archive.  If CATCH_ADDRESS is defined, this
+# variable has no effect.  However, if CATCH_ADDRESS is blank and
+# you disable the catch archive, all unmatched messages will be quietly
+# dropped.
+#DISABLE_CATCH_ARCHIVE=0
+
+# Age of mailbox file, in seconds, to be considered for processing:
+# This value should have a value which properly reflects how often
+# mail is processed.  Here, 86400 = 1 day.  Since the default template
+# crontab settings have mail processed hourly, this should be a
+# reasonable setting.  However, if you decrease the frequency of mail
+# processing, you may need to increase MTIME_AGE.
+MTIME_AGE=86400
+
+# Maximum size, in bytes, of msgid cache for detecting duplicate
+# messages.  The larger of volume of messages you process, that
+# larger the cache size should be.  The default size of 16K will
+# roughly cache that last 300 messages-ids.
+#MSGID_CACHE_SIZE=16384
+
+# Destination mailbox for final rule in $PROCMAILRC.
+# It is OKAY for this to be /dev/null.  See mk-procmailrc manpage
+# for more information.
+#FINAL_MSG_DESTINATION=/dev/null
+
+# Message header fields to determine date of a message.  Format same
+# as the DATEFIELDS resource of MHonArc.  This variable is used
+# be extract-mesg-date and is passed into MHonArc via the DATEFIELDS
+# resource.
+#MSG_DATE_FIELDS='received:delivery-date:date'
diff --git a/lib/lists.def b/lib/lists.def
new file mode 100644 (file)
index 0000000..0a5b441
--- /dev/null
@@ -0,0 +1,13730 @@
+Name: auctex-diffs
+Description: auctex-diffs
+Address: auctex-diffs@gnu.org
+No-Raw-Link: true
+
+Name: rizoma-usuarios
+Description: rizoma-usuarios
+Address: rizoma-usuarios@nongnu.org
+No-Raw-Link: true
+
+Name: bttc-commits
+Description: bttc-commits
+Address: bttc-commits@nongnu.org
+No-Raw-Link: true
+
+Name: piksel-cvs
+Description: piksel-cvs
+Address: piksel-cvs@nongnu.org
+No-Raw-Link: true
+
+Name: paparazzi-commits
+Description: paparazzi-commits
+Address: paparazzi-commits@nongnu.org
+No-Raw-Link: true
+
+Name: epsilon-doc
+Description: epsilon-doc
+Address: epsilon-doc@nongnu.org
+No-Raw-Link: true
+
+Name: bug-mcron
+Description: bug-mcron
+Address: bug-mcron@gnu.org
+No-Raw-Link: true
+
+Name: pngpp-devel
+Description: pngpp-devel
+Address: pngpp-devel@nongnu.org
+No-Raw-Link: true
+
+Name: grace-general
+Description: grace-general
+Address: grace-general@nongnu.org
+No-Raw-Link: true
+
+Name: bug-autogen
+Description: bug-autogen
+Address: bug-autogen@gnu.org
+No-Raw-Link: true
+
+Name: bug-httptunnel
+Description: bug-httptunnel
+Address: bug-httptunnel@gnu.org
+No-Raw-Link: true
+
+Name: bug-tetum
+Description: bug-tetum
+Address: bug-tetum@nongnu.org
+No-Raw-Link: true
+
+Name: hurdppc-patches
+Description: hurdppc-patches
+Address: hurdppc-patches@nongnu.org
+No-Raw-Link: true
+
+Name: mustux-devel
+Description: mustux-devel
+Address: mustux-devel@nongnu.org
+No-Raw-Link: true
+
+Name: checkurls
+Description: checkurls
+Address: checkurls@nongnu.org
+No-Raw-Link: true
+
+Name: arx-changes
+Description: arx-changes
+Address: arx-changes@nongnu.org
+No-Raw-Link: true
+
+Name: crust-info
+Description: crust-info
+Address: crust-info@nongnu.org
+No-Raw-Link: true
+
+Name: penalyze2-discussion
+Description: penalyze2-discussion
+Address: penalyze2-discussion@nongnu.org
+No-Raw-Link: true
+
+Name: unity-src
+Description: unity-src
+Address: unity-src@nongnu.org
+No-Raw-Link: true
+
+Name: fastcgipp-developers
+Description: fastcgipp-developers
+Address: fastcgipp-developers@nongnu.org
+No-Raw-Link: true
+
+Name: cgitechs-public
+Description: cgitechs-public
+Address: cgitechs-public@nongnu.org
+No-Raw-Link: true
+
+Name: chicken-meisters
+Description: chicken-meisters
+Address: chicken-meisters@nongnu.org
+No-Raw-Link: true
+
+Name: solang-users
+Description: solang-users
+Address: solang-users@nongnu.org
+No-Raw-Link: true
+
+Name: bug-autoconf
+Description: bug-autoconf
+Address: bug-autoconf@gnu.org
+No-Raw-Link: true
+
+Name: kbfx-devel
+Description: kbfx-devel
+Address: kbfx-devel@nongnu.org
+No-Raw-Link: true
+
+Name: texi2html-announce
+Description: texi2html-announce
+Address: texi2html-announce@nongnu.org
+No-Raw-Link: true
+
+Name: gnumed-announce
+Description: gnumed-announce
+Address: gnumed-announce@gnu.org
+No-Raw-Link: true
+
+Name: spatter-user
+Description: spatter-user
+Address: spatter-user@nongnu.org
+No-Raw-Link: true
+
+Name: csca-voting
+Description: csca-voting
+Address: csca-voting@nongnu.org
+No-Raw-Link: true
+
+Name: schemix-devel
+Description: schemix-devel
+Address: schemix-devel@nongnu.org
+No-Raw-Link: true
+
+Name: tui-sh-test
+Description: tui-sh-test
+Address: tui-sh-test@nongnu.org
+No-Raw-Link: true
+
+Name: tomahawk-general
+Description: tomahawk-general
+Address: tomahawk-general@nongnu.org
+No-Raw-Link: true
+
+Name: cp-tools-discuss
+Description: cp-tools-discuss
+Address: cp-tools-discuss@gnu.org
+No-Raw-Link: true
+
+Name: bug-kawa
+Description: bug-kawa
+Address: bug-kawa@gnu.org
+No-Raw-Link: true
+
+Name: mldonkey-contest
+Description: mldonkey-contest
+Address: mldonkey-contest@nongnu.org
+No-Raw-Link: true
+
+Name: erc-discuss
+Description: erc-discuss
+Address: erc-discuss@gnu.org
+No-Raw-Link: true
+
+Name: debgtk-dev
+Description: debgtk-dev
+Address: debgtk-dev@nongnu.org
+No-Raw-Link: true
+
+Name: nsl-bugs
+Description: nsl-bugs
+Address: nsl-bugs@nongnu.org
+No-Raw-Link: true
+
+Name: jilc-dev
+Description: jilc-dev
+Address: jilc-dev@nongnu.org
+No-Raw-Link: true
+
+Name: self-platform-dev
+Description: self-platform-dev
+Address: self-platform-dev@nongnu.org
+No-Raw-Link: true
+
+Name: pornfind-user
+Description: pornfind-user
+Address: pornfind-user@nongnu.org
+No-Raw-Link: true
+
+Name: bibulus-users
+Description: bibulus-users
+Address: bibulus-users@nongnu.org
+No-Raw-Link: true
+
+Name: dominion-discuss
+Description: dominion-discuss
+Address: dominion-discuss@gnu.org
+No-Raw-Link: true
+
+Name: xvii-dev
+Description: xvii-dev
+Address: xvii-dev@nongnu.org
+No-Raw-Link: true
+
+Name: xlang-develop
+Description: xlang-develop
+Address: xlang-develop@nongnu.org
+No-Raw-Link: true
+
+Name: phpgroupware-users
+Description: phpgroupware-users
+Address: phpgroupware-users@gnu.org
+No-Raw-Link: true
+
+Name: monotone-debian
+Description: monotone-debian
+Address: monotone-debian@nongnu.org
+No-Raw-Link: true
+
+Name: enigma-cvs
+Description: enigma-cvs
+Address: enigma-cvs@nongnu.org
+No-Raw-Link: true
+
+Name: doc-gnuradio
+Description: doc-gnuradio
+Address: doc-gnuradio@gnu.org
+No-Raw-Link: true
+
+Name: fsfe-france-pr
+Description: fsfe-france-pr
+Address: fsfe-france-pr@gnu.org
+No-Raw-Link: true
+
+Name: gzz-dev
+Description: gzz-dev
+Address: gzz-dev@nongnu.org
+No-Raw-Link: true
+
+Name: mudgnome-announce
+Description: mudgnome-announce
+Address: mudgnome-announce@nongnu.org
+No-Raw-Link: true
+
+Name: toon-tmp
+Description: toon-tmp
+Address: toon-tmp@nongnu.org
+No-Raw-Link: true
+
+Name: openpanorama-dev
+Description: openpanorama-dev
+Address: openpanorama-dev@nongnu.org
+No-Raw-Link: true
+
+Name: autoconf-patches
+Description: autoconf-patches
+Address: autoconf-patches@gnu.org
+No-Raw-Link: true
+
+Name: jacal-discuss
+Description: jacal-discuss
+Address: jacal-discuss@gnu.org
+No-Raw-Link: true
+
+Name: freeon-devel
+Description: freeon-devel
+Address: freeon-devel@nongnu.org
+No-Raw-Link: true
+
+Name: libcdio-pycdio-devel
+Description: libcdio-pycdio-devel
+Address: libcdio-pycdio-devel@gnu.org
+No-Raw-Link: true
+
+Name: toad-users
+Description: toad-users
+Address: toad-users@nongnu.org
+No-Raw-Link: true
+
+Name: certi-cvs
+Description: certi-cvs
+Address: certi-cvs@nongnu.org
+No-Raw-Link: true
+
+Name: info-gsl
+Description: info-gsl
+Address: info-gsl@gnu.org
+No-Raw-Link: true
+
+Name: gambit-devel
+Description: gambit-devel
+Address: gambit-devel@nongnu.org
+No-Raw-Link: true
+
+Name: wordgen-dev
+Description: wordgen-dev
+Address: wordgen-dev@nongnu.org
+No-Raw-Link: true
+
+Name: netftpserver-general
+Description: netftpserver-general
+Address: netftpserver-general@nongnu.org
+No-Raw-Link: true
+
+Name: koha-translate
+Description: koha-translate
+Address: koha-translate@nongnu.org
+No-Raw-Link: true
+
+Name: xadrez-devel
+Description: xadrez-devel
+Address: xadrez-devel@nongnu.org
+No-Raw-Link: true
+
+Name: agplmail-users
+Description: agplmail-users
+Address: agplmail-users@nongnu.org
+No-Raw-Link: true
+
+Name: biblioml
+Description: biblioml
+Address: biblioml@nongnu.org
+No-Raw-Link: true
+
+Name: ayttm-users
+Description: ayttm-users
+Address: ayttm-users@nongnu.org
+No-Raw-Link: true
+
+Name: fxscintilla-users
+Description: fxscintilla-users
+Address: fxscintilla-users@nongnu.org
+No-Raw-Link: true
+
+Name: safer-hacking
+Description: safer-hacking
+Address: safer-hacking@gnu.org
+No-Raw-Link: true
+
+Name: emacs-build
+Description: emacs-build
+Address: emacs-build@gnu.org
+No-Raw-Link: true
+
+Name: gdb
+Description: gdb
+Address: gdb@gnu.org
+No-Raw-Link: true
+
+Name: antbear-general
+Description: antbear-general
+Address: antbear-general@nongnu.org
+No-Raw-Link: true
+
+Name: gutopia-user
+Description: gutopia-user
+Address: gutopia-user@nongnu.org
+No-Raw-Link: true
+
+Name: bug-gnulib
+Description: bug-gnulib
+Address: bug-gnulib@gnu.org
+No-Raw-Link: true
+
+Name: gcpp-admin
+Description: gcpp-admin
+Address: gcpp-admin@nongnu.org
+No-Raw-Link: true
+
+Name: sdx-cvs
+Description: sdx-cvs
+Address: sdx-cvs@nongnu.org
+No-Raw-Link: true
+
+Name: elyxer-users
+Description: elyxer-users
+Address: elyxer-users@nongnu.org
+No-Raw-Link: true
+
+Name: opalesoya-dev
+Description: opalesoya-dev
+Address: opalesoya-dev@nongnu.org
+No-Raw-Link: true
+
+Name: gnu-linux-libre
+Description: gnu-linux-libre
+Address: gnu-linux-libre@nongnu.org
+No-Raw-Link: true
+
+Name: newline-user
+Description: newline-user
+Address: newline-user@nongnu.org
+No-Raw-Link: true
+
+Name: slag-dev
+Description: slag-dev
+Address: slag-dev@nongnu.org
+No-Raw-Link: true
+
+Name: freakulture
+Description: freakulture
+Address: freakulture@gnu.org
+No-Raw-Link: true
+
+Name: social-volunteers
+Description: social-volunteers
+Address: social-volunteers@gnu.org
+No-Raw-Link: true
+
+Name: pysysinfo-changes
+Description: pysysinfo-changes
+Address: pysysinfo-changes@nongnu.org
+No-Raw-Link: true
+
+Name: guppy-discussion
+Description: guppy-discussion
+Address: guppy-discussion@nongnu.org
+No-Raw-Link: true
+
+Name: websec-users
+Description: websec-users
+Address: websec-users@nongnu.org
+No-Raw-Link: true
+
+Name: certi-devel-french
+Description: certi-devel-french
+Address: certi-devel-french@nongnu.org
+No-Raw-Link: true
+
+Name: gnu-crypto-announce
+Description: gnu-crypto-announce
+Address: gnu-crypto-announce@gnu.org
+No-Raw-Link: true
+
+Name: www-bn-translators
+Description: www-bn-translators
+Address: www-bn-translators@gnu.org
+No-Raw-Link: true
+
+Name: erc-announce
+Description: erc-announce
+Address: erc-announce@gnu.org
+No-Raw-Link: true
+
+Name: techne-devel
+Description: techne-devel
+Address: techne-devel@nongnu.org
+No-Raw-Link: true
+
+Name: paragui-dev
+Description: paragui-dev
+Address: paragui-dev@nongnu.org
+No-Raw-Link: true
+
+Name: sim85-devel
+Description: sim85-devel
+Address: sim85-devel@nongnu.org
+No-Raw-Link: true
+
+Name: ykernel-proto-mono
+Description: ykernel-proto-mono
+Address: ykernel-proto-mono@nongnu.org
+No-Raw-Link: true
+
+Name: halifax-bugs
+Description: halifax-bugs
+Address: halifax-bugs@gnu.org
+No-Raw-Link: true
+
+Name: gir
+Description: gir
+Address: gir@nongnu.org
+No-Raw-Link: true
+
+Name: pspp-commits
+Description: pspp-commits
+Address: pspp-commits@gnu.org
+No-Raw-Link: true
+
+Name: tiger-user
+Description: tiger-user
+Address: tiger-user@nongnu.org
+No-Raw-Link: true
+
+Name: myexperiment-hackers
+Description: myexperiment-hackers
+Address: myexperiment-hackers@nongnu.org
+No-Raw-Link: true
+
+Name: swinput-info
+Description: swinput-info
+Address: swinput-info@nongnu.org
+No-Raw-Link: true
+
+Name: napalm-dev
+Description: napalm-dev
+Address: napalm-dev@nongnu.org
+No-Raw-Link: true
+
+Name: fsfe-france
+Description: fsfe-france
+Address: fsfe-france@gnu.org
+No-Raw-Link: true
+
+Name: bug-gnu-emacs
+Description: bug-gnu-emacs
+Address: bug-gnu-emacs@gnu.org
+No-Raw-Link: true
+
+Name: emacs-devel
+Description: emacs-devel
+Address: emacs-devel@gnu.org
+No-Raw-Link: true
+
+Name: gawk-diffs
+Description: gawk-diffs
+Address: gawk-diffs@gnu.org
+No-Raw-Link: true
+
+Name: pxe-toolkit-help
+Description: pxe-toolkit-help
+Address: pxe-toolkit-help@nongnu.org
+No-Raw-Link: true
+
+Name: auctex
+Description: auctex
+Address: auctex@gnu.org
+No-Raw-Link: true
+
+Name: xhtmltools-cvs
+Description: xhtmltools-cvs
+Address: xhtmltools-cvs@nongnu.org
+No-Raw-Link: true
+
+Name: emacsweblogs
+Description: emacsweblogs
+Address: emacsweblogs@nongnu.org
+No-Raw-Link: true
+
+Name: gnugo-devel
+Description: gnugo-devel
+Address: gnugo-devel@gnu.org
+No-Raw-Link: true
+
+Name: bongo-patches
+Description: bongo-patches
+Address: bongo-patches@nongnu.org
+No-Raw-Link: true
+
+Name: gnuheter-dev
+Description: gnuheter-dev
+Address: gnuheter-dev@nongnu.org
+No-Raw-Link: true
+
+Name: lookat-users
+Description: lookat-users
+Address: lookat-users@nongnu.org
+No-Raw-Link: true
+
+Name: elmo-users
+Description: elmo-users
+Address: elmo-users@nongnu.org
+No-Raw-Link: true
+
+Name: bug-mll2html
+Description: bug-mll2html
+Address: bug-mll2html@gnu.org
+No-Raw-Link: true
+
+Name: fsuk-manchester
+Description: fsuk-manchester
+Address: fsuk-manchester@nongnu.org
+No-Raw-Link: true
+
+Name: uniexp-list
+Description: uniexp-list
+Address: uniexp-list@nongnu.org
+No-Raw-Link: true
+
+Name: qdbm-users
+Description: qdbm-users
+Address: qdbm-users@nongnu.org
+No-Raw-Link: true
+
+Name: fsfwww-translators-es-discuss
+Description: fsfwww-translators-es-discuss
+Address: fsfwww-translators-es-discuss@gnu.org
+No-Raw-Link: true
+
+Name: www-tr-gonullucevirmenler
+Description: www-tr-gonullucevirmenler
+Address: www-tr-gonullucevirmenler@gnu.org
+No-Raw-Link: true
+
+Name: alsa-xmms-user
+Description: alsa-xmms-user
+Address: alsa-xmms-user@nongnu.org
+No-Raw-Link: true
+
+Name: gnumed-bugs
+Description: gnumed-bugs
+Address: gnumed-bugs@gnu.org
+No-Raw-Link: true
+
+Name: marvin-devel
+Description: marvin-devel
+Address: marvin-devel@nongnu.org
+No-Raw-Link: true
+
+Name: xrebind-bug
+Description: xrebind-bug
+Address: xrebind-bug@nongnu.org
+No-Raw-Link: true
+
+Name: demo-schools-discuss
+Description: demo-schools-discuss
+Address: demo-schools-discuss@nongnu.org
+No-Raw-Link: true
+
+Name: ibija-devel
+Description: ibija-devel
+Address: ibija-devel@nongnu.org
+No-Raw-Link: true
+
+Name: nel-hackers
+Description: nel-hackers
+Address: nel-hackers@nongnu.org
+No-Raw-Link: true
+
+Name: freeconsole-help
+Description: freeconsole-help
+Address: freeconsole-help@nongnu.org
+No-Raw-Link: true
+
+Name: rpge-bug
+Description: rpge-bug
+Address: rpge-bug@gnu.org
+No-Raw-Link: true
+
+Name: avrusb-dev
+Description: avrusb-dev
+Address: avrusb-dev@nongnu.org
+No-Raw-Link: true
+
+Name: fcp-general
+Description: fcp-general
+Address: fcp-general@nongnu.org
+No-Raw-Link: true
+
+Name: lmi-commits
+Description: lmi-commits
+Address: lmi-commits@nongnu.org
+No-Raw-Link: true
+
+Name: cks-admins
+Description: cks-admins
+Address: cks-admins@nongnu.org
+No-Raw-Link: true
+
+Name: libtool
+Description: libtool
+Address: libtool@gnu.org
+No-Raw-Link: true
+
+Name: nukeevent-hackers
+Description: nukeevent-hackers
+Address: nukeevent-hackers@nongnu.org
+No-Raw-Link: true
+
+Name: guile-rpc-bugs
+Description: guile-rpc-bugs
+Address: guile-rpc-bugs@gnu.org
+No-Raw-Link: true
+
+Name: trans-coord-devel
+Description: trans-coord-devel
+Address: trans-coord-devel@gnu.org
+No-Raw-Link: true
+
+Name: help-maverik
+Description: help-maverik
+Address: help-maverik@gnu.org
+No-Raw-Link: true
+
+Name: gnu-emacs-sources
+Description: gnu-emacs-sources
+Address: gnu-emacs-sources@gnu.org
+No-Raw-Link: true
+
+Name: idletesla-discusion
+Description: idletesla-discusion
+Address: idletesla-discusion@nongnu.org
+No-Raw-Link: true
+
+Name: groff-commit
+Description: groff-commit
+Address: groff-commit@gnu.org
+No-Raw-Link: true
+
+Name: freeon-users
+Description: freeon-users
+Address: freeon-users@nongnu.org
+No-Raw-Link: true
+
+Name: libchop-devel
+Description: libchop-devel
+Address: libchop-devel@nongnu.org
+No-Raw-Link: true
+
+Name: gnoppix-intern
+Description: gnoppix-intern
+Address: gnoppix-intern@nongnu.org
+No-Raw-Link: true
+
+Name: pengfork-help
+Description: pengfork-help
+Address: pengfork-help@nongnu.org
+No-Raw-Link: true
+
+Name: bug-gnufi
+Description: bug-gnufi
+Address: bug-gnufi@gnu.org
+No-Raw-Link: true
+
+Name: ututo
+Description: ututo
+Address: ututo@nongnu.org
+No-Raw-Link: true
+
+Name: qemu-trivial
+Description: qemu-trivial
+Address: qemu-trivial@nongnu.org
+No-Raw-Link: true
+
+Name: aleona-cvs
+Description: aleona-cvs
+Address: aleona-cvs@nongnu.org
+No-Raw-Link: true
+
+Name: fxvt-announce
+Description: fxvt-announce
+Address: fxvt-announce@nongnu.org
+No-Raw-Link: true
+
+Name: vhdl-posix-general
+Description: vhdl-posix-general
+Address: vhdl-posix-general@nongnu.org
+No-Raw-Link: true
+
+Name: myam-devel
+Description: myam-devel
+Address: myam-devel@nongnu.org
+No-Raw-Link: true
+
+Name: grace-website
+Description: grace-website
+Address: grace-website@nongnu.org
+No-Raw-Link: true
+
+Name: fpm-devel
+Description: fpm-devel
+Address: fpm-devel@nongnu.org
+No-Raw-Link: true
+
+Name: forge-main
+Description: forge-main
+Address: forge-main@nongnu.org
+No-Raw-Link: true
+
+Name: epsilon-bug
+Description: epsilon-bug
+Address: epsilon-bug@nongnu.org
+No-Raw-Link: true
+
+Name: thales-announce
+Description: thales-announce
+Address: thales-announce@gnu.org
+No-Raw-Link: true
+
+Name: gnash-commit
+Description: gnash-commit
+Address: gnash-commit@gnu.org
+No-Raw-Link: true
+
+Name: haploid-users
+Description: haploid-users
+Address: haploid-users@nongnu.org
+No-Raw-Link: true
+
+Name: paparazzi-devel
+Description: paparazzi-devel
+Address: paparazzi-devel@nongnu.org
+No-Raw-Link: true
+
+Name: rpmsirvur-devel
+Description: rpmsirvur-devel
+Address: rpmsirvur-devel@nongnu.org
+No-Raw-Link: true
+
+Name: bug-rcs
+Description: bug-rcs
+Address: bug-rcs@gnu.org
+No-Raw-Link: true
+
+Name: giftcurs-user
+Description: giftcurs-user
+Address: giftcurs-user@nongnu.org
+No-Raw-Link: true
+
+Name: web-cyradm-users
+Description: web-cyradm-users
+Address: web-cyradm-users@nongnu.org
+No-Raw-Link: true
+
+Name: info-gnu-music
+Description: info-gnu-music
+Address: info-gnu-music@gnu.org
+No-Raw-Link: true
+
+Name: fnkdat-discuss
+Description: fnkdat-discuss
+Address: fnkdat-discuss@nongnu.org
+No-Raw-Link: true
+
+Name: help-gnuts
+Description: help-gnuts
+Address: help-gnuts@gnu.org
+No-Raw-Link: true
+
+Name: help-libidn
+Description: help-libidn
+Address: help-libidn@gnu.org
+No-Raw-Link: true
+
+Name: openvds-devel
+Description: openvds-devel
+Address: openvds-devel@nongnu.org
+No-Raw-Link: true
+
+Name: dpge-list
+Description: dpge-list
+Address: dpge-list@nongnu.org
+No-Raw-Link: true
+
+Name: comma-devel
+Description: comma-devel
+Address: comma-devel@nongnu.org
+No-Raw-Link: true
+
+Name: bug-spacechart
+Description: bug-spacechart
+Address: bug-spacechart@gnu.org
+No-Raw-Link: true
+
+Name: social-mediagoblin
+Description: social-mediagoblin
+Address: social-mediagoblin@gnu.org
+No-Raw-Link: true
+
+Name: c2m-project
+Description: c2m-project
+Address: c2m-project@nongnu.org
+No-Raw-Link: true
+
+Name: xanis-dev
+Description: xanis-dev
+Address: xanis-dev@nongnu.org
+No-Raw-Link: true
+
+Name: testlist
+Description: testlist
+Address: testlist@gnu.org
+No-Raw-Link: true
+
+Name: mp3player-help
+Description: mp3player-help
+Address: mp3player-help@nongnu.org
+No-Raw-Link: true
+
+Name: freefont-announce
+Description: freefont-announce
+Address: freefont-announce@gnu.org
+No-Raw-Link: true
+
+Name: fsfe-france-eval
+Description: fsfe-france-eval
+Address: fsfe-france-eval@gnu.org
+No-Raw-Link: true
+
+Name: ginebra-devs
+Description: ginebra-devs
+Address: ginebra-devs@nongnu.org
+No-Raw-Link: true
+
+Name: unitcheck-dev
+Description: unitcheck-dev
+Address: unitcheck-dev@nongnu.org
+No-Raw-Link: true
+
+Name: trans-coord-news
+Description: trans-coord-news
+Address: trans-coord-news@gnu.org
+No-Raw-Link: true
+
+Name: freebilling-greek
+Description: freebilling-greek
+Address: freebilling-greek@nongnu.org
+No-Raw-Link: true
+
+Name: gnump3d-devel
+Description: gnump3d-devel
+Address: gnump3d-devel@gnu.org
+No-Raw-Link: true
+
+Name: xmakemol-announce
+Description: xmakemol-announce
+Address: xmakemol-announce@nongnu.org
+No-Raw-Link: true
+
+Name: bison-patches
+Description: bison-patches
+Address: bison-patches@gnu.org
+No-Raw-Link: true
+
+Name: bug-gnu-queue
+Description: bug-gnu-queue
+Address: bug-gnu-queue@gnu.org
+No-Raw-Link: true
+
+Name: nss-mysql-users
+Description: nss-mysql-users
+Address: nss-mysql-users@nongnu.org
+No-Raw-Link: true
+
+Name: freesdp-devel
+Description: freesdp-devel
+Address: freesdp-devel@nongnu.org
+No-Raw-Link: true
+
+Name: babe-moddevel
+Description: babe-moddevel
+Address: babe-moddevel@nongnu.org
+No-Raw-Link: true
+
+Name: bug-jel
+Description: bug-jel
+Address: bug-jel@gnu.org
+No-Raw-Link: true
+
+Name: oscafe-user
+Description: oscafe-user
+Address: oscafe-user@nongnu.org
+No-Raw-Link: true
+
+Name: iris-devel
+Description: iris-devel
+Address: iris-devel@nongnu.org
+No-Raw-Link: true
+
+Name: pcbios-devel
+Description: pcbios-devel
+Address: pcbios-devel@nongnu.org
+No-Raw-Link: true
+
+Name: masterlibre-list
+Description: masterlibre-list
+Address: masterlibre-list@nongnu.org
+No-Raw-Link: true
+
+Name: help-gsasl
+Description: help-gsasl
+Address: help-gsasl@gnu.org
+No-Raw-Link: true
+
+Name: yafray-devel
+Description: yafray-devel
+Address: yafray-devel@nongnu.org
+No-Raw-Link: true
+
+Name: bug-sh-utils
+Description: bug-sh-utils
+Address: bug-sh-utils@gnu.org
+No-Raw-Link: true
+
+Name: sword-announce
+Description: sword-announce
+Address: sword-announce@nongnu.org
+No-Raw-Link: true
+
+Name: jason-dev
+Description: jason-dev
+Address: jason-dev@nongnu.org
+No-Raw-Link: true
+
+Name: fastcgipp-users
+Description: fastcgipp-users
+Address: fastcgipp-users@nongnu.org
+No-Raw-Link: true
+
+Name: musik-devel
+Description: musik-devel
+Address: musik-devel@nongnu.org
+No-Raw-Link: true
+
+Name: mpfrcpp-common
+Description: mpfrcpp-common
+Address: mpfrcpp-common@nongnu.org
+No-Raw-Link: true
+
+Name: build-inetutils
+Description: build-inetutils
+Address: build-inetutils@gnu.org
+No-Raw-Link: true
+
+Name: pingus-cvs
+Description: pingus-cvs
+Address: pingus-cvs@nongnu.org
+No-Raw-Link: true
+
+Name: www-eo-tradukado
+Description: www-eo-tradukado
+Address: www-eo-tradukado@gnu.org
+No-Raw-Link: true
+
+Name: ffss-dev
+Description: ffss-dev
+Address: ffss-dev@nongnu.org
+No-Raw-Link: true
+
+Name: bug-gforth
+Description: bug-gforth
+Address: bug-gforth@gnu.org
+No-Raw-Link: true
+
+Name: fsfstatus
+Description: fsfstatus
+Address: fsfstatus@gnu.org
+No-Raw-Link: true
+
+Name: guss-commit
+Description: guss-commit
+Address: guss-commit@gnu.org
+No-Raw-Link: true
+
+Name: freecontrol-develop
+Description: freecontrol-develop
+Address: freecontrol-develop@nongnu.org
+No-Raw-Link: true
+
+Name: dfey-public-discuss
+Description: dfey-public-discuss
+Address: dfey-public-discuss@nongnu.org
+No-Raw-Link: true
+
+Name: gcmd-users
+Description: gcmd-users
+Address: gcmd-users@nongnu.org
+No-Raw-Link: true
+
+Name: weps-devel
+Description: weps-devel
+Address: weps-devel@nongnu.org
+No-Raw-Link: true
+
+Name: freetype-devel
+Description: freetype-devel
+Address: freetype-devel@nongnu.org
+No-Raw-Link: true
+
+Name: social-p2p
+Description: social-p2p
+Address: social-p2p@gnu.org
+No-Raw-Link: true
+
+Name: gene-announce
+Description: gene-announce
+Address: gene-announce@nongnu.org
+No-Raw-Link: true
+
+Name: guile-reader-devel
+Description: guile-reader-devel
+Address: guile-reader-devel@nongnu.org
+No-Raw-Link: true
+
+Name: bug-gnu-sql
+Description: bug-gnu-sql
+Address: bug-gnu-sql@gnu.org
+No-Raw-Link: true
+
+Name: www-commits
+Description: www-commits
+Address: www-commits@gnu.org
+No-Raw-Link: true
+
+Name: gchemutils-main
+Description: gchemutils-main
+Address: gchemutils-main@nongnu.org
+No-Raw-Link: true
+
+Name: pspp-cvs
+Description: pspp-cvs
+Address: pspp-cvs@gnu.org
+No-Raw-Link: true
+
+Name: hit-development
+Description: hit-development
+Address: hit-development@nongnu.org
+No-Raw-Link: true
+
+Name: kmdbg-main
+Description: kmdbg-main
+Address: kmdbg-main@nongnu.org
+No-Raw-Link: true
+
+Name: denemo-devel
+Description: denemo-devel
+Address: denemo-devel@gnu.org
+No-Raw-Link: true
+
+Name: libreplanet-se
+Description: libreplanet-se
+Address: libreplanet-se@libreplanet.org
+No-Raw-Link: true
+
+Name: demexp-cvs
+Description: demexp-cvs
+Address: demexp-cvs@nongnu.org
+No-Raw-Link: true
+
+Name: bug-anubis
+Description: bug-anubis
+Address: bug-anubis@gnu.org
+No-Raw-Link: true
+
+Name: sitetool-gg
+Description: sitetool-gg
+Address: sitetool-gg@nongnu.org
+No-Raw-Link: true
+
+Name: cameleon-dev
+Description: cameleon-dev
+Address: cameleon-dev@nongnu.org
+No-Raw-Link: true
+
+Name: bug-gnu-crypto
+Description: bug-gnu-crypto
+Address: bug-gnu-crypto@nongnu.org
+No-Raw-Link: true
+
+Name: cfengine-develop
+Description: cfengine-develop
+Address: cfengine-develop@nongnu.org
+No-Raw-Link: true
+
+Name: vnet-dev
+Description: vnet-dev
+Address: vnet-dev@nongnu.org
+No-Raw-Link: true
+
+Name: ghomemover-announces
+Description: ghomemover-announces
+Address: ghomemover-announces@nongnu.org
+No-Raw-Link: true
+
+Name: info-gnats
+Description: info-gnats
+Address: info-gnats@gnu.org
+No-Raw-Link: true
+
+Name: bug-gnu-music
+Description: bug-gnu-music
+Address: bug-gnu-music@gnu.org
+No-Raw-Link: true
+
+Name: dotgnu-libs-devel
+Description: dotgnu-libs-devel
+Address: dotgnu-libs-devel@gnu.org
+No-Raw-Link: true
+
+Name: info-gv
+Description: info-gv
+Address: info-gv@gnu.org
+No-Raw-Link: true
+
+Name: dazuko-devel
+Description: dazuko-devel
+Address: dazuko-devel@nongnu.org
+No-Raw-Link: true
+
+Name: bug-libcdio
+Description: bug-libcdio
+Address: bug-libcdio@gnu.org
+No-Raw-Link: true
+
+Name: openclone-announce
+Description: openclone-announce
+Address: openclone-announce@nongnu.org
+No-Raw-Link: true
+
+Name: tetuhi-vgs
+Description: tetuhi-vgs
+Address: tetuhi-vgs@nongnu.org
+No-Raw-Link: true
+
+Name: fmsystem-svn
+Description: fmsystem-svn
+Address: fmsystem-svn@nongnu.org
+No-Raw-Link: true
+
+Name: fluxbox-aa-users
+Description: fluxbox-aa-users
+Address: fluxbox-aa-users@nongnu.org
+No-Raw-Link: true
+
+Name: lotb--users-spanish
+Description: lotb--users-spanish
+Address: lotb--users-spanish@nongnu.org
+No-Raw-Link: true
+
+Name: phpgroupware-tracker
+Description: phpgroupware-tracker
+Address: phpgroupware-tracker@gnu.org
+No-Raw-Link: true
+
+Name: qsos-commits
+Description: qsos-commits
+Address: qsos-commits@nongnu.org
+No-Raw-Link: true
+
+Name: jsptutorial-devel
+Description: jsptutorial-devel
+Address: jsptutorial-devel@nongnu.org
+No-Raw-Link: true
+
+Name: bug-lilypond
+Description: bug-lilypond
+Address: bug-lilypond@gnu.org
+No-Raw-Link: true
+
+Name: kenozooid-devel
+Description: kenozooid-devel
+Address: kenozooid-devel@nongnu.org
+No-Raw-Link: true
+
+Name: coposys-dev
+Description: coposys-dev
+Address: coposys-dev@nongnu.org
+No-Raw-Link: true
+
+Name: aleader-dev
+Description: aleader-dev
+Address: aleader-dev@nongnu.org
+No-Raw-Link: true
+
+Name: janosik-devel
+Description: janosik-devel
+Address: janosik-devel@nongnu.org
+No-Raw-Link: true
+
+Name: bug-gnu-shogi
+Description: bug-gnu-shogi
+Address: bug-gnu-shogi@gnu.org
+No-Raw-Link: true
+
+Name: pditools
+Description: pditools
+Address: pditools@nongnu.org
+No-Raw-Link: true
+
+Name: luv-dev
+Description: luv-dev
+Address: luv-dev@nongnu.org
+No-Raw-Link: true
+
+Name: ruby-tut-developer
+Description: ruby-tut-developer
+Address: ruby-tut-developer@nongnu.org
+No-Raw-Link: true
+
+Name: akii-devel
+Description: akii-devel
+Address: akii-devel@nongnu.org
+No-Raw-Link: true
+
+Name: ding-es-de-announce
+Description: ding-es-de-announce
+Address: ding-es-de-announce@nongnu.org
+No-Raw-Link: true
+
+Name: usertools-bugs
+Description: usertools-bugs
+Address: usertools-bugs@nongnu.org
+No-Raw-Link: true
+
+Name: m4-patches
+Description: m4-patches
+Address: m4-patches@gnu.org
+No-Raw-Link: true
+
+Name: via-commits
+Description: via-commits
+Address: via-commits@nongnu.org
+No-Raw-Link: true
+
+Name: ru-hurd-maillist
+Description: ru-hurd-maillist
+Address: ru-hurd-maillist@nongnu.org
+No-Raw-Link: true
+
+Name: fontdudes-hindi
+Description: fontdudes-hindi
+Address: fontdudes-hindi@nongnu.org
+No-Raw-Link: true
+
+Name: cvs-announce-binaries
+Description: cvs-announce-binaries
+Address: cvs-announce-binaries@nongnu.org
+No-Raw-Link: true
+
+Name: olpc-uk
+Description: olpc-uk
+Address: olpc-uk@nongnu.org
+No-Raw-Link: true
+
+Name: info-nano
+Description: info-nano
+Address: info-nano@gnu.org
+No-Raw-Link: true
+
+Name: mldonkey-users
+Description: mldonkey-users
+Address: mldonkey-users@nongnu.org
+No-Raw-Link: true
+
+Name: picolibre-developers
+Description: picolibre-developers
+Address: picolibre-developers@nongnu.org
+No-Raw-Link: true
+
+Name: unity-irc3
+Description: unity-irc3
+Address: unity-irc3@nongnu.org
+No-Raw-Link: true
+
+Name: help-leg
+Description: help-leg
+Address: help-leg@gnu.org
+No-Raw-Link: true
+
+Name: sourceflow-users
+Description: sourceflow-users
+Address: sourceflow-users@nongnu.org
+No-Raw-Link: true
+
+Name: goanseech-devel
+Description: goanseech-devel
+Address: goanseech-devel@nongnu.org
+No-Raw-Link: true
+
+Name: dina-project-admins
+Description: dina-project-admins
+Address: dina-project-admins@nongnu.org
+No-Raw-Link: true
+
+Name: bitbucket-hackers
+Description: bitbucket-hackers
+Address: bitbucket-hackers@nongnu.org
+No-Raw-Link: true
+
+Name: mibble-devel
+Description: mibble-devel
+Address: mibble-devel@nongnu.org
+No-Raw-Link: true
+
+Name: guile-avahi-bugs
+Description: guile-avahi-bugs
+Address: guile-avahi-bugs@nongnu.org
+No-Raw-Link: true
+
+Name: fsfe-freedom
+Description: fsfe-freedom
+Address: fsfe-freedom@gnu.org
+No-Raw-Link: true
+
+Name: pdb-private
+Description: pdb-private
+Address: pdb-private@nongnu.org
+No-Raw-Link: true
+
+Name: libconf-dev
+Description: libconf-dev
+Address: libconf-dev@nongnu.org
+No-Raw-Link: true
+
+Name: phpquiz-public
+Description: phpquiz-public
+Address: phpquiz-public@nongnu.org
+No-Raw-Link: true
+
+Name: auctex-commit
+Description: auctex-commit
+Address: auctex-commit@gnu.org
+No-Raw-Link: true
+
+Name: amguik-devel
+Description: amguik-devel
+Address: amguik-devel@nongnu.org
+No-Raw-Link: true
+
+Name: dotgnu-pnet
+Description: dotgnu-pnet
+Address: dotgnu-pnet@gnu.org
+No-Raw-Link: true
+
+Name: vacation-list
+Description: vacation-list
+Address: vacation-list@nongnu.org
+No-Raw-Link: true
+
+Name: gksu-devel
+Description: gksu-devel
+Address: gksu-devel@nongnu.org
+No-Raw-Link: true
+
+Name: mango-advocacy
+Description: mango-advocacy
+Address: mango-advocacy@nongnu.org
+No-Raw-Link: true
+
+Name: monotone-i18n
+Description: monotone-i18n
+Address: monotone-i18n@nongnu.org
+No-Raw-Link: true
+
+Name: guppy-announce
+Description: guppy-announce
+Address: guppy-announce@nongnu.org
+No-Raw-Link: true
+
+Name: vrs-development
+Description: vrs-development
+Address: vrs-development@nongnu.org
+No-Raw-Link: true
+
+Name: freetype-announce
+Description: freetype-announce
+Address: freetype-announce@nongnu.org
+No-Raw-Link: true
+
+Name: realtime-users
+Description: realtime-users
+Address: realtime-users@nongnu.org
+No-Raw-Link: true
+
+Name: gnump3d-commits
+Description: gnump3d-commits
+Address: gnump3d-commits@gnu.org
+No-Raw-Link: true
+
+Name: help-nano
+Description: help-nano
+Address: help-nano@gnu.org
+No-Raw-Link: true
+
+Name: projectaxis-cvs
+Description: projectaxis-cvs
+Address: projectaxis-cvs@nongnu.org
+No-Raw-Link: true
+
+Name: lash-dev
+Description: lash-dev
+Address: lash-dev@nongnu.org
+No-Raw-Link: true
+
+Name: tof-general
+Description: tof-general
+Address: tof-general@nongnu.org
+No-Raw-Link: true
+
+Name: elisp-code-dired
+Description: elisp-code-dired
+Address: elisp-code-dired@nongnu.org
+No-Raw-Link: true
+
+Name: bug-gsl
+Description: bug-gsl
+Address: bug-gsl@gnu.org
+No-Raw-Link: true
+
+Name: slgbd-announce
+Description: slgbd-announce
+Address: slgbd-announce@nongnu.org
+No-Raw-Link: true
+
+Name: help-gnunet
+Description: help-gnunet
+Address: help-gnunet@gnu.org
+No-Raw-Link: true
+
+Name: sitetool-dev
+Description: sitetool-dev
+Address: sitetool-dev@nongnu.org
+No-Raw-Link: true
+
+Name: lilypond-user-fr
+Description: lilypond-user-fr
+Address: lilypond-user-fr@gnu.org
+No-Raw-Link: true
+
+Name: phpmymembers-devel
+Description: phpmymembers-devel
+Address: phpmymembers-devel@nongnu.org
+No-Raw-Link: true
+
+Name: help-gengen
+Description: help-gengen
+Address: help-gengen@gnu.org
+No-Raw-Link: true
+
+Name: svas-public
+Description: svas-public
+Address: svas-public@nongnu.org
+No-Raw-Link: true
+
+Name: criawips-cvs
+Description: criawips-cvs
+Address: criawips-cvs@nongnu.org
+No-Raw-Link: true
+
+Name: gcjwebplugin-user
+Description: gcjwebplugin-user
+Address: gcjwebplugin-user@nongnu.org
+No-Raw-Link: true
+
+Name: ipfc-announce
+Description: ipfc-announce
+Address: ipfc-announce@nongnu.org
+No-Raw-Link: true
+
+Name: loco-dev
+Description: loco-dev
+Address: loco-dev@nongnu.org
+No-Raw-Link: true
+
+Name: plash
+Description: plash
+Address: plash@nongnu.org
+No-Raw-Link: true
+
+Name: weewm-support
+Description: weewm-support
+Address: weewm-support@nongnu.org
+No-Raw-Link: true
+
+Name: logo-discussion
+Description: logo-discussion
+Address: logo-discussion@nongnu.org
+No-Raw-Link: true
+
+Name: nss-mysql-devel
+Description: nss-mysql-devel
+Address: nss-mysql-devel@nongnu.org
+No-Raw-Link: true
+
+Name: rdiff-backup-commits
+Description: rdiff-backup-commits
+Address: rdiff-backup-commits@nongnu.org
+No-Raw-Link: true
+
+Name: help-motti
+Description: help-motti
+Address: help-motti@gnu.org
+No-Raw-Link: true
+
+Name: smurgaborf-devel
+Description: smurgaborf-devel
+Address: smurgaborf-devel@nongnu.org
+No-Raw-Link: true
+
+Name: bug-mdk
+Description: bug-mdk
+Address: bug-mdk@gnu.org
+No-Raw-Link: true
+
+Name: gnomoradio-users
+Description: gnomoradio-users
+Address: gnomoradio-users@nongnu.org
+No-Raw-Link: true
+
+Name: gnustep-dev
+Description: gnustep-dev
+Address: gnustep-dev@gnu.org
+No-Raw-Link: true
+
+Name: help-stow
+Description: help-stow
+Address: help-stow@gnu.org
+No-Raw-Link: true
+
+Name: axiom-mail
+Description: axiom-mail
+Address: axiom-mail@nongnu.org
+No-Raw-Link: true
+
+Name: debfr-faq-cvs
+Description: debfr-faq-cvs
+Address: debfr-faq-cvs@nongnu.org
+No-Raw-Link: true
+
+Name: m16c-dev
+Description: m16c-dev
+Address: m16c-dev@nongnu.org
+No-Raw-Link: true
+
+Name: ff3d-dev
+Description: ff3d-dev
+Address: ff3d-dev@nongnu.org
+No-Raw-Link: true
+
+Name: dolibarr-jexiste
+Description: dolibarr-jexiste
+Address: dolibarr-jexiste@nongnu.org
+No-Raw-Link: true
+
+Name: gworkspace-discuss
+Description: gworkspace-discuss
+Address: gworkspace-discuss@nongnu.org
+No-Raw-Link: true
+
+Name: gsmokefree-users
+Description: gsmokefree-users
+Address: gsmokefree-users@nongnu.org
+No-Raw-Link: true
+
+Name: wesnoth-dev
+Description: wesnoth-dev
+Address: wesnoth-dev@nongnu.org
+No-Raw-Link: true
+
+Name: gnewsense-art
+Description: gnewsense-art
+Address: gnewsense-art@nongnu.org
+No-Raw-Link: true
+
+Name: stratagus-ccl
+Description: stratagus-ccl
+Address: stratagus-ccl@nongnu.org
+No-Raw-Link: true
+
+Name: ngodb
+Description: ngodb
+Address: ngodb@nongnu.org
+No-Raw-Link: true
+
+Name: dolibarr-dev-en
+Description: dolibarr-dev-en
+Address: dolibarr-dev-en@nongnu.org
+No-Raw-Link: true
+
+Name: kafeine
+Description: kafeine
+Address: kafeine@nongnu.org
+No-Raw-Link: true
+
+Name: beta-xlogmaster
+Description: beta-xlogmaster
+Address: beta-xlogmaster@gnu.org
+No-Raw-Link: true
+
+Name: rapp-announce
+Description: rapp-announce
+Address: rapp-announce@nongnu.org
+No-Raw-Link: true
+
+Name: riece-discuss
+Description: riece-discuss
+Address: riece-discuss@nongnu.org
+No-Raw-Link: true
+
+Name: www-he-editing
+Description: www-he-editing
+Address: www-he-editing@nongnu.org
+No-Raw-Link: true
+
+Name: windows7sins
+Description: windows7sins
+Address: windows7sins@gnu.org
+No-Raw-Link: true
+
+Name: cfperl-devel
+Description: cfperl-devel
+Address: cfperl-devel@nongnu.org
+No-Raw-Link: true
+
+Name: bug-xorriso
+Description: bug-xorriso
+Address: bug-xorriso@gnu.org
+No-Raw-Link: true
+
+Name: dataexplorer-help
+Description: dataexplorer-help
+Address: dataexplorer-help@nongnu.org
+No-Raw-Link: true
+
+Name: feuerkraft-cvs
+Description: feuerkraft-cvs
+Address: feuerkraft-cvs@nongnu.org
+No-Raw-Link: true
+
+Name: ssp-pack-protocol
+Description: ssp-pack-protocol
+Address: ssp-pack-protocol@nongnu.org
+No-Raw-Link: true
+
+Name: romance-dev
+Description: romance-dev
+Address: romance-dev@nongnu.org
+No-Raw-Link: true
+
+Name: icmptunnel-ddd
+Description: icmptunnel-ddd
+Address: icmptunnel-ddd@nongnu.org
+No-Raw-Link: true
+
+Name: muddleftpd-track
+Description: muddleftpd-track
+Address: muddleftpd-track@nongnu.org
+No-Raw-Link: true
+
+Name: tuxread-dev
+Description: tuxread-dev
+Address: tuxread-dev@nongnu.org
+No-Raw-Link: true
+
+Name: xmldiff-dev
+Description: xmldiff-dev
+Address: xmldiff-dev@nongnu.org
+No-Raw-Link: true
+
+Name: mp3player-bugs
+Description: mp3player-bugs
+Address: mp3player-bugs@nongnu.org
+No-Raw-Link: true
+
+Name: ding-es-de
+Description: ding-es-de
+Address: ding-es-de@nongnu.org
+No-Raw-Link: true
+
+Name: gmemo-dev
+Description: gmemo-dev
+Address: gmemo-dev@nongnu.org
+No-Raw-Link: true
+
+Name: libcvs-perl-announce
+Description: libcvs-perl-announce
+Address: libcvs-perl-announce@nongnu.org
+No-Raw-Link: true
+
+Name: jia-users
+Description: jia-users
+Address: jia-users@nongnu.org
+No-Raw-Link: true
+
+Name: libcvs-spec-dev
+Description: libcvs-spec-dev
+Address: libcvs-spec-dev@gnu.org
+No-Raw-Link: true
+
+Name: xortex-users
+Description: xortex-users
+Address: xortex-users@nongnu.org
+No-Raw-Link: true
+
+Name: wui-public
+Description: wui-public
+Address: wui-public@nongnu.org
+No-Raw-Link: true
+
+Name: bug-gnu-electric
+Description: bug-gnu-electric
+Address: bug-gnu-electric@gnu.org
+No-Raw-Link: true
+
+Name: info-mcsim
+Description: info-mcsim
+Address: info-mcsim@gnu.org
+No-Raw-Link: true
+
+Name: japitools-results
+Description: japitools-results
+Address: japitools-results@nongnu.org
+No-Raw-Link: true
+
+Name: d-moon-blue-devel
+Description: d-moon-blue-devel
+Address: d-moon-blue-devel@nongnu.org
+No-Raw-Link: true
+
+Name: know-how-devel
+Description: know-how-devel
+Address: know-how-devel@nongnu.org
+No-Raw-Link: true
+
+Name: eeguides-updates
+Description: eeguides-updates
+Address: eeguides-updates@nongnu.org
+No-Raw-Link: true
+
+Name: treebind
+Description: treebind
+Address: treebind@nongnu.org
+No-Raw-Link: true
+
+Name: opental-checkins
+Description: opental-checkins
+Address: opental-checkins@nongnu.org
+No-Raw-Link: true
+
+Name: w3-dev
+Description: w3-dev
+Address: w3-dev@gnu.org
+No-Raw-Link: true
+
+Name: gnu-arch-users
+Description: gnu-arch-users
+Address: gnu-arch-users@gnu.org
+No-Raw-Link: true
+
+Name: gnoppix-www
+Description: gnoppix-www
+Address: gnoppix-www@nongnu.org
+No-Raw-Link: true
+
+Name: unitheme-users
+Description: unitheme-users
+Address: unitheme-users@nongnu.org
+No-Raw-Link: true
+
+Name: cvs-utils
+Description: cvs-utils
+Address: cvs-utils@gnu.org
+No-Raw-Link: true
+
+Name: avrdude-dev
+Description: avrdude-dev
+Address: avrdude-dev@nongnu.org
+No-Raw-Link: true
+
+Name: apps-gnustep
+Description: apps-gnustep
+Address: apps-gnustep@gnu.org
+No-Raw-Link: true
+
+Name: tlf-devel
+Description: tlf-devel
+Address: tlf-devel@nongnu.org
+No-Raw-Link: true
+
+Name: savannah-i18n
+Description: savannah-i18n
+Address: savannah-i18n@gnu.org
+No-Raw-Link: true
+
+Name: gcontacts-users
+Description: gcontacts-users
+Address: gcontacts-users@nongnu.org
+No-Raw-Link: true
+
+Name: pygrep-users
+Description: pygrep-users
+Address: pygrep-users@nongnu.org
+No-Raw-Link: true
+
+Name: heroes-announce
+Description: heroes-announce
+Address: heroes-announce@nongnu.org
+No-Raw-Link: true
+
+Name: stalkerfs-discuss
+Description: stalkerfs-discuss
+Address: stalkerfs-discuss@gnu.org
+No-Raw-Link: true
+
+Name: aeskulap-users
+Description: aeskulap-users
+Address: aeskulap-users@nongnu.org
+No-Raw-Link: true
+
+Name: glue
+Description: glue
+Address: glue@gnu.org
+No-Raw-Link: true
+
+Name: gpse-wishes
+Description: gpse-wishes
+Address: gpse-wishes@nongnu.org
+No-Raw-Link: true
+
+Name: aleader-change
+Description: aleader-change
+Address: aleader-change@nongnu.org
+No-Raw-Link: true
+
+Name: gpaint-user
+Description: gpaint-user
+Address: gpaint-user@gnu.org
+No-Raw-Link: true
+
+Name: site-engine-wcagcheck
+Description: site-engine-wcagcheck
+Address: site-engine-wcagcheck@nongnu.org
+No-Raw-Link: true
+
+Name: dotgnu-auth
+Description: dotgnu-auth
+Address: dotgnu-auth@gnu.org
+No-Raw-Link: true
+
+Name: woom-user
+Description: woom-user
+Address: woom-user@nongnu.org
+No-Raw-Link: true
+
+Name: freeipmi-users
+Description: freeipmi-users
+Address: freeipmi-users@gnu.org
+No-Raw-Link: true
+
+Name: help-gnubatch
+Description: help-gnubatch
+Address: help-gnubatch@gnu.org
+No-Raw-Link: true
+
+Name: smc-users
+Description: smc-users
+Address: smc-users@nongnu.org
+No-Raw-Link: true
+
+Name: lordsawar-discuss
+Description: lordsawar-discuss
+Address: lordsawar-discuss@nongnu.org
+No-Raw-Link: true
+
+Name: guitoo-devel
+Description: guitoo-devel
+Address: guitoo-devel@nongnu.org
+No-Raw-Link: true
+
+Name: help-gplusplus
+Description: help-gplusplus
+Address: help-gplusplus@gnu.org
+No-Raw-Link: true
+
+Name: jhcfonts-announce
+Description: jhcfonts-announce
+Address: jhcfonts-announce@nongnu.org
+No-Raw-Link: true
+
+Name: bug-miscfiles
+Description: bug-miscfiles
+Address: bug-miscfiles@gnu.org
+No-Raw-Link: true
+
+Name: users-prolog
+Description: users-prolog
+Address: users-prolog@gnu.org
+No-Raw-Link: true
+
+Name: l4hurd-commits
+Description: l4hurd-commits
+Address: l4hurd-commits@nongnu.org
+No-Raw-Link: true
+
+Name: gaelle-devel
+Description: gaelle-devel
+Address: gaelle-devel@nongnu.org
+No-Raw-Link: true
+
+Name: opental-dev
+Description: opental-dev
+Address: opental-dev@nongnu.org
+No-Raw-Link: true
+
+Name: emacs-br-commit
+Description: emacs-br-commit
+Address: emacs-br-commit@nongnu.org
+No-Raw-Link: true
+
+Name: fkt-devel
+Description: fkt-devel
+Address: fkt-devel@nongnu.org
+No-Raw-Link: true
+
+Name: aeneas-bug
+Description: aeneas-bug
+Address: aeneas-bug@gnu.org
+No-Raw-Link: true
+
+Name: gta-list
+Description: gta-list
+Address: gta-list@nongnu.org
+No-Raw-Link: true
+
+Name: stow-devel
+Description: stow-devel
+Address: stow-devel@gnu.org
+No-Raw-Link: true
+
+Name: vcdimager-gui-devel
+Description: vcdimager-gui-devel
+Address: vcdimager-gui-devel@gnu.org
+No-Raw-Link: true
+
+Name: scew-devel
+Description: scew-devel
+Address: scew-devel@nongnu.org
+No-Raw-Link: true
+
+Name: timebank-users
+Description: timebank-users
+Address: timebank-users@nongnu.org
+No-Raw-Link: true
+
+Name: gnunet-developers
+Description: gnunet-developers
+Address: gnunet-developers@gnu.org
+No-Raw-Link: true
+
+Name: elisp-es-traductores
+Description: elisp-es-traductores
+Address: elisp-es-traductores@nongnu.org
+No-Raw-Link: true
+
+Name: mailutils-i18n
+Description: mailutils-i18n
+Address: mailutils-i18n@gnu.org
+No-Raw-Link: true
+
+Name: wcompta-support
+Description: wcompta-support
+Address: wcompta-support@nongnu.org
+No-Raw-Link: true
+
+Name: adaldap-users
+Description: adaldap-users
+Address: adaldap-users@nongnu.org
+No-Raw-Link: true
+
+Name: maitretarot-commit
+Description: maitretarot-commit
+Address: maitretarot-commit@nongnu.org
+No-Raw-Link: true
+
+Name: adonthell-general
+Description: adonthell-general
+Address: adonthell-general@nongnu.org
+No-Raw-Link: true
+
+Name: tinycc-devel
+Description: tinycc-devel
+Address: tinycc-devel@nongnu.org
+No-Raw-Link: true
+
+Name: lyxblogger-users
+Description: lyxblogger-users
+Address: lyxblogger-users@nongnu.org
+No-Raw-Link: true
+
+Name: wordgen-bugs
+Description: wordgen-bugs
+Address: wordgen-bugs@nongnu.org
+No-Raw-Link: true
+
+Name: uno-dev
+Description: uno-dev
+Address: uno-dev@nongnu.org
+No-Raw-Link: true
+
+Name: linjewel-devel
+Description: linjewel-devel
+Address: linjewel-devel@nongnu.org
+No-Raw-Link: true
+
+Name: daredevils-bugs
+Description: daredevils-bugs
+Address: daredevils-bugs@nongnu.org
+No-Raw-Link: true
+
+Name: bug-hyperbole
+Description: bug-hyperbole
+Address: bug-hyperbole@gnu.org
+No-Raw-Link: true
+
+Name: update
+Description: update
+Address: update@gnu.org
+No-Raw-Link: true
+
+Name: adr-announce
+Description: adr-announce
+Address: adr-announce@nongnu.org
+No-Raw-Link: true
+
+Name: therion-users
+Description: therion-users
+Address: therion-users@nongnu.org
+No-Raw-Link: true
+
+Name: network-activism
+Description: network-activism
+Address: network-activism@gnu.org
+No-Raw-Link: true
+
+Name: bug-vmgen
+Description: bug-vmgen
+Address: bug-vmgen@gnu.org
+No-Raw-Link: true
+
+Name: woom-dev
+Description: woom-dev
+Address: woom-dev@nongnu.org
+No-Raw-Link: true
+
+Name: hegemonie-commit
+Description: hegemonie-commit
+Address: hegemonie-commit@gnu.org
+No-Raw-Link: true
+
+Name: info-gnucomm
+Description: info-gnucomm
+Address: info-gnucomm@gnu.org
+No-Raw-Link: true
+
+Name: dotgnu-see-devel
+Description: dotgnu-see-devel
+Address: dotgnu-see-devel@gnu.org
+No-Raw-Link: true
+
+Name: gtranscribe-devel
+Description: gtranscribe-devel
+Address: gtranscribe-devel@nongnu.org
+No-Raw-Link: true
+
+Name: isarmathlib-users
+Description: isarmathlib-users
+Address: isarmathlib-users@nongnu.org
+No-Raw-Link: true
+
+Name: dgee-commits
+Description: dgee-commits
+Address: dgee-commits@gnu.org
+No-Raw-Link: true
+
+Name: druidaphplib-support
+Description: druidaphplib-support
+Address: druidaphplib-support@nongnu.org
+No-Raw-Link: true
+
+Name: duplicity-talk
+Description: duplicity-talk
+Address: duplicity-talk@nongnu.org
+No-Raw-Link: true
+
+Name: info-moonos
+Description: info-moonos
+Address: info-moonos@gnu.org
+No-Raw-Link: true
+
+Name: camino-devel
+Description: camino-devel
+Address: camino-devel@nongnu.org
+No-Raw-Link: true
+
+Name: l-lang-devel
+Description: l-lang-devel
+Address: l-lang-devel@nongnu.org
+No-Raw-Link: true
+
+Name: help-serveez
+Description: help-serveez
+Address: help-serveez@gnu.org
+No-Raw-Link: true
+
+Name: gnewsense-buildd-mail
+Description: gnewsense-buildd-mail
+Address: gnewsense-buildd-mail@nongnu.org
+No-Raw-Link: true
+
+Name: analaca-users
+Description: analaca-users
+Address: analaca-users@nongnu.org
+No-Raw-Link: true
+
+Name: sourceflow-devel
+Description: sourceflow-devel
+Address: sourceflow-devel@nongnu.org
+No-Raw-Link: true
+
+Name: robovasion-cvs
+Description: robovasion-cvs
+Address: robovasion-cvs@nongnu.org
+No-Raw-Link: true
+
+Name: eev
+Description: eev
+Address: eev@nongnu.org
+No-Raw-Link: true
+
+Name: demo-schools-authors
+Description: demo-schools-authors
+Address: demo-schools-authors@nongnu.org
+No-Raw-Link: true
+
+Name: sovix-bug
+Description: sovix-bug
+Address: sovix-bug@gnu.org
+No-Raw-Link: true
+
+Name: bug-hurd
+Description: bug-hurd
+Address: bug-hurd@gnu.org
+No-Raw-Link: true
+
+Name: bug-ed
+Description: bug-ed
+Address: bug-ed@gnu.org
+No-Raw-Link: true
+
+Name: sovix-pretest-bug
+Description: sovix-pretest-bug
+Address: sovix-pretest-bug@gnu.org
+No-Raw-Link: true
+
+Name: sdom-devel
+Description: sdom-devel
+Address: sdom-devel@nongnu.org
+No-Raw-Link: true
+
+Name: traverso-devel
+Description: traverso-devel
+Address: traverso-devel@nongnu.org
+No-Raw-Link: true
+
+Name: spmalloc
+Description: spmalloc
+Address: spmalloc@nongnu.org
+No-Raw-Link: true
+
+Name: gnewsense-users-ru
+Description: gnewsense-users-ru
+Address: gnewsense-users-ru@nongnu.org
+No-Raw-Link: true
+
+Name: bug-classpath
+Description: bug-classpath
+Address: bug-classpath@gnu.org
+No-Raw-Link: true
+
+Name: freesci-develop
+Description: freesci-develop
+Address: freesci-develop@nongnu.org
+No-Raw-Link: true
+
+Name: style-guide-discuss
+Description: style-guide-discuss
+Address: style-guide-discuss@nongnu.org
+No-Raw-Link: true
+
+Name: nano-devel
+Description: nano-devel
+Address: nano-devel@gnu.org
+No-Raw-Link: true
+
+Name: logo-support
+Description: logo-support
+Address: logo-support@nongnu.org
+No-Raw-Link: true
+
+Name: argile-test
+Description: argile-test
+Address: argile-test@nongnu.org
+No-Raw-Link: true
+
+Name: info-gengen
+Description: info-gengen
+Address: info-gengen@gnu.org
+No-Raw-Link: true
+
+Name: pem
+Description: pem
+Address: pem@gnu.org
+No-Raw-Link: true
+
+Name: gnumed-devel
+Description: gnumed-devel
+Address: gnumed-devel@gnu.org
+No-Raw-Link: true
+
+Name: freehoo-users
+Description: freehoo-users
+Address: freehoo-users@nongnu.org
+No-Raw-Link: true
+
+Name: classpath
+Description: classpath
+Address: classpath@gnu.org
+No-Raw-Link: true
+
+Name: rtmk-discuss
+Description: rtmk-discuss
+Address: rtmk-discuss@nongnu.org
+No-Raw-Link: true
+
+Name: commit-classpath
+Description: commit-classpath
+Address: commit-classpath@gnu.org
+No-Raw-Link: true
+
+Name: listhelper-discuss
+Description: listhelper-discuss
+Address: listhelper-discuss@nongnu.org
+No-Raw-Link: true
+
+Name: dfey-masters
+Description: dfey-masters
+Address: dfey-masters@nongnu.org
+No-Raw-Link: true
+
+Name: chicken-hackers
+Description: chicken-hackers
+Address: chicken-hackers@nongnu.org
+No-Raw-Link: true
+
+Name: prelude-user
+Description: prelude-user
+Address: prelude-user@nongnu.org
+No-Raw-Link: true
+
+Name: glug-nith-discuss
+Description: glug-nith-discuss
+Address: glug-nith-discuss@nongnu.org
+No-Raw-Link: true
+
+Name: pryscola-devel
+Description: pryscola-devel
+Address: pryscola-devel@nongnu.org
+No-Raw-Link: true
+
+Name: fsfwww-translators-it-discuss
+Description: fsfwww-translators-it-discuss
+Address: fsfwww-translators-it-discuss@gnu.org
+No-Raw-Link: true
+
+Name: bug-fhp
+Description: bug-fhp
+Address: bug-fhp@nongnu.org
+No-Raw-Link: true
+
+Name: libreplanet-us-ne
+Description: libreplanet-us-ne
+Address: libreplanet-us-ne@libreplanet.org
+No-Raw-Link: true
+
+Name: happydigger-user
+Description: happydigger-user
+Address: happydigger-user@nongnu.org
+No-Raw-Link: true
+
+Name: bug-a2ps
+Description: bug-a2ps
+Address: bug-a2ps@gnu.org
+No-Raw-Link: true
+
+Name: choicetool-gg
+Description: choicetool-gg
+Address: choicetool-gg@nongnu.org
+No-Raw-Link: true
+
+Name: lagrange-devel
+Description: lagrange-devel
+Address: lagrange-devel@nongnu.org
+No-Raw-Link: true
+
+Name: commit-inetutils
+Description: commit-inetutils
+Address: commit-inetutils@gnu.org
+No-Raw-Link: true
+
+Name: straw-devel
+Description: straw-devel
+Address: straw-devel@nongnu.org
+No-Raw-Link: true
+
+Name: info-gnus-english
+Description: info-gnus-english
+Address: info-gnus-english@gnu.org
+No-Raw-Link: true
+
+Name: wikiup-users
+Description: wikiup-users
+Address: wikiup-users@nongnu.org
+No-Raw-Link: true
+
+Name: freehoo-devel
+Description: freehoo-devel
+Address: freehoo-devel@nongnu.org
+No-Raw-Link: true
+
+Name: mingw-cross-env-list
+Description: mingw-cross-env-list
+Address: mingw-cross-env-list@nongnu.org
+No-Raw-Link: true
+
+Name: cinvoke-dev
+Description: cinvoke-dev
+Address: cinvoke-dev@nongnu.org
+No-Raw-Link: true
+
+Name: pspp-users
+Description: pspp-users
+Address: pspp-users@gnu.org
+No-Raw-Link: true
+
+Name: cvsreport-devel
+Description: cvsreport-devel
+Address: cvsreport-devel@nongnu.org
+No-Raw-Link: true
+
+Name: mldonkey-bugs
+Description: mldonkey-bugs
+Address: mldonkey-bugs@nongnu.org
+No-Raw-Link: true
+
+Name: midas-dev
+Description: midas-dev
+Address: midas-dev@nongnu.org
+No-Raw-Link: true
+
+Name: oladm-announce
+Description: oladm-announce
+Address: oladm-announce@nongnu.org
+No-Raw-Link: true
+
+Name: pyodbc-dev
+Description: pyodbc-dev
+Address: pyodbc-dev@nongnu.org
+No-Raw-Link: true
+
+Name: guile-fftw-devel
+Description: guile-fftw-devel
+Address: guile-fftw-devel@nongnu.org
+No-Raw-Link: true
+
+Name: ghosts-users
+Description: ghosts-users
+Address: ghosts-users@nongnu.org
+No-Raw-Link: true
+
+Name: natpmp-users
+Description: natpmp-users
+Address: natpmp-users@nongnu.org
+No-Raw-Link: true
+
+Name: www-zh-cn-hackers
+Description: www-zh-cn-hackers
+Address: www-zh-cn-hackers@gnu.org
+No-Raw-Link: true
+
+Name: spavil-discuss
+Description: spavil-discuss
+Address: spavil-discuss@nongnu.org
+No-Raw-Link: true
+
+Name: fsuk-manchester-coworking
+Description: fsuk-manchester-coworking
+Address: fsuk-manchester-coworking@nongnu.org
+No-Raw-Link: true
+
+Name: help-gsl
+Description: help-gsl
+Address: help-gsl@gnu.org
+No-Raw-Link: true
+
+Name: dotgnu-libjit
+Description: dotgnu-libjit
+Address: dotgnu-libjit@gnu.org
+No-Raw-Link: true
+
+Name: help-liquidwar6
+Description: help-liquidwar6
+Address: help-liquidwar6@gnu.org
+No-Raw-Link: true
+
+Name: freeform-help
+Description: freeform-help
+Address: freeform-help@nongnu.org
+No-Raw-Link: true
+
+Name: info-gnucap
+Description: info-gnucap
+Address: info-gnucap@gnu.org
+No-Raw-Link: true
+
+Name: pika-dev
+Description: pika-dev
+Address: pika-dev@nongnu.org
+No-Raw-Link: true
+
+Name: qnxscreen-dev
+Description: qnxscreen-dev
+Address: qnxscreen-dev@nongnu.org
+No-Raw-Link: true
+
+Name: xforms-development
+Description: xforms-development
+Address: xforms-development@nongnu.org
+No-Raw-Link: true
+
+Name: ccrtp-devel
+Description: ccrtp-devel
+Address: ccrtp-devel@gnu.org
+No-Raw-Link: true
+
+Name: help-glpk
+Description: help-glpk
+Address: help-glpk@gnu.org
+No-Raw-Link: true
+
+Name: help-recutils
+Description: help-recutils
+Address: help-recutils@gnu.org
+No-Raw-Link: true
+
+Name: tuxbowl-devel
+Description: tuxbowl-devel
+Address: tuxbowl-devel@nongnu.org
+No-Raw-Link: true
+
+Name: texmacs-patch
+Description: texmacs-patch
+Address: texmacs-patch@gnu.org
+No-Raw-Link: true
+
+Name: awusb-dev
+Description: awusb-dev
+Address: awusb-dev@nongnu.org
+No-Raw-Link: true
+
+Name: nsl-core-devel
+Description: nsl-core-devel
+Address: nsl-core-devel@nongnu.org
+No-Raw-Link: true
+
+Name: bug-glibc
+Description: bug-glibc
+Address: bug-glibc@gnu.org
+No-Raw-Link: true
+
+Name: kig-chat
+Description: kig-chat
+Address: kig-chat@nongnu.org
+No-Raw-Link: true
+
+Name: info-cgicc
+Description: info-cgicc
+Address: info-cgicc@gnu.org
+No-Raw-Link: true
+
+Name: erp-exchange
+Description: erp-exchange
+Address: erp-exchange@nongnu.org
+No-Raw-Link: true
+
+Name: nss-multidom-hackers
+Description: nss-multidom-hackers
+Address: nss-multidom-hackers@nongnu.org
+No-Raw-Link: true
+
+Name: akii-users
+Description: akii-users
+Address: akii-users@nongnu.org
+No-Raw-Link: true
+
+Name: aleader-changes
+Description: aleader-changes
+Address: aleader-changes@nongnu.org
+No-Raw-Link: true
+
+Name: help-ferret
+Description: help-ferret
+Address: help-ferret@gnu.org
+No-Raw-Link: true
+
+Name: dcc-dev
+Description: dcc-dev
+Address: dcc-dev@nongnu.org
+No-Raw-Link: true
+
+Name: help-gnucomm
+Description: help-gnucomm
+Address: help-gnucomm@gnu.org
+No-Raw-Link: true
+
+Name: nethack-el-devel
+Description: nethack-el-devel
+Address: nethack-el-devel@nongnu.org
+No-Raw-Link: true
+
+Name: bug-inetutils
+Description: bug-inetutils
+Address: bug-inetutils@gnu.org
+No-Raw-Link: true
+
+Name: spatter-devel
+Description: spatter-devel
+Address: spatter-devel@nongnu.org
+No-Raw-Link: true
+
+Name: libcvd-members
+Description: libcvd-members
+Address: libcvd-members@nongnu.org
+No-Raw-Link: true
+
+Name: invoke-user
+Description: invoke-user
+Address: invoke-user@nongnu.org
+No-Raw-Link: true
+
+Name: leilany-ith
+Description: leilany-ith
+Address: leilany-ith@nongnu.org
+No-Raw-Link: true
+
+Name: pigeoncide-user
+Description: pigeoncide-user
+Address: pigeoncide-user@nongnu.org
+No-Raw-Link: true
+
+Name: openvds-support
+Description: openvds-support
+Address: openvds-support@nongnu.org
+No-Raw-Link: true
+
+Name: info-gama
+Description: info-gama
+Address: info-gama@gnu.org
+No-Raw-Link: true
+
+Name: mytcpclient-annunce
+Description: mytcpclient-annunce
+Address: mytcpclient-annunce@nongnu.org
+No-Raw-Link: true
+
+Name: info-gplusplus
+Description: info-gplusplus
+Address: info-gplusplus@gnu.org
+No-Raw-Link: true
+
+Name: libeddml
+Description: libeddml
+Address: libeddml@nongnu.org
+No-Raw-Link: true
+
+Name: ofm-developer
+Description: ofm-developer
+Address: ofm-developer@nongnu.org
+No-Raw-Link: true
+
+Name: shake-announcement
+Description: shake-announcement
+Address: shake-announcement@nongnu.org
+No-Raw-Link: true
+
+Name: gsasl-commit
+Description: gsasl-commit
+Address: gsasl-commit@gnu.org
+No-Raw-Link: true
+
+Name: streamtuner-bugs
+Description: streamtuner-bugs
+Address: streamtuner-bugs@nongnu.org
+No-Raw-Link: true
+
+Name: jessie-discuss
+Description: jessie-discuss
+Address: jessie-discuss@nongnu.org
+No-Raw-Link: true
+
+Name: architect-discuss
+Description: architect-discuss
+Address: architect-discuss@nongnu.org
+No-Raw-Link: true
+
+Name: mustache-support
+Description: mustache-support
+Address: mustache-support@nongnu.org
+No-Raw-Link: true
+
+Name: wpaisb-devel
+Description: wpaisb-devel
+Address: wpaisb-devel@nongnu.org
+No-Raw-Link: true
+
+Name: libttstd-dev
+Description: libttstd-dev
+Address: libttstd-dev@nongnu.org
+No-Raw-Link: true
+
+Name: smc-web
+Description: smc-web
+Address: smc-web@nongnu.org
+No-Raw-Link: true
+
+Name: smc-support
+Description: smc-support
+Address: smc-support@nongnu.org
+No-Raw-Link: true
+
+Name: noname-en
+Description: noname-en
+Address: noname-en@nongnu.org
+No-Raw-Link: true
+
+Name: muglin-bugs
+Description: muglin-bugs
+Address: muglin-bugs@nongnu.org
+No-Raw-Link: true
+
+Name: haifa-cvs
+Description: haifa-cvs
+Address: haifa-cvs@nongnu.org
+No-Raw-Link: true
+
+Name: mustache-bugs
+Description: mustache-bugs
+Address: mustache-bugs@nongnu.org
+No-Raw-Link: true
+
+Name: groinc-help
+Description: groinc-help
+Address: groinc-help@nongnu.org
+No-Raw-Link: true
+
+Name: vladnput-user
+Description: vladnput-user
+Address: vladnput-user@nongnu.org
+No-Raw-Link: true
+
+Name: bibulus-cvs
+Description: bibulus-cvs
+Address: bibulus-cvs@nongnu.org
+No-Raw-Link: true
+
+Name: gnomoradio-artists
+Description: gnomoradio-artists
+Address: gnomoradio-artists@nongnu.org
+No-Raw-Link: true
+
+Name: info-gnu-shogi
+Description: info-gnu-shogi
+Address: info-gnu-shogi@gnu.org
+No-Raw-Link: true
+
+Name: gforth
+Description: gforth
+Address: gforth@gnu.org
+No-Raw-Link: true
+
+Name: gnoppix-mirror
+Description: gnoppix-mirror
+Address: gnoppix-mirror@nongnu.org
+No-Raw-Link: true
+
+Name: openexr-devel
+Description: openexr-devel
+Address: openexr-devel@nongnu.org
+No-Raw-Link: true
+
+Name: modab-announce
+Description: modab-announce
+Address: modab-announce@nongnu.org
+No-Raw-Link: true
+
+Name: social-discuss
+Description: social-discuss
+Address: social-discuss@nongnu.org
+No-Raw-Link: true
+
+Name: l4-hurd
+Description: l4-hurd
+Address: l4-hurd@gnu.org
+No-Raw-Link: true
+
+Name: mldonkey-features
+Description: mldonkey-features
+Address: mldonkey-features@nongnu.org
+No-Raw-Link: true
+
+Name: bug-gift
+Description: bug-gift
+Address: bug-gift@gnu.org
+No-Raw-Link: true
+
+Name: gpremacy-general
+Description: gpremacy-general
+Address: gpremacy-general@nongnu.org
+No-Raw-Link: true
+
+Name: friata-devel
+Description: friata-devel
+Address: friata-devel@nongnu.org
+No-Raw-Link: true
+
+Name: cogitatio-interface
+Description: cogitatio-interface
+Address: cogitatio-interface@nongnu.org
+No-Raw-Link: true
+
+Name: gfs-devel
+Description: gfs-devel
+Address: gfs-devel@nongnu.org
+No-Raw-Link: true
+
+Name: ghosts-checkins
+Description: ghosts-checkins
+Address: ghosts-checkins@nongnu.org
+No-Raw-Link: true
+
+Name: weewm-cvs
+Description: weewm-cvs
+Address: weewm-cvs@nongnu.org
+No-Raw-Link: true
+
+Name: lparmanager-devel
+Description: lparmanager-devel
+Address: lparmanager-devel@nongnu.org
+No-Raw-Link: true
+
+Name: xortex-dev
+Description: xortex-dev
+Address: xortex-dev@nongnu.org
+No-Raw-Link: true
+
+Name: shaman-x-public
+Description: shaman-x-public
+Address: shaman-x-public@nongnu.org
+No-Raw-Link: true
+
+Name: mechsys
+Description: mechsys
+Address: mechsys@nongnu.org
+No-Raw-Link: true
+
+Name: pygsear-users
+Description: pygsear-users
+Address: pygsear-users@nongnu.org
+No-Raw-Link: true
+
+Name: synaptic-devel
+Description: synaptic-devel
+Address: synaptic-devel@nongnu.org
+No-Raw-Link: true
+
+Name: bobot-dev
+Description: bobot-dev
+Address: bobot-dev@nongnu.org
+No-Raw-Link: true
+
+Name: www-el-commits
+Description: www-el-commits
+Address: www-el-commits@gnu.org
+No-Raw-Link: true
+
+Name: jailkit-users
+Description: jailkit-users
+Address: jailkit-users@nongnu.org
+No-Raw-Link: true
+
+Name: dotgnu-forum-developers
+Description: dotgnu-forum-developers
+Address: dotgnu-forum-developers@nongnu.org
+No-Raw-Link: true
+
+Name: eliot-general
+Description: eliot-general
+Address: eliot-general@nongnu.org
+No-Raw-Link: true
+
+Name: libidn-commit
+Description: libidn-commit
+Address: libidn-commit@gnu.org
+No-Raw-Link: true
+
+Name: freetype
+Description: freetype
+Address: freetype@nongnu.org
+No-Raw-Link: true
+
+Name: ser-main
+Description: ser-main
+Address: ser-main@nongnu.org
+No-Raw-Link: true
+
+Name: lout-users
+Description: lout-users
+Address: lout-users@nongnu.org
+No-Raw-Link: true
+
+Name: fsfwww-translators-de-discuss
+Description: fsfwww-translators-de-discuss
+Address: fsfwww-translators-de-discuss@gnu.org
+No-Raw-Link: true
+
+Name: sft-bugs
+Description: sft-bugs
+Address: sft-bugs@nongnu.org
+No-Raw-Link: true
+
+Name: kernelconf-general
+Description: kernelconf-general
+Address: kernelconf-general@nongnu.org
+No-Raw-Link: true
+
+Name: www-nb-general
+Description: www-nb-general
+Address: www-nb-general@nongnu.org
+No-Raw-Link: true
+
+Name: swarm-cvs
+Description: swarm-cvs
+Address: swarm-cvs@nongnu.org
+No-Raw-Link: true
+
+Name: stufe-development
+Description: stufe-development
+Address: stufe-development@nongnu.org
+No-Raw-Link: true
+
+Name: fhsst-bio
+Description: fhsst-bio
+Address: fhsst-bio@nongnu.org
+No-Raw-Link: true
+
+Name: gnoppix-india
+Description: gnoppix-india
+Address: gnoppix-india@nongnu.org
+No-Raw-Link: true
+
+Name: freeconsole-sega
+Description: freeconsole-sega
+Address: freeconsole-sega@nongnu.org
+No-Raw-Link: true
+
+Name: savannah-hackers-public
+Description: savannah-hackers-public
+Address: savannah-hackers-public@gnu.org
+No-Raw-Link: true
+
+Name: vmslib-docs
+Description: vmslib-docs
+Address: vmslib-docs@gnu.org
+No-Raw-Link: true
+
+Name: mldonkey-devel
+Description: mldonkey-devel
+Address: mldonkey-devel@nongnu.org
+No-Raw-Link: true
+
+Name: qexo-general
+Description: qexo-general
+Address: qexo-general@gnu.org
+No-Raw-Link: true
+
+Name: classpath-inetlib
+Description: classpath-inetlib
+Address: classpath-inetlib@gnu.org
+No-Raw-Link: true
+
+Name: agplmail-dev
+Description: agplmail-dev
+Address: agplmail-dev@nongnu.org
+No-Raw-Link: true
+
+Name: www-el-translators
+Description: www-el-translators
+Address: www-el-translators@gnu.org
+No-Raw-Link: true
+
+Name: iphysics-discussion
+Description: iphysics-discussion
+Address: iphysics-discussion@nongnu.org
+No-Raw-Link: true
+
+Name: gnu-quality
+Description: gnu-quality
+Address: gnu-quality@gnu.org
+No-Raw-Link: true
+
+Name: fhsst-cs
+Description: fhsst-cs
+Address: fhsst-cs@nongnu.org
+No-Raw-Link: true
+
+Name: graveman-cvs
+Description: graveman-cvs
+Address: graveman-cvs@nongnu.org
+No-Raw-Link: true
+
+Name: pewit-dev
+Description: pewit-dev
+Address: pewit-dev@nongnu.org
+No-Raw-Link: true
+
+Name: predanalysis-news
+Description: predanalysis-news
+Address: predanalysis-news@nongnu.org
+No-Raw-Link: true
+
+Name: usbb2k-api-dev
+Description: usbb2k-api-dev
+Address: usbb2k-api-dev@nongnu.org
+No-Raw-Link: true
+
+Name: aping-releases
+Description: aping-releases
+Address: aping-releases@nongnu.org
+No-Raw-Link: true
+
+Name: panada-cvs
+Description: panada-cvs
+Address: panada-cvs@nongnu.org
+No-Raw-Link: true
+
+Name: fgs-bs
+Description: fgs-bs
+Address: fgs-bs@nongnu.org
+No-Raw-Link: true
+
+Name: senken-devel
+Description: senken-devel
+Address: senken-devel@nongnu.org
+No-Raw-Link: true
+
+Name: gossip-general
+Description: gossip-general
+Address: gossip-general@nongnu.org
+No-Raw-Link: true
+
+Name: hit-bugs
+Description: hit-bugs
+Address: hit-bugs@nongnu.org
+No-Raw-Link: true
+
+Name: gnats-diffs
+Description: gnats-diffs
+Address: gnats-diffs@gnu.org
+No-Raw-Link: true
+
+Name: ltib
+Description: ltib
+Address: ltib@nongnu.org
+No-Raw-Link: true
+
+Name: modelbuilder-users
+Description: modelbuilder-users
+Address: modelbuilder-users@nongnu.org
+No-Raw-Link: true
+
+Name: otpasswd-announce
+Description: otpasswd-announce
+Address: otpasswd-announce@nongnu.org
+No-Raw-Link: true
+
+Name: monkey-share-devel
+Description: monkey-share-devel
+Address: monkey-share-devel@nongnu.org
+No-Raw-Link: true
+
+Name: xphp3-general
+Description: xphp3-general
+Address: xphp3-general@nongnu.org
+No-Raw-Link: true
+
+Name: irmctl-announce
+Description: irmctl-announce
+Address: irmctl-announce@nongnu.org
+No-Raw-Link: true
+
+Name: overkill-web
+Description: overkill-web
+Address: overkill-web@nongnu.org
+No-Raw-Link: true
+
+Name: prestimel-devel
+Description: prestimel-devel
+Address: prestimel-devel@nongnu.org
+No-Raw-Link: true
+
+Name: canada-public-discuss
+Description: canada-public-discuss
+Address: canada-public-discuss@endsoftwarepatents.org
+No-Raw-Link: true
+
+Name: formuleweb-general
+Description: formuleweb-general
+Address: formuleweb-general@nongnu.org
+No-Raw-Link: true
+
+Name: stratagus-devel
+Description: stratagus-devel
+Address: stratagus-devel@nongnu.org
+No-Raw-Link: true
+
+Name: eupm-gnoticies
+Description: eupm-gnoticies
+Address: eupm-gnoticies@nongnu.org
+No-Raw-Link: true
+
+Name: lwip-members
+Description: lwip-members
+Address: lwip-members@nongnu.org
+No-Raw-Link: true
+
+Name: giftcurs-devel
+Description: giftcurs-devel
+Address: giftcurs-devel@nongnu.org
+No-Raw-Link: true
+
+Name: bug-cflow
+Description: bug-cflow
+Address: bug-cflow@gnu.org
+No-Raw-Link: true
+
+Name: dnc-gtk
+Description: dnc-gtk
+Address: dnc-gtk@nongnu.org
+No-Raw-Link: true
+
+Name: gnobog-devel
+Description: gnobog-devel
+Address: gnobog-devel@nongnu.org
+No-Raw-Link: true
+
+Name: system-hackers-announce
+Description: system-hackers-announce
+Address: system-hackers-announce@gnu.org
+No-Raw-Link: true
+
+Name: dnt-generic
+Description: dnt-generic
+Address: dnt-generic@nongnu.org
+No-Raw-Link: true
+
+Name: cwriter-cvs
+Description: cwriter-cvs
+Address: cwriter-cvs@nongnu.org
+No-Raw-Link: true
+
+Name: fle3-users
+Description: fle3-users
+Address: fle3-users@nongnu.org
+No-Raw-Link: true
+
+Name: bug-dumb
+Description: bug-dumb
+Address: bug-dumb@gnu.org
+No-Raw-Link: true
+
+Name: gnu-crypto-discuss
+Description: gnu-crypto-discuss
+Address: gnu-crypto-discuss@gnu.org
+No-Raw-Link: true
+
+Name: sda-list
+Description: sda-list
+Address: sda-list@nongnu.org
+No-Raw-Link: true
+
+Name: ntobsv-discuss
+Description: ntobsv-discuss
+Address: ntobsv-discuss@nongnu.org
+No-Raw-Link: true
+
+Name: perlpanel-users
+Description: perlpanel-users
+Address: perlpanel-users@nongnu.org
+No-Raw-Link: true
+
+Name: gtick-devel
+Description: gtick-devel
+Address: gtick-devel@gnu.org
+No-Raw-Link: true
+
+Name: lingot-help
+Description: lingot-help
+Address: lingot-help@nongnu.org
+No-Raw-Link: true
+
+Name: bug-toutdoux
+Description: bug-toutdoux
+Address: bug-toutdoux@gnu.org
+No-Raw-Link: true
+
+Name: softfree-review
+Description: softfree-review
+Address: softfree-review@nongnu.org
+No-Raw-Link: true
+
+Name: bug-glpk
+Description: bug-glpk
+Address: bug-glpk@gnu.org
+No-Raw-Link: true
+
+Name: bns-devel
+Description: bns-devel
+Address: bns-devel@nongnu.org
+No-Raw-Link: true
+
+Name: gnewsense-dev
+Description: gnewsense-dev
+Address: gnewsense-dev@nongnu.org
+No-Raw-Link: true
+
+Name: haifa
+Description: haifa
+Address: haifa@nongnu.org
+No-Raw-Link: true
+
+Name: newconfig
+Description: newconfig
+Address: newconfig@gnu.org
+No-Raw-Link: true
+
+Name: pyhurd-dev
+Description: pyhurd-dev
+Address: pyhurd-dev@nongnu.org
+No-Raw-Link: true
+
+Name: fsedu-developers
+Description: fsedu-developers
+Address: fsedu-developers@nongnu.org
+No-Raw-Link: true
+
+Name: yadab-devel
+Description: yadab-devel
+Address: yadab-devel@nongnu.org
+No-Raw-Link: true
+
+Name: maitretarot-devel-en
+Description: maitretarot-devel-en
+Address: maitretarot-devel-en@nongnu.org
+No-Raw-Link: true
+
+Name: exupoli
+Description: exupoli
+Address: exupoli@nongnu.org
+No-Raw-Link: true
+
+Name: fcproc-generic
+Description: fcproc-generic
+Address: fcproc-generic@nongnu.org
+No-Raw-Link: true
+
+Name: adonthell-announce
+Description: adonthell-announce
+Address: adonthell-announce@nongnu.org
+No-Raw-Link: true
+
+Name: qemu-devel
+Description: qemu-devel
+Address: qemu-devel@nongnu.org
+No-Raw-Link: true
+
+Name: freecas-devel
+Description: freecas-devel
+Address: freecas-devel@nongnu.org
+No-Raw-Link: true
+
+Name: epsilon-devel
+Description: epsilon-devel
+Address: epsilon-devel@gnu.org
+No-Raw-Link: true
+
+Name: catalog-devel
+Description: catalog-devel
+Address: catalog-devel@nongnu.org
+No-Raw-Link: true
+
+Name: rapp-dev
+Description: rapp-dev
+Address: rapp-dev@nongnu.org
+No-Raw-Link: true
+
+Name: xtodo-issues
+Description: xtodo-issues
+Address: xtodo-issues@nongnu.org
+No-Raw-Link: true
+
+Name: fastjar-announce
+Description: fastjar-announce
+Address: fastjar-announce@nongnu.org
+No-Raw-Link: true
+
+Name: help-ncurses
+Description: help-ncurses
+Address: help-ncurses@gnu.org
+No-Raw-Link: true
+
+Name: spatter-announce
+Description: spatter-announce
+Address: spatter-announce@nongnu.org
+No-Raw-Link: true
+
+Name: libtool-patches
+Description: libtool-patches
+Address: libtool-patches@gnu.org
+No-Raw-Link: true
+
+Name: info-bayonne
+Description: info-bayonne
+Address: info-bayonne@gnu.org
+No-Raw-Link: true
+
+Name: bug-gv
+Description: bug-gv
+Address: bug-gv@gnu.org
+No-Raw-Link: true
+
+Name: mytcpclient-users
+Description: mytcpclient-users
+Address: mytcpclient-users@nongnu.org
+No-Raw-Link: true
+
+Name: yaffl-users
+Description: yaffl-users
+Address: yaffl-users@nongnu.org
+No-Raw-Link: true
+
+Name: stumpwm-devel
+Description: stumpwm-devel
+Address: stumpwm-devel@nongnu.org
+No-Raw-Link: true
+
+Name: wwwauth-devel
+Description: wwwauth-devel
+Address: wwwauth-devel@nongnu.org
+No-Raw-Link: true
+
+Name: epicerie-dev
+Description: epicerie-dev
+Address: epicerie-dev@nongnu.org
+No-Raw-Link: true
+
+Name: newfangle-devel
+Description: newfangle-devel
+Address: newfangle-devel@nongnu.org
+No-Raw-Link: true
+
+Name: spam-discuss
+Description: spam-discuss
+Address: spam-discuss@gnu.org
+No-Raw-Link: true
+
+Name: phpexplore-devel
+Description: phpexplore-devel
+Address: phpexplore-devel@nongnu.org
+No-Raw-Link: true
+
+Name: bug-vcdimager
+Description: bug-vcdimager
+Address: bug-vcdimager@gnu.org
+No-Raw-Link: true
+
+Name: addressbook-devel
+Description: addressbook-devel
+Address: addressbook-devel@nongnu.org
+No-Raw-Link: true
+
+Name: fsfe-france-sci
+Description: fsfe-france-sci
+Address: fsfe-france-sci@gnu.org
+No-Raw-Link: true
+
+Name: nufw-devel
+Description: nufw-devel
+Address: nufw-devel@nongnu.org
+No-Raw-Link: true
+
+Name: pupa-devel
+Description: pupa-devel
+Address: pupa-devel@nongnu.org
+No-Raw-Link: true
+
+Name: www-es-general
+Description: www-es-general
+Address: www-es-general@gnu.org
+No-Raw-Link: true
+
+Name: fsfe-france-epn
+Description: fsfe-france-epn
+Address: fsfe-france-epn@gnu.org
+No-Raw-Link: true
+
+Name: social-mentoring
+Description: social-mentoring
+Address: social-mentoring@gnu.org
+No-Raw-Link: true
+
+Name: bug-textutils
+Description: bug-textutils
+Address: bug-textutils@gnu.org
+No-Raw-Link: true
+
+Name: bug-gettext
+Description: bug-gettext
+Address: bug-gettext@gnu.org
+No-Raw-Link: true
+
+Name: vdrip-users
+Description: vdrip-users
+Address: vdrip-users@nongnu.org
+No-Raw-Link: true
+
+Name: libreenfete-team
+Description: libreenfete-team
+Address: libreenfete-team@nongnu.org
+No-Raw-Link: true
+
+Name: traverso-announce
+Description: traverso-announce
+Address: traverso-announce@nongnu.org
+No-Raw-Link: true
+
+Name: thotbook-dev
+Description: thotbook-dev
+Address: thotbook-dev@nongnu.org
+No-Raw-Link: true
+
+Name: scss-devel
+Description: scss-devel
+Address: scss-devel@nongnu.org
+No-Raw-Link: true
+
+Name: equinox-general
+Description: equinox-general
+Address: equinox-general@nongnu.org
+No-Raw-Link: true
+
+Name: libxmlight-announce
+Description: libxmlight-announce
+Address: libxmlight-announce@nongnu.org
+No-Raw-Link: true
+
+Name: rejavim-dev
+Description: rejavim-dev
+Address: rejavim-dev@nongnu.org
+No-Raw-Link: true
+
+Name: bug-libsigsegv
+Description: bug-libsigsegv
+Address: bug-libsigsegv@gnu.org
+No-Raw-Link: true
+
+Name: 9box-announce
+Description: 9box-announce
+Address: 9box-announce@nongnu.org
+No-Raw-Link: true
+
+Name: pac-devel
+Description: pac-devel
+Address: pac-devel@nongnu.org
+No-Raw-Link: true
+
+Name: zfirebirdda-general
+Description: zfirebirdda-general
+Address: zfirebirdda-general@nongnu.org
+No-Raw-Link: true
+
+Name: texi2html
+Description: texi2html
+Address: texi2html@nongnu.org
+No-Raw-Link: true
+
+Name: tuxread-annc
+Description: tuxread-annc
+Address: tuxread-annc@nongnu.org
+No-Raw-Link: true
+
+Name: axiom-legal
+Description: axiom-legal
+Address: axiom-legal@nongnu.org
+No-Raw-Link: true
+
+Name: info-sather
+Description: info-sather
+Address: info-sather@gnu.org
+No-Raw-Link: true
+
+Name: hacklambra-general
+Description: hacklambra-general
+Address: hacklambra-general@nongnu.org
+No-Raw-Link: true
+
+Name: bug-leg
+Description: bug-leg
+Address: bug-leg@gnu.org
+No-Raw-Link: true
+
+Name: gtkundo-devel
+Description: gtkundo-devel
+Address: gtkundo-devel@nongnu.org
+No-Raw-Link: true
+
+Name: playfreedom-announce
+Description: playfreedom-announce
+Address: playfreedom-announce@gnu.org
+No-Raw-Link: true
+
+Name: gridpt-discuss
+Description: gridpt-discuss
+Address: gridpt-discuss@nongnu.org
+No-Raw-Link: true
+
+Name: lwip-users
+Description: lwip-users
+Address: lwip-users@nongnu.org
+No-Raw-Link: true
+
+Name: powerguru-commit
+Description: powerguru-commit
+Address: powerguru-commit@gnu.org
+No-Raw-Link: true
+
+Name: ff3d-announce
+Description: ff3d-announce
+Address: ff3d-announce@nongnu.org
+No-Raw-Link: true
+
+Name: qpimd-users
+Description: qpimd-users
+Address: qpimd-users@nongnu.org
+No-Raw-Link: true
+
+Name: pcscada-devel
+Description: pcscada-devel
+Address: pcscada-devel@nongnu.org
+No-Raw-Link: true
+
+Name: pac-cvs
+Description: pac-cvs
+Address: pac-cvs@nongnu.org
+No-Raw-Link: true
+
+Name: muddleftpd-cvs
+Description: muddleftpd-cvs
+Address: muddleftpd-cvs@nongnu.org
+No-Raw-Link: true
+
+Name: alcovebook-users
+Description: alcovebook-users
+Address: alcovebook-users@nongnu.org
+No-Raw-Link: true
+
+Name: www-pl-discuss
+Description: www-pl-discuss
+Address: www-pl-discuss@gnu.org
+No-Raw-Link: true
+
+Name: microdc-devel
+Description: microdc-devel
+Address: microdc-devel@nongnu.org
+No-Raw-Link: true
+
+Name: safeheap-bugs
+Description: safeheap-bugs
+Address: safeheap-bugs@nongnu.org
+No-Raw-Link: true
+
+Name: freecats-dev
+Description: freecats-dev
+Address: freecats-dev@nongnu.org
+No-Raw-Link: true
+
+Name: dina-users
+Description: dina-users
+Address: dina-users@nongnu.org
+No-Raw-Link: true
+
+Name: monit-general
+Description: monit-general
+Address: monit-general@nongnu.org
+No-Raw-Link: true
+
+Name: newaim-hu
+Description: newaim-hu
+Address: newaim-hu@nongnu.org
+No-Raw-Link: true
+
+Name: prelude-devel
+Description: prelude-devel
+Address: prelude-devel@nongnu.org
+No-Raw-Link: true
+
+Name: smyrno-bug
+Description: smyrno-bug
+Address: smyrno-bug@nongnu.org
+No-Raw-Link: true
+
+Name: avr-libc-dev
+Description: avr-libc-dev
+Address: avr-libc-dev@nongnu.org
+No-Raw-Link: true
+
+Name: libtemplate-user
+Description: libtemplate-user
+Address: libtemplate-user@nongnu.org
+No-Raw-Link: true
+
+Name: fsffr-all
+Description: fsffr-all
+Address: fsffr-all@nongnu.org
+No-Raw-Link: true
+
+Name: help-xlogmaster
+Description: help-xlogmaster
+Address: help-xlogmaster@gnu.org
+No-Raw-Link: true
+
+Name: liboggpp-develop
+Description: liboggpp-develop
+Address: liboggpp-develop@nongnu.org
+No-Raw-Link: true
+
+Name: bitobi-arch
+Description: bitobi-arch
+Address: bitobi-arch@nongnu.org
+No-Raw-Link: true
+
+Name: mudgnome-devel
+Description: mudgnome-devel
+Address: mudgnome-devel@nongnu.org
+No-Raw-Link: true
+
+Name: emacs-commit
+Description: emacs-commit
+Address: emacs-commit@gnu.org
+No-Raw-Link: true
+
+Name: torture
+Description: torture
+Address: torture@gnu.org
+No-Raw-Link: true
+
+Name: watt-announce
+Description: watt-announce
+Address: watt-announce@nongnu.org
+No-Raw-Link: true
+
+Name: gemerge-bugs
+Description: gemerge-bugs
+Address: gemerge-bugs@nongnu.org
+No-Raw-Link: true
+
+Name: pydonkey-gui
+Description: pydonkey-gui
+Address: pydonkey-gui@nongnu.org
+No-Raw-Link: true
+
+Name: gcjwebplugin-devel
+Description: gcjwebplugin-devel
+Address: gcjwebplugin-devel@nongnu.org
+No-Raw-Link: true
+
+Name: help-mcron
+Description: help-mcron
+Address: help-mcron@gnu.org
+No-Raw-Link: true
+
+Name: cheesetrk-list
+Description: cheesetrk-list
+Address: cheesetrk-list@nongnu.org
+No-Raw-Link: true
+
+Name: dynamite-dev
+Description: dynamite-dev
+Address: dynamite-dev@nongnu.org
+No-Raw-Link: true
+
+Name: libbubblemon-list
+Description: libbubblemon-list
+Address: libbubblemon-list@nongnu.org
+No-Raw-Link: true
+
+Name: commit-cvs-utils
+Description: commit-cvs-utils
+Address: commit-cvs-utils@gnu.org
+No-Raw-Link: true
+
+Name: dchub-announcement
+Description: dchub-announcement
+Address: dchub-announcement@nongnu.org
+No-Raw-Link: true
+
+Name: blwm-users
+Description: blwm-users
+Address: blwm-users@nongnu.org
+No-Raw-Link: true
+
+Name: limdi-devel
+Description: limdi-devel
+Address: limdi-devel@nongnu.org
+No-Raw-Link: true
+
+Name: gcl-devel
+Description: gcl-devel
+Address: gcl-devel@gnu.org
+No-Raw-Link: true
+
+Name: pointerpp-general
+Description: pointerpp-general
+Address: pointerpp-general@nongnu.org
+No-Raw-Link: true
+
+Name: xmakemol-commits
+Description: xmakemol-commits
+Address: xmakemol-commits@nongnu.org
+No-Raw-Link: true
+
+Name: xanis-design
+Description: xanis-design
+Address: xanis-design@nongnu.org
+No-Raw-Link: true
+
+Name: woom-annouce
+Description: woom-annouce
+Address: woom-annouce@nongnu.org
+No-Raw-Link: true
+
+Name: anarchdb-devel
+Description: anarchdb-devel
+Address: anarchdb-devel@nongnu.org
+No-Raw-Link: true
+
+Name: ngl-commits
+Description: ngl-commits
+Address: ngl-commits@nongnu.org
+No-Raw-Link: true
+
+Name: commit-hurd
+Description: commit-hurd
+Address: commit-hurd@gnu.org
+No-Raw-Link: true
+
+Name: help-acct
+Description: help-acct
+Address: help-acct@nongnu.org
+No-Raw-Link: true
+
+Name: biborb-devel
+Description: biborb-devel
+Address: biborb-devel@nongnu.org
+No-Raw-Link: true
+
+Name: topot-dev
+Description: topot-dev
+Address: topot-dev@nongnu.org
+No-Raw-Link: true
+
+Name: help-snakecharmer
+Description: help-snakecharmer
+Address: help-snakecharmer@gnu.org
+No-Raw-Link: true
+
+Name: kde-i18n-pl-adm
+Description: kde-i18n-pl-adm
+Address: kde-i18n-pl-adm@nongnu.org
+No-Raw-Link: true
+
+Name: projectaxis-users
+Description: projectaxis-users
+Address: projectaxis-users@nongnu.org
+No-Raw-Link: true
+
+Name: stribog-announcements
+Description: stribog-announcements
+Address: stribog-announcements@nongnu.org
+No-Raw-Link: true
+
+Name: sinstall-devel
+Description: sinstall-devel
+Address: sinstall-devel@nongnu.org
+No-Raw-Link: true
+
+Name: antiright-devel
+Description: antiright-devel
+Address: antiright-devel@nongnu.org
+No-Raw-Link: true
+
+Name: ranger-users
+Description: ranger-users
+Address: ranger-users@nongnu.org
+No-Raw-Link: true
+
+Name: libreplanet-dev
+Description: libreplanet-dev
+Address: libreplanet-dev@libreplanet.org
+No-Raw-Link: true
+
+Name: duplicity-tracker
+Description: duplicity-tracker
+Address: duplicity-tracker@nongnu.org
+No-Raw-Link: true
+
+Name: libpartedpp-devel
+Description: libpartedpp-devel
+Address: libpartedpp-devel@nongnu.org
+No-Raw-Link: true
+
+Name: www-ru-list
+Description: www-ru-list
+Address: www-ru-list@gnu.org
+No-Raw-Link: true
+
+Name: fsfwww-translators-ptbr-discuss
+Description: fsfwww-translators-ptbr-discuss
+Address: fsfwww-translators-ptbr-discuss@gnu.org
+No-Raw-Link: true
+
+Name: tcldrop-dev
+Description: tcldrop-dev
+Address: tcldrop-dev@nongnu.org
+No-Raw-Link: true
+
+Name: kportage-dev
+Description: kportage-dev
+Address: kportage-dev@nongnu.org
+No-Raw-Link: true
+
+Name: fsfc-discuss
+Description: fsfc-discuss
+Address: fsfc-discuss@gnu.org
+No-Raw-Link: true
+
+Name: cl-bibtex-users
+Description: cl-bibtex-users
+Address: cl-bibtex-users@nongnu.org
+No-Raw-Link: true
+
+Name: stufe-news
+Description: stufe-news
+Address: stufe-news@nongnu.org
+No-Raw-Link: true
+
+Name: accessibility
+Description: accessibility
+Address: accessibility@gnu.org
+No-Raw-Link: true
+
+Name: nuxeo-checkins
+Description: nuxeo-checkins
+Address: nuxeo-checkins@nongnu.org
+No-Raw-Link: true
+
+Name: www-uk-translations
+Description: www-uk-translations
+Address: www-uk-translations@nongnu.org
+No-Raw-Link: true
+
+Name: gnatsweb-commit
+Description: gnatsweb-commit
+Address: gnatsweb-commit@gnu.org
+No-Raw-Link: true
+
+Name: fsuk-discuss
+Description: fsuk-discuss
+Address: fsuk-discuss@nongnu.org
+No-Raw-Link: true
+
+Name: emacs-diffs
+Description: emacs-diffs
+Address: emacs-diffs@gnu.org
+No-Raw-Link: true
+
+Name: interlingua-gen
+Description: interlingua-gen
+Address: interlingua-gen@nongnu.org
+No-Raw-Link: true
+
+Name: py-rrdtool-cvs
+Description: py-rrdtool-cvs
+Address: py-rrdtool-cvs@nongnu.org
+No-Raw-Link: true
+
+Name: ci-development
+Description: ci-development
+Address: ci-development@nongnu.org
+No-Raw-Link: true
+
+Name: gnosi-devel
+Description: gnosi-devel
+Address: gnosi-devel@nongnu.org
+No-Raw-Link: true
+
+Name: info-motti
+Description: info-motti
+Address: info-motti@gnu.org
+No-Raw-Link: true
+
+Name: mamo-list
+Description: mamo-list
+Address: mamo-list@nongnu.org
+No-Raw-Link: true
+
+Name: uncc-dev
+Description: uncc-dev
+Address: uncc-dev@nongnu.org
+No-Raw-Link: true
+
+Name: bkchem-user
+Description: bkchem-user
+Address: bkchem-user@nongnu.org
+No-Raw-Link: true
+
+Name: info-gnu-chess
+Description: info-gnu-chess
+Address: info-gnu-chess@gnu.org
+No-Raw-Link: true
+
+Name: libcvd-libcvd
+Description: libcvd-libcvd
+Address: libcvd-libcvd@nongnu.org
+No-Raw-Link: true
+
+Name: buildpkg-users
+Description: buildpkg-users
+Address: buildpkg-users@nongnu.org
+No-Raw-Link: true
+
+Name: netutils-dev
+Description: netutils-dev
+Address: netutils-dev@nongnu.org
+No-Raw-Link: true
+
+Name: ucg-devel
+Description: ucg-devel
+Address: ucg-devel@nongnu.org
+No-Raw-Link: true
+
+Name: circe-help
+Description: circe-help
+Address: circe-help@nongnu.org
+No-Raw-Link: true
+
+Name: dcciv-users
+Description: dcciv-users
+Address: dcciv-users@nongnu.org
+No-Raw-Link: true
+
+Name: koha-zebra
+Description: koha-zebra
+Address: koha-zebra@nongnu.org
+No-Raw-Link: true
+
+Name: om-synth
+Description: om-synth
+Address: om-synth@nongnu.org
+No-Raw-Link: true
+
+Name: bug-goptical
+Description: bug-goptical
+Address: bug-goptical@gnu.org
+No-Raw-Link: true
+
+Name: frunge-external
+Description: frunge-external
+Address: frunge-external@nongnu.org
+No-Raw-Link: true
+
+Name: bug-ocrad
+Description: bug-ocrad
+Address: bug-ocrad@gnu.org
+No-Raw-Link: true
+
+Name: pigeoncide-devel
+Description: pigeoncide-devel
+Address: pigeoncide-devel@nongnu.org
+No-Raw-Link: true
+
+Name: windstille-devel
+Description: windstille-devel
+Address: windstille-devel@nongnu.org
+No-Raw-Link: true
+
+Name: dina-project-announce
+Description: dina-project-announce
+Address: dina-project-announce@nongnu.org
+No-Raw-Link: true
+
+Name: commit-womb
+Description: commit-womb
+Address: commit-womb@gnu.org
+No-Raw-Link: true
+
+Name: fsfe-de
+Description: fsfe-de
+Address: fsfe-de@fsfeurope.org
+No-Raw-Link: true
+
+Name: modcaml
+Description: modcaml
+Address: modcaml@nongnu.org
+No-Raw-Link: true
+
+Name: slib-units
+Description: slib-units
+Address: slib-units@gnu.org
+No-Raw-Link: true
+
+Name: searchsolve-discuss
+Description: searchsolve-discuss
+Address: searchsolve-discuss@nongnu.org
+No-Raw-Link: true
+
+Name: www-cs-general
+Description: www-cs-general
+Address: www-cs-general@nongnu.org
+No-Raw-Link: true
+
+Name: bug-3dldf
+Description: bug-3dldf
+Address: bug-3dldf@gnu.org
+No-Raw-Link: true
+
+Name: nsl-development
+Description: nsl-development
+Address: nsl-development@nongnu.org
+No-Raw-Link: true
+
+Name: owl-annonces
+Description: owl-annonces
+Address: owl-annonces@nongnu.org
+No-Raw-Link: true
+
+Name: hfdb
+Description: hfdb
+Address: hfdb@gnu.org
+No-Raw-Link: true
+
+Name: yaret-bugs
+Description: yaret-bugs
+Address: yaret-bugs@nongnu.org
+No-Raw-Link: true
+
+Name: blog-devel
+Description: blog-devel
+Address: blog-devel@nongnu.org
+No-Raw-Link: true
+
+Name: pdf-tasks
+Description: pdf-tasks
+Address: pdf-tasks@gnu.org
+No-Raw-Link: true
+
+Name: netsukuku-vala
+Description: netsukuku-vala
+Address: netsukuku-vala@nongnu.org
+No-Raw-Link: true
+
+Name: mysql-sr-lib-dev
+Description: mysql-sr-lib-dev
+Address: mysql-sr-lib-dev@nongnu.org
+No-Raw-Link: true
+
+Name: hybrid-generic
+Description: hybrid-generic
+Address: hybrid-generic@nongnu.org
+No-Raw-Link: true
+
+Name: iwf-mdh-help
+Description: iwf-mdh-help
+Address: iwf-mdh-help@nongnu.org
+No-Raw-Link: true
+
+Name: fmsystem-developers
+Description: fmsystem-developers
+Address: fmsystem-developers@nongnu.org
+No-Raw-Link: true
+
+Name: bug-diffutils
+Description: bug-diffutils
+Address: bug-diffutils@gnu.org
+No-Raw-Link: true
+
+Name: piawg-announce
+Description: piawg-announce
+Address: piawg-announce@nongnu.org
+No-Raw-Link: true
+
+Name: fxvt-users
+Description: fxvt-users
+Address: fxvt-users@nongnu.org
+No-Raw-Link: true
+
+Name: cinvoke-svn
+Description: cinvoke-svn
+Address: cinvoke-svn@nongnu.org
+No-Raw-Link: true
+
+Name: relaycheck-dev
+Description: relaycheck-dev
+Address: relaycheck-dev@nongnu.org
+No-Raw-Link: true
+
+Name: crust-discuss
+Description: crust-discuss
+Address: crust-discuss@nongnu.org
+No-Raw-Link: true
+
+Name: bug-libunistring
+Description: bug-libunistring
+Address: bug-libunistring@gnu.org
+No-Raw-Link: true
+
+Name: emouton
+Description: emouton
+Address: emouton@nongnu.org
+No-Raw-Link: true
+
+Name: directory-discuss
+Description: directory-discuss
+Address: directory-discuss@gnu.org
+No-Raw-Link: true
+
+Name: test1
+Description: test1
+Address: test1@gnu.org
+No-Raw-Link: true
+
+Name: u61-user
+Description: u61-user
+Address: u61-user@nongnu.org
+No-Raw-Link: true
+
+Name: www-zh-cn-coordinators
+Description: www-zh-cn-coordinators
+Address: www-zh-cn-coordinators@gnu.org
+No-Raw-Link: true
+
+Name: texdocgui
+Description: texdocgui
+Address: texdocgui@nongnu.org
+No-Raw-Link: true
+
+Name: fgs-cvs
+Description: fgs-cvs
+Address: fgs-cvs@nongnu.org
+No-Raw-Link: true
+
+Name: www-zh-cn-volunteers
+Description: www-zh-cn-volunteers
+Address: www-zh-cn-volunteers@gnu.org
+No-Raw-Link: true
+
+Name: pan-announce
+Description: pan-announce
+Address: pan-announce@nongnu.org
+No-Raw-Link: true
+
+Name: fbi-improved-devel
+Description: fbi-improved-devel
+Address: fbi-improved-devel@nongnu.org
+No-Raw-Link: true
+
+Name: cass-devel
+Description: cass-devel
+Address: cass-devel@nongnu.org
+No-Raw-Link: true
+
+Name: jia-dev
+Description: jia-dev
+Address: jia-dev@nongnu.org
+No-Raw-Link: true
+
+Name: resellers
+Description: resellers
+Address: resellers@gnu.org
+No-Raw-Link: true
+
+Name: speech-reco
+Description: speech-reco
+Address: speech-reco@gnu.org
+No-Raw-Link: true
+
+Name: carrotq-bugs
+Description: carrotq-bugs
+Address: carrotq-bugs@nongnu.org
+No-Raw-Link: true
+
+Name: gcgi-user
+Description: gcgi-user
+Address: gcgi-user@nongnu.org
+No-Raw-Link: true
+
+Name: bbdb-syncml-dev
+Description: bbdb-syncml-dev
+Address: bbdb-syncml-dev@nongnu.org
+No-Raw-Link: true
+
+Name: xtogen-dev
+Description: xtogen-dev
+Address: xtogen-dev@nongnu.org
+No-Raw-Link: true
+
+Name: prelude-cvslog
+Description: prelude-cvslog
+Address: prelude-cvslog@nongnu.org
+No-Raw-Link: true
+
+Name: wwwsr-dev
+Description: wwwsr-dev
+Address: wwwsr-dev@gnu.org
+No-Raw-Link: true
+
+Name: labapus-news
+Description: labapus-news
+Address: labapus-news@nongnu.org
+No-Raw-Link: true
+
+Name: sdx-info
+Description: sdx-info
+Address: sdx-info@nongnu.org
+No-Raw-Link: true
+
+Name: papo-hackers
+Description: papo-hackers
+Address: papo-hackers@nongnu.org
+No-Raw-Link: true
+
+Name: fle3-dev
+Description: fle3-dev
+Address: fle3-dev@nongnu.org
+No-Raw-Link: true
+
+Name: phpgroupware-cvs
+Description: phpgroupware-cvs
+Address: phpgroupware-cvs@gnu.org
+No-Raw-Link: true
+
+Name: fsfe-newsfr-en
+Description: fsfe-newsfr-en
+Address: fsfe-newsfr-en@gnu.org
+No-Raw-Link: true
+
+Name: bpel2owfn-cvs
+Description: bpel2owfn-cvs
+Address: bpel2owfn-cvs@gnu.org
+No-Raw-Link: true
+
+Name: twinlisp-general
+Description: twinlisp-general
+Address: twinlisp-general@nongnu.org
+No-Raw-Link: true
+
+Name: flpda-disc
+Description: flpda-disc
+Address: flpda-disc@nongnu.org
+No-Raw-Link: true
+
+Name: elmirror-general-discussion
+Description: elmirror-general-discussion
+Address: elmirror-general-discussion@nongnu.org
+No-Raw-Link: true
+
+Name: miniclick-user
+Description: miniclick-user
+Address: miniclick-user@nongnu.org
+No-Raw-Link: true
+
+Name: guidexml-user
+Description: guidexml-user
+Address: guidexml-user@gnu.org
+No-Raw-Link: true
+
+Name: freeconsole
+Description: freeconsole
+Address: freeconsole@nongnu.org
+No-Raw-Link: true
+
+Name: carrotq-user
+Description: carrotq-user
+Address: carrotq-user@nongnu.org
+No-Raw-Link: true
+
+Name: gwhere-devel
+Description: gwhere-devel
+Address: gwhere-devel@nongnu.org
+No-Raw-Link: true
+
+Name: lwip-devel
+Description: lwip-devel
+Address: lwip-devel@nongnu.org
+No-Raw-Link: true
+
+Name: bitobi-dev
+Description: bitobi-dev
+Address: bitobi-dev@nongnu.org
+No-Raw-Link: true
+
+Name: myexperiment-discuss
+Description: myexperiment-discuss
+Address: myexperiment-discuss@nongnu.org
+No-Raw-Link: true
+
+Name: myserver-commit
+Description: myserver-commit
+Address: myserver-commit@gnu.org
+No-Raw-Link: true
+
+Name: gcl-commits
+Description: gcl-commits
+Address: gcl-commits@gnu.org
+No-Raw-Link: true
+
+Name: lmi
+Description: lmi
+Address: lmi@nongnu.org
+No-Raw-Link: true
+
+Name: help-gnats
+Description: help-gnats
+Address: help-gnats@gnu.org
+No-Raw-Link: true
+
+Name: testyten-03
+Description: testyten-03
+Address: testyten-03@nongnu.org
+No-Raw-Link: true
+
+Name: 123tkshop-translation
+Description: 123tkshop-translation
+Address: 123tkshop-translation@nongnu.org
+No-Raw-Link: true
+
+Name: ircbots-announce
+Description: ircbots-announce
+Address: ircbots-announce@nongnu.org
+No-Raw-Link: true
+
+Name: proofreaders
+Description: proofreaders
+Address: proofreaders@gnu.org
+No-Raw-Link: true
+
+Name: grammatica-users
+Description: grammatica-users
+Address: grammatica-users@nongnu.org
+No-Raw-Link: true
+
+Name: dotgnu-forum-announce
+Description: dotgnu-forum-announce
+Address: dotgnu-forum-announce@nongnu.org
+No-Raw-Link: true
+
+Name: genpasswd-main
+Description: genpasswd-main
+Address: genpasswd-main@nongnu.org
+No-Raw-Link: true
+
+Name: discuss-gnu-electric
+Description: discuss-gnu-electric
+Address: discuss-gnu-electric@gnu.org
+No-Raw-Link: true
+
+Name: nss-multidom-announce
+Description: nss-multidom-announce
+Address: nss-multidom-announce@nongnu.org
+No-Raw-Link: true
+
+Name: ipsentinel
+Description: ipsentinel
+Address: ipsentinel@nongnu.org
+No-Raw-Link: true
+
+Name: texinfo-commits
+Description: texinfo-commits
+Address: texinfo-commits@gnu.org
+No-Raw-Link: true
+
+Name: dsssl-utils-devel
+Description: dsssl-utils-devel
+Address: dsssl-utils-devel@nongnu.org
+No-Raw-Link: true
+
+Name: gserverproxy-users
+Description: gserverproxy-users
+Address: gserverproxy-users@nongnu.org
+No-Raw-Link: true
+
+Name: sks-cvs
+Description: sks-cvs
+Address: sks-cvs@nongnu.org
+No-Raw-Link: true
+
+Name: xforms-cvs
+Description: xforms-cvs
+Address: xforms-cvs@nongnu.org
+No-Raw-Link: true
+
+Name: wifimap-announce
+Description: wifimap-announce
+Address: wifimap-announce@nongnu.org
+No-Raw-Link: true
+
+Name: elklib-user
+Description: elklib-user
+Address: elklib-user@nongnu.org
+No-Raw-Link: true
+
+Name: cons-discuss
+Description: cons-discuss
+Address: cons-discuss@gnu.org
+No-Raw-Link: true
+
+Name: af-test
+Description: af-test
+Address: af-test@gnu.org
+No-Raw-Link: true
+
+Name: uri-devel
+Description: uri-devel
+Address: uri-devel@nongnu.org
+No-Raw-Link: true
+
+Name: dctc-general
+Description: dctc-general
+Address: dctc-general@nongnu.org
+No-Raw-Link: true
+
+Name: info-gnu-arch
+Description: info-gnu-arch
+Address: info-gnu-arch@gnu.org
+No-Raw-Link: true
+
+Name: gnoppix-annouce
+Description: gnoppix-annouce
+Address: gnoppix-annouce@nongnu.org
+No-Raw-Link: true
+
+Name: kiwa-userlist
+Description: kiwa-userlist
+Address: kiwa-userlist@nongnu.org
+No-Raw-Link: true
+
+Name: sitetool-patch
+Description: sitetool-patch
+Address: sitetool-patch@nongnu.org
+No-Raw-Link: true
+
+Name: help-mcsim
+Description: help-mcsim
+Address: help-mcsim@gnu.org
+No-Raw-Link: true
+
+Name: libreplanet-it
+Description: libreplanet-it
+Address: libreplanet-it@libreplanet.org
+No-Raw-Link: true
+
+Name: leilany-commits
+Description: leilany-commits
+Address: leilany-commits@nongnu.org
+No-Raw-Link: true
+
+Name: msbilling-features
+Description: msbilling-features
+Address: msbilling-features@nongnu.org
+No-Raw-Link: true
+
+Name: akfquiz-users
+Description: akfquiz-users
+Address: akfquiz-users@nongnu.org
+No-Raw-Link: true
+
+Name: sft-users
+Description: sft-users