From 5313e7d4392c22b460c6e03d858d1421488eb3f6 Mon Sep 17 00:00:00 2001
From: Per Cederqvist <ceder@lysator.liu.se>
Date: Fri, 11 Jul 2014 09:33:35 +0200
Subject: [PATCH] Imported Bugzilla 2.12.

---
 .cvsignore                       |     1 +
 Bug.pm                           |   523 ++
 CGI.pl                           |   345 +-
 CVS/Entries                      |   103 +-
 CVS/Entries.Log                  |     4 +
 README                           |   511 +-
 RelationSet.pm                   |    51 +
 backdoor.cgi                     |     2 +-
 booleanchart.html                |     4 +-
 bug_form.pl                      |   170 +-
 bug_status.html                  |    18 +-
 buglist.cgi                      |   258 +-
 bugzilla.dtd                     |    42 +
 checksetup.pl                    |   810 +-
 colchange.cgi                    |     4 +-
 collectstats.pl                  |   136 +-
 confirmhelp.html                 |     7 +-
 contrib/CVS/Entries              |     7 +-
 contrib/README                   |     8 +-
 contrib/bug_email.pl             |     8 +-
 contrib/cvs-update.sh            |    40 +
 contrib/mysqld-watcher.pl        |   102 +
 contrib/yp_nomail.sh             |    78 +
 createaccount.cgi                |    18 +-
 createattachment.cgi             |     8 +-
 defparams.pl                     |   169 +-
 describecomponents.cgi           |    10 +-
 docs/CVS/Entries                 |     6 +-
 docs/README.docs                 |    67 +
 docs/html/Bugzilla-Guide.html    | 12582 +++++++++++++++++++++++++++++
 docs/html/CVS/Entries            |    67 +
 docs/html/CVS/Repository         |     1 +
 docs/html/CVS/Root               |     1 +
 docs/html/about.html             |   183 +
 docs/html/aboutthisguide.html    |   192 +
 docs/html/administration.html    |   238 +
 docs/html/bonsai.html            |   138 +
 docs/html/bugprobs.html          |   211 +
 docs/html/bz30.html              |   138 +
 docs/html/cleanupwork.html       |   155 +
 docs/html/cmdline.html           |   262 +
 docs/html/contributors.html      |   147 +
 docs/html/conventions.html       |   419 +
 docs/html/copyright.html         |   190 +
 docs/html/credits.html           |   187 +
 docs/html/cvs.html               |   138 +
 docs/html/database.html          |   168 +
 docs/html/dbaseintegrity.html    |   179 +
 docs/html/dbdoc.html             |   509 ++
 docs/html/dbschema.html          |   153 +
 docs/html/dbschema.jpg           |   Bin 0 -> 220048 bytes
 docs/html/disclaimer.html        |   169 +
 docs/html/downloadlinks.html     |   232 +
 docs/html/faq.html               |  3580 ++++++++
 docs/html/feedback.html          |   154 +
 docs/html/future.html            |   180 +
 docs/html/gfdl.html              |   211 +
 docs/html/gfdl_0.html            |   159 +
 docs/html/gfdl_1.html            |   200 +
 docs/html/gfdl_10.html           |   156 +
 docs/html/gfdl_2.html            |   150 +
 docs/html/gfdl_3.html            |   174 +
 docs/html/gfdl_4.html            |   280 +
 docs/html/gfdl_5.html            |   159 +
 docs/html/gfdl_6.html            |   149 +
 docs/html/gfdl_7.html            |   153 +
 docs/html/gfdl_8.html            |   148 +
 docs/html/gfdl_9.html            |   145 +
 docs/html/gfdl_howto.html        |   166 +
 docs/html/glossary.html          |   294 +
 docs/html/granttables.html       |   330 +
 docs/html/how.html               |   931 +++
 docs/html/index.html             |   920 +++
 docs/html/init4me.html           |   398 +
 docs/html/installation.html      |   299 +
 docs/html/integration.html       |   158 +
 docs/html/newversions.html       |   186 +
 docs/html/patches.html           |   153 +
 docs/html/postinstall-check.html |   318 +
 docs/html/programadmin.html      |   923 +++
 docs/html/quicksearch.html       |   186 +
 docs/html/readme.unix.html       |  1735 ++++
 docs/html/readme.windows.html    |   755 ++
 docs/html/rhbugzilla.html        |   196 +
 docs/html/scm.html               |   169 +
 docs/html/searching.html         |   197 +
 docs/html/security.html          |   299 +
 docs/html/setperl.html           |   308 +
 docs/html/spamlite.html          |   189 +
 docs/html/tinderbox.html         |   138 +
 docs/html/trackingbugs.html      |   193 +
 docs/html/translations.html      |   149 +
 docs/html/useradmin.html         |   589 ++
 docs/html/using.html             |   262 +
 docs/html/usingbz-conc.html      |   148 +
 docs/html/variants.html          |   144 +
 docs/html/whatis.html            |   226 +
 docs/html/why.html               |   207 +
 docs/rel_notes.txt               |   155 +
 docs/sgml/Bugzilla-Guide.sgml    |   196 +
 docs/sgml/CVS/Entries            |    18 +
 docs/sgml/CVS/Repository         |     1 +
 docs/sgml/CVS/Root               |     1 +
 docs/sgml/about.sgml             |   242 +
 docs/sgml/administration.sgml    |  1121 +++
 docs/sgml/conventions.sgml       |   111 +
 docs/sgml/database.sgml          |   635 ++
 docs/sgml/dbschema.jpg           |   Bin 0 -> 220048 bytes
 docs/sgml/faq.sgml               |  1880 +++++
 docs/sgml/future.sgml            |   328 +
 docs/sgml/gfdl.sgml              |   468 ++
 docs/sgml/glossary.sgml          |   108 +
 docs/sgml/index.sgml             |     0
 docs/sgml/installation.sgml      |  1322 +++
 docs/sgml/integration.sgml       |    75 +
 docs/sgml/patches.sgml           |   237 +
 docs/sgml/requiredsoftware.sgml  |    82 +
 docs/sgml/using.sgml             |   877 ++
 docs/sgml/variants.sgml          |    87 +
 docs/txt/Bugzilla-Guide.txt      |  5279 ++++++++++++
 docs/txt/CVS/Entries             |     2 +
 docs/txt/CVS/Repository          |     1 +
 docs/txt/CVS/Root                |     1 +
 doeditparams.cgi                 |     7 +-
 doeditvotes.cgi                  |     4 +-
 duplicates.cgi                   |   242 +
 editcomponents.cgi               |   120 +-
 editgroups.cgi                   |   165 +-
 editkeywords.cgi                 |    16 +-
 editmilestones.cgi               |    28 +-
 editproducts.cgi                 |    30 +-
 editusers.cgi                    |   231 +-
 editversions.cgi                 |    12 +-
 enter_bug.cgi                    |    20 +-
 globals.pl                       |   178 +-
 importxml.pl                     |   636 ++
 index.html                       |    22 +-
 localconfig.js                   |    75 +
 long_list.cgi                    |     5 +-
 move.pl                          |   156 +
 new_comment.cgi                  |     7 +
 notargetmilestone.html           |     2 +-
 post_bug.cgi                     |    30 +-
 process_bug.cgi                  |   211 +-
 processmail                      |   570 +-
 query.cgi                        |   218 +-
 queryhelp.cgi                    |  1438 ++++
 quicksearch.html                 |   146 +
 quicksearch.js                   |   670 ++
 quicksearchhack.html             |   352 +
 reports.cgi                      |  1193 +--
 robots.txt                       |     3 +
 sanitycheck.cgi                  |    63 +-
 show_bug.cgi                     |    10 +-
 showvotes.cgi                    |    32 +-
 syncshadowdb                     |    10 +-
 userprefs.cgi                    |   420 +-
 votehelp.html                    |     7 +-
 xml.cgi                          |    58 +
 159 files changed, 55972 insertions(+), 1975 deletions(-)
 create mode 100755 Bug.pm
 create mode 100644 CVS/Entries.Log
 create mode 100644 bugzilla.dtd
 create mode 100644 contrib/cvs-update.sh
 create mode 100755 contrib/mysqld-watcher.pl
 create mode 100644 contrib/yp_nomail.sh
 create mode 100644 docs/README.docs
 create mode 100644 docs/html/Bugzilla-Guide.html
 create mode 100644 docs/html/CVS/Entries
 create mode 100644 docs/html/CVS/Repository
 create mode 100644 docs/html/CVS/Root
 create mode 100644 docs/html/about.html
 create mode 100644 docs/html/aboutthisguide.html
 create mode 100644 docs/html/administration.html
 create mode 100644 docs/html/bonsai.html
 create mode 100644 docs/html/bugprobs.html
 create mode 100644 docs/html/bz30.html
 create mode 100644 docs/html/cleanupwork.html
 create mode 100644 docs/html/cmdline.html
 create mode 100644 docs/html/contributors.html
 create mode 100644 docs/html/conventions.html
 create mode 100644 docs/html/copyright.html
 create mode 100644 docs/html/credits.html
 create mode 100644 docs/html/cvs.html
 create mode 100644 docs/html/database.html
 create mode 100644 docs/html/dbaseintegrity.html
 create mode 100644 docs/html/dbdoc.html
 create mode 100644 docs/html/dbschema.html
 create mode 100644 docs/html/dbschema.jpg
 create mode 100644 docs/html/disclaimer.html
 create mode 100644 docs/html/downloadlinks.html
 create mode 100644 docs/html/faq.html
 create mode 100644 docs/html/feedback.html
 create mode 100644 docs/html/future.html
 create mode 100644 docs/html/gfdl.html
 create mode 100644 docs/html/gfdl_0.html
 create mode 100644 docs/html/gfdl_1.html
 create mode 100644 docs/html/gfdl_10.html
 create mode 100644 docs/html/gfdl_2.html
 create mode 100644 docs/html/gfdl_3.html
 create mode 100644 docs/html/gfdl_4.html
 create mode 100644 docs/html/gfdl_5.html
 create mode 100644 docs/html/gfdl_6.html
 create mode 100644 docs/html/gfdl_7.html
 create mode 100644 docs/html/gfdl_8.html
 create mode 100644 docs/html/gfdl_9.html
 create mode 100644 docs/html/gfdl_howto.html
 create mode 100644 docs/html/glossary.html
 create mode 100644 docs/html/granttables.html
 create mode 100644 docs/html/how.html
 create mode 100644 docs/html/index.html
 create mode 100644 docs/html/init4me.html
 create mode 100644 docs/html/installation.html
 create mode 100644 docs/html/integration.html
 create mode 100644 docs/html/newversions.html
 create mode 100644 docs/html/patches.html
 create mode 100644 docs/html/postinstall-check.html
 create mode 100644 docs/html/programadmin.html
 create mode 100644 docs/html/quicksearch.html
 create mode 100644 docs/html/readme.unix.html
 create mode 100644 docs/html/readme.windows.html
 create mode 100644 docs/html/rhbugzilla.html
 create mode 100644 docs/html/scm.html
 create mode 100644 docs/html/searching.html
 create mode 100644 docs/html/security.html
 create mode 100644 docs/html/setperl.html
 create mode 100644 docs/html/spamlite.html
 create mode 100644 docs/html/tinderbox.html
 create mode 100644 docs/html/trackingbugs.html
 create mode 100644 docs/html/translations.html
 create mode 100644 docs/html/useradmin.html
 create mode 100644 docs/html/using.html
 create mode 100644 docs/html/usingbz-conc.html
 create mode 100644 docs/html/variants.html
 create mode 100644 docs/html/whatis.html
 create mode 100644 docs/html/why.html
 create mode 100644 docs/rel_notes.txt
 create mode 100644 docs/sgml/Bugzilla-Guide.sgml
 create mode 100644 docs/sgml/CVS/Entries
 create mode 100644 docs/sgml/CVS/Repository
 create mode 100644 docs/sgml/CVS/Root
 create mode 100644 docs/sgml/about.sgml
 create mode 100644 docs/sgml/administration.sgml
 create mode 100644 docs/sgml/conventions.sgml
 create mode 100644 docs/sgml/database.sgml
 create mode 100644 docs/sgml/dbschema.jpg
 create mode 100644 docs/sgml/faq.sgml
 create mode 100644 docs/sgml/future.sgml
 create mode 100644 docs/sgml/gfdl.sgml
 create mode 100644 docs/sgml/glossary.sgml
 create mode 100644 docs/sgml/index.sgml
 create mode 100644 docs/sgml/installation.sgml
 create mode 100644 docs/sgml/integration.sgml
 create mode 100644 docs/sgml/patches.sgml
 create mode 100644 docs/sgml/requiredsoftware.sgml
 create mode 100644 docs/sgml/using.sgml
 create mode 100644 docs/sgml/variants.sgml
 create mode 100644 docs/txt/Bugzilla-Guide.txt
 create mode 100644 docs/txt/CVS/Entries
 create mode 100644 docs/txt/CVS/Repository
 create mode 100644 docs/txt/CVS/Root
 create mode 100644 duplicates.cgi
 create mode 100755 importxml.pl
 create mode 100644 localconfig.js
 create mode 100755 move.pl
 create mode 100755 queryhelp.cgi
 create mode 100644 quicksearch.html
 create mode 100644 quicksearch.js
 create mode 100644 quicksearchhack.html
 create mode 100644 robots.txt
 create mode 100755 xml.cgi

diff --git a/.cvsignore b/.cvsignore
index 778dbaf44..ce18c65ad 100644
--- a/.cvsignore
+++ b/.cvsignore
@@ -1,3 +1,4 @@
+graphs
 data
 localconfig
 shadow
diff --git a/Bug.pm b/Bug.pm
new file mode 100755
index 000000000..76ea56156
--- /dev/null
+++ b/Bug.pm
@@ -0,0 +1,523 @@
+#!/usr/bonsaitools/bin/perl -w
+# -*- Mode: perl; indent-tabs-mode: nil -*-
+#
+# The contents of this file are subject to the Mozilla Public
+# License Version 1.1 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS
+# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+# implied. See the License for the specific language governing
+# rights and limitations under the License.
+#
+# The Original Code is the Bugzilla Bug Tracking System.
+#
+# The Initial Developer of the Original Code is Netscape Communications
+# Corporation. Portions created by Netscape are
+# Copyright (C) 1998 Netscape Communications Corporation. All
+# Rights Reserved.
+#
+# Contributor(s): Dawn Endico    <endico@mozilla.org>
+#                 Terry Weissman <terry@mozilla.org>
+#                 Chris Yeh      <cyeh@bluemartini.com>
+
+use diagnostics;
+use strict;
+
+use DBI;
+use RelationSet;
+require "globals.pl";
+require "CGI.pl";
+package Bug;
+use CGI::Carp qw(fatalsToBrowser);
+my %ok_field;
+
+for my $key (qw (bug_id product version rep_platform op_sys bug_status 
+                resolution priority bug_severity component assigned_to
+                reporter bug_file_loc short_desc target_milestone 
+                qa_contact status_whiteboard creation_ts groupset 
+                delta_ts votes whoid usergroupset comment query error) ){
+    $ok_field{$key}++;
+    }
+
+# create a new empty bug
+#
+sub new {
+  my $type = shift();
+  my %bug;
+
+  # create a ref to an empty hash and bless it
+  #
+  my $self = {%bug};
+  bless $self, $type;
+
+  # construct from a hash containing a bug's info
+  #
+  if ($#_ == 1) {
+    $self->initBug(@_);
+  } else {
+    confess("invalid number of arguments \($#_\)($_)");
+  }
+
+  # bless as a Bug
+  #
+  return $self;
+}
+
+
+
+# dump info about bug into hash unless user doesn't have permission
+# user_id 0 is used when person is not logged in.
+#
+sub initBug  {
+  my $self = shift();
+  my ($bug_id, $user_id) = (@_);
+
+
+  if ( (! defined $bug_id) || (!$bug_id) ) {
+    # no bug number given
+    return {};
+  }
+
+# default userid 0, or get DBID if you used an email address
+  unless (defined $user_id) {
+    $user_id = 0;
+  }
+  else {
+     if ($user_id =~ /^\@/) {
+	$user_id = &::DBname_to_id($user_id); 
+     }
+  }
+     
+
+  &::ConnectToDatabase();
+  &::GetVersionTable();
+
+  # this verification should already have been done by caller
+  # my $loginok = quietly_check_login();
+
+
+  $self->{'whoid'} = $user_id;
+  &::SendSQL("SELECT groupset FROM profiles WHERE userid=$self->{'whoid'}");
+  my $usergroupset = &::FetchOneColumn();
+  if (!$usergroupset) { $usergroupset = '0' }
+  $self->{'usergroupset'} = $usergroupset;
+
+  my $query = "
+    select
+      bugs.bug_id, product, version, rep_platform, op_sys, bug_status,
+      resolution, priority, bug_severity, component, assigned_to, reporter,
+      bug_file_loc, short_desc, target_milestone, qa_contact,
+      status_whiteboard, date_format(creation_ts,'%Y-%m-%d %H:%i'),
+      groupset, delta_ts, sum(votes.count)
+    from bugs left join votes using(bug_id)
+    where bugs.bug_id = $bug_id
+    and bugs.groupset & $usergroupset = bugs.groupset
+    group by bugs.bug_id";
+
+  &::SendSQL($query);
+  my @row;
+
+  if (@row = &::FetchSQLData()) {
+    my $count = 0;
+    my %fields;
+    foreach my $field ("bug_id", "product", "version", "rep_platform",
+                       "op_sys", "bug_status", "resolution", "priority",
+                       "bug_severity", "component", "assigned_to", "reporter",
+                       "bug_file_loc", "short_desc", "target_milestone",
+                       "qa_contact", "status_whiteboard", "creation_ts",
+                       "groupset", "delta_ts", "votes") {
+	$fields{$field} = shift @row;
+	if ($fields{$field}) {
+	    $self->{$field} = $fields{$field};
+	}
+	$count++;
+    }
+  } else {
+    &::SendSQL("select groupset from bugs where bug_id = $bug_id");
+    if (@row = &::FetchSQLData()) {
+      $self->{'bug_id'} = $bug_id;
+      $self->{'error'} = "NotPermitted";
+      return $self;
+    } else {
+      $self->{'bug_id'} = $bug_id;
+      $self->{'error'} = "NotFound";
+      return $self;
+    }
+  }
+
+  if ($self->{'short_desc'}) {
+    $self->{'short_desc'} = QuoteXMLChars( $self->{'short_desc'} );
+  }
+
+  if (defined $self->{'status_whiteboard'}) {
+    $self->{'status_whiteboard'} = QuoteXMLChars($self->{'status_whiteboard'});
+  }
+
+  $self->{'assigned_to'} = &::DBID_to_name($self->{'assigned_to'});
+  $self->{'reporter'} = &::DBID_to_name($self->{'reporter'});
+
+  my $ccSet = new RelationSet;
+  $ccSet->mergeFromDB("select who from cc where bug_id=$bug_id");
+  my @cc = $ccSet->toArrayOfStrings();
+  if (@cc) {
+    $self->{'cc'} = \@cc;
+  }
+
+  if (&::Param("useqacontact") && (defined $self->{'qa_contact'}) ) {
+    my $name = $self->{'qa_contact'} > 0 ? &::DBID_to_name($self->{'qa_contact'}) :"";
+    if ($name) {
+      $self->{'qa_contact'} = $name;
+    }
+  }
+
+  if (@::legal_keywords) {
+    &::SendSQL("SELECT keyworddefs.name 
+              FROM keyworddefs, keywords
+             WHERE keywords.bug_id = $bug_id 
+               AND keyworddefs.id = keywords.keywordid
+          ORDER BY keyworddefs.name");
+    my @list;
+    while (&::MoreSQLData()) {
+        push(@list, &::FetchOneColumn());
+    }
+    if (@list) {
+      $self->{'keywords'} = &::html_quote(join(', ', @list));
+    }
+  }
+
+  &::SendSQL("select attach_id, creation_ts, description 
+           from attachments 
+           where bug_id = $bug_id");
+  my @attachments;
+  while (&::MoreSQLData()) {
+    my ($attachid, $date, $desc) = (&::FetchSQLData());
+    if ($date =~ /^(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)$/) {
+        $date = "$3/$4/$2 $5:$6";
+      my %attach;
+      $attach{'attachid'} = $attachid;
+      $attach{'date'} = $date;
+      $attach{'desc'} = &::html_quote($desc);
+      push @attachments, \%attach;
+    }
+  }
+  if (@attachments) {
+    $self->{'attachments'} = \@attachments;
+  }
+
+  &::SendSQL("select bug_id, who, bug_when, thetext 
+           from longdescs 
+           where bug_id = $bug_id");
+  my @longdescs;
+  while (&::MoreSQLData()) {
+    my ($bug_id, $who, $bug_when, $thetext) = (&::FetchSQLData());
+    my %longdesc;
+    $longdesc{'who'} = $who;
+    $longdesc{'bug_when'} = $bug_when;
+    $longdesc{'thetext'} = &::html_quote($thetext);
+    push @longdescs, \%longdesc;
+  }
+  if (@longdescs) {
+    $self->{'longdescs'} = \@longdescs;
+  }
+
+  if (&::Param("usedependencies")) {
+    my @depends = EmitDependList("blocked", "dependson", $bug_id);
+    if ( @depends ) {
+      $self->{'dependson'} = \@depends;
+    }
+    my @blocks = EmitDependList("dependson", "blocked", $bug_id);
+    if ( @blocks ) {
+      $self->{'blocks'} = \@blocks;
+    }
+  }
+
+  return $self;
+}
+
+
+
+# given a bug hash, emit xml for it. with file header provided by caller
+#
+sub emitXML {
+  ( $#_ == 0 ) || confess("invalid number of arguments");
+  my $self = shift();
+  my $xml;
+
+
+  if (exists $self->{'error'}) {
+    $xml .= "<bug error=\"$self->{'error'}\">\n";
+    $xml .= "  <bug_id>$self->{'bug_id'}</bug_id>\n";
+    $xml .= "</bug>\n";
+    return $xml;
+  }
+
+  $xml .= "<bug>\n";
+
+  foreach my $field ("bug_id", "urlbase", "bug_status", "product",
+      "priority", "version", "rep_platform", "assigned_to", "delta_ts", 
+      "component", "reporter", "target_milestone", "bug_severity", 
+      "creation_ts", "qa_contact", "op_sys", "resolution", "bug_file_loc",
+      "short_desc", "keywords", "status_whiteboard") {
+    if ($self->{$field}) {
+      $xml .= "  <$field>" . QuoteXMLChars($self->{$field}) . "</$field>\n";
+    }
+  }
+
+  foreach my $field ("dependson", "blocks", "cc") {
+    if (defined $self->{$field}) {
+      for (my $i=0 ; $i < @{$self->{$field}} ; $i++) {
+        $xml .= "  <$field>" . $self->{$field}[$i] . "</$field>\n";
+      }
+    }
+  }
+
+  if (defined $self->{'longdescs'}) {
+    for (my $i=0 ; $i < @{$self->{'longdescs'}} ; $i++) {
+      $xml .= "  <long_desc>\n"; 
+      $xml .= "   <who>" . &::DBID_to_name($self->{'longdescs'}[$i]->{'who'}) 
+                         . "</who>\n"; 
+      $xml .= "   <bug_when>" . $self->{'longdescs'}[$i]->{'bug_when'} 
+                              . "</bug_when>\n"; 
+      $xml .= "   <thetext>" . QuoteXMLChars($self->{'longdescs'}[$i]->{'thetext'})
+                             . "</thetext>\n"; 
+      $xml .= "  </long_desc>\n"; 
+    }
+  }
+
+  if (defined $self->{'attachments'}) {
+    for (my $i=0 ; $i < @{$self->{'attachments'}} ; $i++) {
+      $xml .= "  <attachment>\n"; 
+      $xml .= "    <attachid>" . $self->{'attachments'}[$i]->{'attachid'}
+                              . "</attachid>\n"; 
+      $xml .= "    <date>" . $self->{'attachments'}[$i]->{'date'} . "</date>\n"; 
+      $xml .= "    <desc>" . QuoteXMLChars($self->{'attachments'}[$i]->{'desc'}) . "</desc>\n"; 
+    # $xml .= "    <type>" . $self->{'attachments'}[$i]->{'type'} . "</type>\n"; 
+    # $xml .= "    <data>" . $self->{'attachments'}[$i]->{'data'} . "</data>\n"; 
+      $xml .= "  </attachment>\n"; 
+    }
+  }
+
+  $xml .= "</bug>\n";
+  return $xml;
+}
+
+sub EmitDependList {
+  my ($myfield, $targetfield, $bug_id) = (@_);
+  my @list;
+  &::SendSQL("select dependencies.$targetfield, bugs.bug_status
+           from dependencies, bugs
+           where dependencies.$myfield = $bug_id
+             and bugs.bug_id = dependencies.$targetfield
+           order by dependencies.$targetfield");
+  while (&::MoreSQLData()) {
+    my ($i, $stat) = (&::FetchSQLData());
+    push @list, $i;
+  }
+  return @list;
+}
+
+sub QuoteXMLChars {
+  $_[0] =~ s/</&lt;/g;
+  $_[0] =~ s/>/&gt;/g;
+  $_[0] =~ s/'/&apos;/g;
+  $_[0] =~ s/"/&quot;/g;
+  $_[0] =~ s/&/&amp;/g;
+# $_[0] =~ s/([\x80-\xFF])/&XmlUtf8Encode(ord($1))/ge;
+  return($_[0]);
+}
+
+sub XML_Header {
+  my ($urlbase, $version, $maintainer, $exporter) = (@_);
+
+  my $xml;
+  $xml = "<?xml version=\"1.0\" standalone=\"no\"?>\n";
+  $xml .= "<!DOCTYPE bugzilla SYSTEM \"$urlbase";
+  if (! ($urlbase =~ /.+\/$/)) {
+    $xml .= "/";
+  }
+  $xml .= "bugzilla.dtd\">\n";
+  $xml .= "<bugzilla";
+  if (defined $exporter) {
+    $xml .= " exporter=\"$exporter\"";
+  }
+  $xml .= " version=\"$version\"";
+  $xml .= " urlbase=\"$urlbase\"";
+  $xml .= " maintainer=\"$maintainer\">\n";
+  return ($xml);
+}
+
+
+sub XML_Footer {
+  return ("</bugzilla>\n");
+}
+
+sub UserInGroup {
+    my $self = shift();
+    my ($groupname) = (@_);
+    if ($self->{'usergroupset'} eq "0") {
+        return 0;
+    }
+    &::ConnectToDatabase();
+    &::SendSQL("select (bit & $self->{'usergroupset'}) != 0 from groups where name = " 
+           . &::SqlQuote($groupname));
+    my $bit = &::FetchOneColumn();
+    if ($bit) {
+        return 1;
+    }
+    return 0;
+}
+
+sub CanChangeField {
+   my $self = shift();
+   my ($f, $oldvalue, $newvalue) = (@_);
+   my $UserInEditGroupSet = -1;
+   my $UserInCanConfirmGroupSet = -1;
+   my $ownerid;
+   my $reporterid;
+   my $qacontactid;
+
+    if ($f eq "assigned_to" || $f eq "reporter" || $f eq "qa_contact") {
+        if ($oldvalue =~ /^\d+$/) {
+            if ($oldvalue == 0) {
+                $oldvalue = "";
+            } else {
+                $oldvalue = &::DBID_to_name($oldvalue);
+            }
+        }
+    }
+    if ($oldvalue eq $newvalue) {
+        return 1;
+    }
+    if (&::trim($oldvalue) eq &::trim($newvalue)) {
+        return 1;
+    }
+    if ($f =~ /^longdesc/) {
+        return 1;
+    }
+    if ($UserInEditGroupSet < 0) {
+        $UserInEditGroupSet = UserInGroup($self, "editbugs");
+    }
+    if ($UserInEditGroupSet) {
+        return 1;
+    }
+    &::SendSQL("SELECT reporter, assigned_to, qa_contact FROM bugs " .
+                "WHERE bug_id = $self->{'bug_id'}");
+    ($reporterid, $ownerid, $qacontactid) = (&::FetchSQLData());
+
+    # Let reporter change bug status, even if they can't edit bugs.
+    # If reporter can't re-open their bug they will just file a duplicate.
+    # While we're at it, let them close their own bugs as well.
+    if ( ($f eq "bug_status") && ($self->{'whoid'} eq $reporterid) ) {
+        return 1;
+    }
+    if ($f eq "bug_status" && $newvalue ne $::unconfirmedstate &&
+        &::IsOpenedState($newvalue)) {
+
+        # Hmm.  They are trying to set this bug to some opened state
+        # that isn't the UNCONFIRMED state.  Are they in the right
+        # group?  Or, has it ever been confirmed?  If not, then this
+        # isn't legal.
+
+        if ($UserInCanConfirmGroupSet < 0) {
+            $UserInCanConfirmGroupSet = &::UserInGroup("canconfirm");
+        }
+        if ($UserInCanConfirmGroupSet) {
+            return 1;
+        }
+        &::SendSQL("SELECT everconfirmed FROM bugs WHERE bug_id = $self->{'bug_id'}");
+        my $everconfirmed = FetchOneColumn();
+        if ($everconfirmed) {
+            return 1;
+        }
+    } elsif ($reporterid eq $self->{'whoid'} || $ownerid eq $self->{'whoid'} ||
+             $qacontactid eq $self->{'whoid'}) {
+        return 1;
+    }
+    $self->{'error'} = "
+Only the owner or submitter of the bug, or a sufficiently
+empowered user, may make that change to the $f field."
+}
+
+sub Collision {
+    my $self = shift();
+    my $write = "WRITE";        # Might want to make a param to control
+                                # whether we do LOW_PRIORITY ...
+    &::SendSQL("LOCK TABLES bugs $write, bugs_activity $write, cc $write, " .
+            "profiles $write, dependencies $write, votes $write, " .
+            "keywords $write, longdescs $write, fielddefs $write, " .
+            "keyworddefs READ, groups READ, attachments READ, products READ");
+    &::SendSQL("SELECT delta_ts FROM bugs where bug_id=$self->{'bug_id'}");
+    my $delta_ts = &::FetchOneColumn();
+    &::SendSQL("unlock tables");
+    if ($self->{'delta_ts'} ne $delta_ts) {
+       return 1;
+    }
+    else {
+       return 0;
+    }
+}
+
+sub AppendComment  {
+    my $self = shift();
+    my ($comment) = (@_);
+    $comment =~ s/\r\n/\n/g;     # Get rid of windows-style line endings.
+    $comment =~ s/\r/\n/g;       # Get rid of mac-style line endings.
+    if ($comment =~ /^\s*$/) {  # Nothin' but whitespace.
+        return;
+    }
+
+    &::SendSQL("INSERT INTO longdescs (bug_id, who, bug_when, thetext) " .
+            "VALUES($self->{'bug_id'}, $self->{'whoid'}, now(), " . &::SqlQuote($comment) . ")");
+
+    &::SendSQL("UPDATE bugs SET delta_ts = now() WHERE bug_id = $self->{'bug_id'}");
+}
+
+
+#from o'reilley's Programming Perl
+sub display {
+    my $self = shift;
+    my @keys;
+    if (@_ == 0) {                  # no further arguments
+        @keys = sort keys(%$self);
+    }  else {
+        @keys = @_;                 # use the ones given
+    }
+    foreach my $key (@keys) {
+        print "\t$key => $self->{$key}\n";
+    }
+}
+
+sub CommitChanges {
+
+#snapshot bug
+#snapshot dependencies
+#check can change fields
+#check collision
+#lock and change fields
+#notify through mail
+
+}
+
+sub AUTOLOAD {
+  use vars qw($AUTOLOAD);
+  my $self = shift;
+  my $type = ref($self) || $self;
+  my $attr = $AUTOLOAD;
+
+  $attr =~ s/.*:://;
+  return unless $attr=~ /[^A-Z]/;
+  if (@_) {
+    $self->{$attr} = shift;
+    return;
+  }
+  confess ("invalid bug attribute $attr") unless $ok_field{$attr};
+  if (defined $self->{$attr}) {
+    return $self->{$attr};
+  } else {
+    return '';
+  }
+}
+
+1;
diff --git a/CGI.pl b/CGI.pl
index 2e782b6da..29d8f68ea 100644
--- a/CGI.pl
+++ b/CGI.pl
@@ -19,6 +19,7 @@
 #
 # Contributor(s): Terry Weissman <terry@mozilla.org>
 #                 Dan Mosedale <dmose@mozilla.org>
+#                 Joe Robins <jmrobins@tgix.com>
 
 # Contains some global routines used throughout the CGI scripts of Bugzilla.
 
@@ -28,6 +29,13 @@ use strict;
 # Shut up misguided -w warnings about "used only once".  For some reason,
 # "use vars" chokes on me when I try it here.
 
+# commented out the following snippet of code. this tosses errors into the
+# CGI if you are perl 5.6, and doesn't if you have perl 5.003. 
+# We want to check for the existence of the LDAP modules here.
+# eval "use Mozilla::LDAP::Conn";
+# my $have_ldap = $@ ? 0 : 1;
+
+
 sub CGI_pl_sillyness {
     my $zz;
     $zz = %::FILENAME;
@@ -118,7 +126,7 @@ sub ParseUrlString {
             $isnull{$name} = 1;
         }
     }
-    if (defined %isnull) {
+    if (%isnull) {
         foreach my $name (keys(%isnull)) {
             if (!defined $f->{$name}) {
                 $f->{$name} = "";
@@ -251,8 +259,13 @@ sub value_quote {
     $var =~ s/</\&lt;/g;
     $var =~ s/>/\&gt;/g;
     $var =~ s/"/\&quot;/g;
-    $var =~ s/\n/\&#010;/g;
+    # See bug http://bugzilla.mozilla.org/show_bug.cgi?id=4928 for 
+    # explanaion of why bugzilla does this linebreak substitution. 
+    # This caused form submission problems in mozilla (bug 22983, 32000).
+    $var =~ s/\r\n/\&#013;/g;
+    $var =~ s/\n\r/\&#013;/g;
     $var =~ s/\r/\&#013;/g;
+    $var =~ s/\n/\&#013;/g;
     return $var;
 }
 
@@ -620,60 +633,181 @@ sub confirm_login {
 #    print "Content-type: text/plain\n\n";
 
     ConnectToDatabase();
+    # I'm going to reorganize some of this stuff a bit.  Since we're adding
+    # a second possible validation method (LDAP), we need to move some of this
+    # to a later section.  -Joe Robins, 8/3/00
+    my $enteredlogin = "";
+    my $realcryptpwd = "";
     if (defined $::FORM{"Bugzilla_login"} &&
 	defined $::FORM{"Bugzilla_password"}) {
 
-	my $enteredlogin = $::FORM{"Bugzilla_login"};
-        my $enteredpwd = $::FORM{"Bugzilla_password"};
-        CheckEmailSyntax($enteredlogin);
-
-        my $realcryptpwd  = PasswordForLogin($::FORM{"Bugzilla_login"});
-        
-        if (defined $::FORM{"PleaseMailAPassword"}) {
-	    my $realpwd;
-            if ($realcryptpwd eq "") {
-		$realpwd = InsertNewUser($enteredlogin, "");
-            } else {
-                SendSQL("select password from profiles where login_name = " .
-			SqlQuote($enteredlogin));
-		$realpwd = FetchOneColumn();
-            }
-	    print "Content-type: text/html\n\n";
-	    PutHeader("Password has been emailed");
-            MailPassword($enteredlogin, $realpwd);
-            PutFooter();
-            exit;
-        }
-
-        SendSQL("SELECT encrypt(" . SqlQuote($enteredpwd) . ", " .
-                SqlQuote(substr($realcryptpwd, 0, 2)) . ")");
-        my $enteredcryptpwd = FetchOneColumn();
-
-        if ($realcryptpwd eq "" || $enteredcryptpwd ne $realcryptpwd) {
-            print "Content-type: text/html\n\n";
-	    PutHeader("Login failed");
-            print "The username or password you entered is not valid.\n";
-            print "Please click <b>Back</b> and try again.\n";
-            PutFooter();
-            exit;
-        }
-        $::COOKIE{"Bugzilla_login"} = $enteredlogin;
-        if (!defined $ENV{'REMOTE_HOST'}) {
-            $ENV{'REMOTE_HOST'} = $ENV{'REMOTE_ADDR'};
-        }
-	SendSQL("insert into logincookies (userid,cryptpassword,hostname) values (@{[DBNameToIdAndCheck($enteredlogin)]}, @{[SqlQuote($realcryptpwd)]}, @{[SqlQuote($ENV{'REMOTE_HOST'})]})");
-        SendSQL("select LAST_INSERT_ID()");
-        my $logincookie = FetchOneColumn();
-
-        $::COOKIE{"Bugzilla_logincookie"} = $logincookie;
-        print "Set-Cookie: Bugzilla_login=$enteredlogin ; path=/; expires=Sun, 30-Jun-2029 00:00:00 GMT\n";
-        print "Set-Cookie: Bugzilla_logincookie=$logincookie ; path=/; expires=Sun, 30-Jun-2029 00:00:00 GMT\n";
-
-        # This next one just cleans out any old bugzilla passwords that may
-        # be sitting around in the cookie files, from the bad old days when
-        # we actually stored the password there.
-        print "Set-Cookie: Bugzilla_password= ; path=/; expires=Sun, 30-Jun-80 00:00:00 GMT\n";
-
+       $enteredlogin = $::FORM{"Bugzilla_login"};
+       my $enteredpwd = $::FORM{"Bugzilla_password"};
+       CheckEmailSyntax($enteredlogin);
+
+       $realcryptpwd  = PasswordForLogin($::FORM{"Bugzilla_login"});
+
+       if (defined $::FORM{"PleaseMailAPassword"}) {
+         my $realpwd;
+         if ($realcryptpwd eq "") {
+           $realpwd = InsertNewUser($enteredlogin, "");
+         } else {
+           SendSQL("select password from profiles where login_name = " .
+                   SqlQuote($enteredlogin));
+           $realpwd = FetchOneColumn();
+         }
+         print "Content-type: text/html\n\n";
+         PutHeader("Password has been emailed");
+         MailPassword($enteredlogin, $realpwd);
+         PutFooter();
+         exit;
+       }
+
+       SendSQL("SELECT encrypt(" . SqlQuote($enteredpwd) . ", " .
+               SqlQuote(substr($realcryptpwd, 0, 2)) . ")");
+       my $enteredcryptpwd = FetchOneColumn();
+
+       if ($realcryptpwd eq "" || $enteredcryptpwd ne $realcryptpwd) {
+         print "Content-type: text/html\n\n";
+         PutHeader("Login failed");
+         print "The username or password you entered is not valid.\n";
+         print "Please click <b>Back</b> and try again.\n";
+         PutFooter();
+         exit;
+       }
+     } elsif (Param("useLDAP") &&
+              defined $::FORM{"LDAP_login"} &&
+              defined $::FORM{"LDAP_password"}) {
+       # If we're using LDAP for login, we've got an entirely different
+       # set of things to check.
+
+# see comment at top of file near eval
+       # First, if we don't have the LDAP modules available to us, we can't
+       # do this.
+#       if(!$have_ldap) {
+#         print "Content-type: text/html\n\n";
+#         PutHeader("LDAP not enabled");
+#         print "The necessary modules for LDAP login are not installed on ";
+#         print "this machine.  Please send mail to ".Param("maintainer");
+#         print " and notify him of this problem.\n";
+#         PutFooter();
+#         exit;
+#       }
+
+       # Next, we need to bind anonymously to the LDAP server.  This is
+       # because we need to get the Distinguished Name of the user trying
+       # to log in.  Some servers (such as iPlanet) allow you to have unique
+       # uids spread out over a subtree of an area (such as "People"), so
+       # just appending the Base DN to the uid isn't sufficient to get the
+       # user's DN.  For servers which don't work this way, there will still
+       # be no harm done.
+       my $LDAPserver = Param("LDAPserver");
+       if ($LDAPserver eq "") {
+         print "Content-type: text/html\n\n";
+         PutHeader("LDAP server not defined");
+         print "The LDAP server for authentication has not been defined.  ";
+         print "Please contact ".Param("maintainer")." ";
+         print "and notify him of this problem.\n";
+         PutFooter();
+         exit;
+       }
+
+       my $LDAPport = "389";  #default LDAP port
+       if($LDAPserver =~ /:/) {
+         ($LDAPserver, $LDAPport) = split(":",$LDAPserver);
+       }
+       my $LDAPconn = new Mozilla::LDAP::Conn($LDAPserver,$LDAPport);
+       if(!$LDAPconn) {
+         print "Content-type: text/html\n\n";
+         PutHeader("Unable to connect to LDAP server");
+         print "I was unable to connect to the LDAP server for user ";
+         print "authentication.  Please contact ".Param("maintainer");
+         print " and notify him of this problem.\n";
+         PutFooter();
+         exit;
+       }
+
+       # We've got our anonymous bind;  let's look up this user.
+       my $dnEntry = $LDAPconn->search(Param("LDAPBaseDN"),"subtree","uid=".$::FORM{"LDAP_login"});
+       if(!$dnEntry) {
+         print "Content-type: text/html\n\n";
+         PutHeader("Login Failed");
+         print "The username or password you entered is not valid.\n";
+         print "Please click <b>Back</b> and try again.\n";
+         PutFooter();
+         exit;
+       }
+
+       # Now we get the DN from this search.  Once we've got that, we're
+       # done with the anonymous bind, so we close it.
+       my $userDN = $dnEntry->getDN;
+       $LDAPconn->close;
+
+       # Now we attempt to bind as the specified user.
+       $LDAPconn = new Mozilla::LDAP::Conn($LDAPserver,$LDAPport,$userDN,$::FORM{"LDAP_password"});
+       if(!$LDAPconn) {
+         print "Content-type: text/html\n\n";
+         PutHeader("Login Failed");
+         print "The username or password you entered is not valid.\n";
+         print "Please click <b>Back</b> and try again.\n";
+         PutFooter();
+         exit;
+       }
+
+       # And now we're going to repeat the search, so that we can get the
+       # mail attribute for this user.
+       my $userEntry = $LDAPconn->search(Param("LDAPBaseDN"),"subtree","uid=".$::FORM{"LDAP_login"});
+       if(!$userEntry->exists(Param("LDAPmailattribute"))) {
+         print "Content-type: text/html\n\n";
+         PutHeader("LDAP authentication error");
+         print "I was unable to retrieve the ".Param("LDAPmailattribute");
+         print " attribute from the LDAP server.  Please contact ";
+         print Param("maintainer")." and notify him of this error.\n";
+         PutFooter();
+         exit;
+       }
+
+       # Mozilla::LDAP::Entry->getValues returns an array for the attribute
+       # requested, even if there's only one entry.
+       $enteredlogin = ($userEntry->getValues(Param("LDAPmailattribute")))[0];
+
+       # We're going to need the cryptpwd for this user from the database
+       # so that we can set the cookie below, even though we're not going
+       # to use it for authentication.
+       $realcryptpwd = PasswordForLogin($enteredlogin);
+
+       # If we don't get a result, then we've got a user who isn't in
+       # Bugzilla's database yet, so we've got to add them.
+       if($realcryptpwd eq "") {
+         # We'll want the user's name for this.
+         my $userRealName = ($userEntry->getValues("displayName"))[0];
+         if($userRealName eq "") {
+           $userRealName = ($userEntry->getValues("cn"))[0];
+         }
+         InsertNewUser($enteredlogin, $userRealName);
+         $realcryptpwd = PasswordForLogin($enteredlogin);
+       }
+     } # end LDAP authentication
+
+     # And now, if we've logged in via either method, then we need to set
+     # the cookies.
+     if($enteredlogin ne "") {
+       $::COOKIE{"Bugzilla_login"} = $enteredlogin;
+       if (!defined $ENV{'REMOTE_HOST'}) {
+         $ENV{'REMOTE_HOST'} = $ENV{'REMOTE_ADDR'};
+       }
+       SendSQL("insert into logincookies (userid,cryptpassword,hostname) values (@{[DBNameToIdAndCheck($enteredlogin)]}, @{[SqlQuote($realcryptpwd)]}, @{[SqlQuote($ENV{'REMOTE_HOST'})]})");
+       SendSQL("select LAST_INSERT_ID()");
+       my $logincookie = FetchOneColumn();
+
+       $::COOKIE{"Bugzilla_logincookie"} = $logincookie;
+       print "Set-Cookie: Bugzilla_login=$enteredlogin ; path=/; expires=Sun, 30-Jun-2029 00:00:00 GMT\n";
+       print "Set-Cookie: Bugzilla_logincookie=$logincookie ; path=/; expires=Sun, 30-Jun-2029 00:00:00 GMT\n";
+
+       # This next one just cleans out any old bugzilla passwords that may
+       # be sitting around in the cookie files, from the bad old days when
+       # we actually stored the password there.
+       print "Set-Cookie: Bugzilla_password= ; path=/; expires=Sun, 30-Jun-80 00:00:00 GMT\n";
     }
 
 
@@ -698,7 +832,11 @@ Content-type: text/html
         }
         print "Content-type: text/html\n\n";
         PutHeader("Login", undef, undef, undef, 1);
-        print "I need a legitimate e-mail address and password to continue.\n";
+        if(Param("useLDAP")) {
+          print "I need a legitimate LDAP username and password to continue.\n";
+        } else {
+          print "I need a legitimate e-mail address and password to continue.\n";
+        }
         if (!defined $nexturl || $nexturl eq "") {
 	    # Sets nexturl to be argv0, stripping everything up to and
 	    # including the last slash.
@@ -712,13 +850,25 @@ Content-type: text/html
         print "
 <FORM action=$nexturl method=$method>
 <table>
+<tr>";
+        if(Param("useLDAP")) {
+          print "
+<td align=right><b>Username:</b></td>
+<td><input size=10 name=LDAP_login></td>
+</tr>
 <tr>
+<td align=right><b>Password:</b></td>
+<td><input type=password size=10 name=LDAP_password></td>";
+        } else {
+          print "
 <td align=right><b>E-mail address:</b></td>
 <td><input size=35 name=Bugzilla_login></td>
 </tr>
 <tr>
 <td align=right><b>Password:</b></td>
-<td><input type=password size=35 name=Bugzilla_password></td>
+<td><input type=password size=35 name=Bugzilla_password></td>";
+        }
+        print "
 </tr>
 </table>
 ";
@@ -730,11 +880,16 @@ Content-type: text/html
         }
         print "
 <input type=submit value=Login name=GoAheadAndLogIn><hr>
+";
+        # If we're using LDAP, we can't request that a password be mailed...
+        unless(Param("useLDAP")) {
+          print "
 If you don't have a password, or have forgotten it, then please fill in the
 e-mail address above and click
  here:<input type=submit value=\"E-mail me a password\"
 name=PleaseMailAPassword>
 </form>\n";
+        }
 
         # This seems like as good as time as any to get rid of old
         # crufty junk in the logincookies table.  Get rid of any entry
@@ -774,8 +929,7 @@ sub PutHeader {
 
     print "<HTML><HEAD>\n<TITLE>$title</TITLE>\n";
     print Param("headerhtml") . "\n$jscript\n</HEAD>\n";
-    print "<BODY   BGCOLOR=\"#FFFFFF\" TEXT=\"#000000\"\n";
-    print "LINK=\"#0000EE\" VLINK=\"#551A8B\" ALINK=\"#FF0000\" $extra>\n";
+    print "<BODY " . Param("bodyhtml") . " $extra>\n";
 
     print PerformSubsts(Param("bannerhtml"), undef);
 
@@ -794,8 +948,6 @@ sub PutHeader {
     print "$h2\n";
     print "</TD></TR></TABLE>\n";
 
-    print "</TD></TR></TABLE>\n";
-
     if (Param("shutdownhtml")) {
         if (!$ignoreshutdown) {
             print Param("shutdownhtml");
@@ -815,6 +967,7 @@ sub PuntTryAgain ($) {
     my ($str) = (@_);
     print PerformSubsts(Param("errorhtml"),
                         {errormsg => $str});
+    SendSQL("UNLOCK TABLES");
     PutFooter();
     exit;
 }
@@ -904,40 +1057,36 @@ sub DumpBugActivity {
 
 sub GetCommandMenu {
     my $loggedin = quietly_check_login();
-    my $html = qq{<FORM METHOD=GET ACTION="show_bug.cgi">};
-    $html .= "<a href='enter_bug.cgi'>New</a> | <a href='query.cgi'>Query</a>";
+    my $html = "";
+    $html .= <<"--endquote--";
+<FORM METHOD=GET ACTION="show_bug.cgi">
+<TABLE width="100%"><TR><TD>
+Actions:
+</TD><TD VALIGN="middle" NOWRAP>
+<a href='enter_bug.cgi'>New</a> | <a href='query.cgi'>Query</a> |
+--endquote--
+
     if (-e "query2.cgi") {
         $html .= "[<a href='query2.cgi'>beta</a>]";
     }
     
     $html .=
-        qq{ | <INPUT TYPE=SUBMIT VALUE="Find"> bug \# <INPUT NAME=id SIZE=6>};
+        qq{ <INPUT TYPE=SUBMIT VALUE="Find"> bug \# <INPUT NAME=id SIZE=6>};
 
-    $html .= " | <a href='reports.cgi'>Reports</a>";
+    $html .= " | <a href='reports.cgi'>Reports</a>"; 
     if ($loggedin) {
-        my $mybugstemplate = Param("mybugstemplate");
-        my %substs;
-        $substs{'userid'} = url_quote($::COOKIE{"Bugzilla_login"});
-        if (!defined $::anyvotesallowed) {
-            GetVersionTable();
-        }
         if ($::anyvotesallowed) {
-            $html .= qq{ | <A HREF="showvotes.cgi"><NOBR>My votes</NOBR></A>};
+            $html .= " | <A HREF=\"showvotes.cgi\">My votes</A>";
         }
+    }
+    if ($loggedin) {
+    	#a little mandatory SQL, used later on
         SendSQL("SELECT mybugslink, userid, blessgroupset FROM profiles " .
                 "WHERE login_name = " . SqlQuote($::COOKIE{'Bugzilla_login'}));
         my ($mybugslink, $userid, $blessgroupset) = (FetchSQLData());
-        if ($mybugslink) {
-            my $mybugsurl = PerformSubsts($mybugstemplate, \%substs);
-            $html = $html . " | <A HREF='$mybugsurl'><NOBR>My bugs</NOBR></A>";
-        }
-        SendSQL("SELECT name,query FROM namedqueries " .
-                "WHERE userid = $userid AND linkinfooter");
-        while (MoreSQLData()) {
-            my ($name, $query) = (FetchSQLData());
-            $html .= qq{ | <A HREF="buglist.cgi?$query"><NOBR>$name</A>};
-        }
-        $html .= " | <NOBR>Edit <a href='userprefs.cgi'>prefs</a></NOBR>";
+        
+        #Begin settings
+        $html .= "</TD><TD>&nbsp;</TD><TD VALIGN=middle><NOBR>Edit <a href='userprefs.cgi'>prefs</a></NOBR>";
         if (UserInGroup("tweakparams")) {
             $html .= ", <a href=editparams.cgi>parameters</a>";
             $html .= ", <a href=sanitycheck.cgi><NOBR>sanity check</NOBR></a>";
@@ -955,13 +1104,43 @@ sub GetCommandMenu {
             $html .= ", <a href=editkeywords.cgi>keywords</a>";
         }
         $html .= " | <NOBR><a href=relogin.cgi>Log out</a> $::COOKIE{'Bugzilla_login'}</NOBR>";
+        $html .= "</TD></TR>";
+        
+		#begin preset queries
+        my $mybugstemplate = Param("mybugstemplate");
+        my %substs;
+        $substs{'userid'} = url_quote($::COOKIE{"Bugzilla_login"});
+        if (!defined $::anyvotesallowed) {
+            GetVersionTable();
+        }
+        $html .= "</TR><TR>";
+        $html .= "<TD>Preset Queries: </TD>";
+        $html .= "<TD colspan=3>\n";
+        if ($mybugslink) {
+            my $mybugsurl = PerformSubsts($mybugstemplate, \%substs);
+            $html = $html . "<A HREF='$mybugsurl'><NOBR>My bugs</NOBR></A>";
+        }
+        SendSQL("SELECT name FROM namedqueries " .
+                "WHERE userid = $userid AND linkinfooter");
+        my $anynamedqueries = 0;
+        while (MoreSQLData()) {
+            my ($name) = (FetchSQLData());
+            if ($anynamedqueries || $mybugslink) { $html .= " | " }
+            $anynamedqueries = 1;
+            $html .= "<A HREF=\"buglist.cgi?&cmdtype=runnamed&namedcmd=" .
+                     url_quote($name) . "\"><NOBR>$name</NOBR></A>";
+        }
+        $html .= "</TR>\n<TR>";
     } else {
+    $html .= "</TD><TD>&nbsp;</TD><TD valign=middle align=right>\n";
         $html .=
-            " | <a href=\"createaccount.cgi\"><NOBR>New account</NOBR></a>\n";
+            " <a href=\"createaccount.cgi\"><NOBR>New account</NOBR></a>\n";
         $html .=
             " | <NOBR><a href=query.cgi?GoAheadAndLogIn=1>Log in</a></NOBR>";
+        $html .= "</TD></TR>";
     }
-    $html .= "</FORM>";                
+    $html .= "</FORM>\n";
+    $html .= "</TABLE>";                
     return $html;
 }
 
diff --git a/CVS/Entries b/CVS/Entries
index 36a10e5f0..d764ce59b 100644
--- a/CVS/Entries
+++ b/CVS/Entries
@@ -1,64 +1,73 @@
-/.cvsignore/1.2/Wed Oct 20 16:26:04 1999//
+/.cvsignore/1.3/Fri Dec 22 20:48:16 2000//
 /1x1.gif/1.1/Wed Aug 26 06:14:15 1998/-kb/
-/CGI.pl/1.66/Mon May  8 18:12:28 2000//
+/Bug.pm/1.6/Mon Feb 26 23:46:01 2001//
+/CGI.pl/1.81/Sat Mar 10 22:06:57 2001//
 /CHANGES/1.38/Tue Oct 12 16:57:57 1999//
-/RelationSet.pm/1.1/Tue Mar 28 21:30:43 2000//
+/README/1.48/Wed Apr 25 07:11:45 2001//
+/RelationSet.pm/1.4/Tue Apr 17 02:26:14 2001//
 /ant.jpg/1.2/Wed Aug 26 22:36:05 1998/-kb/
-/backdoor.cgi/1.13/Tue Mar  7 20:03:52 2000//
-/booleanchart.html/1.2/Fri Jan 28 20:36:26 2000//
-/bug_form.pl/1.45/Wed Apr 26 01:44:28 2000//
-/bug_status.html/1.10/Sat Apr  8 06:04:15 2000//
-/buglist.cgi/1.103/Wed Apr 26 17:44:24 2000//
+/backdoor.cgi/1.14/Wed May 17 21:29:31 2000//
+/booleanchart.html/1.3/Wed Aug 16 23:07:37 2000//
+/bug_form.pl/1.64/Tue Apr 17 02:26:14 2001//
+/bug_status.html/1.11/Mon Aug 28 17:48:56 2000//
+/buglist.cgi/1.127/Sat Apr  7 03:30:59 2001//
 /bugwritinghelp.html/1.1/Tue Mar  7 17:59:38 2000//
+/bugzilla.dtd/1.2/Fri May 26 06:34:45 2000//
 /changepassword.cgi/1.19/Tue Jan 25 07:53:29 2000//
-/checksetup.pl/1.37/Sun Apr 30 04:34:53 2000//
-/colchange.cgi/1.14/Fri Feb  4 14:08:00 2000//
-/collectstats.pl/1.7/Mon Nov  1 23:33:09 1999//
-/confirmhelp.html/1.1/Thu Feb 17 05:15:22 2000//
-/createaccount.cgi/1.6/Fri Jan 14 22:35:29 2000//
-/createattachment.cgi/1.10/Tue Mar  7 18:22:50 2000//
-/defparams.pl/1.37/Tue Mar 28 21:31:16 2000//
-/describecomponents.cgi/1.4/Fri Jan 14 22:35:30 2000//
+/checksetup.pl/1.74/Fri Apr 20 14:41:44 2001//
+/colchange.cgi/1.16/Thu Aug 31 18:19:46 2000//
+/collectstats.pl/1.19/Thu Apr 19 17:35:23 2001//
+/confirmhelp.html/1.2/Mon Aug 28 17:48:58 2000//
+/createaccount.cgi/1.10/Fri Mar  9 21:41:27 2001//
+/createattachment.cgi/1.13/Tue Apr  3 20:42:58 2001//
+/defparams.pl/1.50/Sun Apr 22 16:44:10 2001//
+/describecomponents.cgi/1.5/Thu Feb 22 18:11:24 2001//
 /describekeywords.cgi/1.4/Sat Jan 22 16:51:49 2000//
-/doeditparams.cgi/1.10/Thu Feb 17 21:41:32 2000//
-/doeditvotes.cgi/1.7/Thu Feb 17 05:15:22 2000//
-/editcomponents.cgi/1.11/Sat Jan 22 19:25:33 2000//
-/editgroups.cgi/1.4/Wed Apr 26 19:35:45 2000//
-/editkeywords.cgi/1.5/Sat Jan 22 16:51:49 2000//
-/editmilestones.cgi/1.2/Thu Mar 23 18:22:34 2000//
+/doeditparams.cgi/1.12/Fri Sep 29 05:29:09 2000//
+/doeditvotes.cgi/1.8/Wed Jun  7 17:49:02 2000//
+/duplicates.cgi/1.8/Thu Apr 19 17:35:23 2001//
+/editcomponents.cgi/1.16/Thu Feb 22 18:11:25 2001//
+/editgroups.cgi/1.9/Tue Apr 17 02:26:15 2001//
+/editkeywords.cgi/1.7/Mon Feb 26 23:25:22 2001//
+/editmilestones.cgi/1.4/Fri Apr  6 16:47:49 2001//
 /editparams.cgi/1.11/Fri Jan 14 22:35:34 2000//
-/editproducts.cgi/1.14/Thu Mar 23 18:22:56 2000//
-/editusers.cgi/1.8/Thu Feb 17 16:46:36 2000//
-/editversions.cgi/1.5/Fri Jan 14 22:35:36 2000//
-/enter_bug.cgi/1.36/Wed Apr 26 19:35:50 2000//
+/editproducts.cgi/1.17/Thu Aug 31 22:56:21 2000//
+/editusers.cgi/1.20/Tue Apr 17 02:26:15 2001//
+/editversions.cgi/1.6/Wed Aug 30 23:44:35 2000//
+/enter_bug.cgi/1.43/Tue Apr 17 02:26:15 2001//
+/globals.pl/1.87/Wed Apr 25 15:45:27 2001//
 /help.html/1.4/Fri Jan 21 22:01:11 2000//
 /helpemailquery.html/1.1/Tue Jan 19 00:07:45 1999//
 /how_to_mail.html/1.2/Mon Nov  1 23:33:16 1999//
-/index.html/1.11/Thu Jan 27 00:56:33 2000//
-/long_list.cgi/1.13/Fri Mar 10 18:01:26 2000//
-/new_comment.cgi/1.4/Fri Apr 28 18:51:11 2000//
+/importxml.pl/1.13/Thu Jul 13 23:12:51 2000//
+/index.html/1.12/Wed Feb 28 23:07:24 2001//
+/localconfig.js/1.1/Wed Feb 28 23:07:25 2001//
+/long_list.cgi/1.15/Mon Aug  7 22:59:55 2000//
+/move.pl/1.3/Thu Jul 13 23:12:51 2000//
+/new_comment.cgi/1.5/Thu Jul 27 20:10:16 2000//
 /newquip.html/1.3/Mon Nov  1 23:33:17 1999//
-/notargetmilestone.html/1.1/Wed Feb  3 02:46:51 1999//
-/post_bug.cgi/1.26/Wed Apr 26 19:35:51 2000//
-/process_bug.cgi/1.55/Wed Mar 29 00:34:56 2000//
-/processmail/1.41/Wed Apr 12 00:25:37 2000//
-/query.cgi/1.69/Tue Mar 21 16:47:06 2000//
+/notargetmilestone.html/1.2/Mon Aug 28 17:48:59 2000//
+/post_bug.cgi/1.31/Mon Apr  9 19:10:43 2001//
+/process_bug.cgi/1.80/Tue Apr 17 02:26:16 2001//
+/processmail/1.61/Sat Apr  7 17:09:27 2001//
+/query.cgi/1.82/Tue Apr 10 03:49:01 2001//
+/queryhelp.cgi/1.4/Mon Apr 23 22:16:12 2001//
+/quicksearch.html/1.1/Wed Feb 28 23:07:26 2001//
+/quicksearch.js/1.2/Thu Mar  1 03:34:08 2001//
+/quicksearchhack.html/1.2/Wed Feb 28 23:08:52 2001//
 /relogin.cgi/1.10/Tue Jan 18 14:41:00 2000//
-/reports.cgi/1.31/Tue Apr 25 21:05:32 2000//
-/sanitycheck.cgi/1.23/Tue Mar 21 16:47:06 2000//
+/reports.cgi/1.45/Fri Mar  9 21:24:53 2001//
+/robots.txt/1.1/Fri Jul 28 21:28:39 2000//
+/sanitycheck.cgi/1.31/Sun Apr  8 02:33:02 2001//
 /show_activity.cgi/1.5/Fri Jan 14 22:35:45 2000//
-/show_bug.cgi/1.11/Fri Jan 14 22:35:46 2000//
+/show_bug.cgi/1.14/Mon Mar 12 22:35:50 2001//
 /showattachment.cgi/1.6/Tue Mar  7 19:27:41 2000//
 /showdependencygraph.cgi/1.9/Tue Mar  7 18:23:00 2000//
 /showdependencytree.cgi/1.7/Fri Jan 14 22:35:48 2000//
-/showvotes.cgi/1.5/Thu Feb 17 05:15:23 2000//
-/syncshadowdb/1.6/Tue Mar 21 14:39:23 2000//
-/userprefs.cgi/1.7/Fri Apr 21 18:43:53 2000//
-/votehelp.html/1.4/Mon Nov  1 23:33:21 1999//
+/showvotes.cgi/1.7/Wed Jan 24 02:41:41 2001//
+/syncshadowdb/1.8/Tue Oct 24 01:51:56 2000//
+/userprefs.cgi/1.16/Tue Apr 17 02:26:16 2001//
+/votehelp.html/1.5/Thu Jan 25 04:56:14 2001//
 /whineatnews.pl/1.4/Mon Nov  1 23:33:22 1999//
-D/contrib////
-D/docs////
-D/oracle////
-D/template////
-/README/1.35/Mon May  8 19:47:05 2000//
-/globals.pl/1.67/Mon May  8 20:44:33 2000//
+/xml.cgi/1.2/Mon Jun 12 06:52:41 2000//
+D
diff --git a/CVS/Entries.Log b/CVS/Entries.Log
new file mode 100644
index 000000000..09ae25c15
--- /dev/null
+++ b/CVS/Entries.Log
@@ -0,0 +1,4 @@
+A D/contrib////
+A D/docs////
+A D/oracle////
+A D/template////
diff --git a/README b/README
index cdbd22878..c628f66af 100644
--- a/README
+++ b/README
@@ -1,496 +1,15 @@
-This is Bugzilla.  See <http://www.mozilla.org/bugs/>.
-
-
-        ==========
-        DISCLAIMER
-        ==========
-
-   This is not very well packaged code.  It's not packaged at all.  Don't
-come here expecting something you plop in a directory, twiddle a few
-things, and you're off and using it.  Work has to be done to get there.  
-We'd like to get there, but it wasn't clear when that would be, and so we
-decided to let people see it first.
-
-   Bugzilla has not undergone a complete security review. Security holes
-may exist in the code. Great care should be taken both in the installation
-and usage of this software. Carefully consider the implications of
-installing other network services with Bugzilla.
-
-
-        ============
-        INSTALLATION
-        ============
-
-0. Introduction
-
-   Installation of bugzilla is pretty straight forward, especially if your
-machine already has MySQL and the MySQL-related perl packages installed.
-If those aren't installed yet, then that's the first order of business.  The
-other necessary ingredient is a web server set up to run cgi scripts.
-
-   Bugzilla has been successfully installed under Solaris and Linux. Windows NT
-is not officially supported. There have been a few successful installations
-of Bugzilla under Windows NT. Please see this article for a discussion of what
-one person hacked together to get it to work.
-
-news://news.mozilla.org/19990913183810.SVTR29939.mta02@onebox.com
-
-1. Installing the Prerequisites
-
-   The software packages necessary for the proper running of bugzilla are:
-
-        1. MySQL database server and the mysql client (3.22.5 or greater)
-        2. Perl (5.004 or greater)
-        3. DBI Perl module 
-        4. Data::Dumper Perl module
-        5. MySQL related Perl module collection
-        6. TimeDate Perl module collection
-        7. GD perl module (1.18 or 1.19)
-        8. Chart::Base Perl module (0.99 through 0.99b)
-        9. The web server of your choice
-
-   Bugzilla has quite a few prerequisites, but none of them are TCL.
-Previous versions required TCL, but it no longer needed (or used).
-
-1.1. Getting and setting up MySQL database (3.22.5 or greater)
-
-   Visit MySQL homepage at http://www.mysql.org and grab the latest stable
-release of the server.  Both binaries and source are available and which
-you get shouldn't matter.  Be aware that many of the binary versions
-of MySQL store their data files in /var which on many installations
-(particularly common with linux installations) is part of a smaller
-root partition.  If you decide to build from sources you can easily set
-the dataDir as an option to configure.
-
-  If you've installed from source or non-package (RPM, deb, etc.) binaries
-you'll want to make sure to add mysqld to your init scripts so the server
-daemon will come back up whenever your machine reboots.
-
-  You also may want to edit those init scripts, to make sure that
-mysqld will accept large packets.  By default, mysqld is set up to only
-accept packets up to 64K long.  This limits the size of attachments you
-may put on bugs.  If you add something like "-O max_allowed_packet=1M"
-to the command that starts mysqld (or safe_mysqld), then you will be
-able to have attachments up to about 1 megabyte.
-
-1.2. Perl (5.004 or greater)
-
-  Any machine that doesn't have perl on it is a sad machine indeed.  Perl
-for *nix systems can be gotten in source form from http://www.perl.com.
-
-  Perl is now a far cry from the the single compiler/interpreter binary it
-once was. It now includes a great many required modules and quite a
-few other support files.  If you're not up to or not inclined to build
-perl from source, you'll want to install it on your machine using some
-sort of packaging system (be it RPM, deb, or what have you) to ensure
-a sane install.  In the subsequent sections you'll be installing quite
-a few perl modules; this can be quite ornery if your perl installation
-isn't up to snuff.
-
-1.3. DBI Perl module
-
-   The DBI module is a generic Perl module used by other database related
-Perl modules.  For our purposes it's required by the MySQL-related
-modules.  As long as your Perl installation was done correctly the
-DBI module should be a breeze.  It's a mixed Perl/C module, but Perl's
-MakeMaker system simplifies the C compilation greatly.
-
-  Like almost all Perl modules DBI can be found on the Comprehensive Perl
-Archive Network (CPAN) at http://www.cpan.org .  The CPAN servers have a
-real tendency to bog down, so please use mirrors.  The current location
-at the time of this writing (02/17/99) can be found in Appendix A.
-
-  Quality, general Perl module installation instructions can be found on
-the CPAN website, but basically you'll just need to:
-
-        1. Untar the module tarball -- it should create its own directory
-        2. Enter the following commands:
-                perl Makefile.PL
-                make
-                make test
-                make install
-
-   If everything went ok that should be all it takes.  For the vast
-majority of perl modules this is all that's required.
-
-1.4 Data::Dumper Perl module
-
-   The Data::Dumper module provides data structure persistence for Perl
-(similar to Java's serialization).  It comes with later sub-releases of
-Perl 5.004, but a re-installation just to be sure it's available won't
-hurt anything.
-
-   Data::Dumper is used by the MySQL related Perl modules.  It can be
-found on CPAN (link in Appendix A) and can be installed by following
-the same four step make sequence used for the DBI module.
-
-1.5. MySQL related Perl module collection
-
-   The Perl/MySQL interface requires a few mutually-dependent perl
-modules.  These modules are grouped together into the the
-Msql-Mysql-modules package.  This package can be found at CPAN (link
-in Appendix A).  After the archive file has been downloaded it should
-be untarred.
-
-   The MySQL modules are all build using one make file which is generated
-by running:
-
-        perl Makefile.PL
-
-   The MakeMaker process will ask you a few questions about the desired
-compilation target and your MySQL installation.  For many of the questions
-the provided default will be adequate.
-
-   When asked if your desired target is the MySQL or mSQL packages
-selected the MySQL related ones.  Later you will be asked if you wish
-to provide backwards compatibility with the older MySQL packages; you
-must answer YES to this question.  The default will be no, and if you
-select it things won't work later.
-
-   A host of 'localhost' should be fine and a testing user of 'test' and
-a null password should find itself with sufficient access to run tests
-on the 'test' database which MySQL created upon installation.  If 'make
-test' and 'make install' go through without errors you should be ready
-to go as far as database connectivity is concerned.
-
-1.6. TimeDate Perl module collection
-
-   Many of the more common date/time/calendar related Perl modules have
-been grouped into a bundle similar to the MySQL modules bundle. This
-bundle is stored on the CPAN under the name TimeDate.  A (hopefully
-current) link can be found in Appendix A.  The component module we're
-most interested in is the Date::Format module, but installing all of them
-is probably a good idea anyway.  The standard Perl module installation
-instructions should work perfectly for this simple package.
-
-1.7. GD Perl module (1.18 or 1.19)
-
-   The GD library was written by Thomas Boutell a long while ago to
-programatically generate images in C.  Since then it's become almost a
-defacto standard for programatic image construction.  The Perl bindings
-to it found in the GD library are used on a million web pages to generate
-graphs on the fly.  That's what bugzilla will be using it for so you'd
-better install it if you want any of the graphing to work.
-    Actually bugzilla uses the Graph module which relies on GD itself,
-but isn't that always the way with OOP.  At any rate, you can find the
-GD library on CPAN (link in Appendix A).  Note, however, that you MUST
-use version 1.18 or 1.19, because newer versions have dropped support
-for GIFs in favor of PNGs, and bugzilla has not yet been updated to
-deal with this.
-
-1.8. Chart::Base Perl module (0.99 through 0.99b)
-
-   The Chart module provides bugzilla with on-the-fly charting
-abilities.  It can be installed in the usual fashion after it has been
-fetched from CPAN where it is found as the Chart-x.x... tarball in a
-directory to be listed in Appendix A.  Note that as with the GD perl
-module, only the specific versions listed above will work.
-
-1.9. HTTP server
-
-   You have a freedom of choice here - Apache, Netscape or any other
-server on UNIX would do. You can easily run the web server on a different
-machine than MySQL, but that makes MySQL permissions harder to manage.
-
-   You'll want to make sure that your web server will run any file
-with the .cgi extension as a cgi and not just display it.  If you're using
-apache that means uncommenting the following line in the srm.conf file:
-
-        AddHandler cgi-script .cgi
-
-   With apache you'll also want to make sure that within the access.conf
-file the line:
-
-        Options ExecCGI
-
-is in the stanza that covers the directories you intend to put the
-bugzilla .html and .cgi files into.
-
-2. Installing the Bugzilla Files
-
-   You should untar the bugzilla files into a directory that you're
-willing to make writable by the default web server user (probably
-'nobody').  You may decide to put the files off of the main web space
-for your web server or perhaps off of /usr/local with a symbolic link
-in the web space that points to the bugzilla directory.  At any rate,
-just dump all the files in the same place (optionally omitting the CVS
-directory if it accidentally got tarred up with the rest of bugzilla)
-and make sure you can get at the files in that directory through your
-web server.
-
-   Once all the files are in a web accessible directory, make that
-directory writable by your webserver's user (which may require just
-making it world writable).  
-        
-   Lastly, you'll need to set up a symbolic link from /usr/bonsaitools/bin
-to the correct location of your perl executable (probably /usr/bin/perl).
-Or, you'll have to hack all the .cgi files to change where they look
-for perl.
-
-3. Setting Up the MySQL database
-
-   After you've gotten all the software installed and working you're ready
-to start preparing the database for its life as a the back end to a high
-quality bug tracker.
-
-    First, you'll want to fix MySQL permissions.  Bugzilla always logs
-in as user "bugs", with no password.  That needs to work.  MySQL
-permissions are a deep, nasty complicated thing.  I've just turned
-them off.  If you want to do that, too, then the magic is to do run
-"mysql mysql", and feed it commands like this (replace all instances of
-HOSTNAME with the name of the machine mysql is running on):
-
-        DELETE FROM host;
-        DELETE FROM user;
-        INSERT INTO host VALUES
-          ('localhost','%','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
-        INSERT INTO host VALUES
-          (HOSTNAME,'%','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
-        INSERT INTO user VALUES
-          ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y',
-          'Y','Y','Y','Y','Y');
-        INSERT INTO user VALUES
-          (HOSTNAME,'','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y',
-          'Y','Y','Y');
-        INSERT INTO user VALUES
-          (HOSTNAME,'root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y',
-          'Y','Y','Y','Y');
-        INSERT INTO user VALUES
-          ('localhost','','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y',
-          'Y','Y','Y','Y');
-
-The number of 'Y' entries to use varies with the version of MySQL; they
-keep adding columns.  The list here should work with version 3.22.23b.
-
-This run of "mysql mysql" may need some extra parameters to deal with
-whatever database permissions were set up previously.  In particular,
-you might have to say "mysql -uroot mysql", and give it an appropriate
-password.
-
-For much more information about MySQL permissions, see the MySQL
-documentation.
-
-After you've tweaked the permissions, run "mysqladmin reload" to make
-sure that the database server knows to look at your new permission list.
-
-Or, at the mysql prompt:
-
-mysql> flush privileges;
-
-You must explictly tell mysql to reload permissions before running checksetup.pl.
-
-Next, you can just run the magic checksetup.pl script.  (Many thanks
-to Holger Schurig <holgerschurig@nikocity.de> for writing this script!)
-It will make sure things have reasonable permissions, set up the "data"
-directory, and create all the MySQL tables.  Just run:
-
-        ./checksetup.pl
-
-The first time you run it, it will create a file called "localconfig"
-which you should examine and perhaps tweak a bit.  Then re-run
-checksetup.pl and it will do the real work.
-
-
-At ths point, you should have a nearly empty copy of the bug tracking
-setup.
-
-4. Tweaking the Bugzilla->MySQL Connection Data
-
-   If you have played with MySQL permissions, rather than just opening it
-wide open as described above, then you may need to tweak the Bugzilla
-code to connect appropriately.
-
-   In order for bugzilla to be able to connect to the MySQL database
-you'll have to tell bugzilla where the database server is, what
-database you're connecting to, and whom to connect as.  Simply open up
-the globals.pl file in the bugzilla directory and find the line that
-begins like:
-
-        $::db = Mysql->Connect("
-
-   That line does the actual database connection.  The Connect method
-takes four parameters which are (with appropriate values):
-
-        1. server's host: just use "localhost"
-        2. database name: "bugs" if you're following these directions
-        3. MySQL username: whatever you created for your webserver user
-                probably "nobody"
-        4. Password for the MySQL account in item 3.
-
-Just fill in those values and close up globals.pl
-
-5. Setting up yourself as Maintainer
-
-    Start by creating your own bugzilla account.  To do so, just try to
-"add a bug" from the main bugzilla menu (now available from your system
-through your web browser!).  You'll be prompted for logon info, and you
-should enter your email address and then select 'mail me my password'.
-When you get the password mail, log in with it.  Don't finish entering
-that new bug.
-
-    Now, add yourself to every group.  The magic checksetup.pl script
-can do this for you, if you run it again now.  That script will notice
-if there's exactly one user in the database, and if so, add that person
-to every group.
-
-    If you want to add someone to every group by hand, you can do it by
-typing the appropriate MySQL commands.  Run mysql, and type:
-
-        update profiles set groupset=0x7fffffffffffffff
-        where login_name = 'XXX';
-
-replacing XXX with your Bugzilla email address.
-
-Now, if you go to the query page (off of the bugzilla main menu) where
-you'll now find a 'edit parameters' option which is filled with editable
-treats.
-
-6. Setting Up the Whining Cron Job (Optional)
-
-   By now you've got a fully functional bugzilla, but what good are bugs
-if they're not annoying?  To help make those bugs more annoying you can
-set up bugzilla's automatic whining system.  This can be done by adding
-the following command as a daily crontab entry (for help on that see that
-crontab man page):
-
-        cd <your-bugzilla-directory> ; ./whineatnews.pl
-
-7. Bug Graphs (Optional)
-
-   As long as you installed the GD and Graph::Base Perl modules you might
-as well turn on the nifty bugzilla bug reporting graphs.  Just add
-the command:
-
-        cd <your-bugzilla-directory> ; ./collectstats.pl
-
-as a nightly entry to your crontab and after two days have passed you'll
-be able to view bug graphs from the Bug Reports page.
-
-8. Real security for MySQL
-
-MySQL has "interesting" default security parameters:
-        mysqld defaults to running as root
-        it defaults to allowing external network connections
-        it has a known port number, and is easy to detect
-        it defaults to no passwords whatsoever
-        it defaults to allowing "File_Priv"
-This means anyone from anywhere on the internet can not only drop the
-database with one SQL command, and they can write as root to the system.
-
-To see your permissions do:
-        > mysql -u root -p
-        use mysql;
-        show tables;
-        select * from user;
-        select * from db;
-
-To fix the gaping holes:
-        DELETE FROM user WHERE User='';
-        UPDATE user SET Password=PASSWORD('new_password') WHERE user='root';
-        FLUSH PRIVILEGES;
-
-If you're not running "mit-pthreads" you can use:
-        GRANT USAGE ON *.* TO bugs@localhost;
-        GRANT ALL ON bugs.* TO bugs@localhost;
-        REVOKE DROP ON bugs.* FROM bugs@localhost;
-        FLUSH PRIVILEGES;
-
-With "mit-pthreads" you'll need to modify the "globals.pl" Mysql->Connect
-line to specify a specific host name instead of "localhost", and accept
-external connections:
-        GRANT USAGE ON *.* TO bugs@bounce.hop.com;
-        GRANT ALL ON bugs.* TO bugs@bounce.hop.com;
-        REVOKE DROP ON bugs.* FROM bugs@bounce.hop.com;
-        FLUSH PRIVILEGES;
-
-Consider also:
-        o Turning off external networking with "--skip-networking",
-          unless you have "mit-pthreads", in which case you can't.
-          Without networking, MySQL connects with a Unix domain socket.
-
-        o using the --user= option to mysqld to run it as an unprivileged
-          user.
-
-        o starting MySQL in a chroot jail
-
-        o running the httpd in a jail
-
-        o making sure the MySQL passwords are different from the OS
-          passwords (MySQL "root" has nothing to do with system "root").
-
-        o running MySQL on a separate untrusted machine
-
-        o making backups ;-)
-
-
-
----------[ Appendices ]-----------------------
-
-Appendix A. Required Software Download Links
-
-   All of these sites are current as of February 17, 1999.  Hopefully
-they'll stay current for a while.
-
-MySQL: http://www.mysql.org
-
-Perl: http://www.perl.org
-
-CPAN: http://www.cpan.org
-
-DBI Perl module: ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/DBI/
-
-Data::Dumper module:
-        ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/Data/
-
-MySQL related Perl modules:
-        ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/Mysql/
-
-TimeDate Perl module collection:
-        ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/Date/
-
-GD Perl module: ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/GD/
-
-Chart::Base module:
-        ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/Chart/
-
-
-Appendix B. Modifying Your Running System
-
-   Bugzilla optimizes database lookups by storing all relatively static
-information in the versioncache file, located in the data/ subdirectory
-under your installation directory (we said before it needs to be writable,
-right?!)
-
-   If you make a change to the structural data in your database (the
-versions table for example), or to the "constants" encoded in
-defparams.pl, you will need to remove the cached content from the data
-directory (by doing a "rm data/versioncache"), or your changes won't show
-up!
-
-   That file gets automatically regenerated whenever it's more than an
-hour old, so Bugzilla will eventually notice your changes by itself, but
-generally you want it to notice right away, so that you can test things.
-
-
-Appendix C. Upgrading from previous versions of Bugzilla
-
-The developers of Bugzilla are constantly adding new tables, columns and
-fields.  You'll get SQL errors if you just update the code.  The strategy
-to update is to simply always run the checksetup.pl script whenever
-you upgrade your installation of Bugzilla.  If you want to see what has
-changed, you can read the comments in that file, starting from the end.
-
-
-Appendix D. History
-
-   This document was originally adapted from the Bonsai installation
-instructions by Terry Weissman <terry@mozilla.org>.
-
-   The February 25, 1999 re-write of this page was done by Ry4an Brase
-<ry4an@ry4an.org>, with some edits by Terry Weissman, Bryce Nesbitt,
-Martin Pool, & Dan Mosedale (But don't send bug reports to them!
-Report them using bugzilla, at http://bugzilla.mozilla.org/enter_bug.cgi ,
-project Webtools, component Bugzilla).
-
-   Comments from people using this document for the first time are
-especially welcomed.
+        =====================
+        BUGZILLA 2.12 RELEASE
+        =====================
+	
+* This README is no longer used to house installation instructions.  Instead,
+it contains pointers to where you may find the information you need.
+
+* Installation instructions are now found in docs/, with a variety of document
+types available.  Please refer to these documents when installing, configuring,
+and maintaining your Bugzilla installation.  A helpful starting point is
+docs/txt/Bugzilla-Guide.txt, or with a web browser at docs/html/index.html.
+	
+* Release Notes for Bugzilla 2.12 are available at docs/rel_notes.txt.
+
+* If you wish to contribute to the documentation, please read docs/README.docs.
diff --git a/RelationSet.pm b/RelationSet.pm
index ee402e7a4..bc31c96c7 100644
--- a/RelationSet.pm
+++ b/RelationSet.pm
@@ -18,6 +18,7 @@
 # 
 # Contributor(s): Dan Mosedale <dmose@mozilla.org>
 #                 Terry Weissman <terry@mozilla.org>
+#                 Dave Miller <justdave@syndicomm.com>
 
 # This object models a set of relations between one item and a group
 # of other items.  An example is the set of relations between one bug
@@ -179,6 +180,42 @@ sub mergeFromString {
   }
 }
 
+# remove a set in string form from this set
+#
+sub removeItemsInString {
+  ($#_ == 1) || confess("invalid number of arguments");
+  my $self = shift();
+
+  # do the merge
+  #
+  foreach my $person (split(/[ ,]/, shift())) {
+    if ($person ne "") {
+      my $dbid = &::DBNameToIdAndCheck($person);
+      if (exists $$self{$dbid}) {
+        delete $$self{$dbid};
+      }
+    }
+  }
+}
+
+# remove a set in array form from this set
+#
+sub removeItemsInArray {
+  ($#_ > 0) || confess("invalid number of arguments");
+  my $self = shift();
+
+  # do the merge
+  #
+  while (my $person = shift()) {
+    if ($person ne "") {
+      my $dbid = &::DBNameToIdAndCheck($person);
+      if (exists $$self{$dbid}) {
+        delete $$self{$dbid};
+      }
+    }
+  }
+}
+
 # return the number of elements in this set
 #
 sub size {
@@ -196,6 +233,20 @@ sub toArray {
   return keys(%$self);
 }
 
+# return this set as an array of strings
+#
+sub toArrayOfStrings {
+  ($#_ == 0) || confess("invalid number of arguments");
+  my $self = shift();
+
+  my @result = ();
+  foreach my $i ( keys %$self ) {
+    push @result, &::DBID_to_name($i);
+  }
+
+  return sort(@result);
+}  
+
 # return this set in string form (comma-separated and sorted)
 #
 sub toString {
diff --git a/backdoor.cgi b/backdoor.cgi
index b4848a1bb..f46cb6759 100755
--- a/backdoor.cgi
+++ b/backdoor.cgi
@@ -175,4 +175,4 @@ foreach my $cc (split(/,/, $::FORM{'cc'})) {
 }
 
 print "Created bugzilla bug $zillaid\n";
-system("./processmail $zillaid");
+system("./processmail", $zillaid);
diff --git a/booleanchart.html b/booleanchart.html
index 7962db2b7..9c136b98a 100644
--- a/booleanchart.html
+++ b/booleanchart.html
@@ -69,11 +69,11 @@ the two terms in two different charts.
 
 Clear as mud?  Please, I beg you, rewrite this document to make
 everything crystal clear, and send the improved version to <a
-href="mailto:terry@mozilla.org">Terry</a>.
+href="mailto:tara@tequilarista.org">Tara</a>.
 
 <hr>
 
 <!-- hhmts start -->
-Last modified: Fri Jan 28 12:34:41 2000
+Last modified: Wed Aug 16 16:06:36 2000
 <!-- hhmts end -->
 </body> </html>
diff --git a/bug_form.pl b/bug_form.pl
index 176c38035..0706ede99 100644
--- a/bug_form.pl
+++ b/bug_form.pl
@@ -18,6 +18,7 @@
 # Rights Reserved.
 #
 # Contributor(s): Terry Weissman <terry@mozilla.org>
+#                 Dave Miller <justdave@syndicomm.com>
 
 use diagnostics;
 use strict;
@@ -38,7 +39,7 @@ sub bug_form_pl_sillyness {
     $zz = @::legal_platform;
     $zz = @::legal_product;
     $zz = @::legal_priority;
-    $zz = @::legal_resolution_no_dup;
+    $zz = @::settable_resolution;
     $zz = @::legal_severity;
     $zz = %::target_milestone;
 }
@@ -118,6 +119,7 @@ my $assignedtoid = $bug{'assigned_to'};
 my $reporterid = $bug{'reporter'};
 my $qacontactid =  $bug{'qa_contact'};
 
+$bug{'assigned_to_email'} = DBID_to_name($assignedtoid);
 $bug{'assigned_to'} = DBID_to_real_or_loginname($bug{'assigned_to'});
 $bug{'reporter'} = DBID_to_real_or_loginname($bug{'reporter'});
 
@@ -139,8 +141,6 @@ GetVersionTable();
 # These should be read from the database ...
 #
 
-my $resolution_popup = make_options(\@::legal_resolution_no_dup,
-				    $bug{'resolution'});
 my $platform_popup = make_options(\@::legal_platform, $bug{'rep_platform'});
 my $priority_popup = make_options(\@::legal_priority, $bug{'priority'});
 my $sev_popup = make_options(\@::legal_severity, $bug{'bug_severity'});
@@ -151,11 +151,18 @@ my $component_popup = make_options($::components{$bug{'product'}},
 
 my $ccSet = new RelationSet;
 $ccSet->mergeFromDB("select who from cc where bug_id=$id");
-my $cc_element = '<INPUT NAME=cc SIZE=30 VALUE="' .
-  $ccSet->toString() . '">';
-
+my @ccList = $ccSet->toArrayOfStrings();
+my $cc_element = "<INPUT TYPE=HIDDEN NAME=cc VALUE=\"\">";
+if (scalar(@ccList) > 0) {
+  $cc_element = "<SELECT NAME=cc MULTIPLE SIZE=5>\n";
+  foreach my $ccName ( @ccList ) {
+    $cc_element .= "<OPTION VALUE=\"$ccName\">$ccName\n";
+  }
+  $cc_element .= "</SELECT><BR>\n" .
+        "<INPUT TYPE=CHECKBOX NAME=removecc>Remove selected CCs<br>\n";
+}
 
-my $URL = $bug{'bug_file_loc'};
+my $URL = value_quote($bug{'bug_file_loc'});
 
 if (defined $URL && $URL ne "none" && $URL ne "NULL" && $URL ne "") {
     $URL = "<B><A HREF=\"$URL\">URL:</A></B>";
@@ -168,41 +175,56 @@ print "
 <INPUT TYPE=HIDDEN NAME=\"longdesclength\" VALUE=\"$longdesclength\">
 <INPUT TYPE=HIDDEN NAME=\"id\" VALUE=$id>
   <TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0><TR>
-    <TD ALIGN=RIGHT><B>Bug#:</B></TD><TD><A HREF=\"show_bug.cgi?id=$bug{'bug_id'}\">$bug{'bug_id'}</A></TD>
+    <TD ALIGN=RIGHT><B>Bug#:</B></TD><TD><A HREF=\"" . Param('urlbase') . "show_bug.cgi?id=$bug{'bug_id'}\">$bug{'bug_id'}</A></TD>
+  <TD>&nbsp;</TD>
     <TD ALIGN=RIGHT><B><A HREF=\"bug_status.html#rep_platform\">Platform:</A></B></TD>
     <TD><SELECT NAME=rep_platform>$platform_popup</SELECT></TD>
-    <TD ALIGN=RIGHT><B>Version:</B></TD>
-    <TD><SELECT NAME=version>" .
-    make_options($::versions{$bug{'product'}}, $bug{'version'}) .
-    "</SELECT></TD>
-  </TR><TR>
+  <TD>&nbsp;</TD>
+    <TD ALIGN=RIGHT><B>Reporter:</B></TD><TD>$bug{'reporter'}</TD>
+</TR><TR>
     <TD ALIGN=RIGHT><B>Product:</B></TD>
     <TD><SELECT NAME=product>" .
     make_options(\@::legal_product, $bug{'product'}) .
     "</SELECT></TD>
+  <TD>&nbsp;</TD>
     <TD ALIGN=RIGHT><B>OS:</B></TD>
     <TD><SELECT NAME=op_sys>" .
     make_options(\@::legal_opsys, $bug{'op_sys'}) .
-    "</SELECT><TD ALIGN=RIGHT><B>Reporter:</B></TD><TD>$bug{'reporter'}</TD>
-     </TDTR><TR>
+    "</SELECT></TD>
+  <TD>&nbsp;</TD>
+    <TD ALIGN=RIGHT NOWRAP><b>Add CC:</b></TD>
+    <TD><INPUT NAME=newcc SIZE=30 VALUE=\"\"></TD>
+</TR><TR>
+    <TD ALIGN=RIGHT><B><A HREF=\"describecomponents.cgi?product=" .
+    url_quote($bug{'product'}) . "\">Component:</A></B></TD>
+      <TD><SELECT NAME=component>$component_popup</SELECT></TD>
+  <TD>&nbsp;</TD>
+    <TD ALIGN=RIGHT><B>Version:</B></TD>
+    <TD><SELECT NAME=version>" .
+    make_options($::versions{$bug{'product'}}, $bug{'version'}) .
+    "</SELECT></TD>
+  <TD>&nbsp;</TD>
+    <TD ROWSPAN=4 ALIGN=RIGHT VALIGN=TOP><B>Cc:</B></TD>
+    <TD ROWSPAN=4 VALIGN=TOP> $cc_element </TD>
+</TR><TR>
     <TD ALIGN=RIGHT><B><A HREF=\"bug_status.html\">Status:</A></B></TD>
       <TD>$bug{'bug_status'}</TD>
+  <TD>&nbsp;</TD>
     <TD ALIGN=RIGHT><B><A HREF=\"bug_status.html#priority\">Priority:</A></B></TD>
       <TD><SELECT NAME=priority>$priority_popup</SELECT></TD>
-    <TD ALIGN=RIGHT><B>Cc:</B></TD>
-      <TD> $cc_element </TD>
-  </TR><TR>
+  <TD>&nbsp;</TD>
+</TR><TR>
     <TD ALIGN=RIGHT><B><A HREF=\"bug_status.html\">Resolution:</A></B></TD>
       <TD>$bug{'resolution'}</TD>
+  <TD>&nbsp;</TD>
     <TD ALIGN=RIGHT><B><A HREF=\"bug_status.html#severity\">Severity:</A></B></TD>
       <TD><SELECT NAME=bug_severity>$sev_popup</SELECT></TD>
-    <TD ALIGN=RIGHT><B><A HREF=\"describecomponents.cgi?product=" .
-    url_quote($bug{'product'}) . "\">Component:</A></B></TD>
-      <TD><SELECT NAME=component>$component_popup</SELECT></TD>
-  </TR><TR>
+  <TD>&nbsp;</TD>
+</TR><TR>
     <TD ALIGN=RIGHT><B><A HREF=\"bug_status.html#assigned_to\">Assigned&nbsp;To:
         </A></B></TD>
-      <TD>$bug{'assigned_to'}</TD>";
+      <TD>$bug{'assigned_to'}</TD>
+  <TD>&nbsp;</TD>";
 
 if (Param("usetargetmilestone")) {
     my $url = "";
@@ -220,8 +242,9 @@ if (Param("usetargetmilestone")) {
 <TD><SELECT NAME=target_milestone>" .
     make_options($::target_milestone{$bug{'product'}},
                  $bug{'target_milestone'}) .
-                     "</SELECT></TD>";
-}
+                     "</SELECT></TD>
+  <TD>&nbsp;</TD>";
+} else { print "<TD></TD><TD></TD><TD>&nbsp;</TD>"; }
 
 print "
 </TR>";
@@ -231,10 +254,10 @@ if (Param("useqacontact")) {
     print "
   <TR>
     <TD ALIGN=\"RIGHT\"><B>QA Contact:</B>
-    <TD COLSPAN=6>
+    <TD COLSPAN=7>
       <INPUT NAME=qa_contact VALUE=\"" .
     value_quote($name) .
-    "\" SIZE=60></
+    "\" SIZE=60></TD>
   </TR>";
 }
 
@@ -242,11 +265,11 @@ if (Param("useqacontact")) {
 print "
   <TR>
     <TD ALIGN=\"RIGHT\">$URL
-    <TD COLSPAN=6>
-      <INPUT NAME=bug_file_loc VALUE=\"$bug{'bug_file_loc'}\" SIZE=60></TD>
+    <TD COLSPAN=7>
+      <INPUT NAME=bug_file_loc VALUE=\"" . value_quote($bug{'bug_file_loc'}) . "\" SIZE=60></TD>
   </TR><TR>
     <TD ALIGN=\"RIGHT\"><B>Summary:</B>
-    <TD COLSPAN=6>
+    <TD COLSPAN=7>
       <INPUT NAME=short_desc VALUE=\"" .
     value_quote($bug{'short_desc'}) .
     "\" SIZE=60></TD>
@@ -256,10 +279,10 @@ if (Param("usestatuswhiteboard")) {
     print "
   <TR>
     <TD ALIGN=\"RIGHT\"><B>Status Whiteboard:</B>
-    <TD COLSPAN=6>
+    <TD COLSPAN=7>
       <INPUT NAME=status_whiteboard VALUE=\"" .
     value_quote($bug{'status_whiteboard'}) .
-    "\" SIZE=60></
+    "\" SIZE=60></TD>
   </TR>";
 }
 
@@ -275,47 +298,36 @@ if (@::legal_keywords) {
     my $value = value_quote(join(', ', @list));
     print qq{
 <TR>
-<TD ALIGN=right><B><A HREF="describekeywords.cgi">Keywords</A>:</B>
-<TD COLSPAN=6><INPUT NAME="keywords" VALUE="$value" SIZE=60></TD>
+<TD ALIGN=right><B><A HREF="describekeywords.cgi">Keywords:</A></B>
+<TD COLSPAN=7><INPUT NAME="keywords" VALUE="$value" SIZE=60></TD>
 </TR>
 };
 }
 
 print "<tr><td align=right><B>Attachments:</b></td>\n";
-SendSQL("select attach_id, creation_ts, description from attachments where bug_id = $id");
+SendSQL("select attach_id, creation_ts, mimetype, description from attachments where bug_id = $id");
 while (MoreSQLData()) {
-    my ($attachid, $date, $desc) = (FetchSQLData());
+    my ($attachid, $date, $mimetype, $desc) = (FetchSQLData());
     if ($date =~ /^(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)$/) {
         $date = "$3/$4/$2 $5:$6";
     }
     my $link = "showattachment.cgi?attach_id=$attachid";
     $desc = value_quote($desc);
-    print qq{<td><a href="$link">$date</a></td><td colspan=4>$desc</td></tr><tr><td></td>};
+    print qq{<td><a href="$link">$date</a></td><td colspan=6>$desc&nbsp;&nbsp;&nbsp;($mimetype)</td></tr><tr><td></td>};
 }
-print "<td colspan=6><a href=\"createattachment.cgi?id=$id\">Create a new attachment</a> (proposed patch, testcase, etc.)</td></tr></table>\n";
+print "<td colspan=7><a href=\"createattachment.cgi?id=$id\">Create a new attachment</a> (proposed patch, testcase, etc.)</td></tr></table>\n";
 
 
 sub EmitDependList {
     my ($desc, $myfield, $targetfield) = (@_);
     print "<th align=right>$desc:</th><td>";
     my @list;
-    SendSQL("select dependencies.$targetfield, bugs.bug_status
- from dependencies, bugs
- where dependencies.$myfield = $id
-   and bugs.bug_id = dependencies.$targetfield
- order by dependencies.$targetfield");
+    SendSQL("select $targetfield from dependencies where  
+             $myfield = $id order by $targetfield");
     while (MoreSQLData()) {
-        my ($i, $stat) = (FetchSQLData());
+        my ($i) = (FetchSQLData());
         push(@list, $i);
-        my $opened = ($stat eq "NEW" || $stat eq "ASSIGNED" ||
-                      $stat eq "REOPENED");
-        if (!$opened) {
-            print "<strike>";
-        }
-        print qq{<a href="show_bug.cgi?id=$i">$i</a>};
-        if (!$opened) {
-            print "</strike>";
-        }
+        print GetBugLink($i, $i);
         print " ";
     }
     print "</td><td><input name=$targetfield value=\"" .
@@ -352,7 +364,7 @@ print "
 <br>
 <B>Additional Comments:</B>
 <BR>
-<TEXTAREA WRAP=HARD NAME=comment ROWS=5 COLS=80></TEXTAREA><BR>";
+<TEXTAREA WRAP=HARD NAME=comment ROWS=10 COLS=80></TEXTAREA><BR>";
 
 
 if ($::usergroupset ne '0') {
@@ -399,6 +411,9 @@ if ($status eq $::unconfirmedstate) {
     }
 }
 
+my $movers = Param("movers");
+$movers =~ s/\s?,\s?/|/g;
+$movers =~ s/@/\@/g;
 
 if ($canedit || $::userid == $assignedtoid ||
       $::userid == $reporterid || $::userid == $qacontactid) {
@@ -418,6 +433,8 @@ if ($canedit || $::userid == $assignedtoid ||
             print "<b>$bug{'resolution'}</b>)<br>\n";
             $knum++;
         }
+        my $resolution_popup = make_options(\@::settable_resolution,
+                                            $bug{'resolution'});
         print "<INPUT TYPE=radio NAME=knob VALUE=resolve>
         Resolve bug, changing <A HREF=\"bug_status.html\">resolution</A> to
         <SELECT NAME=resolution
@@ -428,11 +445,7 @@ if ($canedit || $::userid == $assignedtoid ||
         Resolve bug, mark it as duplicate of bug # 
         <INPUT NAME=dup_id SIZE=6 ONCHANGE=\"document.changeform.knob\[$knum\].checked=true\"><br>\n";
         $knum++;
-        if ( $bug{'assigned_to'} =~ /(.*)\((.*)\)/ ) {
-           $bug{'assigned_to'} = $1;
-           chop($bug{'assigned_to'});
-        }
-        my $assign_element = "<INPUT NAME=\"assigned_to\" SIZE=32 ONCHANGE=\"document.changeform.knob\[$knum\].checked=true\" VALUE=\"$bug{'assigned_to'}\">";
+        my $assign_element = "<INPUT NAME=\"assigned_to\" SIZE=32 ONCHANGE=\"document.changeform.knob\[$knum\].checked=true\" VALUE=\"$bug{'assigned_to_email'}\">";
 
         print "<INPUT TYPE=radio NAME=knob VALUE=reassign> 
           <A HREF=\"bug_status.html#assigned_to\">Reassign</A> bug to
@@ -443,11 +456,29 @@ if ($canedit || $::userid == $assignedtoid ||
         }
         $knum++;
         print "<INPUT TYPE=radio NAME=knob VALUE=reassignbycomponent>
-          Reassign bug to owner of selected component<br>\n";
+          Reassign bug to owner ";
+        if (Param("useqacontact")) { print "and QA contact "; }
+        print "of selected component<br>\n";
         if ($status eq $::unconfirmedstate && ($canconfirm || $canedit)) {
             print "&nbsp;&nbsp;&nbsp;&nbsp;<INPUT TYPE=checkbox NAME=compconfirm> and confirm bug (change status to <b>NEW</b>)<BR>";
         }
         $knum++;
+    } elsif ( Param("move-enabled") && ($bug{'resolution'} eq "MOVED") ) {
+        if ( (defined $::COOKIE{"Bugzilla_login"}) 
+             && ($::COOKIE{"Bugzilla_login"} =~ /($movers)/) ){
+          print "<INPUT TYPE=radio NAME=knob VALUE=reopen> Reopen bug<br>\n";
+          $knum++;
+          if ($status eq "RESOLVED") {
+              print "<INPUT TYPE=radio NAME=knob VALUE=verify>
+          Mark bug as <b>VERIFIED</b><br>\n";
+              $knum++;
+          }
+          if ($status ne "CLOSED") {
+              print "<INPUT TYPE=radio NAME=knob VALUE=close>
+          Mark bug as <b>CLOSED</b><br>\n";
+              $knum++;
+          }
+        }
     } else {
         print "<INPUT TYPE=radio NAME=knob VALUE=reopen> Reopen bug<br>\n";
         $knum++;
@@ -467,13 +498,24 @@ if ($canedit || $::userid == $assignedtoid ||
 print "
 <INPUT TYPE=\"submit\" VALUE=\"Commit\">
 <INPUT TYPE=\"reset\" VALUE=\"Reset\">
-<INPUT TYPE=hidden name=form_name VALUE=process_bug>
-<BR>
+<INPUT TYPE=\"hidden\" name=\"form_name\" VALUE=\"process_bug\">
+<P>
 <FONT size=\"+1\"><B>
  <A HREF=\"show_activity.cgi?id=$id\">View Bug Activity</A>
+ &nbsp; | &nbsp;
  <A HREF=\"long_list.cgi?buglist=$id\">Format For Printing</A>
-</B></FONT><BR>
-</FORM>
+</B></FONT>
+";
+
+if ( Param("move-enabled") && (defined $::COOKIE{"Bugzilla_login"}) && ($::COOKIE{"Bugzilla_login"} =~ /($movers)/) ){
+  print "&nbsp; <FONT size=\"+1\"><B> | </B></FONT> &nbsp;"
+       ."<INPUT TYPE=\"SUBMIT\" NAME=\"action\" VALUE=\"" 
+       . Param("move-button-text") . "\">\n";
+}
+
+print "<BR></FORM>";
+
+print "
 <table><tr><td align=left><B>Description:</B></td>
 <td align=right width=100%>Opened: $bug{'creation_ts'}</td></tr></table>
 <HR>
diff --git a/bug_status.html b/bug_status.html
index 18d64d3ad..2b052786d 100755
--- a/bug_status.html
+++ b/bug_status.html
@@ -1,3 +1,4 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
 <HTML>
 
 <!--
@@ -30,13 +31,12 @@
 The <B>status</B> and <B>resolution</B> field define and track the
 life cycle of a bug.
 
-<a name="status">
+<a name="status"></a>
 <p>
-</a>
 <TABLE BORDER=1 CELLPADDING=4>
 
 <TR ALIGN=CENTER VALIGN=TOP>
-<TD WIDTH=50%><H1>STATUS</H1> <TD><H1>RESOLUTION</H1>
+<TD WIDTH="50%"><H1>STATUS</H1> <TD><H1>RESOLUTION</H1>
 
 <TR VALIGN=TOP>
 <TD>The <B>status</B> field indicates the general health of a bug. Only
@@ -120,7 +120,7 @@ certain status transitions are allowed.
 <H1>Other Fields</H1>
 
 <table border=1 cellpadding=4><tr><td>
-<a name="severity"><h2>Severity</h2></a>
+<h2><a name="severity">Severity</a></h2>
 
 This field describes the impact of a bug.
 
@@ -132,13 +132,13 @@ This field describes the impact of a bug.
 <tr><th>Critical</th><td>crashes, loss of data, severe memory leak 
 <tr><th>Major</th><td>major loss of function 
 <tr><th>Minor</th><td>minor loss of function, or other problem where easy workaround is present 
-<tr><th>Trivial</th><td>cosmetic problem like misspelt words or misaligned text 
+<tr><th>Trivial</th><td>cosmetic problem like misspelled words or misaligned text 
 <tr><th>Enhancement</th><td>Request for enhancement
 </table> 
 
 </td><td>
 
-<a name="priority"><h2>Priority</h2></a>
+<h2><a name="priority">Priority</a></h2>
 
 This field describes the importance and order in which a bug should be
 fixed.  This field is utilized by the programmers/engineers to
@@ -156,7 +156,7 @@ prioritized their work to be done.  The available priorities are:
 </table>
 </tr></table>
 
-<a name="rep_platform"><h2>Platform</h2></a>
+<h2><a name="rep_platform">Platform</a></h2>
 This is the hardware platform against which the bug was reported.  Legal
 platforms include:
 
@@ -171,7 +171,7 @@ platforms include:
 <b>Note:</b> Selecting the option "All" does not select bugs assigned against all platforms.  It
 merely selects bugs that <b>occur</b> on all platforms.
 
-<a name="op_sys"><h2>Operating System</h2></a>
+<h2><a name="op_sys">Operating System</a></h2>
 This is the operating system against which the bug was reported.  Legal
 operating systems include:
 
@@ -185,7 +185,7 @@ operating systems include:
 Note that the operating system implies the platform, but not always.
 For example, Linux can run on PC and Macintosh and others.
 
-<a name="assigned_to"><h2>Assigned To</h2></a>
+<h2><a name="assigned_to">Assigned To</a></h2>
 
 This is the person in charge of resolving the bug.  Every time this
 field changes, the status changes to <B>NEW</B> to make it easy to see
diff --git a/buglist.cgi b/buglist.cgi
index 34cd9fbeb..63296a914 100755
--- a/buglist.cgi
+++ b/buglist.cgi
@@ -20,6 +20,7 @@
 #
 # Contributor(s): Terry Weissman <terry@mozilla.org>
 #                 Dan Mosedale <dmose@mozilla.org>
+#                 Stephan Niemz  <st.n@gmx.net>
 
 use diagnostics;
 use strict;
@@ -36,12 +37,11 @@ sub sillyness {
     $zz = $::unconfirmedstate;
     $zz = @::components;
     $zz = @::default_column_list;
-    $zz = @::keywordsbyname;
     $zz = @::legal_keywords;
     $zz = @::legal_platform;
     $zz = @::legal_priority;
     $zz = @::legal_product;
-    $zz = @::legal_resolution_no_dup;
+    $zz = @::settable_resolution;
     $zz = @::legal_severity;
     $zz = @::versions;
     $zz = @::target_milestone;
@@ -116,8 +116,8 @@ sub Error {
     }
     PuntTryAgain($str);
 }
-    
-        
+
+
 
 
 
@@ -146,7 +146,7 @@ sub GenerateSQL {
             ("bugs.assigned_to = map_assigned_to.userid",
              "bugs.reporter = map_reporter.userid",
              "bugs.groupset & $::usergroupset = bugs.groupset"));
-            
+
 
     my $minvotes;
     if (defined $F{'votes'}) {
@@ -164,7 +164,7 @@ sub GenerateSQL {
     if ($M{'bug_id'}) {
         my $type = "anyexact";
         if ($F{'bugidtype'} && $F{'bugidtype'} eq 'exclude') {
-            $type = "noexact";
+            $type = "nowords";
         }
         push(@specialchart, ["bug_id", $type, join(',', @{$M{'bug_id'}})]);
     }
@@ -236,7 +236,7 @@ sub GenerateSQL {
         }
     }
 
-                
+
     if (defined $F{'changedin'}) {
         my $c = trim($F{'changedin'});
         if ($c ne "") {
@@ -273,7 +273,7 @@ sub GenerateSQL {
 
     if (defined $ref && 0 < @$ref) {
         push(@supptables, "bugs_activity actcheck");
-    
+
         my @list;
         foreach my $f (@$ref) {
             push(@list, "\nactcheck.fieldid = " . GetFieldID($f));
@@ -313,7 +313,6 @@ sub GenerateSQL {
             }
         }
     }
-    
 
     my $chartid;
     my $f;
@@ -335,11 +334,13 @@ sub GenerateSQL {
                   "LEFT JOIN profiles map_qa_contact ON bugs.qa_contact = map_qa_contact.userid");
              $f = "map_$f.login_name";
          },
+
          "^cc," => sub {
-             push(@supptables,
-                  ("LEFT JOIN cc cc_$chartid ON bugs.bug_id = cc_$chartid.bug_id LEFT JOIN profiles map_cc_$chartid ON cc_$chartid.who = map_cc_$chartid.userid"));
-             $f = "map_cc_$chartid.login_name";
+            push(@supptables,                                                  
+              ("LEFT JOIN cc cc_$chartid ON bugs.bug_id = cc_$chartid.bug_id LEFT JOIN profiles map_cc_$chartid ON cc_$chartid.who = map_cc_$chartid.userid"));
+            $f = "map_cc_$chartid.login_name";  
          },
+
          "^long_?desc,changedby" => sub {
              my $table = "longdescs_$chartid";
              push(@supptables, "longdescs $table");
@@ -405,13 +406,13 @@ sub GenerateSQL {
                  if ($value eq '') {
                      next;
                  }
-                 my $id = $::keywordsbyname{$value};
+                 my $id = GetKeywordIdFromName($value);
                  if ($id) {
                      push(@list, "$table.keywordid = $id");
                  } else {
                      return Error("Unknown keyword named <code>$v</code>.\n" .
                                   "<P>The legal keyword names are\n" .
-                                  "<A HREF=describekeywords.cgi>" . 
+                                  "<A HREF=describekeywords.cgi>" .
                                   "listed here</A>.\n");
                  }
              }
@@ -434,12 +435,22 @@ sub GenerateSQL {
              }
          },
 
-	 "^(dependson|blocked)," => sub {
-		push(@supptables, "dependencies");
-		$ff = "dependencies.$f";
+	 "^dependson," => sub {
+                my $table = "dependson_" . $chartid;
+		push(@supptables, "dependencies $table");
+		$ff = "$table.$f";
+		$ref = $funcsbykey{",$t"};
+		&$ref;
+                push(@wherepart, "$table.blocked = bugs.bug_id");
+	 },
+
+	 "^blocked," => sub {
+                my $table = "blocked_" . $chartid;
+		push(@supptables, "dependencies $table");
+		$ff = "$table.$f";
 		$ref = $funcsbykey{",$t"};
 		&$ref;
-		push(@wherepart, "$term");
+                push(@wherepart, "$table.dependson = bugs.bug_id");
 	 },
 
 
@@ -563,11 +574,93 @@ sub GenerateSQL {
     }
 
 
+# A boolean chart is a way of representing the terms in a logical 
+# expression.  Bugzilla builds SQL queries depending on how you enter
+# terms into the boolean chart. Boolean charts are represented in 
+# urls as tree-tuples of (chart id, row, column). The query form 
+# (query.cgi) may contain an arbitrary number of boolean charts where
+# each chart represents a clause in a SQL query. 
+#
+# The query form starts out with one boolean chart containing one
+# row and one column.  Extra rows can be created by pressing the 
+# AND button at the bottom of the chart.  Extra columns are created 
+# by pressing the OR button at the right end of the chart. Extra
+# charts are created by pressing "Add another boolean chart".
+#
+# Each chart consists of an artibrary number of rows and columns.
+# The terms within a row are ORed together. The expressions represented
+# by each row are ANDed together. The expressions represented by each
+# chart are ANDed together.
+#
+#        ----------------------
+#        | col2 | col2 | col3 |
+# --------------|------|------|
+# | row1 |  a1  |  a2  |      |
+# |------|------|------|------|  => ((a1 OR a2) AND (b1 OR b2 OR b3) AND (c1))
+# | row2 |  b1  |  b2  |  b3  |
+# |------|------|------|------|
+# | row3 |  c1  |      |      |
+# -----------------------------
+#
+#        --------
+#        | col2 |
+# --------------|
+# | row1 |  d1  | => (d1)
+# ---------------
+#
+# Together, these two charts represent a SQL expression like this
+# SELECT blah FROM blah WHERE ( (a1 OR a2)AND(b1 OR b2 OR b3)AND(c1)) AND (d1)
+#
+# The terms within a single row of a boolean chart are all constraints
+# on a single piece of data.  If you're looking for a bug that has two 
+# different people cc'd on it, then you need to use two boolean charts. 
+# This will find bugs with one CC mathing 'foo@blah.org' and and another 
+# CC matching 'bar@blah.org'. 
+# 
+# --------------------------------------------------------------
+# CC    | equal to
+# foo@blah.org
+# --------------------------------------------------------------
+# CC    | equal to
+# bar@blah.org
+#
+# If you try to do this query by pressing the AND button in the 
+# original boolean chart then what you'll get is an expression that
+# looks for a single CC where the login name is both "foo@blah.org",
+# and "bar@blah.org". This is impossible.
+#
+# --------------------------------------------------------------
+# CC    | equal to
+# foo@blah.org
+# AND
+# CC    | equal to
+# bar@blah.org
+# --------------------------------------------------------------
+
+# $chartid is the number of the current chart whose SQL we're contructing
+# $row is the current row of the current chart
+
+# names for table aliases are constructed using $chartid and $row
+#   SELECT blah  FROM $table "$table_$chartid_$row" WHERE ....
+
+# $f  = field of table in bug db (e.g. bug_id, reporter, etc)
+# $ff = qualified field name (field name prefixed by table)
+#       e.g. bugs_activity.bug_id
+# $t  = type of query. e.g. "equal to", "changed after", case sensitive substr"
+# $v  = value - value the user typed in to the form 
+# $q  = sanitized version of user input (SqlQuote($v))
+# @supptables = Tables and/or table aliases used in query
+# %suppseen   = A hash used to store all the tables in supptables to weed
+#               out duplicates.
+# $suppstring = String which is pasted into query containing all table names
+
+
+    $row = 0;
     for ($chart=-1 ;
          $chart < 0 || exists $F{"field$chart-0-0"} ;
          $chart++) {
         $chartid = $chart >= 0 ? $chart : "";
-        for (my $row = 0 ;
+        for ($row = 0 ;
              exists $F{"field$chart-$row-0"} ;
              $row++) {
             my @orlist;
@@ -643,7 +736,7 @@ sub GenerateSQL {
 }
 
 
-         
+
 sub LookupNamedQuery {
     my ($name) = (@_);
     confirm_login();
@@ -662,12 +755,13 @@ sub LookupNamedQuery {
 }
 
 
-        
 
+$::querytitle = "Bug List";
 
 CMD: for ($::FORM{'cmdtype'}) {
     /^runnamed$/ && do {
         $::buffer = LookupNamedQuery($::FORM{"namedcmd"});
+        $::querytitle = "Bug List: $::FORM{'namedcmd'}";
         ProcessFormFields($::buffer);
         last CMD;
     };
@@ -686,9 +780,9 @@ Refresh: 0; URL=$url
         my $userid = DBNameToIdAndCheck($::COOKIE{"Bugzilla_login"});
         SendSQL("DELETE FROM namedqueries WHERE userid = $userid " .
                 "AND name = " . SqlQuote($::FORM{'namedcmd'}));
-        
+
         print "Content-type: text/html\n\n";
-        PutHeader("Forget what?", "");
+        PutHeader("Query is gone", "");
 
         print qq{
 OK, the <B>$::FORM{'namedcmd'}</B> query is gone.
@@ -730,13 +824,15 @@ individual query.
         }
         $::buffer =~ s/[\&\?]cmdtype=[a-z]+//;
         my $qname = SqlQuote($name);
+       my $tofooter= ( $::FORM{'tofooter'} ? 1 : 0 );
         SendSQL("SELECT query FROM namedqueries " .
                 "WHERE userid = $userid AND name = $qname");
         if (!FetchOneColumn()) {
-            SendSQL("REPLACE INTO namedqueries (userid, name, query) " .
-                    "VALUES ($userid, $qname, " . SqlQuote($::buffer) . ")");
+            SendSQL("REPLACE INTO namedqueries (userid, name, query, linkinfooter) " .
+                    "VALUES ($userid, $qname, ". SqlQuote($::buffer) .", ". $tofooter .")");
         } else {
-            SendSQL("UPDATE namedqueries SET query = " . SqlQuote($::buffer) .
+            SendSQL("UPDATE namedqueries SET query = " . SqlQuote($::buffer) . "," .
+                   " linkinfooter = " . $tofooter .
                     " WHERE userid = $userid AND name = $qname");
         }
         PutHeader("OK, query saved.");
@@ -758,19 +854,26 @@ if (exists $ENV{'HTTP_USER_AGENT'} && $ENV{'HTTP_USER_AGENT'} =~ /Mozilla.[3-9]/
     # especially during page reload.
     $serverpush = 1;
 
-    print "Content-type: multipart/x-mixed-replace;boundary=thisrandomstring\n\n";
-    print "--thisrandomstring\n";
-    print "Content-type: text/html\n\n";
-    print "<p>Please stand by ... <p>\n";
+    print qq{Content-type: multipart/x-mixed-replace;boundary=thisrandomstring\n
+--thisrandomstring
+Content-type: text/html\n
+<html><head><title>Bugzilla is pondering your query</title>
+<style type="text/css">
+    .psb { margin-top: 20%; text-align: center; }
+</style></head><body>
+<h1 class="psb">Please stand by ...</h1></body></html>
+    };
     # Note! HTML header is complete!
 } else {
     print "Content-type: text/html\n";
+    #Changing attachment to inline to resolve 46897
+    #zach@zachlipton.com
+    print "Content-disposition: inline; filename=bugzilla_bug_list.html\n";
     # Note! Don't finish HTML header yet!  Only one newline so far!
 }
-
 sub DefCol {
     my ($name, $k, $t, $s, $q) = (@_);
-    
+
     $::key{$name} = $k;
     $::title{$name} = $t;
     if (defined $s && $s ne "") {
@@ -782,9 +885,9 @@ sub DefCol {
     $::needquote{$name} = $q;
 }
 
-DefCol("opendate", "date_format(bugs.creation_ts,'%Y-%m-%d')", "Opened",
+DefCol("opendate", "unix_timestamp(bugs.creation_ts)", "Opened",
        "bugs.creation_ts");
-DefCol("changeddate", "date_format(bugs.delta_ts,'%Y-%m-%d')", "Changed",
+DefCol("changeddate", "unix_timestamp(bugs.delta_ts)", "Changed",
        "bugs.delta_ts");
 DefCol("severity", "substring(bugs.bug_severity, 1, 3)", "Sev",
        "bugs.bug_severity");
@@ -799,18 +902,18 @@ DefCol("qa_contact", "map_qa_contact.login_name", "QAContact", "map_qa_contact.l
 DefCol("status", "substring(bugs.bug_status,1,4)", "State", "bugs.bug_status");
 DefCol("resolution", "substring(bugs.resolution,1,4)", "Result",
        "bugs.resolution");
-DefCol("summary", "substring(bugs.short_desc, 1, 60)", "Summary", "", 1);
-DefCol("summaryfull", "bugs.short_desc", "Summary", "", 1);
+DefCol("summary", "substring(bugs.short_desc, 1, 60)", "Summary", "bugs.short_desc", 1);
+DefCol("summaryfull", "bugs.short_desc", "Summary", "bugs.short_desc", 1);
 DefCol("status_whiteboard", "bugs.status_whiteboard", "StatusSummary", "bugs.status_whiteboard", 1);
 DefCol("component", "substring(bugs.component, 1, 8)", "Comp",
-       "bugs.component");
+	"bugs.component");
 DefCol("product", "substring(bugs.product, 1, 8)", "Product", "bugs.product");
 DefCol("version", "substring(bugs.version, 1, 5)", "Vers", "bugs.version");
 DefCol("os", "substring(bugs.op_sys, 1, 4)", "OS", "bugs.op_sys");
 DefCol("target_milestone", "bugs.target_milestone", "TargetM",
        "bugs.target_milestone");
 DefCol("votes", "bugs.votes", "Votes", "bugs.votes desc");
-DefCol("keywords", "bugs.keywords", "Keywords", "bugs.keywords");
+DefCol("keywords", "bugs.keywords", "Keywords", "bugs.keywords", 5);
 
 my @collist;
 if (defined $::COOKIE{'COLUMNLIST'}) {
@@ -835,7 +938,7 @@ if ($dotweak) {
     confirm_login();
     if (!UserInGroup("editbugs")) {
         print qq{
-Sorry; you do not have sufficient priviledges to edit a bunch of bugs
+Sorry; you do not have sufficient privileges to edit a bunch of bugs
 at once.
 };
         PutFooter();
@@ -900,7 +1003,7 @@ if (defined $::FORM{'order'} && $::FORM{'order'} ne "") {
                                                # hack.
     $::FORM{'order'} =~ s/assign\.login_name/map_assigned_to.login_name/g;
                                 # Another backwards compatability hack.
-    
+
     ORDER: for ($::FORM{'order'}) {
         /\./ && do {
             # This (hopefully) already has fieldnames in it, so we're done.
@@ -923,7 +1026,7 @@ if (defined $::FORM{'order'} && $::FORM{'order'} ne "") {
     }
     die "Invalid order: $::FORM{'order'}" unless
         $::FORM{'order'} =~ /^([a-zA-Z0-9_., ]+)$/;
-    
+
     # Extra special disgusting hack: if we are ordering by target_milestone,
     # change it to order by the sortkey of the target_milestone first.
     my $order = $::FORM{'order'};
@@ -977,12 +1080,7 @@ if ($dotweak) {
 my @th;
 foreach my $c (@collist) {
     if (exists $::needquote{$c}) {
-        my $h = "";
-        if ($::needquote{$c}) {
-            $h .= "<TH WIDTH=100%>";
-        } else {
-            $h .= "<TH>";
-        }
+        my $h = "<TH>";
         if (defined $::sortkey{$c}) {
             $h .= "<A HREF=\"buglist.cgi?$fields&order=" . url_quote($::sortkey{$c}) . "$oldorder\">$::title{$c}</A>";
         } else {
@@ -1042,6 +1140,8 @@ for (my $colcount = 0 ; $colcount < @collist ; $colcount++) {
     }
 }
 
+my @weekday= qw( Sun Mon Tue Wed Thu Fri Sat );
+
 while (@row = FetchSQLData()) {
     my $bug_id = shift @row;
     my $g = shift @row;         # Bug's group set.
@@ -1061,7 +1161,7 @@ while (@row = FetchSQLData()) {
             pnl "</TABLE>$tablestart";
         }
         push @bugarray, $bug_id;
-        
+
         # retrieve this bug's priority and severity, if available,
         # by looping through all column names -- gross but functional
         my $priority = "unknown";
@@ -1089,21 +1189,35 @@ while (@row = FetchSQLData()) {
             pnl "<input type=checkbox name=id_$bug_id>";
         }
         pnl "<A HREF=\"show_bug.cgi?id=$bug_id\">";
-        pnl "$bug_id</A> ";
+        pnl "$bug_id</A>";
+        if ($g != "0") { pnl "*"; }
+        pnl " ";
         foreach my $c (@collist) {
             if (exists $::needquote{$c}) {
                 my $value = shift @row;
                 if (!defined $value) {
+                    pnl "<TD>";
                     next;
                 }
                 if ($c eq "owner") {
                     $ownerhash{$value} = 1;
-                }
-                if ($::needquote{$c}) {
+		}elsif( $c eq 'changeddate' or $c eq 'opendate' ) {
+		    my $age= time() - $value;
+		    my ($s,$m,$h,$d,$mo,$y,$wd)= localtime $value;
+		    if( $age < 18*60*60 ) {
+			$value= sprintf "%02d:%02d:%02d", $h,$m,$s;
+		    }elsif( $age < 6*24*60*60 ) {
+			$value= sprintf "%s %02d:%02d", $weekday[$wd],$h,$m;
+		    }else {
+			$value= sprintf "%04d-%02d-%02d", 1900+$y,$mo+1,$d;
+		    }
+		}
+                if ($::needquote{$c} || $::needquote{$c} == 5) {
                     $value = html_quote($value);
                 } else {
                     $value = "<nobr>$value</nobr>";
                 }
+
                 pnl "<td class=$c>$value";
             }
         }
@@ -1133,13 +1247,14 @@ if (Param('usequip')){
   $quip ||= "Bugzilla would like to put a random quip here, but nobody has entered any.";
 }
 
- 
+
 # We've done all we can without any output.  If we can server push it is time
-# take down the waiting page and put up the real one.       
+# take down the waiting page and put up the real one.
 if ($serverpush) {
     print "\n";
     print "--thisrandomstring\n";
     print "Content-type: text/html\n";
+    print "Content-disposition: inline; filename=bugzilla_bug_list.html\n";
     # Note! HTML header not yet closed
 }
 my $toolong = 0;
@@ -1153,13 +1268,17 @@ if (length($buglist) < 4000) {
     print "Set-Cookie: BUGLIST=\n\n";
     $toolong = 1;
 }
-PutHeader("Bug List");
+PutHeader($::querytitle);
 
 
 print "
 <CENTER>
 <B>" .  time2str("%a %b %e %T %Z %Y", time()) . "</B>";
 
+if (Param('usebuggroups')) {
+   print "<BR>* next to a bug number notes a bug not visible to everyone.<BR>";
+}
+
 if (defined $::FORM{'debug'}) {
     print "<P><CODE>" . value_quote($query) . "</CODE><P>\n";
 }
@@ -1172,7 +1291,9 @@ if ($toolong) {
 if (Param('usequip')){
   print "<HR><A HREF=newquip.html><I>$quip</I></A></CENTER>\n";
 }
-print "<HR SIZE=10>$tablestart\n";
+print "<HR SIZE=10>";
+print "$count bugs found." if $count > 9;
+print $tablestart, "\n";
 print $::bugl;
 print "</TABLE>\n";
 
@@ -1214,7 +1335,8 @@ function SetCheckboxes(value) {
 }
 document.write(\" <input type=button value=\\\"Uncheck All\\\" onclick=\\\"SetCheckboxes(false);\\\"> <input type=button value=\\\"Check All\\\" onclick=\\\"SetCheckboxes(true);\\\">\");
 </SCRIPT>";
-    my $resolution_popup = make_options(\@::legal_resolution_no_dup, "FIXED");
+
+    my $resolution_popup = make_options(\@::settable_resolution, "FIXED");
     my @prod_list = keys %prodhash;
     my @list = @prod_list;
     my @legal_versions;
@@ -1223,7 +1345,7 @@ document.write(\" <input type=button value=\\\"Uncheck All\\\" onclick=\\\"SetCh
         @legal_versions = @{$::versions{$prod_list[0]}};
         @legal_component = @{$::components{$prod_list[0]}};
     }
-    
+
     my $version_popup = make_options(\@legal_versions, $::dontchange);
     my $platform_popup = make_options(\@::legal_platform, $::dontchange);
     my $priority_popup = make_options(\@::legal_priority, $::dontchange);
@@ -1274,7 +1396,6 @@ document.write(\" <input type=button value=\\\"Uncheck All\\\" onclick=\\\"SetCh
             value_quote($::dontchange) . "\"></TD>
 </TR>";
     }
-        
 
     if (@::legal_keywords) {
         print qq{
@@ -1371,7 +1492,7 @@ if ($::usergroupset ne '0' && $buggroupset =~ /^\d+$/) {
         }
     }
     print "
-<INPUT TYPE=radio NAME=knob VALUE=reassign> 
+<INPUT TYPE=radio NAME=knob VALUE=reassign>
         <A HREF=\"bug_status.html#assigned_to\">Reassign</A> bugs to
         <INPUT NAME=assigned_to SIZE=32
           ONCHANGE=\"document.changeform.knob\[$knum\].checked=true\"
@@ -1391,8 +1512,21 @@ To make changes to a bunch of bugs at once:
      comment explaining what you're doing.)
 <li> Click the below \"Commit\" button.
 </ol></font>
-<INPUT TYPE=SUBMIT VALUE=Commit>
-</FORM><hr>\n";
+<INPUT TYPE=SUBMIT VALUE=Commit>";
+
+    my $movers = Param("movers");
+    $movers =~ s/\s?,\s?/|/g;
+    $movers =~ s/@/\@/g;
+
+    if ( Param("move-enabled")
+         && (defined $::COOKIE{"Bugzilla_login"})
+         && ($::COOKIE{"Bugzilla_login"} =~ /($movers)/) ){
+      print "<P>";
+      print "<INPUT TYPE=\"SUBMIT\" NAME=\"action\" VALUE=\"";
+      print Param("move-button-text") . "\">";
+    }
+
+    print "</FORM><hr>\n";
 }
 
 
@@ -1422,8 +1556,10 @@ if ($count > 0) {
     }
     print qq{&nbsp;&nbsp;\n};
     print qq{<NOBR><A HREF="query.cgi?$::buffer">Edit this query</A></NOBR>\n};
+
     print "</FORM>\n";
 }
+
 PutFooter();
 
 if ($serverpush) {
diff --git a/bugzilla.dtd b/bugzilla.dtd
new file mode 100644
index 000000000..a443a953a
--- /dev/null
+++ b/bugzilla.dtd
@@ -0,0 +1,42 @@
+<!ELEMENT bugzilla (bug+)>
+<!ATTLIST bugzilla version CDATA #REQUIRED>
+<!ATTLIST bugzilla urlbase CDATA #REQUIRED>
+<!ATTLIST bugzilla maintainer CDATA #REQUIRED>
+<!ATTLIST bugzilla exporter CDATA #IMPLIED>
+<!ELEMENT bug (bug_id, exporter, urlbase, bug_status, resolution?, product, 
+priority, version, rep_platform, assigned_to, delta_ts, component, 
+reporter, target_milestone?, bug_severity, creation_ts, qa_contact?, 
+status_whiteboard?, op_sys, short_desc?, keywords*, dependson*, 
+blocks*, cc*, long_desc?, attachment*)>
+<!ATTLIST bug error (NotFound|NotPermitted) #IMPLIED>
+<!ELEMENT bug_id (#PCDATA)>
+<!ELEMENT short_desc (#PCDATA)>
+<!ELEMENT bug_status (#PCDATA)>
+<!ELEMENT dependson (#PCDATA)>
+<!ELEMENT blocks (#PCDATA)>
+<!ELEMENT product (#PCDATA)>
+<!ELEMENT priority (#PCDATA)>
+<!ELEMENT version (#PCDATA)>
+<!ELEMENT cc (#PCDATA)>
+<!ELEMENT rep_platform (#PCDATA)>
+<!ELEMENT assigned_to (#PCDATA)>
+<!ELEMENT delta_ts (#PCDATA)>
+<!ELEMENT component (#PCDATA)>
+<!ELEMENT reporter (#PCDATA)>
+<!ELEMENT target_milestone (#PCDATA)>
+<!ELEMENT bug_severity (#PCDATA)>
+<!ELEMENT creation_ts (#PCDATA)>
+<!ELEMENT qa_contact (#PCDATA)>
+<!ELEMENT op_sys (#PCDATA)>
+<!ELEMENT keywords (#PCDATA)>
+<!ELEMENT status_whiteboard (#PCDATA)>
+<!ELEMENT long_desc (who, bug_when, thetext)>
+<!ELEMENT who (#PCDATA)>
+<!ELEMENT bug_when (#PCDATA)>
+<!ELEMENT thetext (#PCDATA)>
+<!ELEMENT attachment (id, date, attach_desc, type, data)>
+<!ELEMENT id (#PCDATA)>
+<!ELEMENT date (#PCDATA)>
+<!ELEMENT desc (#PCDATA)>
+<!ELEMENT type (#PCDATA)>
+<!ELEMENT data (#PCDATA)>
diff --git a/checksetup.pl b/checksetup.pl
index 0b76a8fdc..2953f9b2b 100755
--- a/checksetup.pl
+++ b/checksetup.pl
@@ -21,6 +21,7 @@
 # Contributor(s): Holger Schurig <holgerschurig@nikocity.de>
 #                 Terry Weissman <terry@mozilla.org>
 #                 Dan Mosedale <dmose@mozilla.org>
+#                 Dave Miller <justdave@syndicomm.com>
 #
 #
 # Direct any questions on this source code to
@@ -39,7 +40,7 @@
 # early.
 #
 # And you can re-run it whenever you want. Especially after Bugzilla
-# get's updated you SHOULD rerun it. Because then it may update your
+# gets updated you SHOULD rerun it. Because then it may update your
 # SQL table definitions so that they are again in sync with the code.
 #
 # So, currently this module does:
@@ -60,7 +61,7 @@
 #       settings, e.g. when you add a new platform
 #
 # People that install this module locally are not supposed to modify
-# this script. This is done by shifting the user settable stuff intp
+# this script. This is done by shifting the user settable stuff into
 # a local configuration file 'localconfig'. When this file get's
 # changed and 'checkconfig.pl' will be re-run, then the user changes
 # will be reflected back into the database.
@@ -78,6 +79,7 @@
 #     add more MySQL-related checks                    --MYSQL--
 #     change table definitions                         --TABLE--
 #     add more groups                                  --GROUPS--
+#     create initial administrator account            --ADMIN--
 #
 # Note: sometimes those special comments occur more then once. For
 # example, --LOCAL-- is at least 3 times in this code!  --TABLE--
@@ -85,9 +87,6 @@
 #
 
 
-
-
-
 ###########################################################################
 # Global definitions
 ###########################################################################
@@ -95,18 +94,15 @@
 use diagnostics;
 use strict;
 
-
-
 #
 # This are the --LOCAL-- variables defined in 'localconfig'
 # 
 
-use vars qw(
-    $webservergroup
-    $db_host $db_port $db_name $db_user $db_pass $db_check
-    @severities @priorities @opsys @platforms
-);
-
+# 12/17/00 justdave@syndicomm.com - removed declarations of the localconfig
+# variables from this location.  We don't want these declared here.  They'll
+# automatically get declared in the process of reading in localconfig, and
+# this way we can look in the symbol table to see if they've been declared
+# yet or not.
 
 # Trim whitespace from front and back.
 
@@ -132,42 +128,100 @@ unless (eval "require 5.004") {
     die "Sorry, you need at least Perl 5.004\n";
 }
 
-unless (eval "require DBI") {
+# vers_cmp is adapted from Sort::Versions 1.3 1996/07/11 13:37:00 kjahds,
+# which is not included with Perl by default, hence the need to copy it here.
+# Seems silly to require it when this is the only place we need it...
+sub vers_cmp {
+  if (@_ < 2) { die "not enough parameters for vers_cmp" }
+  if (@_ > 2) { die "too many parameters for vers_cmp" }
+  my ($a, $b) = @_;
+  my (@A) = ($a =~ /(\.|\d+|[^\.\d]+)/g);
+  my (@B) = ($b =~ /(\.|\d+|[^\.\d]+)/g);
+  my ($A,$B);
+  while (@A and @B) {
+    $A = shift @A;
+    $B = shift @B;
+    if ($A eq "." and $B eq ".") {
+      next;
+    } elsif ( $A eq "." ) {
+      return -1;
+    } elsif ( $B eq "." ) {
+      return 1;
+    } elsif ($A =~ /^\d+$/ and $B =~ /^\d+$/) {
+      return $A <=> $B if $A <=> $B;
+    } else {
+      $A = uc $A;
+      $B = uc $B;
+      return $A cmp $B if $A cmp $B;
+    }
+  }
+  @A <=> @B;
+}
+
+# This was originally clipped from the libnet Makefile.PL, adapted here to
+# use the above vers_cmp routine for accurate version checking.
+sub have_vers {
+  my ($pkg, $wanted) = @_;
+  my ($msg, $vnum, $vstr);
+  no strict 'refs';
+  printf("Checking for %15s %-9s ", $pkg, !$wanted?'(any)':"(v$wanted)");
+
+  eval { my $p; ($p = $pkg . ".pm") =~ s!::!/!g; require $p; };
+
+  $vnum = ${"${pkg}::VERSION"} || ${"${pkg}::Version"} || 0;
+  $vnum = -1 if $@;
+
+  if ($vnum < 0) {
+    $vstr = "not found";
+  }
+  elsif ($vnum > 0) {
+    $vstr = "found v$vnum";
+  }
+  else {
+    $vstr = "found unknown version";
+  }
+
+  my $vok = (vers_cmp($vnum,$wanted) > -1);
+  print ((($vok) ? "ok: " : " "), "$vstr\n");
+  return $vok;
+}
+
+unless (have_vers("DBI","1.13")) {
     die "Please install the DBI module. You can do this by running (as root)\n\n",
         "       perl -MCPAN -eshell\n",
         "       install DBI\n";
 }
 
-unless (eval "require Data::Dumper") {
+unless (have_vers("Data::Dumper",0)) { # 0 = any version
     die "Please install the Data::Dumper module. You can do this by running (as root)\n\n",
         "       perl -MCPAN -eshell\n",
         "       install Data::Dumper\n";
 }
 
-unless (eval "require Mysql") {
+unless (have_vers("Mysql",0)) { # 0 = any version
     die "Please install the Mysql database driver. You can do this by running (as root)\n\n",
         "       perl -MCPAN -eshell\n",
         "       install Msql-Mysql\n\n",
-        "Be sure to enable the Mysql emulation!";
+        "Be sure to enable the Mysql emulation!\n";
 }
 
-unless (eval "require Date::Parse") {
+unless (have_vers("Date::Parse",0)) { # 0 = any version
     die "Please install the Date::Parse module. You can do this by running (as root)\n\n",
         "       perl -MCPAN -eshell\n",
         "       install Date::Parse\n";
 }
 
-# The following two modules are optional:
+print "The following two modules are optional:\n";
 my $charts = 0;
-$charts++ if eval "require GD";
-$charts++ if eval "require Chart::Base";
+$charts++ if have_vers("GD","1.19");
+$charts++ if have_vers("Chart::Base","0.99");
 if ($charts != 2) {
     print "If you you want to see graphical bug dependency charts, you may install\n",
     "the optional libgd and the Perl modules GD-1.19 and Chart::Base-0.99b, e.g. by\n",
     "running (as root)\n\n",
     "   perl -MCPAN -eshell\n",
     "   install LDS/GD-1.19.tar.gz\n",
-    "   install N/NI/NINJAZ/Chart-0.99b.tar.gz";
+    "   install N/NI/NINJAZ/Chart-0.99b.tar.gz\n\n";
 }
 
 
@@ -209,14 +263,7 @@ my $newstuff = "";
 sub LocalVar ($$)
 {
     my ($name, $definition) = @_;
-
-    # Is there a cleaner way to test if the variable defined in scalar $name
-    # is defined or not?
-    my $defined = 0;
-    $_ = "\$defined = 1 if defined $name;";
-    eval $_;
-    return if $defined;
-
+    return if ($main::{$name}); # if localconfig declared it, we're done.
     $newstuff .= " " . $name;
     open FILE, '>>localconfig';
     print FILE $definition, "\n\n";
@@ -230,7 +277,7 @@ sub LocalVar ($$)
 #
 
     
-LocalVar('$webservergroup', '
+LocalVar('webservergroup', '
 #
 # This is the group your web server runs on.
 # If you have a windows box, ignore this setting.
@@ -243,7 +290,7 @@ $webservergroup = "nobody";
 
 
 
-LocalVar('$db_host', '
+LocalVar('db_host', '
 #
 # How to access the SQL database:
 #
@@ -252,7 +299,7 @@ $db_port = 3306;                # which port to use
 $db_name = "bugs";              # name of the MySQL database
 $db_user = "bugs";              # user to attach to the MySQL database
 ');
-LocalVar('$db_pass', '
+LocalVar('db_pass', '
 #
 # Some people actually use passwords with their MySQL database ...
 #
@@ -261,7 +308,7 @@ $db_pass = "";
 
 
 
-LocalVar('$db_check', '
+LocalVar('db_check', '
 #
 # Should checksetup.pl try to check if your MySQL setup is correct?
 # (with some combinations of MySQL/Msql-mysql/Perl/moonphase this doesn\'t work)
@@ -270,7 +317,7 @@ $db_check = 1;
 ');
 
 
-LocalVar('@severities', '
+LocalVar('severities', '
 #
 # Which bug and feature-request severities do you want?
 #
@@ -287,7 +334,7 @@ LocalVar('@severities', '
 
 
 
-LocalVar('@priorities', '
+LocalVar('priorities', '
 #
 # Which priorities do you want to assign to bugs and feature-request?
 #
@@ -302,7 +349,7 @@ LocalVar('@priorities', '
 
 
 
-LocalVar('@opsys', '
+LocalVar('opsys', '
 #
 # What operatings systems may your products run on?
 #
@@ -311,6 +358,7 @@ LocalVar('@opsys', '
         "Windows 3.1",
         "Windows 95",
         "Windows 98",
+        "Windows ME",  # Millenium Edition (upgrade of 98)
 	"Windows 2000",
         "Windows NT",
         "Mac System 7",
@@ -320,26 +368,28 @@ LocalVar('@opsys', '
         "Mac System 8.5",
         "Mac System 8.6",
 	"Mac System 9.0",
-        "AIX",
+        "Linux",
         "BSDI",
+        "FreeBSD",
+        "NetBSD",
+        "OpenBSD",
+        "AIX",
+        "BeOS",
         "HP-UX",
         "IRIX",
-        "Linux",
-        "FreeBSD",
+        "Neutrino",
+        "OpenVMS",
+        "OS/2",
         "OSF/1",
         "Solaris",
         "SunOS",
-        "Neutrino",
-        "OS/2",
-        "BeOS",
-        "OpenVMS",
         "other"
 );
 ');
 
 
 
-LocalVar('@platforms', '
+LocalVar('platforms', '
 #
 # What hardware platforms may your products run on?
 #
@@ -359,7 +409,7 @@ LocalVar('@platforms', '
 
 
 if ($newstuff ne "") {
-    print "\nThis version of Bugzilla contains some variables that you may \n",
+    print "\nThis version of Bugzilla contains some variables that you may want\n",
           "to change and adapt to your local settings. Please edit the file\n",
           "'localconfig' and rerun checksetup.pl\n\n",
           "The following variables are new to localconfig since you last ran\n",
@@ -367,8 +417,23 @@ if ($newstuff ne "") {
     exit;
 }
 
-
-
+# 2000-Dec-18 - justdave@syndicomm.com - see Bug 52921
+# This is a hack to read in the values defined in localconfig without getting
+# them predeclared at compile time if they're missing from localconfig.
+# Ideas swiped from pp. 281-282, O'Reilly's "Programming Perl 2nd Edition"
+# Note that we won't need to do this in globals.pl because globals.pl couldn't
+# care less whether they were defined ahead of time or not. 
+my $my_db_check = ${*{$main::{'db_check'}}{SCALAR}};
+my $my_db_host = ${*{$main::{'db_host'}}{SCALAR}};
+my $my_db_port = ${*{$main::{'db_port'}}{SCALAR}};
+my $my_db_name = ${*{$main::{'db_name'}}{SCALAR}};
+my $my_db_user = ${*{$main::{'db_user'}}{SCALAR}};
+my $my_db_pass = ${*{$main::{'db_pass'}}{SCALAR}};
+my $my_webservergroup = ${*{$main::{'webservergroup'}}{SCALAR}};
+my @my_severities = @{*{$main::{'severities'}}{ARRAY}};
+my @my_priorities = @{*{$main::{'priorities'}}{ARRAY}};
+my @my_platforms = @{*{$main::{'platforms'}}{ARRAY}};
+my @my_opsys = @{*{$main::{'opsys'}}{ARRAY}};
 
 
 ###########################################################################
@@ -382,8 +447,8 @@ if ($newstuff ne "") {
 unless (-d 'data') {
     print "Creating data directory ...\n";
     mkdir 'data', 0770;
-    if ($webservergroup eq "") {
-        chmod 0777, 'data';
+    if ($my_webservergroup eq "") {
+        chmod 01777, 'data';
     }
     open FILE, '>>data/comments'; close FILE;
     open FILE, '>>data/nomail'; close FILE;
@@ -415,29 +480,72 @@ unlink "data/versioncache";
 #
 # +++ Can anybody tell me what a Windows Perl would do with this code?
 #
+# Changes 03/14/00 by SML
+#
+# This abstracts out what files are executable and what ones are not.  It makes
+# for slightly neater code and lets us do things like determine exactly which
+# files are executable and which ones are not.
+#
+# Not all directories have permissions changed on them.  i.e., changing ./CVS
+# to be 0640 is bad.
+#
+# Fixed bug in chmod invokation.  chmod (at least on my linux box running perl
+# 5.005 needs a valid first argument, not 0.
+#
+# (end changes, 03/14/00 by SML)
+#
+#
+
+# These are the files which need to be marked executable
+my @executable_files = ('processmail', 'whineatnews.pl', 'collectstats.pl',
+   'checksetup.pl', 'syncshadowdb', 'importxml.pl');
+
+# tell me if a file is executable.  All CGI files and those in @executable_files
+# are executable
+sub isExecutableFile {
+  my ($file) = @_;
+  if ($file =~ /\.cgi/) {
+    return 1;
+  }
+
+  my $exec_file;
+  foreach $exec_file (@executable_files) {
+    if ($file eq $exec_file) {
+      return 1;
+    }
+  }
+  return undef;
+}
 
-if ($webservergroup) {
+if ($my_webservergroup) {
     mkdir 'shadow', 0770 unless -d 'shadow';
     # Funny! getgrname returns the GID if fed with NAME ...
-    my $webservergid = getgrnam($webservergroup);
-    chown 0, $webservergid, glob('*');
-    chmod 0640, glob('*');
-
-    chmod 0750, glob('*.cgi'),
-                'processmail',
-                'whineatnews.pl',
-                'collectstats.pl',
-                'checksetup.pl',
-                'syncshadowdb';
-
-    chmod 0770, 'data', 'shadow';
+    my $webservergid = getgrnam($my_webservergroup);
+    # chmod needs to be called with a valid uid, not 0.  $< returns the
+    # caller's uid.  Maybe there should be a $bugzillauid, and call with that
+    # userid.
+    chown $<, $webservergid, glob('*');
+    my @files = glob('*');
+    my $file;
+    foreach $file (@files) {
+      # do not change permissions on directories here
+      if (!(-d $file)) {
+        # check if the file is executable.
+        if (isExecutableFile($file)) {
+          chmod 0750, $file;
+        } else {
+          chmod 0640, $file;
+        }
+      }
+    }
+
+    # make sure that contrib keeps the permissions it had (don't touch it)
+    chmod 0770, 'data', 'shadow', 'graphs';
     chmod 0666, glob('data/*');
+    chmod 01777, glob('data/*/'); # directories stay executable
 }
 
 
-
-
-
 ###########################################################################
 # Check MySQL setup
 ###########################################################################
@@ -457,15 +565,40 @@ use DBI;
 my $drh = DBI->install_driver($db_base)
     or die "Can't connect to the $db_base. Is the database installed and up and running?\n";
 
-if ($db_check) {
+if ($my_db_check) {
     # Do we have the database itself?
-    my @databases = $drh->func($db_host, $db_port, '_ListDBs');
-    unless (grep /^$db_name$/, @databases) {
-    print "Creating database $db_name ...\n";
-    $drh->func('createdb', $db_name, 'admin')
+
+    my $sql_want = "3.22.5";  # minimum version of MySQL
+
+# original DSN line was:
+#    my $dsn = "DBI:$db_base:$my_db_name;$my_db_host;$my_db_port";
+# removed the $db_name because we don't know it exists yet, and this will fail
+# if we request it here and it doesn't. - justdave@syndicomm.com 2000/09/16
+    my $dsn = "DBI:$db_base:;$my_db_host;$my_db_port";
+    my $dbh = DBI->connect($dsn, $my_db_user, $my_db_pass);
+    printf("Checking for %15s %-9s ", "MySQL Server", "(v$sql_want)");
+    my $qh = $dbh->prepare("SELECT VERSION()");
+    $qh->execute;
+    my ($sql_vers) = $qh->fetchrow_array;
+    $qh->finish;
+
+    my $sql_vok = ((vers_cmp($sql_vers,$sql_want) > -1)
+      && ($sql_vers ne "3.23.29")); # encrypt() is broken in 3.23.29
+    print (($sql_vok ? "ok: " : " "), "found v$sql_vers\n");
+    unless ($sql_vok) {
+      die "Your MySQL server is either too old or a known broken version.\n",
+          "   Bugzilla requires version $sql_want or later of MySQL.\n",
+          ($sql_vers eq "3.23.29") ? "Version 3.23.29 has a broken encrypt() command.  3.23.30 fixes this.\n" : "",
+          "   Please visit http://www.mysql.org and download a newer version.\n";
+    }
+
+    my @databases = $dbh->func('_ListDBs');
+    unless (grep /^$my_db_name$/, @databases) {
+       print "Creating database $my_db_name ...\n";
+       $drh->func('createdb', $my_db_name, "$my_db_host:$my_db_port", $my_db_user, $my_db_pass, 'admin')
             or die <<"EOF"
 
-The '$db_name' database is not accessible. This might have several reasons:
+The '$my_db_name' database is not accessible. This might have several reasons:
 
 * MySQL is not running.
 * MySQL is running, but the rights are not set correct. Go and read the
@@ -475,13 +608,14 @@ The '$db_name' database is not accessible. This might have several reasons:
   '\$db_check' to zero.\n
 EOF
     }
+    $dbh->disconnect if $dbh;
 }
 
 # now get a handle to the database:
-my $connectstring = "dbi:$db_base:$db_name:host=$db_host:port=$db_port";
-my $dbh = DBI->connect($connectstring, $db_user, $db_pass)
+my $connectstring = "dbi:$db_base:$my_db_name:host=$my_db_host:port=$my_db_port";
+my $dbh = DBI->connect($connectstring, $my_db_user, $my_db_pass)
     or die "Can't connect to the table '$connectstring'.\n",
-           "Have you read Bugzilla's README?  Have you read the doc of '$db_name'?\n";
+           "Have you read Bugzilla's README?  Have you read the doc of '$db_base'?\n";
 
 END { $dbh->disconnect if $dbh }
 
@@ -542,25 +676,28 @@ $table{attachments} =
     index(bug_id),
     index(creation_ts)';
 
-
+#
+# Apostrophe's are not supportied in the enum types.
+# See http://bugzilla.mozilla.org/show_bug.cgi?id=27309
+#
 $table{bugs} =
    'bug_id mediumint not null auto_increment primary key,
     groupset bigint not null,
     assigned_to mediumint not null, # This is a comment.
     bug_file_loc text,
-    bug_severity enum($severities) not null,
+    bug_severity enum($my_severities) not null,
     bug_status enum("UNCONFIRMED", "NEW", "ASSIGNED", "REOPENED", "RESOLVED", "VERIFIED", "CLOSED") not null,
     creation_ts datetime not null,
     delta_ts timestamp,
     short_desc mediumtext,
-    op_sys enum($opsys) not null,
-    priority enum($priorities) not null,
+    op_sys enum($my_opsys) not null,
+    priority enum($my_priorities) not null,
     product varchar(64) not null,
-    rep_platform enum($platforms),
+    rep_platform enum($my_platforms),
     reporter mediumint not null,
     version varchar(16) not null,
     component varchar(50) not null,
-    resolution enum("", "FIXED", "INVALID", "WONTFIX", "LATER", "REMIND", "DUPLICATE", "WORKSFORME") not null,
+    resolution enum("", "FIXED", "INVALID", "WONTFIX", "LATER", "REMIND", "DUPLICATE", "WORKSFORME", "MOVED") not null,
     target_milestone varchar(20) not null default "---",
     qa_contact mediumint not null,
     status_whiteboard mediumtext not null,
@@ -616,8 +753,8 @@ $table{longdescs} =
 $table{components} =
    'value tinytext,
     program varchar(64),
-    initialowner tinytext not null,     # Should arguably be a mediumint!
-    initialqacontact tinytext not null, # Should arguably be a mediumint!
+    initialowner mediumint not null,
+    initialqacontact mediumint not null,
     description mediumtext not null';
 
 
@@ -681,10 +818,11 @@ $table{profiles} =
     realname varchar(255),
     groupset bigint not null,
     emailnotification enum("ExcludeSelfChanges", "CConly", "All") not null default "ExcludeSelfChanges",
-    disabledtext mediumtext not null,
-    newemailtech tinyint not null,
+    disabledtext mediumtext,
+    newemailtech tinyint not null default 1,
     mybugslink tinyint not null default 1,
-    blessgroupset bigint not null,
+    blessgroupset bigint not null default 0,
+    emailflags mediumtext,
 
 
     unique(login_name)';
@@ -772,9 +910,12 @@ $table{shadowlog} =
      ts timestamp,
      reflected tinyint not null,
      command mediumtext not null,
-
      index(reflected)';
 
+# GRM
+$table{duplicates} =
+    'dupe_of mediumint(9) not null,
+     dupe mediumint(9) not null primary key';
 
 
 ###########################################################################
@@ -789,10 +930,10 @@ my @tables = $dbh->func('_ListTables');
 
 # add lines here if you add more --LOCAL-- config vars that end up in the enums:
 
-my $severities = '"' . join('", "', @severities) . '"';
-my $priorities = '"' . join('", "', @priorities) . '"';
-my $opsys      = '"' . join('", "', @opsys)      . '"';
-my $platforms  = '"' . join('", "', @platforms)  . '"';
+my $my_severities = '"' . join('", "', @my_severities) . '"';
+my $my_priorities = '"' . join('", "', @my_priorities) . '"';
+my $my_opsys      = '"' . join('", "', @my_opsys)      . '"';
+my $my_platforms  = '"' . join('", "', @my_platforms)  . '"';
 
 # go throught our %table hash and create missing tables
 while (my ($tabname, $fielddef) = each %table) {
@@ -802,10 +943,10 @@ while (my ($tabname, $fielddef) = each %table) {
     # add lines here if you add more --LOCAL-- config vars that end up in
     # the enums:
 
-    $fielddef =~ s/\$severities/$severities/;
-    $fielddef =~ s/\$priorities/$priorities/;
-    $fielddef =~ s/\$opsys/$opsys/;
-    $fielddef =~ s/\$platforms/$platforms/;
+    $fielddef =~ s/\$my_severities/$my_severities/;
+    $fielddef =~ s/\$my_priorities/$my_priorities/;
+    $fielddef =~ s/\$my_opsys/$my_opsys/;
+    $fielddef =~ s/\$my_platforms/$my_platforms/;
 
     $dbh->do("CREATE TABLE $tabname (\n$fielddef\n)")
         or die "Could not create table '$tabname'. Please check your '$db_base' access.\n";
@@ -858,9 +999,9 @@ sub AddGroup {
    
     print "Adding group $name ...\n";
     $sth = $dbh->prepare('INSERT INTO groups
-                          (bit, name, description, userregexp)
-                          VALUES (?, ?, ?, ?)');
-    $sth->execute($bit, $name, $desc, $userregexp);
+                          (bit, name, description, userregexp, isbuggroup)
+                          VALUES (?, ?, ?, ?, ?)');
+    $sth->execute($bit, $name, $desc, $userregexp, 0);
     return $bit;
 }
 
@@ -875,6 +1016,10 @@ AddGroup 'creategroups',     'Can create and destroy groups.';
 AddGroup 'editcomponents',   'Can create, destroy, and edit components.';
 AddGroup 'editkeywords',   'Can create, destroy, and edit keywords.';
 
+# Add the groupset field here because this code is run before the
+# code that updates the database structure.
+&AddField('profiles', 'groupset', 'bigint not null');
+
 if (!GroupExists("editbugs")) {
     my $id = AddGroup('editbugs',  'Can edit all aspects of any bug.', ".*");
     $dbh->do("UPDATE profiles SET groupset = groupset | $id");
@@ -889,30 +1034,6 @@ if (!GroupExists("canconfirm")) {
 
 
 
-###########################################################################
-# Create initial test product if there are no products present.
-###########################################################################
-
-my $sth = $dbh->prepare("SELECT product FROM products");
-$sth->execute;
-unless ($sth->rows) {
-    print "Creating initial dummy product 'TestProduct' ...\n";
-    $dbh->do('INSERT INTO products(product, description) VALUES ("TestProduct",
-              "This is a test product.  This ought to be blown away and ' .
-             'replaced with real stuff in a finished installation of ' .
-             'bugzilla.")');
-    $dbh->do('INSERT INTO versions (value, program) VALUES ("other", "TestProduct")');
-    $dbh->do('INSERT INTO components (value, program, description) VALUES (' .
-             '"TestComponent", "TestProduct", ' .
-             '"This is a test component in the test product database.  ' .
-             'This ought to be blown away and replaced with real stuff in ' .
-             'a finished installation of bugzilla.")');
-}
-
-
-
-
-
 ###########################################################################
 # Populate the list of fields.
 ###########################################################################
@@ -1065,6 +1186,7 @@ sub CheckEnumField ($$@)
         $dbh->do("ALTER TABLE $table
                   CHANGE $field
                   $field $_");
+        $::regenerateshadow = 1;
     }
 }
 
@@ -1072,43 +1194,188 @@ sub CheckEnumField ($$@)
 
 #
 # This code changes the enum types of some SQL tables whenever you change
-# some --LOCAL-- variables
+# some --LOCAL-- variables. Once you have a running system, to add new 
+# severities, priorities, operating systems and platforms, add them to 
+# the localconfig file and then re-run checksetup.pl which will make the 
+# necessary changes to your database. Additions to these fields in
+# checksetup.pl after the initial installation of bugzilla on a system
+# are ignored.
 #
 
-CheckEnumField('bugs', 'bug_severity', @severities);
-CheckEnumField('bugs', 'priority',     @priorities);
-CheckEnumField('bugs', 'op_sys',       @opsys);
-CheckEnumField('bugs', 'rep_platform', @platforms);
+CheckEnumField('bugs', 'bug_severity', @my_severities);
+CheckEnumField('bugs', 'priority',     @my_priorities);
+CheckEnumField('bugs', 'op_sys',       @my_opsys);
+CheckEnumField('bugs', 'rep_platform', @my_platforms);
 
 
+###########################################################################
+# Create Administrator  --ADMIN--
+###########################################################################
+
+#  Prompt the user for the email address and name of an administrator.  Create
+#  that login, if it doesn't exist already, and make it a member of all groups.
+
+sub bailout {   # this is just in case we get interrupted while getting passwd
+    system("stty echo"); # re-enable input echoing
+    exit 1;
+}
 
+my $sth = $dbh->prepare(<<_End_Of_SQL_);
+  SELECT login_name
+  FROM profiles
+  WHERE groupset=9223372036854775807
+_End_Of_SQL_
+$sth->execute;
+# when we have no admin users, prompt for admin email address and password ...
+if ($sth->rows == 0) {
+  my $login = "";
+  my $realname = "";
+  my $pass1 = "";
+  my $pass2 = "*";
+  my $admin_ok = 0;
+  my $admin_create = 1;
+
+  print "\nLooks like we don't have an administrator set up yet.  Either this is your\n";
+  print "first time using Bugzilla, or your administrator's privs might have accidently\n";
+  print "gotten deleted at some point.\n";
+  while(! $admin_ok ) {
+    while( $login eq "" ) {
+      print "Enter the e-mail address of the administrator: ";
+      $login = <STDIN>;
+      chomp $login;
+      if(! $login ) {
+        print "\nYou DO want an administrator, don't you?\n";
+      }
+    }
+    $login = $dbh->quote($login);
+    $sth = $dbh->prepare(<<_End_Of_SQL_);
+      SELECT login_name
+      FROM profiles
+      WHERE login_name=$login
+_End_Of_SQL_
+    $sth->execute;
+    if ($sth->rows > 0) {
+      print "$login already has an account.\n";
+      print "Make this user the administrator? [Y/n] ";
+      my $ok = <STDIN>;
+      chomp $ok;
+      if ($ok !~ /^n/i) {
+        $admin_ok = 1;
+        $admin_create = 0;
+      } else {
+        print "OK, well, someone has to be the administrator.  Try someone else.\n";
+        $login = "";
+      }
+    } else {
+      print "You entered $login.  Is this correct? [Y/n] ";
+      my $ok = <STDIN>;
+      chomp $ok;
+      if ($ok !~ /^n/i) {
+        $admin_ok = 1;
+      } else {
+        print "That's okay, typos happen.  Give it another shot.\n";
+        $login = "";
+      }
+    }
+  }
+
+  if ($admin_create) {
+
+    while( $realname eq "" ) {
+      print "Enter the real name of the administrator: ";
+      $realname = <STDIN>;
+      chomp $realname;
+      if(! $realname ) {
+        print "\nReally.  We need a full name.\n";
+      }
+    }
+
+    # trap a few interrupts so we can fix the echo if we get aborted.
+    $SIG{HUP}  = \&bailout;
+    $SIG{INT}  = \&bailout;
+    $SIG{QUIT} = \&bailout;
+    $SIG{TERM} = \&bailout;
+
+    system("stty -echo");  # disable input echoing
+
+    while( $pass1 ne $pass2 ) {
+      while( $pass1 eq "" ) {
+        print "Enter a password for the administrator account: ";
+        $pass1 = <STDIN>;
+        chomp $pass1;
+        if(! $pass1 ) {
+          print "\n\nIt's just plain stupid to not have a password.  Try again!\n";
+        }
+      }
+      print "\nPlease retype the password to verify: ";
+      $pass2 = <STDIN>;
+      chomp $pass2;
+      if ($pass1 ne $pass2) {
+        print "\n\nPasswords don't match.  Try again!\n";
+        $pass1 = "";
+        $pass2 = "*";
+      }
+    }
+
+    system("stty echo"); # re-enable input echoing
+    $SIG{HUP}  = 'DEFAULT'; # and remove our interrupt hooks
+    $SIG{INT}  = 'DEFAULT';
+    $SIG{QUIT} = 'DEFAULT';
+    $SIG{TERM} = 'DEFAULT';
+
+    $realname = $dbh->quote($realname);
+    $pass1 = $dbh->quote($pass1);
+
+    $dbh->do(<<_End_Of_SQL_);
+      INSERT INTO profiles
+      (login_name, realname, password, cryptpassword, groupset, newemailtech)
+      VALUES ($login, $realname, $pass1, encrypt($pass1), 0x7fffffffffffffff, 1)
+_End_Of_SQL_
+  } else {
+    $dbh->do(<<_End_Of_SQL_);
+      UPDATE profiles
+      SET groupset=0x7fffffffffffffff
+      WHERE login_name=$login
+_End_Of_SQL_
+  }
+  print "\n$login is now set up as the administrator account.\n";
+}
 
 
 ###########################################################################
-# Promote first user into every group
+# Create initial test product if there are no products present.
 ###########################################################################
 
-#
-# Assume you just logged in. Now how can you administrate the system? Just
-# execute checksetup.pl again. If there is only 1 user in bugzilla, then
-# this user is promoted into every group.
-#
-
-$sth = $dbh->prepare("SELECT login_name FROM profiles");
+$sth = $dbh->prepare(<<_End_Of_SQL_);
+  SELECT userid
+  FROM profiles
+  WHERE groupset=9223372036854775807
+_End_Of_SQL_
 $sth->execute;
-# when we have exactly one user ...
-if ($sth->rows == 1) {
-    my @row = $sth->fetchrow_array;
-    print "Putting user $row[0] into every group ...\n";
-    # are this enought f's for now?  :-)
-    $dbh->do("update profiles set groupset=0xffffffffffff");
+my ($adminuid) = $sth->fetchrow_array;
+if (!$adminuid) { die "No administator!" } # should never get here
+$sth = $dbh->prepare("SELECT product FROM products");
+$sth->execute;
+unless ($sth->rows) {
+    print "Creating initial dummy product 'TestProduct' ...\n";
+    $dbh->do('INSERT INTO products(product, description, milestoneurl, disallownew, votesperuser, votestoconfirm) VALUES ("TestProduct",
+              "This is a test product.  This ought to be blown away and ' .
+             'replaced with real stuff in a finished installation of ' .
+             'bugzilla.", "", 0, 0, 0)');
+    $dbh->do('INSERT INTO versions (value, program) VALUES ("other", "TestProduct")');
+    $dbh->do("INSERT INTO components (value, program, description, initialowner, initialqacontact)
+             VALUES (" .
+             "'TestComponent', 'TestProduct', " .
+             "'This is a test component in the test product database.  " .
+             "This ought to be blown away and replaced with real stuff in " .
+             "a finished installation of bugzilla.', $adminuid, 0)");
+    $dbh->do('INSERT INTO milestones (product, value) VALUES ("TestProduct","---")');
 }
 
 
 
 
 
-
 ###########################################################################
 # Update the tables to the current definition
 ###########################################################################
@@ -1183,10 +1450,38 @@ sub DropField ($$)
               DROP COLUMN $field");
 }
 
-
-my $regenerateshadow = 0;
-
-
+# this uses a mysql specific command. 
+sub TableExists ($)
+{
+   my ($table) = @_;
+   my @tables;
+   my $dbtable;
+   my $exists = 0;
+   my $sth = $dbh->prepare("SHOW TABLES");
+   $sth->execute;
+   while ( ($dbtable) = $sth->fetchrow_array ) {
+      if ($dbtable eq $table) {
+         $exists = 1;
+      } 
+   } 
+   return $exists;
+}   
+
+$::regenerateshadow = 0;
+
+
+# really old fields that were added before checksetup.pl existed
+# but aren't in very old bugzilla's (like 2.1)
+# Steve Stock (sstock@iconnect-inc.com)
+AddField('bugs', 'target_milestone', 'varchar(20) not null default "---"');
+AddField('bugs', 'groupset', 'bigint not null');
+AddField('bugs', 'qa_contact', 'mediumint not null');
+AddField('bugs', 'status_whiteboard', 'mediumtext not null');
+AddField('products', 'disallownew', 'tinyint not null');
+AddField('products', 'milestoneurl', 'tinytext not null');
+AddField('components', 'initialqacontact', 'tinytext not null');
+AddField('components', 'description', 'mediumtext not null');
+ChangeFieldType('components', 'program', 'varchar(64)');
 
 
 # 1999-05-12 Added a pref to control how much email you get.  This needs a new
@@ -1429,7 +1724,7 @@ if (GetFieldDef('bugs', 'long_desc')) {
     DropField('bugs', 'long_desc');
 
     $dbh->do("UNLOCK TABLES");
-    $regenerateshadow = 1;
+    $::regenerateshadow = 1;
 
 }
 
@@ -1546,9 +1841,74 @@ AddField('namedqueries', 'linkinfooter', 'tinyint not null');
 # Added a user field which controls which groups a user can put other users 
 # into.
 
+my @resolutions = ("", "FIXED", "INVALID", "WONTFIX", "LATER", "REMIND",
+                  "DUPLICATE", "WORKSFORME", "MOVED");
+CheckEnumField('bugs', 'resolution', @resolutions);
+
+if (($_ = GetFieldDef('components', 'initialowner')) and ($_->[1] eq 'tinytext')) {
+    $sth = $dbh->prepare("SELECT program, value, initialowner, initialqacontact FROM components");
+    $sth->execute();
+    while (my ($program, $value, $initialowner) = $sth->fetchrow_array()) {
+        $initialowner =~ s/([\\\'])/\\$1/g; $initialowner =~ s/\0/\\0/g;
+        $program =~ s/([\\\'])/\\$1/g; $program =~ s/\0/\\0/g;
+        $value =~ s/([\\\'])/\\$1/g; $value =~ s/\0/\\0/g;
+
+        my $s2 = $dbh->prepare("SELECT userid FROM profiles WHERE login_name = '$initialowner'");
+        $s2->execute();
+
+        my $initialownerid = $s2->fetchrow_array();
+
+        unless (defined $initialownerid) {
+            print "Warning: You have an invalid initial owner '$initialowner' in program '$program', component '$value'!\n";
+            $initialownerid = 0;
+        }
+
+        my $update = "UPDATE components SET initialowner = $initialownerid ".
+            "WHERE program = '$program' AND value = '$value'";
+        my $s3 = $dbh->prepare("UPDATE components SET initialowner = $initialownerid ".
+                               "WHERE program = '$program' AND value = '$value';");
+        $s3->execute();
+    }
+
+    ChangeFieldType('components','initialowner','mediumint');
+}
+
+if (($_ = GetFieldDef('components', 'initialqacontact')) and ($_->[1] eq 'tinytext')) {
+    $sth = $dbh->prepare("SELECT program, value, initialqacontact, initialqacontact FROM components");
+    $sth->execute();
+    while (my ($program, $value, $initialqacontact) = $sth->fetchrow_array()) {
+        $initialqacontact =~ s/([\\\'])/\\$1/g; $initialqacontact =~ s/\0/\\0/g;
+        $program =~ s/([\\\'])/\\$1/g; $program =~ s/\0/\\0/g;
+        $value =~ s/([\\\'])/\\$1/g; $value =~ s/\0/\\0/g;
+
+        my $s2 = $dbh->prepare("SELECT userid FROM profiles WHERE login_name = '$initialqacontact'");
+        $s2->execute();
+
+        my $initialqacontactid = $s2->fetchrow_array();
+
+        unless (defined $initialqacontactid) {
+            if ($initialqacontact ne '') {
+                print "Warning: You have an invalid initial QA contact '$initialqacontact' in program '$program', component '$value'!\n";
+            }
+            $initialqacontactid = 0;
+        }
+
+        my $update = "UPDATE components SET initialqacontact = $initialqacontactid ".
+            "WHERE program = '$program' AND value = '$value'";
+        my $s3 = $dbh->prepare("UPDATE components SET initialqacontact = $initialqacontactid ".
+                               "WHERE program = '$program' AND value = '$value';");
+        $s3->execute();
+    }
+
+    ChangeFieldType('components','initialqacontact','mediumint');
+}
+
+
+
 my @states = ("UNCONFIRMED", "NEW", "ASSIGNED", "REOPENED", "RESOLVED",
               "VERIFIED", "CLOSED");
 CheckEnumField('bugs', 'bug_status', @states);
+
 if (!GetFieldDef('bugs', 'everconfirmed')) {
     AddField('bugs', 'everconfirmed',  'tinyint not null');
     $dbh->do("UPDATE bugs SET everconfirmed = 1, delta_ts = delta_ts");
@@ -1640,7 +2000,7 @@ if ( CountIndexes('cc') != 3 ) {
     $dbh->do("ALTER TABLE cc ADD UNIQUE (bug_id,who)");
     $dbh->do("ALTER TABLE cc ADD INDEX (who)");
 
-    $regenerateshadow=1; # cc fields no longer have spaces in them
+    $::regenerateshadow=1; # cc fields no longer have spaces in them
 }    
 
 if ( CountIndexes('keywords') != 3 ) {
@@ -1654,7 +2014,154 @@ if ( CountIndexes('keywords') != 3 ) {
 
 }    
 
-#
+# 2000-07-15 Added duplicates table so Bugzilla tracks duplicates in a better 
+# way than it used to. This code searches the comments to populate the table
+# initially. It's executed if the table is empty; if it's empty because there
+# are no dupes (as opposed to having just created the table) it won't have
+# any effect anyway, so it doesn't matter.
+$sth = $dbh->prepare("SELECT count(*) from duplicates");
+$sth->execute();
+if (!($sth->fetchrow_arrayref()->[0])) {
+	# populate table
+	print("Populating duplicates table...\n");
+	
+	$sth = $dbh->prepare("SELECT longdescs.bug_id, thetext FROM longdescs left JOIN bugs using(bug_id) WHERE (thetext " . 
+	        "regexp '[.*.]{3,3} This bug has been marked as a duplicate of [[:digit:]]{1,5} [.*.]{3,3}') AND (resolution = 'DUPLICATE') ORDER" .
+			" BY longdescs.bug_when");
+	$sth->execute();
+
+	my %dupes;
+	my $key;
+	
+	# Because of the way hashes work, this loop removes all but the last dupe
+	# resolution found for a given bug.
+	while (my ($dupe, $dupe_of) = $sth->fetchrow_array()) {
+		$dupes{$dupe} = $dupe_of;
+	}
+
+	foreach $key (keys(%dupes))
+	{
+		$dupes{$key} =~ s/.*\*\*\* This bug has been marked as a duplicate of (\d{1,5}) \*\*\*.*?/$1/sm;
+		$dbh->do("INSERT INTO duplicates VALUES('$dupes{$key}', '$key')");
+		#					 BugItsADupeOf   Dupe
+	}
+	
+	$::regenerateshadow = 1;
+}
+
+# 2000-12-14 New graphing system requires a directory to put the graphs in
+# This code copied from what happens for the 'data' dir above.
+# If the graphs dir is not present, we assume that they have been using
+# a Bugzilla with the old data format, and so upgrade their data files.
+unless (-d 'graphs') {
+    print "Creating graphs directory...\n";
+    mkdir 'graphs', 0770; 
+    if ($my_webservergroup eq "") {
+        chmod 01777, 'graphs';
+    } 
+    
+    # Upgrade data format
+    foreach my $in_file (glob("data/mining/*"))
+    {
+        # Don't try and upgrade image or db files!
+        if (($in_file =~ /\.gif$/i) || 
+            ($in_file =~ /\.png$/i) ||
+            ($in_file =~ /\.db$/i) ||
+            ($in_file =~ /\.orig$/i)) {
+            next;
+        }
+
+        rename("$in_file", "$in_file.orig") or next;        
+        open(IN, "$in_file.orig") or next;
+        open(OUT, ">$in_file") or next;
+        
+        # Fields in the header
+        my @declared_fields = ();
+
+        # Fields we changed to half way through by mistake
+        # This list comes from an old version of collectstats.pl
+        # This part is only for people who ran later versions of 2.11 (devel)
+        my @intermediate_fields = qw(DATE UNCONFIRMED NEW ASSIGNED REOPENED 
+                                     RESOLVED VERIFIED CLOSED);
+
+        # Fields we actually want (matches the current collectstats.pl)                             
+        my @out_fields = qw(DATE NEW ASSIGNED REOPENED UNCONFIRMED RESOLVED
+                            VERIFIED CLOSED FIXED INVALID WONTFIX LATER REMIND
+                            DUPLICATE WORKSFORME MOVED);
+
+        while (<IN>) {
+            if (/^# fields?: (.*)\s$/) {
+                @declared_fields = map uc, (split /\||\r/, $1);
+                print OUT "# fields: ", join('|', @out_fields), "\n";
+            }
+            elsif (/^(\d+\|.*)/) {
+                my @data = split /\||\r/, $1;
+                my %data = ();
+                if (@data == @declared_fields) {
+                    # old format
+                    for my $i (0 .. $#declared_fields) {
+                        $data{$declared_fields[$i]} = $data[$i];
+                    }
+                }
+                elsif (@data == @intermediate_fields) {
+                    # Must have changed over at this point 
+                    for my $i (0 .. $#intermediate_fields) {
+                        $data{$intermediate_fields[$i]} = $data[$i];
+                    }
+                }
+                elsif (@data == @out_fields) {
+                    # This line's fine - it has the right number of entries 
+                    for my $i (0 .. $#out_fields) {
+                        $data{$out_fields[$i]} = $data[$i];
+                    }
+                }
+                else {
+                    print "Oh dear, input line $. of $in_file had " . scalar(@data) . " fields\n";
+                    print "This was unexpected. You may want to check your data files.\n";
+                }
+
+                print OUT join('|', map { 
+                              defined ($data{$_}) ? ($data{$_}) : "" 
+                                                          } @out_fields), "\n";
+            }
+            else {
+                print OUT;
+            }
+        }
+
+        close(IN);
+        close(OUT);
+    }    
+}
+
+# 2000-12-18.  Added an 'emailflags' field for storing preferences about
+# when email gets sent on a per-user basis.
+if (!GetFieldDef('profiles', 'emailflags')) {
+    AddField('profiles', 'emailflags', 'mediumtext');
+}
+
+# 2000-11-27 For Bugzilla 2.5 and later. Change table 'comments' to 
+# 'longdescs' - the new name of the comments table.
+if (&TableExists('comments')) {
+    RenameField ('comments', 'when', 'bug_when');
+    ChangeFieldType('comments', 'bug_id', 'mediumint not null');
+    ChangeFieldType('comments', 'who', 'mediumint not null');
+    ChangeFieldType('comments', 'bug_when', 'datetime not null');
+    RenameField('comments','comment','thetext');
+    # Here we rename comments to longdescs
+    $dbh->do("DROP TABLE longdescs");
+    $dbh->do("ALTER TABLE comments RENAME longdescs");
+}
+
+# 2001-04-08 Added a special directory for the duplicates stats.
+unless (-d 'data/duplicates') {
+    print "Creating duplicates directory...\n";
+    mkdir 'data/duplicates', 0770; 
+    if ($my_webservergroup eq "") {
+        chmod 01777, 'data/duplicates';
+    } 
+}
+
 # If you had to change the --TABLE-- definition in any way, then add your
 # differential change code *** A B O V E *** this comment.
 #
@@ -1666,11 +2173,10 @@ if ( CountIndexes('keywords') != 3 ) {
 #
 #
 # Final checks...
-if ($regenerateshadow) {
+if ($::regenerateshadow) {
     print "Now regenerating the shadow database for all bugs.\n";
-    system("./processmail regenerate");
+    system("./processmail", "regenerate");
 }
 
 unlink "data/versioncache";
-print "Reminder: Bugzilla now requires version 3.22.5 or later of MySQL.\n";
 print "Reminder: Bugzilla now requires version 8.7 or later of sendmail.\n";
diff --git a/colchange.cgi b/colchange.cgi
index 2d145955b..f825228ea 100755
--- a/colchange.cgi
+++ b/colchange.cgi
@@ -35,7 +35,7 @@ GetVersionTable();
 
 my @masterlist = ("opendate", "changeddate", "severity", "priority",
                   "platform", "owner", "reporter", "status", "resolution",
-                  "component", "product", "version", "project", "os", "votes");
+                  "component", "product", "version", "os", "votes");
 
 if (Param("usetargetmilestone")) {
     push(@masterlist, "target_milestone");
@@ -70,10 +70,12 @@ if (defined $::FORM{'rememberedquery'}) {
         }
     }
     my $list = join(" ", @collist);
+    my $urlbase = Param("urlbase");
     print "Set-Cookie: COLUMNLIST=$list ; path=/ ; expires=Sun, 30-Jun-2029 00:00:00 GMT\n";
     print "Set-Cookie: SPLITHEADER=$::FORM{'splitheader'} ; path=/ ; expires=Sun, 30-Jun-2029 00:00:00 GMT\n";
     print "Refresh: 0; URL=buglist.cgi?$::FORM{'rememberedquery'}\n";
     print "\n";
+    print "<META HTTP-EQUIV=Refresh CONTENT=\"1; URL=$urlbase"."buglist.cgi?$::FORM{'rememberedquery'}\">\n";
     print "<TITLE>What a hack.</TITLE>\n";
     PutHeader ("Change columns");
     print "Resubmitting your query with new columns...\n";
diff --git a/collectstats.pl b/collectstats.pl
index a1b9885a7..e36a3ca90 100755
--- a/collectstats.pl
+++ b/collectstats.pl
@@ -20,16 +20,26 @@
 #
 # Contributor(s): Terry Weissman <terry@mozilla.org>,
 #                 Harrison Page <harrison@netscape.com>
+#         Gervase Markham <gerv@gerv.net>
 
 # Run me out of cron at midnight to collect Bugzilla statistics.
 
+
+use AnyDBM_File;
 use diagnostics;
 use strict;
 use vars @::legal_product;
 
 require "globals.pl";
 
-ConnectToDatabase();
+# tidy up after graphing module
+if (chdir("graphs")) {
+    unlink <./*.gif>;
+    unlink <./*.png>;
+    chdir("..");
+}
+
+ConnectToDatabase(1);
 GetVersionTable();
 
 my @myproducts;
@@ -42,6 +52,8 @@ foreach (@myproducts) {
     &collect_stats ($dir, $_);
 }
 
+&calculate_dupes();
+
 sub check_data_dir {
     my $dir = shift;
 
@@ -56,35 +68,47 @@ sub collect_stats {
     my $product = shift;
     my $when = localtime (time);
 
-
-    $product =~ s/\//-/gs;
-    my $file = join '/', $dir, $product;
+    # NB: Need to mangle the product for the filename, but use the real
+    # product name in the query
+    my $file_product = $product;
+    $file_product =~ s/\//-/gs;
+    my $file = join '/', $dir, $file_product;
     my $exists = -f $file;
 
     if (open DATA, ">>$file") {
         push my @row, &today;
 
-        foreach my $status ('NEW', 'ASSIGNED', 'REOPENED') {
-	    if( $product eq "-All-" ) {
+        foreach my $status ('NEW', 'ASSIGNED', 'REOPENED', 'UNCONFIRMED', 'RESOLVED', 'VERIFIED', 'CLOSED') {
+            if( $product eq "-All-" ) {
                 SendSQL("select count(bug_status) from bugs where bug_status='$status'");
-	    } else {
+            } else {
                 SendSQL("select count(bug_status) from bugs where bug_status='$status' and product='$product'");
-	    }
+            }
+
+            push @row, FetchOneColumn();
+        }
+
+        foreach my $resolution ('FIXED', 'INVALID', 'WONTFIX', 'LATER', 'REMIND', 'DUPLICATE', 'WORKSFORME', 'MOVED') {
+            if( $product eq "-All-" ) {
+                SendSQL("select count(resolution) from bugs where resolution='$resolution'");
+            } else {
+                SendSQL("select count(resolution) from bugs where resolution='$resolution' and product='$product'");
+            }
+
             push @row, FetchOneColumn();
         }
 
-        if (! $exists)
-        {
+        if (! $exists) {
             print DATA <<FIN;
-# Bugzilla daily bug stats
+# Bugzilla Daily Bug Stats
 #
-# do not edit me! this file is generated.
-# 
-# fields: date|new|assigned|reopened
-# product: $product
-# created: $when
+# Do not edit me! This file is generated.
+#
+# fields: DATE|NEW|ASSIGNED|REOPENED|UNCONFIRMED|RESOLVED|VERIFIED|CLOSED|FIXED|INVALID|WONTFIX|LATER|REMIND|DUPLICATE|WORKSFORME|MOVED
+# Product: $product
+# Created: $when
 FIN
-	}
+        }
 
         print DATA (join '|', @row) . "\n";
         close DATA;
@@ -93,8 +117,86 @@ FIN
     }
 }
 
+sub calculate_dupes {
+    SendSQL("SELECT * FROM duplicates");
+
+    my %dupes;
+    my %count;
+    my @row;
+    my $key;
+    my $changed = 1;
+
+    my $today = &today_dash;
+
+    # Save % count here in a date-named file
+    # so we can read it back in to do changed counters
+    # First, delete it if it exists, so we don't add to the contents of an old file
+    if (<data/duplicates/dupes$today*>) {
+        system("rm -f data/duplicates/dupes$today*");
+    }
+   
+    dbmopen(%count, "data/duplicates/dupes$today", 0644) || die "Can't open DBM dupes file: $!";
+
+    # Create a hash with key "a bug number", value "bug which that bug is a
+    # direct dupe of" - straight from the duplicates table.
+    while (@row = FetchSQLData()) {
+        my $dupe_of = shift @row;
+        my $dupe = shift @row;
+        $dupes{$dupe} = $dupe_of;
+    }
+
+    # Total up the number of bugs which are dupes of a given bug
+    # count will then have key = "bug number", 
+    # value = "number of immediate dupes of that bug".
+    foreach $key (keys(%dupes)) 
+    {
+        my $dupe_of = $dupes{$key};
+
+        if (!defined($count{$dupe_of})) {
+            $count{$dupe_of} = 0;
+        }
+
+        $count{$dupe_of}++;
+    }   
+
+    # Now we collapse the dupe tree by iterating over %count until
+    # there is no further change.
+    while ($changed == 1)
+    {
+        $changed = 0;
+        foreach $key (keys(%count)) {
+            # if this bug is actually itself a dupe, and has a count...
+            if (defined($dupes{$key}) && $count{$key} > 0) {
+                # add that count onto the bug it is a dupe of,
+                # and zero the count; the check is to avoid
+                # loops
+                if ($count{$dupes{$key}} != 0) {
+                    $count{$dupes{$key}} += $count{$key};
+                    $count{$key} = 0;
+                    $changed = 1;
+                }
+            }
+        }
+    }
+
+    # Remove the values for which the count is zero
+    foreach $key (keys(%count))
+    {
+        if ($count{$key} == 0) {
+            delete $count{$key};
+        }
+    }
+   
+    dbmclose(%count);
+}
+
 sub today {
     my ($dom, $mon, $year) = (localtime(time))[3, 4, 5];
     return sprintf "%04d%02d%02d", 1900 + $year, ++$mon, $dom;
 }
 
+sub today_dash {
+    my ($dom, $mon, $year) = (localtime(time))[3, 4, 5];
+    return sprintf "%04d-%02d-%02d", 1900 + $year, ++$mon, $dom;
+}
+
diff --git a/confirmhelp.html b/confirmhelp.html
index 5c8e64434..1dad97302 100644
--- a/confirmhelp.html
+++ b/confirmhelp.html
@@ -54,10 +54,9 @@ the NEW) state.
        permissions) decides that the bug is a valid one, and confirms
        it.  We hope to gather a small army of responsible volunteers
        to regularly go through bugs for us.
-  <li> The bug gathers a certain number of votes.  <b>Any</b> valid
-       Bugzilla user may vote for bugs (each user gets a certain
-       number of bugs); any UNCONFIRMED bug which enough bugs becomes
-       automatically confirmed, and enters the NEW state.
+  <li> The bug gathers a certain number of votes. <B>Any</B> valid Bugzilla user may vote for 
+bugs (each user gets a certain number of bugs); any UNCONFIRMED bug which 
+gets enough votes becomes automatically confirmed, and enters the NEW state.
 </ul>
 
 One implication of this is that it is worth your time to search the
diff --git a/contrib/CVS/Entries b/contrib/CVS/Entries
index 8d39e8518..7ae00ac72 100644
--- a/contrib/CVS/Entries
+++ b/contrib/CVS/Entries
@@ -1,9 +1,12 @@
 /BugzillaEmail.pm/1.1/Wed Mar 15 22:29:44 2000//
-/README/1.2/Tue Mar  7 17:36:38 2000//
+/README/1.4/Sun Apr 22 18:13:40 2001//
 /README.Mailif/1.3/Wed Mar 15 23:39:03 2000//
-/bug_email.pl/1.6/Sat Mar 18 23:32:49 2000//
+/bug_email.pl/1.8/Wed Sep  6 06:01:10 2000//
 /bugmail_help.html/1.1/Tue Mar  7 17:36:48 2000//
 /bugzilla.procmailrc/1.1/Wed Mar 15 23:39:09 2000//
 /bugzilla_email_append.pl/1.2/Wed Mar 15 23:39:11 2000//
+/cvs-update.sh/1.1/Wed Apr 18 18:01:28 2001//
 /gnats2bz.pl/1.5/Thu Nov 18 17:29:58 1999//
+/mysqld-watcher.pl/1.1/Sun Apr 22 17:48:12 2001//
+/yp_nomail.sh/1.1/Tue Sep 12 23:50:31 2000//
 D
diff --git a/contrib/README b/contrib/README
index 32ec834a9..40a728dbc 100644
--- a/contrib/README
+++ b/contrib/README
@@ -5,14 +5,18 @@ be useful to you.
 
 This directory includes:
 
-        gnats2bz.pl -- a perl script to help import bugs from a GNATS 
+  mysqld-watcher.pl --  This script can be installed as a frequent cron 
+                        job to clean up stalled/dead queries.
+        gnats2bz.pl --  A perl script to help import bugs from a GNATS 
                         database into a Bugzilla database.  Contributed by
                         Tom Schutter <tom@platte.com>
 
-       bug_email.pl --  a perl script that can receive email containing
+       bug_email.pl --  A perl script that can receive email containing
                         bug reports (email-interface). Contributed by
                         Klaas Freitag <freitag@SuSE.de>
 	
       README.Mailif --  Readme describing the mail interface.
   bugmail_help.html --  User help page for the mail interface.
 
+       yp_nomail.sh --  Script you can run via cron that regularly updates
+                        the nomail file for terminated employees 
diff --git a/contrib/bug_email.pl b/contrib/bug_email.pl
index 635ce9383..e7d039919 100755
--- a/contrib/bug_email.pl
+++ b/contrib/bug_email.pl
@@ -37,7 +37,7 @@
 #
 # You need to work with bug_email.pl the MIME::Parser installed.
 # 
-# $Id: bug_email.pl,v 1.6 2000/03/18 23:32:49 seth%cs.brandeis.edu Exp $
+# $Id: bug_email.pl,v 1.8 2000/09/06 06:01:10 dave%intrec.com Exp $
 ###############################################################
 
 # 02/12/2000 (SML)
@@ -285,10 +285,10 @@ sub getEnumList( $ )
 # Uses the global var. $Control{ 'priority' }
 sub CheckPriority
 {
-    my $prio = ($Control{'priority'} ||= "");
+    my $prio = $Control{'priority'};
     my @all_prios = getEnumList( "priority" );
 
-    if( (lsearch( \@all_prios, $prio ) == -1) || $prio eq "" ) {
+    if( $prio eq "" || (lsearch( \@all_prios, $prio ) == -1)  ) {
 	# OK, Prio was not defined - create Answer
 	my $Text = "You sent wrong priority-setting, valid values are:" .
 	    join( "\n\t", @all_prios ) . "\n\n";
@@ -1087,7 +1087,7 @@ if( $GroupSet eq "" ) {
 	if( lsearch( \@db_bits, $bit ) == -1 ) {
 	    # Bit not found !
 	    my $Text = "Checking the Group-Settings: You sent the Groupset-Bit $bit\n" .
-		"which is not a valid Groupset-Bit. It will be scipped !\n\n";
+		"which is not a valid Groupset-Bit. It will be skipped !\n\n";
 	    BugMailError( 0, $Text );
 	} else {
 	    # Cool bit, add to the result-String
diff --git a/contrib/cvs-update.sh b/contrib/cvs-update.sh
new file mode 100644
index 000000000..f74220073
--- /dev/null
+++ b/contrib/cvs-update.sh
@@ -0,0 +1,40 @@
+#!/bin/sh
+#
+# The contents of this file are subject to the Mozilla Public
+# License Version 1.1 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS
+# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+# implied. See the License for the specific language governing
+# rights and limitations under the License.
+#
+# The Original Code is the Bugzilla Bug Tracking System.
+#
+# The Initial Developer of the Original Code is Netscape Communications
+# Corporation. Portions created by Netscape are
+# Copyright (C) 1998 Netscape Communications Corporation. All
+# Rights Reserved.
+#
+# Contributor(s): Dawn Endico <endico@mozilla.org>
+
+
+# Keep a record of all cvs updates made from a given directory.
+#
+# Later, if changes need to be backed out, look at the log file
+# and run the cvs command with the date that you want to back
+# out to. (Probably the second to last entry).
+
+#DATE=`date +%e/%m/%Y\ %k:%M:%S\ %Z`
+DATE=`date`
+COMMAND="cvs update -d -P -D" 
+echo $COMMAND \"$DATE\" >> cvs-update.log
+$COMMAND "$DATE"
+
+
+# sample log file
+#cvs update -P -D "11/04/2000 20:22:08 PDT"
+#cvs update -P -D "11/05/2000 20:22:22 PDT"
+#cvs update -P -D "11/07/2000 20:26:29 PDT"
+#cvs update -P -D "11/08/2000 20:27:10 PDT"
diff --git a/contrib/mysqld-watcher.pl b/contrib/mysqld-watcher.pl
new file mode 100755
index 000000000..d867c62c8
--- /dev/null
+++ b/contrib/mysqld-watcher.pl
@@ -0,0 +1,102 @@
+#!/usr/bonsaitools/bin/perl -w
+#
+# The contents of this file are subject to the Mozilla Public
+# License Version 1.1 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.mozilla.org/MPL/
+# 
+# Software distributed under the License is distributed on an "AS
+# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+# implied. See the License for the specific language governing
+# rights and limitations under the License.
+# 
+# The Original Code is the Bugzilla Bug Tracking System.
+# 
+# The Initial Developer of the Original Code is Netscape Communications
+# Corporation. Portions created by Netscape are
+# Copyright (C) 2000 Netscape Communications Corporation.  All
+# Rights Reserved.
+# 
+# Contributor(s): Dan Mosedale <dmose@mozilla.org>
+#
+
+# mysqld-watcher.pl - a script that watches the running instance of
+# mysqld and kills off any long-running SELECTs against the shadow_db
+# 
+use diagnostics;
+use strict;
+
+require "globals.pl";
+
+# some configurables: 
+
+# length of time before a thread is eligible to be killed, in seconds
+#
+my $long_query_time = 600;
+#
+# the From header for any messages sent out
+#
+my $mail_from = "root\@lounge.mozilla.org";
+#
+# mail transfer agent.  this should probably really be converted to a Param().
+#
+my $mta_program = "/usr/lib/sendmail -t -ODeliveryMode=deferred";
+
+# and STDIN is where we get the info about running threads
+#
+close(STDIN);
+open(STDIN, "/usr/bonsaitools/bin/mysqladmin processlist |");
+
+# iterate through the running threads
+#
+my @LONGEST = (0,0,0,0,0,0,0,0,0);
+while ( <STDIN> ) { 
+    my @F = split(/\|/);
+
+    # if this line is not the correct number of fields, or if the thread-id
+    # field contains Id, skip this line.  both these cases indicate that this
+    # line contains pretty-printing gunk and not thread info.
+    #
+    next if ( $#F != 9 || $F[1] =~ /Id/); 
+
+    if ( $F[4] =~ /shadow_bugs/             # shadowbugs database in use
+         && $F[5] =~ /Query/                # this is actually a query
+         && $F[6] > $long_query_time        # this query has taken too long
+         && $F[8] =~ /(select|SELECT)/      # only kill a select
+         && $F[6] > $LONGEST[6] ) {         # the longest running query seen
+        @LONGEST = @F;
+    }
+}
+
+# if we found anything, kill the database thread and send mail about it
+#
+if ($LONGEST[6] != 0) {
+
+    system ("/usr/bonsaitools/bin/mysqladmin", "kill", $LONGEST[1]);
+
+    # fire off an email telling the maintainer that we had to kill a thread
+    #
+    sendEmail($mail_from, Param("maintainer"), 
+	     "long running MySQL thread killed",
+	     join(" ", @LONGEST) . "\n");
+}
+
+# send an email message
+#
+# should perhaps be moved to somewhere more global for use in bugzilla as a 
+# whole; should also do more error-checking
+#
+sub sendEmail($$$$) {
+    ($#_ == 3) || die("sendEmail: invalid number of arguments");
+    my ($from, $to, $subject, $body) = @_;
+
+    open(MTA, "|$mta_program");
+    print MTA "From: $from\n";
+    print MTA "To: $to\n";
+    print MTA "Subject: $subject\n";
+    print MTA "\n";
+    print MTA $body;
+    print MTA "\n";
+    close(MTA);
+   
+}
diff --git a/contrib/yp_nomail.sh b/contrib/yp_nomail.sh
new file mode 100644
index 000000000..36bbc82f7
--- /dev/null
+++ b/contrib/yp_nomail.sh
@@ -0,0 +1,78 @@
+#!/bin/sh
+# -*- Mode: ksh -*-
+##############################################################################
+# $Id: yp_nomail.sh,v 1.1 2000/09/12 23:50:31 cyeh%bluemartini.com Exp $
+# yp_nomail
+#
+# Our mail admins got annoyed when bugzilla kept sending email
+# to people who'd had bugzilla entries and left the company.  They
+# were no longer in the list of valid email users so it'd bounce.
+# Maintaining the 'data/nomail' file was a pain.  Luckily, our UNIX
+# admins list all the users that ever were, but the people who've left
+# have a distinct marker in their password file. For example:
+#
+# fired:*LK*:2053:1010:You're Fired Dude:/home/loser:/bin/false
+#
+# This script takes advantage of the "*LK*" convention seen via 
+# ypcat passwd and dumps those people into the nomail file. Any
+# manual additions are kept in a "nomail.(domainname)" file and 
+# appended to the list of yp lockouts every night via Cron
+#
+# 58 23 * * * /export/bugzilla/contrib/yp_nomail.sh > /dev/null 2>&1
+#
+# Tak ( Mark Takacs ) 08/2000
+#
+# XXX: Maybe should crosscheck w/bugzilla users?
+##############################################################################
+
+####
+# Configure this section to suite yer installation
+####
+
+DOMAIN=`domainname`
+MOZILLA_HOME="/export/mozilla"
+BUGZILLA_HOME="${MOZILLA_HOME}/bugzilla"
+NOMAIL_DIR="${BUGZILLA_HOME}/data"
+NOMAIL="${NOMAIL_DIR}/nomail"
+NOMAIL_ETIME="${NOMAIL}.${DOMAIN}"
+NOMAIL_YP="${NOMAIL}.yp"
+FIRED_FLAG="\*LK\*"
+
+YPCAT="/usr/bin/ypcat"
+GREP="/usr/bin/grep"
+SORT="/usr/bin/sort"
+
+########################## no more config needed  #################
+
+# This dir comes w/Bugzilla. WAY too paranoid
+if [ ! -d ${NOMAIL_DIR} ] ; then
+    echo "Creating $date_dir"
+    mkdir -p ${NOMAIL_DIR}
+fi
+
+#
+# Do some (more) paranoid checking
+#
+touch ${NOMAIL}
+if [ ! -w ${NOMAIL} ] ; then
+    echo "Can't write nomail file: ${NOMAIL} -- exiting"
+    exit
+fi
+if [ ! -r ${NOMAIL_ETIME} ] ; then
+    echo "Can't access custom nomail file: ${NOMAIL_ETIME} -- skipping"
+    NOMAIL_ETIME=""
+fi
+
+#
+# add all the people with '*LK*' password to the nomail list
+# XXX: maybe I should customize the *LK* string. Doh.
+#
+
+LOCKOUT=`$YPCAT passwd | $GREP "${FIRED_FLAG}" | cut -d: -f1 | sort > ${NOMAIL_YP}`
+`cat ${NOMAIL_YP} ${NOMAIL_ETIME} > ${NOMAIL}`
+
+exit
+
+
+# end
+
diff --git a/createaccount.cgi b/createaccount.cgi
index 14420a65e..c2358d6fd 100755
--- a/createaccount.cgi
+++ b/createaccount.cgi
@@ -20,6 +20,7 @@
 #
 # Contributor(s): Terry Weissman <terry@mozilla.org>
 #                 David Gardiner <david.gardiner@unisa.edu.au>
+#                 Joe Robins <jmrobins@tgix.com>
 
 use diagnostics;
 use strict;
@@ -42,6 +43,14 @@ Content-type: text/html
 
 ";
 
+# If we're using LDAP for login, then we can't create a new account here.
+if(Param('useLDAP')) {
+  PutHeader("Can't create LDAP accounts");
+  print "This site is using LDAP for authentication.  Please contact an LDAP ";
+  print "administrator to get a new account created.\n";
+  PutFooter();
+  exit;
+}
 
 my $login = $::FORM{'login'};
 my $realname = $::FORM{'realname'};
@@ -59,11 +68,8 @@ if (defined $login) {
     PutHeader("Account created");
     my $password = InsertNewUser($login, $realname);
     MailPassword($login, $password);
-    print "A bugzilla account for <tt>$login</tt> has been created.  The\n";
-    print "password has been e-mailed to that address.  When it is\n";
-    print "received, you may <a href=query.cgi?GoAheadAndLogIn>click\n";
-    print "here</a> and log in.  Or, you can just <a href=\"\">go back to\n";
-    print "the top</a>.";
+    print " You can also <a href=query.cgi?GoAheadAndLogIn>click\n";
+    print "here</a> to log in for the first time.";
     PutFooter();
     exit;
 }
@@ -86,7 +92,7 @@ as well.
 <td><input size=35 name=realname></td>
 </tr>
 </table>
-<input type=submit>
+<input type="submit" value="Create Account">
 };
 
 PutFooter();
diff --git a/createattachment.cgi b/createattachment.cgi
index fa370d710..6af304bec 100755
--- a/createattachment.cgi
+++ b/createattachment.cgi
@@ -92,7 +92,7 @@ What kind of file is this?
     if ($mimetype eq "other") {
         $mimetype = $::FORM{'othertype'};
     }
-    if ($mimetype !~ m@^(\w|-)+/(\w|-)+$@) {
+    if ($mimetype !~ m@^(\w|-|\+|\.)+/(\w|-|\+|\.)+$@) {
         Punt("You must select a legal mime type.  '<tt>$mimetype</tt>' simply will not do.");
     }
     SendSQL("insert into attachments (bug_id, filename, description, mimetype, ispatch, submitter_id, thedata) values ($id," .
@@ -105,9 +105,11 @@ What kind of file is this?
     AppendComment($id, $::COOKIE{"Bugzilla_login"},
                   "Created an attachment (id=$attachid)\n$desc\n");
 
-    print "<TABLE BORDER=1><TD><H2>Attachment to bug $id created</H2>\n";
-    system("./processmail $id $::COOKIE{'Bugzilla_login'}");
+    print '<TABLE BORDER=1><TD><H2>Attachment <A TITLE="'.value_quote($desc).
+      "\" HREF=\"showattachment.cgi?attach_id=$attachid\">$attachid</A> to bug $id created</H2>\n";
+    system("./processmail", $id, $::COOKIE{'Bugzilla_login'});
     print "<TD><A HREF=\"show_bug.cgi?id=$id\">Go Back to BUG# $id</A></TABLE>\n";
+    print "<P><A HREF=\"createattachment.cgi?id=$id\">Create another attachment to bug $id</A></P>\n";
 }
 
 PutFooter();
diff --git a/defparams.pl b/defparams.pl
index 41a40faf0..d13efe89f 100644
--- a/defparams.pl
+++ b/defparams.pl
@@ -21,10 +21,17 @@
 #                 Dawn Endico <endico@mozilla.org>
 #                 Dan Mosedale <dmose@mozilla.org>
 #                 Joe Robins <jmrobins@tgix.com>
+#                 Jake <jake@acutex.net>
+#
 
 # This file defines all the parameters that we have a GUI to edit within
 # Bugzilla.
 
+# ATTENTION!!!!   THIS FILE ONLY CONTAINS THE DEFAULTS.
+# You cannot change your live settings by editing this file.
+# Only adding new parameters is done here.  Once the parameter exists, you 
+# must use %baseurl%/editparams.cgi from the web to edit the settings.
+
 use diagnostics;
 use strict;
 
@@ -113,10 +120,6 @@ sub check_shadowdb {
 # t -- A short text entry field (suitable for a single line)
 # l -- A long text field (suitable for many lines)
 # b -- A boolean value (either 1 or 0)
-# i -- An integer.
-# defenum -- This param defines an enum that defines a column in one of
-#	     the database tables.  The name of the parameter is of the form
-#	     "tablename.columnname".
 
 DefParam("maintainer",
 	 "The email address of the person who maintains this installation of Bugzilla.",
@@ -203,11 +206,46 @@ sub check_despotbaseurl {
 }
 
 
+# Adding in four parameters for LDAP authentication.  -JMR, 7/28/00
+DefParam("useLDAP",
+         "Turn this on to use an LDAP directory for user authentication ".
+         "instead of the Bugzilla database.  (User profiles will still be ".
+         "stored in the database, and will match against the LDAP user by ".
+         "email address.)",
+         "b",
+         0);
+
+
+DefParam("LDAPserver",
+         "The name (and optionally port) of your LDAP server. (e.g. ldap.company.com, or ldap.company.com:portnum)",
+         "t",
+         "");
+
+
+DefParam("LDAPBaseDN",
+         "The BaseDN for authenticating users against. (e.g. \"ou=People,o=Company\")",
+         "t",
+         "");
+
+
+DefParam("LDAPmailattribute",
+         "The name of the attribute of a user in your directory that ".
+         "contains the email address.",
+         "t",
+         "mail");
+#End of LDAP parameters
+
+
 DefParam("headerhtml",
          "Additional HTML to add to the HEAD area of documents, eg. links to stylesheets.",
          "l",
          '');
 
+DefParam("bodyhtml",
+         "Additional parameters to add to the BODY tag at the beginning of documents, eg. background image/colors, link colors, etc",
+         "l",
+         'BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000EE" VLINK="#551A8B" ALINK="#FF0000"');
+
 DefParam("footerhtml",
          "HTML to add to the bottom of every page. By default it displays the blurbhtml, and %commandmenu%, a menu of useful commands.  You probably really want either headerhtml or footerhtml to include %commandmenu%.",
          "l",
@@ -249,6 +287,55 @@ information about what Bugzilla is and what it can do, see
 <A HREF=\"http://www.mozilla.org/bugs/\"><B>bug pages</B></A>.");
 
 
+DefParam("mostfreqhtml",
+         "The HTML which appears at the top of the list of most-frequently-reported bugs. Use it to explain the page, set a maintainer etc.",
+         "l",
+         q{
+<br><p>
+
+<b>What are "most frequent bugs"?</b>
+
+<blockquote>The Most Frequent Bugs page lists the known open bugs which 
+are reported most frequently in recent builds of Mozilla. It is automatically
+generated from the Bugzilla database every 24 hours, by counting the number
+of direct and indirect duplicates of bugs.
+This information is provided in order to assist in minimizing
+the amount of duplicate bugs entered into Bugzilla which in turn cuts down
+on development time.
+</blockquote>
+
+<b>How do I use this list?</b>
+
+<ul>
+<li>Review the most frequent bugs list.</li>
+<li>If problem is listed:</li>
+
+<ul>
+<li>Click on Bug # link to confirm that you have found the same bug and comment
+if you have additional information. Or move on with your testing
+of the product.</li>
+</ul>
+
+<li>If problem not listed:</li>
+
+<ul>
+<li>Go to the <a href="query.cgi">Bugzilla Query/Search</a>
+page to try and locate a similar bug that has already been written.</li>
+<li>If you find your bug in Bugzilla, feel free to comment with any new or
+additional data you may have.</li>
+<li>If you cannot find your problem already documented in Bugzilla, go to the
+<a href="http://www.mozilla.org/quality/help/bug-form.html">Bugzilla Helper</a> and post a new bug.</li>
+</ul>
+
+</ul>
+<br>
+});
+
+DefParam("mostfreqthreshold",
+         "The minimum number of duplicates a bug needs to show up on the <A HREF=\"duplicates.cgi\">most frequently reported bugs page</a>. If you have a large database and this page takes a long time to load, try increasing this number.",
+         "t",
+         "2");
+
 DefParam("mybugstemplate",
          "This is the URL to use to bring up a simple 'all of my bugs' list for a user.  %userid% will get replaced with the login name of a user.",
          "t",
@@ -261,6 +348,10 @@ DefParam("shutdownhtml",
          "l",
          "");
 
+DefParam("sendmailnow",
+         "If this is on, Bugzilla will tell sendmail to send any e-mail immediately. If you have a large number of users with a large amount of e-mail traffic, enabling this option may dramatically slow down Bugzilla. Best used for smaller installations of Bugzilla.",
+         "b",
+         0);
 
 DefParam("passwordmail",
 q{The email that gets sent to people to tell them their password.  Within
@@ -291,8 +382,8 @@ separated by a comma (with duplication removed, if they're the same
 person).  %cc% gets replaced by the list of people on the CC list,
 separated by commas.  %bugid% gets replaced by the bug number.
 %diffs% gets replaced by the diff text from the old version to the new
-version of this bug.  %neworchanged% is either "New" or "Changed",
-depending on whether this mail is reporting a new bug or changes made
+version of this bug.  %neworchanged% is "New: " if this mail is
+reporting a new bug or empty if changes were made
 to an existing one.  %summary% gets replaced by the summary of this
 bug.  %<i>anythingelse</i>% gets replaced by the definition of that
 parameter (as defined on this page).},
@@ -300,20 +391,27 @@ parameter (as defined on this page).},
 "From: bugzilla-daemon
 To: %to%
 Cc: %cc%
-Subject: [Bug %bugid%] %neworchanged% - %summary%
+Subject: [Bug %bugid%] %neworchanged%%summary%
 
 %urlbase%show_bug.cgi?id=%bugid%
 
 %diffs%");
 
 DefParam("newemailtech",
-q{There is now experimental code in Bugzilla to do the email diffs in a 
-new and exciting way.  But this stuff is not very cooked yet.  So, right
-now, to use it, the maintainer has to turn on this checkbox, and each user
-has to then turn on the "New email tech" preference.},
+q{The way that email diffs are constructed by Bugzilla.  You can revert to
+the old technology by turning this off, but this is not advised, as the old 
+email tech will probably disappear in the next version of Bugzilla.  Some
+features (watches, server side mail filtering) depend on newemailtech being
+set to on.},
     "b",
-    0);
+    1);
 
+DefParam("newemailtechdefault",
+q{Make "newemailtech" the default for all new accounts created.  This will
+not change any existing accounts nor will it remove a users ability to go
+back to the oldmail system (requires "newemailtech" to be on as well).},
+    "b",
+    1);
 
 DefParam("newchangedmail",
 q{The same as 'changedmail', but used for the newemailtech stuff.},
@@ -321,7 +419,7 @@ q{The same as 'changedmail', but used for the newemailtech stuff.},
 "From: bugzilla-daemon
 To: %to%
 Cc: %cc%
-Subject: [Bug %bugid%] %neworchanged% - %summary%
+Subject: [Bug %bugid%] %neworchanged%%summary%
 
 %urlbase%show_bug.cgi?id=%bugid%
 
@@ -387,7 +485,7 @@ DefParam("defaultquery",
 
 
 DefParam("letsubmitterchoosepriority",
-         "If this is on, then people submitting bugs can choose an initial priority for that bug.  If off, then all bugs initially have the default priority selected above.",
+         "If this is on, then people submitting bugs can choose an initial priority for that bug.  If off, then all bugs initially have the default priority selected below.",
          "b",
          1);
 
@@ -427,6 +525,11 @@ DefParam("curmilestone",
          1,
          \&check_numeric);
 
+DefParam("musthavemilestoneonaccept",
+         "If you are using Target Milestone, do you want to require that the milestone be set in order for a user to ACCEPT a bug?",
+         "b",
+         0);
+
 DefParam("useqacontact",
 	 "Do you wish to use the QA Contact field?",
 	 "b",
@@ -555,5 +658,41 @@ DefParam("supportwatchers",
          " about) another's bugs.  Useful for people going on vacation, and" .
          " QA folks watching particular developers' bugs",
          "b", 0 );
-1;
 
+
+DefParam("move-enabled",
+         "If this is on, Bugzilla will allow certain people to move bugs to the defined database.",
+         "b",
+	 0);
+DefParam("move-button-text",
+         "The text written on the Move button. Explain where the bug is being moved to.",
+         "t",
+         'Move To Bugscape');
+DefParam("move-to-url",
+         "The URL of the database we allow some of our bugs to be moved to.",
+         "t",
+         '');
+DefParam("move-to-address",
+         "To move bugs, an email is sent to the target database. This is the email address that database
+          uses to listen for incoming bugs.",
+         "t",
+         'bugzilla-import');
+DefParam("moved-from-address",
+         "To move bugs, an email is sent to the target database. This is the email address from which
+          this mail, and error messages are sent.",
+         "t",
+         'bugzilla-admin');
+DefParam("movers",
+         "A list of people with permission to move bugs and reopen moved bugs (in case the move operation fails).",
+         "t",
+         '');
+DefParam("moved-default-product",
+         "Bugs moved from other databases to here are assigned to this product.",
+         "t",
+         '');
+DefParam("moved-default-component",
+         "Bugs moved from other databases to here are assigned to this component.",
+         "t",
+         '');
+
+1;
diff --git a/describecomponents.cgi b/describecomponents.cgi
index e1b646f51..4353af2fc 100755
--- a/describecomponents.cgi
+++ b/describecomponents.cgi
@@ -78,9 +78,15 @@ print "</tr>";
 
 SendSQL("select value, initialowner, initialqacontact, description from components where program = " . SqlQuote($product) . " order by value");
 
+my @data;
 while (MoreSQLData()) {
-    my @row = FetchSQLData();
-    my ($component, $initialowner, $initialqacontact, $description) = (@row);
+    push @data, [FetchSQLData()];
+}
+foreach (@data) {
+    my ($component, $initialownerid, $initialqacontactid, $description) = @$_;
+
+    my ($initialowner, $initialqacontact) = ($initialownerid ? DBID_to_name ($initialownerid) : '',
+                                             $initialqacontactid ? DBID_to_name ($initialqacontactid) : '');
 
     print qq|
 <tr><td colspan=$cols><hr></td></tr>
diff --git a/docs/CVS/Entries b/docs/CVS/Entries
index 178481050..5393850d5 100644
--- a/docs/CVS/Entries
+++ b/docs/CVS/Entries
@@ -1 +1,5 @@
-D
+/README.docs/1.2/Thu Mar  8 06:35:25 2001//
+D/html////
+D/sgml////
+D/txt////
+/rel_notes.txt/1.4/Fri Apr 27 19:37:35 2001//
diff --git a/docs/README.docs b/docs/README.docs
new file mode 100644
index 000000000..6b5d6ed61
--- /dev/null
+++ b/docs/README.docs
@@ -0,0 +1,67 @@
+Welcome to the Bugzilla documentation project!
+You'll find these directories and files here:
+
+README.docs	# This README file
+html/		# The compiled HTML docs from SGML sources (do not edit)
+sgml/		# The original SGML doc sources (edit these)
+txt/		# The compiled text docs from SGML sources
+ps/		# The compiled PostScript docs from SGML sources
+pdf/		# The compiled Adobe PDF docs from SGML sources
+
+A note about SGML:
+  The documentation is written in DocBook 3.1/4.1 SGML, and attempts to adhere
+to the LinuxDoc standards everywhere applicable (http://www.linuxdoc.org).
+Please consult "The LDP Author Guide" at linuxdoc.org for details on how
+to set up your personal environment for compiling SGML files.
+  If you need to make corrections to typographical errors, or other minor
+editing duties, feel free to use any text editor to make the changes.  SGML
+is not rocket science -- simply make sure your text appears between 
+appropriate tags (like <para>This is a paragraph</para>) and we'll be fine.
+If you are making more extensive changes, please ensure you at least validate
+your SGML before checking it in with something like:
+	nsgmls -s Bugzilla-Guide.sgml
+
+  When you validate, please validate the master document (Bugzilla-Guide.sgml)
+as well as the document you edited to ensure there are no critical errors.
+The following errors are considered "normal" when validating with nsgmls:
+
+ DTDDECL catalog entries are not supported
+ "DOCTYPE" declaration not allowed in instance
+
+  The reason these occur is that free sgml validators do not yet support
+the DTDDECL catalog entries, and I've included DOCTYPE declarations in
+entities referenced from Bugzilla-Guide.sgml so these entities can compile
+individually, if necessary.  I suppose I ought to comment them out at some
+point, but for now they are convenient and don't hurt anything.
+
+  Thanks for taking the time to read these notes and consulting the
+documentation.  Please address comments and questions to the newsgroup:
+news://news.mozilla.org/netscape/public/mozilla/webtools .
+
+NOTES:
+
+  Here are the commands I use to maintain this documentation.
+  You MUST have DocBook 4.1 set up correctly in order for this to work,
+    but there's only a single REMARK tag that's incompatible with 3.1.
+    Maybe I'll downgrade to DocBook 3.1 to make your life easier...
+  Substitute your own path to "ldp.dsl" for "$LDP_HOME".
+
+
+To create HTML documentation:
+bash$ cd html
+bash$ jade -t sgml -i html -d $LDP_HOME/ldp.dsl\#html \
+../sgml/Bugzilla-Guide.sgml
+
+To create HTML documentation as a single big HTML file:
+bash$ cd html
+bash$ jade -V nochunks -t sgml -i html -d $LDP_HOME/ldp.dsl\#html \
+../sgml/Bugzilla-Guide.sgml >Bugzilla-Guide.html
+
+To create TXT documentation as a single big TXT file:
+bash$ cd txt
+bash$ lynx -dump -nolist ../html/Bugzilla-Guide.html >Bugzilla-Guide.txt
+
+Sincerely,
+ Matthew P. Barnson
+ The Bugzilla "Doc Knight"
+ barnboy@trilobyte.net
diff --git a/docs/html/Bugzilla-Guide.html b/docs/html/Bugzilla-Guide.html
new file mode 100644
index 000000000..0712a5146
--- /dev/null
+++ b/docs/html/Bugzilla-Guide.html
@@ -0,0 +1,12582 @@
+<HTML
+><HEAD
+><TITLE
+>The Bugzilla Guide</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><META
+NAME="KEYWORD"
+CONTENT="Bugzilla"><META
+NAME="KEYWORD"
+CONTENT="Guide"><META
+NAME="KEYWORD"
+CONTENT="installation"><META
+NAME="KEYWORD"
+CONTENT="FAQ"><META
+NAME="KEYWORD"
+CONTENT="administration"><META
+NAME="KEYWORD"
+CONTENT="integration"><META
+NAME="KEYWORD"
+CONTENT="MySQL"><META
+NAME="KEYWORD"
+CONTENT="Mozilla"><META
+NAME="KEYWORD"
+CONTENT="webtools"></HEAD
+><BODY
+CLASS="BOOK"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="BOOK"
+><A
+NAME="INDEX"
+></A
+><DIV
+CLASS="TITLEPAGE"
+><H1
+CLASS="TITLE"
+><A
+NAME="AEN2"
+>The Bugzilla Guide</A
+></H1
+><H3
+CLASS="AUTHOR"
+><A
+NAME="AEN5"
+>Matthew P. Barnson</A
+></H3
+><DIV
+CLASS="AFFILIATION"
+><DIV
+CLASS="ADDRESS"
+><P
+CLASS="ADDRESS"
+>barnboy@trilobyte.net</P
+></DIV
+></DIV
+><DIV
+CLASS="REVHISTORY"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+><TR
+><TH
+ALIGN="LEFT"
+VALIGN="TOP"
+COLSPAN="3"
+><B
+>Revision History</B
+></TH
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+>Revision v2.11</TD
+><TD
+ALIGN="LEFT"
+>20 December 2000</TD
+><TD
+ALIGN="LEFT"
+>Revised by: MPB</TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+COLSPAN="3"
+>Converted the README, FAQ, and DATABASE information into SGML
+	  docbook format.</TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+>Revision 2.11.1</TD
+><TD
+ALIGN="LEFT"
+>06 March 2001</TD
+><TD
+ALIGN="LEFT"
+>Revised by: MPB</TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+COLSPAN="3"
+>Took way too long to revise this for 2.12 release.
+	  Updated FAQ to use qandaset tags instead of literallayout,
+	  cleaned up administration section, added User Guide section,
+	  miscellaneous FAQ updates and third-party integration information.
+	  From this point on all new tags are lowercase in preparation for the
+	  2.13 release of the Guide in XML format instead of SGML.</TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+>Revision 2.12.0</TD
+><TD
+ALIGN="LEFT"
+>24 April 2001</TD
+><TD
+ALIGN="LEFT"
+>Revised by: MPB</TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+COLSPAN="3"
+>Things fixed this release: Elaborated on queryhelp interface, added FAQ regarding
+	  moving bugs from one keyword to another, clarified possible problems with the Landfill
+	  tutorial, fixed a boatload of typos and unclear sentence structures.  Incorporated the
+	  README into the UNIX installation section, and changed the README to indicate the deprecated
+	  status.  Things I know need work:  Used "simplelist" a lot, where I should have used
+	  "procedure" to tag things.  Need to lowercase all tags to be XML compliant.</TD
+></TR
+></TABLE
+></DIV
+><DIV
+><DIV
+CLASS="ABSTRACT"
+><A
+NAME="AEN12"
+></A
+><P
+></P
+><P
+>This is the documentation for Bugzilla, the Mozilla bug-tracking system.</P
+><P
+></P
+></DIV
+></DIV
+><HR></DIV
+><DIV
+CLASS="TOC"
+><DL
+><DT
+><B
+>Table of Contents</B
+></DT
+><DT
+>1. <A
+HREF="#ABOUT"
+>About This Guide</A
+></DT
+><DD
+><DL
+><DT
+>1.1. <A
+HREF="#ABOUTTHISGUIDE"
+>Purpose and Scope of this Guide</A
+></DT
+><DT
+>1.2. <A
+HREF="#COPYRIGHT"
+>Copyright Information</A
+></DT
+><DT
+>1.3. <A
+HREF="#DISCLAIMER"
+>Disclaimer</A
+></DT
+><DT
+>1.4. <A
+HREF="#NEWVERSIONS"
+>New Versions</A
+></DT
+><DT
+>1.5. <A
+HREF="#CREDITS"
+>Credits</A
+></DT
+><DT
+>1.6. <A
+HREF="#CONTRIBUTORS"
+>Contributors</A
+></DT
+><DT
+>1.7. <A
+HREF="#FEEDBACK"
+>Feedback</A
+></DT
+><DT
+>1.8. <A
+HREF="#TRANSLATIONS"
+>Translations</A
+></DT
+><DT
+>1.9. <A
+HREF="#CONVENTIONS"
+>Document Conventions</A
+></DT
+></DL
+></DD
+><DT
+>2. <A
+HREF="#INSTALLATION"
+>Installing Bugzilla</A
+></DT
+><DD
+><DL
+><DT
+>2.1. <A
+HREF="#README.UNIX"
+>UNIX Installation</A
+></DT
+><DD
+><DL
+><DT
+>2.1.1. <A
+HREF="#AEN190"
+>ERRATA</A
+></DT
+><DT
+>2.1.2. <A
+HREF="#AEN204"
+>Step-by-step Install</A
+></DT
+><DD
+><DL
+><DT
+>2.1.2.1. <A
+HREF="#AEN206"
+>Introduction</A
+></DT
+><DT
+>2.1.2.2. <A
+HREF="#AEN211"
+>Installing the Prerequisites</A
+></DT
+><DT
+>2.1.2.3. <A
+HREF="#AEN242"
+>Installing MySQL Database</A
+></DT
+><DT
+>2.1.2.4. <A
+HREF="#AEN248"
+>Perl (5.004 or greater)</A
+></DT
+><DT
+>2.1.2.5. <A
+HREF="#AEN259"
+>DBI Perl Module</A
+></DT
+><DT
+>2.1.2.6. <A
+HREF="#AEN296"
+>Data::Dumper Perl Module</A
+></DT
+><DT
+>2.1.2.7. <A
+HREF="#AEN300"
+>MySQL related Perl Module Collection</A
+></DT
+><DT
+>2.1.2.8. <A
+HREF="#AEN309"
+>TimeDate Perl Module Collection</A
+></DT
+><DT
+>2.1.2.9. <A
+HREF="#AEN312"
+>GD Perl Module (1.8.3)</A
+></DT
+><DT
+>2.1.2.10. <A
+HREF="#AEN318"
+>Chart::Base Perl Module (0.99c)</A
+></DT
+><DT
+>2.1.2.11. <A
+HREF="#AEN321"
+>DB_File Perl Module</A
+></DT
+><DT
+>2.1.2.12. <A
+HREF="#AEN324"
+>HTTP Server</A
+></DT
+><DT
+>2.1.2.13. <A
+HREF="#AEN334"
+>Installing the Bugzilla Files</A
+></DT
+><DT
+>2.1.2.14. <A
+HREF="#AEN343"
+>Setting Up the MySQL Database</A
+></DT
+><DT
+>2.1.2.15. <A
+HREF="#AEN379"
+>Tweaking "localconfig"</A
+></DT
+><DT
+>2.1.2.16. <A
+HREF="#AEN401"
+>Setting Up Maintainers Manuall (Optional)</A
+></DT
+><DT
+>2.1.2.17. <A
+HREF="#AEN410"
+>The Whining Cron (Optional)</A
+></DT
+><DT
+>2.1.2.18. <A
+HREF="#AEN417"
+>Bug Graphs (Optional)</A
+></DT
+><DT
+>2.1.2.19. <A
+HREF="#AEN429"
+>Securing MySQL</A
+></DT
+><DT
+>2.1.2.20. <A
+HREF="#AEN495"
+>Installation General Notes</A
+></DT
+></DL
+></DD
+></DL
+></DD
+><DT
+>2.2. <A
+HREF="#README.WINDOWS"
+>Win32 (Win98+/NT/2K) Installation</A
+></DT
+><DD
+><DL
+><DT
+>2.2.1. <A
+HREF="#NTVERIFIED"
+>Win32 Installation: Step-by-step</A
+></DT
+><DT
+>2.2.2. <A
+HREF="#ADDLWINTIPS"
+>Additional Windows Tips</A
+></DT
+></DL
+></DD
+></DL
+></DD
+><DT
+>3. <A
+HREF="#ADMINISTRATION"
+>Administering Bugzilla</A
+></DT
+><DD
+><DL
+><DT
+>3.1. <A
+HREF="#POSTINSTALL-CHECK"
+>Post-Installation Checklist</A
+></DT
+><DT
+>3.2. <A
+HREF="#USERADMIN"
+>User Administration</A
+></DT
+><DD
+><DL
+><DT
+>3.2.1. <A
+HREF="#DEFAULTUSER"
+>Creating the Default User</A
+></DT
+><DT
+>3.2.2. <A
+HREF="#MANAGEUSERS"
+>Managing Other Users</A
+></DT
+><DD
+><DL
+><DT
+>3.2.2.1. <A
+HREF="#LOGIN"
+>Logging In</A
+></DT
+><DT
+>3.2.2.2. <A
+HREF="#CREATENEWUSERS"
+>Creating new users</A
+></DT
+><DT
+>3.2.2.3. <A
+HREF="#DISABLEUSERS"
+>Disabling Users</A
+></DT
+><DT
+>3.2.2.4. <A
+HREF="#MODIFYUSERS"
+>Modifying Users</A
+></DT
+></DL
+></DD
+></DL
+></DD
+><DT
+>3.3. <A
+HREF="#PROGRAMADMIN"
+>Product, Component, Milestone, and Version Administration</A
+></DT
+><DD
+><DL
+><DT
+>3.3.1. <A
+HREF="#PRODUCTS"
+>Products</A
+></DT
+><DT
+>3.3.2. <A
+HREF="#COMPONENTS"
+>Components</A
+></DT
+><DT
+>3.3.3. <A
+HREF="#VERSIONS"
+>Versions</A
+></DT
+><DT
+>3.3.4. <A
+HREF="#MILESTONES"
+>Milestones</A
+></DT
+><DT
+>3.3.5. <A
+HREF="#VOTING"
+>Voting</A
+></DT
+><DT
+>3.3.6. <A
+HREF="#GROUPS"
+>Groups and Group Security</A
+></DT
+></DL
+></DD
+><DT
+>3.4. <A
+HREF="#SECURITY"
+>Bugzilla Security</A
+></DT
+></DL
+></DD
+><DT
+>4. <A
+HREF="#USING"
+>Using Bugzilla</A
+></DT
+><DD
+><DL
+><DT
+>4.1. <A
+HREF="#WHATIS"
+>What is Bugzilla?</A
+></DT
+><DT
+>4.2. <A
+HREF="#WHY"
+>Why Should We Use Bugzilla?</A
+></DT
+><DT
+>4.3. <A
+HREF="#HOW"
+>How do I use Bugzilla?</A
+></DT
+><DD
+><DL
+><DT
+>4.3.1. <A
+HREF="#MYACCOUNT"
+>Create a Bugzilla Account</A
+></DT
+><DT
+>4.3.2. <A
+HREF="#QUERY"
+>The Bugzilla Query Page</A
+></DT
+><DT
+>4.3.3. <A
+HREF="#BUGREPORTS"
+>Creating and Managing Bug Reports</A
+></DT
+><DD
+><DL
+><DT
+>4.3.3.1. <A
+HREF="#BUG_WRITING"
+>Writing a Great Bug Report</A
+></DT
+><DT
+>4.3.3.2. <A
+HREF="#BUG_MANAGE"
+>Managing your Bug Reports</A
+></DT
+></DL
+></DD
+></DL
+></DD
+><DT
+>4.4. <A
+HREF="#INIT4ME"
+>What's in it for me?</A
+></DT
+><DD
+><DL
+><DT
+>4.4.1. <A
+HREF="#ACCOUNTSETTINGS"
+>Account Settings</A
+></DT
+><DT
+>4.4.2. <A
+HREF="#EMAILSETTINGS"
+>Email Settings</A
+></DT
+><DD
+><DL
+><DT
+>4.4.2.1. <A
+HREF="#NOTIFICATION"
+>Email Notification</A
+></DT
+><DT
+>4.4.2.2. <A
+HREF="#NEWEMAILTECH"
+>New Email Technology</A
+></DT
+><DT
+>4.4.2.3. <A
+HREF="#WATCHSETTINGS"
+>"Watching" Users</A
+></DT
+></DL
+></DD
+><DT
+>4.4.3. <A
+HREF="#FOOTERSETTINGS"
+>Page Footer</A
+></DT
+><DT
+>4.4.4. <A
+HREF="#PERMISSIONSETTINGS"
+>Permissions</A
+></DT
+></DL
+></DD
+><DT
+>4.5. <A
+HREF="#USINGBZ-CONC"
+>Using Bugzilla-Conclusion</A
+></DT
+></DL
+></DD
+><DT
+>5. <A
+HREF="#INTEGRATION"
+>Integrating Bugzilla with Third-Party Tools</A
+></DT
+><DD
+><DL
+><DT
+>5.1. <A
+HREF="#BONSAI"
+>Bonsai</A
+></DT
+><DT
+>5.2. <A
+HREF="#CVS"
+>CVS</A
+></DT
+><DT
+>5.3. <A
+HREF="#SCM"
+>Perforce SCM</A
+></DT
+><DT
+>5.4. <A
+HREF="#TINDERBOX"
+>Tinderbox</A
+></DT
+></DL
+></DD
+><DT
+>6. <A
+HREF="#FUTURE"
+>The Future of Bugzilla</A
+></DT
+><DD
+><DL
+><DT
+>6.1. <A
+HREF="#SPAMLITE"
+>Reducing Spam</A
+></DT
+><DT
+>6.2. <A
+HREF="#SEARCHING"
+>Better Searching</A
+></DT
+><DT
+>6.3. <A
+HREF="#TRACKINGBUGS"
+>Description Flags and Tracking Bugs</A
+></DT
+><DT
+>6.4. <A
+HREF="#BUGPROBS"
+>Bug Issues</A
+></DT
+><DT
+>6.5. <A
+HREF="#DBASEINTEGRITY"
+>Database Integrity</A
+></DT
+><DT
+>6.6. <A
+HREF="#BZ30"
+>Bugzilla 3.0</A
+></DT
+></DL
+></DD
+><DT
+>A. <A
+HREF="#FAQ"
+>The Bugzilla FAQ</A
+></DT
+><DT
+>B. <A
+HREF="#DOWNLOADLINKS"
+>Software Download Links</A
+></DT
+><DT
+>C. <A
+HREF="#DATABASE"
+>The Bugzilla Database</A
+></DT
+><DD
+><DL
+><DT
+>C.1. <A
+HREF="#DBSCHEMA"
+>Database Schema Chart</A
+></DT
+><DT
+>C.2. <A
+HREF="#DBDOC"
+>MySQL Bugzilla Database Introduction</A
+></DT
+><DT
+>C.3. <A
+HREF="#GRANTTABLES"
+>MySQL Permissions &#38; Grant Tables</A
+></DT
+><DT
+>C.4. <A
+HREF="#CLEANUPWORK"
+>Cleaning up after mucking with Bugzilla</A
+></DT
+></DL
+></DD
+><DT
+>7. <A
+HREF="#VARIANTS"
+>Bugzilla Variants</A
+></DT
+><DD
+><DL
+><DT
+>7.1. <A
+HREF="#RHBUGZILLA"
+>Red Hat Bugzilla</A
+></DT
+></DL
+></DD
+><DT
+>D. <A
+HREF="#PATCHES"
+>Useful Patches and Utilities for Bugzilla</A
+></DT
+><DD
+><DL
+><DT
+>D.1. <A
+HREF="#SETPERL"
+>The setperl.csh Utility</A
+></DT
+><DT
+>D.2. <A
+HREF="#CMDLINE"
+>Command-line Bugzilla Queries</A
+></DT
+><DT
+>D.3. <A
+HREF="#QUICKSEARCH"
+>The Quicksearch Utility</A
+></DT
+></DL
+></DD
+><DT
+>E. <A
+HREF="#GFDL"
+>GNU Free Documentation License</A
+></DT
+><DD
+><DL
+><DT
+>0. <A
+HREF="#GFDL_0"
+>PREAMBLE</A
+></DT
+><DT
+>1. <A
+HREF="#GFDL_1"
+>APPLICABILITY AND DEFINITIONS</A
+></DT
+><DT
+>2. <A
+HREF="#GFDL_2"
+>VERBATIM COPYING</A
+></DT
+><DT
+>3. <A
+HREF="#GFDL_3"
+>COPYING IN QUANTITY</A
+></DT
+><DT
+>4. <A
+HREF="#GFDL_4"
+>MODIFICATIONS</A
+></DT
+><DT
+>5. <A
+HREF="#GFDL_5"
+>COMBINING DOCUMENTS</A
+></DT
+><DT
+>6. <A
+HREF="#GFDL_6"
+>COLLECTIONS OF DOCUMENTS</A
+></DT
+><DT
+>7. <A
+HREF="#GFDL_7"
+>AGGREGATION WITH INDEPENDENT WORKS</A
+></DT
+><DT
+>8. <A
+HREF="#GFDL_8"
+>TRANSLATION</A
+></DT
+><DT
+>9. <A
+HREF="#GFDL_9"
+>TERMINATION</A
+></DT
+><DT
+>10. <A
+HREF="#GFDL_10"
+>FUTURE REVISIONS OF THIS LICENSE</A
+></DT
+><DT
+><A
+HREF="#GFDL_HOWTO"
+>How to use this License for your documents</A
+></DT
+></DL
+></DD
+><DT
+><A
+HREF="#GLOSSARY"
+>Glossary</A
+></DT
+></DL
+></DIV
+><DIV
+CLASS="LOT"
+><DL
+CLASS="LOT"
+><DT
+><B
+>List of Examples</B
+></DT
+><DT
+>2-1. <A
+HREF="#AEN646"
+>Removing encrypt() for Windows NT installations</A
+></DT
+><DT
+>3-1. <A
+HREF="#AEN838"
+>Creating some Components</A
+></DT
+><DT
+>3-2. <A
+HREF="#AEN867"
+>Common Use of Versions</A
+></DT
+><DT
+>3-3. <A
+HREF="#AEN871"
+>A Different Use of Versions</A
+></DT
+><DT
+>3-4. <A
+HREF="#AEN899"
+>Using SortKey with Target Milestone</A
+></DT
+><DT
+>3-5. <A
+HREF="#AEN937"
+>When to Use Group Security</A
+></DT
+><DT
+>3-6. <A
+HREF="#AEN954"
+>Creating a New Group</A
+></DT
+><DT
+>4-1. <A
+HREF="#AEN1095"
+>Some Famous Software Versions</A
+></DT
+><DT
+>4-2. <A
+HREF="#AEN1105"
+>Mozilla Webtools Components</A
+></DT
+><DT
+>D-1. <A
+HREF="#AEN1963"
+>Using Setperl to set your perl path</A
+></DT
+><DT
+>1. <A
+HREF="#AEN2145"
+>A Sample Product</A
+></DT
+></DL
+></DIV
+>] &#62;
+
+<DIV
+CLASS="CHAPTER"
+><HR><H1
+><A
+NAME="ABOUT"
+>Chapter 1. About This Guide</A
+></H1
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="ABOUTTHISGUIDE"
+>1.1. Purpose and Scope of this Guide</A
+></H1
+><P
+>      This document was started on September 17, 2000
+      by Matthew P. Barnson after a great deal of procrastination updating the Bugzilla FAQ,
+      which I left untouched for nearly half a year.
+      After numerous complete rewrites and reformatting, it is the document you see today.
+    </P
+><P
+>      Despite the lack of updates, Bugzilla is simply the best piece of bug-tracking software
+      the world has ever seen.  This document is intended to be the comprehensive guide to 
+      the installation, administration, maintenance, and use of the Bugzilla bug-tracking system.
+    </P
+><P
+>      This release of the Bugzilla Guide is the <EM
+>2.11</EM
+> release.
+      It is so named that it may match the current version of Bugzilla.
+      The numbering tradition stems from that used for many free software projects,
+      in which <EM
+>even-numbered</EM
+> point releases (1.2, 1.14, etc.)
+      are considered "stable releases", intended for public consumption; on the other 
+      hand, <EM
+>odd-numbered</EM
+> point releases (1.3, 2.09, etc.)
+      are considered unstable <EM
+>development</EM
+> releases intended
+      for advanced users, systems administrators, developers, and those who enjoy
+      a lot of pain. 
+    </P
+><P
+>      Newer revisions of the Bugzilla Guide will follow the numbering conventions of
+      the main-tree Bugzilla releases, available at
+      <A
+HREF="http://www.mozilla.org/bugs/source.html"
+TARGET="_top"
+>Mozilla.org</A
+>, with
+      the exception that intermediate releases will have a minor revision number
+      following a period.  For instance, if the current version of Bugzilla is 4.2,
+      the current "stable" version of the Bugzilla guide, in, say, it's fifth revision,
+      would be numbered "4.2.5".  Got it?  Good.
+    </P
+><P
+>      I wrote this in response to the enormous demand for decent Bugzilla documentation.
+      I have incorporated instructions from the Bugzilla README, Frequently Asked Questions,
+      Database Schema Document, and various mailing lists to create it.
+      Chances are, there are glaring errors in this documentation; please contact
+      <TT
+CLASS="EMAIL"
+>&#60;<A
+HREF="mailto:barnboy@trilobyte.net"
+>barnboy@trilobyte.net</A
+>&#62;</TT
+> to correct them.
+    </P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H1
+CLASS="SECTION"
+><A
+NAME="COPYRIGHT"
+>1.2. Copyright Information</A
+></H1
+><A
+NAME="AEN57"
+></A
+><TABLE
+BORDER="0"
+WIDTH="100%"
+CELLSPACING="0"
+CELLPADDING="0"
+CLASS="BLOCKQUOTE"
+><TR
+><TD
+WIDTH="10%"
+VALIGN="TOP"
+>&nbsp;</TD
+><TD
+WIDTH="80%"
+VALIGN="TOP"
+><P
+>	Permission is granted to copy, distribute and/or modify this document under thei
+	terms of the GNU Free Documentation License, Version 1.1 or any later version published 
+	by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and 
+	with no Back-Cover Texts.  A copy of the license is included in the section entitled 
+	"GNU Free Documentation LIcense".
+      </P
+></TD
+><TD
+WIDTH="10%"
+VALIGN="TOP"
+>&nbsp;</TD
+></TR
+><TR
+><TD
+COLSPAN="2"
+ALIGN="RIGHT"
+VALIGN="TOP"
+>--<SPAN
+CLASS="ATTRIBUTION"
+>Copyright (c) 2000-2001 Matthew P. Barnson</SPAN
+></TD
+><TD
+WIDTH="10%"
+>&nbsp;</TD
+></TR
+></TABLE
+><P
+>      If you have any questions regarding this document, its' copyright, or publishing this
+      document in non-electronic form, please contact <TT
+CLASS="EMAIL"
+>&#60;<A
+HREF="mailto:barnboy@trilobyte.net"
+>barnboy@trilobyte.net</A
+>&#62;</TT
+>
+    </P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H1
+CLASS="SECTION"
+><A
+NAME="DISCLAIMER"
+>1.3. Disclaimer</A
+></H1
+><P
+>      No liability for the contents of this document can be accepted.
+      Use the concepts, examples, and other content at your own risk.
+      As this is a new edition of this document, there may be errors
+      and inaccuracies that may damage your system.  Use of this document
+      may cause your girlfriend to leave you, your cats to pee on your
+      furniture and clothing, your computer to cease functioning, your
+      boss to fire you, and global thermonuclear war.  Proceed with caution.
+    </P
+><P
+>      All copyrights are held by their respective owners, unless specifically
+      noted otherwise.  Use of a term in this document should not be regarded
+      as affecting the validity of any trademark or service mark.
+      In particular, I like to put down Microsoft(tm).  Live with it.
+    </P
+><P
+>      Naming of particular products or brands should not be seen as endorsements,
+      with the exception of the term "GNU/Linux".
+      Use GNU/Linux.  Love it.  Bathe with it.  It is life and happiness.
+      I endorse it wholeheartedly and encourage you to do the same.
+    </P
+><P
+>      You are strongly recommended to make a backup of your system before
+      installing Bugzilla and at regular intervals thereafter.  Heaven knows
+      it's saved my bacon time after time; if you implement any suggestion in 
+      this Guide, implement this one!
+    </P
+><P
+>      Bugzilla has not undergone a complete security review.
+      Security holes probably exist in the code.
+      Great care should be taken both in the installation and usage of this software.
+      Carefully consider the implications of installing other network services with Bugzilla.
+    </P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H1
+CLASS="SECTION"
+><A
+NAME="NEWVERSIONS"
+>1.4. New Versions</A
+></H1
+><P
+>      This is the initial release of the Bugzilla Guide.
+    </P
+><P
+>      This document can be found in the following places:
+    </P
+><P
+>      <P
+></P
+><UL
+><LI
+><P
+>	    <A
+HREF="http://www.trilobyte.net/barnsons/"
+TARGET="_top"
+>TriloBYTE</A
+>
+	  </P
+></LI
+><LI
+><P
+>	    <A
+HREF="http://www.mozilla.org/projects/bugzilla/"
+TARGET="_top"
+>Mozilla.org</A
+>
+	  </P
+></LI
+><LI
+><P
+>	    <A
+HREF="http://www.linuxdoc.org/"
+TARGET="_top"
+>The Linux Documentation Project</A
+>
+	  </P
+></LI
+></UL
+>
+    </P
+><P
+>      The latest version of this document can be checked out via CVS.
+      Please follow the instructions available at
+      <A
+HREF="http://www.mozilla.org/cvs.html"
+TARGET="_top"
+>the Mozilla CVS page</A
+>,
+      and check out the mozilla/webtools/bugzilla/docs/ branch.
+    </P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H1
+CLASS="SECTION"
+><A
+NAME="CREDITS"
+>1.5. Credits</A
+></H1
+><P
+>      The people listed below have made enormous contributions to the creation
+      of this Guide, through their dedicated hacking efforts,
+      numerous e-mail and IRC support sessions,
+      and overall excellent contribution to the Bugzilla community:
+    </P
+><P
+>      <A
+HREF="mailto://terry@mozilla.org"
+TARGET="_top"
+>Terry Weissman</A
+>
+      for initially converting Bugzilla from BugSplat!
+      and writing the README upon which this documentation is largely based.
+    </P
+><P
+>      <A
+HREF="mailto://tara@tequilarista.org"
+TARGET="_top"
+>Tara Hernandez</A
+> 
+      for keeping Bugzilla development going strong after Terry left Mozilla.org
+    </P
+><P
+>      <A
+HREF="mailto://dkl@redhat.com"
+TARGET="_top"
+>Dave Lawrence</A
+>
+      for providing insight into the key differences between Red Hat's 
+      customized Bugzilla, and being largely responsible for the
+      "Red Hat Bugzilla" appendix
+    </P
+><P
+>      <A
+HREF="mailto://endico@mozilla.org"
+TARGET="_top"
+>Dawn Endico</A
+>
+      for being a hacker extraordinaire and putting up with my incessant
+      questions and arguments on irc.mozilla.org in #mozwebtools
+    </P
+><P
+>      Last but not least, all the members of the
+      <A
+HREF="news://news.mozilla.org/netscape/public/mozilla/webtools"
+TARGET="_top"
+>	netscape.public.mozilla.webtools</A
+> newsgroup.  Without your
+      discussions, insight, suggestions, and patches, this could never have happened.
+    </P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H1
+CLASS="SECTION"
+><A
+NAME="CONTRIBUTORS"
+>1.6. Contributors</A
+></H1
+><P
+>      Thanks go to these people for significant contributions
+      to this documentation (in no particular order):
+    </P
+><P
+>      Zach Lipton (significant textual contributions),
+      Andrew Pearson,
+      Spencer Smith,
+      Eric Hanson,
+      Kevin Brannen,
+    </P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H1
+CLASS="SECTION"
+><A
+NAME="FEEDBACK"
+>1.7. Feedback</A
+></H1
+><P
+>      I welcome feedback on this document.  Without your submissions and input,
+      this Guide cannot continue to exist.  Please mail additions, comments, criticisms, etc.
+      to <TT
+CLASS="EMAIL"
+>&#60;<A
+HREF="mailto:barnboy@trilobyte.net"
+>barnboy@trilobyte.net</A
+>&#62;</TT
+>.  Please send flames to 
+      <TT
+CLASS="EMAIL"
+>&#60;<A
+HREF="mailto:devnull@localhost"
+>devnull@localhost</A
+>&#62;</TT
+>
+    </P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H1
+CLASS="SECTION"
+><A
+NAME="TRANSLATIONS"
+>1.8. Translations</A
+></H1
+><P
+>      The Bugzilla Guide needs translators!
+      Please volunteer your translation into the language of your choice.
+      If you will translate this Guide, please notify the members of the mozilla-webtools mailing list at
+      <TT
+CLASS="EMAIL"
+>&#60;<A
+HREF="mailto:mozilla-webtools@mozilla.org"
+>mozilla-webtools@mozilla.org</A
+>&#62;</TT
+>.  Since The Bugzilla Guide is also hosted on the
+      Linux Documentation Project, you would also do well to notify 
+    </P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H1
+CLASS="SECTION"
+><A
+NAME="CONVENTIONS"
+>1.9. Document Conventions</A
+></H1
+><P
+>    This document uses the following conventions
+  </P
+><DIV
+CLASS="INFORMALTABLE"
+><A
+NAME="AEN117"
+></A
+><P
+></P
+><TABLE
+BORDER="0"
+CLASS="CALSTABLE"
+><THEAD
+><TR
+><TH
+ALIGN="LEFT"
+VALIGN="TOP"
+>Descriptions</TH
+><TH
+ALIGN="LEFT"
+VALIGN="TOP"
+>Appearance</TH
+></TR
+></THEAD
+><TBODY
+><TR
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+>Warnings</TD
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+><DIV
+CLASS="CAUTION"
+><P
+></P
+><TABLE
+CLASS="CAUTION"
+BORDER="1"
+WIDTH="100%"
+><TR
+><TD
+ALIGN="CENTER"
+><B
+>Caution</B
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+><P
+>Warnings.</P
+></TD
+></TR
+></TABLE
+></DIV
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+>Hint</TD
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+><DIV
+CLASS="TIP"
+><BLOCKQUOTE
+CLASS="TIP"
+><P
+><B
+>Tip: </B
+>Hint.</P
+></BLOCKQUOTE
+></DIV
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+>Notes</TD
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>Note.</P
+></BLOCKQUOTE
+></DIV
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+>Information requiring special attention</TD
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+><DIV
+CLASS="WARNING"
+><P
+></P
+><TABLE
+CLASS="WARNING"
+BORDER="1"
+WIDTH="100%"
+><TR
+><TD
+ALIGN="CENTER"
+><B
+>Warning</B
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+><P
+>Warning.</P
+></TD
+></TR
+></TABLE
+></DIV
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+>File Names</TD
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+><TT
+CLASS="FILENAME"
+>file.extension</TT
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+>Directory Names</TD
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+><TT
+CLASS="FILENAME"
+>directory</TT
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+>Commands to be typed</TD
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+><B
+CLASS="COMMAND"
+>command</B
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+>Applications Names</TD
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+><SPAN
+CLASS="APPLICATION"
+>application</SPAN
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+><I
+CLASS="FOREIGNPHRASE"
+>Prompt</I
+> of users command under bash shell</TD
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+>bash$</TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+><I
+CLASS="FOREIGNPHRASE"
+>Prompt</I
+> of root users command under bash shell</TD
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+>bash#</TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+><I
+CLASS="FOREIGNPHRASE"
+>Prompt</I
+> of user command under tcsh shell</TD
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+>tcsh$</TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+>Environment Variables</TD
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+><TT
+CLASS="ENVAR"
+>VARIABLE</TT
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+>Emphasized word</TD
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+><EM
+>word</EM
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+>Code Example</TD
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+><TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%"
+><TR
+><TD
+><PRE
+CLASS="PROGRAMLISTING"
+><TT
+CLASS="SGMLTAG"
+>&#60;para&#62;</TT
+>Beginning and end of paragraph<TT
+CLASS="SGMLTAG"
+>&#60;/para&#62;</TT
+></PRE
+></TD
+></TR
+></TABLE
+></TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+></DIV
+></DIV
+></DIV
+><DIV
+CLASS="CHAPTER"
+><HR><H1
+><A
+NAME="INSTALLATION"
+>Chapter 2. Installing Bugzilla</A
+></H1
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="README.UNIX"
+>2.1. UNIX Installation</A
+></H1
+><DIV
+CLASS="SECTION"
+><H2
+CLASS="SECTION"
+><A
+NAME="AEN190"
+>2.1.1. ERRATA</A
+></H2
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	  If you are installing Bugzilla on S.u.S.e. Linux, or some other
+	  distributions with "paranoid" security options, it is possible
+	  that the checksetup.pl script may fail with the error:
+	  <SPAN
+CLASS="ERRORNAME"
+>cannot chdir(/var/spool/mqueue): Permission denied</SPAN
+>
+	  This is because your
+	  /var/spool/mqueue directory has a mode of "drwx------".  Type
+	  <B
+CLASS="COMMAND"
+>chmod 755 /var/spool/mqueue</B
+> as root to fix this problem.
+	</P
+></BLOCKQUOTE
+></DIV
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	  Release Notes for Bugzilla 2.12 are available at docs/rel_notes.txt
+	</P
+></BLOCKQUOTE
+></DIV
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	  The preferred documentation for Bugzilla is available in docs/, with
+	  a variety of document types available.  Please refer to these documents when 
+	  installing, configuring, and maintaining your Bugzilla installation.
+	</P
+></BLOCKQUOTE
+></DIV
+><DIV
+CLASS="WARNING"
+><P
+></P
+><TABLE
+CLASS="WARNING"
+BORDER="1"
+WIDTH="100%"
+><TR
+><TD
+ALIGN="CENTER"
+><B
+>Warning</B
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+><P
+>	  Bugzilla is not a package where you can just plop it in a directory,
+	  twiddle a few things, and you're off.  Installing Bugzilla assumes you
+	  know your variant of UNIX or Microsoft Windows well, are familiar with the
+	  command line, and are comfortable compiling and installing a plethora
+	  of third-party utilities.  To install Bugzilla on Win32 requires
+	  fair Perl proficiency, and if you use a webserver other than Apache you
+	  should be intimately familiar with the security mechanisms and CGI
+	  environment thereof.
+	</P
+></TD
+></TR
+></TABLE
+></DIV
+><DIV
+CLASS="WARNING"
+><P
+></P
+><TABLE
+CLASS="WARNING"
+BORDER="1"
+WIDTH="100%"
+><TR
+><TD
+ALIGN="CENTER"
+><B
+>Warning</B
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+><P
+>	  Bugzilla has not undergone a complete security review. Security holes
+	  may exist in the code.  Great care should be taken both in the installation
+	  and usage of this software.  Carefully consider the implications of
+	  installing other network services with Bugzilla.
+	</P
+></TD
+></TR
+></TABLE
+></DIV
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H2
+CLASS="SECTION"
+><A
+NAME="AEN204"
+>2.1.2. Step-by-step Install</A
+></H2
+><DIV
+CLASS="SECTION"
+><H3
+CLASS="SECTION"
+><A
+NAME="AEN206"
+>2.1.2.1. Introduction</A
+></H3
+><P
+>	  Installation of bugzilla is pretty straightforward, particularly if your
+	  machine already has MySQL and the MySQL-related perl packages installed.
+	  If those aren't installed yet, then that's the first order of business.  The
+	  other necessary ingredient is a web server set up to run cgi scripts.
+	  While using Apache for your webserver is not required, it is recommended.
+	</P
+><P
+>	  Bugzilla has been successfully installed under Solaris, Linux, and
+	  Win32. The peculiarities of installing on Win32 (Win98+/NT/2K) are not
+	  included in this section of the Guide; please check out the "Win32 Installation Instructions"
+	  for further advice on getting Bugzilla to work on Microsoft Windows.
+	</P
+><P
+>	  The Bugzilla Guide is contained in the "docs/" folder.  It is available
+	  in plain text (docs/txt), HTML (docs/html), or SGML source (docs/sgml).
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H3
+CLASS="SECTION"
+><A
+NAME="AEN211"
+>2.1.2.2. Installing the Prerequisites</A
+></H3
+><P
+>	  The software packages necessary for the proper running of bugzilla are:
+	  <P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>		MySQL database server and the mysql client (3.22.5 or greater)
+	      </P
+></LI
+><LI
+><P
+>		Perl (5.004 or greater)
+	      </P
+></LI
+><LI
+><P
+>		DBI Perl module
+	      </P
+></LI
+><LI
+><P
+>		Data::Dumper Perl module
+	      </P
+></LI
+><LI
+><P
+>		DBD::mySQL
+	      </P
+></LI
+><LI
+><P
+>		TimeDate Perl module collection
+	      </P
+></LI
+><LI
+><P
+>		GD perl module (1.8.3) (optional, for bug charting)
+	      </P
+></LI
+><LI
+><P
+>		Chart::Base Perl module (0.99c) (optional, for bug charting)
+	      </P
+></LI
+><LI
+><P
+>		DB_File Perl module (optional, for bug charting)
+	      </P
+></LI
+><LI
+><P
+>		The web server of your choice.  Apache is recommended.
+	      </P
+></LI
+><LI
+><P
+>		MIME::Parser Perl module (optional, for contrib/bug_email.pl interface)
+	      </P
+></LI
+></OL
+>
+	  <DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	      You must run Bugzilla on a filesystem that supports file locking via
+	      flock().  This is necessary for Bugzilla to operate safely with multiple
+	      instances.
+	    </P
+></BLOCKQUOTE
+></DIV
+>
+	  <DIV
+CLASS="WARNING"
+><P
+></P
+><TABLE
+CLASS="WARNING"
+BORDER="1"
+WIDTH="100%"
+><TR
+><TD
+ALIGN="CENTER"
+><B
+>Warning</B
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+><P
+>	      It is a good idea, while installing Bugzilla, to ensure it is not
+	      <EM
+>accessible</EM
+> by other machines on the Internet.
+	      Your machine may be vulnerable to attacks
+	      while you are installing. In other words, ensure there is some kind of firewall between you
+	      and the rest of the Internet.  Many installation steps require an active Internet connection
+	      to complete, but you must take care to ensure that at no point is your machine vulnerable
+	      to an attack.
+	    </P
+></TD
+></TR
+></TABLE
+></DIV
+>
+
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H3
+CLASS="SECTION"
+><A
+NAME="AEN242"
+>2.1.2.3. Installing MySQL Database</A
+></H3
+><P
+>	  Visit MySQL homepage at http://www.mysql.org/ and grab the latest stable
+	  release of the server.  Both binaries and source are available and which
+	  you get shouldn't matter.  Be aware that many of the binary versions
+	  of MySQL store their data files in /var which on many installations
+	  (particularly common with linux installations) is part of a smaller
+	  root partition.  If you decide to build from sources you can easily set
+	  the dataDir as an option to configure.
+	</P
+><P
+>	  If you've installed from source or non-package (RPM, deb, etc.) binaries
+	  you'll want to make sure to add mysqld to your init scripts so the server
+	  daemon will come back up whenever your machine reboots.
+	  You also may want to edit those init scripts, to make sure that
+	  mysqld will accept large packets.  By default, mysqld is set up to only
+	  accept packets up to 64K long.  This limits the size of attachments you
+	  may put on bugs.  If you add something like "-O max_allowed_packet=1M"
+	  to the command that starts mysqld (or safe_mysqld), then you will be
+	  able to have attachments up to about 1 megabyte.
+	</P
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	    If you plan on running Bugzilla and MySQL on the same machine,
+	    consider using the "--skip-networking" option in the init script.
+	    This enhances security by preventing network access to MySQL.
+	  </P
+></BLOCKQUOTE
+></DIV
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H3
+CLASS="SECTION"
+><A
+NAME="AEN248"
+>2.1.2.4. Perl (5.004 or greater)</A
+></H3
+><P
+>	  Any machine that doesn't have perl on it is a sad machine indeed.  Perl
+	  for *nix systems can be gotten in source form from http://www.perl.com.
+	</P
+><P
+>	  Perl is now a far cry from the the single compiler/interpreter binary it
+	  once was.  It now includes a great many required modules and quite a
+	  few other support files.  If you're not up to or not inclined to build
+	  perl from source, you'll want to install it on your machine using some
+	  sort of packaging system (be it RPM, deb, or what have you) to ensure
+	  a sane install.  In the subsequent sections you'll be installing quite
+	  a few perl modules; this can be quite ornery if your perl installation
+	  isn't up to snuff.
+	</P
+><DIV
+CLASS="TIP"
+><BLOCKQUOTE
+CLASS="TIP"
+><P
+><B
+>Tip: </B
+>	    You can skip the following Perl module installation
+	    steps by installing "Bundle::Bugzilla" from CPAN, which includes them.
+	    All Perl module installation steps require you have an active Internet
+	    connection.
+	  </P
+><P
+>	    <TT
+CLASS="COMPUTEROUTPUT"
+>	      <TT
+CLASS="PROMPT"
+>bash#</TT
+>
+	      <B
+CLASS="COMMAND"
+>perl -MCPAN -e 'install "Bundle::Bugzilla"'</B
+>
+	    </TT
+>
+	  </P
+><P
+>	    Bundle::Bugzilla doesn't include GD, Chart::Base, or MIME::Parser,
+	    which are not essential to a basic Bugzilla install.  If installing
+	    this bundle fails, you should install each module individually to
+	    isolate the problem.
+	  </P
+></BLOCKQUOTE
+></DIV
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H3
+CLASS="SECTION"
+><A
+NAME="AEN259"
+>2.1.2.5. DBI Perl Module</A
+></H3
+><P
+>	  The DBI module is a generic Perl module used by other database related
+	  Perl modules.  For our purposes it's required by the MySQL-related
+	  modules.  As long as your Perl installation was done correctly the
+	  DBI module should be a breeze.  It's a mixed Perl/C module, but Perl's
+	  MakeMaker system simplifies the C compilation greatly.
+	</P
+><P
+>	  Like almost all Perl modules DBI can be found on the Comprehensive Perl
+	  Archive Network (CPAN) at http://www.cpan.org.  The CPAN servers have a
+	  real tendency to bog down, so please use mirrors.  The current location
+	  at the time of this writing (02/17/99) can be found in Appendix A.
+	</P
+><P
+>	  Quality, general Perl module installation instructions can be found on
+	  the CPAN website, but the easy thing to do is to just use the CPAN shell
+	  which does all the hard work for you.
+	</P
+><P
+>	  To use the CPAN shell to install DBI:
+	  <DIV
+CLASS="INFORMALEXAMPLE"
+><A
+NAME="AEN265"
+></A
+><P
+></P
+><P
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>bash#</TT
+>
+		<B
+CLASS="COMMAND"
+>perl -MCPAN -e 'install "DBI"'</B
+>
+	      </TT
+>
+	      <DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>Replace "DBI" with the name of whichever module you wish
+		to install, such as Data::Dumper, TimeDate, GD, etc.</P
+></BLOCKQUOTE
+></DIV
+>
+	    </P
+><P
+></P
+></DIV
+>
+	  To do it the hard way:
+	  <DIV
+CLASS="INFORMALEXAMPLE"
+><A
+NAME="AEN272"
+></A
+><P
+></P
+><P
+>	      Untar the module tarball -- it should create its own directory
+	    </P
+><P
+>	      CD to the directory just created, and enter the following commands:
+	      <P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>		    <TT
+CLASS="COMPUTEROUTPUT"
+>		      <TT
+CLASS="PROMPT"
+>bash#</TT
+>
+		      <B
+CLASS="COMMAND"
+>perl Makefile.PL</B
+>
+		    </TT
+>
+		  </P
+></LI
+><LI
+><P
+>		    <TT
+CLASS="COMPUTEROUTPUT"
+>		      <TT
+CLASS="PROMPT"
+>bash#</TT
+>
+		      <B
+CLASS="COMMAND"
+>make</B
+>
+		    </TT
+>
+		  </P
+></LI
+><LI
+><P
+>		    <TT
+CLASS="COMPUTEROUTPUT"
+>		      <TT
+CLASS="PROMPT"
+>bash#</TT
+>
+		      <B
+CLASS="COMMAND"
+>make test</B
+>
+		    </TT
+>
+		  </P
+></LI
+><LI
+><P
+>		    <TT
+CLASS="COMPUTEROUTPUT"
+>		      <TT
+CLASS="PROMPT"
+>bash#</TT
+>
+		      <B
+CLASS="COMMAND"
+>make install</B
+>
+		    </TT
+>
+		  </P
+></LI
+></OL
+>
+	      If everything went ok that should be all it takes.  For the vast
+	      majority of perl modules this is all that's required.
+	    </P
+><P
+></P
+></DIV
+>
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H3
+CLASS="SECTION"
+><A
+NAME="AEN296"
+>2.1.2.6. Data::Dumper Perl Module</A
+></H3
+><P
+>	  The Data::Dumper module provides data structure persistence for Perl
+	  (similar to Java's serialization).  It comes with later sub-releases of
+	  Perl 5.004, but a re-installation just to be sure it's available won't
+	  hurt anything.
+	</P
+><P
+>	  Data::Dumper is used by the MySQL related Perl modules.  It can be
+	  found on CPAN (link in Appendix A) and can be installed by following
+	  the same four step make sequence used for the DBI module.
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H3
+CLASS="SECTION"
+><A
+NAME="AEN300"
+>2.1.2.7. MySQL related Perl Module Collection</A
+></H3
+><P
+>	  The Perl/MySQL interface requires a few mutually-dependent perl
+	  modules.  These modules are grouped together into the the
+	  Msql-Mysql-modules package.  This package can be found at CPAN.
+	  After the archive file has been downloaded it should
+	  be untarred.
+	</P
+><P
+>	  The MySQL modules are all built using one make file which is generated
+	  by running:
+	  <TT
+CLASS="PROMPT"
+>bash#</TT
+>
+	  <B
+CLASS="COMMAND"
+>perl Makefile.pl</B
+>
+	</P
+><P
+>	  The MakeMaker process will ask you a few questions about the desired
+	  compilation target and your MySQL installation.  For many of the questions
+	  the provided default will be adequate.
+	</P
+><P
+>	  When asked if your desired target is the MySQL or mSQL packages
+	  selected the MySQL related ones.  Later you will be asked if you wish
+	  to provide backwards compatibility with the older MySQL packages; you
+	  must answer YES to this question.  The default will be no, and if you
+	  select it things won't work later.
+	</P
+><P
+>	  A host of 'localhost' should be fine and a testing user of 'test' and
+	  a null password should find itself with sufficient access to run tests
+	  on the 'test' database which MySQL created upon installation.  If 'make
+	  test' and 'make install' go through without errors you should be ready
+	  to go as far as database connectivity is concerned.
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H3
+CLASS="SECTION"
+><A
+NAME="AEN309"
+>2.1.2.8. TimeDate Perl Module Collection</A
+></H3
+><P
+>	  Many of the more common date/time/calendar related Perl modules have
+	  been grouped into a bundle similar to the MySQL modules bundle. This
+	  bundle is stored on the CPAN under the name TimeDate.  A (hopefully
+	  current) link can be found in Appendix A.  The component module we're
+	  most interested in is the Date::Format module, but installing all of them
+	  is probably a good idea anyway.  The standard Perl module installation
+	  instructions should work perfectly for this simple package.
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H3
+CLASS="SECTION"
+><A
+NAME="AEN312"
+>2.1.2.9. GD Perl Module (1.8.3)</A
+></H3
+><P
+>	  The GD library was written by Thomas Boutell a long while ago to
+	  programatically generate images in C.  Since then it's become almost a
+	  defacto standard for programatic image construction.  The Perl bindings
+	  to it found in the GD library are used on a million web pages to generate
+	  graphs on the fly.  That's what bugzilla will be using it for so you'd
+	  better install it if you want any of the graphing to work.
+	</P
+><P
+>	  Actually bugzilla uses the Graph module which relies on GD itself,
+	  but isn't that always the way with OOP.  At any rate, you can find the
+	  GD library on CPAN (link in Appendix "Required Software").  
+	</P
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	    The Perl GD library requires some other libraries that may or may not be
+	    installed on your system, including "libpng" and "libgd".  The full requirements
+	    are listed in the Perl GD library README.  Just realize that if compiling GD fails,
+	    it's probably because you're missing a required library.
+	  </P
+></BLOCKQUOTE
+></DIV
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H3
+CLASS="SECTION"
+><A
+NAME="AEN318"
+>2.1.2.10. Chart::Base Perl Module (0.99c)</A
+></H3
+><P
+>	  The Chart module provides bugzilla with on-the-fly charting
+	  abilities.  It can be installed in the usual fashion after it has been
+	  fetched from CPAN where it is found as the Chart-x.x... tarball in a
+	  directory to be listed in Appendix "Required Software".  Note that as with the GD perl
+	  module, only the specific versions listed above (or newer) will work. Earlier
+	  versions used GIF's, which are no longer supported by the latest
+	  versions of GD.
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H3
+CLASS="SECTION"
+><A
+NAME="AEN321"
+>2.1.2.11. DB_File Perl Module</A
+></H3
+><P
+>	  DB_File is a module which allows Perl programs to make use of the facilities provided by 
+	  Berkeley DB version 1.x. This module is required by collectstats.pl which is used for 
+	  bug charting. If you plan to make use of bug charting, you must install this module.
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H3
+CLASS="SECTION"
+><A
+NAME="AEN324"
+>2.1.2.12. HTTP Server</A
+></H3
+><P
+>	  You have a freedom of choice here - Apache, Netscape or any other
+	  server on UNIX would do.  You can easily run the web server on a different
+	  machine than MySQL, but need to adjust the MySQL "bugs" user permissions
+	  accordingly.
+	</P
+><P
+>	  You'll want to make sure that your web server will run any file
+	  with the .cgi extension as a cgi and not just display it.  If you're using
+	  apache that means uncommenting the following line in the srm.conf file:
+	  <TT
+CLASS="COMPUTEROUTPUT"
+>AddHandler cgi-script .cgi</TT
+>
+	</P
+><P
+>	  With apache you'll also want to make sure that within the access.conf
+	  file the line:
+	  <TT
+CLASS="COMPUTEROUTPUT"
+>	    Options ExecCGI
+	  </TT
+>
+	  is in the stanza that covers the directories you intend to put the bugzilla
+	  .html and .cgi files into.
+	</P
+><P
+>	  If you are using a newer version of Apache, both of the above lines will be
+	  (or will need to be) in the httpd.conf file, rather than srm.conf or
+	  access.conf.
+	</P
+><DIV
+CLASS="WARNING"
+><P
+></P
+><TABLE
+CLASS="WARNING"
+BORDER="1"
+WIDTH="100%"
+><TR
+><TD
+ALIGN="CENTER"
+><B
+>Warning</B
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+><P
+>	    There are two critical directories and a file that should not be a served by
+	    the HTTP server. These are the 'data' and 'shadow' directories and the
+	    'localconfig' file. You should configure your HTTP server to not serve
+	    content from these files. Failure to do so will expose critical passwords
+	    and other data. Please see your HTTP server configuration manual on how
+	    to do this. If you use quips (at the top of the buglist pages) you will want
+	    the 'data/comments' file to still be served. This file contains those quips.
+	  </P
+></TD
+></TR
+></TABLE
+></DIV
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H3
+CLASS="SECTION"
+><A
+NAME="AEN334"
+>2.1.2.13. Installing the Bugzilla Files</A
+></H3
+><P
+>	  You should untar the Bugzilla files into a directory that you're
+	  willing to make writable by the default web server user (probably
+	  'nobody').  You may decide to put the files off of the main web space
+	  for your web server or perhaps off of /usr/local with a symbolic link
+	  in the web space that points to the bugzilla directory.  At any rate,
+	  just dump all the files in the same place (optionally omitting the CVS
+	  directories if they were accidentally tarred up with the rest of Bugzilla)
+	  and make sure you can access the files in that directory through your
+	  web server.
+	</P
+><DIV
+CLASS="TIP"
+><BLOCKQUOTE
+CLASS="TIP"
+><P
+><B
+>Tip: </B
+>	    HINT:  If you symlink the bugzilla directory into your Apache's
+	    HTML heirarchy, you may receive "Forbidden" errors unless you
+	    add the "FollowSymLinks" directive to the &#60;Directory&#62; entry
+	    for the HTML root.
+	  </P
+></BLOCKQUOTE
+></DIV
+><P
+>	  Once all the files are in a web accessible directory, make that
+	  directory writable by your webserver's user (which may require just
+	  making it world writable).  This is a temporary step until you run
+	  the post-install "checksetup.pl" script, which locks down your
+	  installation.
+	</P
+><P
+>	  Lastly, you'll need to set up a symbolic link from /usr/bonsaitools/bin
+	  to the correct location of your perl executable (probably /usr/bin/perl).
+	  Otherwise you must hack all the .cgi files to change where they look
+	  for perl.  To make future upgrades easier, you should use the symlink
+	  approach.
+	  <DIV
+CLASS="TIP"
+><BLOCKQUOTE
+CLASS="TIP"
+><P
+><B
+>Tip: </B
+>	      If you don't have root access to set this symlink up, check out the
+	      "setperl.csh" utility, listed in the Patches section of this
+	      Guide.  It will change the path to perl in all your Bugzilla files for
+	      you.
+	    </P
+></BLOCKQUOTE
+></DIV
+>
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H3
+CLASS="SECTION"
+><A
+NAME="AEN343"
+>2.1.2.14. Setting Up the MySQL Database</A
+></H3
+><P
+>	  After you've gotten all the software installed and working you're ready
+	  to start preparing the database for its life as a the back end to a high
+	  quality bug tracker.
+	</P
+><P
+>	  First, you'll want to fix MySQL permissions to allow access from
+	  Bugzilla.  For the purpose of this Installation section, the Bugzilla username
+	  will be "bugs", and will have minimal permissions.  Bugzilla has
+	  not undergone a thorough security audit.  It may be possible for
+	  a system cracker to somehow trick Bugzilla into executing a command
+	  such as "; DROP DATABASE mysql".
+	</P
+><P
+>	  That would be bad.
+	</P
+><P
+>	  Give the MySQL root user a password.  MySQL passwords are
+	  limited to 16 characters.
+	  <P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>bash#</TT
+>
+		<B
+CLASS="COMMAND"
+>mysql -u root mysql</B
+>
+	      </TT
+>
+	    </TD
+></TR
+><TR
+><TD
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>mysql&#62;</TT
+>
+		<B
+CLASS="COMMAND"
+>		  UPDATE user SET Password=PASSWORD ('new_password')
+		  WHERE user='root';
+		</B
+>
+	      </TT
+>
+	    </TD
+></TR
+><TR
+><TD
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>mysql&#62;</TT
+>
+		<B
+CLASS="COMMAND"
+>FLUSH PRIVILEGES;</B
+>
+	      </TT
+>
+	    </TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+>
+	  From this point on, if you need to access MySQL as the
+	  MySQL root user, you will need to use "mysql -u root -p" and
+	  enter your new_password.  Remember that MySQL user names have
+	  nothing to do with Unix user names (login names).	  
+	</P
+><P
+>	  Next, we create the "bugs" user, and grant sufficient
+	  permissions for checksetup.pl, which we'll use later, to work
+	  its magic.  This also restricts the "bugs" user to operations
+	  within a database called "bugs", and only allows the account
+	  to connect from "localhost".  Modify it to reflect your setup
+	  if you will be connecting from another machine or as a different
+	  user.
+	</P
+><P
+>	  Remember to set bugs_password to some unique password.
+	  <P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>mysql&#62;</TT
+>
+		<B
+CLASS="COMMAND"
+>GRANT SELECT,INSERT,UPDATE,DELETE,INDEX,
+		  ALTER,CREATE,DROP,REFERENCES 
+		  ON bugs.* TO bugs@localhost
+		  IDENTIFIED BY 'bugs_password';</B
+>
+	      </TT
+>
+	    </TD
+></TR
+><TR
+><TD
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>		  mysql&#62;
+		</TT
+>
+		<B
+CLASS="COMMAND"
+>		  FLUSH PRIVILEGES;
+		</B
+>
+	      </TT
+>
+	    </TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+>
+	</P
+><P
+>	  Next, run the magic checksetup.pl script.  (Many thanks to Holger
+	  Schurig &#60;holgerschurig@nikocity.de&#62; for writing this script!)
+	  It will make sure Bugzilla files and directories have reasonable
+	  permissions, set up the "data" directory, and create all the MySQL
+	  tables.
+	  <P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>bash#</TT
+>
+		<B
+CLASS="COMMAND"
+>./checksetup.pl</B
+>
+	      </TT
+>
+	    </TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+>
+	  The first time you run it, it will create a file called "localconfig".
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H3
+CLASS="SECTION"
+><A
+NAME="AEN379"
+>2.1.2.15. Tweaking "localconfig"</A
+></H3
+><P
+>	  This file contains a variety of settings you may need to tweak including
+	  how Bugzilla should connect to the MySQL database.
+	</P
+><P
+>	  The connection settings include:
+	  <P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>		server's host: just use "localhost" if the MySQL server is
+                local
+	      </P
+></LI
+><LI
+><P
+>		database name: "bugs" if you're following these directions
+	      </P
+></LI
+><LI
+><P
+>		MySQL username: "bugs" if you're following these directions
+	      </P
+></LI
+><LI
+><P
+>		Password for the "bugs" MySQL account above
+	      </P
+></LI
+></OL
+>
+	</P
+><P
+>	  Once you are happy with the settings, re-run checksetup.pl.  On this
+	  second run, it will create the database and an administrator account
+	  for which you will be prompted to provide information.
+	</P
+><P
+>	  When logged into an administrator account once Bugzilla is running,
+	  if you go to the query page (off of the bugzilla main menu), you'll
+	  find an 'edit parameters' option that is filled with editable treats.
+	</P
+><P
+>	  Should everything work, you should have a nearly empty copy of the bug
+	  tracking setup.
+	</P
+><P
+>	  The second time around, checksetup.pl will stall if it is on a
+	  filesystem that does not fully support file locking via flock(), such as
+	  NFS mounts.  This support is required for Bugzilla to operate safely with
+	  multiple instances. If flock() is not fully supported, it will stall at:
+	  <SPAN
+CLASS="ERRORCODE"
+>Now regenerating the shadow database for all bugs.</SPAN
+>
+	  <DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	      The second time you run checksetup.pl, it is recommended you be the same
+	      user as your web server runs under, and that you be sure you have set the
+	      "webservergroup" parameter in localconfig to match the web server's group
+	      name, if any.  Under some systems, otherwise, checksetup.pl will goof up
+	      your file permissions and make them unreadable to your web server.
+	    </P
+></BLOCKQUOTE
+></DIV
+>
+	</P
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	    The checksetup.pl script is designed so that you can run it at any time
+	    without causing harm.  You should run it after any upgrade to Bugzilla.
+	  </P
+></BLOCKQUOTE
+></DIV
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H3
+CLASS="SECTION"
+><A
+NAME="AEN401"
+>2.1.2.16. Setting Up Maintainers Manuall (Optional)</A
+></H3
+><P
+>	  If you want to add someone else to every group by hand, you can do it
+	  by typing the appropriate MySQL commands.  Run '<TT
+CLASS="COMPUTEROUTPUT"
+>	    mysql -u root -p bugs</TT
+>'
+	  (you may need different parameters, depending on your security settings
+	  according to section 3, above).  Then:
+	  <P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>mysql&#62;</TT
+>
+		<B
+CLASS="COMMAND"
+>update profiles set groupset=0x7fffffffffffffff
+               where login_name = 'XXX';</B
+>
+	      </TT
+>
+	    </TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+>
+	  replacing XXX with the Bugzilla email address.
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H3
+CLASS="SECTION"
+><A
+NAME="AEN410"
+>2.1.2.17. The Whining Cron (Optional)</A
+></H3
+><P
+>	  By now you've got a fully functional bugzilla, but what good are bugs
+	  if they're not annoying?  To help make those bugs more annoying you can
+	  set up bugzilla's automatic whining system.  This can be done by adding
+	  the following command as a daily crontab entry (for help on that see that
+	  crontab man page):
+	  <P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<B
+CLASS="COMMAND"
+>cd &#60;your-bugzilla-directory&#62; ; ./whineatnews.pl</B
+>
+	      </TT
+>
+	    </TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+>
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H3
+CLASS="SECTION"
+><A
+NAME="AEN417"
+>2.1.2.18. Bug Graphs (Optional)</A
+></H3
+><P
+>	  As long as you installed the GD and Graph::Base Perl modules you might
+	  as well turn on the nifty bugzilla bug reporting graphs.
+	</P
+><P
+>	  Add a cron entry like this to run collectstats daily at 5 after midnight:
+	  <P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>bash#</TT
+>
+		<B
+CLASS="COMMAND"
+>crontab -e</B
+>
+	      </TT
+>
+	    </TD
+></TR
+><TR
+><TD
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		 5 0 * * * cd &#60;your-bugzilla-directory&#62; ; ./collectstats.pl
+	      </TT
+>
+	    </TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+>
+	</P
+><P
+>	  After two days have passed you'll be able to view bug graphs from the
+	  Bug Reports page. 
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H3
+CLASS="SECTION"
+><A
+NAME="AEN429"
+>2.1.2.19. Securing MySQL</A
+></H3
+><P
+>	  If you followed the README for setting up your "bugs" and "root" user in
+	  MySQL, much of this should not apply to you.  If you are upgrading
+	  an existing installation of Bugzilla, you should pay close attention
+	  to this section.
+	</P
+><P
+>	  Most MySQL installs have "interesting" default security parameters:
+	  <P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+>mysqld defaults to running as root</TD
+></TR
+><TR
+><TD
+>it defaults to allowing external network connections</TD
+></TR
+><TR
+><TD
+>it has a known port number, and is easy to detect</TD
+></TR
+><TR
+><TD
+>it defaults to no passwords whatsoever</TD
+></TR
+><TR
+><TD
+>it defaults to allowing "File_Priv"</TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+>
+	</P
+><P
+>	  This means anyone from anywhere on the internet can not only drop the
+	  database with one SQL command, and they can write as root to the system.
+	</P
+><P
+>	  To see your permissions do:
+	  <P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>bash#</TT
+>
+		<B
+CLASS="COMMAND"
+>mysql -u root -p</B
+>
+	      </TT
+>
+	    </TD
+></TR
+><TR
+><TD
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>mysql&#62;</TT
+>
+		<B
+CLASS="COMMAND"
+>use mysql;</B
+>
+	      </TT
+>
+	    </TD
+></TR
+><TR
+><TD
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>mysql&#62;</TT
+>
+		<B
+CLASS="COMMAND"
+>show tables;</B
+>
+	      </TT
+>
+	    </TD
+></TR
+><TR
+><TD
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>mysql&#62;</TT
+>
+		<B
+CLASS="COMMAND"
+>select * from user;</B
+>
+	      </TT
+>
+	    </TD
+></TR
+><TR
+><TD
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>mysql&#62;</TT
+>
+		<B
+CLASS="COMMAND"
+>select * from db;</B
+>
+	      </TT
+>
+	    </TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+>
+	</P
+><P
+>	  To fix the gaping holes:
+	  <P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+>DELETE FROM user WHERE User='';</TD
+></TR
+><TR
+><TD
+>UPDATE user SET Password=PASSWORD('new_password') WHERE user='root';</TD
+></TR
+><TR
+><TD
+> FLUSH PRIVILEGES;</TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+>
+	</P
+><P
+>	  If you're not running "mit-pthreads" you can use:
+	  <P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+>GRANT USAGE ON *.* TO bugs@localhost;</TD
+></TR
+><TR
+><TD
+>GRANT ALL ON bugs.* TO bugs@localhost;</TD
+></TR
+><TR
+><TD
+>REVOKE DROP ON bugs.* FROM bugs@localhost;</TD
+></TR
+><TR
+><TD
+>FLUSH PRIVILEGES;</TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+>
+	</P
+><P
+>	  With "mit-pthreads" you'll need to modify the "globals.pl" Mysql-&#62;Connect
+	  line to specify a specific host name instead of "localhost", and accept
+	  external connections:
+	  <P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+>GRANT USAGE ON *.* TO bugs@bounce.hop.com;</TD
+></TR
+><TR
+><TD
+>GRANT ALL ON bugs.* TO bugs@bounce.hop.com;</TD
+></TR
+><TR
+><TD
+>REVOKE DROP ON bugs.* FROM bugs@bounce.hop.com;</TD
+></TR
+><TR
+><TD
+>FLUSH PRIVILEGES;</TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+>
+	</P
+><P
+>	  Consider also:
+	  <P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>		Turning off external networking with "--skip-networking",
+		unless you have "mit-pthreads", in which case you can't.
+		Without networking, MySQL connects with a Unix domain socket.
+	      </P
+></LI
+><LI
+><P
+>		using the --user= option to mysqld to run it as an unprivileged
+		user.
+	      </P
+></LI
+><LI
+><P
+>		starting MySQL in a chroot jail
+	      </P
+></LI
+><LI
+><P
+>		running the httpd in a "chrooted" jail
+	      </P
+></LI
+><LI
+><P
+>		making sure the MySQL passwords are different from the OS
+		passwords (MySQL "root" has nothing to do with system "root").
+	      </P
+></LI
+><LI
+><P
+>		running MySQL on a separate untrusted machine
+	      </P
+></LI
+><LI
+><P
+>		making backups ;-)
+	      </P
+></LI
+></OL
+>
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H3
+CLASS="SECTION"
+><A
+NAME="AEN495"
+>2.1.2.20. Installation General Notes</A
+></H3
+><DIV
+CLASS="SECTION"
+><H4
+CLASS="SECTION"
+><A
+NAME="AEN497"
+>2.1.2.20.1. Modifying Your Running System</A
+></H4
+><P
+>	    Bugzilla optimizes database lookups by storing all relatively static
+	    information in the versioncache file, located in the data/ subdirectory
+	    under your installation directory (we said before it needs to be writable,
+	    right?!)
+	  </P
+><P
+>	    If you make a change to the structural data in your database (the
+	    versions table for example), or to the "constants" encoded in
+	    defparams.pl, you will need to remove the cached content from the data
+	    directory (by doing a "rm data/versioncache"), or your changes won't show
+	    up!
+	  </P
+><P
+>	    That file gets automatically regenerated whenever it's more than an
+	    hour old, so Bugzilla will eventually notice your changes by itself, but
+	    generally you want it to notice right away, so that you can test things.
+	  </P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H4
+CLASS="SECTION"
+><A
+NAME="AEN502"
+>2.1.2.20.2. Upgrading From Previous Versions</A
+></H4
+><P
+>	    The developers of Bugzilla are constantly adding new tables, columns and
+	    fields.  You'll get SQL errors if you just update the code.  The strategy
+	    to update is to simply always run the checksetup.pl script whenever
+	    you upgrade your installation of Bugzilla.  If you want to see what has
+	    changed, you can read the comments in that file, starting from the end.
+	  </P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H4
+CLASS="SECTION"
+><A
+NAME="AEN505"
+>2.1.2.20.3. UNIX Installation Instructions History</A
+></H4
+><P
+>	    This document was originally adapted from the Bonsai installation
+	    instructions by Terry Weissman &#60;terry@mozilla.org&#62;.
+	  </P
+><P
+>	    The February 25, 1999 re-write of this page was done by Ry4an Brase
+	    &#60;ry4an@ry4an.org&#62;, with some edits by Terry Weissman, Bryce Nesbitt,
+	    Martin Pool, &#38; Dan Mosedale (But don't send bug reports to them!
+	    Report them using bugzilla, at http://bugzilla.mozilla.org/enter_bug.cgi ,
+	    project Webtools, component Bugzilla).
+	  </P
+><P
+>	    This document was heavily modified again Wednesday, March 07 2001 to
+	    reflect changes for Bugzilla 2.12 release by Matthew P. Barnson.  The
+	    securing MySQL section should be changed to become standard procedure
+	    for Bugzilla installations.
+	  </P
+><P
+>	    Finally, the README in its entirety was marked up in SGML and included into
+	    the Guide on April 24, 2001.
+	  </P
+><P
+>	    Comments from people using this Guide for the first time are particularly welcome.
+	  </P
+></DIV
+></DIV
+></DIV
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H1
+CLASS="SECTION"
+><A
+NAME="README.WINDOWS"
+>2.2. Win32 (Win98+/NT/2K) Installation</A
+></H1
+><P
+>      These directions have <EM
+>not</EM
+> been extensively tested.
+      We need testers!  Please try these out and post any changes to the
+      newsgroup.
+    </P
+><DIV
+CLASS="SECTION"
+><HR><H2
+CLASS="SECTION"
+><A
+NAME="NTVERIFIED"
+>2.2.1. Win32 Installation: Step-by-step</A
+></H2
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	  You should be familiar with, and cross-reference, the UNIX README
+	  while performing your Win32 installation.  Unfortunately, Win32
+	  directions are not yet as detailed as those for UNIX.
+	</P
+><P
+>	  The <EM
+>most critical</EM
+> difference for Win32 users is
+	  the lack of support for a crypt() function in MySQL for Windows.  It does not
+	  have it!  All ENCRYPT statements must be modified.
+	</P
+></BLOCKQUOTE
+></DIV
+><DIV
+CLASS="PROCEDURE"
+><OL
+TYPE="1"
+><LI
+><P
+>	    Install <A
+HREF="http://www.apache.org/"
+TARGET="_top"
+>Apache Web Server</A
+>
+	    for Windows.
+	  </P
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	      You may also use Internet Information Server or Personal Web
+	      Server for this purpose.  However, setup is slightly more
+	      difficult.  If ActivePerl doesn't seem to handle your file
+	      associations correctly (for .cgi and .pl files), please
+	      consult the FAQ, in the "Win32" section.
+	    </P
+><P
+>	      If you are going to use IIS, if on Windows NT you must be updated
+	      to at least Service Pack 4.
+	    </P
+></BLOCKQUOTE
+></DIV
+></LI
+><LI
+><P
+>	    Install <A
+HREF="http://www.activestate.com/"
+TARGET="_top"
+>ActivePerl</A
+>
+	  </P
+><P
+>	    Please also check the following links to fully understand the status
+	    of ActivePerl on Win32:
+	    <A
+HREF="http://language.perl.com/newdocs/pod/perlport.html"
+TARGET="_top"
+>	      Perl Porting</A
+>, and
+	    <A
+HREF="http://ftp.univie.ac.at/packages/perl/ports/nt/FAQ/perlwin32faq5.html"
+TARGET="_top"
+>	      Hixie Click Here</A
+>
+	  </P
+></LI
+><LI
+><P
+>	    Use ppm from your perl\bin directory to install the following packs: DBI,
+	    DBD-Mysql, TimeDate, Chart, Date-Calc, Date-Manip, and GD.  You may need
+	    to extract them from .zip format using Winzip or other unzip program first.
+	    These additional ppm modules can be downloaded from ActiveState.
+	  </P
+><P
+>	    The syntax for ppm is:
+	    <TT
+CLASS="COMPUTEROUTPUT"
+>	      <TT
+CLASS="PROMPT"
+>C:&#62; </TT
+><B
+CLASS="COMMAND"
+>ppm install &#60;module&#62;.ppd</B
+>
+	    </TT
+>
+	  </P
+><P
+>	    You can find ActiveState ppm modules at
+	    <A
+HREF="http://www.activestate.com/PPMPackages/5.6plus/"
+TARGET="_top"
+>	      http://www.activestate.com/PPMPackages/5.6plus</A
+>
+	  </P
+></LI
+><LI
+><P
+>	    Download and install the Windows GNU tools from
+	    <A
+HREF="http://www.cygwin.com/"
+TARGET="_top"
+>www.cygwin.com</A
+>.
+	    Make sure the GNU utilities are in your $PATH.
+	  </P
+></LI
+><LI
+><P
+>	    Install MySQL for NT.
+	    <DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>		Your configuration file for MySQL <EM
+>must</EM
+> be named C:\MY.CNF.
+	      </P
+></BLOCKQUOTE
+></DIV
+>
+	  </P
+></LI
+><LI
+><P
+>	    Setup MySQL
+	  </P
+><OL
+CLASS="SUBSTEPS"
+TYPE="a"
+><LI
+><P
+>		<TT
+CLASS="COMPUTEROUTPUT"
+>		  <TT
+CLASS="PROMPT"
+>C:&#62; </TT
+>
+		  <B
+CLASS="COMMAND"
+>C:\mysql\bin\mysql -u root mysql</B
+>
+		</TT
+>
+	      </P
+></LI
+><LI
+><P
+>		<TT
+CLASS="COMPUTEROUTPUT"
+>		  <TT
+CLASS="PROMPT"
+>mysql&#62;</TT
+>
+		  <B
+CLASS="COMMAND"
+>DELETE FROM user WHERE Host='localhost' AND User='';</B
+>
+		</TT
+>
+	      </P
+></LI
+><LI
+><P
+>		<TT
+CLASS="COMPUTEROUTPUT"
+>		  <TT
+CLASS="PROMPT"
+>mysql&#62;</TT
+>
+		  <B
+CLASS="COMMAND"
+>UPDATE user SET Password=PASSWORD ('new_password')
+		    WHERE user='root';</B
+>
+		</TT
+>
+	      </P
+></LI
+><LI
+><P
+>		<TT
+CLASS="COMPUTEROUTPUT"
+>		  <TT
+CLASS="PROMPT"
+>mysql&#62;</TT
+>
+		  <B
+CLASS="COMMAND"
+>GRANT SELECT, INSERT, UPDATE, DELETE,
+		    INDEX, ALTER, CREATE, DROP, REFERENCES
+		    ON bugs.* to bugs@localhost
+		    IDENTIFIED BY 'bugs_password';</B
+>
+		</TT
+>
+	      </P
+></LI
+><LI
+><P
+>		<TT
+CLASS="COMPUTEROUTPUT"
+>		  <TT
+CLASS="PROMPT"
+>mysql&#62;</TT
+>
+		  <B
+CLASS="COMMAND"
+>FLUSH PRIVILEGES;</B
+>
+		</TT
+>
+	      </P
+></LI
+><LI
+><P
+>		<TT
+CLASS="COMPUTEROUTPUT"
+>		  <TT
+CLASS="PROMPT"
+>mysql&#62;</TT
+>
+		  <B
+CLASS="COMMAND"
+>create database bugs;</B
+>
+		</TT
+>
+	      </P
+></LI
+><LI
+><P
+>		<TT
+CLASS="COMPUTEROUTPUT"
+>		  <TT
+CLASS="PROMPT"
+>mysql&#62;</TT
+>
+		  <B
+CLASS="COMMAND"
+>exit</B
+>
+		</TT
+>
+	      </P
+></LI
+><LI
+><P
+>		<TT
+CLASS="COMPUTEROUTPUT"
+>		  <TT
+CLASS="PROMPT"
+>C:&#62;</TT
+>
+		  <B
+CLASS="COMMAND"
+>C:\mysql\bin\mysqladmin -u root -p reload</B
+>
+		</TT
+>
+	      </P
+></LI
+></OL
+></LI
+><LI
+><P
+>	    Configure Bugzilla.  For Win32, this involves editing "defparams.pl"
+	    and "localconfig" to taste.  Running "checksetup.pl" should create
+	    localconfig for you.  Note that getgrnam() doesn't work, and should be
+	    deleted.  Change this line:
+	    "my $webservergid = getgrnam($my_webservergroup); "
+	    to
+	    "my $webservergid = $my_webservergroup; "
+	  </P
+></LI
+><LI
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	      There are several alternatives to Sendmail that will work on Win32.
+	      The one mentioned here is a <EM
+>suggestion</EM
+>, not
+	      a requirement.  Some other mail packages that can work include
+	      <A
+HREF="http://www.blat.net/"
+TARGET="_top"
+>BLAT</A
+>,
+	      <A
+HREF="http://www.geocel.com/windmail/"
+TARGET="_top"
+>Windmail</A
+>,
+	      <A
+HREF="http://www.dynamicstate.com/"
+TARGET="_top"
+>Mercury Sendmail</A
+>,
+	      and the CPAN Net::SMTP Perl module (available in .ppm).
+	      Every option requires some hacking of the Perl scripts for Bugzilla
+	      to make it work.  The option here simply requires the least.
+	    </P
+></BLOCKQUOTE
+></DIV
+><P
+>	    Download NTsendmail, available from<A
+HREF="http://www.ntsendmail.com/"
+TARGET="_top"
+>	    www.ntsendmail.com</A
+>.  In order for it to work, you must set up some
+	    new environment variables (detailed on the ntsendmail home page).  Figuring
+	    out where to put those variables is left as an exercise for the reader.
+	    You must have a "real" mail server which allows you to relay off it
+	    in your $ENV{"NTsendmail"} (which you should probably place in globals.pl)
+	  </P
+><P
+>	    Once downloaded and installed, modify all open(SENDMAIL) calls to open
+	    "| c:\ntsendmail\ntsendmail -t" instead of "|/usr/lib/sendmail -t".
+	  </P
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	      We need someone to test this and make sure this works as advertised.
+	    </P
+></BLOCKQUOTE
+></DIV
+></LI
+><LI
+><P
+>	    Modify globals.pl and CGI.pl to remove the word "encrypt".
+	  </P
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	      I'm not sure this is all that is involved to remove crypt.  Any
+	      NT Bugzilla hackers want to pipe up?
+	    </P
+></BLOCKQUOTE
+></DIV
+></LI
+><LI
+><P
+>	    Change all references to "processmail" to "processmail.pl" in
+	    all files, and rename "processmail" to "processmail.pl"
+	  </P
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	      I really think this may be a change we want to make for
+	      main-tree Bugzilla.  It's painless for the UNIX folks,
+	      and will make the Win32 people happier.
+	    </P
+></BLOCKQUOTE
+></DIV
+></LI
+><LI
+><P
+>	    Modify the path to perl on the first line (#!) of all files
+	    to point to your Perl installation, and
+	    add "perl" to the beginning of all Perl system calls that
+	    use a perl script as an argument.  This may take you a while.
+	    There is a "setperl.pl" utility to speed part of this procedure,
+	    available in the "Patches and Utilities" section of The Bugzilla Guide.
+	  </P
+></LI
+><LI
+><P
+>	    In processmail.pl, add "binmode(HANDLE)" before all read() calls.
+	    This may not be necessary, but in some cases the read() under
+	    Win32 doesn't count the EOL's without using a binary read().
+	  </P
+></LI
+></OL
+></DIV
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H2
+CLASS="SECTION"
+><A
+NAME="ADDLWINTIPS"
+>2.2.2. Additional Windows Tips</A
+></H2
+><DIV
+CLASS="TIP"
+><BLOCKQUOTE
+CLASS="TIP"
+><P
+><B
+>Tip: </B
+>	  From Andrew Pearson:
+	  <A
+NAME="AEN624"
+></A
+><BLOCKQUOTE
+CLASS="BLOCKQUOTE"
+><P
+>	      "You can make Bugzilla work with Personal Web Server for
+	      Windows 98 and higher, as well as for IIS 4.0.  Microsoft has
+	      information available at
+	      <A
+HREF=" http://support.microsoft.com/support/kb/articles/Q231/9/98.ASP"
+TARGET="_top"
+>		http://support.microsoft.com/support/kb/articles/Q231/9/98.ASP</A
+>
+	    </P
+><P
+>	      Basically you need to add two String Keys in the
+	      registry at the following location:
+	    </P
+><P
+>	      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ScriptMap
+	    </P
+><P
+>	      The keys should be called ".pl" and ".cgi", and both
+	      should have a value something like:
+	      <B
+CLASS="COMMAND"
+>c:/perl/bin/perl.exe "%s" "%s"</B
+>
+	    </P
+><P
+>	      The KB article only talks about .pl, but it goes into
+	      more detail and provides a perl test script.
+	    </P
+></BLOCKQUOTE
+>
+	</P
+></BLOCKQUOTE
+></DIV
+><DIV
+CLASS="TIP"
+><BLOCKQUOTE
+CLASS="TIP"
+><P
+><B
+>Tip: </B
+>"Brian" had this to add, about upgrading to Bugzilla 2.12 from previous versions:</P
+><A
+NAME="AEN634"
+></A
+><BLOCKQUOTE
+CLASS="BLOCKQUOTE"
+><P
+>	    Hi - I am updating bugzilla to 2.12 so I can tell you what I did (after I
+	    deleted the current dir and copied the files in).
+	  </P
+><P
+>	    In checksetup.pl, I did the following...
+	  </P
+><DIV
+CLASS="PROCEDURE"
+><OL
+TYPE="1"
+><LI
+><TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%"
+><TR
+><TD
+><PRE
+CLASS="PROGRAMLISTING"
+>my $webservergid = getgrnam($my_webservergroup);
+	      </PRE
+></TD
+></TR
+></TABLE
+><P
+>to</P
+><TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%"
+><TR
+><TD
+><PRE
+CLASS="PROGRAMLISTING"
+>my $webservergid = 'Administrators'		
+	      </PRE
+></TD
+></TR
+></TABLE
+></LI
+><LI
+><P
+>		I then ran checksetup.pl
+	      </P
+></LI
+><LI
+><P
+>		I removed all the encrypt()
+		<DIV
+CLASS="EXAMPLE"
+><A
+NAME="AEN646"
+></A
+><P
+><B
+>Example 2-1. Removing encrypt() for Windows NT installations</B
+></P
+><P
+>		    Replace this:
+		    <TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%"
+><TR
+><TD
+><PRE
+CLASS="PROGRAMLISTING"
+>SendSQL("SELECT encrypt(" . SqlQuote($enteredpwd) . ", " .
+    SqlQuote(substr($realcryptpwd, 0, 2)) . ")");
+my $enteredcryptpwd = FetchOneColumn();
+		    </PRE
+></TD
+></TR
+></TABLE
+>
+		    with this:
+		    <TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%"
+><TR
+><TD
+><PRE
+CLASS="PROGRAMLISTING"
+>my $enteredcryptpwd = $enteredpwd
+		    </PRE
+></TD
+></TR
+></TABLE
+>
+		    in cgi.pl.
+		  </P
+></DIV
+>
+	      </P
+></LI
+><LI
+><P
+>		I renamed processmail to processmail.pl
+	      </P
+></LI
+><LI
+><P
+>		I altered the sendmail statements to windmail:
+		<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%"
+><TR
+><TD
+><PRE
+CLASS="PROGRAMLISTING"
+>  
+open SENDMAIL, "|\"C:/General/Web/tools/Windmail 4.0 Beta/windmail\" -t &#62; mail.log";
+		</PRE
+></TD
+></TR
+></TABLE
+>
+	      </P
+><P
+>		The quotes around the dir is for the spaces. mail.log is for the output
+	      </P
+></LI
+></OL
+></DIV
+></BLOCKQUOTE
+></BLOCKQUOTE
+></DIV
+></DIV
+></DIV
+></DIV
+><DIV
+CLASS="CHAPTER"
+><HR><H1
+><A
+NAME="ADMINISTRATION"
+>Chapter 3. Administering Bugzilla</A
+></H1
+><FONT
+COLOR="RED"
+>Or, I just got this cool thing installed.  Now what the heck do I do with it?</FONT
+><P
+>So you followed the README isntructions to the letter, and
+just logged into bugzilla with your super-duper god account and you are sitting at the query
+screen. Yet, you have nothing to query. Your first act of business needs to be to setup the
+operating parameters for bugzilla.</P
+><DIV
+CLASS="SECTION"
+><HR><H1
+CLASS="SECTION"
+><A
+NAME="POSTINSTALL-CHECK"
+>3.1. Post-Installation Checklist</A
+></H1
+><P
+>      After installation, follow the checklist below to ensure that
+      you have a successful installation.
+      If you do not see a recommended setting for a parameter,
+      consider leaving it at the default
+      while you perform your initial tests on your Bugzilla setup.
+    </P
+><DIV
+CLASS="PROCEDURE"
+><OL
+TYPE="1"
+><LI
+><P
+>	  Bring up "editparams.cgi" in your web browser.  For instance, to edit parameters
+	  at mozilla.org, the URL would be <A
+HREF="http://bugzilla.mozilla.org/editparams.cgi"
+TARGET="_top"
+>	  http://bugzilla.mozilla.org/editparams.cgi</A
+>, also available under the "edit parameters"
+	  link on your query page.
+	</P
+></LI
+><LI
+><P
+>	  Set "maintainer" to <EM
+>your</EM
+> email address.
+	  This allows Bugzilla's error messages
+	  to display your email
+	  address and allow people to contact you for help.
+	</P
+></LI
+><LI
+><P
+>	  Set "urlbase" to the URL reference for your Bugzilla installation.
+	  If your bugzilla query page is at http://www.foo.com/bugzilla/query.cgi,
+	  your url base is http://www.foo.com/bugzilla/
+	</P
+></LI
+><LI
+><P
+>	  Set "usebuggroups" to "1" <EM
+>only</EM
+>
+	  if you need to restrict access to products.
+	  I suggest leaving this parameter <EM
+>off</EM
+>
+	  while initially testing your Bugzilla.
+	</P
+></LI
+><LI
+><P
+>	  Set "usebuggroupsentry" to "1" if you want to restrict access to products.
+	  Once again, if you are simply testing your installation, I suggest against
+	  turning this parameter on; the strict security checking may stop you from
+	  being able to modify your new entries.
+	</P
+></LI
+><LI
+><P
+>	  Set "shadowdb" to "bug_shadowdb" if you will be
+	  running a *very* large installation of Bugzilla.
+	  The shadow database enables many simultaneous users
+	  to read and write to the database
+	  without interfering with one another.  
+	  <DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	      Enabling "shadowdb" can adversely affect the stability
+	      of your installation of Bugzilla.
+	      You may frequently need to manually synchronize your databases,
+	      or schedule nightly syncs
+	      via "cron"
+	    </P
+></BLOCKQUOTE
+></DIV
+>
+	  Once again, in testing you should
+	  avoid this option -- use it if or when you <EM
+>need</EM
+> to use it, and have
+	  repeatedly run into the problem it was designed to solve -- very long wait times while
+	  attempting to commit a change to the database.
+        </P
+><P
+>	  If you use the "shadowdb" option,
+	  it is only natural that you should turn the "queryagainstshadowdb"
+	  option "On" as well.  Otherwise you are replicating data into a shadow database for no reason!
+	</P
+></LI
+><LI
+><P
+>	  If you have custom logos or HTML you must put in place to fit within your site design guidelines,
+	  place the code in the "headerhtml", "footerhtml", "errorhtml",
+	  "bannerhtml", or "blurbhtml" text boxes.
+	  <DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	      The "headerhtml" text box is the HTML printed out
+	      <EM
+>before</EM
+> any other code on the page.
+	      If you have a special banner, put the code for it in "bannerhtml".
+	      You may want to leave these
+	      settings at the defaults initially.
+	    </P
+></BLOCKQUOTE
+></DIV
+>
+	</P
+></LI
+><LI
+><P
+>	  Add any text you wish to the "passwordmail" parameter box.  For instance,
+	  many people choose to use this box to give a quick training blurb about how to
+	  use Bugzilla at your site.
+        </P
+></LI
+><LI
+><P
+>	  Ensure "newemailtech" is "on".
+	  Your users will thank you.  This is the default in the post-2.12 world, and is
+	  only an issue if you are upgrading.
+	</P
+></LI
+><LI
+><P
+>	  Do you want to use the qa contact ("useqacontact")
+	  and status whiteboard ("usestatuswhiteboard") fields?
+	  These fields are useful because they allow for more flexibility,
+	  particularly when you have an existing
+	  Quality Assurance and/or Release Engineering team, 
+	  but they may not be needed for smaller installations.
+	</P
+></LI
+><LI
+><P
+>	  Set "whinedays" to the amount of days you want to let bugs go
+	  in the "New" or "Reopened" state before
+	  notifying people they have untouched new bugs.  If you do not plan to use this feature, simply do
+	  not set up the whining cron job described in the README, or set this value to "0".
+	</P
+></LI
+><LI
+><P
+>	  Set the "commenton" options according to your site policy.
+	  It is a wise idea to require comments when users
+	  resolve, reassign, or reopen bugs.
+	  <DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	      It is generally far better to require a developer comment when resolving bugs than not.
+	      Few things are more annoying to bug database users than having a developer
+	      mark a bug "fixed" without any comment as to what the fix was (or even that it was truly fixed!)
+	    </P
+></BLOCKQUOTE
+></DIV
+>
+	</P
+></LI
+><LI
+><P
+>	  Set "supportwatchers" to "On".  This feature is helpful for team leads to monitor progress in their
+	  respective areas, and can offer many other benefits, such as allowing a developer to pick up a
+	  former engineer's bugs without requiring her to change all the information in the bug.
+	</P
+></LI
+></OL
+></DIV
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H1
+CLASS="SECTION"
+><A
+NAME="USERADMIN"
+>3.2. User Administration</A
+></H1
+><P
+>      User administration is one of the easiest parts of Bugzilla.
+      Keeping it from getting out of hand, however, can become a challenge.
+    </P
+><DIV
+CLASS="SECTION"
+><HR><H2
+CLASS="SECTION"
+><A
+NAME="DEFAULTUSER"
+>3.2.1. Creating the Default User</A
+></H2
+><P
+>	When you first run checksetup.pl after installing Bugzilla, it will prompt you
+	for the administrative username (email address) and password for this "super user".
+	If for some reason you were to delete the "super user" account, re-running
+	checksetup.pl will again prompt you for this username and password.
+      </P
+><DIV
+CLASS="TIP"
+><BLOCKQUOTE
+CLASS="TIP"
+><P
+><B
+>Tip: </B
+>       If you wish to add more administrative users, you must use the MySQL interface.
+	Run "mysql" from the command line, and use these commands ("mysql&#62;" denotes the 
+	mysql prompt, not something you should type in):
+	<B
+CLASS="COMMAND"
+><TT
+CLASS="PROMPT"
+>mysql&#62;</TT
+> use bugs;</B
+>
+	<B
+CLASS="COMMAND"
+><TT
+CLASS="PROMPT"
+>mysql&#62;</TT
+> update profiles set groupset=0x7ffffffffffffff
+	  where login_name = "(user's login name)"; </B
+>
+	</P
+></BLOCKQUOTE
+></DIV
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H2
+CLASS="SECTION"
+><A
+NAME="MANAGEUSERS"
+>3.2.2. Managing Other Users</A
+></H2
+><DIV
+CLASS="SECTION"
+><H3
+CLASS="SECTION"
+><A
+NAME="LOGIN"
+>3.2.2.1. Logging In</A
+></H3
+><P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>	      Open the index.html page for your Bugzilla installation in your browser window.
+	    </P
+></LI
+><LI
+><P
+>	      Click the "Query Existing Bug Reports" link.
+	    </P
+></LI
+><LI
+><P
+>	      Click the "Log In" link at the foot of the page.
+	    </P
+></LI
+><LI
+><P
+>	      Type your email address, and the password which was emailed to you when you
+	      created your Bugzilla account, into the spaces provided.
+	    </P
+></LI
+></OL
+><P
+>Congratulations, you are logged in!</P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H3
+CLASS="SECTION"
+><A
+NAME="CREATENEWUSERS"
+>3.2.2.2. Creating new users</A
+></H3
+><P
+>	  Your users can create their own user accounts by clicking the "New Account"
+	  link at the bottom of each page.
+	  However, should you desire to create user accounts ahead of time, here is how you do it.
+	</P
+><P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>	      After logging in, click the "Users" link at the footer of the query page.
+	    </P
+></LI
+><LI
+><P
+>	      To see a specific user, type a portion of their login name
+	      in the box provided and click "submit".
+	      To see all users, simply click the "submit" button.
+	      You must click "submit" here to be able to add a new user.
+	    </P
+><DIV
+CLASS="TIP"
+><BLOCKQUOTE
+CLASS="TIP"
+><P
+><B
+>Tip: </B
+>		More functionality is available via the list on the right-hand side
+		of the text entry box.
+		You can match what you type as a case-insensitive substring (the default)
+		of all users on your system, a case-sensitive regular expression
+		(please see the "man regexp" manual page for details on regular expression syntax),
+		or a <EM
+>reverse</EM
+> regular expression match,
+		where every user name which does NOT match the regular expression
+		is selected.
+	      </P
+></BLOCKQUOTE
+></DIV
+></LI
+><LI
+><P
+>	      Click the "Add New User" link at the bottom of the user list
+	    </P
+></LI
+><LI
+><P
+>	      Fill out the form presented.  This page is self-explanatory.  When done, click "submit".
+	    </P
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>		Adding a user this way will <EM
+>not</EM
+> send an email
+		informing them of their username and password.
+		In general, it is preferable to log out and use the "New Account"
+		button to create users, as it will pre-populate all the required fields and also notify 
+		the user of her account name and password.
+	      </P
+></BLOCKQUOTE
+></DIV
+></LI
+></OL
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H3
+CLASS="SECTION"
+><A
+NAME="DISABLEUSERS"
+>3.2.2.3. Disabling Users</A
+></H3
+><P
+>	  I bet you noticed that big "Disabled Text" entry box available from the "Add New User" screen,
+	  when you edit an account?
+	  By entering any text in this box and selecting "submit",
+	  you have prevented the user from using Bugzilla via the web interface.
+	  Your explanation, written in this text box, will be presented to the user
+	  the next time she attempts to use the system.
+	  <DIV
+CLASS="WARNING"
+><P
+></P
+><TABLE
+CLASS="WARNING"
+BORDER="1"
+WIDTH="100%"
+><TR
+><TD
+ALIGN="CENTER"
+><B
+>Warning</B
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+><P
+>	      Don't disable your own administrative account, or you will hate life!
+	    </P
+></TD
+></TR
+></TABLE
+></DIV
+>
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H3
+CLASS="SECTION"
+><A
+NAME="MODIFYUSERS"
+>3.2.2.4. Modifying Users</A
+></H3
+><P
+>	  Here I will attempt to describe the function of each option on the user edit screen.
+	</P
+><P
+></P
+><UL
+><LI
+><P
+>	      <EM
+>Login Name</EM
+>: This is generally the user's email address.
+	      However, if you have edited your system parameters,
+	      this may just be the user's login name or some other identifier.
+	      <DIV
+CLASS="TIP"
+><BLOCKQUOTE
+CLASS="TIP"
+><P
+><B
+>Tip: </B
+>		  For compatability reasons, you should probably
+		  stick with email addresses as user login names.  It will make your life easier.
+		</P
+></BLOCKQUOTE
+></DIV
+>
+	    </P
+></LI
+><LI
+><P
+>	      <EM
+>Real Name</EM
+>: Duh!
+	    </P
+></LI
+><LI
+><P
+>	      <EM
+>Password</EM
+>: You will only see asterisks in versions
+	      of Bugzilla newer than 2.10 or early 2.11.  You can change the user password here.
+	    </P
+></LI
+><LI
+><P
+>	      <EM
+>Email Notification</EM
+>: You may choose from one of three options:
+	      <P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>		    All qualifying bugs except those which I change:
+		    The user will be notified of any change to any bug
+		    for which she is the reporter, assignee, Q/A contact, CC recipient, or "watcher".
+		  </P
+></LI
+><LI
+><P
+>		    Only those bugs which I am listed on the CC line:
+		    The user will not be notified of changes to bugs where she is the assignee,
+		    reporter, or Q/A contact, but will receive them if she is on the CC list.
+		    <DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>			She will still receive whining cron emails if you set up the "whinemail" feature.
+		      </P
+></BLOCKQUOTE
+></DIV
+>
+		  </P
+></LI
+><LI
+><P
+>		    <EM
+>All Qualifying Bugs</EM
+>: This user is a glutton for punishment.
+		    If her name is in the reporter, Q/A contact, CC, assignee, or is a "watcher",
+		    she will get email updates regarding the bug.
+		  </P
+></LI
+></OL
+></P
+><P
+>	      <EM
+>Disable Text</EM
+>: If you type anything in this box,
+	      including just a space, the user account is disabled from making any changes
+	      to bugs via the web interface, and what you type in this box is presented as the reason.
+	      <DIV
+CLASS="WARNING"
+><P
+></P
+><TABLE
+CLASS="WARNING"
+BORDER="1"
+WIDTH="90%"
+><TR
+><TD
+ALIGN="CENTER"
+><B
+>Warning</B
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+><P
+>Don't disable the administrator account!</P
+></TD
+></TR
+></TABLE
+></DIV
+>
+	      <DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>		  As of this writing, the user can still submit bugs via the e-mail gateway,
+		  if you set it up, despite the disabled text field.  The e-mail gateway should
+		  <EM
+>not</EM
+> be enabled for secure installations of Bugzilla.
+		</P
+></BLOCKQUOTE
+></DIV
+>
+	    </P
+></LI
+><LI
+><P
+>	      <EM
+>CanConfirm</EM
+>: This field is only used if you have enabled
+	      "unconfirmed" status in your parameters screen.  If you enable this for a user,
+	      that user can then move bugs from "Unconfirmed" to "Confirmed" status (ergo: "New" status).
+	      Be judicious about allowing users to turn this bit on for other users.
+	    </P
+></LI
+><LI
+><P
+>	      <EM
+>Creategroups</EM
+>: This option will allow a user to create and
+	      destroy groups in Bugzilla.  Unless you are using the Bugzilla GroupSentry security
+	      option "usebuggroupsentry" in your parameters, this setting has no effect.
+	    </P
+></LI
+><LI
+><P
+>	      <EM
+>Editbugs</EM
+>: Unless a user has this bit set, they can only edit
+	      those bugs for which they are the assignee or the reporter.  
+	      <DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>		  Leaving this option unchecked does not prevent users from adding
+		  comments to a bug!  They simply cannot change a bug priority, severity,
+		  etc. unless they are the assignee or reporter.
+		</P
+></BLOCKQUOTE
+></DIV
+>
+	    </P
+></LI
+><LI
+><P
+>	      <EM
+>Editcomponents</EM
+>: This flag allows a user to create new 
+	      products and components, as well as modify and destroy those that have no bugs
+	      associated with them.  If a product or component has bugs associated with it,
+	      those bugs must be moved to a different product or component before Bugzilla
+	      will allow them to be destroyed.  The name of a product or component can be
+	      changed without affecting the associated bugs, but it tends to annoy
+	      the hell out of your users when these change a lot.
+	    </P
+></LI
+><LI
+><P
+>	      <EM
+>Editkeywords</EM
+>: If you use Bugzilla's keyword functionality,
+	      enabling this feature allows a user can create and destroy keywords.
+	      As always, the keywords for existing bugs containing the keyword
+	      the user wishes to destroy must be changed before Bugzilla will allow it to die.
+	      You must be very careful about creating too many new keywords
+	      if you run a very large Bugzilla installation; keywords are global variables 
+	      across products, and you can often run into a phenomenon called "keyword bloat".
+	      This confuses users, and then the feature goes unused.
+	    </P
+></LI
+><LI
+><P
+>	      <EM
+>Editusers</EM
+>: This flag allows a user do what you're doing
+	      right now: edit other users.
+	      This will allow those with the right to do so to remove administrator
+	      priveleges from other users or grant them to themselves.  Enable with care.
+	    </P
+></LI
+><LI
+><P
+>	      <EM
+>PRODUCT</EM
+>: PRODUCT bugs access.  This allows an administrator,
+	      with product-level granularity, to specify in which products a user can edit bugs. 
+	      The user must still have the "editbugs" privelege to edit bugs in this area;
+	      this simply restricts them from even seeing bugs outside these boundaries if the administrator
+	      has enabled the group sentry parameter "usebuggroupsentry".  Unless you are using bug groups,
+	      this option has no effect.
+	    </P
+></LI
+></UL
+></DIV
+></DIV
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H1
+CLASS="SECTION"
+><A
+NAME="PROGRAMADMIN"
+>3.3. Product, Component, Milestone, and Version Administration</A
+></H1
+><TABLE
+BORDER="0"
+WIDTH="100%"
+CELLSPACING="0"
+CELLPADDING="0"
+CLASS="EPIGRAPH"
+><TR
+><TD
+WIDTH="45%"
+>&nbsp;</TD
+><TD
+WIDTH="45%"
+ALIGN="LEFT"
+VALIGN="TOP"
+><I
+><P
+><I
+>Dear Lord, we have to get our users to do WHAT?</I
+></P
+></I
+></TD
+></TR
+></TABLE
+><DIV
+CLASS="SECTION"
+><HR><H2
+CLASS="SECTION"
+><A
+NAME="PRODUCTS"
+>3.3.1. Products</A
+></H2
+><FONT
+COLOR="RED"
+>Formerly, and in some spots still, called "Programs"</FONT
+><P
+>	<A
+HREF="#GLOSS_PRODUCT"
+><I
+CLASS="GLOSSTERM"
+>Products</I
+></A
+> are the
+	broadest category in Bugzilla, and you should have the least of these.
+	If your company makes computer games, you should have one product per game,
+	and possibly a few special products
+	(website, meetings...)
+      </P
+><P
+>	A Product (formerly called "Program", and still referred to that way
+	in some portions of the source code) controls some very important functions.
+	The number of "votes" available for users to vote for the most important bugs
+	is set per-product, as is the number of votes required to move a bug automatically
+	from the UNCONFIRMED status to the NEW status.  One can close a Product for further
+	bug entry and define various Versions available from the Edit Product screen.
+      </P
+><P
+>To create a new product:</P
+><P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>	    Select "components" from the yellow footer
+	  </P
+><DIV
+CLASS="TIP"
+><BLOCKQUOTE
+CLASS="TIP"
+><P
+><B
+>Tip: </B
+>	      It may seem counterintuitive to click "components" when you want
+	      to edit the properties associated with Products.  This is one of a long
+	      list of things we want in Bugzilla 3.0...
+	    </P
+></BLOCKQUOTE
+></DIV
+></LI
+><LI
+><P
+>	    Select the "Add" link to the right of "Add a new product".
+	  </P
+></LI
+><LI
+><P
+>	    Enter the name of the product and a description.
+	    The Description field is free-form.
+	  </P
+></LI
+></OL
+><DIV
+CLASS="TIP"
+><BLOCKQUOTE
+CLASS="TIP"
+><P
+><B
+>Tip: </B
+>	  Don't worry about the "Closed for bug entry", "Maximum Votes per person", 
+	  "Maximum votes a person can put on a single bug", "Number of votes a bug in
+	  this Product needs to automatically get out of the UNCOMFIRMED state",
+	  and "Version" options yet.
+	  We'll cover those in a few moments.
+	</P
+></BLOCKQUOTE
+></DIV
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H2
+CLASS="SECTION"
+><A
+NAME="COMPONENTS"
+>3.3.2. Components</A
+></H2
+><P
+>	Components are subsections of a Product. 
+
+	<DIV
+CLASS="EXAMPLE"
+><A
+NAME="AEN838"
+></A
+><P
+><B
+>Example 3-1. Creating some Components</B
+></P
+><DIV
+CLASS="INFORMALEXAMPLE"
+><A
+NAME="AEN840"
+></A
+><P
+></P
+><P
+>	      The computer game you are designing may a "UI" component, an "API" component,
+	      a "Sound System" component, and a "Plugins" component, each overseen by a different
+	      programmer.  It often makes sense to divide Components in Bugzilla according to the
+	      natural divisions of responsibility within your Product or company.
+	    </P
+><P
+></P
+></DIV
+></DIV
+>
+
+	Each component has a owner and (if you turned it on in the parameters), a qa
+	contact. The owner should be the primary person who fixes bugs in that component.  The  QA
+	Contact should be the person who will ensure these bugs are completely fixed. The Owner,
+	QA Contact, and Reporter will get email when new bugs are created in this Component and
+	when these bugs change. Default Owner and Default QA Contact fields only dictate the
+	<EM
+>default assignments</EM
+>; the Owner and Q/A Contact fields in a bug 
+	are otherwise unrelated to the Component.
+      </P
+><P
+>	To create a new Component:
+      </P
+><P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>	    Select the "Edit components" link from the "Edit Product" page
+	  </P
+></LI
+><LI
+><P
+>	    Select the "Add" link to the right of the "Add a new component" text
+	    on the "Select Component" page.
+	  </P
+></LI
+><LI
+><P
+>	    Fill out the "Component" field, a short "Description", and the "Initial Owner".
+	    The "Component" field should not contain a space.  The "Description" field is
+	    free-form.  The "Initial Owner" field must be that of a valid user already
+	    existing in the database.  If the initial owner does not exist, Bugzilla
+	    will refuse to create the component.
+	    <DIV
+CLASS="TIP"
+><BLOCKQUOTE
+CLASS="TIP"
+><P
+><B
+>Tip: </B
+>		Is your "Default Owner" a user who is not yet in the database?
+		No problem.
+		<P
+></P
+><OL
+TYPE="a"
+><LI
+><P
+>		      Select the "Log out" link on the footer of the page.
+		    </P
+></LI
+><LI
+><P
+>		      Select the "New Account" link on the footer of the "Relogin" page
+		    </P
+></LI
+><LI
+><P
+>		      Type in the email address of the default owner you want to create
+		      in the "E-mail address" field, and her full name in the "Real name"
+		      field, then select the "Submit Query" button.
+		    </P
+></LI
+><LI
+><P
+>		      Now select "Log in" again, type in your login information, and you
+		      can modify the product to use the Default Owner information
+		      you require.
+		    </P
+></LI
+></OL
+>
+	      </P
+></BLOCKQUOTE
+></DIV
+>
+	  </P
+></LI
+><LI
+><P
+>	    Either "edit" more components or return to the "query" page on the ensuing
+	    "Addming new component" page.  To return to the Product you were editing, you
+	    must select the "components" link as before.
+	  </P
+></LI
+></OL
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H2
+CLASS="SECTION"
+><A
+NAME="VERSIONS"
+>3.3.3. Versions</A
+></H2
+><P
+>	Versions are the revisions of the product, such as "Flinders 3.1", "Flinders 95",
+	and "Flinders 2000".  Using Versions helps you isolate code changes and are an aid
+	in reporting.
+
+	<DIV
+CLASS="EXAMPLE"
+><A
+NAME="AEN867"
+></A
+><P
+><B
+>Example 3-2. Common Use of Versions</B
+></P
+><DIV
+CLASS="INFORMALEXAMPLE"
+><A
+NAME="AEN869"
+></A
+><P
+></P
+><P
+>	      A user reports a bug
+	      against Version "Beta 2.0" of your product.  The current Version of your software
+	      is "Release Candidate 1", and no longer has the bug.  This will
+	      help you triage and classify bugs according to their relevance.  It is also
+	      possible people may report bugs against bleeding-edge beta versions that are
+	    not evident in older versions of the software.  This can help isolate code
+	      changes that caused the bug
+	    </P
+><P
+></P
+></DIV
+></DIV
+>
+	<DIV
+CLASS="EXAMPLE"
+><A
+NAME="AEN871"
+></A
+><P
+><B
+>Example 3-3. A Different Use of Versions</B
+></P
+><DIV
+CLASS="INFORMALEXAMPLE"
+><A
+NAME="AEN873"
+></A
+><P
+></P
+><P
+>	      This field has been used to good effect by an online service provider in a slightly
+	      different way.  They had three versions of the product: "Production", "QA",
+	      and "Dev".  Although it may be the same product, a bug in the development
+	      environment is not normally as critical as a Production bug, nor does it
+	      need to be reported publicly.  When used in conjunction with Target Milestones,
+	      one can easily specify the environment where a bug can be reproduced, and
+	      the Milestone by which it will be fixed.
+	    </P
+><P
+></P
+></DIV
+></DIV
+>
+       </P
+><P
+>	To create and edit Versions:
+      </P
+><P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>	    From the "Edit Product" screen, select "Edit Versions"
+	  </P
+></LI
+><LI
+><P
+>	    You will notice that the product already has the default version "undefined".
+	    If your product doesn't use version numbers, you may want to leave this as it is
+	    or edit it so that it is "---". You can then go back to the edit versions page
+	    and add new versions to your product.
+	  </P
+><P
+>	    Otherwise, click the "Add" button to the right of the "Add a new version" text.
+	  </P
+></LI
+><LI
+><P
+>	    Enter the name of the Version.  This can be free-form characters up to the limit of the
+	    text box.  Then select the "Add" button.
+	  </P
+></LI
+><LI
+><P
+>	    At this point you can select "Edit" to edit more Versions, or return to the "Query"
+	    page, from which you can navigate back to the product through the "components" link
+	    at the foot of the Query page.
+	  </P
+></LI
+></OL
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H2
+CLASS="SECTION"
+><A
+NAME="MILESTONES"
+>3.3.4. Milestones</A
+></H2
+><P
+>	Milestones are "targets" that you plan to get a bug fixed by. For example, you have a bug that
+	you plan to fix for your 3.0 release, it would be assigned the milestone of 3.0. Or, you have a
+	bug that you plan to fix for 2.8, this would have a milestone of 2.8.
+      </P
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	  Milestone options will only appear for a Product if you turned the "usetargetmilestone" field
+	  in the "Edit Parameters" screen "On".
+	</P
+></BLOCKQUOTE
+></DIV
+><P
+>	To create new Milestones, set Default Milestones, and set Milestone URL: 
+      </P
+><P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>	    Select "edit milestones"
+	  </P
+></LI
+><LI
+><P
+>	    Select "Add" to the right of the "Add a new milestone" text
+	  </P
+></LI
+><LI
+><P
+>	    Enter the name of the Milestone in the "Milestone" field.
+	    You can optionally set the "Sortkey", which is a positive or negative number (-255 to 255)
+	    that defines where in the list this particular milestone appears.
+	    Select "Add".
+	  </P
+><DIV
+CLASS="EXAMPLE"
+><A
+NAME="AEN899"
+></A
+><P
+><B
+>Example 3-4. Using SortKey with Target Milestone</B
+></P
+><DIV
+CLASS="INFORMALEXAMPLE"
+><A
+NAME="AEN901"
+></A
+><P
+></P
+><P
+>		Let's say you create a target milestone called "Release 1.0", with Sortkey set to "0".
+		Later, you realize that you will have a public beta, called "Beta1".
+		You can create a Milestone called "Beta1", with a Sortkey of "-1" in order to ensure
+		people will see the Target Milestone of "Beta1" earlier on the list than "Release 1.0"
+	      </P
+><P
+></P
+></DIV
+></DIV
+></LI
+><LI
+><P
+>	    If you want to add more milestones, select the "Edit" link.
+	    If you don't, well shoot, you have to go back to the "query" page and select "components"
+	    again, and make your way back to the Product you were editing.
+	    <DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>		This is another in the list of unusual user interface decisions that
+		we'd like to get cleaned up.  Shouldn't there be a link to the effect of
+		"edit the Product I was editing when I ended up here"?  In any case,
+		clicking "components" in the footer takes you back to the "Select product"
+		screen, from which you can begin editing your product again.
+	      </P
+></BLOCKQUOTE
+></DIV
+>
+	  </P
+></LI
+><LI
+><P
+>	    From the Edit Product screen again (once you've made your way back), enter the URL
+	    for a description of what your milestones are for this product in the "Milestone URL" field.
+	    It should be of the format "http://www.foo.com/bugzilla/product_milestones.html"
+	  </P
+><P
+>	    Some common uses of this field include product descriptions, product roadmaps,
+	    and of course a simple description of the meaning of each milestone.
+	  </P
+></LI
+><LI
+><P
+>	    If you're using Target Milestones, the "Default Milestone" field must have some
+	    kind of entry.  If you really don't care if people set coherent Target Milestones, 
+	    simply leave this at the default, "---".  However, controlling and regularly updating the Default
+	    Milestone field is a powerful tool when reporting the status of projects.
+	  </P
+><P
+>Select the "Update" button when you are done.</P
+></LI
+><LI
+><P
+>	    
+	  </P
+></LI
+></OL
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H2
+CLASS="SECTION"
+><A
+NAME="VOTING"
+>3.3.5. Voting</A
+></H2
+><P
+>	The concept of "voting" is a poorly understood, yet powerful feature for the management
+	of open-source projects.  Each user is assigned so many Votes per product, which they can
+	freely reassign (or assign multiple votes to a single bug).
+	This allows developers to gauge user need for a particular enhancement
+	or bugfix.  By allowing bugs with a certain number of votes to automatically move from
+	"UNCONFIRMED" to "NEW", users of the bug system can help high-priority bugs garner
+	attention so they don't sit for a long time awaiting triage.
+      </P
+><P
+>	The daunting challenge of Votes is deciding where you draw the line for a "vocal majority".  If you
+	only have a user base of 100 users, setting a low threshold for bugs to move from UNCONFIRMED
+	to NEW makes sense.  As the Bugzilla user base expands, however, these thresholds must be
+	re-evaluated.  You should gauge whether this feature is worth the time and close monitoring involved,
+	and perhaps forego implementation until you have a critical mass of users who demand it.
+      </P
+><P
+>To modify Voting settings:</P
+><P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>	    Navigate to the "Edit Product" screen for the Product you wish to modify
+	  </P
+></LI
+><LI
+><P
+>	    Set "Maximum Votes per person" to your calculated value.  Setting this field
+	    to "0" disables voting.
+	  </P
+></LI
+><LI
+><P
+>	    Set "Maximum Votes a person can put on a single bug" to your calculated value.  It
+	    should probably be some number lower than the "Maximum votes per person".
+	    Setting this field to "0" disables voting, but leaves the voting options open
+	    to the user.  This is confusing.
+	  </P
+></LI
+><LI
+><P
+>	    Set "Number of votes a bug in this product needs to automatically get out of the
+	    UNCONFIRMED state" to your calculated number.  Setting this field to "0" 
+	    disables the automatic move of bugs from UNCONFIRMED to NEW.  Some people
+	    advocate leaving this at "0", but of what use are Votes if your Bugzilla
+	    user base is unable to affect which bugs appear on Development radar?
+	    <DIV
+CLASS="TIP"
+><BLOCKQUOTE
+CLASS="TIP"
+><P
+><B
+>Tip: </B
+>		You should probably set this number to higher than a small coalition of
+		Bugzilla users can influence it.  Most sites use this as a "referendum"
+		mechanism -- if users are able to vote a bug out of UNCONFIRMED, it
+		is a <EM
+>really</EM
+> bad bug!
+	      </P
+></BLOCKQUOTE
+></DIV
+>
+	  </P
+></LI
+><LI
+><P
+>	    Once you have adjusted the values to your preference, select the "Update" button.
+	  </P
+></LI
+></OL
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H2
+CLASS="SECTION"
+><A
+NAME="GROUPS"
+>3.3.6. Groups and Group Security</A
+></H2
+><P
+>	Groups can be very useful in bugzilla, because they allow users to isolate
+	bugs or products that should only be seen by certain people.  Groups can also
+	be a complicated minefield of interdependencies and weirdness if mismanaged.
+
+	<DIV
+CLASS="EXAMPLE"
+><A
+NAME="AEN937"
+></A
+><P
+><B
+>Example 3-5. When to Use Group Security</B
+></P
+><DIV
+CLASS="INFORMALEXAMPLE"
+><A
+NAME="AEN939"
+></A
+><P
+></P
+><P
+>	      Many Bugzilla sites isolate "Security-related" bugs from all other bugs.
+	      This way, they can have a fix ready before the security vulnerability
+	      is announced to the world.  You can create a "Security" product which, by
+	      default, has no members, and only add members to the group (in their individual
+	      User page, as described under User Administration) who should have
+	      priveleged access to "Security" bugs.  Alternately, you may create a Group
+	      independently of any Product, and change the Group mask on individual bugs
+	      to restrict access to members only of certain Groups.
+	    </P
+><P
+></P
+></DIV
+></DIV
+>
+	
+	Groups only work if you enable the "usebuggroups" paramater.
+	In addition, if the "usebuggroupsentry" parameter is "On", one can restrict access
+	to products by groups, so that only members of a product group are able to view
+	bugs within that product.
+	Group security in Bugzilla can be divided into two categories:
+	Generic and Product-Based.
+      </P
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	  Groups in Bugzilla are a complicated beast that evolved out of very simple user
+	  permission bitmasks, apparently itself derived from common concepts in UNIX access
+	  controls.  A "bitmask" is a fixed-length number whose value can describe one, and
+	  only one, set of states.  For instance, UNIX file permissions are assigned bitmask
+	  values:  "execute" has a value of 1, "write" has a value of 2, 
+	  and "read" has a value of 4.  Add them together,
+	  and a file can be read, written to, and executed if it has a bitmask of "7". (This
+	  is a simplified example -- anybody who knows UNIX security knows there is much
+	  more to it than this.  Please bear with me for the purpose of this note.)  The only
+	  way a bitmask scheme can work is by doubling the bit count for each value.  Thus
+	  if UNIX wanted to offer another file permission, the next would have to be a value of
+	  8, then the next 16, the next 32, etc.
+	</P
+><P
+>	  Similarly, Bugzilla offers a bitmask to define group permissions, with an internal
+	  limit of 64.  Several are already occupied
+	  by built-in permissions.  The way around this limitation is
+	  to avoid assigning groups to products if you have many products, avoid bloating
+	  of group lists, and religiously prune irrelevant groups.  In reality, most installations
+	  of Bugzilla support far fewer than 64 groups, so this limitation has not hit
+	  for most sites, but it is on the table to be revised for Bugzilla 3.0
+	  because it interferes with the security schemes of some administrators.
+	</P
+></BLOCKQUOTE
+></DIV
+><P
+>	To enable Generic Group Security ("usebuggroups"):
+      </P
+><P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>	    Turn "On" "usebuggroups" in the "Edit Parameters" screen.
+	  </P
+></LI
+><LI
+><P
+>	    You will generally have no groups set up.  Select the "groups" link
+	    in the footer.
+	  </P
+></LI
+><LI
+><P
+>	    Take a moment to understand the instructions on the "Edit Groups" screen.
+	    Once you feel confident you understand what is expected of you, select the
+	    "Add Group" link.
+	  </P
+></LI
+><LI
+><P
+>	    Fill out the "New Name" (remember, no spaces!), "New Description", and "New
+	    User RegExp" fields.  "New User RegExp" allows you to automatically place
+	    all users who fulfill the Regular Expression into the new group.
+
+	    <DIV
+CLASS="EXAMPLE"
+><A
+NAME="AEN954"
+></A
+><P
+><B
+>Example 3-6. Creating a New Group</B
+></P
+><DIV
+CLASS="INFORMALEXAMPLE"
+><A
+NAME="AEN956"
+></A
+><P
+></P
+><P
+>		  I created a group called "DefaultGroup" with a description of "This is simply
+		  a group to play with", and a "New User RegExp" of "*@velio.com".  This
+		  new group automatically includes all Bugzilla users with "@velio.com" at the
+		  end of their user id.  When I finished, my new group was assigned bit #128.
+		</P
+><P
+></P
+></DIV
+></DIV
+>
+	    
+	    When you have finished, select the "Add" button.
+	  </P
+></LI
+></OL
+><P
+>	To enable Product-Based Group Security ("usebuggroupsentry"):
+      </P
+><DIV
+CLASS="WARNING"
+><P
+></P
+><TABLE
+CLASS="WARNING"
+BORDER="1"
+WIDTH="100%"
+><TR
+><TD
+ALIGN="CENTER"
+><B
+>Warning</B
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+><P
+>	  Don't forget that you only have 64 groups masks available, total, for
+	  your installation of Bugzilla!  If you plan on having more than 50
+	  products in your individual Bugzilla installation, and require group
+	  security for your products, you should
+	  consider either running multiple Bugzillas or using Generic Group Security
+	  instead of Product-Based ("usebuggroupsentry") Group Security.
+	</P
+></TD
+></TR
+></TABLE
+></DIV
+><P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>	    Turn "On" "usebuggroups" and "usebuggroupsentry" in the "Edit Parameters" screen.
+	  </P
+><DIV
+CLASS="WARNING"
+><P
+></P
+><TABLE
+CLASS="WARNING"
+BORDER="1"
+WIDTH="90%"
+><TR
+><TD
+ALIGN="CENTER"
+><B
+>Warning</B
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+><P
+>	      "usebuggroupsentry" has the capacity to prevent the administrative user
+	      from directly altering bugs because of conflicting group permissions.
+	      If you plan on using "usebuggroupsentry", you should plan on restricting administrative
+	      account usage to administrative duties only.
+	      In other words, manage bugs with an unpriveleged user account, and
+	      manage users, groups, Products, etc. with the administrative account.
+	    </P
+></TD
+></TR
+></TABLE
+></DIV
+></LI
+><LI
+><P
+>	    You will generally have no Groups set up, unless you enabled "usebuggroupsentry"
+	    prior to creating any Products.  To create "Generic Group Security" groups,
+	    follow the instructions given above.  To create Product-Based Group security,
+	    simply follow the instructions for creating a new Product.  If you need to
+	    add users to these new groups as you create them, you will find the option
+	    to add them to the group available under the "Edit User" screens.
+	  </P
+></LI
+></OL
+></DIV
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H1
+CLASS="SECTION"
+><A
+NAME="SECURITY"
+>3.4. Bugzilla Security</A
+></H1
+><TABLE
+BORDER="0"
+WIDTH="100%"
+CELLSPACING="0"
+CELLPADDING="0"
+CLASS="EPIGRAPH"
+><TR
+><TD
+WIDTH="45%"
+>&nbsp;</TD
+><TD
+WIDTH="45%"
+ALIGN="LEFT"
+VALIGN="TOP"
+><I
+><P
+><I
+>Putting your money in a wall safe is better protection than depending on the fact that
+	no one knows that you hide your money in a mayonnaise jar in your fridge.</I
+></P
+></I
+></TD
+></TR
+></TABLE
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	Poorly-configured MySQL, Bugzilla, and FTP installations have given attackers full
+	access to systems in the past.  Please take these guidelines seriously, even
+	for Bugzilla machines hidden away behind your firewall.  80% of all computer
+	trespassers are insiders, not anonymous crackers.
+      </P
+></BLOCKQUOTE
+></DIV
+><P
+>      First thing's first: Secure your installation.
+      <DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	  These instructions must, of necessity, be somewhat vague since Bugzilla runs on so many different
+	  platforms.  If you have refinements of these directions for specific platforms, please
+	  submit them to <A
+HREF="mailto://mozilla-webtools@mozilla.org"
+TARGET="_top"
+>mozilla-webtools@mozilla.org</A
+>
+	</P
+></BLOCKQUOTE
+></DIV
+>
+      <P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>	    Ensure you are running at least MysQL version 3.22.32 or newer.  Earlier versions had
+	    notable security holes and poorly secured default configuration choices.
+	  </P
+></LI
+><LI
+><P
+><EM
+>There is no substitute for understanding the tools on your system!</EM
+>
+	    Read <A
+HREF="http://www.mysql.com/documentation/mysql/bychapter/manual_Privilege_system.html"
+TARGET="_top"
+>	  The MySQL Privelege System</A
+> until you can recite it from memory!</P
+><P
+>	    At the very least, ensure you password the "mysql -u root" account and the "bugs" account, establish grant
+	    table rights (consult the Keystone guide in Appendix C: The Bugzilla Database for some easy-to-use details)
+	    that do not allow CREATE, DROP, RELOAD, SHUTDOWN, and PROCESS for user "bugs".  I wrote up the Keystone
+	    advice back when I knew far less about security than I do now : )
+	  </P
+></LI
+><LI
+><P
+>	    Lock down /etc/inetd.conf.  Heck, disable inet entirely on this box.  It should only listen to
+	    port 25 for Sendmail
+	    and port 80 for Apache.
+	  </P
+></LI
+><LI
+><P
+>Do not run Apache as "nobody".  This will require very lax permissions in your Bugzilla directories.
+	  Run it, instead, as a user with a name, set via your httpd.conf file.</P
+></LI
+><LI
+><P
+>	    Ensure you have adequate access controls for the $BUGZILLA_HOME/data/ and
+	    $BUGZILLA_HOME/shadow/ directories, as well as the $BUGZILLA_HOME/localconfig file.
+	    The localconfig file stores your "bugs" user password,
+	    which would be terrible to have in the hands
+	    of a criminal.  Also some files under $BUGZILLA_HOME/data/ store sensitive information, and
+	    $BUGZILLA_HOME/shadow/ stores bug information for faster retrieval.  If you fail to secure
+	    these directories and this file, you will expose bug information to those who may not
+	    be allowed to see it.
+	  </P
+><P
+>	    On Apache, you can use .htaccess files to protect access to these directories, as outlined
+	    in <A
+HREF="http://bugzilla.mozilla.org/show_bug.cgi?id=57161"
+TARGET="_top"
+>Bug 57161</A
+> for the
+	    localconfig file, and <A
+HREF="http://bugzilla.mozilla.org/show_bug.cgi?id=65572"
+TARGET="_top"
+>	    Bug 65572</A
+> for adequate protection in your data/ and shadow/ directories.
+	  </P
+><P
+>	    Note the instructions which follow are Apache-specific.  If you use IIS, Netscape, or other
+	    non-Apache web servers, please consult your system documentation for how to secure these
+	    files from being transmitted to curious users.
+	  </P
+><P
+>	    Place the following text into a file named ".htaccess", readable by your web server,
+	    in your $BUGZILLA_HOME/data directory.
+	    <P
+CLASS="LITERALLAYOUT"
+>	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;Files&nbsp;comments&#62;<br>
+	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;allow&nbsp;from&nbsp;all<br>
+	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;/Files&#62;<br>
+	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;deny&nbsp;from&nbsp;all<br>
+	&nbsp;&nbsp;&nbsp;&nbsp;</P
+>
+	  </P
+><P
+>	    Place the following text into a file named ".htaccess", readable by your web server,
+	    in your $BUGZILLA_HOME/ directory.
+	    <P
+CLASS="LITERALLAYOUT"
+>	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;Files&nbsp;localconfig&#62;<br>
+	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;deny&nbsp;from&nbsp;all<br>
+	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;/Files&#62;<br>
+	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;allow&nbsp;from&nbsp;all<br>
+	&nbsp;&nbsp;&nbsp;&nbsp;</P
+>
+	  </P
+><P
+>	    Place the following text into a file named ".htaccess", readable by your web server,
+	    in your $BUGZILLA_HOME/shadow directory.
+	    <P
+CLASS="LITERALLAYOUT"
+>	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;deny&nbsp;from&nbsp;all<br>
+	&nbsp;&nbsp;&nbsp;&nbsp;</P
+>
+	  </P
+></LI
+></OL
+>
+    </P
+></DIV
+></DIV
+><DIV
+CLASS="CHAPTER"
+><HR><H1
+><A
+NAME="USING"
+>Chapter 4. Using Bugzilla</A
+></H1
+><TABLE
+BORDER="0"
+WIDTH="100%"
+CELLSPACING="0"
+CELLPADDING="0"
+CLASS="EPIGRAPH"
+><TR
+><TD
+WIDTH="45%"
+>&nbsp;</TD
+><TD
+WIDTH="45%"
+ALIGN="LEFT"
+VALIGN="TOP"
+><I
+><P
+><I
+>What, Why, How, &#38; What's in it for me?</I
+></P
+></I
+></TD
+></TR
+></TABLE
+><DIV
+CLASS="SECTION"
+><HR><H1
+CLASS="SECTION"
+><A
+NAME="WHATIS"
+>4.1. What is Bugzilla?</A
+></H1
+><P
+>      Bugzilla is one example of a class of programs called "Defect Tracking Systems",
+      or, more commonly, "Bug-Tracking Systems".  Defect Tracking Systems allow individual or
+      groups of developers to keep track of outstanding bugs in their product effectively.
+      Bugzilla was originally written by Terry Weissman in a programming language called
+      "TCL", to replace a crappy
+      bug-tracking database used internally for Netscape Communications.  Terry later ported
+      Bugzilla to
+      Perl from TCL, and in Perl it remains to this day.
+      Most commercial defect-tracking software vendors at the
+      time charged enormous licensing fees, and Bugzilla quickly became a favorite of the
+      open-source crowd (with its genesis in the open-source browser project, Mozilla).  It
+      is now the de-facto standard defect-tracking system against which all others are
+      measured.
+    </P
+><P
+>      Bugzilla has matured immensely, and now boasts many advanced features.  These include:
+      <P
+></P
+><UL
+><LI
+><P
+>	    integrated, product-based granular security schema
+	  </P
+></LI
+><LI
+><P
+>	    inter-bug dependencies and dependency graphing
+	  </P
+></LI
+><LI
+><P
+>	    advanced reporting capabilities
+	  </P
+></LI
+><LI
+><P
+>	    a robust, stable RDBMS back-end
+	  </P
+></LI
+><LI
+><P
+>	    extensive configurability
+	  </P
+></LI
+><LI
+><P
+>	    a very well-understood and well-thought-out natural bug resolution protocol
+	  </P
+></LI
+><LI
+><P
+>	    email, XML, and HTTP APIs
+	  </P
+></LI
+><LI
+><P
+>	    available integration with automated software configuration management systems, including
+	    Perforce and CVS.
+	  </P
+></LI
+><LI
+><P
+>	    too many more features to list
+	  </P
+></LI
+></UL
+>
+    </P
+><P
+>      Despite its current robustness and popularity, however, Bugzilla
+      faces some near-term challenges, such as reliance on a single database, a lack of
+      abstraction of the user interface and program logic, verbose email bug
+      notifications, a powerful but daunting query interface, little reporting configurability,
+      problems with extremely large queries, some unsupportable bug resolution options,
+      no internationalization, and dependence on some nonstandard libraries.
+    </P
+><P
+>      Some recent headway has been made on the query front, however.  If you are using the latest
+      version of Bugzilla, you should see a "simple search" form on the default front page of
+      your Bugzilla install.  Type in two or three search terms and you should pull up some
+      relevant information.  This is also available as "queryhelp.cgi".
+    </P
+><P
+>      Despite these small problems, Bugzilla is very hard to beat.  It is under <EM
+>very</EM
+>
+      active development to address the current issues, and a long-awaited overhaul in the form
+      of Bugzilla 3.0 is expected sometime later this year.
+    </P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H1
+CLASS="SECTION"
+><A
+NAME="WHY"
+>4.2. Why Should We Use Bugzilla?</A
+></H1
+><TABLE
+BORDER="0"
+WIDTH="100%"
+CELLSPACING="0"
+CELLPADDING="0"
+CLASS="EPIGRAPH"
+><TR
+><TD
+WIDTH="45%"
+>&nbsp;</TD
+><TD
+WIDTH="45%"
+ALIGN="LEFT"
+VALIGN="TOP"
+><I
+><P
+><I
+>No, Who's on first...</I
+></P
+></I
+></TD
+></TR
+></TABLE
+><P
+>      For many years, defect-tracking software has remained principally the domain
+      of large software development houses.  Even then, most shops never bothered
+      with bug-tracking software, and instead simply relied on shared lists and
+      email to monitor the status of defects.  This procedure is error-prone and
+      tends to cause those bugs judged least significant by developers to be
+      dropped or ignored
+    </P
+><P
+>      These days, many companies are finding that integrated defect-tracking
+      systems reduce downtime, increase productivity, and raise customer 
+      satisfaction with their systems.  Along with full disclosure, an open
+      bug-tracker allows manufacturers to keep in touch with their clients
+      and resellers, to communicate about problems effectively throughout
+      the data management chain.  Many corporations have also discovered that
+      defect-tracking helps reduce costs by providing IT support accountability,
+      telephone support knowledge bases, and a common, well-understood system
+      for accounting for unusual system or software issues.
+    </P
+><P
+>      But why should <EM
+>you</EM
+> use Bugzilla?
+    </P
+><P
+>      Bugzilla is very adaptable to various situations.  Known uses currently
+      include IT support queues, Systems Administration deployment management,
+      chip design and development problem tracking (both pre-and-post fabrication),
+      and software and hardware bug tracking for luminaries such as Redhat, Loki software,
+      Linux-Mandrake, and VA Systems.  Combined with systems such as CVS, Bonsai,
+      or Perforce SCM, Bugzilla provides a powerful, easy-to-use  solution to
+      configuration management and replication problems
+    </P
+><P
+>      Bugzilla can dramatically increase the productivity and accountability
+      of individual employees by providing a documented workflow and positive
+      feedback for good performance.  How many times do you wake up in the
+      morning, remembering that you were supposed to do *something* today,
+      but you just can't quite remember?  Put it in Bugzilla, and you have a record
+      of it from which you can extrapolate milestones, predict product versions
+      for integration, and by using Bugzilla's e-mail integration features
+      be able to follow the discussion trail that led to critical decisions.
+    </P
+><P
+>      Ultimately, Bugzilla puts the power in your hands to improve your value
+      to your employer or business while providing a usable framework for your natural
+      attention to detail and knowledge store to flourish.
+    </P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H1
+CLASS="SECTION"
+><A
+NAME="HOW"
+>4.3. How do I use Bugzilla?</A
+></H1
+><TABLE
+BORDER="0"
+WIDTH="100%"
+CELLSPACING="0"
+CELLPADDING="0"
+CLASS="EPIGRAPH"
+><TR
+><TD
+WIDTH="45%"
+>&nbsp;</TD
+><TD
+WIDTH="45%"
+ALIGN="LEFT"
+VALIGN="TOP"
+><I
+><P
+><I
+>Hey!  I'm Woody!  Howdy, Howdy, Howdy!</I
+></P
+></I
+></TD
+></TR
+></TABLE
+><P
+>      Bugzilla is a large, complex system.  Describing how to use it
+      requires some time.  If you are only interested in installing or administering
+      a Bugzilla installation, please consult the Installing and Administering
+      Bugzilla portions of this Guide.  This section is principally aimed towards
+      developing end-user mastery of Bugzilla, so you may fully enjoy the benefits
+      afforded by using this reliable open-source bug-tracking software.
+    </P
+><P
+>      Throughout this portion of the Guide, we will refer to user account
+      options available at the Bugzilla test installation,
+      <A
+HREF="http://landfill.tequilarista.org/"
+TARGET="_top"
+>      landfill.tequilarista.org</A
+>.
+      <DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	  Some people have run into difficulties completing this tutorial.  If
+	  you run into problems, please check the updated, online documentation available
+	  at <A
+HREF="http://www.trilobyte.net/barnsons/"
+TARGET="_top"
+>http://www.trilobyte.net/barnsons</A
+>.
+	  If you're still stumped, please subscribe to the newsgroup and provide details of exactly
+	  what's stumping you!  If enough people complain, I'll have to fix it in the next
+	  version of this Guide.  You can subscribe to the newsgroup at
+	  <A
+HREF="news://news.mozilla.org/netscape.public.mozilla.webtools"
+TARGET="_top"
+>	  news://news.mozilla.org/netscape.public.mozilla.webtools</A
+>
+	</P
+></BLOCKQUOTE
+></DIV
+>
+      Although Landfill serves as a great introduction to Bugzilla, it does not offer
+      all the options you would have as a user on your own installation of Bugzilla,
+      nor can it do more than serve as a general introduction to Bugzilla.  Additionally,
+      Landfill often runs cutting-edge versions of Bugzilla for testing, so some things
+      may work slightly differently than mentioned here.
+    </P
+><DIV
+CLASS="SECTION"
+><HR><H2
+CLASS="SECTION"
+><A
+NAME="MYACCOUNT"
+>4.3.1. Create a Bugzilla Account</A
+></H2
+><P
+>	First thing's first!  If you want to use Bugzilla, first you need to create
+	an account.  Consult with the administrator responsible for your installation
+	of Bugzilla for the URL you should use to access it.
+	If you're test-driving the end-user Bugzilla experience, use this URL:
+	<A
+HREF="http://landfill.tequilarista.org/mozilla/bugzilla/"
+TARGET="_top"
+>	  http://landfill.tequilarista.org/mozilla/bugzilla/</A
+>
+      </P
+><P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>	    Click the "Open a new Bugzilla account" link.
+	  </P
+></LI
+><LI
+><P
+>	    Enter your "E-mail address" and "Real Name" (or whatever name you want to call yourself)
+	    in the spaces provided, then select the "Create Account" button.
+	  </P
+></LI
+><LI
+><P
+>	    Within 5-10 minutes, you should receive an email to the address you provided above,
+	    which contains your login name (generally the same as the email address), and
+	    a password you can use to access your account.  This password is randomly generated,
+	    and should be changed at your nearest opportunity (we'll go into how to do it later).
+	  </P
+></LI
+><LI
+><P
+>	    Click the "Log In" link in the yellow area at the bottom of the page in your browser,
+	    then enter your "E-mail address" and "Password" you just received into the spaces provided,
+	    and select "Login".
+	    <DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>		If you ever forget your password, you can come back to this page, enter your
+		"E-mail address", then select the "E-mail me a password" button to have your password
+		mailed to you again so that you can login.
+	      </P
+></BLOCKQUOTE
+></DIV
+>
+	    <DIV
+CLASS="CAUTION"
+><P
+></P
+><TABLE
+CLASS="CAUTION"
+BORDER="1"
+WIDTH="90%"
+><TR
+><TD
+ALIGN="CENTER"
+><B
+>Caution</B
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+><P
+>		Many modern browsers include an "Auto-Complete" or "Form Fill" feature to
+		remember the user names and passwords you type in at many sites.  Unfortunately,
+		sometimes they attempt to "guess" what you will put in as your password, and guess
+		wrong.  If you notice a text box is already filled out, please overwrite the contents
+		of the text box so you can be sure to input the correct information.
+	      </P
+></TD
+></TR
+></TABLE
+></DIV
+>
+	  </P
+></LI
+></OL
+><P
+>	Congratulations!  If you followed these directions, you now are the
+	proud owner of a user account on landfill.tequilarista.org (Landfill) or
+	your local Bugzilla install.  You should now see in your browser a
+	page called the "Bugzilla Query Page".  It may look daunting, but
+	with this Guide to walk you through it, you will master it in no time.
+      </P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H2
+CLASS="SECTION"
+><A
+NAME="QUERY"
+>4.3.2. The Bugzilla Query Page</A
+></H2
+><P
+>	The Bugzilla Query Page is the heart and soul of Bugzilla.  It is the master
+	interface where you can find any bug report, comment, or patch currently in the Bugzilla
+	system.  We'll go into how to create your own bug report later on.
+      </P
+><P
+>	There are efforts underway to simplify query usage.  If you have a local installation
+	of Bugzilla 2.12 or higher, you should have "quicksearch.html" available
+	to use and simplify your searches.  There is also, or shortly will be, a helper
+	for the query interface, called "queryhelp.cgi".  Landfill tends to run the latest code,
+	so these two utilities should be available there for your perusal.
+      </P
+><P
+>	At this point, please visit the main Bugzilla site,
+	<A
+HREF="http://bugzilla.mozilla.org/query.cgi"
+TARGET="_top"
+>	bugzilla.mozilla.org</A
+>, to see a more fleshed-out query page.
+      </P
+><P
+>	The first thing you need to notice about the Bugzilla Query Page is that
+	nearly every box you see on your screen has a hyperlink nearby, explaining what
+	it is or what it does.  Near the upper-left-hand corner of your browser window
+	you should see the word "Status" underlined.  Select it.
+      </P
+><P
+>	Notice the page that popped up?  Every underlined word you see on your screen
+	is a hyperlink that will take you to context-sensitive help.
+	Click around for a while, and learn what everything here does.  To return
+	to the query interface after pulling up a help page, use the "Back" button in
+	your browser.
+      </P
+><P
+>	I'm sure that after checking out the online help, you are now an Expert
+	on the Bugzilla Query Page.  If, however, you feel you haven't mastered it yet,
+	let me walk you through making a few successful queries to find out what there
+	are in the Bugzilla bug-tracking system itself.
+      </P
+><P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>	    Ensure you are back on the "Bugzilla Query Page"
+	    Do nothing in the boxes marked "Status", "Resolution", "Platform", "OpSys",
+	    "Priority", or "Severity".  The default query for "Status" is to find all bugs that
+	    are NEW, ASSIGNED, or REOPENED, which is what we want.  If you don't select anything
+	    in the other 5 scrollboxes there, then you are saying that "any of these are OK";
+	    we're not locking ourselves into only finding bugs on the "DEC" Platform, or "Windows 95"
+	    OpSys (Operating System).  You're smart, I think you have it figured out.
+	  </P
+><P
+>	    Basically, selecting <EM
+>anything</EM
+> on the query page narrows your search
+	    down.  Leaving stuff unselected, or text boxes unfilled, broadens your search!
+	  </P
+></LI
+><LI
+><P
+>	    You see the box immediately below the top six boxes that contains an "Email" text box, 
+	    with the words "matching as", a drop-down selection box, then some checkboxes with
+	    "Assigned To" checked by default?  This allows you to filter your search down based upon
+	    email address.  Let's put my email address in there, and see what happens.
+	  </P
+><P
+>	    Type "barnboy@trilobyte.net" in the top Email text box.
+	  </P
+></LI
+><LI
+><P
+>	    Let's narrow the search some more.  Scroll down until you find the box with the word
+	    "Program" over the top of it.  This is where we can narrow our search down to only
+	    specific products (software programs or product lines) in our Bugzilla database.
+	    Please notice the box is a <EM
+>scrollbox</EM
+>.  Using the down arrow on the
+	    scrollbox, scroll down until you can see an entry called "Webtools".  Select this entry.
+	  </P
+></LI
+><LI
+><P
+>	    Did you notice that some of the boxes to the right changed when you selected "Webtools"?
+	    Every Program (or Product) has different Versions, Components, and Target Milestones associated
+	    with it.  A "Version" is the number of a software program.
+	    <DIV
+CLASS="EXAMPLE"
+><A
+NAME="AEN1095"
+></A
+><P
+><B
+>Example 4-1. Some Famous Software Versions</B
+></P
+><DIV
+CLASS="INFORMALEXAMPLE"
+><A
+NAME="AEN1097"
+></A
+><P
+></P
+><P
+>		  Do you remember the hype in 1995 when Microsoft Windows 95(r) was released?
+		  It may have been several years
+		  ago, but Microsoft(tm) spent over $300 Million advertising this new Version of their
+		  software.  Three years later, they released Microsoft Windows 98(r),
+		  another new version, to great fanfare, and then in 2000 quietly 
+		  released Microsoft Windows ME(Millenium Edition)(r). 
+		</P
+><P
+>		  Software "Versions" help a manufacturer differentiate
+		  their current product from their
+		  previous products.  Most do not identify their products
+		  by the year they were released.
+		  Instead, the "original" version of their software will
+		  often be numbered "1.0", with
+		  small bug-fix releases on subsequent tenths of a digit.  In most cases, it's not
+		  a decimal number; for instance, often 1.9 is an <EM
+>older</EM
+> version
+		  of the software than 1.11,
+		  but is a <EM
+>newer</EM
+> version than 1.1.1.
+		</P
+><P
+>		  In general, a "Version" in Bugzilla should refer to 
+		  <EM
+>released</EM
+>
+		  products, not products that have not yet been released 
+		  to the public.  Forthcoming products
+		  are what the Target Milestone field is for.
+		</P
+><P
+></P
+></DIV
+></DIV
+>
+	  </P
+><P
+>	    A "Component" is a piece of a Product.
+	    It may be a standalone program, or some other logical
+	    division of a Product or Program. 
+	    Normally, a Component has a single Owner, who is responsible
+	    for overseeing efforts to improve that Component.
+	    <DIV
+CLASS="EXAMPLE"
+><A
+NAME="AEN1105"
+></A
+><P
+><B
+>Example 4-2. Mozilla Webtools Components</B
+></P
+><DIV
+CLASS="INFORMALEXAMPLE"
+><A
+NAME="AEN1107"
+></A
+><P
+></P
+><P
+>		  Mozilla's "Webtools" Product is composed of several pieces (Components):
+		  <P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+><EM
+>Bonsai</EM
+>,
+		      a tool to show recent changes to Mozilla</TD
+></TR
+><TR
+><TD
+><EM
+>Bugzilla</EM
+>,
+		      a defect-tracking tool</TD
+></TR
+><TR
+><TD
+><EM
+>Build</EM
+>,
+		      a tool to automatically compile source code
+		      into machine-readable form</TD
+></TR
+><TR
+><TD
+><EM
+>Despot</EM
+>,
+		      a program that controls access to the other Webtools</TD
+></TR
+><TR
+><TD
+><EM
+>LXR</EM
+>,
+		      a utility that automatically marks up text files
+		    to make them more readable</TD
+></TR
+><TR
+><TD
+><EM
+>MozBot</EM
+>,
+		      a "robot" that announces changes to Mozilla in Chat</TD
+></TR
+><TR
+><TD
+><EM
+>TestManager</EM
+>,
+		      a tool to help find bugs in Mozilla</TD
+></TR
+><TR
+><TD
+><EM
+>Tinderbox</EM
+>,
+		      which displays reports from Build</TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+>
+		</P
+><P
+>		  A different person is responsible for each of these Components.
+		  Tara Hernandez keeps
+		  the "Bugzilla" component up-to-date.
+		</P
+><P
+></P
+></DIV
+></DIV
+>
+	  </P
+><P
+>	    A "Milestone", or "Target Milestone" is a often a planned future "Version" of a
+	    product.  In many cases, though, Milestones simply represent significant dates for
+	    a developer.  Having certain features in your Product is frequently
+	    tied to revenue (money)
+	    the developer will receive if the features work by the time she 
+	    reaches the Target Milestone.
+	    Target Milestones are a great tool to organize your time.
+	    If someone will pay you $100,000 for
+	    incorporating certain features by a certain date,
+	    those features by that Milestone date become
+	    a very high priority.  Milestones tend to be highly malleable creatures,
+	    though, that appear
+	    to be in reach but are out of reach by the time the important day arrives.
+	  </P
+><P
+>	    The Bugzilla Project has set up Milestones for future 
+	    Bugzilla versions 2.14, 2.16, 2.18, 3.0, etc.  However,
+	    a Target Milestone can just as easily be a specific date,
+	    code name, or weird alphanumeric
+	    combination, like "M19".
+	  </P
+></LI
+><LI
+><P
+>	    OK, now let's select the "Bugzilla" component from its scrollbox.
+	  </P
+></LI
+><LI
+><P
+>	    Skip down the page a bit -- do you see the "submit query" button?
+	    Select it, and let's run
+	    this query!
+	  </P
+></LI
+><LI
+><P
+>	    Congratulations!  You've completed your first Query, and have before you the Bug List
+	    of the author of this Guide, Matthew P. Barnson (barnboy@trilobyte.net).  If I'm
+	    doing well,
+	    you'll have a cryptic "Zarro Boogs Found" message on your screen.  It is just
+	    a happy hacker's way of saying "Zero Bugs Found".  However, I am fairly certain I will
+	    always have some bugs assigned to me that aren't done yet,
+	    so you won't often see that message!
+	  </P
+></LI
+></OL
+><P
+>	I encourage you to click the bug numbers in the left-hand column and examine
+	my bugs.  Also notice that if you click the underlined 
+	links near the top of this page, they do
+	not take you to context-sensitive help here,
+	but instead sort the columns of bugs on the screen!
+	When you need to sort your bugs by priority, severity,
+	or the people they are assigned to, this
+	is a tremendous timesaver.
+      </P
+><P
+>	A couple more interesting things about the Bug List page:
+	<P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+><EM
+>Change Columns</EM
+>:
+	    by selecting this link, you can show all kinds
+	    of information in the Bug List</TD
+></TR
+><TR
+><TD
+><EM
+>Change several bugs at once</EM
+>:
+	    If you have sufficient rights to change all
+	    the bugs shown in the Bug List, you can mass-modify them.
+	    This is a big time-saver.</TD
+></TR
+><TR
+><TD
+><EM
+>Send mail to bug owners</EM
+>:
+	    If you have many related bugs, you can request
+	    an update from every person who owns the bugs in
+	    the Bug List asking them the status.</TD
+></TR
+><TR
+><TD
+><EM
+>Edit this query</EM
+>:
+	    If you didn't get exactly the results you were looking for,
+	    you can return to the Query page through this link and make
+	    small revisions to the query you just made so
+	    you get more accurate results.</TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+>
+      </P
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	  There are many more options to the Bugzilla Query Page 
+	  and the Bug List than I have shown you.
+	  But this should be enough for you to learn to get around.
+	  I encourage you to check out the
+	  <A
+HREF="http://www.mozilla.org/bugs/"
+TARGET="_top"
+>Bugzilla Home Page</A
+>
+	  to learn about the Anatomy
+	  and Life Cycle of a Bug before continuing.
+	</P
+></BLOCKQUOTE
+></DIV
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H2
+CLASS="SECTION"
+><A
+NAME="BUGREPORTS"
+>4.3.3. Creating and Managing Bug Reports</A
+></H2
+><TABLE
+BORDER="0"
+WIDTH="100%"
+CELLSPACING="0"
+CELLPADDING="0"
+CLASS="EPIGRAPH"
+><TR
+><TD
+WIDTH="45%"
+>&nbsp;</TD
+><TD
+WIDTH="45%"
+ALIGN="LEFT"
+VALIGN="TOP"
+><I
+><P
+><I
+>And all this time, I thought we were taking bugs <EM
+>out</EM
+>...</I
+></P
+></I
+></TD
+></TR
+></TABLE
+><DIV
+CLASS="SECTION"
+><HR><H3
+CLASS="SECTION"
+><A
+NAME="BUG_WRITING"
+>4.3.3.1. Writing a Great Bug Report</A
+></H3
+><P
+>	  Before we plunge into writing your first bug report, I encourage you to read 
+	  <A
+HREF="http://www.mozilla.org/quality/bug-writing-guidelines.html"
+TARGET="_top"
+>Mozilla.org's Bug
+	    Writing Guidelines</A
+>.  While some of the advice is Mozilla-specific, the basic
+	  principles of reporting Reproducible, Specific bugs, isolating the Product you are
+	  using, the Version of the Product, the Component which failed, the Hardware Platform, and
+	  Operating System you were using at the time of the failure go a long way toward ensuring accurate,
+	  responsible fixes for the bug that bit you.
+	</P
+><P
+>	  While you are at it, why not learn how to find previously reported bugs?  Mozilla.org
+	  has published a great tutorial on finding duplicate bugs, available at
+	  <A
+HREF="http://www.mozilla.org/quality/help/beginning-duplicate-finding.html"
+TARGET="_top"
+>	    http://www.mozilla.org/quality/help/beginning-duplicate-finding.html</A
+>.
+	</P
+><P
+>	  I realize this was a lot to read.  However, understanding the mentality of writing
+	  great bug reports will help us on the next part!
+	</P
+><P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>	      Go back to <A
+HREF="http://landfill.tequilarista.org/mozilla/bugzilla/"
+TARGET="_top"
+>		http://landfill.tequilarista.org/mozilla/bugzilla/</A
+>
+	      in your browser.
+	    </P
+></LI
+><LI
+><P
+>	      Select the 
+	      <A
+HREF="http://landfill.tequilarista.org/mozilla/bugzilla/enter_bug.cgi"
+TARGET="_top"
+>		Enter a new bug report</A
+> link.
+	    </P
+></LI
+><LI
+><P
+>	      Select a product.
+	    </P
+></LI
+><LI
+><P
+>	      Now you should be at the "Enter Bug" form.
+	      The "reporter" should have been automatically filled out
+	      for you (or else Bugzilla prompted you to Log In again
+	      -- you did keep the email with your username
+	      and password, didn't you?).
+	    </P
+></LI
+><LI
+><P
+>	      Select a Component in the scrollbox.
+	    </P
+></LI
+><LI
+><P
+>	      Bugzilla should have made reasonable guesses, based upon your browser,
+	      for the "Platform" and "OS" drop-down
+	      boxes.  If those are wrong, change them -- if you're on an SGI box
+	      running IRIX, we want to know!
+	    </P
+></LI
+><LI
+><P
+>	      Fill in the "Assigned To" box with the email address you provided earlier. 
+	      This way you don't end up sending copies of your bug to lots of other people,
+	      since it's just a test bug.
+	    </P
+></LI
+><LI
+><P
+>	      Leave the "CC" text box blank. 
+	      Fill in the "URL" box with "http://www.mozilla.org".
+	    </P
+></LI
+><LI
+><P
+>	      Enter "The Bugzilla Guide" in the Summary text box,
+	      and place any comments you have on this
+	      tutorial, or the Guide in general, into the Description box.
+	    </P
+></LI
+></OL
+><P
+>	  Voila!  Select "Commit" and send in your bug report!
+	  Next we'll look at resolving bugs.
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H3
+CLASS="SECTION"
+><A
+NAME="BUG_MANAGE"
+>4.3.3.2. Managing your Bug Reports</A
+></H3
+><P
+>	  OK, you should have a link to the bug you just created near the top of your page.
+	  It should say
+	  "Bug XXXX posted", with a link to the right saying "Back to BUG# XXXX".
+	  Select this link.
+	</P
+><P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>	      Scroll down a bit on the subsequent page,
+	      until you see the "Resolve bug, changing resolution to (dropdown box).
+	      Normally, you would
+	      "Accept bug (change status to ASSIGNED)", fix it, and then resolve.
+	      But in this case, we're
+	      going to short-circuit the process because this wasn't a real bug.
+	      Change the dropdown next to
+	      "Resolve Bug" to "INVALID", make sure the radio button is
+	      marked next to "Resolve Bug", then
+	      click "Commit".
+	    </P
+></LI
+><LI
+><P
+>	      Hey!  It said it couldn't take the change in a big red box!
+	      That's right, you must specify
+	      a Comment in order to make this change.  Select the "Back"
+	      button in your browser, add a
+	      Comment, then try Resolving the bug with INVALID status again.
+	      This time it should work.
+	    </P
+></LI
+></OL
+><P
+>	  You have now learned the basics of Bugzilla navigation,
+	  entering a bug, and bug maintenance.
+	  I encourage you to explore these features, and see what you can do with them!
+	  We'll spend no more time on individual Bugs or Queries from this point on, so you are
+	  on your own there.
+	</P
+><P
+>	  But I'll give a few last hints!
+	</P
+><P
+>	  There is a <A
+HREF="http://bugzilla.mozilla.org/help.html"
+TARGET="_top"
+>CLUE</A
+>
+	  on the Query page
+	  that will teach you more how to use the form.
+	</P
+><P
+>	  If you click the hyperlink on the
+	  <A
+HREF="http://bugzilla.mozilla.org/describecomponents.cgi"
+TARGET="_top"
+>Component</A
+>
+	  box of the Query page, you will be presented a form that will describe what all
+	  the components are.
+	</P
+><P
+>	  Possibly the most powerful feature of the Query page is the 
+	  <A
+HREF="http://bugzilla.mozilla.org/booleanchart.html"
+TARGET="_top"
+>Boolean Chart</A
+> section.
+	  It's a bit confusing to use the first time, but can provide unparalleled
+	  flexibility in your queries,
+	  allowing you to build extremely powerful requests.
+	</P
+><P
+>	  Finally, you can build some nifty 
+	  <A
+HREF="http://bugzilla.mozilla.org/reports.cgi"
+TARGET="_top"
+>Reports</A
+>
+	  using the "Bug Reports" link near the bottom of the query page, and also
+	  available via the "Reports" link
+	  at the footer of each page.
+	</P
+></DIV
+></DIV
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H1
+CLASS="SECTION"
+><A
+NAME="INIT4ME"
+>4.4. What's in it for me?</A
+></H1
+><TABLE
+BORDER="0"
+WIDTH="100%"
+CELLSPACING="0"
+CELLPADDING="0"
+CLASS="EPIGRAPH"
+><TR
+><TD
+WIDTH="45%"
+>&nbsp;</TD
+><TD
+WIDTH="45%"
+ALIGN="LEFT"
+VALIGN="TOP"
+><I
+><P
+><I
+>Indiana, it feels like we walking on fortune cookies!</I
+></P
+><P
+><I
+>These ain't fortune cookies, kid...</I
+></P
+></I
+></TD
+></TR
+></TABLE
+><P
+>      Customized User Preferences offer tremendous versatility to
+      your individual Bugzilla experience.
+      Let's plunge into what you can do!  The first step is to click
+      the "Edit prefs" link at the footer of each page once you
+      have logged in to
+      <A
+HREF="http://landfill.tequilarista.org/mozilla/bugzilla/query.cgi?GoAheadAndLogIn=1"
+TARGET="_top"
+>      Landfill</A
+>.
+    </P
+><DIV
+CLASS="SECTION"
+><HR><H2
+CLASS="SECTION"
+><A
+NAME="ACCOUNTSETTINGS"
+>4.4.1. Account Settings</A
+></H2
+><P
+>	On this page, you can change your basic Account Settings,
+	including your password and full name.
+	For security reasons, in order to change anything on this page you
+	must type your <EM
+>current</EM
+>
+	password into the "Old Password" field. 
+	If you wish to change your password, type the new password you
+	want into the "New Password" field and again into the "Re-enter 
+	new password" field to ensure
+	you typed your new password correctly.  Select the "Submit" button and you're done!
+      </P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H2
+CLASS="SECTION"
+><A
+NAME="EMAILSETTINGS"
+>4.4.2. Email Settings</A
+></H2
+><DIV
+CLASS="SECTION"
+><H3
+CLASS="SECTION"
+><A
+NAME="NOTIFICATION"
+>4.4.2.1. Email Notification</A
+></H3
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	    The email notification settings described below have been obsoleted in Bugzilla 2.12, and
+	    this section will be replaced with a comprehensive description of the amazing array of 
+	    new options at your disposal.  However, in the meantime, throw this chunk out the window
+	    and go crazy with goofing around with different notification options.
+	  </P
+></BLOCKQUOTE
+></DIV
+><P
+>	  Ahh, here you can reduce or increase the amount of email sent you from Bugzilla!
+	  In the drop-down "Notify me of changes to", select one of
+	  <P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+><EM
+>All qualifying bugs</EM
+>: sends you every change to every bug
+	      where your name is somewhere on it, regardless of who changed it.</TD
+></TR
+><TR
+><TD
+><EM
+>Only those bugs which I am listed in the CC line</EM
+>: prevents
+	      you from receiving mail for which you are the reporter,'
+	      owner, or QA contact.  If you are on the CC
+	      list, presumably someone had a <EM
+>good</EM
+>
+	      reason for you to get the email.</TD
+></TR
+><TR
+><TD
+><EM
+>All qulifying bugs except those which I change</EM
+>:
+	      This is the default, and
+	      a sensible setting.  If someone else changes your bugs, you will get emailed,
+	      but if you change bugs
+	      yourself you will receive no notification of the change.</TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+>
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H3
+CLASS="SECTION"
+><A
+NAME="NEWEMAILTECH"
+>4.4.2.2. New Email Technology</A
+></H3
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	    This option may not be available in all Bugzilla installations, depending upon
+	    the preferences of the systems administrator responsible for the setup of your Bugzilla.
+	    However, if you really want this functionality, ask her to "enable newemailtech
+	    in Params"
+	    and "make it the default for all new users", referring her to the Administration section
+	    of this Guide.
+	  </P
+></BLOCKQUOTE
+></DIV
+><P
+>	  Disregard the warnings about "experimental and bleeding edge"; the code to handle email
+	  in a cleaner manner than that historically used for Bugzilla is
+	  quite robust and well-tested now.
+	</P
+><P
+>	  I recommend you enable the option, "Click here to sign up (and risk any bugs)".
+	  Your email-box
+	  will thank you for it.  The fundamental shift in "newemailtech" is away from standard UNIX
+	  "diff" output, which is quite ugly, to a prettier, better laid-out email.
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H3
+CLASS="SECTION"
+><A
+NAME="WATCHSETTINGS"
+>4.4.2.3. "Watching" Users</A
+></H3
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	    This option may not be available in all Bugzilla installations, depending upon
+	    the preferences of the systems administrator responsible for the setup of your Bugzilla.
+	    However, if you really want this functionality, ask her to "enable watchers in Params".
+	  </P
+></BLOCKQUOTE
+></DIV
+><P
+>	  By entering user email names into the "Users to watch" text entry box, delineated by commas,
+	  you can watch bugs of other users.  This powerful functionality enables seamless transitions
+	  as developers change projects, managers wish to get in touch with the issues faced by their
+	  direct reports, or users go on vacation.  If any of these three situations apply
+	  to you, you will undoubtedly find this feature quite convenient.
+	</P
+></DIV
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H2
+CLASS="SECTION"
+><A
+NAME="FOOTERSETTINGS"
+>4.4.3. Page Footer</A
+></H2
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	  By default, this page is quite barren.  However, go explore the Query Page some more; you will
+	  find that you can store numerous queries on the server, so if you regularly run a particular query
+	  it is just a drop-down menu away.  On this page of Preferences, if you have many stored
+	  queries you can elect to have them always one-click away!
+	</P
+></BLOCKQUOTE
+></DIV
+><P
+>	If you have many stored queries on the server, here you will find individual drop-downs for each
+	stored query.  Each drop-down gives you the option of that query appearing on the footer of every
+	page in Bugzilla!  This gives you powerful one-click access to any complex searches you may set up,
+	and is an excellent way to impress your boss...
+      </P
+><DIV
+CLASS="TIP"
+><BLOCKQUOTE
+CLASS="TIP"
+><P
+><B
+>Tip: </B
+>By default, the "My Bugs" link appears at the bottom of each page.  However, this query
+	gives you both the bugs you have reported, as well as those you are assigned.  One of the most
+	common uses for this page is to remove the "My Bugs" link, replacing it with two other queries,
+	commonly called "My Bug Reports" and "My Bugs" (but only referencing bugs assigned to you).  This
+	allows you to distinguish those bugs you have reported from those you are assigned.  I commonly
+	set up complex Boolean queries in the Query page and link them to my footer in this page.  When
+	they are significantly complex, a one-click reference can save hours of work.</P
+></BLOCKQUOTE
+></DIV
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H2
+CLASS="SECTION"
+><A
+NAME="PERMISSIONSETTINGS"
+>4.4.4. Permissions</A
+></H2
+><P
+>	This is a purely informative page which outlines your current permissions on
+	this installation of Bugzilla.  If you have permissions to grant certain permissions to
+	other users, the "other users" link appears on this page as well as the footer.
+	For more information regarding user administration, please consult the Administration
+	section of this Guide.
+      </P
+></DIV
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H1
+CLASS="SECTION"
+><A
+NAME="USINGBZ-CONC"
+>4.5. Using Bugzilla-Conclusion</A
+></H1
+><P
+>      Thank you for reading through this portion of the Bugzilla Guide.  I anticipate
+      it may not yet meet the needs of all readers.  If you have additional comments or
+      corrections to make, please submit your contributions to the
+      <A
+HREF="mailto://mozilla-webtools@mozilla.org"
+TARGET="_top"
+>mozilla-webtools</A
+>
+      mailing list/newsgroup.  The mailing list is mirrored to the netscape.public.mozilla.webtools
+      newsgroup, and the newsgroup is mirrored to mozilla-webtools@mozilla.org
+    </P
+></DIV
+></DIV
+><DIV
+CLASS="CHAPTER"
+><HR><H1
+><A
+NAME="INTEGRATION"
+>Chapter 5. Integrating Bugzilla with Third-Party Tools</A
+></H1
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="BONSAI"
+>5.1. Bonsai</A
+></H1
+><P
+>We need Bonsai integration information.</P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H1
+CLASS="SECTION"
+><A
+NAME="CVS"
+>5.2. CVS</A
+></H1
+><P
+>We need CVS integration information</P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H1
+CLASS="SECTION"
+><A
+NAME="SCM"
+>5.3. Perforce SCM</A
+></H1
+><P
+>      Richard Brooksby created a Perforce integration tool for Bugzilla and TeamTrack.
+      You can find the main project page at
+      <A
+HREF="http://www.ravenbrook.com/project/p4dti/"
+TARGET="_top"
+>	http://www.ravenbrook.com/project/p4dti</A
+>.  "p4dti" is now an officially
+      supported product from Perforce, and you can find the "Perforce Public Depot"
+      p4dti page at <A
+HREF="http://public.perforce.com/public/perforce/p4dti/index.html"
+TARGET="_top"
+>	http://public.perforce.com/public/perforce/p4dti/index.html</A
+>.
+    </P
+><P
+>      Integration of Perforce with Bugzilla, once patches are applied, is fairly seamless.  However,
+      p4dti is a patch against the Bugzilla 2.10 release, not the current 2.12 release.  I anticipate
+      patches for 2.12 will be out shortly.  Check the project page regularly for updates, or
+      take the given patches and patch it manually.  p4dti is designed to support multiple defect
+      trackers, and maintains its own documentation for it.  Please consult the pages linked
+      above for further information.
+    </P
+><P
+>      Right now, there is no way to synchronize the Bug ID and the Perforce Transaction Number, or
+      to change the Bug ID to read (PRODUCT).bugID unless you hack it in.  Additionally, if you
+      have synchronization problems, the easiest way to avoid them is to only put the bug
+      information, comments, etc. into Bugzilla, and not into the Perforce change records.
+      They will link anyway; merely reference the bug ID fixed in your change description,
+      and put a comment into Bugzilla
+      giving the change ID that fixed the Bugzilla bug.  It's a process issue, not a technology
+      question.
+    </P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H1
+CLASS="SECTION"
+><A
+NAME="TINDERBOX"
+>5.4. Tinderbox</A
+></H1
+><P
+>We need Tinderbox integration information</P
+></DIV
+></DIV
+><DIV
+CLASS="CHAPTER"
+><HR><H1
+><A
+NAME="FUTURE"
+>Chapter 6. The Future of Bugzilla</A
+></H1
+><TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%"
+><TR
+><TD
+><PRE
+CLASS="SYNOPSIS"
+>Bugzilla's Future.  Much of this is the present, now.</PRE
+></TD
+></TR
+></TABLE
+><DIV
+CLASS="SECTION"
+><HR><H1
+CLASS="SECTION"
+><A
+NAME="SPAMLITE"
+>6.1. Reducing Spam</A
+></H1
+><P
+><P
+CLASS="LITERALLAYOUT"
+>Those&nbsp;who&nbsp;use&nbsp;Bugzilla&nbsp;frequently&nbsp;are&nbsp;probably&nbsp;used&nbsp;to&nbsp;notification&nbsp;spam<br>
+-&nbsp;unwanted&nbsp;or&nbsp;unnecessary&nbsp;notifications.&nbsp;&nbsp;A&nbsp;number&nbsp;of&nbsp;proposals&nbsp;have<br>
+been&nbsp;put&nbsp;forward&nbsp;to&nbsp;attempt&nbsp;to&nbsp;reduce&nbsp;this.<br>
+<br>
+1.&nbsp;Reduce&nbsp;CC&nbsp;Spam<br>
+<br>
+Some&nbsp;of&nbsp;you&nbsp;probably&nbsp;know&nbsp;me&nbsp;as&nbsp;that&nbsp;guy&nbsp;who&nbsp;CCs&nbsp;on&nbsp;heaps&nbsp;and&nbsp;heaps&nbsp;of<br>
+bugs.&nbsp;&nbsp;Just&nbsp;as&nbsp;you&nbsp;get&nbsp;a&nbsp;lot&nbsp;of&nbsp;CC&nbsp;changes&nbsp;from&nbsp;me,&nbsp;so&nbsp;do&nbsp;I&nbsp;get&nbsp;a&nbsp;lot<br>
+from&nbsp;others.&nbsp;&nbsp;Why&nbsp;should&nbsp;CC&nbsp;changes&nbsp;send&nbsp;out&nbsp;email&nbsp;notifications?<br>
+<br>
+It's&nbsp;not&nbsp;necessarily&nbsp;the&nbsp;best&nbsp;idea&nbsp;to&nbsp;just&nbsp;remove&nbsp;the&nbsp;CC&nbsp;spam,&nbsp;there&nbsp;are<br>
+other&nbsp;issues&nbsp;too,&nbsp;like&nbsp;the&nbsp;difficulty&nbsp;of&nbsp;adding&nbsp;to&nbsp;large&nbsp;CC&nbsp;fields.<br>
+<br>
+For&nbsp;these&nbsp;reasons&nbsp;and&nbsp;more,&nbsp;an&nbsp;RFE&nbsp;for&nbsp;a&nbsp;per&nbsp;user&nbsp;"BCC"&nbsp;facility&nbsp;exists<br>
+that&nbsp;people&nbsp;could&nbsp;use&nbsp;to&nbsp;silently&nbsp;and&nbsp;privately&nbsp;track&nbsp;bugs,&nbsp;in&nbsp;a&nbsp;similar<br>
+way&nbsp;to&nbsp;voting&nbsp;today,&nbsp;but&nbsp;applying&nbsp;to&nbsp;an&nbsp;unlimited&nbsp;number&nbsp;of&nbsp;bugs.&nbsp;&nbsp;See<br>
+"http://bugzilla.mozilla.org/show_bug.cgi?id=7345".<br>
+<br>
+2.&nbsp;Bulk&nbsp;Changes<br>
+<br>
+You&nbsp;know&nbsp;the&nbsp;drill&nbsp;-&nbsp;a&nbsp;large&nbsp;milestone&nbsp;change,&nbsp;a&nbsp;component&nbsp;movement,<br>
+whatever,&nbsp;and&nbsp;lots&nbsp;of&nbsp;notifications&nbsp;are&nbsp;generated.&nbsp;&nbsp;If&nbsp;there's&nbsp;enough<br>
+maybe&nbsp;you'll&nbsp;just&nbsp;go&nbsp;delete,&nbsp;delete,&nbsp;delete,&nbsp;whoops,&nbsp;there&nbsp;goes&nbsp;another<br>
+notification&nbsp;that&nbsp;wasn't&nbsp;from&nbsp;the&nbsp;bulk&nbsp;change&nbsp;you&nbsp;missed.<br>
+<br>
+Shouldn't&nbsp;bulk&nbsp;changes&nbsp;send&nbsp;out&nbsp;one&nbsp;notification?&nbsp;&nbsp;A&nbsp;proposal&nbsp;for&nbsp;this<br>
+is&nbsp;at&nbsp;"http://bugzilla.mozilla.org/show_bug.cgi?id=26943".<br>
+<br>
+3.&nbsp;Configurable&nbsp;Notification&nbsp;Criteria<br>
+<br>
+It&nbsp;would&nbsp;be&nbsp;good&nbsp;if&nbsp;you&nbsp;could&nbsp;choose&nbsp;what&nbsp;you&nbsp;want&nbsp;to&nbsp;receive.&nbsp;&nbsp;There<br>
+are&nbsp;two&nbsp;parts&nbsp;to&nbsp;this.<br>
+<br>
+(a)&nbsp;Choose&nbsp;a&nbsp;selection&nbsp;of&nbsp;bugs&nbsp;you're&nbsp;interested&nbsp;in.&nbsp;&nbsp;This&nbsp;would&nbsp;be<br>
+similar&nbsp;to&nbsp;CC&nbsp;except&nbsp;you&nbsp;let&nbsp;the&nbsp;set&nbsp;be&nbsp;computed&nbsp;from&nbsp;selection&nbsp;criteria<br>
+rather&nbsp;than&nbsp;limited&nbsp;to&nbsp;the&nbsp;bugs&nbsp;your&nbsp;name&nbsp;is&nbsp;on.&nbsp;&nbsp;There&nbsp;is&nbsp;currently&nbsp;a<br>
+limited&nbsp;version&nbsp;of&nbsp;this&nbsp;in&nbsp;the&nbsp;bugzilla&nbsp;preferences,&nbsp;ie&nbsp;"all&nbsp;qualifying<br>
+bugs"/"all&nbsp;qualifying&nbsp;bugs&nbsp;except&nbsp;the&nbsp;ones&nbsp;I&nbsp;change"/"only&nbsp;those&nbsp;bugs<br>
+which&nbsp;I&nbsp;am&nbsp;listed&nbsp;on&nbsp;the&nbsp;cc&nbsp;line".<br>
+(b)&nbsp;Choose&nbsp;what&nbsp;changes&nbsp;will&nbsp;trigger&nbsp;a&nbsp;notification&nbsp;for&nbsp;the&nbsp;bugs&nbsp;you&nbsp;are<br>
+watching.&nbsp;&nbsp;With&nbsp;this,&nbsp;you&nbsp;could&nbsp;choose&nbsp;whether&nbsp;you&nbsp;want&nbsp;to&nbsp;receive&nbsp;cc,<br>
+dependency&nbsp;and&nbsp;keyword&nbsp;changes,&nbsp;for&nbsp;example.<br>
+<br>
+Both&nbsp;of&nbsp;these&nbsp;proposals&nbsp;live&nbsp;at<br>
+"http://bugzilla.mozilla.org/show_bug.cgi?id=14137".<br>
+Note&nbsp;that&nbsp;they&nbsp;also&nbsp;live&nbsp;at<br>
+"http://bugzilla.mozilla.org/show_bug.cgi?id=17464",&nbsp;and&nbsp;the&nbsp;change&nbsp;<br>
+has&nbsp;been&nbsp;checked&nbsp;in.&nbsp;&nbsp;This&nbsp;is&nbsp;fixed&nbsp;with&nbsp;Bugzilla&nbsp;2.12&nbsp;and&nbsp;is&nbsp;no&nbsp;longer<br>
+an&nbsp;issue.&nbsp;&nbsp;Woo-Hoo!</P
+></P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H1
+CLASS="SECTION"
+><A
+NAME="SEARCHING"
+>6.2. Better Searching</A
+></H1
+><P
+><P
+CLASS="LITERALLAYOUT"
+>Current&nbsp;searching&nbsp;tools&nbsp;in&nbsp;Bugzilla&nbsp;include&nbsp;the&nbsp;querying&nbsp;mechanism,<br>
+special&nbsp;summary&nbsp;reports&nbsp;and&nbsp;dependency&nbsp;trees.&nbsp;&nbsp;This&nbsp;message&nbsp;is&nbsp;about&nbsp;new<br>
+facilities.<br>
+<br>
+1.&nbsp;General&nbsp;Summary&nbsp;Reports<br>
+<br>
+For&nbsp;some&nbsp;time&nbsp;now&nbsp;it&nbsp;has&nbsp;been&nbsp;apparent&nbsp;to&nbsp;me&nbsp;that&nbsp;the&nbsp;query&nbsp;bug&nbsp;list<br>
+leaves&nbsp;a&nbsp;little&nbsp;to&nbsp;be&nbsp;desired&nbsp;in&nbsp;its&nbsp;linear&nbsp;nature.&nbsp;&nbsp;There&nbsp;is&nbsp;a&nbsp;need&nbsp;to<br>
+have&nbsp;categorised&nbsp;subsets,&nbsp;and&nbsp;counts&nbsp;of&nbsp;each&nbsp;category.&nbsp;&nbsp;If&nbsp;you&nbsp;don't<br>
+believe&nbsp;me,&nbsp;how&nbsp;about&nbsp;these&nbsp;facilities&nbsp;already&nbsp;in&nbsp;place&nbsp;or&nbsp;which&nbsp;people<br>
+have&nbsp;asked&nbsp;for:<br>
+<br>
+Most&nbsp;Doomed&nbsp;Reports&nbsp;-&nbsp;Categorised&nbsp;On&nbsp;Assignee,&nbsp;Shows&nbsp;and&nbsp;Counts&nbsp;Number<br>
+of&nbsp;Bugs&nbsp;For&nbsp;Each&nbsp;Assignee<br>
+Bug&nbsp;#15806&nbsp;(Most&nbsp;Voted&nbsp;For&nbsp;Bugs)&nbsp;-&nbsp;Categorised&nbsp;On&nbsp;Product,&nbsp;Shows&nbsp;Bugs<br>
+Voters&nbsp;Most&nbsp;Want&nbsp;Fixed<br>
+Bug&nbsp;#9789&nbsp;(BugAThon&nbsp;Tracking&nbsp;Page)&nbsp;-&nbsp;Categorised&nbsp;On&nbsp;Developer&nbsp;(Subset),<br>
+Counts&nbsp;Number&nbsp;of&nbsp;Bugs<br>
+Bug&nbsp;#9409&nbsp;and&nbsp;#9411&nbsp;-&nbsp;The&nbsp;desire&nbsp;to&nbsp;be&nbsp;able&nbsp;to&nbsp;report&nbsp;on&nbsp;more&nbsp;subsets.<br>
+<br>
+Hopefully&nbsp;you&nbsp;can&nbsp;see&nbsp;the&nbsp;gist&nbsp;of&nbsp;what&nbsp;is&nbsp;desired&nbsp;here.&nbsp;&nbsp;It's&nbsp;a&nbsp;general<br>
+reporting&nbsp;mechanism.<br>
+<br>
+This&nbsp;mechanism&nbsp;lets&nbsp;you&nbsp;choose&nbsp;the&nbsp;subset&nbsp;of&nbsp;bugs&nbsp;to&nbsp;operate&nbsp;on&nbsp;(like<br>
+query),&nbsp;let's&nbsp;you&nbsp;categorise&nbsp;them,&nbsp;possibly&nbsp;along&nbsp;with&nbsp;subcategories&nbsp;and<br>
+counts&nbsp;the&nbsp;number&nbsp;of&nbsp;bugs&nbsp;within&nbsp;each&nbsp;category.&nbsp;&nbsp;It&nbsp;might&nbsp;or&nbsp;might&nbsp;not<br>
+show&nbsp;the&nbsp;actual&nbsp;bugs&nbsp;themselves,&nbsp;and&nbsp;it&nbsp;might&nbsp;limit&nbsp;the&nbsp;number&nbsp;of&nbsp;bugs<br>
+within&nbsp;a&nbsp;category,&nbsp;or&nbsp;categories&nbsp;to&nbsp;report&nbsp;on.<br>
+<br>
+I'm&nbsp;further&nbsp;sure&nbsp;that&nbsp;many&nbsp;applications&nbsp;of&nbsp;this&nbsp;mechanism&nbsp;would&nbsp;only&nbsp;be<br>
+recognised&nbsp;once&nbsp;it&nbsp;was&nbsp;implemented.<br>
+<br>
+The&nbsp;general&nbsp;summary&nbsp;reports&nbsp;bug&nbsp;is&nbsp;at<br>
+"http://bugzilla.mozilla.org/show_bug.cgi?id=12282".<br>
+<br>
+2.&nbsp;Related&nbsp;Bugs<br>
+<br>
+It&nbsp;would&nbsp;be&nbsp;nice&nbsp;to&nbsp;have&nbsp;a&nbsp;field&nbsp;where&nbsp;you&nbsp;could&nbsp;enter&nbsp;other&nbsp;bugs<br>
+related&nbsp;to&nbsp;the&nbsp;current&nbsp;bug&nbsp;-&nbsp;it&nbsp;would&nbsp;be&nbsp;handy&nbsp;for&nbsp;navigation&nbsp;and<br>
+possibly&nbsp;even&nbsp;finding&nbsp;duplicates.&nbsp;&nbsp;See<br>
+"http://bugzilla.mozilla.org/show_bug.cgi?id=12286".<br>
+<br>
+3.&nbsp;Column&nbsp;Specification&nbsp;Support<br>
+<br>
+Currently&nbsp;query&nbsp;seems&nbsp;to&nbsp;get&nbsp;what&nbsp;columns&nbsp;to&nbsp;report&nbsp;on&nbsp;from&nbsp;whatever&nbsp;the<br>
+user&nbsp;last&nbsp;used.&nbsp;&nbsp;This&nbsp;doesn't&nbsp;work&nbsp;well&nbsp;for&nbsp;"prepackaged&nbsp;queries",&nbsp;where<br>
+you&nbsp;followed&nbsp;a&nbsp;link.&nbsp;&nbsp;You&nbsp;can&nbsp;probably&nbsp;add&nbsp;a&nbsp;column&nbsp;by&nbsp;specifying&nbsp;a&nbsp;sort<br>
+column,&nbsp;but&nbsp;this&nbsp;is&nbsp;difficult&nbsp;and&nbsp;suboptimal.<br>
+<br>
+Furthermore,&nbsp;I&nbsp;find&nbsp;that&nbsp;when&nbsp;I&nbsp;want&nbsp;to&nbsp;add&nbsp;a&nbsp;column&nbsp;to&nbsp;a&nbsp;query,&nbsp;it's<br>
+usually&nbsp;a&nbsp;one&nbsp;off&nbsp;and&nbsp;I&nbsp;would&nbsp;prefer&nbsp;it&nbsp;to&nbsp;go&nbsp;away&nbsp;for&nbsp;the&nbsp;next&nbsp;query.&nbsp;<br>
+Hence,&nbsp;it&nbsp;would&nbsp;be&nbsp;nice&nbsp;to&nbsp;specify&nbsp;the&nbsp;columns&nbsp;that&nbsp;appear&nbsp;on&nbsp;the&nbsp;query<br>
+(and&nbsp;general&nbsp;summary&nbsp;report)&nbsp;pages.&nbsp;&nbsp;The&nbsp;default&nbsp;query&nbsp;mechanism&nbsp;should<br>
+be&nbsp;able&nbsp;to&nbsp;let&nbsp;you&nbsp;specify&nbsp;your&nbsp;default&nbsp;columns.<br>
+<br>
+This&nbsp;proposal&nbsp;lives&nbsp;at<br>
+"http://bugzilla.mozilla.org/show_bug.cgi?id=12284".</P
+></P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H1
+CLASS="SECTION"
+><A
+NAME="TRACKINGBUGS"
+>6.3. Description Flags and Tracking Bugs</A
+></H1
+><P
+><P
+CLASS="LITERALLAYOUT"
+>Since&nbsp;I&nbsp;last&nbsp;posted&nbsp;on&nbsp;this&nbsp;issue,&nbsp;we&nbsp;now&nbsp;have&nbsp;"keywords"&nbsp;that&nbsp;solve<br>
+many&nbsp;of&nbsp;the&nbsp;issues&nbsp;of&nbsp;description&nbsp;and&nbsp;status&nbsp;whiteboard&nbsp;keywords.&nbsp;&nbsp;We<br>
+have&nbsp;seen&nbsp;a&nbsp;migration&nbsp;towards&nbsp;keywords,&nbsp;but&nbsp;there&nbsp;is&nbsp;still&nbsp;further&nbsp;to<br>
+go.<br>
+<br>
+Description&nbsp;(&nbsp;+&nbsp;Status&nbsp;Whiteboard&nbsp;)&nbsp;Keywords<br>
+--------------------------------------------<br>
+<br>
+Some&nbsp;description&nbsp;keywords&nbsp;remain.&nbsp;&nbsp;I'd&nbsp;like&nbsp;to&nbsp;hear&nbsp;what&nbsp;reasons,&nbsp;other<br>
+than&nbsp;time,&nbsp;there&nbsp;are&nbsp;for&nbsp;these&nbsp;staying&nbsp;as&nbsp;they&nbsp;are.&nbsp;&nbsp;I'm&nbsp;suspecting&nbsp;many<br>
+are&nbsp;not&nbsp;really&nbsp;being&nbsp;used.&nbsp;&nbsp;Hopefully&nbsp;we&nbsp;can&nbsp;totally&nbsp;remove&nbsp;these<br>
+eventually.<br>
+<br>
+Tracking&nbsp;Bugs<br>
+-------------<br>
+<br>
+When&nbsp;I&nbsp;suggested&nbsp;keywords,&nbsp;I&nbsp;did&nbsp;so&nbsp;to&nbsp;get&nbsp;rid&nbsp;of&nbsp;tracking&nbsp;bugs&nbsp;too,<br>
+though&nbsp;we've&nbsp;had&nbsp;less&nbsp;success&nbsp;on&nbsp;that&nbsp;front.<br>
+<br>
+There&nbsp;are&nbsp;many&nbsp;disadvantages&nbsp;to&nbsp;tracking&nbsp;bugs.<br>
+<br>
+-&nbsp;They&nbsp;can&nbsp;pollute&nbsp;bugs&nbsp;counts,&nbsp;and&nbsp;you&nbsp;must&nbsp;make&nbsp;sure&nbsp;you&nbsp;exclude<br>
+them.&nbsp;&nbsp;I&nbsp;believe&nbsp;the&nbsp;meta&nbsp;keyword&nbsp;might&nbsp;be&nbsp;used&nbsp;for&nbsp;this&nbsp;purpose.<br>
+-&nbsp;They&nbsp;have&nbsp;an&nbsp;assignee&nbsp;but&nbsp;there&nbsp;is&nbsp;nothing&nbsp;to&nbsp;fix,&nbsp;and&nbsp;that&nbsp;person&nbsp;can<br>
+get&nbsp;whined&nbsp;at&nbsp;by&nbsp;Bugzilla.<br>
+-&nbsp;It&nbsp;would&nbsp;be&nbsp;better&nbsp;to&nbsp;craft&nbsp;your&nbsp;own&nbsp;"dependency&nbsp;tree"&nbsp;rather&nbsp;than<br>
+rely&nbsp;on&nbsp;a&nbsp;fixed&nbsp;hierachy&nbsp;in&nbsp;the&nbsp;bug&nbsp;system.<br>
+-&nbsp;In&nbsp;creating&nbsp;a&nbsp;nice&nbsp;little&nbsp;hierachy,&nbsp;many&nbsp;bugs&nbsp;duplicate&nbsp;information<br>
+that&nbsp;should&nbsp;be&nbsp;available&nbsp;in&nbsp;other&nbsp;ways,&nbsp;eg<br>
+"http://bugzilla.mozilla.org/show_bug.cgi?id=12833"&nbsp;which&nbsp;is<br>
+about&nbsp;beta&nbsp;1&nbsp;networking&nbsp;issues.&nbsp;&nbsp;These&nbsp;could&nbsp;fall&nbsp;behind&nbsp;the&nbsp;actual<br>
+data.&nbsp;&nbsp;What&nbsp;tracking&nbsp;bugs&nbsp;are&nbsp;good&nbsp;for,&nbsp;ad&nbsp;hoc&nbsp;lists,&nbsp;is&nbsp;what&nbsp;keywords<br>
+are&nbsp;better&nbsp;for.<br>
+-&nbsp;An&nbsp;automatically&nbsp;generated&nbsp;dependency&nbsp;structure&nbsp;between&nbsp;one&nbsp;"tracking<br>
+bug"&nbsp;and&nbsp;another&nbsp;would&nbsp;be&nbsp;better&nbsp;than&nbsp;a&nbsp;manual&nbsp;one,&nbsp;since&nbsp;it&nbsp;gives&nbsp;exact<br>
+rather&nbsp;than&nbsp;manually&nbsp;set&nbsp;up&nbsp;classifications.<br>
+<br>
+Probably&nbsp;the&nbsp;only&nbsp;feature&nbsp;preventing&nbsp;tracking&nbsp;bugs&nbsp;being&nbsp;replaced&nbsp;is&nbsp;the<br>
+dependency&nbsp;tree.&nbsp;&nbsp;The&nbsp;quintessential&nbsp;tracking&nbsp;bug&nbsp;seems&nbsp;to&nbsp;be&nbsp;bug&nbsp;#7229<br>
+"chofmann's&nbsp;watch&nbsp;list",&nbsp;which&nbsp;probably&nbsp;has&nbsp;about&nbsp;a&nbsp;couple&nbsp;of&nbsp;hundred<br>
+bugs&nbsp;at&nbsp;various&nbsp;levels,&nbsp;which&nbsp;allows&nbsp;a&nbsp;nice&nbsp;visualisation.<br>
+<br>
+Before&nbsp;keywords&nbsp;can&nbsp;replace&nbsp;tracking&nbsp;bugs&nbsp;better&nbsp;visualisation&nbsp;is&nbsp;going<br>
+to&nbsp;be&nbsp;required.&nbsp;&nbsp;General&nbsp;summary&nbsp;reports&nbsp;and&nbsp;dependency&nbsp;forests&nbsp;of&nbsp;a&nbsp;bug<br>
+list&nbsp;("http://bugzilla.mozilla.org/show_bug.cgi?id=12992")&nbsp;could&nbsp;both<br>
+help,&nbsp;but&nbsp;neither&nbsp;solves&nbsp;the&nbsp;problem&nbsp;totally.&nbsp;&nbsp;Perhaps&nbsp;keywords&nbsp;within<br>
+keywords&nbsp;would&nbsp;help&nbsp;here.&nbsp;&nbsp;In&nbsp;any&nbsp;case,&nbsp;I'm&nbsp;still&nbsp;thinking&nbsp;about&nbsp;this<br>
+one.<br>
+<br>
+Some&nbsp;tracking&nbsp;bugs&nbsp;could&nbsp;definitely&nbsp;be&nbsp;turned&nbsp;into&nbsp;keywords&nbsp;immediately<br>
+though,&nbsp;and&nbsp;I'll&nbsp;point&nbsp;the&nbsp;finger&nbsp;at<br>
+"http://bugzilla.mozilla.org/show_bug.cgi?id=7954"&nbsp;here&nbsp;since&nbsp;that's<br>
+what&nbsp;came&nbsp;to&nbsp;mind&nbsp;first.</P
+></P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H1
+CLASS="SECTION"
+><A
+NAME="BUGPROBS"
+>6.4. Bug Issues</A
+></H1
+><P
+><P
+CLASS="LITERALLAYOUT"
+>1.&nbsp;Inline&nbsp;Bug&nbsp;Changes<br>
+<br>
+Why&nbsp;do&nbsp;I&nbsp;see&nbsp;so&nbsp;many&nbsp;"moving&nbsp;to&nbsp;M5"&nbsp;and&nbsp;"reassigning&nbsp;to&nbsp;blahblah"<br>
+messages,&nbsp;and&nbsp;in&nbsp;other&nbsp;circumstances&nbsp;none&nbsp;are&nbsp;entered?&nbsp;&nbsp;Why&nbsp;aren't&nbsp;these<br>
+automatically&nbsp;generated?&nbsp;&nbsp;A&nbsp;comment&nbsp;should&nbsp;be&nbsp;only&nbsp;necessary&nbsp;when&nbsp;there<br>
+is&nbsp;something&nbsp;to&nbsp;add,&nbsp;and&nbsp;if&nbsp;I'm&nbsp;not&nbsp;interested&nbsp;in&nbsp;this&nbsp;sort&nbsp;of<br>
+information,&nbsp;I&nbsp;should&nbsp;be&nbsp;able&nbsp;to&nbsp;hide&nbsp;it.<br>
+<br>
+At&nbsp;the&nbsp;moment&nbsp;we're&nbsp;in&nbsp;a&nbsp;hybrid&nbsp;world&nbsp;where&nbsp;we&nbsp;don't&nbsp;get&nbsp;everything,&nbsp;but<br>
+we&nbsp;can't&nbsp;get&nbsp;rid&nbsp;of&nbsp;the&nbsp;bug&nbsp;change&nbsp;"messages"&nbsp;either.&nbsp;&nbsp;Furthermore,<br>
+"View&nbsp;Bug&nbsp;Activity"&nbsp;requires&nbsp;me&nbsp;to&nbsp;manually&nbsp;cross&nbsp;reference&nbsp;events&nbsp;on<br>
+another&nbsp;page,&nbsp;rather&nbsp;than&nbsp;being&nbsp;able&nbsp;to&nbsp;visually&nbsp;see&nbsp;the&nbsp;chronological<br>
+order.&nbsp;&nbsp;Shouldn't&nbsp;I&nbsp;be&nbsp;able&nbsp;to&nbsp;see&nbsp;all&nbsp;the&nbsp;information&nbsp;on&nbsp;one&nbsp;page?<br>
+<br>
+A&nbsp;proposal&nbsp;to&nbsp;allow&nbsp;bugs&nbsp;to&nbsp;be&nbsp;shown&nbsp;either&nbsp;way&nbsp;is&nbsp;at<br>
+"http://bugzilla.mozilla.org/show_bug.cgi?id=11368".<br>
+<br>
+2.&nbsp;&nbsp;Hard&nbsp;Wrapping&nbsp;Comments<br>
+<br>
+One&nbsp;thing&nbsp;that&nbsp;annoys&nbsp;me&nbsp;is&nbsp;the&nbsp;fact&nbsp;that&nbsp;comments&nbsp;are&nbsp;"hard&nbsp;wrapped"&nbsp;to<br>
+a&nbsp;certain&nbsp;column&nbsp;width.&nbsp;&nbsp;This&nbsp;is&nbsp;a&nbsp;mistake&nbsp;Internet&nbsp;Mail&nbsp;and&nbsp;News&nbsp;has<br>
+made,&nbsp;unlike&nbsp;every&nbsp;word&nbsp;processor&nbsp;in&nbsp;existence,&nbsp;and&nbsp;as&nbsp;a&nbsp;consequence,<br>
+Usenet&nbsp;suffers&nbsp;to&nbsp;this&nbsp;day&nbsp;from&nbsp;bad&nbsp;software.&nbsp;&nbsp;Why&nbsp;has&nbsp;Bugzilla&nbsp;repeated<br>
+the&nbsp;problem?<br>
+<br>
+Hard&nbsp;wrapping&nbsp;to&nbsp;a&nbsp;certain&nbsp;column&nbsp;width&nbsp;is&nbsp;open&nbsp;to&nbsp;abuse&nbsp;(see&nbsp;old<br>
+Mozilla&nbsp;browsers&nbsp;that&nbsp;didn't&nbsp;wrap&nbsp;properly,&nbsp;resulting&nbsp;in&nbsp;many&nbsp;ugly&nbsp;bug<br>
+reports&nbsp;we&nbsp;have&nbsp;to&nbsp;read&nbsp;to&nbsp;this&nbsp;day),&nbsp;and&nbsp;furthermore&nbsp;doesn't&nbsp;expand&nbsp;to<br>
+fill&nbsp;greater&nbsp;screen&nbsp;sizes.&nbsp;&nbsp;I'm&nbsp;also&nbsp;under&nbsp;the&nbsp;impression&nbsp;the&nbsp;current<br>
+hard&nbsp;wrap&nbsp;uses&nbsp;a&nbsp;non-standard&nbsp;HTML&nbsp;facility.&nbsp;&nbsp;See<br>
+"http://bugzilla.mozilla.org/show_bug.cgi?id=11901".<br>
+<br>
+3.&nbsp;REMIND&nbsp;and&nbsp;LATER&nbsp;Are&nbsp;Evil<br>
+<br>
+I&nbsp;really&nbsp;hate&nbsp;REMIND&nbsp;and&nbsp;LATER.&nbsp;&nbsp;Not&nbsp;because&nbsp;they&nbsp;mean&nbsp;something<br>
+won't&nbsp;be&nbsp;implemented,&nbsp;but&nbsp;because&nbsp;they&nbsp;aren't&nbsp;the&nbsp;best&nbsp;solutions.<br>
+<br>
+Why&nbsp;are&nbsp;they&nbsp;bad?&nbsp;&nbsp;Well,&nbsp;basically&nbsp;because&nbsp;they&nbsp;are&nbsp;not&nbsp;resolved,&nbsp;yet<br>
+they&nbsp;are&nbsp;marked&nbsp;as&nbsp;such.&nbsp;&nbsp;Hence&nbsp;queries&nbsp;have&nbsp;to&nbsp;be&nbsp;well&nbsp;crafted&nbsp;to<br>
+include&nbsp;them.<br>
+<br>
+LATER,&nbsp;according&nbsp;to&nbsp;Bugzilla,&nbsp;means&nbsp;it&nbsp;won't&nbsp;be&nbsp;done&nbsp;this&nbsp;release.&nbsp;<br>
+There&nbsp;is&nbsp;a&nbsp;better&nbsp;mechanism&nbsp;of&nbsp;doing&nbsp;this,&nbsp;that&nbsp;is&nbsp;assigning&nbsp;to<br>
+nobody@mozilla.org&nbsp;and&nbsp;making&nbsp;the&nbsp;milestone&nbsp;blank.&nbsp;&nbsp;It's&nbsp;more&nbsp;likely&nbsp;to<br>
+appear&nbsp;in&nbsp;a&nbsp;casual&nbsp;query,&nbsp;and&nbsp;it&nbsp;doesn't&nbsp;resolve&nbsp;the&nbsp;bug.<br>
+<br>
+REMIND,&nbsp;according&nbsp;to&nbsp;Bugzilla,&nbsp;means&nbsp;it&nbsp;might&nbsp;still&nbsp;be&nbsp;implemented&nbsp;this<br>
+release.&nbsp;&nbsp;Well,&nbsp;why&nbsp;not&nbsp;just&nbsp;move&nbsp;it&nbsp;to&nbsp;a&nbsp;later&nbsp;milestone&nbsp;then?&nbsp;&nbsp;You're<br>
+a&nbsp;lot&nbsp;less&nbsp;likely&nbsp;to&nbsp;forget&nbsp;it.&nbsp;&nbsp;If&nbsp;it's&nbsp;really&nbsp;needed,&nbsp;a&nbsp;keyword&nbsp;would<br>
+be&nbsp;better.<br>
+<br>
+Some&nbsp;people&nbsp;can't&nbsp;use&nbsp;blank&nbsp;milestones&nbsp;to&nbsp;mean&nbsp;an&nbsp;untargetted&nbsp;milestone,<br>
+since&nbsp;they&nbsp;use&nbsp;this&nbsp;to&nbsp;assess&nbsp;new&nbsp;bugs&nbsp;that&nbsp;have&nbsp;no&nbsp;target.&nbsp;&nbsp;Hence,&nbsp;it<br>
+would&nbsp;be&nbsp;nice&nbsp;to&nbsp;distinguish&nbsp;between&nbsp;bugs&nbsp;that&nbsp;have&nbsp;not&nbsp;yet&nbsp;been<br>
+considered,&nbsp;and&nbsp;those&nbsp;that&nbsp;really&nbsp;are&nbsp;not&nbsp;assigned&nbsp;to&nbsp;any&nbsp;milestone&nbsp;in<br>
+the&nbsp;future&nbsp;(assumedly&nbsp;beyond).<br>
+<br>
+All&nbsp;this&nbsp;is&nbsp;covered&nbsp;at<br>
+"http://bugzilla.mozilla.org/show_bug.cgi?id=13534".<br>
+<br>
+4.&nbsp;Create&nbsp;An&nbsp;Enhancement&nbsp;Field<br>
+<br>
+Currently&nbsp;enhancement&nbsp;is&nbsp;an&nbsp;option&nbsp;in&nbsp;severity.&nbsp;&nbsp;This&nbsp;means&nbsp;that<br>
+important&nbsp;enhancements&nbsp;(like&nbsp;for&nbsp;example,&nbsp;POP3&nbsp;support)&nbsp;are&nbsp;not&nbsp;properly<br>
+distinguished&nbsp;as&nbsp;such,&nbsp;because&nbsp;they&nbsp;need&nbsp;a&nbsp;proper&nbsp;severity.&nbsp;&nbsp;This<br>
+dilutes&nbsp;the&nbsp;meaning&nbsp;of&nbsp;enhancement.<br>
+<br>
+If&nbsp;enhancement&nbsp;was&nbsp;separated,&nbsp;we&nbsp;could&nbsp;properly&nbsp;see&nbsp;what&nbsp;was&nbsp;an<br>
+enhancement.&nbsp;&nbsp;See&nbsp;"http://bugzilla.mozilla.org/show_bug.cgi?id=9412".&nbsp;&nbsp;I<br>
+see&nbsp;keywords&nbsp;like&nbsp;[RFE]&nbsp;and&nbsp;[FEATURE]&nbsp;that&nbsp;seem&nbsp;to&nbsp;be&nbsp;compensating&nbsp;for<br>
+this&nbsp;problem.</P
+></P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H1
+CLASS="SECTION"
+><A
+NAME="DBASEINTEGRITY"
+>6.5. Database Integrity</A
+></H1
+><P
+><P
+CLASS="LITERALLAYOUT"
+>Bugzilla&nbsp;could&nbsp;be&nbsp;more&nbsp;proactive&nbsp;in&nbsp;detecting&nbsp;suboptimal&nbsp;situations&nbsp;and<br>
+prevent&nbsp;them&nbsp;or&nbsp;whine&nbsp;about&nbsp;them.<br>
+<br>
+1.&nbsp;Bugzilla&nbsp;Crime&nbsp;#1:&nbsp;Marking&nbsp;A&nbsp;Bug&nbsp;Fixed&nbsp;With&nbsp;Unresolved&nbsp;Dependencies<br>
+<br>
+It&nbsp;can't&nbsp;be&nbsp;marked&nbsp;fixed&nbsp;with&nbsp;unresolved&nbsp;dependencies.&nbsp;&nbsp;Either&nbsp;mark&nbsp;it<br>
+INVALID&nbsp;(tracking&nbsp;bugs),&nbsp;fix&nbsp;the&nbsp;dependencies&nbsp;at&nbsp;the&nbsp;same&nbsp;time,&nbsp;or<br>
+resolve&nbsp;the&nbsp;blockers.<br>
+<br>
+See&nbsp;"http://bugzilla.mozilla.org/show_bug.cgi?id=24496".<br>
+<br>
+2.&nbsp;Keyword&nbsp;Restrictions<br>
+<br>
+Some&nbsp;keywords&nbsp;should&nbsp;only&nbsp;apply&nbsp;in&nbsp;certain&nbsp;circumstances,&nbsp;eg&nbsp;beta1&nbsp;=&#62;<br>
+Milestone&nbsp;&#60;<br>
+M14,&nbsp;css1&nbsp;=&#62;&nbsp;Component&nbsp;=&nbsp;Style&nbsp;System&nbsp;are&nbsp;possibilities.&nbsp;&nbsp;See<br>
+"http://bugzilla.mozilla.org/show_bug.cgi?id=26940".<br>
+<br>
+3.&nbsp;Whine&nbsp;About&nbsp;Old&nbsp;Votes<br>
+<br>
+Old&nbsp;votes&nbsp;can&nbsp;just&nbsp;sit&nbsp;on&nbsp;resolved&nbsp;bugs.&nbsp;&nbsp;This&nbsp;is&nbsp;problematic&nbsp;with<br>
+duplicates&nbsp;especially.&nbsp;&nbsp;Automatic&nbsp;transferral/removal&nbsp;is&nbsp;not<br>
+appropriate&nbsp;since&nbsp;bugs&nbsp;can&nbsp;be&nbsp;reopened,&nbsp;but&nbsp;a&nbsp;whining&nbsp;solution&nbsp;might<br>
+work.&nbsp;&nbsp;See&nbsp;"http://bugzilla.mozilla.org/show_bug.cgi?id=27553".<br>
+<br>
+4.&nbsp;Whine&nbsp;And&nbsp;Warn&nbsp;About&nbsp;Milestone&nbsp;Mismatches<br>
+<br>
+Here's&nbsp;a&nbsp;fun&nbsp;one.&nbsp;&nbsp;Bug&nbsp;X&nbsp;(M17)&nbsp;depends&nbsp;on&nbsp;Bug&nbsp;Y&nbsp;(M15).&nbsp;&nbsp;Bug&nbsp;Y&nbsp;gets&nbsp;moved<br>
+out&nbsp;to&nbsp;M19.&nbsp;&nbsp;The&nbsp;notification&nbsp;to&nbsp;the&nbsp;assignee&nbsp;of&nbsp;Bug&nbsp;X&nbsp;gets&nbsp;ignored&nbsp;(of<br>
+course)&nbsp;and&nbsp;Bug&nbsp;X&nbsp;is&nbsp;now&nbsp;due&nbsp;to&nbsp;be&nbsp;fixed&nbsp;before&nbsp;one&nbsp;of&nbsp;its&nbsp;blockers.<br>
+<br>
+Warnings&nbsp;about&nbsp;this&nbsp;when&nbsp;it&nbsp;is&nbsp;detected&nbsp;as&nbsp;well&nbsp;as&nbsp;whining&nbsp;about&nbsp;it&nbsp;in<br>
+email&nbsp;would&nbsp;help&nbsp;bring&nbsp;these&nbsp;issues&nbsp;to&nbsp;the&nbsp;attention&nbsp;of&nbsp;people&nbsp;sooner.<br>
+<br>
+Note&nbsp;that&nbsp;this&nbsp;would&nbsp;be&nbsp;less&nbsp;of&nbsp;a&nbsp;problem&nbsp;if&nbsp;we&nbsp;didn't&nbsp;have&nbsp;so&nbsp;many<br>
+tracking&nbsp;bugs&nbsp;since&nbsp;they&nbsp;aren't&nbsp;updated&nbsp;that&nbsp;often&nbsp;and&nbsp;often&nbsp;have&nbsp;this<br>
+problem.<br>
+<br>
+See&nbsp;"http://bugzilla.mozilla.org/show_bug.cgi?id=16743".</P
+></P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H1
+CLASS="SECTION"
+><A
+NAME="BZ30"
+>6.6. Bugzilla 3.0</A
+></H1
+><P
+>One day, Bugzilla 3.0 will have lots of cool stuff.</P
+></DIV
+></DIV
+><DIV
+CLASS="APPENDIX"
+><HR><H1
+><A
+NAME="FAQ"
+>Appendix A. The Bugzilla FAQ</A
+></H1
+><DIV
+CLASS="QANDASET"
+><DL
+><DT
+>1. <A
+HREF="#FAQ_GENERAL"
+>General Questions</A
+></DT
+><DD
+><DL
+><DT
+>A.1.1. <A
+HREF="#AEN1302"
+>	    Where can I find information about Bugzilla?</A
+></DT
+><DT
+>A.1.2. <A
+HREF="#AEN1308"
+>	    What license is Bugzilla distributed under?
+	  </A
+></DT
+><DT
+>A.1.3. <A
+HREF="#AEN1314"
+>	    How do I get commercial support for Bugzilla?
+	  </A
+></DT
+><DT
+>A.1.4. <A
+HREF="#AEN1321"
+>	    What major companies or projects are currently using Bugzilla
+	    for bug-tracking?
+	  </A
+></DT
+><DT
+>A.1.5. <A
+HREF="#AEN1346"
+>	    Who maintains Bugzilla?
+	  </A
+></DT
+><DT
+>A.1.6. <A
+HREF="#AEN1351"
+>	    How does Bugzilla stack up against other bug-tracking databases?
+	  </A
+></DT
+><DT
+>A.1.7. <A
+HREF="#AEN1358"
+>	    How do I change my user name in Bugzilla?
+	  </A
+></DT
+><DT
+>A.1.8. <A
+HREF="#AEN1363"
+>	    Why doesn't Bugzilla offer this or that feature or compatability
+	    with this other tracking software?
+	  </A
+></DT
+><DT
+>A.1.9. <A
+HREF="#AEN1370"
+>	    Why MySQL?  I'm interested in seeing Bugzilla run on
+	    Oracle/Sybase/Msql/PostgreSQL/MSSQL?
+	  </A
+></DT
+><DT
+>A.1.10. <A
+HREF="#AEN1388"
+>	    Why do the scripts say "/usr/bonsaitools/bin/perl" instead of
+	    "/usr/bin/perl" or something else?
+	  </A
+></DT
+></DL
+></DD
+><DT
+>2. <A
+HREF="#FAQ_REDHAT"
+>Red Hat Bugzilla</A
+></DT
+><DD
+><DL
+><DT
+>A.2.1. <A
+HREF="#AEN1405"
+>	    What about Red Hat Bugzilla?
+	  </A
+></DT
+><DT
+>A.2.2. <A
+HREF="#AEN1413"
+>	    What are the primary benefits of Red Hat Bugzilla?
+	  </A
+></DT
+><DT
+>A.2.3. <A
+HREF="#AEN1441"
+>	    What's the current status of Red Hat Bugzilla?
+	  </A
+></DT
+></DL
+></DD
+><DT
+>3. <A
+HREF="#FAQ_LOKI"
+>Loki Bugzilla (AKA Fenris)</A
+></DT
+><DD
+><DL
+><DT
+>A.3.1. <A
+HREF="#AEN1457"
+>	    What about Loki Bugzilla?
+	  </A
+></DT
+><DT
+>A.3.2. <A
+HREF="#AEN1464"
+>	    Who maintains Fenris (Loki Bugzilla) now?
+	  </A
+></DT
+><DT
+>A.3.3. <A
+HREF="#AEN1469"
+>	    
+	  </A
+></DT
+></DL
+></DD
+><DT
+>4. <A
+HREF="#FAQ_PHB"
+>Pointy-Haired-Boss Questions</A
+></DT
+><DD
+><DL
+><DT
+>A.4.1. <A
+HREF="#AEN1477"
+>	    Is Bugzilla web-based or do you have to have specific software or
+	    specific operating system on your machine?
+	  </A
+></DT
+><DT
+>A.4.2. <A
+HREF="#AEN1482"
+>	    Has anyone you know of already done any Bugzilla integration with
+	    Perforce (SCM software)?
+	  </A
+></DT
+><DT
+>A.4.3. <A
+HREF="#AEN1487"
+>	    Does Bugzilla allow the user to track multiple projects?
+	  </A
+></DT
+><DT
+>A.4.4. <A
+HREF="#AEN1492"
+>	    If I am on many projects, and search for all bugs assigned to me, will
+	    Bugzilla list them for me and allow me to sort by project, severity etc?
+	  </A
+></DT
+><DT
+>A.4.5. <A
+HREF="#AEN1497"
+>	    Does Bugzilla allow attachments (text, screenshots, urls etc)? If yes,
+	    are there any that are NOT allowed?
+	  </A
+></DT
+><DT
+>A.4.6. <A
+HREF="#AEN1502"
+>	    Does Bugzilla allow us to define our own priorities and levels? Do we
+	    have complete freedom to change the labels of fields and format of them, and
+	    the choice of acceptable values?
+	  </A
+></DT
+><DT
+>A.4.7. <A
+HREF="#AEN1507"
+>	    Does Bugzilla provide any reporting features, metrics, graphs, etc? You
+	    know, the type of stuff that management likes to see. :)
+	  </A
+></DT
+><DT
+>A.4.8. <A
+HREF="#AEN1515"
+>	    Is there email notification and if so, what do you see when you get an
+	    email? Do you see bug number and title or is it only the number?
+	  </A
+></DT
+><DT
+>A.4.9. <A
+HREF="#AEN1520"
+>	    Can email notification be set up to send to multiple
+	    people, some on the To List, CC List, BCC List etc?
+	  </A
+></DT
+><DT
+>A.4.10. <A
+HREF="#AEN1525"
+>	    If there is email notification, do users have to have any particular
+	    type of email application?
+	  </A
+></DT
+><DT
+>A.4.11. <A
+HREF="#AEN1532"
+>	     If I just wanted to track certain bugs, as they go through life, can I
+	    set it up to alert me via email whenever that bug changes, whether it be
+	    owner, status or description etc.?
+	  </A
+></DT
+><DT
+>A.4.12. <A
+HREF="#AEN1537"
+>	    Does Bugzilla allow data to be imported and exported? If I had outsiders
+	    write up a bug report using a MS Word bug template, could that template be
+	    imported into "matching" fields? If I wanted to take the results of a query
+	    and export that data to MS Excel, could I do that?
+	  </A
+></DT
+><DT
+>A.4.13. <A
+HREF="#AEN1545"
+>	    Does Bugzilla allow fields to be added, changed or deleted? If I want to
+	    customize the bug submission form to meet our needs, can I do that using our
+	    terminology?
+	  </A
+></DT
+><DT
+>A.4.14. <A
+HREF="#AEN1550"
+>	    Has anyone converted Bugzilla to another language to be used in other
+	    countries? Is it localizable?
+	  </A
+></DT
+><DT
+>A.4.15. <A
+HREF="#AEN1555"
+>	    Can a user create and save reports? Can they do this in Word format?
+	    Excel format?
+	  </A
+></DT
+><DT
+>A.4.16. <A
+HREF="#AEN1560"
+>	    Can a user re-run a report with a new project, same query?
+	  </A
+></DT
+><DT
+>A.4.17. <A
+HREF="#AEN1565"
+>	    Can a user modify an existing report and then save it into another name?
+	  </A
+></DT
+><DT
+>A.4.18. <A
+HREF="#AEN1570"
+>	    Does Bugzilla have the ability to search by word, phrase, compound
+	    search?
+	  </A
+></DT
+><DT
+>A.4.19. <A
+HREF="#AEN1575"
+>	    Can the admin person establish separate group and individual user
+	    privileges?
+	  </A
+></DT
+><DT
+>A.4.20. <A
+HREF="#AEN1580"
+>	     Does Bugzilla provide record locking when there is simultaneous access
+	    to the same bug? Does the second person get a notice that the bug is in use
+	    or how are they notified?
+	  </A
+></DT
+><DT
+>A.4.21. <A
+HREF="#AEN1585"
+>	    Are there any backup features provided?
+	  </A
+></DT
+><DT
+>A.4.22. <A
+HREF="#AEN1591"
+>	    Can users be on the system while a backup is in progress?
+	  </A
+></DT
+><DT
+>A.4.23. <A
+HREF="#AEN1596"
+>	    What type of human resources are needed to be on staff to install and
+	    maintain Bugzilla? Specifically, what type of skills does the person need to
+	    have? I need to find out if we were to go with Bugzilla, what types of
+	    individuals would we need to hire and how much would that cost vs buying an
+	    "Out-of-the-Box" solution.
+	  </A
+></DT
+><DT
+>A.4.24. <A
+HREF="#AEN1603"
+>	    What time frame are we looking at if we decide to hire people to install
+	    and maintain the Bugzilla? Is this something that takes hours or weeks to
+	    install and a couple of hours per week to maintain and customize or is this
+	    a multi-week install process, plus a full time job for 1 person, 2 people,
+	    etc?
+	  </A
+></DT
+><DT
+>A.4.25. <A
+HREF="#AEN1608"
+>	    Is there any licensing fee or other fees for using Bugzilla? Any
+	    out-of-pocket cost other than the bodies needed as identified above?
+	  </A
+></DT
+></DL
+></DD
+><DT
+>5. <A
+HREF="#FAQ_INSTALL"
+>Bugzilla Installation</A
+></DT
+><DD
+><DL
+><DT
+>A.5.1. <A
+HREF="#AEN1615"
+>	    How do I download and install Bugzilla?
+	  </A
+></DT
+><DT
+>A.5.2. <A
+HREF="#AEN1621"
+>	    How do I install Bugzilla on Windows NT?
+	  </A
+></DT
+><DT
+>A.5.3. <A
+HREF="#AEN1626"
+>	    Is there an easy way to change the Bugzilla cookie name?
+	  </A
+></DT
+></DL
+></DD
+><DT
+>6. <A
+HREF="#FAQ_SECURITY"
+>Bugzilla Security</A
+></DT
+><DD
+><DL
+><DT
+>A.6.1. <A
+HREF="#AEN1633"
+>	    How do I completely disable MySQL security if it's giving me problems
+	    (I've followed the instructions in the README!)?
+	  </A
+></DT
+><DT
+>A.6.2. <A
+HREF="#AEN1639"
+>	    Are there any security problems with Bugzilla?
+	  </A
+></DT
+><DT
+>A.6.3. <A
+HREF="#AEN1644"
+>	    I've implemented the security fixes mentioned in Chris Yeh's security
+	    advisory of 5/10/2000 advising not to run MySQL as root, and am running into
+	    problems with MySQL no longer working correctly.
+	  </A
+></DT
+></DL
+></DD
+><DT
+>7. <A
+HREF="#FAQ_EMAIL"
+>Bugzilla Email</A
+></DT
+><DD
+><DL
+><DT
+>A.7.1. <A
+HREF="#AEN1651"
+>	    I have a user who doesn't want to receive any more email from Bugzilla.
+	    How do I stop it entirely for this user?
+	  </A
+></DT
+><DT
+>A.7.2. <A
+HREF="#AEN1656"
+>	    I'm evaluating/testing Bugzilla, and don't want it to send email to
+	    anyone but me. How do I do it?
+	  </A
+></DT
+><DT
+>A.7.3. <A
+HREF="#AEN1661"
+>	    I want whineatnews.pl to whine at something more, or other than, only new
+	    bugs. How do I do it?
+	  </A
+></DT
+><DT
+>A.7.4. <A
+HREF="#AEN1667"
+>	    I don't like/want to use Procmail to hand mail off to bug_email.pl.
+	    What alternatives do I have?
+	  </A
+></DT
+><DT
+>A.7.5. <A
+HREF="#AEN1674"
+>	    How do I set up the email interface to submit/change bugs via email?
+	  </A
+></DT
+><DT
+>A.7.6. <A
+HREF="#AEN1679"
+>	    Email takes FOREVER to reach me from bugzilla -- it's extremely slow.
+	    What gives?
+	  </A
+></DT
+><DT
+>A.7.7. <A
+HREF="#AEN1686"
+>	     How come email never reaches me from bugzilla changes?
+	  </A
+></DT
+></DL
+></DD
+><DT
+>8. <A
+HREF="#FAQ_DB"
+>Bugzilla Database</A
+></DT
+><DD
+><DL
+><DT
+>A.8.1. <A
+HREF="#AEN1694"
+>	    I've heard Bugzilla can be used with Oracle?
+	  </A
+></DT
+><DT
+>A.8.2. <A
+HREF="#AEN1699"
+>	    Bugs are missing from queries, but exist in the database (and I can pull
+	    them up by specifying the bug ID). What's wrong?
+	  </A
+></DT
+><DT
+>A.8.3. <A
+HREF="#AEN1704"
+>	    I think my database might be corrupted, or contain invalid entries. What
+	    do I do?
+	  </A
+></DT
+><DT
+>A.8.4. <A
+HREF="#AEN1709"
+>	    I want to manually edit some entries in my database. How?
+	  </A
+></DT
+><DT
+>A.8.5. <A
+HREF="#AEN1714"
+>	    I try to add myself as a user, but Bugzilla always tells me my password is wrong.
+	  </A
+></DT
+><DT
+>A.8.6. <A
+HREF="#AEN1719"
+>	    I think I've set up MySQL permissions correctly, but bugzilla still can't
+	    connect.
+	  </A
+></DT
+><DT
+>A.8.7. <A
+HREF="#AEN1724"
+>	    How do I synchronize bug information among multiple different Bugzilla
+	    databases?
+	  </A
+></DT
+><DT
+>A.8.8. <A
+HREF="#AEN1731"
+>	    Why do I get bizarre errors when trying to submit data, particularly problems
+	    with "groupset"?
+	  </A
+></DT
+><DT
+>A.8.9. <A
+HREF="#AEN1736"
+>	    How come even after I delete bugs, the long descriptions show up?
+	  </A
+></DT
+></DL
+></DD
+><DT
+>9. <A
+HREF="#FAQ_NT"
+>Bugzilla and Win32</A
+></DT
+><DD
+><DL
+><DT
+>A.9.1. <A
+HREF="#AEN1743"
+>	    What is the easiest way to run Bugzilla on Win32 (Win98+/NT/2K)?
+	  </A
+></DT
+><DT
+>A.9.2. <A
+HREF="#AEN1748"
+>	    Is there a "Bundle::Bugzilla" equivalent for Win32?
+	  </A
+></DT
+><DT
+>A.9.3. <A
+HREF="#AEN1753"
+>	    CGI's are failing with a "something.cgi is not a valid Windows NT
+	    application" error. Why?
+	  </A
+></DT
+><DT
+>A.9.4. <A
+HREF="#AEN1761"
+>	    Can I have some general instructions on how to make Bugzilla on Win32 work?
+	  </A
+></DT
+><DT
+>A.9.5. <A
+HREF="#AEN1767"
+>	    I'm having trouble with the perl modules for NT not being able to talk to
+	    to the database.
+	  </A
+></DT
+></DL
+></DD
+><DT
+>10. <A
+HREF="#FAQ_USE"
+>Bugzilla Usage</A
+></DT
+><DD
+><DL
+><DT
+>A.10.1. <A
+HREF="#AEN1788"
+>	    The query page is very confusing.  Isn't there a simpler way to query?
+	  </A
+></DT
+><DT
+>A.10.2. <A
+HREF="#AEN1794"
+>	    I'm confused by the behavior of the "accept" button in the Show Bug form.
+	    Why doesn't it assign the bug to me when I accept it?
+	  </A
+></DT
+><DT
+>A.10.3. <A
+HREF="#AEN1804"
+>	    I can't upload anything into the database via the "Create Attachment"
+	    link.  What am I doing wrong?
+	  </A
+></DT
+><DT
+>A.10.4. <A
+HREF="#AEN1809"
+>	    Email submissions to Bugzilla that have attachments end up asking me to
+	    save it as a "cgi" file.
+	  </A
+></DT
+><DT
+>A.10.5. <A
+HREF="#AEN1814"
+>	    How do I change a keyword in Bugzilla, once some bugs are using it?
+	  </A
+></DT
+></DL
+></DD
+><DT
+>11. <A
+HREF="#FAQ_HACKING"
+>Bugzilla Hacking</A
+></DT
+><DD
+><DL
+><DT
+>A.11.1. <A
+HREF="#AEN1821"
+>	    What bugs are in Bugzilla right now?
+	  </A
+></DT
+><DT
+>A.11.2. <A
+HREF="#AEN1830"
+>	    How can I change the default priority to a null value?  For instance, have the default
+	    priority be "---" instead of "P2"?
+	  </A
+></DT
+><DT
+>A.11.3. <A
+HREF="#AEN1836"
+>	    What's the best way to submit patches?  What guidelines should I follow?
+	  </A
+></DT
+></DL
+></DD
+></DL
+><DIV
+CLASS="QANDADIV"
+><H3
+><A
+NAME="FAQ_GENERAL"
+></A
+>1. General Questions</H3
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1302"
+></A
+><B
+>A.1.1. </B
+>	    Where can I find information about Bugzilla?</P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    You can stay up-to-date with the latest Bugzilla
+	    information at <A
+HREF="http://www.mozilla.org/projects/bugzilla/"
+TARGET="_top"
+>	    http://www.mozilla.org/projects/bugzilla/</A
+>
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1308"
+></A
+><B
+>A.1.2. </B
+>	    What license is Bugzilla distributed under?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Bugzilla is covered by the Mozilla Public License.
+	    See details at <A
+HREF="http://www.mozilla.org/MPL/"
+TARGET="_top"
+>	    http://www.mozilla.org/MPL/</A
+>
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1314"
+></A
+><B
+>A.1.3. </B
+>	    How do I get commercial support for Bugzilla?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    <A
+HREF="http://www.collab.net/"
+TARGET="_top"
+>www.collab.net</A
+> offers
+	    Bugzilla as part of their standard offering to large projects.
+	    They do have some minimum fees that are pretty hefty, and generally
+	    aren't interested in small projects.
+	  </P
+><P
+>	    There are several experienced
+	    Bugzilla hackers on the mailing list/newsgroup who are willing
+	    to whore themselves out for generous compensation.
+	    Try sending a message to the mailing list asking for a volunteer.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1321"
+></A
+><B
+>A.1.4. </B
+>	    What major companies or projects are currently using Bugzilla
+	    for bug-tracking?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    There are <EM
+>dozens</EM
+> of major comapanies with public
+	    Bugzilla sites to track bugs in their products.  A few include:
+	    <P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+>Netscape/AOL</TD
+></TR
+><TR
+><TD
+>Mozilla.org</TD
+></TR
+><TR
+><TD
+>AtHome Corporation</TD
+></TR
+><TR
+><TD
+>Red Hat Software</TD
+></TR
+><TR
+><TD
+>Loki Entertainment Software</TD
+></TR
+><TR
+><TD
+>SuSe Corp</TD
+></TR
+><TR
+><TD
+>The Horde Project</TD
+></TR
+><TR
+><TD
+>The Eazel Project</TD
+></TR
+><TR
+><TD
+>AbiSource</TD
+></TR
+><TR
+><TD
+>Real Time Enterprises, Inc</TD
+></TR
+><TR
+><TD
+>Eggheads.org</TD
+></TR
+><TR
+><TD
+>Strata Software</TD
+></TR
+><TR
+><TD
+>RockLinux</TD
+></TR
+><TR
+><TD
+>Creative Labs (makers of SoundBlaster)</TD
+></TR
+><TR
+><TD
+>The Apache Foundation</TD
+></TR
+><TR
+><TD
+>The Gnome Foundation</TD
+></TR
+><TR
+><TD
+>Linux-Mandrake</TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+>
+	  </P
+><P
+>	    Suffice to say, there are more than enough huge projects using Bugzilla
+	    that we can safely say it's extremely popular.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1346"
+></A
+><B
+>A.1.5. </B
+>	    Who maintains Bugzilla?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    There are many, many contributors from around the world maintaining Bugzilla.
+	    The designated "Maintainer" is Tara Hernandez, with QA support by Matthew Tuck.
+	    Dan Mosedale and Dawn Endico are employees of Mozilla.org responsible for the
+	    installation of Bugzilla there, and are very frequent code contributors.
+	    Terry Weissman originally ported Bugzilla, but "these days, Terry just hangs around
+	    and heckles."  The rest of us are mostly transient developers; Bugzilla suits
+	    our needs, and we contribute code as we have needs for updates.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1351"
+></A
+><B
+>A.1.6. </B
+>	    How does Bugzilla stack up against other bug-tracking databases?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    A year has gone by, and I <EM
+>still</EM
+> can't find any head-to-head
+	    comparisons of Bugzilla against other defect-tracking software.  However, from my
+	    personal experience with other bug-trackers, Bugzilla offers
+	    superior performance on commodity hardware, better price (free!), more developer-
+	    friendly features (such as stored queries, email integration, and platform
+	    independence), improved scalability, open source code, greater flexibility,
+	    and superior ease-of-use.
+	  </P
+><P
+>	    If you happen to be a commercial Bugzilla vendor, please step forward with a rebuttal
+	    so I can include it in the FAQ.  We're not in pursuit of Bugzilla ueber alles;
+	    we simply love having a powerful, open-source tool to get our jobs done.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1358"
+></A
+><B
+>A.1.7. </B
+>	    How do I change my user name in Bugzilla?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    You can't.  However, the administrative account can, by simply opening
+	    your user account in editusers.cgi and changing the login name.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1363"
+></A
+><B
+>A.1.8. </B
+>	    Why doesn't Bugzilla offer this or that feature or compatability
+	    with this other tracking software?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    It may be that the support has not been built yet, or that you
+	    have not yet found it.  Bugzilla is making tremendous strides in
+	    usability, customizability, scalability, and user interface.  It
+	    is widely considered the most complete and popular open-source
+	    bug-tracking software in existence.
+	  </P
+><P
+>	    That doesn't mean it can't use improvement!
+	    You can help the project along by either hacking a patch yourself
+	    that supports the functionality you require, or else submitting a
+	    "Request for Enhancement" (RFE) using the bug submission interface
+	    at <A
+HREF="http://bugzilla.mozilla.org/"
+TARGET="_top"
+>bugzilla.mozilla.org</A
+>.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1370"
+></A
+><B
+>A.1.9. </B
+>	    Why MySQL?  I'm interested in seeing Bugzilla run on
+	    Oracle/Sybase/Msql/PostgreSQL/MSSQL?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>Terry Weissman answers,
+	  <A
+NAME="AEN1374"
+></A
+><BLOCKQUOTE
+CLASS="BLOCKQUOTE"
+><P
+>	      You're not the only one. But <EM
+>I</EM
+> am not very interested. I'm not
+	      a real SQL or database person. I just wanted to make a useful tool,
+	      and build it on top of free software. So, I picked MySQL, and
+	      learned SQL by staring at the MySQL manual and some code lying
+	      around here, and
+	      wrote Bugzilla. I didn't know that Enum's were non-standard SQL.
+	      I'm not sure if I would have cared, but I didn't even know. So, to
+	      me, things are "portable" because it uses MySQL, and MySQL is
+	      portable enough. I fully understand (now) that people want to be
+	      portable to other databases, but that's never been a real concern
+	      of mine.
+	    </P
+></BLOCKQUOTE
+>
+	  </P
+><P
+>	    Things aren't quite that grim these days, however.  Terry pretty much
+	    sums up much of the thinking many of us have for Bugzilla, but there
+	    is light on the horizon for database-independence!  Here are some options:
+	  </P
+><P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+>	      <EM
+><A
+HREF="http://bugzilla.redhat.com/"
+TARGET="_top"
+>Red Hat Bugzilla</A
+></EM
+>:
+	      Runs a modified Bugzilla 2.8 atop an Oracle database.
+	    </TD
+></TR
+><TR
+><TD
+>	      <EM
+><A
+HREF="http://sourceforge.net/projects/interzilla"
+TARGET="_top"
+>Interzilla</A
+></EM
+>:
+	      A project to run Bugzilla on Interbase.  No code released yet, however.
+	    </TD
+></TR
+><TR
+><TD
+>	      <EM
+>Bugzilla 3.0</EM
+>: One of the primary stated goals
+	      is multiple database support.
+	    </TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1388"
+></A
+><B
+>A.1.10. </B
+>	    Why do the scripts say "/usr/bonsaitools/bin/perl" instead of
+	    "/usr/bin/perl" or something else?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	     Mozilla.org uses /usr/bonsaitools/bin/perl. The prime rule in making
+	    submissions is "don't break bugzilla.mozilla.org". If it breaks it, your
+	    patch will be reverted faster than you can do a diff.
+	  </P
+><P
+>	    Here's Terry Weissman's comment, for some historical context:
+	    <A
+NAME="AEN1393"
+></A
+><BLOCKQUOTE
+CLASS="BLOCKQUOTE"
+><P
+>		[This was] purely my own convention. I wanted a place to put a version of
+		Perl and other tools that was strictly under my control for the
+		various webtools, and not subject to anyone else. Edit it to point
+		to whatever you like.
+	      </P
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>		  We always recommend that, if possible, you keep the path
+		  as /usr/bonsaitools/bin/perl, and simply add a /usr/bonsaitools
+		  and /usr/bonsaitools/bin directory, then symlink your version
+		  of perl to /usr/bonsaitools/bin/perl.  This will make upgrading
+		  your Bugzilla much easier in the future.
+		</P
+><P
+>		  Obviously, if you do not have root access to your Bugzilla
+		  box, our suggestion is irrelevant.
+		</P
+></BLOCKQUOTE
+></DIV
+></BLOCKQUOTE
+>
+	  </P
+></DIV
+></DIV
+></DIV
+><DIV
+CLASS="QANDADIV"
+><H3
+><A
+NAME="FAQ_REDHAT"
+></A
+>2. Red Hat Bugzilla</H3
+><P
+>	<DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	    <EM
+>This section is no longer up-to-date.</EM
+>
+	    Please see the section on "Red Hat Bugzilla" under "Variants" in The Bugzilla Guide.
+	  </P
+></BLOCKQUOTE
+></DIV
+>
+      </P
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1405"
+></A
+><B
+>A.2.1. </B
+>	    What about Red Hat Bugzilla?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Red Hat Bugzilla is arguably more user-friendly, customizable, and scalable
+	    than stock Bugzilla. Check it out at
+	    http://bugzilla.redhat.com and the sources at ftp://people.redhat.com/dkl/.
+	    They've set their Bugzilla up to work with Oracle out of the box.
+	    Note that Redhat Bugzilla is based upon the 2.8 Bugzilla tree;
+	    Bugzilla has made some tremendous advances since the 2.8 release.
+	    Why not download both Bugzillas to check out the differences for
+	    yourself?
+	  </P
+><P
+>	    Dave Lawrence, the original Red Hat Bugzilla maintainer, mentions:
+	    <A
+NAME="AEN1410"
+></A
+><BLOCKQUOTE
+CLASS="BLOCKQUOTE"
+><P
+>		Somebody needs to take the ball and run with it.  I'm the only
+		maintainer and am very pressed for time.
+	      </P
+></BLOCKQUOTE
+>
+	    If you, or someone you know, has the time and expertise to do the integration
+	    work so main-tree Bugzilla 2.12 and higher integrates the Red
+	    Hat Bugzilla Oracle modifications, please donate your
+	    time to supporting the Bugzilla project.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1413"
+></A
+><B
+>A.2.2. </B
+>	    What are the primary benefits of Red Hat Bugzilla?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    <EM
+>Dave Lawrence</EM
+>:
+	    <A
+NAME="AEN1418"
+></A
+><BLOCKQUOTE
+CLASS="BLOCKQUOTE"
+><P
+>		For the record, we are not using any template type implementation for
+		the cosmetic changes maded to Bugzilla.  It is just alot of html changes
+		in the code itself.  I admit I may have gotten a little carried away with it
+		but the corporate types asked for a more standardized interface to match up
+		with other projects relating to Red Hat web sites.  A lot of other web based
+		internal tools I am working on also look like Bugzilla.
+	      </P
+><P
+>		I do want to land the changes that I have made to Bugzilla but I may
+		have to back out a good deal and make a different version of Red Hat's
+		Bugzilla for checking in to CVS. Especially the cosmetic changes because it
+		seems they may not fit the general public.  I will do that as soon as I can.
+		I also still do my regular QA responsibilities along with Bugzilla so time
+		is difficult sometimes to come by.
+	      </P
+><P
+>		There are also a good deal of other changes that were requested by
+		management for things like support contracts and different permission
+		groups for making bugs private. Here is a short list of the major
+		changes that have been made:
+	      </P
+><P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>		    No enum types. All old enum types are now separate smaller tables.
+		  </P
+></LI
+><LI
+><P
+>		    No bit wise operations. Not all databases support this so they were
+		    changed to a more generic way of doing this task
+		  </P
+></LI
+><LI
+><P
+>		    Bug reports can only be altered by the reporter, assignee, or a
+		    privileged bugzilla user. The rest of the world can see the bug but in
+		    a non-changeable format (unless the bug has been marked private).  They
+		    can however add comments, add and remove themselves from the CC list
+		  </P
+></LI
+><LI
+><P
+>		    Different group scheme. Each group has an id number related to it.
+		    There is a user_group table which contains userid to groupid mappings
+		    to determine which groups each user belongs to.  Additionally there is
+		    a bug_group table that has bugid to groupid mappings to show which
+		    groups can see a particular bug. If there are no entries for a bug in
+		    this table then the bug is public.
+		  </P
+></LI
+><LI
+><P
+>		    Product groups. product_table created to only allow certain products to
+		    be visible for certain groups in both bug entry and query. This was
+		    particulary helpful for support contracts.
+		  </P
+></LI
+><LI
+><P
+>		    Of course many (too many) changes to Bugzilla code itself to allow use
+		    with Oracle and still allow operation with Mysql if so desired.
+		    Currently if you use Mysql it is set to use Mysql's old permission
+		    scheme to keep breakage to a minimum. Hopefully one day this will
+		    standardize on one style which may of course be something completely
+		    different.
+		  </P
+></LI
+><LI
+><P
+>		    Uses Text::Template perl module for rendering of the dynamic HTML pages
+		    such as enter_bug.cgi, query.cgi, bug_form.pl, and for the header and
+		    footer parts of the page. This allows the html to be separate from the
+		    perl code for customizing the look and feel of the page to one's
+		    preference.
+		  </P
+></LI
+><LI
+><P
+>		    There are many other smaller changes. There is also a port to Oracle
+		    that I have been working on as time permits but is not completely
+		    finished but somewhat usable. I will merge it into our standard code
+		    base when it becomes production quality. Unfortunately there will have
+		    to be some conditionals in the code to make it work with other than
+		    Oracle due to some differences between Oracle and Mysql.
+		  </P
+></LI
+></OL
+><P
+>		Both the Mysql and Oracle versions of our current code base are
+		available from ftp://people.redhat.com/dkl. If Terry/Tara wants I can submit
+		patch files for all of the changes I have made and he can determine what is
+		suitable for addition to the main bugzilla cade base. But for me to commit
+		changes to the actual CVS I will need to back out alot of things that are
+		not suitable for the rest of the Bugzilla community. I am open to
+		suggestions.
+	      </P
+></BLOCKQUOTE
+>
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1441"
+></A
+><B
+>A.2.3. </B
+>	    What's the current status of Red Hat Bugzilla?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    <DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>		This information is somewhat dated; I last updated it
+		7 June 2000.  Please see the "Variants" section of "The Bugzilla Guide"
+		for more up-to-date information regarding Red Hat Bugzilla.
+	      </P
+></BLOCKQUOTE
+></DIV
+>
+	    <EM
+>Dave Lawrence</EM
+>:
+	    <A
+NAME="AEN1448"
+></A
+><BLOCKQUOTE
+CLASS="BLOCKQUOTE"
+><P
+>		     I suppose the current thread warrants an update on the status of
+		Oracle and bugzilla ;) We have now been running Bugzilla 2.8 on
+		Oracle for the last two days in our production environment. I
+		tried to do as much testing as possible with it before going live
+		which is some of the reason for the long delay. I did not get
+		enough feedback as I would have liked from internal developers to
+		help weed out any bugs still left so I said "Fine, i will take it
+		live and then I will get the feedback I want :)" So it is now
+		starting to stabilize and it running quite well after working
+		feverishly the last two days fixing problems as soon as they came
+		in from the outside world. The current branch in cvs is up2date if
+		anyone would like to grab it and try it out. The oracle _setup.pl
+		is broken right now due to some last minute changes but I will
+		update that soon. Therefore you would probably need to create the
+		database tables the old fashioned way using the supplied sql
+		creation scripts located in the ./oracle directory. We have heavy
+		optimizations in the database it self thanks to the in-house DBA
+		here at Red Hat so it is running quite fast. The database itself
+		is located on a dual PII450 with 1GB ram and 14 high voltage
+		differential raided scsi drives. The tables and indexes are
+		partitioned in 4 chuncks across the raided drive which is nice
+		because when ever you need to do a full table scan, it is actually
+		starting in 4 different locations on 4 different drives
+		simultaneously. And the indexes of course are on separate drives
+		from the data so that speeds things up tremendously. When  I can
+		find the time I will document all that we have done to get this
+		thing going to help others that may need it.
+	      </P
+><P
+>		As Matt has mentioned it is still using out-dated code and with a
+		little help I would like to bring everything up to date for
+		eventual  incorporation with the main cvs tree. Due to other
+		duties I have with the company any help with this wiould be
+		appreciated. What we are using  now is what I call a best first
+		effort. It definitely can be improved on and may even need
+		complete rewrites in a lot of areas. A lot of changes may have to
+		be made in the way Bugzilla does things currently  to make this
+		transition to a more generic database interface.  Fortunately when
+		making the Oracle changes I made sure I didn't do  anything that I
+		would consider Oracle specific and could not be easily done with
+		other databases. Alot of the sql statements need to be broken up
+		into smaller utilities that themselves would need to make
+		decisions on what database they are using but the majority of the
+		code can be made database neutral.
+	      </P
+></BLOCKQUOTE
+>
+	  </P
+></DIV
+></DIV
+></DIV
+><DIV
+CLASS="QANDADIV"
+><H3
+><A
+NAME="FAQ_LOKI"
+></A
+>3. Loki Bugzilla (AKA Fenris)</H3
+><P
+>	<DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	    Loki's "Fenris" Bugzilla is based upon the (now ancient) Bugzilla 2.8
+	    tree, and is no longer actively maintained.
+	    It works well enough for Loki.  Additionally, the major
+	    differences in Fenris have now been integrated into
+	    the main source tree of Bugzilla, so there's not much
+	    reason to go grab the source.  I leave this section of the
+	    FAQ principally for historical interest, but unless Loki has further
+	    input into Bugzilla's future, it will be deprecated in future versions
+	    of the Guide.
+	  </P
+></BLOCKQUOTE
+></DIV
+>
+      </P
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1457"
+></A
+><B
+>A.3.1. </B
+>	    What about Loki Bugzilla?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Loki Games has a customized version of Bugzilla available at
+	    http://fenris.lokigames.com.  From that page,
+	    <A
+NAME="AEN1461"
+></A
+><BLOCKQUOTE
+CLASS="BLOCKQUOTE"
+><P
+>		     You may have noticed that Fenris is a fork from Bugzilla-- our
+		patches weren't suitable for integration --and a few people have
+		expressed interest in the code. Fenris has one major  improvement
+		over Bugzilla, and that is individual comments are not appended
+		onto a string blob, they are stored as a record in a separate
+		table. This allows you to, for instance, separate comments out
+		according to privilege levels in case your bug database could
+		contain sensitive information not for public eyes. We also provide
+		things like email hiding to protect user's privacy, additional
+		fields such as 'user_affected' in case someone enters someone
+		else's bug, comment editing and deletion, and more conditional
+		system variables than Bugzilla does (turn off attachments,
+		qacontact, etc.).
+	      </P
+></BLOCKQUOTE
+>
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1464"
+></A
+><B
+>A.3.2. </B
+>	    Who maintains Fenris (Loki Bugzilla) now?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Raphael Barrerro &#60;raistlin@lokigames.com&#62;.
+	    Michael Vance created the initial fork, but no longer
+	    maintains the project.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1469"
+></A
+><B
+>A.3.3. </B
+>	    
+	  </P
+></DIV
+></DIV
+></DIV
+><DIV
+CLASS="QANDADIV"
+><H3
+><A
+NAME="FAQ_PHB"
+></A
+>4. Pointy-Haired-Boss Questions</H3
+><P
+>	<DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	    The title of this section doesn't mean you're a PHB -- it just means
+	    you probably HAVE a PHB who wants to know this :)
+	  </P
+></BLOCKQUOTE
+></DIV
+>
+      </P
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1477"
+></A
+><B
+>A.4.1. </B
+>	    Is Bugzilla web-based or do you have to have specific software or
+	    specific operating system on your machine?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    It is web and e-mail based.  You can edit bugs by sending specially
+	    formatted email to a properly configured Bugzilla, or control via the web.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1482"
+></A
+><B
+>A.4.2. </B
+>	    Has anyone you know of already done any Bugzilla integration with
+	    Perforce (SCM software)?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Yes!  You can find more information elsewhere in "The Bugzilla
+	    Guide" in the "Integration with Third-Party Products" section.
+	    The section on Perforce isn't very large, but as the maintainer
+	    of the Guide is charged with Perforce/Bugzilla integration by
+	    his company, you can expect this section to grow.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1487"
+></A
+><B
+>A.4.3. </B
+>	    Does Bugzilla allow the user to track multiple projects?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Absolutely!  You can track up to a "soft-limit" of around
+	    64 individual "Products", that can each be composed of as
+	    many "Components" as you want.  Check the Administration
+	    section of the Bugzilla Guide for more information regarding
+	    setting up Products and Components.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1492"
+></A
+><B
+>A.4.4. </B
+>	    If I am on many projects, and search for all bugs assigned to me, will
+	    Bugzilla list them for me and allow me to sort by project, severity etc?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Yes.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1497"
+></A
+><B
+>A.4.5. </B
+>	    Does Bugzilla allow attachments (text, screenshots, urls etc)? If yes,
+	    are there any that are NOT allowed?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Yes.  There are many specific MIME-types that are pre-defined by Bugzilla,
+	    but you may specify any arbitrary MIME-type you need when you
+	    upload the file.  Since all attachments are stored in the database,
+	    however, I recommend storing large binary attachments elsewhere
+	    in the web server's file system and providing a hyperlink
+	    as a comment, or in the provided "URL" field in the bug report.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1502"
+></A
+><B
+>A.4.6. </B
+>	    Does Bugzilla allow us to define our own priorities and levels? Do we
+	    have complete freedom to change the labels of fields and format of them, and
+	    the choice of acceptable values?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Yes.  However, modifying some fields, notably those related to bug
+	    progression states, also require adjusting the program logic to
+	    compensate for the change.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1507"
+></A
+><B
+>A.4.7. </B
+>	    Does Bugzilla provide any reporting features, metrics, graphs, etc? You
+	    know, the type of stuff that management likes to see. :)
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Yes.  Look at <A
+HREF="http://bugzilla.mozilla.org/reports.cgi"
+TARGET="_top"
+>	    http://bugzilla.mozilla.org/reports.cgi</A
+> for basic reporting
+	    facilities.
+	  </P
+><P
+>	    For more advanced reporting, I recommend hooking up a professional
+	    reporting package, such as Crystal Reports, and use ODBC to access
+	    the MySQL database.  You can do a lot through the Query page of
+	    Bugzilla as well, but right now Advanced Reporting is much
+	    better accomplished through third-party utilities that can
+	    interface with the database directly.
+	  </P
+><P
+>	    Advanced Reporting is a Bugzilla 3.X proposed feature.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1515"
+></A
+><B
+>A.4.8. </B
+>	    Is there email notification and if so, what do you see when you get an
+	    email? Do you see bug number and title or is it only the number?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Email notification is user-configurable.  The bug id and Topic
+	    of the bug report accompany each email notification, along with
+	    a list of the changes made.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1520"
+></A
+><B
+>A.4.9. </B
+>	    Can email notification be set up to send to multiple
+	    people, some on the To List, CC List, BCC List etc?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Yes.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1525"
+></A
+><B
+>A.4.10. </B
+>	    If there is email notification, do users have to have any particular
+	    type of email application?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Bugzilla email is sent in plain text, the most compatible mail format
+	    on the planet.
+	    <DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>		If you decide to use the bugzilla_email integration features
+		to allow Bugzilla to record responses to mail with the associated bug,
+		you may need to caution your users to set their mailer to "respond
+		to messages in the format in which they were sent".  For security reasons
+		Bugzilla ignores HTML tags in comments, and if a user sends HTML-based
+		email into Bugzilla the resulting comment looks downright awful.
+	      </P
+></BLOCKQUOTE
+></DIV
+>
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1532"
+></A
+><B
+>A.4.11. </B
+>	     If I just wanted to track certain bugs, as they go through life, can I
+	    set it up to alert me via email whenever that bug changes, whether it be
+	    owner, status or description etc.?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Yes.  Place yourself in the "cc" field of the bug you wish to monitor.
+	    Then change your "Notify me of changes to" field in the Email Settings
+	    tab of the User Preferences screen in Bugzilla to the "Only those
+	    bugs which I am listed on the CC line" option.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1537"
+></A
+><B
+>A.4.12. </B
+>	    Does Bugzilla allow data to be imported and exported? If I had outsiders
+	    write up a bug report using a MS Word bug template, could that template be
+	    imported into "matching" fields? If I wanted to take the results of a query
+	    and export that data to MS Excel, could I do that?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Mozilla allows data export through a custom DTD in XML format.
+	    It does not, however, export to specific formats other than the
+	    XML Mozilla DTD.  Importing the data into Excel or any other application
+	    is left as an exercise for the reader.
+	  </P
+><P
+>	    If you create import filters to other applications from Mozilla's XML,
+	    please submit your modifications for inclusion in future Bugzilla
+	    distributions.
+	  </P
+><P
+>	    As for data import, any application can send data to Bugzilla through
+	    the HTTP protocol, or through Mozilla's XML API.  However, it seems
+	    kind of silly to put another front-end in front of Bugzilla;
+	    it makes more sense to create a simplified bug submission form in
+	    HTML.  You can find an excellent example at
+	    <A
+HREF="http://www.mozilla.org/quality/help/bugzilla-helper.html"
+TARGET="_top"
+>	    http://www.mozilla.org/quality/help/bugzilla-helper.html</A
+>
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1545"
+></A
+><B
+>A.4.13. </B
+>	    Does Bugzilla allow fields to be added, changed or deleted? If I want to
+	    customize the bug submission form to meet our needs, can I do that using our
+	    terminology?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Yes.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1550"
+></A
+><B
+>A.4.14. </B
+>	    Has anyone converted Bugzilla to another language to be used in other
+	    countries? Is it localizable?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Currently, no.  Internationalization support for Perl did not
+	    exist in a robust fashion until the recent release of version 5.6.0;
+	    Bugzilla is, and likely will remain (until 3.X) completely
+	    non-localized.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1555"
+></A
+><B
+>A.4.15. </B
+>	    Can a user create and save reports? Can they do this in Word format?
+	    Excel format?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Yes.  No.  No.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1560"
+></A
+><B
+>A.4.16. </B
+>	    Can a user re-run a report with a new project, same query?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Yes.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1565"
+></A
+><B
+>A.4.17. </B
+>	    Can a user modify an existing report and then save it into another name?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    You can save an unlimited number of queries in Bugzilla.  You are free
+	    to modify them and rename them to your heart's desire.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1570"
+></A
+><B
+>A.4.18. </B
+>	    Does Bugzilla have the ability to search by word, phrase, compound
+	    search?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    You have no idea.  Bugzilla's query interface, particularly with the
+	    advanced Boolean operators, is incredibly versatile.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1575"
+></A
+><B
+>A.4.19. </B
+>	    Can the admin person establish separate group and individual user
+	    privileges?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Yes.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1580"
+></A
+><B
+>A.4.20. </B
+>	     Does Bugzilla provide record locking when there is simultaneous access
+	    to the same bug? Does the second person get a notice that the bug is in use
+	    or how are they notified?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Bugzilla does not lock records.  It provides mid-air collision detection,
+	    and offers the offending user a choice of options to deal with the conflict.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1585"
+></A
+><B
+>A.4.21. </B
+>	    Are there any backup features provided?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    MySQL, the database back-end for Bugzilla, allows hot-backup of data.
+	    You can find strategies for dealing with backup considerations
+	    at <A
+HREF="http://www.mysql.com/doc/B/a/Backup.html"
+TARGET="_top"
+>	    http://www.mysql.com/doc/B/a/Backup.html</A
+>
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1591"
+></A
+><B
+>A.4.22. </B
+>	    Can users be on the system while a backup is in progress?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Yes.  However, commits to the database must wait
+	    until the tables are unlocked.  Bugzilla databases are typically
+	    very small, and backups routinely take less than a minute.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1596"
+></A
+><B
+>A.4.23. </B
+>	    What type of human resources are needed to be on staff to install and
+	    maintain Bugzilla? Specifically, what type of skills does the person need to
+	    have? I need to find out if we were to go with Bugzilla, what types of
+	    individuals would we need to hire and how much would that cost vs buying an
+	    "Out-of-the-Box" solution.
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    If Bugzilla is set up correctly from the start, continuing maintenance needs
+	    are minimal and can be completed by unskilled labor.  Things like rotate
+	    backup tapes and check log files for the word "error".
+	  </P
+><P
+>	    Commercial Bug-tracking software typically costs somewhere upwards
+	    of $20,000 or more for 5-10 floating licenses.  Bugzilla consultation
+	    is available from skilled members of the newsgroup.
+	  </P
+><P
+>	    As an example, as of this writing I typically charge
+	     $115 for the first hour, and $89 each hour thereafter
+	    for consulting work.  It takes me three to five hours to make Bugzilla
+	    happy on a Development installation of Linux-Mandrake.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1603"
+></A
+><B
+>A.4.24. </B
+>	    What time frame are we looking at if we decide to hire people to install
+	    and maintain the Bugzilla? Is this something that takes hours or weeks to
+	    install and a couple of hours per week to maintain and customize or is this
+	    a multi-week install process, plus a full time job for 1 person, 2 people,
+	    etc?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    It all depends on your level of commitment.  Someone with much Bugzilla
+	    experience can get you up and running in less than a day, and
+	    your Bugzilla install can run untended for years.  If your
+	    Bugzilla strategy is critical to your business workflow, hire somebody
+	    with reasonable UNIX or Perl skills to handle your process management and
+	    bug-tracking maintenance &#38; customization.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1608"
+></A
+><B
+>A.4.25. </B
+>	    Is there any licensing fee or other fees for using Bugzilla? Any
+	    out-of-pocket cost other than the bodies needed as identified above?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    No.  MySQL asks, if you find their product valuable, that you purchase
+	    a support contract from them that suits your needs.
+	  </P
+></DIV
+></DIV
+></DIV
+><DIV
+CLASS="QANDADIV"
+><H3
+><A
+NAME="FAQ_INSTALL"
+></A
+>5. Bugzilla Installation</H3
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1615"
+></A
+><B
+>A.5.1. </B
+>	    How do I download and install Bugzilla?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Check <A
+HREF="http://www.mozilla.org/projects/bugzilla/"
+TARGET="_top"
+>	    http://www.mozilla.org/projects/bugzilla/</A
+> for details.
+	    Once you download it, untar it, read the README and 
+	    the Bugzilla Guide.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1621"
+></A
+><B
+>A.5.2. </B
+>	    How do I install Bugzilla on Windows NT?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Installation on Windows NT has its own section in
+	    "The Bugzilla Guide".
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1626"
+></A
+><B
+>A.5.3. </B
+>	    Is there an easy way to change the Bugzilla cookie name?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    At present, no.
+	  </P
+></DIV
+></DIV
+></DIV
+><DIV
+CLASS="QANDADIV"
+><H3
+><A
+NAME="FAQ_SECURITY"
+></A
+>6. Bugzilla Security</H3
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1633"
+></A
+><B
+>A.6.1. </B
+>	    How do I completely disable MySQL security if it's giving me problems
+	    (I've followed the instructions in the README!)?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Run mysql like this: "mysqld --skip-grant-tables".  Please remember <EM
+>this
+	    makes mysql as secure as taping a $100 to the floor of a football stadium
+	    bathroom for safekeeping.</EM
+>  Please read the Security section of the
+	    Administration chapter of "The Bugzilla Guide" before proceeding.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1639"
+></A
+><B
+>A.6.2. </B
+>	    Are there any security problems with Bugzilla?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    The Bugzilla code has not undergone a complete security audit.
+	    It is recommended that you closely examine permissions on your Bugzilla
+	    installation, and follow the recommended security guidelines found
+	    in the README and in The Bugzilla Guide.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1644"
+></A
+><B
+>A.6.3. </B
+>	    I've implemented the security fixes mentioned in Chris Yeh's security
+	    advisory of 5/10/2000 advising not to run MySQL as root, and am running into
+	    problems with MySQL no longer working correctly.
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    This is a common problem, related to running out of file descriptors.
+	    Simply add "ulimit -n unlimited" to the script which starts
+	    mysqld.
+	  </P
+></DIV
+></DIV
+></DIV
+><DIV
+CLASS="QANDADIV"
+><H3
+><A
+NAME="FAQ_EMAIL"
+></A
+>7. Bugzilla Email</H3
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1651"
+></A
+><B
+>A.7.1. </B
+>	    I have a user who doesn't want to receive any more email from Bugzilla.
+	    How do I stop it entirely for this user?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    With the email changes to 2.12, the user should be able to set
+	    this in user email preferences.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1656"
+></A
+><B
+>A.7.2. </B
+>	    I'm evaluating/testing Bugzilla, and don't want it to send email to
+	    anyone but me. How do I do it?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Edit the param for the mail text. Replace "To:" with "X-Real-To:",
+	    replace "Cc:" with "X-Real-CC:", and add a "To: (myemailaddress)".
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1661"
+></A
+><B
+>A.7.3. </B
+>	    I want whineatnews.pl to whine at something more, or other than, only new
+	    bugs. How do I do it?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Try Klaas Freitag's excellent patch for "whineatassigned" functionality.
+	    You can find it at<A
+HREF=" http://bugzilla.mozilla.org/show_bug.cgi?id=6679"
+TARGET="_top"
+>	      http://bugzilla.mozilla.org/show_bug.cgi?id=6679</A
+>. This
+	    patch is against an older version of Bugzilla, so you must apply
+	    the diffs manually.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1667"
+></A
+><B
+>A.7.4. </B
+>	    I don't like/want to use Procmail to hand mail off to bug_email.pl.
+	    What alternatives do I have?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    You can call bug_email.pl directly from your aliases file, with
+	    an entry like this:
+	    <A
+NAME="AEN1671"
+></A
+><BLOCKQUOTE
+CLASS="BLOCKQUOTE"
+><P
+>		bugzilla-daemon: "|/usr/local/bin/bugzilla/contrib/bug_email.pl"
+	      </P
+></BLOCKQUOTE
+>
+	    However, this is fairly nasty and subject to problems; you also
+	    need to set up your smrsh (sendmail restricted shell) to allow
+	    it.  In a pinch, though, it can work.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1674"
+></A
+><B
+>A.7.5. </B
+>	    How do I set up the email interface to submit/change bugs via email?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    You can find an updated README.mailif file in the contrib/ directory
+	    of your Bugzilla distribution that walks you through the setup.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1679"
+></A
+><B
+>A.7.6. </B
+>	    Email takes FOREVER to reach me from bugzilla -- it's extremely slow.
+	    What gives?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    If you are using an alternate Mail Transport Agent (MTA other than
+	    sendmail), make sure the options given in the "processmail" script for all
+	    instances of "sendmail" are correct for your MTA. If you are using Sendmail,
+	    you may wish to delete the "-ODeliveryMode=deferred" option in the
+	    "processmail" script for every invocation of "sendmail". (Be sure and leave
+	    the "-t" option, though!)
+	  </P
+><P
+>	    A better alternative is to change the "-O" option to
+	    "-ODeliveryMode=background".  This prevents Sendmail from hanging your
+	    Bugzilla Perl processes if the domain to which it must send mail
+	    is unavailable.
+	  </P
+><P
+>	    This is now a configurable parameter called "sendmailnow", available
+	    from editparams.cgi.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1686"
+></A
+><B
+>A.7.7. </B
+>	     How come email never reaches me from bugzilla changes?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Double-check that you have not turned off email in your user preferences.
+	    Confirm that Bugzilla is able to send email by visiting the "Log In"
+	    link of your Bugzilla installation and clicking the "Email me a password"
+	    button after entering your email address.
+	  </P
+><P
+>	    If you never receive mail from Bugzilla, chances you do not have
+	    sendmail in "/usr/lib/sendmail".  Ensure sendmail lives in, or is symlinked
+	    to, "/usr/lib/sendmail".
+	  </P
+></DIV
+></DIV
+></DIV
+><DIV
+CLASS="QANDADIV"
+><H3
+><A
+NAME="FAQ_DB"
+></A
+>8. Bugzilla Database</H3
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1694"
+></A
+><B
+>A.8.1. </B
+>	    I've heard Bugzilla can be used with Oracle?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Red Hat Bugzilla, mentioned above, works with Oracle.  The current version
+	    from Mozilla.org does not have this capability.  Unfortunately, though
+	    you will sacrifice a lot of the really great features available in
+	    Bugzilla 2.10 and 2.12 if you go with the 2.8-based Redhat version.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1699"
+></A
+><B
+>A.8.2. </B
+>	    Bugs are missing from queries, but exist in the database (and I can pull
+	    them up by specifying the bug ID). What's wrong?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	     You've almost certainly enabled the "shadow database", but for some
+	    reason it hasn't been updated for all your bugs. This is the database
+	    against which queries are run, so that really complex or slow queries won't
+	    lock up portions of the database for other users. You can turn off the
+	    shadow database in editparams.cgi. If you wish to continue using the shadow
+	    database, then as your "bugs" user run "./syncshadowdb -syncall" from the
+	    command line in the bugzilla installation directory to recreate your shadow
+	    database. After it finishes, be sure to check the params and make sure that
+	    "queryagainstshadowdb" is still turned on. The syncshadowdb program turns it
+	    off if it was on, and is supposed to turn it back on when completed; that
+	    way, if it crashes in the middle of recreating the database, it will stay
+	    off forever until someone turns it back on by hand. Apparently, it doesn't
+	    always do that yet.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1704"
+></A
+><B
+>A.8.3. </B
+>	    I think my database might be corrupted, or contain invalid entries. What
+	    do I do?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Run the "sanity check" utility (./sanitycheck.cgi in the bugzilla_home
+	    directory) to see! If it all comes back, you're OK.  If it doesn't come back
+	    OK (i.e. any red letters), there are certain things Bugzilla can recover
+	    from and certain things it can't.  If it can't auto-recover, I hope you're
+	    familiar with mysqladmin commands or have installed another way to manage
+	    your database...
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1709"
+></A
+><B
+>A.8.4. </B
+>	    I want to manually edit some entries in my database. How?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	     There is no facility in Bugzilla itself to do this. It's also generally
+	    not a smart thing to do if you don't know exactly what you're doing.
+	    However, if you understand SQL you can use the mysqladmin utility to
+	    manually insert, delete, and modify table information. Personally, I
+	    use "phpMyAdmin". You have to compile a PHP module with MySQL
+	    support to make it work, but it's very clean and easy to use.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1714"
+></A
+><B
+>A.8.5. </B
+>	    I try to add myself as a user, but Bugzilla always tells me my password is wrong.
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Certain version of MySQL (notably, 3.23.29 and 3.23.30) accidentally disabled
+	    the "crypt()" function.  This prevented MySQL from storing encrypted passwords.
+	    Upgrade to the "3.23 stable" version of MySQL and you should be good to go.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1719"
+></A
+><B
+>A.8.6. </B
+>	    I think I've set up MySQL permissions correctly, but bugzilla still can't
+	    connect.
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Try running MySQL from its binary: "mysqld --skip-grant-tables". This
+	    will allow you to completely rule out grant tables as the cause of your
+	    frustration. However, I do not recommend you run it this way on a regular
+	    basis, unless you really want your web site defaced and your machine
+	    cracked.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1724"
+></A
+><B
+>A.8.7. </B
+>	    How do I synchronize bug information among multiple different Bugzilla
+	    databases?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Well, you can synchronize or you can move bugs.  Synchronization will
+	    only work one way -- you can create a read-only copy of the database
+	    at one site, and have it regularly updated at intervals from the main
+	    database.
+	  </P
+><P
+>	    MySQL has some synchronization features builtin to the latest releases.
+	    It would be great if someone looked into the possibilities there
+	    and provided a report to the newsgroup on how to effectively
+	    synchronize two Bugzilla installations.
+	  </P
+><P
+>	    If you simply need to transfer bugs from one Bugzilla to another,
+	    checkout the "move.pl" script in the Bugzilla distribution.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1731"
+></A
+><B
+>A.8.8. </B
+>	    Why do I get bizarre errors when trying to submit data, particularly problems
+	    with "groupset"?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    If you're sure your MySQL parameters are correct, you might want turn
+	    "strictvaluechecks" OFF in editparams.cgi.  If you have "usebugsentry" set
+	    "On", you also cannot submit a bug as readable by more than one group with
+	    "strictvaluechecks" ON.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1736"
+></A
+><B
+>A.8.9. </B
+>	    How come even after I delete bugs, the long descriptions show up?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Delete everything from $BUZILLA_HOME/shadow.  Bugzilla creates shadow
+	    files there, with each filename corresponding to a
+	    bug number.  Also be sure to run syncshadowdb to make sure, if you are using
+	    a shadow database, that the shadow database is current.
+	  </P
+></DIV
+></DIV
+></DIV
+><DIV
+CLASS="QANDADIV"
+><H3
+><A
+NAME="FAQ_NT"
+></A
+>9. Bugzilla and Win32</H3
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1743"
+></A
+><B
+>A.9.1. </B
+>	    What is the easiest way to run Bugzilla on Win32 (Win98+/NT/2K)?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Remove Windows. Install Linux. Install Bugzilla.
+	    The boss will never know the difference.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1748"
+></A
+><B
+>A.9.2. </B
+>	    Is there a "Bundle::Bugzilla" equivalent for Win32?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Not currently.  Bundle::Bugzilla enormously simplifies Bugzilla
+	    installation on UNIX systems.  If someone can volunteer to
+	    create a suitable PPM bundle for Win32, it would be appreciated.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1753"
+></A
+><B
+>A.9.3. </B
+>	    CGI's are failing with a "something.cgi is not a valid Windows NT
+	    application" error. Why?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Depending on what Web server you are using, you will have to configure
+	    the Web server to treat *.cgi files as CGI scripts. In IIS, you do this by
+	    adding *.cgi to the App Mappings with the &#60;path&#62;\perl.exe %s %s as the
+	    executable.
+	  </P
+><P
+>	    Microsoft has some advice on this matter, as well:
+	    <A
+NAME="AEN1758"
+></A
+><BLOCKQUOTE
+CLASS="BLOCKQUOTE"
+><P
+>		"Set application mappings. In the ISM, map the extension for the script
+		file(s) to the executable for the script interpreter. For example, you might
+		map the extension .py to Python.exe, the executable for the Python script
+		interpreter. Note For the ActiveState Perl script interpreter, the extension
+		.pl is associated with PerlIS.dll by default. If you want to change the
+		association of .pl to perl.exe, you need to change the application mapping.
+		In the mapping, you must add two percent (%) characters to the end of the
+		pathname for perl.exe, as shown in this example: c:\perl\bin\perl.exe %s %s"
+	      </P
+></BLOCKQUOTE
+>
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1761"
+></A
+><B
+>A.9.4. </B
+>	    Can I have some general instructions on how to make Bugzilla on Win32 work?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    The following couple entries are deprecated in favor of the Windows installation
+	    instructions available in the "Administration" portion of "The Bugzilla Guide".
+	    However, they are provided here for historical interest and insight.
+	    <P
+CLASS="LITERALLAYOUT"
+>&nbsp;&nbsp;1.&nbsp;#!C:/perl/bin/perl&nbsp;had&nbsp;to&nbsp;be&nbsp;added&nbsp;to&nbsp;every&nbsp;perl&nbsp;file.<br>
+&nbsp;&nbsp;2.&nbsp;Converted&nbsp;to&nbsp;Net::SMTP&nbsp;to&nbsp;handle&nbsp;mail&nbsp;messages&nbsp;instead&nbsp;of<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/usr/bin/sendmail.<br>
+&nbsp;&nbsp;3.&nbsp;The&nbsp;crypt&nbsp;function&nbsp;isn't&nbsp;available&nbsp;on&nbsp;Windows&nbsp;NT&nbsp;(at&nbsp;least&nbsp;none&nbsp;that&nbsp;I<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;am&nbsp;aware),&nbsp;so&nbsp;I&nbsp;made&nbsp;encrypted&nbsp;passwords&nbsp;=&nbsp;plaintext&nbsp;passwords.<br>
+&nbsp;&nbsp;4.&nbsp;The&nbsp;system&nbsp;call&nbsp;to&nbsp;diff&nbsp;had&nbsp;to&nbsp;be&nbsp;changed&nbsp;to&nbsp;the&nbsp;Cygwin&nbsp;diff.<br>
+&nbsp;&nbsp;5.&nbsp;This&nbsp;was&nbsp;just&nbsp;to&nbsp;get&nbsp;a&nbsp;demo&nbsp;running&nbsp;under&nbsp;NT,&nbsp;it&nbsp;seems&nbsp;to&nbsp;be&nbsp;working<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;good,&nbsp;and&nbsp;I&nbsp;have&nbsp;inserted&nbsp;almost&nbsp;100&nbsp;bugs&nbsp;from&nbsp;another&nbsp;bug&nbsp;tracking<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;system.&nbsp;Since&nbsp;this&nbsp;work&nbsp;was&nbsp;done&nbsp;just&nbsp;to&nbsp;get&nbsp;an&nbsp;in-house&nbsp;demo,&nbsp;I&nbsp;am&nbsp;NOT<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;planning&nbsp;on&nbsp;making&nbsp;a&nbsp;patch&nbsp;for&nbsp;submission&nbsp;to&nbsp;Bugzilla.&nbsp;If&nbsp;you&nbsp;would<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;like&nbsp;a&nbsp;zip&nbsp;file,&nbsp;let&nbsp;me&nbsp;know.<br>
+<br>
+Q:&nbsp;Hmm,&nbsp;couldn't&nbsp;figure&nbsp;it&nbsp;out&nbsp;from&nbsp;the&nbsp;general&nbsp;instructions&nbsp;above.&nbsp;&nbsp;How<br>
+about&nbsp;step-by-step?<br>
+A:&nbsp;Sure!&nbsp;Here&nbsp;ya&nbsp;go!<br>
+<br>
+&nbsp;&nbsp;1.&nbsp;Install&nbsp;IIS&nbsp;4.0&nbsp;from&nbsp;the&nbsp;NT&nbsp;Option&nbsp;Pack&nbsp;#4.<br>
+&nbsp;&nbsp;2.&nbsp;Download&nbsp;and&nbsp;install&nbsp;Active&nbsp;Perl.<br>
+&nbsp;&nbsp;3.&nbsp;Install&nbsp;the&nbsp;Windows&nbsp;GNU&nbsp;tools&nbsp;from&nbsp;Cygwin.&nbsp;Make&nbsp;sure&nbsp;to&nbsp;add&nbsp;the&nbsp;bin<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;directory&nbsp;to&nbsp;your&nbsp;system&nbsp;path.&nbsp;(Everyone&nbsp;should&nbsp;have&nbsp;these,&nbsp;whether<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;they&nbsp;decide&nbsp;to&nbsp;use&nbsp;Bugzilla&nbsp;or&nbsp;not.&nbsp;:-)&nbsp;)<br>
+&nbsp;&nbsp;4.&nbsp;Download&nbsp;relevant&nbsp;packages&nbsp;from&nbsp;ActiveState&nbsp;at<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.activestate.com/packages/zips/.&nbsp;+&nbsp;DBD-Mysql.zip<br>
+&nbsp;&nbsp;5.&nbsp;Extract&nbsp;each&nbsp;zip&nbsp;file&nbsp;with&nbsp;WinZip,&nbsp;and&nbsp;install&nbsp;each&nbsp;ppd&nbsp;file&nbsp;using&nbsp;the<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;notation:&nbsp;ppm&nbsp;install&nbsp;&#60;module&#62;.ppd<br>
+&nbsp;&nbsp;6.&nbsp;Install&nbsp;Mysql.&nbsp;&nbsp;*Note:&nbsp;If&nbsp;you&nbsp;move&nbsp;the&nbsp;default&nbsp;install&nbsp;from&nbsp;c:\mysql,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;you&nbsp;must&nbsp;add&nbsp;the&nbsp;appropriate&nbsp;startup&nbsp;parameters&nbsp;to&nbsp;the&nbsp;NT&nbsp;service.&nbsp;(ex.<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-b&nbsp;e:\\programs\\mysql)<br>
+&nbsp;&nbsp;7.&nbsp;Download&nbsp;any&nbsp;Mysql&nbsp;client.&nbsp;http://www.mysql.com/download_win.html<br>
+&nbsp;&nbsp;8.&nbsp;Setup&nbsp;MySql.&nbsp;(These&nbsp;are&nbsp;the&nbsp;commands&nbsp;that&nbsp;I&nbsp;used.)<br>
+<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I.&nbsp;Cleanup&nbsp;default&nbsp;database&nbsp;settings.<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C:\mysql\bin\mysql&nbsp;-u&nbsp;root&nbsp;mysql<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mysql&#62;&nbsp;DELETE&nbsp;FROM&nbsp;user&nbsp;WHERE&nbsp;Host='localhost'&nbsp;AND&nbsp;User='';<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mysql&#62;&nbsp;quit<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C:\mysql\bin\mysqladmin&nbsp;reload<br>
+<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;II.&nbsp;Set&nbsp;password&nbsp;for&nbsp;root.<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C:\mysql\bin\mysql&nbsp;-u&nbsp;root&nbsp;mysql<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mysql&#62;&nbsp;UPDATE&nbsp;user&nbsp;SET&nbsp;Password=PASSWORD('new_password')<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE&nbsp;user='root';<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mysql&#62;&nbsp;FLUSH&nbsp;PRIVILEGES;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mysql&#62;&nbsp;quit<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C:\mysql\bin\mysqladmin&nbsp;-u&nbsp;root&nbsp;reload<br>
+<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;III.&nbsp;Create&nbsp;bugs&nbsp;user.<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C:\mysql\bin\mysql&nbsp;-u&nbsp;root&nbsp;-p<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mysql&#62;&nbsp;insert&nbsp;into&nbsp;user&nbsp;(host,user,password)<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;values('localhost','bugs','');<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mysql&#62;&nbsp;quit<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C:\mysql\bin\mysqladmin&nbsp;-u&nbsp;root&nbsp;reload<br>
+<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IV.&nbsp;Create&nbsp;the&nbsp;bugs&nbsp;database.<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C:\mysql\bin\mysql&nbsp;-u&nbsp;root&nbsp;-p<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mysql&#62;&nbsp;create&nbsp;database&nbsp;bugs;<br>
+<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;V.&nbsp;Give&nbsp;the&nbsp;bugs&nbsp;user&nbsp;access&nbsp;to&nbsp;the&nbsp;bugs&nbsp;database.<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mysql&#62;&nbsp;insert&nbsp;into&nbsp;db<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(host,db,user,select_priv,insert_priv,update_priv,delete_priv,create_priv,drop_priv)<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;values('localhost','bugs','bugs','Y','Y','Y','Y','Y','N')<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mysql&#62;&nbsp;quit<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C:\mysql\bin\mysqladmin&nbsp;-u&nbsp;root&nbsp;reload<br>
+&nbsp;&nbsp;9.&nbsp;Run&nbsp;the&nbsp;table&nbsp;scripts&nbsp;to&nbsp;setup&nbsp;the&nbsp;bugs&nbsp;database.<br>
+&nbsp;10.&nbsp;Change&nbsp;CGI.pm&nbsp;to&nbsp;use&nbsp;the&nbsp;following&nbsp;regular&nbsp;expression&nbsp;because&nbsp;of<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;differing&nbsp;backslashes&nbsp;in&nbsp;NT&nbsp;versus&nbsp;UNIX.<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o&nbsp;$0&nbsp;=~&nbsp;m:[^\\]*$:;<br>
+&nbsp;11.&nbsp;Had&nbsp;to&nbsp;make&nbsp;the&nbsp;crypt&nbsp;password&nbsp;=&nbsp;plain&nbsp;text&nbsp;password&nbsp;in&nbsp;the&nbsp;database.<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Thanks&nbsp;to&nbsp;Andrew&nbsp;Lahser"&nbsp;&#60;andrew_lahser@merck.com&#62;"&nbsp;on&nbsp;this&nbsp;one.)&nbsp;The<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;files&nbsp;that&nbsp;I&nbsp;changed&nbsp;were:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o&nbsp;globals.pl<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o&nbsp;CGI.pl<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o&nbsp;alternately,&nbsp;you&nbsp;can&nbsp;try&nbsp;commenting&nbsp;all&nbsp;references&nbsp;to&nbsp;'crypt'<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;and&nbsp;replace&nbsp;them&nbsp;with&nbsp;similar&nbsp;lines&nbsp;but&nbsp;without&nbsp;encrypt()<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;or&nbsp;crypr()&nbsp;functions&nbsp;insida&nbsp;all&nbsp;files.<br>
+&nbsp;12.&nbsp;Replaced&nbsp;sendmail&nbsp;with&nbsp;Windmail.&nbsp;Basically,&nbsp;you&nbsp;have&nbsp;to&nbsp;come&nbsp;up&nbsp;with&nbsp;a<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sendmail&nbsp;substitute&nbsp;for&nbsp;NT.&nbsp;Someone&nbsp;said&nbsp;that&nbsp;they&nbsp;used&nbsp;a&nbsp;Perl&nbsp;module<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Net::SMTP),&nbsp;but&nbsp;I&nbsp;was&nbsp;trying&nbsp;to&nbsp;save&nbsp;time&nbsp;and&nbsp;do&nbsp;as&nbsp;little&nbsp;Perl&nbsp;coding<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;as&nbsp;possible.<br>
+&nbsp;13.&nbsp;Added&nbsp;"perl"&nbsp;to&nbsp;the&nbsp;beginning&nbsp;of&nbsp;all&nbsp;Perl&nbsp;system&nbsp;calls&nbsp;that&nbsp;use&nbsp;a&nbsp;perl<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;script&nbsp;as&nbsp;an&nbsp;argument&nbsp;and&nbsp;renamed&nbsp;processmail&nbsp;to&nbsp;processmail.pl.<br>
+&nbsp;14.&nbsp;In&nbsp;processmail.pl,&nbsp;I&nbsp;added&nbsp;binmode(HANDLE)&nbsp;before&nbsp;all&nbsp;read()&nbsp;calls.&nbsp;I'm<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;not&nbsp;sure&nbsp;about&nbsp;this&nbsp;one,&nbsp;but&nbsp;the&nbsp;read()&nbsp;under&nbsp;NT&nbsp;wasn't&nbsp;counting&nbsp;the<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EOLs&nbsp;without&nbsp;the&nbsp;binary&nbsp;read."<br>
+	&nbsp;&nbsp;&nbsp;&nbsp;</P
+>
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1767"
+></A
+><B
+>A.9.5. </B
+>	    I'm having trouble with the perl modules for NT not being able to talk to
+	    to the database.
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Your modules may be outdated or inaccurate. Try:
+	    <P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>		  Hitting http://www.activestate.com/ActivePerl
+		</P
+></LI
+><LI
+><P
+>		  Download ActivePerl
+		</P
+></LI
+><LI
+><P
+>		  Go to your prompt
+		</P
+></LI
+><LI
+><P
+>		  Type 'ppm'
+		</P
+></LI
+><LI
+><P
+>		  <TT
+CLASS="PROMPT"
+>PPM&#62;</TT
+> <B
+CLASS="COMMAND"
+>install DBI DBD-mysql GD</B
+>
+		</P
+></LI
+></OL
+>
+	    I reckon TimeDate and Data::Dumper come with the activeperl. You can check
+	    the ActiveState site for packages for installation through PPM.
+	    <A
+HREF=" http://www.activestate.com/Packages/"
+TARGET="_top"
+>	      http://www.activestate.com/Packages/</A
+>
+	  </P
+></DIV
+></DIV
+></DIV
+><DIV
+CLASS="QANDADIV"
+><H3
+><A
+NAME="FAQ_USE"
+></A
+>10. Bugzilla Usage</H3
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1788"
+></A
+><B
+>A.10.1. </B
+>	    The query page is very confusing.  Isn't there a simpler way to query?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    We are developing in that direction.  You can follow progress on this
+	    at <A
+HREF="http://bugzilla.mozilla.org/show_bug.cgi?id=16775"
+TARGET="_top"
+>	      http://bugzilla.mozilla.org/show_bug.cgi?id=16775</A
+>.  Some functionality
+	    is available in Bugzilla 2.12, and is available as "quicksearch.html"
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1794"
+></A
+><B
+>A.10.2. </B
+>	    I'm confused by the behavior of the "accept" button in the Show Bug form.
+	    Why doesn't it assign the bug to me when I accept it?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    The current behavior is acceptable to bugzilla.mozilla.org and most
+	    users.  I personally don't like it.  You have your choice of patches
+	    to change this behavior, however.
+	    <P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+><A
+HREF="http://bugzilla.mozilla.org/showattachment.cgi?attach_id=8029"
+TARGET="_top"
+>		Add a "and accept bug" radio button</A
+></TD
+></TR
+><TR
+><TD
+><A
+HREF="http://bugzilla.mozilla.org/showattachment.cgi?attach_id=8153"
+TARGET="_top"
+>		"Accept" button automatically assigns to you</A
+></TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+>
+	    Note that these patches are somewhat dated.  You will need to do the find
+	    and replace manually to apply them.  They are very small, though.  It is easy.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1804"
+></A
+><B
+>A.10.3. </B
+>	    I can't upload anything into the database via the "Create Attachment"
+	    link.  What am I doing wrong?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    The most likely cause is a very old browser or a browser that is
+	    incompatible with file upload via POST.  Download the latest Netscape,
+	    Microsoft, or Mozilla browser to handle uploads correctly.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1809"
+></A
+><B
+>A.10.4. </B
+>	    Email submissions to Bugzilla that have attachments end up asking me to
+	    save it as a "cgi" file.
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Yup.  Just rename it once you download it, or save it under a different
+	    filename.  This will not be fixed anytime too soon, because it would
+	    cripple some other functionality.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1814"
+></A
+><B
+>A.10.5. </B
+>	    How do I change a keyword in Bugzilla, once some bugs are using it?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    In the Bugzilla administrator UI, edit the keyword and it will let you
+	    replace the old keyword name with a new one.  This will cause a problem
+	    with the keyword cache.  Run sanitycheck.cgi to fix it.
+	  </P
+></DIV
+></DIV
+></DIV
+><DIV
+CLASS="QANDADIV"
+><H3
+><A
+NAME="FAQ_HACKING"
+></A
+>11. Bugzilla Hacking</H3
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1821"
+></A
+><B
+>A.11.1. </B
+>	    What bugs are in Bugzilla right now?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Try <A
+HREF="http://bugzilla.mozilla.org/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&product=Webtools&component=Bugzilla"
+TARGET="_top"
+>	    this link</A
+> to view current bugs or requests for
+	    enhancement for Bugzilla.
+	  </P
+><P
+>	    You can view bugs marked for 2.14 release
+	    <A
+HREF="http://bugzilla.mozilla.org/buglist.cgi?product=Webtools&component=Bugzilla&target_milestone=Bugzilla+2.14"
+TARGET="_top"
+>here</A
+>.
+	    This list includes bugs for the 2.14 release that have already
+	    been fixed and checked into CVS.  Please consult the
+	    <A
+HREF="http://www.mozilla.org/projects/bugzilla/"
+TARGET="_top"
+>	      Bugzilla Project Page</A
+> for details on how to
+	    check current sources out of CVS so you can have these
+	    bug fixes early!
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1830"
+></A
+><B
+>A.11.2. </B
+>	    How can I change the default priority to a null value?  For instance, have the default
+	    priority be "---" instead of "P2"?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    This is well-documented here: <A
+HREF="http://bugzilla.mozilla.org/show_bug.cgi?id=49862"
+TARGET="_top"
+>	    http://bugzilla.mozilla.org/show_bug.cgi?id=49862</A
+>.  Ultimately, it's as easy
+	    as adding the "---" priority field to your localconfig file in the appropriate area,
+	    re-running checksetup.pl, and then changing the default priority in your browser using
+	    "editparams.cgi".  Hmm, now that I think about it, that is kind of a klunky way to handle
+	    it, but for now it's what we have!  Although the bug has been closed "resolved wontfix",
+	    there may be a better way to handle this...
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1836"
+></A
+><B
+>A.11.3. </B
+>	    What's the best way to submit patches?  What guidelines should I follow?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+><P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>		  Enter a bug into bugzilla.mozilla.org for the "Webtools" product,
+		  "Bugzilla" component.
+		</P
+></LI
+><LI
+><P
+>		  Upload your patch as a unified DIFF (having used "diff -u" against
+		  the <EM
+>current sources</EM
+> checked out of CVS),
+		  or new source file by clicking
+		  "Create a new attachment" link on the bug page you've just created, and
+		  include any descriptions of database changes you may make, into the bug
+		  ID you submitted in step #1.  Be sure and click the "Patch" radio
+		  button to indicate the text you are sending is a patch!
+		</P
+></LI
+><LI
+><P
+>		  Announce your patch and the associated URL
+		  (http://bugzilla.mozilla.org/show_bug.cgi?id=XXXX) for discussion in
+		  the newsgroup (netscape.public.mozilla.webtools).  You'll get a really
+		  good, fairly immediate reaction to the implications of your patch,
+		  which will also give us an idea how well-received the change would
+		  be.
+		</P
+></LI
+><LI
+><P
+>		  If it passes muster with minimal modification, the person to whom
+		  the bug is assigned in Bugzilla is responsible for seeing the patch
+		  is checked into CVS.
+		</P
+></LI
+><LI
+><P
+>		  Bask in the glory of the fact that you helped write the most successful
+		  open-source bug-tracking software on the planet :)
+		</P
+></LI
+></OL
+></P
+></DIV
+></DIV
+></DIV
+></DIV
+></DIV
+><DIV
+CLASS="APPENDIX"
+><HR><H1
+><A
+NAME="DOWNLOADLINKS"
+>Appendix B. Software Download Links</A
+></H1
+><P
+>    All of these sites are current as of April, 2001.  Hopefully
+    they'll stay current for a while.
+  </P
+><P
+>    Apache Web Server: <A
+HREF="http://www.apache.org/"
+TARGET="_top"
+>http://www.apache.org</A
+>
+    Optional web server for Bugzilla, but recommended because of broad user base and support.
+  </P
+><P
+>    Bugzilla: <A
+HREF="http://www.mozilla.org/projects/bugzilla/"
+TARGET="_top"
+>      http://www.mozilla.org/projects/bugzilla/</A
+>
+  </P
+><P
+>    MySQL: <A
+HREF="http://www.mysql.org/"
+TARGET="_top"
+>http://www.mysql.org/</A
+>
+  </P
+><P
+>    Perl: <A
+HREF="http://www.perl.org"
+TARGET="_top"
+>http://www.perl.org/</A
+>
+  </P
+><P
+>    CPAN: <A
+HREF="http://www.cpan.org/"
+TARGET="_top"
+>http://www.cpan.org/</A
+>
+  </P
+><P
+>    DBI Perl module: 
+    <A
+HREF="ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/DBI/"
+TARGET="_top"
+>      ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/DBI/</A
+>
+  </P
+><P
+>    Data::Dumper module: 
+    <A
+HREF="ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/Data/"
+TARGET="_top"
+>      ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/Data/</A
+>
+  </P
+><P
+>    MySQL related Perl modules:
+    <A
+HREF="ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/Mysql/"
+TARGET="_top"
+>      ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/Mysql/</A
+>
+  </P
+><P
+>    TimeDate Perl module collection:
+    <A
+HREF="ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/Date/"
+TARGET="_top"
+>      ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/Date/</A
+>
+  </P
+><P
+>    GD Perl module:
+    <A
+HREF="ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/GD/"
+TARGET="_top"
+>      ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/GD/</A
+>
+    Alternately, you should be able to find the latest version of
+    GD at <A
+HREF="http://www.boutell.com/gd/"
+TARGET="_top"
+>http://www.boutell.com/gd/</A
+>
+  </P
+><P
+>    Chart::Base module:
+    <A
+HREF="ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/Chart/"
+TARGET="_top"
+>    ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/Chart/</A
+>
+  </P
+><P
+>    LinuxDoc Software: 
+    <A
+HREF="http://www.linuxdoc.org/"
+TARGET="_top"
+>http://www.linuxdoc.org/</A
+>
+    (for documentation maintenance)
+  </P
+></DIV
+><DIV
+CLASS="APPENDIX"
+><HR><H1
+><A
+NAME="DATABASE"
+>Appendix C. The Bugzilla Database</A
+></H1
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>This document really needs to be updated with more fleshed out information about primary keys, interrelationships, and maybe some nifty tables to document dependencies.  Any takers?</P
+></BLOCKQUOTE
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H1
+CLASS="SECTION"
+><A
+NAME="DBSCHEMA"
+>C.1. Database Schema Chart</A
+></H1
+><P
+>      <DIV
+CLASS="MEDIAOBJECT"
+><P
+><IMG
+SRC="dbschema.jpg"
+ALT="Database Relationships"
+></IMG
+><DIV
+CLASS="CAPTION"
+><P
+>Bugzilla database relationships chart</P
+></DIV
+></P
+></DIV
+>
+    </P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H1
+CLASS="SECTION"
+><A
+NAME="DBDOC"
+>C.2. MySQL Bugzilla Database Introduction</A
+></H1
+><P
+CLASS="LITERALLAYOUT"
+><br>
+Contributor(s):&nbsp;&nbsp;Matthew&nbsp;P.&nbsp;Barnson&nbsp;(mbarnson@excitehome.net)<br>
+<br>
+Last&nbsp;update:&nbsp;May&nbsp;16,&nbsp;2000<br>
+<br>
+Changes:<br>
+Version&nbsp;1.0:&nbsp;Initial&nbsp;public&nbsp;release&nbsp;(May&nbsp;16,&nbsp;2000)<br>
+<br>
+Maintainer:&nbsp;&nbsp;Matthew&nbsp;P.&nbsp;Barnson&nbsp;(mbarnson@excitehome.net)<br>
+<br>
+<br>
+===<br>
+Table&nbsp;Of&nbsp;Contents<br>
+===<br>
+<br>
+FOREWORD<br>
+INTRODUCTION<br>
+THE&nbsp;BASICS<br>
+THE&nbsp;TABLES<br>
+THE&nbsp;DETAILS<br>
+<br>
+<br>
+<br>
+===<br>
+FOREWORD<br>
+===<br>
+<br>
+&nbsp;&nbsp;This&nbsp;information&nbsp;comes&nbsp;straight&nbsp;from&nbsp;my&nbsp;life.&nbsp;&nbsp;I&nbsp;was&nbsp;forced&nbsp;to&nbsp;learn&nbsp;how<br>
+Bugzilla&nbsp;organizes&nbsp;database&nbsp;because&nbsp;of&nbsp;nitpicky&nbsp;requests&nbsp;from&nbsp;users&nbsp;for&nbsp;tiny<br>
+changes&nbsp;in&nbsp;wording,&nbsp;rather&nbsp;than&nbsp;having&nbsp;people&nbsp;re-educate&nbsp;themselves&nbsp;or<br>
+figure&nbsp;out&nbsp;how&nbsp;to&nbsp;work&nbsp;our&nbsp;procedures&nbsp;around&nbsp;the&nbsp;tool.&nbsp;&nbsp;It&nbsp;sucks,&nbsp;but&nbsp;it&nbsp;can<br>
+and&nbsp;will&nbsp;happen&nbsp;to&nbsp;you,&nbsp;so&nbsp;learn&nbsp;how&nbsp;the&nbsp;schema&nbsp;works&nbsp;and&nbsp;deal&nbsp;with&nbsp;it&nbsp;when&nbsp;it<br>
+comes.<br>
+<br>
+&nbsp;&nbsp;I'm&nbsp;sorry&nbsp;this&nbsp;version&nbsp;is&nbsp;plain&nbsp;text.&nbsp;&nbsp;I&nbsp;can&nbsp;whip&nbsp;this&nbsp;info&nbsp;out&nbsp;a&nbsp;lot&nbsp;faster<br>
+if&nbsp;I'm&nbsp;not&nbsp;concerned&nbsp;about&nbsp;complex&nbsp;formatting.&nbsp;&nbsp;I'll&nbsp;get&nbsp;it&nbsp;into&nbsp;sgml&nbsp;for&nbsp;easy<br>
+portability&nbsp;as&nbsp;time&nbsp;permits.<br>
+<br>
+&nbsp;&nbsp;The&nbsp;Bugzilla&nbsp;Database&nbsp;Schema&nbsp;has&nbsp;a&nbsp;home!&nbsp;&nbsp;In&nbsp;addition&nbsp;to&nbsp;availability&nbsp;via&nbsp;CVS<br>
+and&nbsp;released&nbsp;versions&nbsp;2.12&nbsp;and&nbsp;higher&nbsp;of&nbsp;Bugzilla,&nbsp;you&nbsp;can&nbsp;find&nbsp;the&nbsp;latest&nbsp;&#38;<br>
+greatest&nbsp;version&nbsp;of&nbsp;the&nbsp;Bugzilla&nbsp;Database&nbsp;Schema&nbsp;at<br>
+http://www.trilobyte.net/barnsons/.&nbsp;This&nbsp;is&nbsp;a&nbsp;living&nbsp;document;&nbsp;please&nbsp;be&nbsp;sure<br>
+you&nbsp;are&nbsp;up-to-date&nbsp;with&nbsp;the&nbsp;latest&nbsp;version&nbsp;before&nbsp;mirroring.<br>
+<br>
+&nbsp;&nbsp;The&nbsp;Bugzilla&nbsp;Database&nbsp;Schema&nbsp;is&nbsp;designed&nbsp;to&nbsp;provide&nbsp;vital&nbsp;information<br>
+regarding&nbsp;the&nbsp;structure&nbsp;of&nbsp;the&nbsp;MySQL&nbsp;database.&nbsp;&nbsp;Where&nbsp;appropriate,&nbsp;this<br>
+document&nbsp;will&nbsp;refer&nbsp;to&nbsp;URLs&nbsp;rather&nbsp;than&nbsp;including&nbsp;documents&nbsp;in&nbsp;their&nbsp;entirety<br>
+to&nbsp;ensure&nbsp;completeness&nbsp;even&nbsp;should&nbsp;this&nbsp;paper&nbsp;become&nbsp;out&nbsp;of&nbsp;date.<br>
+<br>
+&nbsp;&nbsp;This&nbsp;document&nbsp;is&nbsp;not&nbsp;maintained&nbsp;by&nbsp;Netscape&nbsp;or&nbsp;Netscape&nbsp;employees,&nbsp;so&nbsp;please<br>
+do&nbsp;not&nbsp;contact&nbsp;them&nbsp;regarding&nbsp;errors&nbsp;or&nbsp;omissions&nbsp;contained&nbsp;herein.&nbsp;Please<br>
+direct&nbsp;all&nbsp;questions,&nbsp;comments,&nbsp;updates,&nbsp;flames,&nbsp;etc.&nbsp;to&nbsp;Matthew&nbsp;P.&nbsp;Barnson<br>
+mbarnson@excitehome.net)&nbsp;(barnboy&nbsp;or&nbsp;barnhome&nbsp;on&nbsp;irc.mozilla.org&nbsp;in<br>
+#mozwebtools).<br>
+<br>
+&nbsp;&nbsp;I'm&nbsp;sure&nbsp;I've&nbsp;made&nbsp;some&nbsp;glaring&nbsp;errors&nbsp;or&nbsp;omissions&nbsp;in&nbsp;this&nbsp;paper&nbsp;--&nbsp;please<br>
+email&nbsp;me&nbsp;corrections&nbsp;or&nbsp;post&nbsp;corrections&nbsp;to&nbsp;the<br>
+netscape.public.mozilla.webtools&nbsp;newsgroup.<br>
+<br>
+<br>
+<br>
+===<br>
+INTRODUCTION<br>
+===<br>
+<br>
+<br>
+<br>
+&nbsp;&nbsp;So,&nbsp;here&nbsp;you&nbsp;are&nbsp;with&nbsp;your&nbsp;brand-new&nbsp;installation&nbsp;of&nbsp;Bugzilla.&nbsp;&nbsp;You've&nbsp;got<br>
+MySQL&nbsp;set&nbsp;up,&nbsp;Apache&nbsp;working&nbsp;right,&nbsp;Perl&nbsp;DBI&nbsp;and&nbsp;DBD&nbsp;talking&nbsp;to&nbsp;the&nbsp;database<br>
+flawlessly.&nbsp;&nbsp;Maybe&nbsp;you've&nbsp;even&nbsp;entered&nbsp;a&nbsp;few&nbsp;test&nbsp;bugs&nbsp;to&nbsp;make&nbsp;sure&nbsp;email's<br>
+working;&nbsp;people&nbsp;seem&nbsp;to&nbsp;be&nbsp;notified&nbsp;of&nbsp;new&nbsp;bugs&nbsp;and&nbsp;changes,&nbsp;and&nbsp;you&nbsp;can<br>
+enter&nbsp;and&nbsp;edit&nbsp;bugs&nbsp;to&nbsp;your&nbsp;heart's&nbsp;content.&nbsp;&nbsp;Perhaps&nbsp;you've&nbsp;gone&nbsp;through&nbsp;the<br>
+trouble&nbsp;of&nbsp;setting&nbsp;up&nbsp;a&nbsp;gateway&nbsp;for&nbsp;people&nbsp;to&nbsp;submit&nbsp;bugs&nbsp;to&nbsp;your&nbsp;database&nbsp;via<br>
+email,&nbsp;have&nbsp;had&nbsp;a&nbsp;few&nbsp;people&nbsp;test&nbsp;it,&nbsp;and&nbsp;received&nbsp;rave&nbsp;reviews&nbsp;from&nbsp;your&nbsp;beta<br>
+testers.<br>
+<br>
+&nbsp;&nbsp;What's&nbsp;the&nbsp;next&nbsp;thing&nbsp;you&nbsp;do?&nbsp;&nbsp;Outline&nbsp;a&nbsp;training&nbsp;strategy&nbsp;for&nbsp;your<br>
+development&nbsp;team,&nbsp;of&nbsp;course,&nbsp;and&nbsp;bring&nbsp;them&nbsp;up&nbsp;to&nbsp;speed&nbsp;on&nbsp;the&nbsp;new&nbsp;tool&nbsp;you've<br>
+labored&nbsp;over&nbsp;for&nbsp;hours.<br>
+<br>
+&nbsp;&nbsp;Your&nbsp;first&nbsp;training&nbsp;session&nbsp;starts&nbsp;off&nbsp;very&nbsp;well!&nbsp;&nbsp;You&nbsp;have&nbsp;a&nbsp;captive<br>
+audience&nbsp;which&nbsp;seems&nbsp;enraptured&nbsp;by&nbsp;the&nbsp;efficiency&nbsp;embodied&nbsp;in&nbsp;this&nbsp;thing&nbsp;called<br>
+"Bugzilla".&nbsp;&nbsp;You&nbsp;are&nbsp;caught&nbsp;up&nbsp;describing&nbsp;the&nbsp;nifty&nbsp;features,&nbsp;how&nbsp;people&nbsp;can<br>
+save&nbsp;favorite&nbsp;queries&nbsp;in&nbsp;the&nbsp;database,&nbsp;set&nbsp;them&nbsp;up&nbsp;as&nbsp;headers&nbsp;and&nbsp;footers&nbsp;on<br>
+their&nbsp;pages,&nbsp;customize&nbsp;their&nbsp;layouts,&nbsp;generate&nbsp;reports,&nbsp;track&nbsp;status&nbsp;with<br>
+greater&nbsp;efficiency&nbsp;than&nbsp;ever&nbsp;before,&nbsp;leap&nbsp;tall&nbsp;buildings&nbsp;with&nbsp;a&nbsp;single&nbsp;bound<br>
+and&nbsp;rescue&nbsp;Jane&nbsp;from&nbsp;the&nbsp;clutches&nbsp;of&nbsp;Certain&nbsp;Death!<br>
+<br>
+&nbsp;&nbsp;But&nbsp;Certain&nbsp;Death&nbsp;speaks&nbsp;up&nbsp;--&nbsp;a&nbsp;tiny&nbsp;voice,&nbsp;from&nbsp;the&nbsp;dark&nbsp;corners&nbsp;of&nbsp;the<br>
+conference&nbsp;room.&nbsp;&nbsp;"I&nbsp;have&nbsp;a&nbsp;concern,"&nbsp;the&nbsp;voice&nbsp;hisses&nbsp;from&nbsp;the&nbsp;darkness,<br>
+"about&nbsp;the&nbsp;use&nbsp;of&nbsp;the&nbsp;word&nbsp;'verified'.<br>
+<br>
+&nbsp;&nbsp;The&nbsp;room,&nbsp;previously&nbsp;filled&nbsp;with&nbsp;happy&nbsp;chatter,&nbsp;lapses&nbsp;into&nbsp;reverential<br>
+silence&nbsp;as&nbsp;Certain&nbsp;Death&nbsp;(better&nbsp;known&nbsp;as&nbsp;the&nbsp;Vice&nbsp;President&nbsp;of&nbsp;Software<br>
+Engineering)&nbsp;continues.&nbsp;&nbsp;"You&nbsp;see,&nbsp;for&nbsp;two&nbsp;years&nbsp;we've&nbsp;used&nbsp;the&nbsp;word&nbsp;'verified'<br>
+to&nbsp;indicate&nbsp;that&nbsp;a&nbsp;developer&nbsp;or&nbsp;quality&nbsp;assurance&nbsp;engineer&nbsp;has&nbsp;confirmed&nbsp;that,<br>
+in&nbsp;fact,&nbsp;a&nbsp;bug&nbsp;is&nbsp;valid.&nbsp;I&nbsp;don't&nbsp;want&nbsp;to&nbsp;lose&nbsp;two&nbsp;years&nbsp;of&nbsp;training&nbsp;to&nbsp;a<br>
+new&nbsp;software&nbsp;product.&nbsp;&nbsp;You&nbsp;need&nbsp;to&nbsp;change&nbsp;the&nbsp;bug&nbsp;status&nbsp;of&nbsp;'verified'&nbsp;to<br>
+'approved'&nbsp;as&nbsp;soon&nbsp;as&nbsp;possible.&nbsp;To&nbsp;avoid&nbsp;confusion,&nbsp;of&nbsp;course."<br>
+<br>
+&nbsp;&nbsp;Oh&nbsp;no!&nbsp;&nbsp;Terror&nbsp;strikes&nbsp;your&nbsp;heart,&nbsp;as&nbsp;you&nbsp;find&nbsp;yourself&nbsp;mumbling&nbsp;"yes,&nbsp;yes,&nbsp;I<br>
+don't&nbsp;think&nbsp;that&nbsp;would&nbsp;be&nbsp;a&nbsp;problem,"&nbsp;You&nbsp;review&nbsp;the&nbsp;changes&nbsp;with&nbsp;Certain<br>
+Death,&nbsp;and&nbsp;continue&nbsp;to&nbsp;jabber&nbsp;on,&nbsp;"no,&nbsp;it's&nbsp;not&nbsp;too&nbsp;big&nbsp;a&nbsp;change.&nbsp;I&nbsp;mean,&nbsp;we<br>
+have&nbsp;the&nbsp;source&nbsp;code,&nbsp;right?&nbsp;You&nbsp;know,&nbsp;'Use&nbsp;the&nbsp;Source,&nbsp;Luke'&nbsp;and&nbsp;all&nbsp;that...<br>
+no&nbsp;problem,"&nbsp;All&nbsp;the&nbsp;while&nbsp;you&nbsp;quiver&nbsp;inside&nbsp;like&nbsp;a&nbsp;beached&nbsp;jellyfish&nbsp;bubbling,<br>
+burbling,&nbsp;and&nbsp;boiling&nbsp;on&nbsp;a&nbsp;hot&nbsp;Jamaican&nbsp;sand&nbsp;dune...<br>
+<br>
+&nbsp;&nbsp;Thus&nbsp;begins&nbsp;your&nbsp;adventure&nbsp;into&nbsp;the&nbsp;heart&nbsp;of&nbsp;Bugzilla.&nbsp;&nbsp;You've&nbsp;been&nbsp;forced<br>
+to&nbsp;learn&nbsp;about&nbsp;non-portable&nbsp;enum()&nbsp;fields,&nbsp;varchar&nbsp;columns,&nbsp;and&nbsp;tinyint<br>
+definitions.&nbsp;The&nbsp;Adventure&nbsp;Awaits&nbsp;You!<br>
+<br>
+<br>
+<br>
+===<br>
+The&nbsp;Basics<br>
+===<br>
+<br>
+&nbsp;&nbsp;If&nbsp;you&nbsp;were&nbsp;like&nbsp;me,&nbsp;at&nbsp;this&nbsp;point&nbsp;you're&nbsp;totally&nbsp;clueless&nbsp;about&nbsp;the<br>
+internals&nbsp;of&nbsp;MySQL,&nbsp;and&nbsp;if&nbsp;it&nbsp;weren't&nbsp;for&nbsp;this&nbsp;executive&nbsp;order&nbsp;from&nbsp;the&nbsp;Vice<br>
+President&nbsp;you&nbsp;couldn't&nbsp;care&nbsp;less&nbsp;about&nbsp;the&nbsp;difference&nbsp;between&nbsp;a&nbsp;"bigint"&nbsp;and&nbsp;a<br>
+"tinyint"&nbsp;entry&nbsp;in&nbsp;MySQL.&nbsp;&nbsp;I'd&nbsp;refer&nbsp;you&nbsp;first&nbsp;to&nbsp;the&nbsp;MySQL&nbsp;documentation,<br>
+available&nbsp;at&nbsp;http://www.mysql.com/doc.html,&nbsp;but&nbsp;that's&nbsp;mostly&nbsp;a&nbsp;confusing<br>
+morass&nbsp;of&nbsp;high-level&nbsp;database&nbsp;jargon.&nbsp;&nbsp;Here&nbsp;are&nbsp;the&nbsp;basics&nbsp;you&nbsp;need&nbsp;to&nbsp;know<br>
+about&nbsp;the&nbsp;database&nbsp;to&nbsp;proceed:<br>
+<br>
+1.&nbsp;&nbsp;To&nbsp;connect&nbsp;to&nbsp;your&nbsp;database,&nbsp;type&nbsp;"mysql&nbsp;-u&nbsp;root"&nbsp;at&nbsp;the&nbsp;command&nbsp;prompt&nbsp;as<br>
+any&nbsp;user.&nbsp;If&nbsp;this&nbsp;works&nbsp;without&nbsp;asking&nbsp;you&nbsp;for&nbsp;a&nbsp;password,&nbsp;SHAME&nbsp;ON&nbsp;YOU!&nbsp;&nbsp;You<br>
+should&nbsp;have&nbsp;locked&nbsp;your&nbsp;security&nbsp;down&nbsp;like&nbsp;the&nbsp;README&nbsp;told&nbsp;you&nbsp;to.&nbsp;&nbsp;You&nbsp;can<br>
+find&nbsp;details&nbsp;on&nbsp;locking&nbsp;down&nbsp;your&nbsp;database&nbsp;in&nbsp;the&nbsp;Bugzilla&nbsp;FAQ&nbsp;in&nbsp;this<br>
+directory&nbsp;(under&nbsp;"Security"),&nbsp;or&nbsp;more&nbsp;robust&nbsp;security&nbsp;generalities&nbsp;in&nbsp;the<br>
+MySQL&nbsp;searchable&nbsp;documentation&nbsp;at<br>
+http://www.mysql.com/php/manual.php3?section=Privilege_system&nbsp;.<br>
+<br>
+2.&nbsp;&nbsp;You&nbsp;should&nbsp;now&nbsp;be&nbsp;at&nbsp;a&nbsp;prompt&nbsp;that&nbsp;looks&nbsp;like&nbsp;this:<br>
+<br>
+mysql&#62;<br>
+	<br>
+	At&nbsp;the&nbsp;prompt,&nbsp;if&nbsp;"bugs"&nbsp;is&nbsp;the&nbsp;name&nbsp;of&nbsp;your&nbsp;Bugzilla&nbsp;database,&nbsp;type:<br>
+	<br>
+mysql&#62;&nbsp;use&nbsp;bugs;<br>
+	<br>
+	(don't&nbsp;forget&nbsp;the&nbsp;";"&nbsp;at&nbsp;the&nbsp;end&nbsp;of&nbsp;each&nbsp;line,&nbsp;or&nbsp;you'll&nbsp;be&nbsp;kicking&nbsp;yourself<br>
+all&nbsp;the&nbsp;way&nbsp;through&nbsp;this&nbsp;documentation)<br>
+&nbsp;&nbsp;Young&nbsp;Grasshopper,&nbsp;you&nbsp;are&nbsp;now&nbsp;ready&nbsp;for&nbsp;the&nbsp;unveiling&nbsp;of&nbsp;the&nbsp;Bugzilla<br>
+database,&nbsp;in&nbsp;the&nbsp;next&nbsp;section...<br>
+<br>
+<br>
+<br>
+===<br>
+THE&nbsp;TABLES<br>
+===<br>
+<br>
+&nbsp;&nbsp;Imagine&nbsp;your&nbsp;MySQL&nbsp;database&nbsp;as&nbsp;a&nbsp;series&nbsp;of&nbsp;spreadsheets,&nbsp;and&nbsp;you&nbsp;won't&nbsp;be&nbsp;too<br>
+far&nbsp;off.&nbsp;&nbsp;If&nbsp;you&nbsp;use&nbsp;this&nbsp;command:<br>
+<br>
+mysql&#62;&nbsp;show&nbsp;tables&nbsp;from&nbsp;bugs;<br>
+	<br>
+	you'll&nbsp;be&nbsp;able&nbsp;to&nbsp;see&nbsp;all&nbsp;the&nbsp;"spreadsheets"&nbsp;(tables)&nbsp;in&nbsp;your&nbsp;database.&nbsp;&nbsp;Cool,<br>
+huh?&nbsp;&nbsp;It's&nbsp;kinda'&nbsp;like&nbsp;a&nbsp;filesystem,&nbsp;only&nbsp;much&nbsp;faster&nbsp;and&nbsp;more&nbsp;robust.&nbsp;&nbsp;Come<br>
+on,&nbsp;I'll&nbsp;show&nbsp;you&nbsp;more!<br>
+<br>
+&nbsp;&nbsp;From&nbsp;the&nbsp;command&nbsp;issued&nbsp;above,&nbsp;you&nbsp;should&nbsp;now&nbsp;have&nbsp;some&nbsp;output&nbsp;that&nbsp;looks<br>
+like&nbsp;this:<br>
+<br>
++-------------------+<br>
+|&nbsp;Tables&nbsp;in&nbsp;bugs&nbsp;&nbsp;&nbsp;&nbsp;|<br>
++-------------------+<br>
+|&nbsp;attachments&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;bugs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;bugs_activity&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;cc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;components&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;dependencies&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;fielddefs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;groups&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;keyworddefs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;keywords&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;logincookies&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;longdescs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;milestones&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;namedqueries&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;products&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;profiles&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;profiles_activity&nbsp;|<br>
+|&nbsp;shadowlog&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;versions&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;votes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;watch&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
++-------------------+<br>
+<br>
+<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;it&nbsp;doesn't&nbsp;look&nbsp;quite&nbsp;the&nbsp;same,&nbsp;that&nbsp;probably&nbsp;means&nbsp;it's&nbsp;time&nbsp;to<br>
+update&nbsp;this&nbsp;documentation&nbsp;:)<br>
+<br>
+&nbsp;&nbsp;Here's&nbsp;an&nbsp;overview&nbsp;of&nbsp;what&nbsp;each&nbsp;table&nbsp;does.&nbsp;&nbsp;Most&nbsp;columns&nbsp;in&nbsp;each&nbsp;table&nbsp;have<br>
+descriptive&nbsp;names&nbsp;that&nbsp;make&nbsp;it&nbsp;fairly&nbsp;trivial&nbsp;to&nbsp;figure&nbsp;out&nbsp;their&nbsp;jobs.<br>
+<br>
+attachments:&nbsp;This&nbsp;table&nbsp;stores&nbsp;all&nbsp;attachments&nbsp;to&nbsp;bugs.&nbsp;&nbsp;It&nbsp;tends&nbsp;to&nbsp;be&nbsp;your<br>
+largest&nbsp;table,&nbsp;yet&nbsp;also&nbsp;generally&nbsp;has&nbsp;the&nbsp;fewest&nbsp;entries&nbsp;because&nbsp;file<br>
+attachments&nbsp;are&nbsp;so&nbsp;(relatively)&nbsp;large.<br>
+<br>
+bugs:&nbsp;&nbsp;This&nbsp;is&nbsp;the&nbsp;core&nbsp;of&nbsp;your&nbsp;system.&nbsp;&nbsp;The&nbsp;bugs&nbsp;table&nbsp;stores&nbsp;most&nbsp;of&nbsp;the<br>
+current&nbsp;information&nbsp;about&nbsp;a&nbsp;bug,&nbsp;with&nbsp;the&nbsp;exception&nbsp;of&nbsp;the&nbsp;info&nbsp;stored&nbsp;in&nbsp;the<br>
+other&nbsp;tables.<br>
+<br>
+bugs_activity:&nbsp;&nbsp;This&nbsp;stores&nbsp;information&nbsp;regarding&nbsp;what&nbsp;changes&nbsp;are&nbsp;made&nbsp;to&nbsp;bugs<br>
+when&nbsp;--&nbsp;a&nbsp;history&nbsp;file.<br>
+<br>
+cc:&nbsp;&nbsp;This&nbsp;tiny&nbsp;table&nbsp;simply&nbsp;stores&nbsp;all&nbsp;the&nbsp;CC&nbsp;information&nbsp;for&nbsp;any&nbsp;bug&nbsp;which&nbsp;has<br>
+any&nbsp;entries&nbsp;in&nbsp;the&nbsp;CC&nbsp;field&nbsp;of&nbsp;the&nbsp;bug.&nbsp;&nbsp;Note&nbsp;that,&nbsp;like&nbsp;most&nbsp;other&nbsp;tables&nbsp;in<br>
+Bugzilla,&nbsp;it&nbsp;does&nbsp;not&nbsp;refer&nbsp;to&nbsp;users&nbsp;by&nbsp;their&nbsp;user&nbsp;names,&nbsp;but&nbsp;by&nbsp;their&nbsp;unique<br>
+userid,&nbsp;stored&nbsp;as&nbsp;a&nbsp;primary&nbsp;key&nbsp;in&nbsp;the&nbsp;profiles&nbsp;table.<br>
+<br>
+components:&nbsp;This&nbsp;stores&nbsp;the&nbsp;programs&nbsp;and&nbsp;components&nbsp;(or&nbsp;products&nbsp;and<br>
+components,&nbsp;in&nbsp;newer&nbsp;Bugzilla&nbsp;parlance)&nbsp;for&nbsp;Bugzilla.&nbsp;&nbsp;Curiously,&nbsp;the&nbsp;"program"<br>
+(product)&nbsp;field&nbsp;is&nbsp;the&nbsp;full&nbsp;name&nbsp;of&nbsp;the&nbsp;product,&nbsp;rather&nbsp;than&nbsp;some&nbsp;other&nbsp;unique<br>
+identifier,&nbsp;like&nbsp;bug_id&nbsp;and&nbsp;user_id&nbsp;are&nbsp;elsewhere&nbsp;in&nbsp;the&nbsp;database.<br>
+<br>
+dependencies:&nbsp;Stores&nbsp;data&nbsp;about&nbsp;those&nbsp;cool&nbsp;dependency&nbsp;trees.<br>
+<br>
+fielddefs:&nbsp;&nbsp;A&nbsp;nifty&nbsp;table&nbsp;that&nbsp;defines&nbsp;other&nbsp;tables.&nbsp;&nbsp;For&nbsp;instance,&nbsp;when&nbsp;you<br>
+submit&nbsp;a&nbsp;form&nbsp;that&nbsp;changes&nbsp;the&nbsp;value&nbsp;of&nbsp;"AssignedTo"&nbsp;this&nbsp;table&nbsp;allows<br>
+translation&nbsp;to&nbsp;the&nbsp;actual&nbsp;field&nbsp;name&nbsp;"assigned_to"&nbsp;for&nbsp;entry&nbsp;into&nbsp;MySQL.<br>
+<br>
+groups:&nbsp;&nbsp;defines&nbsp;bitmasks&nbsp;for&nbsp;groups.&nbsp;&nbsp;A&nbsp;bitmask&nbsp;is&nbsp;a&nbsp;number&nbsp;that&nbsp;can&nbsp;uniquely<br>
+identify&nbsp;group&nbsp;memberships.&nbsp;&nbsp;For&nbsp;instance,&nbsp;say&nbsp;the&nbsp;group&nbsp;that&nbsp;is&nbsp;allowed&nbsp;to<br>
+tweak&nbsp;parameters&nbsp;is&nbsp;assigned&nbsp;a&nbsp;value&nbsp;of&nbsp;"1",&nbsp;the&nbsp;group&nbsp;that&nbsp;is&nbsp;allowed&nbsp;to&nbsp;edit<br>
+users&nbsp;is&nbsp;assigned&nbsp;a&nbsp;"2",&nbsp;and&nbsp;the&nbsp;group&nbsp;that&nbsp;is&nbsp;allowed&nbsp;to&nbsp;create&nbsp;new&nbsp;groups&nbsp;is<br>
+assigned&nbsp;the&nbsp;bitmask&nbsp;of&nbsp;"4".&nbsp;&nbsp;By&nbsp;uniquely&nbsp;combining&nbsp;the&nbsp;group&nbsp;bitmasks&nbsp;(much<br>
+like&nbsp;the&nbsp;chmod&nbsp;command&nbsp;in&nbsp;UNIX,)&nbsp;you&nbsp;can&nbsp;identify&nbsp;a&nbsp;user&nbsp;is&nbsp;allowed&nbsp;to&nbsp;tweak<br>
+parameters&nbsp;and&nbsp;create&nbsp;groups,&nbsp;but&nbsp;not&nbsp;edit&nbsp;users,&nbsp;by&nbsp;giving&nbsp;him&nbsp;a&nbsp;bitmask&nbsp;of<br>
+"5",&nbsp;or&nbsp;a&nbsp;user&nbsp;allowed&nbsp;to&nbsp;edit&nbsp;users&nbsp;and&nbsp;create&nbsp;groups,&nbsp;but&nbsp;not&nbsp;tweak<br>
+parameters,&nbsp;by&nbsp;giving&nbsp;him&nbsp;a&nbsp;bitmask&nbsp;of&nbsp;"6"&nbsp;Simple,&nbsp;huh?<br>
+&nbsp;&nbsp;If&nbsp;this&nbsp;makes&nbsp;no&nbsp;sense&nbsp;to&nbsp;you,&nbsp;try&nbsp;this&nbsp;at&nbsp;the&nbsp;mysql&nbsp;prompt:<br>
+mysql&#62;&nbsp;select&nbsp;*&nbsp;from&nbsp;groups;<br>
+&nbsp;&nbsp;You'll&nbsp;see&nbsp;the&nbsp;list,&nbsp;it&nbsp;makes&nbsp;much&nbsp;more&nbsp;sense&nbsp;that&nbsp;way.<br>
+<br>
+keyworddefs:&nbsp;&nbsp;Definitions&nbsp;of&nbsp;keywords&nbsp;to&nbsp;be&nbsp;used<br>
+<br>
+keywords:&nbsp;Unlike&nbsp;what&nbsp;you'd&nbsp;think,&nbsp;this&nbsp;table&nbsp;holds&nbsp;which&nbsp;keywords&nbsp;are<br>
+associated&nbsp;with&nbsp;which&nbsp;bug&nbsp;id's.<br>
+<br>
+logincookies:&nbsp;This&nbsp;stores&nbsp;every&nbsp;login&nbsp;cookie&nbsp;ever&nbsp;assigned&nbsp;to&nbsp;you&nbsp;for&nbsp;every<br>
+machine&nbsp;you've&nbsp;ever&nbsp;logged&nbsp;into&nbsp;Bugzilla&nbsp;from.&nbsp;&nbsp;Curiously,&nbsp;it&nbsp;never&nbsp;does&nbsp;any<br>
+housecleaning&nbsp;--&nbsp;I&nbsp;see&nbsp;cookies&nbsp;in&nbsp;this&nbsp;file&nbsp;I've&nbsp;not&nbsp;used&nbsp;for&nbsp;months.&nbsp;&nbsp;However,<br>
+since&nbsp;Bugzilla&nbsp;never&nbsp;expires&nbsp;your&nbsp;cookie&nbsp;(for&nbsp;convenience'&nbsp;sake),&nbsp;it&nbsp;makes<br>
+sense.<br>
+<br>
+longdescs:&nbsp;&nbsp;The&nbsp;meat&nbsp;of&nbsp;bugzilla&nbsp;--&nbsp;here&nbsp;is&nbsp;where&nbsp;all&nbsp;user&nbsp;comments&nbsp;are&nbsp;stored!<br>
+You've&nbsp;only&nbsp;got&nbsp;2^24&nbsp;bytes&nbsp;per&nbsp;comment&nbsp;(it's&nbsp;a&nbsp;mediumtext&nbsp;field),&nbsp;so&nbsp;speak<br>
+sparingly&nbsp;--&nbsp;that's&nbsp;only&nbsp;the&nbsp;amount&nbsp;of&nbsp;space&nbsp;the&nbsp;Old&nbsp;Testament&nbsp;from&nbsp;the&nbsp;Bible<br>
+would&nbsp;take&nbsp;(uncompressed,&nbsp;16&nbsp;megabytes).&nbsp;&nbsp;Each&nbsp;comment&nbsp;is&nbsp;keyed&nbsp;to&nbsp;the<br>
+bug_id&nbsp;to&nbsp;which&nbsp;it's&nbsp;attached,&nbsp;so&nbsp;the&nbsp;order&nbsp;is&nbsp;necessarily&nbsp;chronological,&nbsp;for<br>
+comments&nbsp;are&nbsp;played&nbsp;back&nbsp;in&nbsp;the&nbsp;order&nbsp;in&nbsp;which&nbsp;they&nbsp;are&nbsp;received.<br>
+<br>
+milestones:&nbsp;&nbsp;Interesting&nbsp;that&nbsp;milestones&nbsp;are&nbsp;associated&nbsp;with&nbsp;a&nbsp;specific&nbsp;product<br>
+in&nbsp;this&nbsp;table,&nbsp;but&nbsp;Bugzilla&nbsp;does&nbsp;not&nbsp;yet&nbsp;support&nbsp;differing&nbsp;milestones&nbsp;by<br>
+product&nbsp;through&nbsp;the&nbsp;standard&nbsp;configuration&nbsp;interfaces.<br>
+<br>
+namedqueries:&nbsp;&nbsp;This&nbsp;is&nbsp;where&nbsp;everybody&nbsp;stores&nbsp;their&nbsp;"custom&nbsp;queries".&nbsp;&nbsp;Very<br>
+cool&nbsp;feature;&nbsp;it&nbsp;beats&nbsp;the&nbsp;tar&nbsp;out&nbsp;of&nbsp;having&nbsp;to&nbsp;bookmark&nbsp;each&nbsp;cool&nbsp;query&nbsp;you<br>
+construct.<br>
+<br>
+products:&nbsp;&nbsp;What&nbsp;products&nbsp;you&nbsp;have,&nbsp;whether&nbsp;new&nbsp;bug&nbsp;entries&nbsp;are&nbsp;allowed&nbsp;for&nbsp;the<br>
+product,&nbsp;what&nbsp;milestone&nbsp;you're&nbsp;working&nbsp;toward&nbsp;on&nbsp;that&nbsp;product,&nbsp;votes,&nbsp;etc.&nbsp;&nbsp;It<br>
+will&nbsp;be&nbsp;nice&nbsp;when&nbsp;the&nbsp;components&nbsp;table&nbsp;supports&nbsp;these&nbsp;same&nbsp;features,&nbsp;so&nbsp;you<br>
+could&nbsp;close&nbsp;a&nbsp;particular&nbsp;component&nbsp;for&nbsp;bug&nbsp;entry&nbsp;without&nbsp;having&nbsp;to&nbsp;close&nbsp;an<br>
+entire&nbsp;product...<br>
+<br>
+profiles:&nbsp;&nbsp;Ahh,&nbsp;so&nbsp;you&nbsp;were&nbsp;wondering&nbsp;where&nbsp;your&nbsp;precious&nbsp;user&nbsp;information&nbsp;was<br>
+stored?&nbsp;&nbsp;Here&nbsp;it&nbsp;is!&nbsp;&nbsp;With&nbsp;the&nbsp;passwords&nbsp;in&nbsp;plain&nbsp;text&nbsp;for&nbsp;all&nbsp;to&nbsp;see!&nbsp;(but<br>
+sshh...&nbsp;don't&nbsp;tell&nbsp;your&nbsp;users!)<br>
+<br>
+profiles_activity:&nbsp;&nbsp;Need&nbsp;to&nbsp;know&nbsp;who&nbsp;did&nbsp;what&nbsp;when&nbsp;to&nbsp;who's&nbsp;profile?&nbsp;&nbsp;This'll<br>
+tell&nbsp;you,&nbsp;it's&nbsp;a&nbsp;pretty&nbsp;complete&nbsp;history.<br>
+<br>
+shadowlog:&nbsp;&nbsp;I&nbsp;could&nbsp;be&nbsp;mistaken&nbsp;here,&nbsp;but&nbsp;I&nbsp;believe&nbsp;this&nbsp;table&nbsp;tells&nbsp;you&nbsp;when<br>
+your&nbsp;shadow&nbsp;database&nbsp;is&nbsp;updated&nbsp;and&nbsp;what&nbsp;commands&nbsp;were&nbsp;used&nbsp;to&nbsp;update&nbsp;it.&nbsp;&nbsp;We<br>
+don't&nbsp;use&nbsp;a&nbsp;shadow&nbsp;database&nbsp;at&nbsp;our&nbsp;site&nbsp;yet,&nbsp;so&nbsp;it's&nbsp;pretty&nbsp;empty&nbsp;for&nbsp;us.<br>
+<br>
+versions:&nbsp;&nbsp;Version&nbsp;information&nbsp;for&nbsp;every&nbsp;product<br>
+<br>
+votes:&nbsp;&nbsp;Who&nbsp;voted&nbsp;for&nbsp;what&nbsp;when<br>
+<br>
+watch:&nbsp;&nbsp;Who&nbsp;(according&nbsp;to&nbsp;userid)&nbsp;is&nbsp;watching&nbsp;who's&nbsp;bugs&nbsp;(according&nbsp;to&nbsp;their<br>
+userid).<br>
+<br>
+<br>
+===<br>
+THE&nbsp;DETAILS<br>
+===<br>
+<br>
+&nbsp;&nbsp;Ahh,&nbsp;so&nbsp;you're&nbsp;wondering&nbsp;just&nbsp;what&nbsp;to&nbsp;do&nbsp;with&nbsp;the&nbsp;information&nbsp;above?&nbsp;&nbsp;At&nbsp;the<br>
+mysql&nbsp;prompt,&nbsp;you&nbsp;can&nbsp;view&nbsp;any&nbsp;information&nbsp;about&nbsp;the&nbsp;columns&nbsp;in&nbsp;a&nbsp;table&nbsp;with<br>
+this&nbsp;command&nbsp;(where&nbsp;"table"&nbsp;is&nbsp;the&nbsp;name&nbsp;of&nbsp;the&nbsp;table&nbsp;you&nbsp;wish&nbsp;to&nbsp;view):<br>
+<br>
+mysql&#62;&nbsp;show&nbsp;columns&nbsp;from&nbsp;table;<br>
+<br>
+&nbsp;&nbsp;You&nbsp;can&nbsp;also&nbsp;view&nbsp;all&nbsp;the&nbsp;data&nbsp;in&nbsp;a&nbsp;table&nbsp;with&nbsp;this&nbsp;command:<br>
+<br>
+mysql&#62;&nbsp;select&nbsp;*&nbsp;from&nbsp;table;<br>
+<br>
+&nbsp;&nbsp;--&nbsp;note:&nbsp;this&nbsp;is&nbsp;a&nbsp;very&nbsp;bad&nbsp;idea&nbsp;to&nbsp;do&nbsp;on,&nbsp;for&nbsp;instance,&nbsp;the&nbsp;"bugs"&nbsp;table&nbsp;if<br>
+you&nbsp;have&nbsp;50,000&nbsp;bugs.&nbsp;&nbsp;You'll&nbsp;be&nbsp;sitting&nbsp;there&nbsp;a&nbsp;while&nbsp;until&nbsp;you&nbsp;ctrl-c&nbsp;or<br>
+50,000&nbsp;bugs&nbsp;play&nbsp;across&nbsp;your&nbsp;screen.<br>
+<br>
+&nbsp;&nbsp;You&nbsp;can&nbsp;limit&nbsp;the&nbsp;display&nbsp;from&nbsp;above&nbsp;a&nbsp;little&nbsp;with&nbsp;the&nbsp;command,&nbsp;where<br>
+"column"&nbsp;is&nbsp;the&nbsp;name&nbsp;of&nbsp;the&nbsp;column&nbsp;for&nbsp;which&nbsp;you&nbsp;wish&nbsp;to&nbsp;restrict&nbsp;information:<br>
+<br>
+mysql&#62;&nbsp;select&nbsp;*&nbsp;from&nbsp;table&nbsp;where&nbsp;(column&nbsp;=&nbsp;"some&nbsp;info");<br>
+<br>
+&nbsp;&nbsp;--&nbsp;or&nbsp;the&nbsp;reverse&nbsp;of&nbsp;this<br>
+<br>
+mysql&#62;&nbsp;select&nbsp;*&nbsp;from&nbsp;table&nbsp;where&nbsp;(column&nbsp;!=&nbsp;"some&nbsp;info");<br>
+<br>
+&nbsp;&nbsp;Let's&nbsp;take&nbsp;our&nbsp;example&nbsp;from&nbsp;the&nbsp;introduction,&nbsp;and&nbsp;assume&nbsp;you&nbsp;need&nbsp;to&nbsp;change<br>
+the&nbsp;word&nbsp;"verified"&nbsp;to&nbsp;"approved"&nbsp;in&nbsp;the&nbsp;resolution&nbsp;field.&nbsp;&nbsp;We&nbsp;know&nbsp;from&nbsp;the<br>
+above&nbsp;information&nbsp;that&nbsp;the&nbsp;resolution&nbsp;is&nbsp;likely&nbsp;to&nbsp;be&nbsp;stored&nbsp;in&nbsp;the&nbsp;"bugs"<br>
+table.&nbsp;Note&nbsp;we'll&nbsp;need&nbsp;to&nbsp;change&nbsp;a&nbsp;little&nbsp;perl&nbsp;code&nbsp;as&nbsp;well&nbsp;as&nbsp;this&nbsp;database<br>
+change,&nbsp;but&nbsp;I&nbsp;won't&nbsp;plunge&nbsp;into&nbsp;that&nbsp;in&nbsp;this&nbsp;document.&nbsp;Let's&nbsp;verify&nbsp;the<br>
+information&nbsp;is&nbsp;stored&nbsp;in&nbsp;the&nbsp;"bugs"&nbsp;table:<br>
+<br>
+mysql&#62;&nbsp;show&nbsp;columns&nbsp;from&nbsp;bugs<br>
+<br>
+&nbsp;&nbsp;(exceedingly&nbsp;long&nbsp;output&nbsp;truncated&nbsp;here)<br>
+|&nbsp;bug_status|&nbsp;enum('UNCONFIRMED','NEW','ASSIGNED','REOPENED','RESOLVED','VERIFIED','CLOSED')||MUL&nbsp;|&nbsp;UNCONFIRMED||<br>
+<br>
+&nbsp;&nbsp;Sorry&nbsp;about&nbsp;that&nbsp;long&nbsp;line.&nbsp;&nbsp;We&nbsp;see&nbsp;from&nbsp;this&nbsp;that&nbsp;the&nbsp;"bug&nbsp;status"&nbsp;column&nbsp;is<br>
+an&nbsp;"enum&nbsp;field",&nbsp;which&nbsp;is&nbsp;a&nbsp;MySQL&nbsp;peculiarity&nbsp;where&nbsp;a&nbsp;string&nbsp;type&nbsp;field&nbsp;can<br>
+only&nbsp;have&nbsp;certain&nbsp;types&nbsp;of&nbsp;entries.&nbsp;&nbsp;While&nbsp;I&nbsp;think&nbsp;this&nbsp;is&nbsp;very&nbsp;cool,&nbsp;it's&nbsp;not<br>
+standard&nbsp;SQL.&nbsp;&nbsp;Anyway,&nbsp;we&nbsp;need&nbsp;to&nbsp;add&nbsp;the&nbsp;possible&nbsp;enum&nbsp;field&nbsp;entry<br>
+'APPROVED'&nbsp;by&nbsp;altering&nbsp;the&nbsp;"bugs"&nbsp;table.<br>
+<br>
+mysql&#62;&nbsp;ALTER&nbsp;table&nbsp;bugs&nbsp;CHANGE&nbsp;bug_status&nbsp;bug_status<br>
+&nbsp;&nbsp;&nbsp;&nbsp;-&#62;&nbsp;enum("UNCONFIRMED",&nbsp;"NEW",&nbsp;"ASSIGNED",&nbsp;"REOPENED",&nbsp;"RESOLVED",<br>
+&nbsp;&nbsp;&nbsp;&nbsp;-&#62;&nbsp;"VERIFIED",&nbsp;"APPROVED",&nbsp;"CLOSED")&nbsp;not&nbsp;null;<br>
+<br>
+&nbsp;&nbsp;&nbsp;&nbsp;(note&nbsp;we&nbsp;can&nbsp;take&nbsp;three&nbsp;lines&nbsp;or&nbsp;more&nbsp;--&nbsp;whatever&nbsp;you&nbsp;put&nbsp;in&nbsp;before&nbsp;the<br>
+semicolon&nbsp;is&nbsp;evaluated&nbsp;as&nbsp;a&nbsp;single&nbsp;expression)<br>
+<br>
+Now&nbsp;if&nbsp;you&nbsp;do&nbsp;this:<br>
+<br>
+mysql&#62;&nbsp;show&nbsp;columns&nbsp;from&nbsp;bugs;<br>
+<br>
+&nbsp;&nbsp;you'll&nbsp;see&nbsp;that&nbsp;the&nbsp;bug_status&nbsp;field&nbsp;has&nbsp;an&nbsp;extra&nbsp;"APPROVED"&nbsp;enum&nbsp;that's<br>
+available!&nbsp;&nbsp;Cool&nbsp;thing,&nbsp;too,&nbsp;is&nbsp;that&nbsp;this&nbsp;is&nbsp;reflected&nbsp;on&nbsp;your&nbsp;query&nbsp;page&nbsp;as<br>
+well&nbsp;--&nbsp;you&nbsp;can&nbsp;query&nbsp;by&nbsp;the&nbsp;new&nbsp;status.&nbsp;&nbsp;But&nbsp;how's&nbsp;it&nbsp;fit&nbsp;into&nbsp;the&nbsp;existing<br>
+scheme&nbsp;of&nbsp;things?<br>
+&nbsp;&nbsp;Looks&nbsp;like&nbsp;you&nbsp;need&nbsp;to&nbsp;go&nbsp;back&nbsp;and&nbsp;look&nbsp;for&nbsp;instances&nbsp;of&nbsp;the&nbsp;word&nbsp;"verified"<br>
+in&nbsp;the&nbsp;perl&nbsp;code&nbsp;for&nbsp;Bugzilla&nbsp;--&nbsp;wherever&nbsp;you&nbsp;find&nbsp;"verified",&nbsp;change&nbsp;it&nbsp;to<br>
+"approved"&nbsp;and&nbsp;you're&nbsp;in&nbsp;business&nbsp;(make&nbsp;sure&nbsp;that's&nbsp;a&nbsp;case-insensitive&nbsp;search).<br>
+Although&nbsp;you&nbsp;can&nbsp;query&nbsp;by&nbsp;the&nbsp;enum&nbsp;field,&nbsp;you&nbsp;can't&nbsp;give&nbsp;something&nbsp;a&nbsp;status<br>
+of&nbsp;"APPROVED"&nbsp;until&nbsp;you&nbsp;make&nbsp;the&nbsp;perl&nbsp;changes.&nbsp;&nbsp;&nbsp;Note&nbsp;that&nbsp;this&nbsp;change&nbsp;I<br>
+mentioned&nbsp;can&nbsp;also&nbsp;be&nbsp;done&nbsp;by&nbsp;editing&nbsp;checksetup.pl,&nbsp;which&nbsp;automates&nbsp;a&nbsp;lot&nbsp;of<br>
+this.&nbsp;&nbsp;But&nbsp;you&nbsp;need&nbsp;to&nbsp;know&nbsp;this&nbsp;stuff&nbsp;anyway,&nbsp;right?<br>
+<br>
+&nbsp;&nbsp;I&nbsp;hope&nbsp;this&nbsp;database&nbsp;tutorial&nbsp;has&nbsp;been&nbsp;useful&nbsp;for&nbsp;you.&nbsp;&nbsp;If&nbsp;you&nbsp;have&nbsp;comments<br>
+to&nbsp;add,&nbsp;questions,&nbsp;concerns,&nbsp;etc.&nbsp;please&nbsp;direct&nbsp;them&nbsp;to<br>
+mbarnson@excitehome.net.&nbsp;&nbsp;Please&nbsp;direct&nbsp;flames&nbsp;to&nbsp;/dev/null&nbsp;:)&nbsp;&nbsp;Have&nbsp;a&nbsp;nice<br>
+day!<br>
+<br>
+<br>
+<br>
+===<br>
+LINKS<br>
+===<br>
+<br>
+Great&nbsp;MySQL&nbsp;tutorial&nbsp;site:<br>
+http://www.devshed.com/Server_Side/MySQL/<br>
+<br>
+&nbsp;&nbsp;&nbsp;&nbsp;</P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H1
+CLASS="SECTION"
+><A
+NAME="GRANTTABLES"
+>C.3. MySQL Permissions &#38; Grant Tables</A
+></H1
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>The following portion of documentation comes from my answer to an old discussion of Keystone,
+	a cool product that does trouble-ticket tracking for IT departments.  I wrote this post to the 
+	Keystone support group regarding MySQL grant table permissions, and how to use them effectively.
+	It is badly in need of updating, as I believe MySQL has added a field or two to the grant tables 
+	since this time, but it serves as a decent introduction and troubleshooting document for grant
+	table issues.  I used Keynote to track my troubles until I discovered Bugzilla,
+	which gave me a whole new set of troubles to work on : )</P
+></BLOCKQUOTE
+></DIV
+><P
+CLASS="LITERALLAYOUT"
+>From&nbsp;matt_barnson@singletrac.com&nbsp;Wed&nbsp;Jul&nbsp;&nbsp;7&nbsp;09:00:07&nbsp;1999<br>
+Date:&nbsp;Mon,&nbsp;1&nbsp;Mar&nbsp;1999&nbsp;21:37:04&nbsp;-0700&nbsp;<br>
+From:&nbsp;Matthew&nbsp;Barnson&nbsp;matt_barnson@singletrac.com<br>
+To:&nbsp;keystone-users@homeport.org<br>
+Subject:&nbsp;[keystone-users]&nbsp;Grant&nbsp;Tables&nbsp;FAQ<br>
+<br>
+&nbsp;&nbsp;&nbsp;&nbsp;[The&nbsp;following&nbsp;text&nbsp;is&nbsp;in&nbsp;the&nbsp;"iso-8859-1"&nbsp;character&nbsp;set]<br>
+&nbsp;&nbsp;&nbsp;&nbsp;[Your&nbsp;display&nbsp;is&nbsp;set&nbsp;for&nbsp;the&nbsp;"US-ASCII"&nbsp;character&nbsp;set]<br>
+&nbsp;&nbsp;&nbsp;&nbsp;[Some&nbsp;characters&nbsp;may&nbsp;be&nbsp;displayed&nbsp;incorrectly]<br>
+<br>
+Maybe&nbsp;we&nbsp;can&nbsp;include&nbsp;this&nbsp;rambling&nbsp;message&nbsp;in&nbsp;the&nbsp;Keystone&nbsp;FAQ?&nbsp;&nbsp;It&nbsp;gets<br>
+asked&nbsp;a&nbsp;lot,&nbsp;and&nbsp;the&nbsp;only&nbsp;option&nbsp;current&nbsp;listed&nbsp;in&nbsp;the&nbsp;FAQ&nbsp;is<br>
+"--skip-grant-tables".<br>
+<br>
+Really,&nbsp;you&nbsp;can't&nbsp;go&nbsp;wrong&nbsp;by&nbsp;reading&nbsp;section&nbsp;6&nbsp;of&nbsp;the&nbsp;MySQL&nbsp;manual,&nbsp;at<br>
+http://www.mysql.com/Manual/manual.html.&nbsp;&nbsp;I&nbsp;am&nbsp;sure&nbsp;their&nbsp;description&nbsp;is<br>
+better&nbsp;than&nbsp;mine.<br>
+<br>
+MySQL&nbsp;runs&nbsp;fine&nbsp;without&nbsp;permissions&nbsp;set&nbsp;up&nbsp;correctly&nbsp;if&nbsp;you&nbsp;run&nbsp;the&nbsp;mysql<br>
+daemon&nbsp;with&nbsp;the&nbsp;"--skip-grant-tables"&nbsp;option.&nbsp;&nbsp;Running&nbsp;this&nbsp;way&nbsp;denies<br>
+access&nbsp;to&nbsp;nobody.&nbsp;&nbsp;Unfortunately,&nbsp;unless&nbsp;you've&nbsp;got&nbsp;yourself&nbsp;firewalled&nbsp;it<br>
+also&nbsp;opens&nbsp;the&nbsp;potential&nbsp;for&nbsp;abuse&nbsp;if&nbsp;someone&nbsp;knows&nbsp;you're&nbsp;running&nbsp;it.<br>
+<br>
+Additionally,&nbsp;the&nbsp;default&nbsp;permissions&nbsp;for&nbsp;MySQL&nbsp;allow&nbsp;anyone&nbsp;at&nbsp;localhost<br>
+access&nbsp;to&nbsp;the&nbsp;database&nbsp;if&nbsp;the&nbsp;database&nbsp;name&nbsp;begins&nbsp;with&nbsp;"test_"&nbsp;or&nbsp;is&nbsp;named<br>
+"test"&nbsp;(i.e.&nbsp;"test_keystone").&nbsp;&nbsp;You&nbsp;can&nbsp;change&nbsp;the&nbsp;name&nbsp;of&nbsp;your&nbsp;database&nbsp;in<br>
+the&nbsp;keystone.conf&nbsp;file&nbsp;($sys_dbname).&nbsp;&nbsp;This&nbsp;is&nbsp;the&nbsp;way&nbsp;I&nbsp;am&nbsp;doing&nbsp;it&nbsp;for<br>
+some&nbsp;of&nbsp;my&nbsp;databases,&nbsp;and&nbsp;it&nbsp;works&nbsp;fine.<br>
+<br>
+The&nbsp;methods&nbsp;described&nbsp;below&nbsp;assume&nbsp;you're&nbsp;running&nbsp;MySQL&nbsp;on&nbsp;the&nbsp;same&nbsp;box&nbsp;as<br>
+your&nbsp;webserver,&nbsp;and&nbsp;that&nbsp;you&nbsp;don't&nbsp;mind&nbsp;if&nbsp;your&nbsp;$sys_dbuser&nbsp;for&nbsp;Keystone&nbsp;has<br>
+superuser&nbsp;access.&nbsp;&nbsp;See&nbsp;near&nbsp;the&nbsp;bottom&nbsp;of&nbsp;this&nbsp;message&nbsp;for&nbsp;a&nbsp;description&nbsp;of<br>
+what&nbsp;each&nbsp;field&nbsp;does.<br>
+<br>
+Method&nbsp;#1:<br>
+<br>
+1.&nbsp;&nbsp;cd&nbsp;/var/lib<br>
+	#location&nbsp;where&nbsp;you'll&nbsp;want&nbsp;to&nbsp;run&nbsp;/usr/bin/mysql_install_db&nbsp;shell<br>
+script&nbsp;from&nbsp;to&nbsp;get&nbsp;it&nbsp;to&nbsp;work.<br>
+<br>
+2.&nbsp;&nbsp;ln&nbsp;-s&nbsp;mysql&nbsp;data&nbsp;&nbsp;<br>
+	#&nbsp;soft&nbsp;links&nbsp;the&nbsp;"mysql"&nbsp;directory&nbsp;to&nbsp;"data",&nbsp;which&nbsp;is&nbsp;what<br>
+mysql_install_db&nbsp;expects.&nbsp;&nbsp;Alternately,&nbsp;you&nbsp;can&nbsp;edit&nbsp;mysql_install_db&nbsp;and<br>
+change&nbsp;all&nbsp;the&nbsp;"./data"&nbsp;references&nbsp;to&nbsp;"./mysql".<br>
+<br>
+3.&nbsp;&nbsp;Edit&nbsp;/usr/bin/mysql_install_db&nbsp;with&nbsp;your&nbsp;favorite&nbsp;text&nbsp;editor&nbsp;(vi,<br>
+emacs,&nbsp;jot,&nbsp;pico,&nbsp;etc.)<br>
+A)&nbsp;&nbsp;Copy&nbsp;the&nbsp;"INSERT&nbsp;INTO&nbsp;db&nbsp;VALUES<br>
+('%','test\_%','','Y','Y','Y','Y','Y','Y');"&nbsp;and&nbsp;paste&nbsp;it&nbsp;immediately&nbsp;after<br>
+itself.&nbsp;&nbsp;Chage&nbsp;the&nbsp;'test\_%'&nbsp;value&nbsp;to&nbsp;'keystone',&nbsp;or&nbsp;the&nbsp;value&nbsp;of<br>
+$sys_dbname&nbsp;in&nbsp;keystone.conf.<br>
+B)&nbsp;&nbsp;If&nbsp;you&nbsp;are&nbsp;running&nbsp;your&nbsp;keystone&nbsp;database&nbsp;with&nbsp;any&nbsp;user,&nbsp;you'll&nbsp;need&nbsp;to<br>
+copy&nbsp;the&nbsp;"INSERT&nbsp;INTO&nbsp;user&nbsp;VALUES<br>
+('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');"&nbsp;line&nbsp;after<br>
+itself&nbsp;and&nbsp;change&nbsp;'root'&nbsp;to&nbsp;the&nbsp;name&nbsp;of&nbsp;the&nbsp;keystone&nbsp;database&nbsp;user<br>
+($sys_dbuser)&nbsp;in&nbsp;keystone.conf.<br>
+<br>
+	#&nbsp;adds&nbsp;entries&nbsp;to&nbsp;the&nbsp;script&nbsp;to&nbsp;create&nbsp;grant&nbsp;tables&nbsp;for&nbsp;specific<br>
+hosts&nbsp;and&nbsp;users.&nbsp;&nbsp;The&nbsp;user&nbsp;you&nbsp;set&nbsp;up&nbsp;has&nbsp;super-user&nbsp;access&nbsp;($sys_dbuser)&nbsp;--<br>
+you&nbsp;may&nbsp;or&nbsp;may&nbsp;not&nbsp;want&nbsp;this.&nbsp;&nbsp;The&nbsp;layout&nbsp;of&nbsp;mysql_install_db&nbsp;is&nbsp;really&nbsp;very<br>
+uncomplicated.<br>
+<br>
+4.&nbsp;&nbsp;/usr/bin/mysqladmin&nbsp;shutdown<br>
+	#&nbsp;ya&nbsp;gotta&nbsp;shut&nbsp;it&nbsp;down&nbsp;before&nbsp;you&nbsp;can&nbsp;reinstall&nbsp;the&nbsp;grant&nbsp;tables!<br>
+<br>
+5.&nbsp;&nbsp;rm&nbsp;-i&nbsp;/var/lib/mysql/mysql/*.IS?'&nbsp;and&nbsp;answer&nbsp;'Y'&nbsp;to&nbsp;the&nbsp;deletion<br>
+questions.<br>
+	#&nbsp;nuke&nbsp;your&nbsp;current&nbsp;grant&nbsp;tables.&nbsp;&nbsp;This&nbsp;WILL&nbsp;NOT&nbsp;delete&nbsp;any&nbsp;other<br>
+databases&nbsp;than&nbsp;your&nbsp;grant&nbsp;tables.<br>
+<br>
+6.&nbsp;&nbsp;/usr/bin/mysql_install_db<br>
+	#&nbsp;run&nbsp;the&nbsp;script&nbsp;you&nbsp;just&nbsp;edited&nbsp;to&nbsp;install&nbsp;your&nbsp;new&nbsp;grant&nbsp;tables.<br>
+<br>
+7.&nbsp;&nbsp;mysqladmin&nbsp;-u&nbsp;root&nbsp;password&nbsp;(new_password)&nbsp;&nbsp;<br>
+	#&nbsp;change&nbsp;the&nbsp;root&nbsp;MySQL&nbsp;password,&nbsp;or&nbsp;else&nbsp;anyone&nbsp;on&nbsp;localhost&nbsp;can<br>
+login&nbsp;to&nbsp;MySQL&nbsp;as&nbsp;root&nbsp;and&nbsp;make&nbsp;changes.&nbsp;&nbsp;You&nbsp;can&nbsp;skip&nbsp;this&nbsp;step&nbsp;if&nbsp;you&nbsp;want<br>
+keystone&nbsp;to&nbsp;connect&nbsp;as&nbsp;root&nbsp;with&nbsp;no&nbsp;password.<br>
+<br>
+8.&nbsp;&nbsp;mysqladmin&nbsp;-u&nbsp;(webserver_user_name)&nbsp;password&nbsp;(new_password)&nbsp;&nbsp;<br>
+	#&nbsp;change&nbsp;the&nbsp;password&nbsp;of&nbsp;the&nbsp;$sys_dbuser.&nbsp;&nbsp;Note&nbsp;that&nbsp;you&nbsp;will&nbsp;need<br>
+to&nbsp;change&nbsp;the&nbsp;password&nbsp;in&nbsp;the&nbsp;keystone.conf&nbsp;file&nbsp;as&nbsp;well&nbsp;in&nbsp;$sys_dbpasswd,<br>
+and&nbsp;if&nbsp;your&nbsp;permissions&nbsp;are&nbsp;set&nbsp;up&nbsp;incorrectly&nbsp;anybody&nbsp;can&nbsp;type&nbsp;the&nbsp;URL&nbsp;to<br>
+your&nbsp;keystone.conf&nbsp;file&nbsp;and&nbsp;get&nbsp;the&nbsp;password.&nbsp;&nbsp;Not&nbsp;that&nbsp;this&nbsp;will&nbsp;help&nbsp;them<br>
+much&nbsp;if&nbsp;your&nbsp;permissions&nbsp;are&nbsp;set&nbsp;to&nbsp;@localhost.<br>
+<br>
+<br>
+<br>
+Method&nbsp;#2:&nbsp;&nbsp;easier,&nbsp;but&nbsp;a&nbsp;pain&nbsp;reproducing&nbsp;if&nbsp;you&nbsp;have&nbsp;to&nbsp;delete&nbsp;your&nbsp;grant<br>
+tables.&nbsp;&nbsp;This&nbsp;is&nbsp;the&nbsp;"recommended"&nbsp;method&nbsp;for&nbsp;altering&nbsp;grant&nbsp;tables&nbsp;in<br>
+MySQL.&nbsp;&nbsp;I&nbsp;don't&nbsp;use&nbsp;it&nbsp;because&nbsp;I&nbsp;like&nbsp;the&nbsp;other&nbsp;way&nbsp;:)<br>
+<br>
+shell&#62;&nbsp;mysql&nbsp;--user=root&nbsp;keystone<br>
+<br>
+mysql&#62;&nbsp;GRANT<br>
+SELECT,INSERT,UPDATE,DELETE,INDEX,ALTER,CREATE,DROP,RELOAD,SHUTDOWN,PROCESS,<br>
+FILE,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ON&nbsp;keystone.*<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TO&nbsp;&#60;$sys_dbuser&nbsp;name&#62;@localhost<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDENTIFIED&nbsp;BY&nbsp;'(password)'<br>
+	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WITH&nbsp;GRANT&nbsp;OPTION;<br>
+<br>
+OR<br>
+<br>
+mysql&#62;&nbsp;GRANT&nbsp;ALL&nbsp;PRIVELEGES&nbsp;<br>
+		ON&nbsp;keystone.*<br>
+		TO&nbsp;&#60;$sys_dbuser&nbsp;name&#62;@localhost<br>
+		IDENTIFIED&nbsp;BY&nbsp;'(password)'<br>
+		WITH&nbsp;GRANT&nbsp;OPTION;<br>
+<br>
+	#&nbsp;this&nbsp;grants&nbsp;the&nbsp;required&nbsp;permissions&nbsp;to&nbsp;the&nbsp;keystone&nbsp;($sys_dbuser)<br>
+account&nbsp;defined&nbsp;in&nbsp;keystone.conf.&nbsp;&nbsp;However,&nbsp;if&nbsp;you&nbsp;are&nbsp;runnning&nbsp;many<br>
+different&nbsp;MySQL-based&nbsp;apps,&nbsp;as&nbsp;we&nbsp;are,&nbsp;it's&nbsp;generally&nbsp;better&nbsp;to&nbsp;edit&nbsp;the<br>
+mysql_install_db&nbsp;script&nbsp;to&nbsp;be&nbsp;able&nbsp;to&nbsp;quickly&nbsp;reproduce&nbsp;your&nbsp;permissions<br>
+structure&nbsp;again.&nbsp;&nbsp;Note&nbsp;that&nbsp;the&nbsp;FILE&nbsp;privelege&nbsp;and&nbsp;WITH&nbsp;GRANT&nbsp;OPTION&nbsp;may&nbsp;not<br>
+be&nbsp;in&nbsp;your&nbsp;best&nbsp;interest&nbsp;to&nbsp;include.<br>
+<br>
+<br>
+GRANT&nbsp;TABLE&nbsp;FIELDS&nbsp;EXPLANATION:<br>
+Quick&nbsp;syntax&nbsp;summary:&nbsp;&nbsp;"%"&nbsp;in&nbsp;MySQL&nbsp;is&nbsp;a&nbsp;wildcard.&nbsp;&nbsp;I.E.,&nbsp;if&nbsp;you&nbsp;are<br>
+defining&nbsp;your&nbsp;DB&nbsp;table&nbsp;and&nbsp;in&nbsp;the&nbsp;'host'&nbsp;field&nbsp;and&nbsp;enter&nbsp;'%',&nbsp;that&nbsp;means<br>
+that&nbsp;any&nbsp;host&nbsp;can&nbsp;access&nbsp;that&nbsp;database.&nbsp;&nbsp;Of&nbsp;course,&nbsp;that&nbsp;host&nbsp;must&nbsp;also&nbsp;have<br>
+a&nbsp;valid&nbsp;db&nbsp;user&nbsp;in&nbsp;order&nbsp;to&nbsp;do&nbsp;anything&nbsp;useful.&nbsp;&nbsp;'db'=name&nbsp;of&nbsp;database.&nbsp;&nbsp;In<br>
+our&nbsp;case,&nbsp;it&nbsp;should&nbsp;be&nbsp;"keystone".&nbsp;&nbsp;"user"&nbsp;should&nbsp;be&nbsp;your&nbsp;"$sys_dbuser"<br>
+defined&nbsp;in&nbsp;keystone.conf.&nbsp;&nbsp;Note&nbsp;that&nbsp;you&nbsp;CANNOT&nbsp;add&nbsp;or&nbsp;change&nbsp;a&nbsp;password&nbsp;by<br>
+using&nbsp;the&nbsp;"INSERT&nbsp;INTO&nbsp;db&nbsp;(X)"&nbsp;command&nbsp;--&nbsp;you&nbsp;must&nbsp;change&nbsp;it&nbsp;with&nbsp;the&nbsp;mysql<br>
+-u&nbsp;command&nbsp;as&nbsp;defined&nbsp;above.&nbsp;&nbsp;Passwords&nbsp;are&nbsp;stored&nbsp;encrypted&nbsp;in&nbsp;the&nbsp;MySQL<br>
+database,&nbsp;and&nbsp;if&nbsp;you&nbsp;try&nbsp;to&nbsp;enter&nbsp;it&nbsp;directly&nbsp;into&nbsp;the&nbsp;table&nbsp;they&nbsp;will&nbsp;not<br>
+match.<br>
+<br>
+TABLE:&nbsp;&nbsp;USER.&nbsp;&nbsp;Everything&nbsp;after&nbsp;"password"&nbsp;is&nbsp;a&nbsp;privelege&nbsp;granted&nbsp;(Y/N).<br>
+This&nbsp;table&nbsp;controls&nbsp;individual&nbsp;user&nbsp;global&nbsp;access&nbsp;rights.<br>
+<br>
+'host','user','password','select','insert','update','delete','index','alter'<br>
+,'create','drop','grant','reload','shutdown','process','file'<br>
+<br>
+TABLE:&nbsp;&nbsp;DB.&nbsp;&nbsp;This&nbsp;controls&nbsp;access&nbsp;of&nbsp;USERS&nbsp;to&nbsp;databases.<br>
+<br>
+'host','db','user','select','insert','update','delete','index','alter','crea<br>
+te','drop','grant'<br>
+<br>
+TABLE:&nbsp;&nbsp;HOST.&nbsp;&nbsp;This&nbsp;controls&nbsp;which&nbsp;HOSTS&nbsp;are&nbsp;allowed&nbsp;what&nbsp;global&nbsp;access<br>
+rights.&nbsp;&nbsp;Note&nbsp;that&nbsp;the&nbsp;HOST&nbsp;table,&nbsp;USER&nbsp;table,&nbsp;and&nbsp;DB&nbsp;table&nbsp;are&nbsp;very&nbsp;closely<br>
+connected&nbsp;--&nbsp;if&nbsp;an&nbsp;authorized&nbsp;USER&nbsp;attempts&nbsp;an&nbsp;SQL&nbsp;request&nbsp;from&nbsp;an<br>
+unauthorized&nbsp;HOST,&nbsp;she's&nbsp;denied.&nbsp;&nbsp;If&nbsp;a&nbsp;request&nbsp;from&nbsp;an&nbsp;authorized&nbsp;HOST&nbsp;is<br>
+not&nbsp;an&nbsp;authorized&nbsp;USER,&nbsp;it&nbsp;is&nbsp;denied.&nbsp;&nbsp;If&nbsp;a&nbsp;globally&nbsp;authorized&nbsp;USER&nbsp;does<br>
+not&nbsp;have&nbsp;rights&nbsp;to&nbsp;a&nbsp;certain&nbsp;DB,&nbsp;she's&nbsp;denied.&nbsp;&nbsp;Get&nbsp;the&nbsp;picture?<br>
+<br>
+'host','db','select','insert','update','delete','index','alter','create','dr<br>
+op','grant'<br>
+<br>
+<br>
+You&nbsp;should&nbsp;now&nbsp;have&nbsp;a&nbsp;working&nbsp;knowledge&nbsp;of&nbsp;MySQL&nbsp;grant&nbsp;tables.&nbsp;&nbsp;If&nbsp;there&nbsp;is<br>
+anything&nbsp;I've&nbsp;left&nbsp;out&nbsp;of&nbsp;this&nbsp;answer&nbsp;that&nbsp;you&nbsp;feel&nbsp;is&nbsp;pertinent,&nbsp;or&nbsp;if&nbsp;my<br>
+instructions&nbsp;don't&nbsp;work&nbsp;for&nbsp;you,&nbsp;please&nbsp;let&nbsp;me&nbsp;know&nbsp;and&nbsp;I'll&nbsp;re-post&nbsp;this<br>
+letter&nbsp;again,&nbsp;corrected.&nbsp;&nbsp;I&nbsp;threw&nbsp;it&nbsp;together&nbsp;one&nbsp;night&nbsp;out&nbsp;of&nbsp;exasperation<br>
+for&nbsp;all&nbsp;the&nbsp;newbies&nbsp;who&nbsp;don't&nbsp;know&nbsp;squat&nbsp;about&nbsp;MySQL&nbsp;yet,&nbsp;so&nbsp;it&nbsp;is&nbsp;almost<br>
+guaranteed&nbsp;to&nbsp;have&nbsp;errors.<br>
+<br>
+Once&nbsp;again,&nbsp;you&nbsp;can't&nbsp;go&nbsp;wrong&nbsp;by&nbsp;reading&nbsp;section&nbsp;6&nbsp;of&nbsp;the&nbsp;MySQL&nbsp;manual.&nbsp;&nbsp;It<br>
+is&nbsp;more&nbsp;detailed&nbsp;than&nbsp;I!<br>
+http://www.mysql.com/Manual/manual.html.<br>
+<br>
+----------------------------------------------------------------------------<br>
+10/12/2000<br>
+Matthew&nbsp;sent&nbsp;in&nbsp;some&nbsp;mail&nbsp;with&nbsp;updated&nbsp;contact&nbsp;information:<br>
+NEW&nbsp;CONTACT&nbsp;INFORMATION:&nbsp;<br>
+<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;------------------------&nbsp;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Matthew&nbsp;P.&nbsp;Barnson&nbsp;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Manager,&nbsp;Systems&nbsp;Administration&nbsp;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Excite@Home&nbsp;Business&nbsp;Applications&nbsp;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mbarnson@excitehome.net&nbsp;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(801)234-8300&nbsp;<br>
+<br>
+<br>
+&nbsp;&nbsp;&nbsp;&nbsp;</P
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H1
+CLASS="SECTION"
+><A
+NAME="CLEANUPWORK"
+>C.4. Cleaning up after mucking with Bugzilla</A
+></H1
+><P
+CLASS="LITERALLAYOUT"
+>Contributed&nbsp;by&nbsp;Eric&nbsp;Hanson:<br>
+There&nbsp;are&nbsp;several&nbsp;things,&nbsp;and&nbsp;one&nbsp;trick.&nbsp;&nbsp;There&nbsp;is&nbsp;a&nbsp;small&nbsp;tiny&nbsp;piece&nbsp;of<br>
+documentation&nbsp;I&nbsp;saw&nbsp;once&nbsp;that&nbsp;said&nbsp;something&nbsp;very&nbsp;important.<br>
+1)&nbsp;&nbsp;After&nbsp;pretty&nbsp;much&nbsp;any&nbsp;manual&nbsp;working&nbsp;of&nbsp;the&nbsp;Mysql&nbsp;db,&nbsp;you&nbsp;must<br>
+delete&nbsp;a&nbsp;file&nbsp;in&nbsp;the&nbsp;bugzilla&nbsp;directory:&nbsp;data/versioncache<br>
+Versioncache&nbsp;basically&nbsp;is&nbsp;a&nbsp;way&nbsp;to&nbsp;speed&nbsp;up&nbsp;bugzilla&nbsp;(from&nbsp;what&nbsp;I<br>
+understand).&nbsp;&nbsp;It&nbsp;stores&nbsp;a&nbsp;lot&nbsp;of&nbsp;commonly&nbsp;used&nbsp;information.&nbsp;&nbsp;However,<br>
+this&nbsp;file&nbsp;is&nbsp;refreshed&nbsp;every&nbsp;so&nbsp;often&nbsp;(I&nbsp;can't&nbsp;remember&nbsp;the&nbsp;time<br>
+interval&nbsp;though).&nbsp;&nbsp;So&nbsp;eventually&nbsp;all&nbsp;changes&nbsp;do&nbsp;propogate&nbsp;out,&nbsp;so&nbsp;you<br>
+may&nbsp;see&nbsp;stuff&nbsp;suddenly&nbsp;working.<br>
+2)&nbsp;&nbsp;Assuming&nbsp;that&nbsp;failed,&nbsp;you&nbsp;will&nbsp;also&nbsp;have&nbsp;to&nbsp;check&nbsp;something&nbsp;with&nbsp;the<br>
+checksetup.pl&nbsp;file.&nbsp;&nbsp;It&nbsp;actually&nbsp;is&nbsp;run&nbsp;twice.&nbsp;&nbsp;The&nbsp;first&nbsp;time&nbsp;it<br>
+creates&nbsp;the&nbsp;file:&nbsp;localconfig.&nbsp;&nbsp;You&nbsp;can&nbsp;modify&nbsp;localconfig,&nbsp;(or&nbsp;not&nbsp;if<br>
+you&nbsp;are&nbsp;doing&nbsp;bug_status&nbsp;stuff)&nbsp;or&nbsp;you&nbsp;should&nbsp;delete&nbsp;localconfig&nbsp;and<br>
+rerun&nbsp;your&nbsp;modified&nbsp;checksetup.pl.&nbsp;&nbsp;Since&nbsp;I&nbsp;don't&nbsp;actually&nbsp;see&nbsp;anything<br>
+in&nbsp;localconfig&nbsp;pertaining&nbsp;to&nbsp;bug_status,&nbsp;this&nbsp;point&nbsp;is&nbsp;mainly&nbsp;a&nbsp;FYI.<br>
+&nbsp;&nbsp;&nbsp;&nbsp;</P
+></DIV
+></DIV
+><DIV
+CLASS="CHAPTER"
+><HR><H1
+><A
+NAME="VARIANTS"
+>Chapter 7. Bugzilla Variants</A
+></H1
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>      I <EM
+>know</EM
+> there are more variants than just RedHat Bugzilla out there.
+      Please help me get information about them, their project status, and benefits there
+      might be in using them or in using their code in main-tree Bugzilla.
+    </P
+></BLOCKQUOTE
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H1
+CLASS="SECTION"
+><A
+NAME="RHBUGZILLA"
+>7.1. Red Hat Bugzilla</A
+></H1
+><P
+>      Red Hat Bugzilla is probably the most popular Bugzilla variant, aside from Mozilla Bugzilla,
+      on the planet.
+      One of the major benefits of Red Hat Bugzilla is the ability to work with Oracle as a
+      database, as well as MySQL.
+      Here's what Dave Lawrence had to say about the status of Red Hat Bugzilla,
+      <A
+NAME="AEN1913"
+></A
+><BLOCKQUOTE
+CLASS="BLOCKQUOTE"
+><P
+CLASS="LITERALLAYOUT"
+>	&nbsp;&nbsp;Hello.&nbsp;I&nbsp;apologize&nbsp;that&nbsp;I&nbsp;am&nbsp;getting&nbsp;back&nbsp;to&nbsp;you&nbsp;so&nbsp;late.&nbsp;It&nbsp;has&nbsp;been&nbsp;difficult&nbsp;to&nbsp;keep<br>
+up&nbsp;with&nbsp;email&nbsp;this&nbsp;past&nbsp;week.&nbsp;I&nbsp;have&nbsp;checked&nbsp;out&nbsp;your&nbsp;updated&nbsp;documentation&nbsp;and&nbsp;I&nbsp;will<br>
+have&nbsp;to&nbsp;say&nbsp;very&nbsp;good&nbsp;work.&nbsp;A&nbsp;few&nbsp;notes&nbsp;and&nbsp;additions&nbsp;as&nbsp;follows.<br>
+<br>
+(ed:&nbsp;from&nbsp;the&nbsp;FAQ)<br>
+&#62;For&nbsp;the&nbsp;record,&nbsp;we&nbsp;are&nbsp;not&nbsp;using&nbsp;any&nbsp;template&nbsp;type&nbsp;implementation&nbsp;for&nbsp;the&nbsp;cosmetic&nbsp;changes&nbsp;<br>
+&#62;maded&nbsp;to&nbsp;Bugzilla.&nbsp;It&nbsp;is&nbsp;just&nbsp;alot&nbsp;of&nbsp;html&nbsp;changes&nbsp;in&nbsp;the&nbsp;code&nbsp;itself.&nbsp;I&nbsp;admit&nbsp;I&nbsp;may&nbsp;have&nbsp;<br>
+&#62;gotten&nbsp;a&nbsp;little&nbsp;carried&nbsp;away&nbsp;with&nbsp;it&nbsp;but&nbsp;the&nbsp;corporate&nbsp;types&nbsp;asked&nbsp;for&nbsp;a&nbsp;more&nbsp;standardized&nbsp;<br>
+&#62;interface&nbsp;to&nbsp;match&nbsp;up&nbsp;with&nbsp;other&nbsp;projects&nbsp;relating&nbsp;to&nbsp;Red&nbsp;Hat&nbsp;web&nbsp;sites.&nbsp;A&nbsp;lot&nbsp;of&nbsp;other&nbsp;web&nbsp;<br>
+&#62;based&nbsp;internal&nbsp;tools&nbsp;I&nbsp;am&nbsp;working&nbsp;on&nbsp;also&nbsp;look&nbsp;like&nbsp;Bugzilla.&nbsp;<br>
+<br>
+<br>
+This&nbsp;should&nbsp;probably&nbsp;be&nbsp;changed&nbsp;since&nbsp;we&nbsp;are&nbsp;now&nbsp;in&nbsp;fact&nbsp;using&nbsp;Text::Template&nbsp;for&nbsp;most<br>
+of&nbsp;the&nbsp;html&nbsp;rendering.&nbsp;You&nbsp;actually&nbsp;state&nbsp;this&nbsp;later&nbsp;in&nbsp;your&nbsp;numbered&nbsp;list.<br>
+<br>
+Also&nbsp;number&nbsp;6&nbsp;contradicts&nbsp;number&nbsp;8&nbsp;where&nbsp;number&nbsp;6&nbsp;would&nbsp;be&nbsp;the&nbsp;most&nbsp;up&nbsp;to&nbsp;date&nbsp;status<br>
+on&nbsp;the&nbsp;Oracle&nbsp;port.<br>
+<br>
+Additional&nbsp;Information:<br>
+-----------------------------<br>
+1.&nbsp;Comments&nbsp;are&nbsp;now&nbsp;stored&nbsp;in&nbsp;varchar&nbsp;fields&nbsp;of&nbsp;4k&nbsp;in&nbsp;size&nbsp;each.&nbsp;If&nbsp;the&nbsp;comment&nbsp;is&nbsp;more<br>
+than&nbsp;4k&nbsp;it&nbsp;is&nbsp;broken&nbsp;up&nbsp;into&nbsp;chunks&nbsp;and&nbsp;given&nbsp;a&nbsp;sort&nbsp;number&nbsp;so&nbsp;each&nbsp;comment&nbsp;can&nbsp;be&nbsp;re<br>
+assembled&nbsp;in&nbsp;the&nbsp;correct&nbsp;order.&nbsp;This&nbsp;was&nbsp;done&nbsp;because&nbsp;originally&nbsp;I&nbsp;was&nbsp;storing&nbsp;the&nbsp;comments<br>
+in&nbsp;a&nbsp;long&nbsp;datatype&nbsp;which&nbsp;unfortunately&nbsp;cannot&nbsp;be&nbsp;indexed&nbsp;or&nbsp;joined&nbsp;with&nbsp;another&nbsp;table.&nbsp;This<br>
+cause&nbsp;the&nbsp;search&nbsp;of&nbsp;text&nbsp;within&nbsp;the&nbsp;long&nbsp;description&nbsp;to&nbsp;be&nbsp;disabled&nbsp;for&nbsp;a&nbsp;long&nbsp;time.&nbsp;That<br>
+is&nbsp;now&nbsp;working&nbsp;and&nbsp;is&nbsp;nto&nbsp;showing&nbsp;any&nbsp;noticeble&nbsp;performance&nbsp;hit&nbsp;that&nbsp;I&nbsp;can&nbsp;tell.&nbsp;<br>
+<br>
+2.&nbsp;Work&nbsp;is&nbsp;being&nbsp;started&nbsp;on&nbsp;internationalizing&nbsp;the&nbsp;Bugzilla&nbsp;source&nbsp;we&nbsp;have&nbsp;to&nbsp;allow&nbsp;our<br>
+Japanese&nbsp;customers&nbsp;to&nbsp;enter&nbsp;bug&nbsp;reports&nbsp;into&nbsp;a&nbsp;single&nbsp;bugzilla&nbsp;system.&nbsp;This&nbsp;will&nbsp;probably<br>
+be&nbsp;done&nbsp;by&nbsp;using&nbsp;the&nbsp;nvarchar&nbsp;data&nbsp;types&nbsp;supported&nbsp;by&nbsp;Oracle&nbsp;which&nbsp;allows&nbsp;storage&nbsp;of<br>
+double&nbsp;byte&nbsp;characters&nbsp;and&nbsp;also&nbsp;the&nbsp;use&nbsp;of&nbsp;the&nbsp;Accept-Language&nbsp;in&nbsp;the&nbsp;http&nbsp;header&nbsp;for&nbsp;<br>
+detection&nbsp;by&nbsp;Bugilla&nbsp;of&nbsp;which&nbsp;language&nbsp;to&nbsp;render.<br>
+<br>
+3.&nbsp;Of&nbsp;course&nbsp;even&nbsp;more&nbsp;cosmetic&nbsp;changes.&nbsp;It&nbsp;is&nbsp;difficult&nbsp;to&nbsp;keep&nbsp;up&nbsp;with&nbsp;the&nbsp;ever&nbsp;<br>
+changing&nbsp;faces&nbsp;of&nbsp;www.redhat.com.<br>
+<br>
+4.&nbsp;Some&nbsp;convenience&nbsp;enhancements&nbsp;in&nbsp;the&nbsp;administration&nbsp;utilities.&nbsp;And&nbsp;more&nbsp;integration<br>
+with&nbsp;other&nbsp;internal/external&nbsp;Red&nbsp;Hat&nbsp;web&nbsp;sites.<br>
+<br>
+I&nbsp;hope&nbsp;this&nbsp;information&nbsp;may&nbsp;prove&nbsp;helpful&nbsp;for&nbsp;your&nbsp;documentation.&nbsp;Please&nbsp;contact<br>
+me&nbsp;if&nbsp;you&nbsp;have&nbsp;any&nbsp;more&nbsp;question&nbsp;or&nbsp;I&nbsp;can&nbsp;do&nbsp;anything&nbsp;else.<br>
+<br>
+Regards<br>
+	</P
+></BLOCKQUOTE
+>
+    </P
+></DIV
+></DIV
+><DIV
+CLASS="APPENDIX"
+><HR><H1
+><A
+NAME="PATCHES"
+>Appendix D. Useful Patches and Utilities for Bugzilla</A
+></H1
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="SETPERL"
+>D.1. The setperl.csh Utility</A
+></H1
+><P
+>	
+      You can use the "setperl.csh" utility to quickly and easily
+      change the path to perl on all your Bugzilla files.
+      This is a C-shell script; if you do not have "csh" or "tcsh" in the search
+      path on your system, it will not work!
+    </P
+><DIV
+CLASS="PROCEDURE"
+><OL
+TYPE="1"
+><LI
+><P
+>	  Download the "setperl.csh" utility to your Bugzilla
+	  directory and make it executable.
+	</P
+><OL
+CLASS="SUBSTEPS"
+TYPE="a"
+><LI
+><P
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>bash#</TT
+>
+		<B
+CLASS="COMMAND"
+>cd /your/path/to/bugzilla</B
+>
+	      </TT
+>
+	    </P
+></LI
+><LI
+><P
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>bash#</TT
+>
+		<B
+CLASS="COMMAND"
+>wget -O setperl.csh 'http://bugzilla.mozilla.org/showattachment.cgi?attach_id=10795'</B
+>
+	      </TT
+>
+	    </P
+></LI
+><LI
+><P
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>bash#</TT
+>
+		<B
+CLASS="COMMAND"
+>chmod u+x setperl.csh</B
+>
+	      </TT
+>
+	    </P
+></LI
+></OL
+></LI
+><LI
+><P
+>	  Prepare (and fix) Bugzilla file permissions.
+	</P
+><OL
+CLASS="SUBSTEPS"
+TYPE="a"
+><LI
+><P
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>bash#</TT
+>
+		<B
+CLASS="COMMAND"
+>chmod u+w *</B
+>
+	      </TT
+>
+	    </P
+></LI
+><LI
+><P
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>bash#</TT
+>
+		<B
+CLASS="COMMAND"
+>chmod u+x duplicates.cgi</B
+>
+	      </TT
+>
+	    </P
+></LI
+><LI
+><P
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>bash#</TT
+>
+		<B
+CLASS="COMMAND"
+>chmod a-x bug_status.html</B
+>
+	      </TT
+>
+	    </P
+></LI
+></OL
+></LI
+><LI
+><P
+>	  Run the script:
+	</P
+><P
+>	  <TT
+CLASS="COMPUTEROUTPUT"
+>	    <TT
+CLASS="PROMPT"
+>bash#</TT
+>
+	    <B
+CLASS="COMMAND"
+>./setperl.csh /your/path/to/perl</B
+>
+	  </TT
+>
+<DIV
+CLASS="EXAMPLE"
+><A
+NAME="AEN1963"
+></A
+><P
+><B
+>Example D-1. Using Setperl to set your perl path</B
+></P
+><P
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>	      <TT
+CLASS="PROMPT"
+>bash#</TT
+>
+	      <B
+CLASS="COMMAND"
+>./setperl.csh /usr/bin/perl</B
+>
+	      </TT
+>
+            </P
+></DIV
+>
+	</P
+></LI
+></OL
+></DIV
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H1
+CLASS="SECTION"
+><A
+NAME="CMDLINE"
+>D.2. Command-line Bugzilla Queries</A
+></H1
+><P
+>      Users can query Bugzilla from the command line using
+      this suite of utilities.
+    </P
+><P
+>      The query.conf file contains the mapping from options to field
+      names and comparison types.  Quoted option names are "grepped" for, so
+      it should be easy to edit this file.  Comments (#) have no effect; you
+      must make sure these lines do not contain any quoted "option"
+    </P
+><P
+>      buglist is a shell script which submits a Bugzilla query and writes the
+      resulting HTML page to stdout.  It supports both short options,
+      (such as "-Afoo" or "-Rbar") and long options (such as
+      "--assignedto=foo" or "--reporter=bar").  If the first character
+      of an option is not "-", it is treated as if it were prefixed
+      with "--default=".
+    </P
+><P
+>      The columlist is taken from the COLUMNLIST environment variable.
+      This is equivalent to the "Change Columns" option when you list
+      bugs in buglist.cgi.  If you have already used Bugzilla, use
+      <B
+CLASS="COMMAND"
+>grep COLUMLIST ~/.netscape/cookies</B
+> to see
+      your current COLUMNLIST setting.
+    </P
+><P
+>      bugs is a simple shell script which calls buglist and extracts
+      the bug numbers from the output.  Adding the prefix
+      "http://bugzilla.mozilla.org/buglist.cgi?bug_id="
+      turns the bug list into a working link if any bugs are found.
+      Counting bugs is easy.  Pipe the results through
+      <B
+CLASS="COMMAND"
+>sed -e 's/,/ /g' | wc | awk '{printf $2 "\n"}'</B
+>
+    </P
+><P
+>      Akkana says she has good results piping buglist output through
+      <B
+CLASS="COMMAND"
+>w3m -T text/html -dump</B
+>
+    </P
+><DIV
+CLASS="PROCEDURE"
+><OL
+TYPE="1"
+><LI
+><P
+>	  Download three files:
+	</P
+><OL
+CLASS="SUBSTEPS"
+TYPE="a"
+><LI
+><P
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>bash$</TT
+>
+		<B
+CLASS="COMMAND"
+>wget -O query.conf 'http://bugzilla.mozilla.org/showattachment.cgi?attach_id=26157'</B
+>
+	      </TT
+>
+	    </P
+></LI
+><LI
+><P
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>bash$</TT
+>
+		<B
+CLASS="COMMAND"
+>wget -O buglist 'http://bugzilla.mozilla.org/showattachment.cgi?attach_id=26944'</B
+>
+	      </TT
+>
+	    </P
+></LI
+><LI
+><P
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>bash#</TT
+>
+		<B
+CLASS="COMMAND"
+>wget -O bugs 'http://bugzilla.mozilla.org/showattachment.cgi?attach_id=26215'</B
+>
+	      </TT
+>
+	    </P
+></LI
+></OL
+></LI
+><LI
+><P
+>	  Make your utilities executable:
+	  <TT
+CLASS="COMPUTEROUTPUT"
+>	    <TT
+CLASS="PROMPT"
+>bash$</TT
+>
+	    <B
+CLASS="COMMAND"
+>chmod u+x buglist bugs</B
+>
+	  </TT
+>
+	</P
+></LI
+></OL
+></DIV
+></DIV
+><DIV
+CLASS="SECTION"
+><HR><H1
+CLASS="SECTION"
+><A
+NAME="QUICKSEARCH"
+>D.3. The Quicksearch Utility</A
+></H1
+><P
+>      Quicksearch is a new, experimental feature of the 2.12 release.
+      It consist of two Javascript files, "quicksearch.js" and "localconfig.js",
+      and two documentation files, "quicksearch.html" and "quicksearchhack.html"
+    </P
+><P
+>      The index.html page has been updated to include the QuickSearch text box.
+    </P
+><P
+>      To take full advantage of the query power, the Bugzilla maintainer must
+      edit "localconfig.js" according to the value sets used in the local installation.
+    </P
+><P
+>      Currently, keywords must be hard-coded in localconfig.js.  If they are not,
+      keywords are not automatically recognized.  This means, if localconfig.js
+      is left unconfigured, that searching for a bug with the "foo" keyword
+      will only find bugs with "foo" in the summary, status whiteboard, product or
+      component name, but not those with the keyword "foo".
+    </P
+><P
+>      Workarounds for Bugzilla users:
+      <P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+>search for '!foo' (this will find only bugs with the keyword "foo"</TD
+></TR
+><TR
+><TD
+>search 'foo,!foo' (equivalent to 'foo OR keyword:foo')</TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+>
+    </P
+><P
+>      When this tool is ported from client-side JavaScript to server-side Perl,
+      the requirement for hard-coding keywords can be fixed.
+      <A
+HREF="http://bugzilla.mozilla.org/show_bug.cgi?id=70907"
+TARGET="_top"
+>This bug</A
+>
+      has details.
+    </P
+></DIV
+></DIV
+><DIV
+CLASS="APPENDIX"
+><HR><H1
+><A
+NAME="GFDL"
+>Appendix E. GNU Free Documentation License</A
+></H1
+><P
+>Version 1.1, March 2000</P
+><A
+NAME="AEN2019"
+></A
+><BLOCKQUOTE
+CLASS="BLOCKQUOTE"
+><P
+>Copyright (C) 2000  Free Software Foundation, Inc.
+59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.</P
+></BLOCKQUOTE
+><DIV
+CLASS="SECT1"
+><HR><H1
+CLASS="SECT1"
+><A
+NAME="GFDL_0"
+>0. PREAMBLE</A
+></H1
+><P
+>The purpose of this License is to make a manual, textbook,
+    or other written document "free" in the sense of freedom: to
+    assure everyone the effective freedom to copy and redistribute it,
+    with or without modifying it, either commercially or
+    noncommercially.  Secondarily, this License preserves for the
+    author and publisher a way to get credit for their work, while not
+    being considered responsible for modifications made by
+    others.</P
+><P
+>This License is a kind of "copyleft", which means that
+    derivative works of the document must themselves be free in the
+    same sense.  It complements the GNU General Public License, which
+    is a copyleft license designed for free software.</P
+><P
+>We have designed this License in order to use it for manuals
+    for free software, because free software needs free documentation:
+    a free program should come with manuals providing the same
+    freedoms that the software does.  But this License is not limited
+    to software manuals; it can be used for any textual work,
+    regardless of subject matter or whether it is published as a
+    printed book.  We recommend this License principally for works
+    whose purpose is instruction or reference.</P
+></DIV
+><DIV
+CLASS="SECT1"
+><HR><H1
+CLASS="SECT1"
+><A
+NAME="GFDL_1"
+>1. APPLICABILITY AND DEFINITIONS</A
+></H1
+><P
+>This License applies to any manual or other work that
+    contains a notice placed by the copyright holder saying it can be
+    distributed under the terms of this License.  The "Document",
+    below, refers to any such manual or work.  Any member of the
+    public is a licensee, and is addressed as "you".</P
+><P
+>A "Modified Version" of the Document means any work
+    containing the Document or a portion of it, either copied
+    verbatim, or with modifications and/or translated into another
+    language.</P
+><P
+>A "Secondary Section" is a named appendix or a front-matter
+    section of the Document that deals exclusively with the
+    relationship of the publishers or authors of the Document to the
+    Document's overall subject (or to related matters) and contains
+    nothing that could fall directly within that overall subject.
+    (For example, if the Document is in part a textbook of
+    mathematics, a Secondary Section may not explain any mathematics.)
+    The relationship could be a matter of historical connection with
+    the subject or with related matters, or of legal, commercial,
+    philosophical, ethical or political position regarding
+    them.</P
+><P
+>The "Invariant Sections" are certain Secondary Sections
+    whose titles are designated, as being those of Invariant Sections,
+    in the notice that says that the Document is released under this
+    License.</P
+><P
+>The "Cover Texts" are certain short passages of text that
+    are listed, as Front-Cover Texts or Back-Cover Texts, in the
+    notice that says that the Document is released under this
+    License.</P
+><P
+>A "Transparent" copy of the Document means a
+    machine-readable copy, represented in a format whose specification
+    is available to the general public, whose contents can be viewed
+    and edited directly and straightforwardly with generic text
+    editors or (for images composed of pixels) generic paint programs
+    or (for drawings) some widely available drawing editor, and that
+    is suitable for input to text formatters or for automatic
+    translation to a variety of formats suitable for input to text
+    formatters.  A copy made in an otherwise Transparent file format
+    whose markup has been designed to thwart or discourage subsequent
+    modification by readers is not Transparent.  A copy that is not
+    "Transparent" is called "Opaque".</P
+><P
+>Examples of suitable formats for Transparent copies include
+    plain ASCII without markup, Texinfo input format, LaTeX input
+    format, SGML or XML using a publicly available DTD, and
+    standard-conforming simple HTML designed for human modification.
+    Opaque formats include PostScript, PDF, proprietary formats that
+    can be read and edited only by proprietary word processors, SGML
+    or XML for which the DTD and/or processing tools are not generally
+    available, and the machine-generated HTML produced by some word
+    processors for output purposes only.</P
+><P
+>The "Title Page" means, for a printed book, the title page
+    itself, plus such following pages as are needed to hold, legibly,
+    the material this License requires to appear in the title page.
+    For works in formats which do not have any title page as such,
+    "Title Page" means the text near the most prominent appearance of
+    the work's title, preceding the beginning of the body of the
+    text.</P
+></DIV
+><DIV
+CLASS="SECT1"
+><HR><H1
+CLASS="SECT1"
+><A
+NAME="GFDL_2"
+>2. VERBATIM COPYING</A
+></H1
+><P
+>You may copy and distribute the Document in any medium,
+    either commercially or noncommercially, provided that this
+    License, the copyright notices, and the license notice saying this
+    License applies to the Document are reproduced in all copies, and
+    that you add no other conditions whatsoever to those of this
+    License.  You may not use technical measures to obstruct or
+    control the reading or further copying of the copies you make or
+    distribute.  However, you may accept compensation in exchange for
+    copies.  If you distribute a large enough number of copies you
+    must also follow the conditions in section 3.</P
+><P
+>You may also lend copies, under the same conditions stated
+    above, and you may publicly display copies.</P
+></DIV
+><DIV
+CLASS="SECT1"
+><HR><H1
+CLASS="SECT1"
+><A
+NAME="GFDL_3"
+>3. COPYING IN QUANTITY</A
+></H1
+><P
+>If you publish printed copies of the Document numbering more
+    than 100, and the Document's license notice requires Cover Texts,
+    you must enclose the copies in covers that carry, clearly and
+    legibly, all these Cover Texts: Front-Cover Texts on the front
+    cover, and Back-Cover Texts on the back cover.  Both covers must
+    also clearly and legibly identify you as the publisher of these
+    copies.  The front cover must present the full title with all
+    words of the title equally prominent and visible.  You may add
+    other material on the covers in addition.  Copying with changes
+    limited to the covers, as long as they preserve the title of the
+    Document and satisfy these conditions, can be treated as verbatim
+    copying in other respects.</P
+><P
+>If the required texts for either cover are too voluminous to
+    fit legibly, you should put the first ones listed (as many as fit
+    reasonably) on the actual cover, and continue the rest onto
+    adjacent pages.</P
+><P
+>If you publish or distribute Opaque copies of the Document
+    numbering more than 100, you must either include a
+    machine-readable Transparent copy along with each Opaque copy, or
+    state in or with each Opaque copy a publicly-accessible
+    computer-network location containing a complete Transparent copy
+    of the Document, free of added material, which the general
+    network-using public has access to download anonymously at no
+    charge using public-standard network protocols.  If you use the
+    latter option, you must take reasonably prudent steps, when you
+    begin distribution of Opaque copies in quantity, to ensure that
+    this Transparent copy will remain thus accessible at the stated
+    location until at least one year after the last time you
+    distribute an Opaque copy (directly or through your agents or
+    retailers) of that edition to the public.</P
+><P
+>It is requested, but not required, that you contact the
+    authors of the Document well before redistributing any large
+    number of copies, to give them a chance to provide you with an
+    updated version of the Document.</P
+></DIV
+><DIV
+CLASS="SECT1"
+><HR><H1
+CLASS="SECT1"
+><A
+NAME="GFDL_4"
+>4. MODIFICATIONS</A
+></H1
+><P
+>You may copy and distribute a Modified Version of the
+    Document under the conditions of sections 2 and 3 above, provided
+    that you release the Modified Version under precisely this
+    License, with the Modified Version filling the role of the
+    Document, thus licensing distribution and modification of the
+    Modified Version to whoever possesses a copy of it.  In addition,
+    you must do these things in the Modified Version:</P
+><P
+></P
+><OL
+TYPE="A"
+><LI
+><P
+>Use in the Title Page
+      (and on the covers, if any) a title distinct from that of the
+      Document, and from those of previous versions (which should, if
+      there were any, be listed in the History section of the
+      Document).  You may use the same title as a previous version if
+      the original publisher of that version gives permission.</P
+></LI
+><LI
+><P
+>List on the Title Page,
+      as authors, one or more persons or entities responsible for
+      authorship of the modifications in the Modified Version,
+      together with at least five of the principal authors of the
+      Document (all of its principal authors, if it has less than
+      five).</P
+></LI
+><LI
+><P
+>State on the Title page
+      the name of the publisher of the Modified Version, as the
+      publisher.</P
+></LI
+><LI
+><P
+>Preserve all the
+      copyright notices of the Document.</P
+></LI
+><LI
+><P
+>Add an appropriate
+      copyright notice for your modifications adjacent to the other
+      copyright notices.</P
+></LI
+><LI
+><P
+>Include, immediately
+      after the copyright notices, a license notice giving the public
+      permission to use the Modified Version under the terms of this
+      License, in the form shown in the Addendum below.</P
+></LI
+><LI
+><P
+>Preserve in that license
+      notice the full lists of Invariant Sections and required Cover
+      Texts given in the Document's license notice.</P
+></LI
+><LI
+><P
+>Include an unaltered
+      copy of this License.</P
+></LI
+><LI
+><P
+>Preserve the section
+      entitled "History", and its title, and add to it an item stating
+      at least the title, year, new authors, and publisher of the
+      Modified Version as given on the Title Page.  If there is no
+      section entitled "History" in the Document, create one stating
+      the title, year, authors, and publisher of the Document as given
+      on its Title Page, then add an item describing the Modified
+      Version as stated in the previous sentence.</P
+></LI
+><LI
+><P
+>Preserve the network
+      location, if any, given in the Document for public access to a
+      Transparent copy of the Document, and likewise the network
+      locations given in the Document for previous versions it was
+      based on.  These may be placed in the "History" section.  You
+      may omit a network location for a work that was published at
+      least four years before the Document itself, or if the original
+      publisher of the version it refers to gives permission.</P
+></LI
+><LI
+><P
+>In any section entitled
+      "Acknowledgements" or "Dedications", preserve the section's
+      title, and preserve in the section all the substance and tone of
+      each of the contributor acknowledgements and/or dedications
+      given therein.</P
+></LI
+><LI
+><P
+>Preserve all the
+      Invariant Sections of the Document, unaltered in their text and
+      in their titles.  Section numbers or the equivalent are not
+      considered part of the section titles.</P
+></LI
+><LI
+><P
+>Delete any section
+      entitled "Endorsements".  Such a section may not be included in
+      the Modified Version.</P
+></LI
+><LI
+><P
+>Do not retitle any
+      existing section as "Endorsements" or to conflict in title with
+      any Invariant Section.</P
+></LI
+></OL
+><P
+>If the Modified Version includes new front-matter sections
+    or appendices that qualify as Secondary Sections and contain no
+    material copied from the Document, you may at your option
+    designate some or all of these sections as invariant.  To do this,
+    add their titles to the list of Invariant Sections in the Modified
+    Version's license notice.  These titles must be distinct from any
+    other section titles.</P
+><P
+>You may add a section entitled "Endorsements", provided it
+    contains nothing but endorsements of your Modified Version by
+    various parties--for example, statements of peer review or that
+    the text has been approved by an organization as the authoritative
+    definition of a standard.</P
+><P
+>You may add a passage of up to five words as a Front-Cover
+    Text, and a passage of up to 25 words as a Back-Cover Text, to the
+    end of the list of Cover Texts in the Modified Version.  Only one
+    passage of Front-Cover Text and one of Back-Cover Text may be
+    added by (or through arrangements made by) any one entity.  If the
+    Document already includes a cover text for the same cover,
+    previously added by you or by arrangement made by the same entity
+    you are acting on behalf of, you may not add another; but you may
+    replace the old one, on explicit permission from the previous
+    publisher that added the old one.</P
+><P
+>The author(s) and publisher(s) of the Document do not by
+    this License give permission to use their names for publicity for
+    or to assert or imply endorsement of any Modified Version.</P
+></DIV
+><DIV
+CLASS="SECT1"
+><HR><H1
+CLASS="SECT1"
+><A
+NAME="GFDL_5"
+>5. COMBINING DOCUMENTS</A
+></H1
+><P
+>You may combine the Document with other documents released
+    under this License, under the terms defined in section 4 above for
+    modified versions, provided that you include in the combination
+    all of the Invariant Sections of all of the original documents,
+    unmodified, and list them all as Invariant Sections of your
+    combined work in its license notice.</P
+><P
+>The combined work need only contain one copy of this
+    License, and multiple identical Invariant Sections may be replaced
+    with a single copy.  If there are multiple Invariant Sections with
+    the same name but different contents, make the title of each such
+    section unique by adding at the end of it, in parentheses, the
+    name of the original author or publisher of that section if known,
+    or else a unique number.  Make the same adjustment to the section
+    titles in the list of Invariant Sections in the license notice of
+    the combined work.</P
+><P
+>In the combination, you must combine any sections entitled
+    "History" in the various original documents, forming one section
+    entitled "History"; likewise combine any sections entitled
+    "Acknowledgements", and any sections entitled "Dedications".  You
+    must delete all sections entitled "Endorsements."</P
+></DIV
+><DIV
+CLASS="SECT1"
+><HR><H1
+CLASS="SECT1"
+><A
+NAME="GFDL_6"
+>6. COLLECTIONS OF DOCUMENTS</A
+></H1
+><P
+>You may make a collection consisting of the Document and
+    other documents released under this License, and replace the
+    individual copies of this License in the various documents with a
+    single copy that is included in the collection, provided that you
+    follow the rules of this License for verbatim copying of each of
+    the documents in all other respects.</P
+><P
+>You may extract a single document from such a collection,
+    and distribute it individually under this License, provided you
+    insert a copy of this License into the extracted document, and
+    follow this License in all other respects regarding verbatim
+    copying of that document.</P
+></DIV
+><DIV
+CLASS="SECT1"
+><HR><H1
+CLASS="SECT1"
+><A
+NAME="GFDL_7"
+>7. AGGREGATION WITH INDEPENDENT WORKS</A
+></H1
+><P
+>A compilation of the Document or its derivatives with other
+    separate and independent documents or works, in or on a volume of
+    a storage or distribution medium, does not as a whole count as a
+    Modified Version of the Document, provided no compilation
+    copyright is claimed for the compilation.  Such a compilation is
+    called an "aggregate", and this License does not apply to the
+    other self-contained works thus compiled with the Document, on
+    account of their being thus compiled, if they are not themselves
+    derivative works of the Document.</P
+><P
+>If the Cover Text requirement of section 3 is applicable to
+    these copies of the Document, then if the Document is less than
+    one quarter of the entire aggregate, the Document's Cover Texts
+    may be placed on covers that surround only the Document within the
+    aggregate.  Otherwise they must appear on covers around the whole
+    aggregate.</P
+></DIV
+><DIV
+CLASS="SECT1"
+><HR><H1
+CLASS="SECT1"
+><A
+NAME="GFDL_8"
+>8. TRANSLATION</A
+></H1
+><P
+>Translation is considered a kind of modification, so you may
+    distribute translations of the Document under the terms of section
+    4.  Replacing Invariant Sections with translations requires
+    special permission from their copyright holders, but you may
+    include translations of some or all Invariant Sections in addition
+    to the original versions of these Invariant Sections.  You may
+    include a translation of this License provided that you also
+    include the original English version of this License.  In case of
+    a disagreement between the translation and the original English
+    version of this License, the original English version will
+    prevail.</P
+></DIV
+><DIV
+CLASS="SECT1"
+><HR><H1
+CLASS="SECT1"
+><A
+NAME="GFDL_9"
+>9. TERMINATION</A
+></H1
+><P
+>You may not copy, modify, sublicense, or distribute the
+    Document except as expressly provided for under this License.  Any
+    other attempt to copy, modify, sublicense or distribute the
+    Document is void, and will automatically terminate your rights
+    under this License.  However, parties who have received copies, or
+    rights, from you under this License will not have their licenses
+    terminated so long as such parties remain in full
+    compliance.</P
+></DIV
+><DIV
+CLASS="SECT1"
+><HR><H1
+CLASS="SECT1"
+><A
+NAME="GFDL_10"
+>10. FUTURE REVISIONS OF THIS LICENSE</A
+></H1
+><P
+>The Free Software Foundation may publish new, revised
+    versions of the GNU Free Documentation License from time to time.
+    Such new versions will be similar in spirit to the present
+    version, but may differ in detail to address new problems or
+    concerns.  See <A
+HREF="http://www.gnu.org/copyleft/"
+TARGET="_top"
+>http://www.gnu.org/copyleft/</A
+>.</P
+><P
+>Each version of the License is given a distinguishing
+    version number.  If the Document specifies that a particular
+    numbered version of this License "or any later version" applies to
+    it, you have the option of following the terms and conditions
+    either of that specified version or of any later version that has
+    been published (not as a draft) by the Free Software Foundation.
+    If the Document does not specify a version number of this License,
+    you may choose any version ever published (not as a draft) by the
+    Free Software Foundation.</P
+></DIV
+><DIV
+CLASS="SECT1"
+><HR><H1
+CLASS="SECT1"
+><A
+NAME="GFDL_HOWTO"
+>How to use this License for your documents</A
+></H1
+><P
+>To use this License in a document you have written, include
+    a copy of the License in the document and put the following
+    copyright and license notices just after the title page:</P
+><A
+NAME="AEN2109"
+></A
+><BLOCKQUOTE
+CLASS="BLOCKQUOTE"
+><P
+>      Copyright (c)  YEAR  YOUR NAME.
+      Permission is granted to copy, distribute and/or modify this document
+      under the terms of the GNU Free Documentation License, Version 1.1
+      or any later version published by the Free Software Foundation;
+      with the Invariant Sections being LIST THEIR TITLES, with the
+      Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+      A copy of the license is included in the section entitled "GNU
+      Free Documentation License".</P
+></BLOCKQUOTE
+><P
+>If you have no Invariant Sections, write "with no Invariant
+    Sections" instead of saying which ones are invariant.  If you have
+    no Front-Cover Texts, write "no Front-Cover Texts" instead of
+    "Front-Cover Texts being LIST"; likewise for Back-Cover
+    Texts.</P
+><P
+>If your document contains nontrivial examples of program
+    code, we recommend releasing these examples in parallel under your
+    choice of free software license, such as the GNU General Public
+    License, to permit their use in free software.</P
+></DIV
+></DIV
+><DIV
+CLASS="GLOSSARY"
+><H1
+><A
+NAME="GLOSSARY"
+>Glossary</A
+></H1
+><DIV
+CLASS="GLOSSDIV"
+><H1
+CLASS="GLOSSDIV"
+><A
+NAME="GLOSS_A"
+>A</A
+></H1
+><DL
+><DT
+><B
+>There are no entries for A</B
+></DT
+><DD
+><P
+></P
+></DD
+></DL
+></DIV
+><DIV
+CLASS="GLOSSDIV"
+><H1
+CLASS="GLOSSDIV"
+><A
+NAME="GLOSS_B"
+>B</A
+></H1
+><DL
+><DT
+><B
+>Bug</B
+></DT
+><DD
+><P
+>A "Bug" in Bugzilla refers to an issue entered into the database which has an associated number, assignments, comments, etc.  Many also refer to a "Ticket" or "Issue"; in this context, they are synonymous.</P
+></DD
+><DT
+><B
+>Bug Number</B
+></DT
+><DD
+><P
+>Each Bugzilla Bug is assigned a number that uniquely identifies that Bug.  The Bug associated with a Bug Number can be pulled up via a query, or easily from the very front page by typing the number in the "Find" box.</P
+></DD
+><DT
+><B
+>Bug Life Cycle</B
+></DT
+><DD
+><P
+>A Bug has stages through which it must pass before becoming a "closed bug", including acceptance, resolution, and verification.  The "Bug Life Cycle" is moderately flexible according to the needs of the organization using it, though.</P
+></DD
+></DL
+></DIV
+><DIV
+CLASS="GLOSSDIV"
+><H1
+CLASS="GLOSSDIV"
+><A
+NAME="GLOSS_I"
+>I</A
+></H1
+><DL
+><DT
+><A
+NAME="GLOSS_INFINITELOOP"
+><B
+>Infinite Loop</B
+></A
+></DT
+><DD
+><P
+><EM
+>See: </EM
+><A
+HREF="#GLOSS_RECURSION"
+>Recursion</A
+></P
+></DD
+></DL
+></DIV
+><DIV
+CLASS="GLOSSDIV"
+><H1
+CLASS="GLOSSDIV"
+><A
+NAME="GLOSS_P"
+>P</A
+></H1
+><DL
+><DT
+><B
+>Product</B
+></DT
+><DD
+><P
+>A Product is a broad category of types of bugs.  In general, there are several Components to a Product.  A Product also defines a default Group (used for Bug Security) for all bugs entered into components beneath it.</P
+><DIV
+CLASS="EXAMPLE"
+><A
+NAME="AEN2145"
+></A
+><P
+><B
+>Example 1. A Sample Product</B
+></P
+><P
+>A company sells a software product called "X".  They also maintain some older software called "Y", and have a secret project "Z".  An effective use of Products might be to create Products "X", "Y", and "Z", each with Components "User Interface", "Database", and "Business Logic".  They might also change group permissions so that only those people who are members of Group "Z" can see components and bugs under Product "Z".</P
+></DIV
+></DD
+></DL
+></DIV
+><DIV
+CLASS="GLOSSDIV"
+><H1
+CLASS="GLOSSDIV"
+><A
+NAME="GLOSS_Q"
+>Q</A
+></H1
+><DL
+><DT
+><B
+>Q/A</B
+></DT
+><DD
+><P
+>"Q/A" is short for "Quality Assurance".  In most large software development organizations, there is a team devoted to ensuring the product meets minimum standards before shipping.  This team will also generally want to track the progress of bugs over their life cycle, thus the need for the "Q/A Contact" field in a Bug.</P
+></DD
+></DL
+></DIV
+><DIV
+CLASS="GLOSSDIV"
+><H1
+CLASS="GLOSSDIV"
+><A
+NAME="GLOSS_R"
+>R</A
+></H1
+><DL
+><DT
+><B
+>Recursion</B
+></DT
+><DD
+><P
+><EM
+>See: </EM
+><A
+HREF="#GLOSS_INFINITELOOP"
+>Infinite Loop</A
+></P
+></DD
+></DL
+></DIV
+><DIV
+CLASS="GLOSSDIV"
+><H1
+CLASS="GLOSSDIV"
+><A
+NAME="GLOSS_Z"
+>Z</A
+></H1
+><DL
+><DT
+><B
+>Zarro Boogs Found</B
+></DT
+><DD
+><P
+>This is the cryptic response sent by Bugzilla when a query returned no results.  It is just a goofy way of saying "Zero Bugs Found".</P
+></DD
+></DL
+></DIV
+></DIV
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/CVS/Entries b/docs/html/CVS/Entries
new file mode 100644
index 000000000..a46848e7d
--- /dev/null
+++ b/docs/html/CVS/Entries
@@ -0,0 +1,67 @@
+/Bugzilla-Guide.html/1.3/Wed Apr 25 07:38:17 2001//
+/about.html/1.2/Wed Apr 25 07:11:48 2001//
+/aboutthisguide.html/1.2/Wed Apr 25 07:11:48 2001//
+/administration.html/1.2/Wed Apr 25 07:11:48 2001//
+/bonsai.html/1.2/Wed Apr 25 07:11:49 2001//
+/bugprobs.html/1.2/Wed Apr 25 07:11:49 2001//
+/bz30.html/1.2/Wed Apr 25 07:11:49 2001//
+/cleanupwork.html/1.2/Wed Apr 25 07:11:50 2001//
+/cmdline.html/1.2/Wed Apr 25 07:11:50 2001//
+/contributors.html/1.2/Wed Apr 25 07:11:50 2001//
+/conventions.html/1.2/Wed Apr 25 07:11:50 2001//
+/copyright.html/1.2/Wed Apr 25 07:11:51 2001//
+/credits.html/1.2/Wed Apr 25 07:11:51 2001//
+/cvs.html/1.2/Wed Apr 25 07:11:51 2001//
+/database.html/1.2/Wed Apr 25 07:11:51 2001//
+/dbaseintegrity.html/1.2/Wed Apr 25 07:11:51 2001//
+/dbdoc.html/1.2/Wed Apr 25 07:11:52 2001//
+/dbschema.html/1.2/Wed Apr 25 07:11:52 2001//
+/dbschema.jpg/1.3/Wed Apr 25 07:11:52 2001//
+/disclaimer.html/1.2/Wed Apr 25 07:11:53 2001//
+/downloadlinks.html/1.1/Wed Apr 25 07:11:54 2001//
+/faq.html/1.2/Wed Apr 25 07:11:54 2001//
+/feedback.html/1.2/Wed Apr 25 07:11:55 2001//
+/future.html/1.2/Wed Apr 25 07:11:55 2001//
+/gfdl.html/1.2/Wed Apr 25 07:11:55 2001//
+/gfdl_0.html/1.2/Wed Apr 25 07:11:56 2001//
+/gfdl_1.html/1.2/Wed Apr 25 07:11:56 2001//
+/gfdl_10.html/1.2/Wed Apr 25 07:11:56 2001//
+/gfdl_2.html/1.2/Wed Apr 25 07:11:56 2001//
+/gfdl_3.html/1.2/Wed Apr 25 07:11:57 2001//
+/gfdl_4.html/1.2/Wed Apr 25 07:11:57 2001//
+/gfdl_5.html/1.2/Wed Apr 25 07:11:57 2001//
+/gfdl_6.html/1.2/Wed Apr 25 07:11:57 2001//
+/gfdl_7.html/1.2/Wed Apr 25 07:11:58 2001//
+/gfdl_8.html/1.2/Wed Apr 25 07:11:58 2001//
+/gfdl_9.html/1.2/Wed Apr 25 07:11:58 2001//
+/gfdl_howto.html/1.2/Wed Apr 25 07:11:58 2001//
+/glossary.html/1.2/Wed Apr 25 07:11:59 2001//
+/granttables.html/1.2/Wed Apr 25 07:11:59 2001//
+/how.html/1.2/Wed Apr 25 07:11:59 2001//
+/index.html/1.2/Wed Apr 25 07:12:00 2001//
+/init4me.html/1.2/Wed Apr 25 07:12:00 2001//
+/installation.html/1.2/Wed Apr 25 07:12:00 2001//
+/integration.html/1.2/Wed Apr 25 07:12:01 2001//
+/newversions.html/1.2/Wed Apr 25 07:12:01 2001//
+/patches.html/1.2/Wed Apr 25 07:12:01 2001//
+/postinstall-check.html/1.2/Wed Apr 25 07:12:01 2001//
+/programadmin.html/1.2/Wed Apr 25 07:12:02 2001//
+/quicksearch.html/1.2/Wed Apr 25 07:12:02 2001//
+/readme.unix.html/1.2/Wed Apr 25 07:12:02 2001//
+/readme.windows.html/1.2/Wed Apr 25 07:12:02 2001//
+/rhbugzilla.html/1.1/Wed Apr 25 07:12:03 2001//
+/scm.html/1.2/Wed Apr 25 07:12:03 2001//
+/searching.html/1.2/Wed Apr 25 07:12:04 2001//
+/security.html/1.3/Wed Apr 25 07:38:19 2001//
+/setperl.html/1.2/Wed Apr 25 07:12:04 2001//
+/spamlite.html/1.2/Wed Apr 25 07:12:04 2001//
+/tinderbox.html/1.2/Wed Apr 25 07:12:05 2001//
+/trackingbugs.html/1.2/Wed Apr 25 07:12:05 2001//
+/translations.html/1.2/Wed Apr 25 07:12:05 2001//
+/useradmin.html/1.2/Wed Apr 25 07:12:06 2001//
+/using.html/1.2/Wed Apr 25 07:12:06 2001//
+/usingbz-conc.html/1.2/Wed Apr 25 07:12:06 2001//
+/variants.html/1.1/Wed Apr 25 07:12:06 2001//
+/whatis.html/1.2/Wed Apr 25 07:12:07 2001//
+/why.html/1.2/Wed Apr 25 07:12:07 2001//
+D
diff --git a/docs/html/CVS/Repository b/docs/html/CVS/Repository
new file mode 100644
index 000000000..937103c2e
--- /dev/null
+++ b/docs/html/CVS/Repository
@@ -0,0 +1 @@
+mozilla/webtools/bugzilla/docs/html
diff --git a/docs/html/CVS/Root b/docs/html/CVS/Root
new file mode 100644
index 000000000..cdb6f4a07
--- /dev/null
+++ b/docs/html/CVS/Root
@@ -0,0 +1 @@
+:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot
diff --git a/docs/html/about.html b/docs/html/about.html
new file mode 100644
index 000000000..7133e3cca
--- /dev/null
+++ b/docs/html/about.html
@@ -0,0 +1,183 @@
+<HTML
+><HEAD
+><TITLE
+>About This Guide</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="PREVIOUS"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="NEXT"
+TITLE="Purpose and Scope of this Guide"
+HREF="aboutthisguide.html"></HEAD
+><BODY
+CLASS="CHAPTER"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="index.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+></TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="aboutthisguide.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="CHAPTER"
+><H1
+><A
+NAME="ABOUT"
+>Chapter 1. About This Guide</A
+></H1
+><DIV
+CLASS="TOC"
+><DL
+><DT
+><B
+>Table of Contents</B
+></DT
+><DT
+>1.1. <A
+HREF="aboutthisguide.html"
+>Purpose and Scope of this Guide</A
+></DT
+><DT
+>1.2. <A
+HREF="copyright.html"
+>Copyright Information</A
+></DT
+><DT
+>1.3. <A
+HREF="disclaimer.html"
+>Disclaimer</A
+></DT
+><DT
+>1.4. <A
+HREF="newversions.html"
+>New Versions</A
+></DT
+><DT
+>1.5. <A
+HREF="credits.html"
+>Credits</A
+></DT
+><DT
+>1.6. <A
+HREF="contributors.html"
+>Contributors</A
+></DT
+><DT
+>1.7. <A
+HREF="feedback.html"
+>Feedback</A
+></DT
+><DT
+>1.8. <A
+HREF="translations.html"
+>Translations</A
+></DT
+><DT
+>1.9. <A
+HREF="conventions.html"
+>Document Conventions</A
+></DT
+></DL
+></DIV
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="index.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="aboutthisguide.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>The Bugzilla Guide</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+>&nbsp;</TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Purpose and Scope of this Guide</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/aboutthisguide.html b/docs/html/aboutthisguide.html
new file mode 100644
index 000000000..7a8de6691
--- /dev/null
+++ b/docs/html/aboutthisguide.html
@@ -0,0 +1,192 @@
+<HTML
+><HEAD
+><TITLE
+>Purpose and Scope of this Guide</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="About This Guide"
+HREF="about.html"><LINK
+REL="PREVIOUS"
+TITLE="About This Guide"
+HREF="about.html"><LINK
+REL="NEXT"
+TITLE="Copyright Information"
+HREF="copyright.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="about.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Chapter 1. About This Guide</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="copyright.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="ABOUTTHISGUIDE"
+>1.1. Purpose and Scope of this Guide</A
+></H1
+><P
+>      This document was started on September 17, 2000
+      by Matthew P. Barnson after a great deal of procrastination updating the Bugzilla FAQ,
+      which I left untouched for nearly half a year.
+      After numerous complete rewrites and reformatting, it is the document you see today.
+    </P
+><P
+>      Despite the lack of updates, Bugzilla is simply the best piece of bug-tracking software
+      the world has ever seen.  This document is intended to be the comprehensive guide to 
+      the installation, administration, maintenance, and use of the Bugzilla bug-tracking system.
+    </P
+><P
+>      This release of the Bugzilla Guide is the <EM
+>2.11</EM
+> release.
+      It is so named that it may match the current version of Bugzilla.
+      The numbering tradition stems from that used for many free software projects,
+      in which <EM
+>even-numbered</EM
+> point releases (1.2, 1.14, etc.)
+      are considered "stable releases", intended for public consumption; on the other 
+      hand, <EM
+>odd-numbered</EM
+> point releases (1.3, 2.09, etc.)
+      are considered unstable <EM
+>development</EM
+> releases intended
+      for advanced users, systems administrators, developers, and those who enjoy
+      a lot of pain. 
+    </P
+><P
+>      Newer revisions of the Bugzilla Guide will follow the numbering conventions of
+      the main-tree Bugzilla releases, available at
+      <A
+HREF="http://www.mozilla.org/bugs/source.html"
+TARGET="_top"
+>Mozilla.org</A
+>, with
+      the exception that intermediate releases will have a minor revision number
+      following a period.  For instance, if the current version of Bugzilla is 4.2,
+      the current "stable" version of the Bugzilla guide, in, say, it's fifth revision,
+      would be numbered "4.2.5".  Got it?  Good.
+    </P
+><P
+>      I wrote this in response to the enormous demand for decent Bugzilla documentation.
+      I have incorporated instructions from the Bugzilla README, Frequently Asked Questions,
+      Database Schema Document, and various mailing lists to create it.
+      Chances are, there are glaring errors in this documentation; please contact
+      <TT
+CLASS="EMAIL"
+>&#60;<A
+HREF="mailto:barnboy@trilobyte.net"
+>barnboy@trilobyte.net</A
+>&#62;</TT
+> to correct them.
+    </P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="about.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="copyright.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>About This Guide</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="about.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Copyright Information</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/administration.html b/docs/html/administration.html
new file mode 100644
index 000000000..feef30d12
--- /dev/null
+++ b/docs/html/administration.html
@@ -0,0 +1,238 @@
+<HTML
+><HEAD
+><TITLE
+>Administering Bugzilla</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="PREVIOUS"
+TITLE="Win32 (Win98+/NT/2K) Installation"
+HREF="readme.windows.html"><LINK
+REL="NEXT"
+TITLE="Post-Installation Checklist"
+HREF="postinstall-check.html"></HEAD
+><BODY
+CLASS="CHAPTER"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="readme.windows.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+></TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="postinstall-check.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="CHAPTER"
+><H1
+><A
+NAME="ADMINISTRATION"
+>Chapter 3. Administering Bugzilla</A
+></H1
+><DIV
+CLASS="TOC"
+><DL
+><DT
+><B
+>Table of Contents</B
+></DT
+><DT
+>3.1. <A
+HREF="postinstall-check.html"
+>Post-Installation Checklist</A
+></DT
+><DT
+>3.2. <A
+HREF="useradmin.html"
+>User Administration</A
+></DT
+><DD
+><DL
+><DT
+>3.2.1. <A
+HREF="useradmin.html#DEFAULTUSER"
+>Creating the Default User</A
+></DT
+><DT
+>3.2.2. <A
+HREF="useradmin.html#MANAGEUSERS"
+>Managing Other Users</A
+></DT
+><DD
+><DL
+><DT
+>3.2.2.1. <A
+HREF="useradmin.html#LOGIN"
+>Logging In</A
+></DT
+><DT
+>3.2.2.2. <A
+HREF="useradmin.html#CREATENEWUSERS"
+>Creating new users</A
+></DT
+><DT
+>3.2.2.3. <A
+HREF="useradmin.html#DISABLEUSERS"
+>Disabling Users</A
+></DT
+><DT
+>3.2.2.4. <A
+HREF="useradmin.html#MODIFYUSERS"
+>Modifying Users</A
+></DT
+></DL
+></DD
+></DL
+></DD
+><DT
+>3.3. <A
+HREF="programadmin.html"
+>Product, Component, Milestone, and Version Administration</A
+></DT
+><DD
+><DL
+><DT
+>3.3.1. <A
+HREF="programadmin.html#PRODUCTS"
+>Products</A
+></DT
+><DT
+>3.3.2. <A
+HREF="programadmin.html#COMPONENTS"
+>Components</A
+></DT
+><DT
+>3.3.3. <A
+HREF="programadmin.html#VERSIONS"
+>Versions</A
+></DT
+><DT
+>3.3.4. <A
+HREF="programadmin.html#MILESTONES"
+>Milestones</A
+></DT
+><DT
+>3.3.5. <A
+HREF="programadmin.html#VOTING"
+>Voting</A
+></DT
+><DT
+>3.3.6. <A
+HREF="programadmin.html#GROUPS"
+>Groups and Group Security</A
+></DT
+></DL
+></DD
+><DT
+>3.4. <A
+HREF="security.html"
+>Bugzilla Security</A
+></DT
+></DL
+></DIV
+><FONT
+COLOR="RED"
+>Or, I just got this cool thing installed.  Now what the heck do I do with it?</FONT
+><P
+>So you followed the README isntructions to the letter, and
+just logged into bugzilla with your super-duper god account and you are sitting at the query
+screen. Yet, you have nothing to query. Your first act of business needs to be to setup the
+operating parameters for bugzilla.</P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="readme.windows.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="postinstall-check.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Win32 (Win98+/NT/2K) Installation</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+>&nbsp;</TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Post-Installation Checklist</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/bonsai.html b/docs/html/bonsai.html
new file mode 100644
index 000000000..ec2fb924a
--- /dev/null
+++ b/docs/html/bonsai.html
@@ -0,0 +1,138 @@
+<HTML
+><HEAD
+><TITLE
+>Bonsai</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="Integrating Bugzilla with Third-Party Tools"
+HREF="integration.html"><LINK
+REL="PREVIOUS"
+TITLE="Integrating Bugzilla with Third-Party Tools"
+HREF="integration.html"><LINK
+REL="NEXT"
+TITLE="CVS"
+HREF="cvs.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="integration.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Chapter 5. Integrating Bugzilla with Third-Party Tools</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="cvs.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="BONSAI"
+>5.1. Bonsai</A
+></H1
+><P
+>We need Bonsai integration information.</P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="integration.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="cvs.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Integrating Bugzilla with Third-Party Tools</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="integration.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>CVS</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/bugprobs.html b/docs/html/bugprobs.html
new file mode 100644
index 000000000..24805ea35
--- /dev/null
+++ b/docs/html/bugprobs.html
@@ -0,0 +1,211 @@
+<HTML
+><HEAD
+><TITLE
+>Bug Issues</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="The Future of Bugzilla"
+HREF="future.html"><LINK
+REL="PREVIOUS"
+TITLE="Description Flags and Tracking Bugs"
+HREF="trackingbugs.html"><LINK
+REL="NEXT"
+TITLE="Database Integrity"
+HREF="dbaseintegrity.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="trackingbugs.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Chapter 6. The Future of Bugzilla</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="dbaseintegrity.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="BUGPROBS"
+>6.4. Bug Issues</A
+></H1
+><P
+><P
+CLASS="LITERALLAYOUT"
+>1.&nbsp;Inline&nbsp;Bug&nbsp;Changes<br>
+<br>
+Why&nbsp;do&nbsp;I&nbsp;see&nbsp;so&nbsp;many&nbsp;"moving&nbsp;to&nbsp;M5"&nbsp;and&nbsp;"reassigning&nbsp;to&nbsp;blahblah"<br>
+messages,&nbsp;and&nbsp;in&nbsp;other&nbsp;circumstances&nbsp;none&nbsp;are&nbsp;entered?&nbsp;&nbsp;Why&nbsp;aren't&nbsp;these<br>
+automatically&nbsp;generated?&nbsp;&nbsp;A&nbsp;comment&nbsp;should&nbsp;be&nbsp;only&nbsp;necessary&nbsp;when&nbsp;there<br>
+is&nbsp;something&nbsp;to&nbsp;add,&nbsp;and&nbsp;if&nbsp;I'm&nbsp;not&nbsp;interested&nbsp;in&nbsp;this&nbsp;sort&nbsp;of<br>
+information,&nbsp;I&nbsp;should&nbsp;be&nbsp;able&nbsp;to&nbsp;hide&nbsp;it.<br>
+<br>
+At&nbsp;the&nbsp;moment&nbsp;we're&nbsp;in&nbsp;a&nbsp;hybrid&nbsp;world&nbsp;where&nbsp;we&nbsp;don't&nbsp;get&nbsp;everything,&nbsp;but<br>
+we&nbsp;can't&nbsp;get&nbsp;rid&nbsp;of&nbsp;the&nbsp;bug&nbsp;change&nbsp;"messages"&nbsp;either.&nbsp;&nbsp;Furthermore,<br>
+"View&nbsp;Bug&nbsp;Activity"&nbsp;requires&nbsp;me&nbsp;to&nbsp;manually&nbsp;cross&nbsp;reference&nbsp;events&nbsp;on<br>
+another&nbsp;page,&nbsp;rather&nbsp;than&nbsp;being&nbsp;able&nbsp;to&nbsp;visually&nbsp;see&nbsp;the&nbsp;chronological<br>
+order.&nbsp;&nbsp;Shouldn't&nbsp;I&nbsp;be&nbsp;able&nbsp;to&nbsp;see&nbsp;all&nbsp;the&nbsp;information&nbsp;on&nbsp;one&nbsp;page?<br>
+<br>
+A&nbsp;proposal&nbsp;to&nbsp;allow&nbsp;bugs&nbsp;to&nbsp;be&nbsp;shown&nbsp;either&nbsp;way&nbsp;is&nbsp;at<br>
+"http://bugzilla.mozilla.org/show_bug.cgi?id=11368".<br>
+<br>
+2.&nbsp;&nbsp;Hard&nbsp;Wrapping&nbsp;Comments<br>
+<br>
+One&nbsp;thing&nbsp;that&nbsp;annoys&nbsp;me&nbsp;is&nbsp;the&nbsp;fact&nbsp;that&nbsp;comments&nbsp;are&nbsp;"hard&nbsp;wrapped"&nbsp;to<br>
+a&nbsp;certain&nbsp;column&nbsp;width.&nbsp;&nbsp;This&nbsp;is&nbsp;a&nbsp;mistake&nbsp;Internet&nbsp;Mail&nbsp;and&nbsp;News&nbsp;has<br>
+made,&nbsp;unlike&nbsp;every&nbsp;word&nbsp;processor&nbsp;in&nbsp;existence,&nbsp;and&nbsp;as&nbsp;a&nbsp;consequence,<br>
+Usenet&nbsp;suffers&nbsp;to&nbsp;this&nbsp;day&nbsp;from&nbsp;bad&nbsp;software.&nbsp;&nbsp;Why&nbsp;has&nbsp;Bugzilla&nbsp;repeated<br>
+the&nbsp;problem?<br>
+<br>
+Hard&nbsp;wrapping&nbsp;to&nbsp;a&nbsp;certain&nbsp;column&nbsp;width&nbsp;is&nbsp;open&nbsp;to&nbsp;abuse&nbsp;(see&nbsp;old<br>
+Mozilla&nbsp;browsers&nbsp;that&nbsp;didn't&nbsp;wrap&nbsp;properly,&nbsp;resulting&nbsp;in&nbsp;many&nbsp;ugly&nbsp;bug<br>
+reports&nbsp;we&nbsp;have&nbsp;to&nbsp;read&nbsp;to&nbsp;this&nbsp;day),&nbsp;and&nbsp;furthermore&nbsp;doesn't&nbsp;expand&nbsp;to<br>
+fill&nbsp;greater&nbsp;screen&nbsp;sizes.&nbsp;&nbsp;I'm&nbsp;also&nbsp;under&nbsp;the&nbsp;impression&nbsp;the&nbsp;current<br>
+hard&nbsp;wrap&nbsp;uses&nbsp;a&nbsp;non-standard&nbsp;HTML&nbsp;facility.&nbsp;&nbsp;See<br>
+"http://bugzilla.mozilla.org/show_bug.cgi?id=11901".<br>
+<br>
+3.&nbsp;REMIND&nbsp;and&nbsp;LATER&nbsp;Are&nbsp;Evil<br>
+<br>
+I&nbsp;really&nbsp;hate&nbsp;REMIND&nbsp;and&nbsp;LATER.&nbsp;&nbsp;Not&nbsp;because&nbsp;they&nbsp;mean&nbsp;something<br>
+won't&nbsp;be&nbsp;implemented,&nbsp;but&nbsp;because&nbsp;they&nbsp;aren't&nbsp;the&nbsp;best&nbsp;solutions.<br>
+<br>
+Why&nbsp;are&nbsp;they&nbsp;bad?&nbsp;&nbsp;Well,&nbsp;basically&nbsp;because&nbsp;they&nbsp;are&nbsp;not&nbsp;resolved,&nbsp;yet<br>
+they&nbsp;are&nbsp;marked&nbsp;as&nbsp;such.&nbsp;&nbsp;Hence&nbsp;queries&nbsp;have&nbsp;to&nbsp;be&nbsp;well&nbsp;crafted&nbsp;to<br>
+include&nbsp;them.<br>
+<br>
+LATER,&nbsp;according&nbsp;to&nbsp;Bugzilla,&nbsp;means&nbsp;it&nbsp;won't&nbsp;be&nbsp;done&nbsp;this&nbsp;release.&nbsp;<br>
+There&nbsp;is&nbsp;a&nbsp;better&nbsp;mechanism&nbsp;of&nbsp;doing&nbsp;this,&nbsp;that&nbsp;is&nbsp;assigning&nbsp;to<br>
+nobody@mozilla.org&nbsp;and&nbsp;making&nbsp;the&nbsp;milestone&nbsp;blank.&nbsp;&nbsp;It's&nbsp;more&nbsp;likely&nbsp;to<br>
+appear&nbsp;in&nbsp;a&nbsp;casual&nbsp;query,&nbsp;and&nbsp;it&nbsp;doesn't&nbsp;resolve&nbsp;the&nbsp;bug.<br>
+<br>
+REMIND,&nbsp;according&nbsp;to&nbsp;Bugzilla,&nbsp;means&nbsp;it&nbsp;might&nbsp;still&nbsp;be&nbsp;implemented&nbsp;this<br>
+release.&nbsp;&nbsp;Well,&nbsp;why&nbsp;not&nbsp;just&nbsp;move&nbsp;it&nbsp;to&nbsp;a&nbsp;later&nbsp;milestone&nbsp;then?&nbsp;&nbsp;You're<br>
+a&nbsp;lot&nbsp;less&nbsp;likely&nbsp;to&nbsp;forget&nbsp;it.&nbsp;&nbsp;If&nbsp;it's&nbsp;really&nbsp;needed,&nbsp;a&nbsp;keyword&nbsp;would<br>
+be&nbsp;better.<br>
+<br>
+Some&nbsp;people&nbsp;can't&nbsp;use&nbsp;blank&nbsp;milestones&nbsp;to&nbsp;mean&nbsp;an&nbsp;untargetted&nbsp;milestone,<br>
+since&nbsp;they&nbsp;use&nbsp;this&nbsp;to&nbsp;assess&nbsp;new&nbsp;bugs&nbsp;that&nbsp;have&nbsp;no&nbsp;target.&nbsp;&nbsp;Hence,&nbsp;it<br>
+would&nbsp;be&nbsp;nice&nbsp;to&nbsp;distinguish&nbsp;between&nbsp;bugs&nbsp;that&nbsp;have&nbsp;not&nbsp;yet&nbsp;been<br>
+considered,&nbsp;and&nbsp;those&nbsp;that&nbsp;really&nbsp;are&nbsp;not&nbsp;assigned&nbsp;to&nbsp;any&nbsp;milestone&nbsp;in<br>
+the&nbsp;future&nbsp;(assumedly&nbsp;beyond).<br>
+<br>
+All&nbsp;this&nbsp;is&nbsp;covered&nbsp;at<br>
+"http://bugzilla.mozilla.org/show_bug.cgi?id=13534".<br>
+<br>
+4.&nbsp;Create&nbsp;An&nbsp;Enhancement&nbsp;Field<br>
+<br>
+Currently&nbsp;enhancement&nbsp;is&nbsp;an&nbsp;option&nbsp;in&nbsp;severity.&nbsp;&nbsp;This&nbsp;means&nbsp;that<br>
+important&nbsp;enhancements&nbsp;(like&nbsp;for&nbsp;example,&nbsp;POP3&nbsp;support)&nbsp;are&nbsp;not&nbsp;properly<br>
+distinguished&nbsp;as&nbsp;such,&nbsp;because&nbsp;they&nbsp;need&nbsp;a&nbsp;proper&nbsp;severity.&nbsp;&nbsp;This<br>
+dilutes&nbsp;the&nbsp;meaning&nbsp;of&nbsp;enhancement.<br>
+<br>
+If&nbsp;enhancement&nbsp;was&nbsp;separated,&nbsp;we&nbsp;could&nbsp;properly&nbsp;see&nbsp;what&nbsp;was&nbsp;an<br>
+enhancement.&nbsp;&nbsp;See&nbsp;"http://bugzilla.mozilla.org/show_bug.cgi?id=9412".&nbsp;&nbsp;I<br>
+see&nbsp;keywords&nbsp;like&nbsp;[RFE]&nbsp;and&nbsp;[FEATURE]&nbsp;that&nbsp;seem&nbsp;to&nbsp;be&nbsp;compensating&nbsp;for<br>
+this&nbsp;problem.</P
+></P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="trackingbugs.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="dbaseintegrity.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Description Flags and Tracking Bugs</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="future.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Database Integrity</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/bz30.html b/docs/html/bz30.html
new file mode 100644
index 000000000..b133205be
--- /dev/null
+++ b/docs/html/bz30.html
@@ -0,0 +1,138 @@
+<HTML
+><HEAD
+><TITLE
+>Bugzilla 3.0</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="The Future of Bugzilla"
+HREF="future.html"><LINK
+REL="PREVIOUS"
+TITLE="Database Integrity"
+HREF="dbaseintegrity.html"><LINK
+REL="NEXT"
+TITLE="The Bugzilla FAQ"
+HREF="faq.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="dbaseintegrity.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Chapter 6. The Future of Bugzilla</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="faq.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="BZ30"
+>6.6. Bugzilla 3.0</A
+></H1
+><P
+>One day, Bugzilla 3.0 will have lots of cool stuff.</P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="dbaseintegrity.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="faq.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Database Integrity</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="future.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>The Bugzilla FAQ</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/cleanupwork.html b/docs/html/cleanupwork.html
new file mode 100644
index 000000000..d81c9ff58
--- /dev/null
+++ b/docs/html/cleanupwork.html
@@ -0,0 +1,155 @@
+<HTML
+><HEAD
+><TITLE
+>Cleaning up after mucking with Bugzilla</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="The Bugzilla Database"
+HREF="database.html"><LINK
+REL="PREVIOUS"
+TITLE="MySQL Permissions & Grant Tables"
+HREF="granttables.html"><LINK
+REL="NEXT"
+TITLE="Bugzilla Variants"
+HREF="variants.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="granttables.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Appendix C. The Bugzilla Database</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="variants.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="CLEANUPWORK"
+>C.4. Cleaning up after mucking with Bugzilla</A
+></H1
+><P
+CLASS="LITERALLAYOUT"
+>Contributed&nbsp;by&nbsp;Eric&nbsp;Hanson:<br>
+There&nbsp;are&nbsp;several&nbsp;things,&nbsp;and&nbsp;one&nbsp;trick.&nbsp;&nbsp;There&nbsp;is&nbsp;a&nbsp;small&nbsp;tiny&nbsp;piece&nbsp;of<br>
+documentation&nbsp;I&nbsp;saw&nbsp;once&nbsp;that&nbsp;said&nbsp;something&nbsp;very&nbsp;important.<br>
+1)&nbsp;&nbsp;After&nbsp;pretty&nbsp;much&nbsp;any&nbsp;manual&nbsp;working&nbsp;of&nbsp;the&nbsp;Mysql&nbsp;db,&nbsp;you&nbsp;must<br>
+delete&nbsp;a&nbsp;file&nbsp;in&nbsp;the&nbsp;bugzilla&nbsp;directory:&nbsp;data/versioncache<br>
+Versioncache&nbsp;basically&nbsp;is&nbsp;a&nbsp;way&nbsp;to&nbsp;speed&nbsp;up&nbsp;bugzilla&nbsp;(from&nbsp;what&nbsp;I<br>
+understand).&nbsp;&nbsp;It&nbsp;stores&nbsp;a&nbsp;lot&nbsp;of&nbsp;commonly&nbsp;used&nbsp;information.&nbsp;&nbsp;However,<br>
+this&nbsp;file&nbsp;is&nbsp;refreshed&nbsp;every&nbsp;so&nbsp;often&nbsp;(I&nbsp;can't&nbsp;remember&nbsp;the&nbsp;time<br>
+interval&nbsp;though).&nbsp;&nbsp;So&nbsp;eventually&nbsp;all&nbsp;changes&nbsp;do&nbsp;propogate&nbsp;out,&nbsp;so&nbsp;you<br>
+may&nbsp;see&nbsp;stuff&nbsp;suddenly&nbsp;working.<br>
+2)&nbsp;&nbsp;Assuming&nbsp;that&nbsp;failed,&nbsp;you&nbsp;will&nbsp;also&nbsp;have&nbsp;to&nbsp;check&nbsp;something&nbsp;with&nbsp;the<br>
+checksetup.pl&nbsp;file.&nbsp;&nbsp;It&nbsp;actually&nbsp;is&nbsp;run&nbsp;twice.&nbsp;&nbsp;The&nbsp;first&nbsp;time&nbsp;it<br>
+creates&nbsp;the&nbsp;file:&nbsp;localconfig.&nbsp;&nbsp;You&nbsp;can&nbsp;modify&nbsp;localconfig,&nbsp;(or&nbsp;not&nbsp;if<br>
+you&nbsp;are&nbsp;doing&nbsp;bug_status&nbsp;stuff)&nbsp;or&nbsp;you&nbsp;should&nbsp;delete&nbsp;localconfig&nbsp;and<br>
+rerun&nbsp;your&nbsp;modified&nbsp;checksetup.pl.&nbsp;&nbsp;Since&nbsp;I&nbsp;don't&nbsp;actually&nbsp;see&nbsp;anything<br>
+in&nbsp;localconfig&nbsp;pertaining&nbsp;to&nbsp;bug_status,&nbsp;this&nbsp;point&nbsp;is&nbsp;mainly&nbsp;a&nbsp;FYI.<br>
+&nbsp;&nbsp;&nbsp;&nbsp;</P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="granttables.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="variants.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>MySQL Permissions &#38; Grant Tables</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="database.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Bugzilla Variants</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/cmdline.html b/docs/html/cmdline.html
new file mode 100644
index 000000000..a7dcdf0da
--- /dev/null
+++ b/docs/html/cmdline.html
@@ -0,0 +1,262 @@
+<HTML
+><HEAD
+><TITLE
+>Command-line Bugzilla Queries</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="Useful Patches and Utilities for Bugzilla"
+HREF="patches.html"><LINK
+REL="PREVIOUS"
+TITLE="The setperl.csh Utility"
+HREF="setperl.html"><LINK
+REL="NEXT"
+TITLE="The Quicksearch Utility"
+HREF="quicksearch.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="setperl.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Appendix D. Useful Patches and Utilities for Bugzilla</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="quicksearch.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="CMDLINE"
+>D.2. Command-line Bugzilla Queries</A
+></H1
+><P
+>      Users can query Bugzilla from the command line using
+      this suite of utilities.
+    </P
+><P
+>      The query.conf file contains the mapping from options to field
+      names and comparison types.  Quoted option names are "grepped" for, so
+      it should be easy to edit this file.  Comments (#) have no effect; you
+      must make sure these lines do not contain any quoted "option"
+    </P
+><P
+>      buglist is a shell script which submits a Bugzilla query and writes the
+      resulting HTML page to stdout.  It supports both short options,
+      (such as "-Afoo" or "-Rbar") and long options (such as
+      "--assignedto=foo" or "--reporter=bar").  If the first character
+      of an option is not "-", it is treated as if it were prefixed
+      with "--default=".
+    </P
+><P
+>      The columlist is taken from the COLUMNLIST environment variable.
+      This is equivalent to the "Change Columns" option when you list
+      bugs in buglist.cgi.  If you have already used Bugzilla, use
+      <B
+CLASS="COMMAND"
+>grep COLUMLIST ~/.netscape/cookies</B
+> to see
+      your current COLUMNLIST setting.
+    </P
+><P
+>      bugs is a simple shell script which calls buglist and extracts
+      the bug numbers from the output.  Adding the prefix
+      "http://bugzilla.mozilla.org/buglist.cgi?bug_id="
+      turns the bug list into a working link if any bugs are found.
+      Counting bugs is easy.  Pipe the results through
+      <B
+CLASS="COMMAND"
+>sed -e 's/,/ /g' | wc | awk '{printf $2 "\n"}'</B
+>
+    </P
+><P
+>      Akkana says she has good results piping buglist output through
+      <B
+CLASS="COMMAND"
+>w3m -T text/html -dump</B
+>
+    </P
+><DIV
+CLASS="PROCEDURE"
+><OL
+TYPE="1"
+><LI
+><P
+>	  Download three files:
+	</P
+><OL
+CLASS="SUBSTEPS"
+TYPE="a"
+><LI
+><P
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>bash$</TT
+>
+		<B
+CLASS="COMMAND"
+>wget -O query.conf 'http://bugzilla.mozilla.org/showattachment.cgi?attach_id=26157'</B
+>
+	      </TT
+>
+	    </P
+></LI
+><LI
+><P
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>bash$</TT
+>
+		<B
+CLASS="COMMAND"
+>wget -O buglist 'http://bugzilla.mozilla.org/showattachment.cgi?attach_id=26944'</B
+>
+	      </TT
+>
+	    </P
+></LI
+><LI
+><P
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>bash#</TT
+>
+		<B
+CLASS="COMMAND"
+>wget -O bugs 'http://bugzilla.mozilla.org/showattachment.cgi?attach_id=26215'</B
+>
+	      </TT
+>
+	    </P
+></LI
+></OL
+></LI
+><LI
+><P
+>	  Make your utilities executable:
+	  <TT
+CLASS="COMPUTEROUTPUT"
+>	    <TT
+CLASS="PROMPT"
+>bash$</TT
+>
+	    <B
+CLASS="COMMAND"
+>chmod u+x buglist bugs</B
+>
+	  </TT
+>
+	</P
+></LI
+></OL
+></DIV
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="setperl.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="quicksearch.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>The setperl.csh Utility</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="patches.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>The Quicksearch Utility</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/contributors.html b/docs/html/contributors.html
new file mode 100644
index 000000000..bcc6b29b2
--- /dev/null
+++ b/docs/html/contributors.html
@@ -0,0 +1,147 @@
+<HTML
+><HEAD
+><TITLE
+>Contributors</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="About This Guide"
+HREF="about.html"><LINK
+REL="PREVIOUS"
+TITLE="Credits"
+HREF="credits.html"><LINK
+REL="NEXT"
+TITLE="Feedback"
+HREF="feedback.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="credits.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Chapter 1. About This Guide</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="feedback.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="CONTRIBUTORS"
+>1.6. Contributors</A
+></H1
+><P
+>      Thanks go to these people for significant contributions
+      to this documentation (in no particular order):
+    </P
+><P
+>      Zach Lipton (significant textual contributions),
+      Andrew Pearson,
+      Spencer Smith,
+      Eric Hanson,
+      Kevin Brannen,
+    </P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="credits.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="feedback.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Credits</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="about.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Feedback</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/conventions.html b/docs/html/conventions.html
new file mode 100644
index 000000000..cd598f8f2
--- /dev/null
+++ b/docs/html/conventions.html
@@ -0,0 +1,419 @@
+<HTML
+><HEAD
+><TITLE
+>Document Conventions</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="About This Guide"
+HREF="about.html"><LINK
+REL="PREVIOUS"
+TITLE="Translations"
+HREF="translations.html"><LINK
+REL="NEXT"
+TITLE="Installing Bugzilla"
+HREF="installation.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="translations.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Chapter 1. About This Guide</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="installation.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="CONVENTIONS"
+>1.9. Document Conventions</A
+></H1
+><P
+>    This document uses the following conventions
+  </P
+><DIV
+CLASS="INFORMALTABLE"
+><A
+NAME="AEN117"
+></A
+><P
+></P
+><TABLE
+BORDER="0"
+CLASS="CALSTABLE"
+><THEAD
+><TR
+><TH
+ALIGN="LEFT"
+VALIGN="TOP"
+>Descriptions</TH
+><TH
+ALIGN="LEFT"
+VALIGN="TOP"
+>Appearance</TH
+></TR
+></THEAD
+><TBODY
+><TR
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+>Warnings</TD
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+><DIV
+CLASS="CAUTION"
+><P
+></P
+><TABLE
+CLASS="CAUTION"
+BORDER="1"
+WIDTH="100%"
+><TR
+><TD
+ALIGN="CENTER"
+><B
+>Caution</B
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+><P
+>Warnings.</P
+></TD
+></TR
+></TABLE
+></DIV
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+>Hint</TD
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+><DIV
+CLASS="TIP"
+><BLOCKQUOTE
+CLASS="TIP"
+><P
+><B
+>Tip: </B
+>Hint.</P
+></BLOCKQUOTE
+></DIV
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+>Notes</TD
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>Note.</P
+></BLOCKQUOTE
+></DIV
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+>Information requiring special attention</TD
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+><DIV
+CLASS="WARNING"
+><P
+></P
+><TABLE
+CLASS="WARNING"
+BORDER="1"
+WIDTH="100%"
+><TR
+><TD
+ALIGN="CENTER"
+><B
+>Warning</B
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+><P
+>Warning.</P
+></TD
+></TR
+></TABLE
+></DIV
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+>File Names</TD
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+><TT
+CLASS="FILENAME"
+>file.extension</TT
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+>Directory Names</TD
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+><TT
+CLASS="FILENAME"
+>directory</TT
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+>Commands to be typed</TD
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+><B
+CLASS="COMMAND"
+>command</B
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+>Applications Names</TD
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+><SPAN
+CLASS="APPLICATION"
+>application</SPAN
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+><I
+CLASS="FOREIGNPHRASE"
+>Prompt</I
+> of users command under bash shell</TD
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+>bash$</TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+><I
+CLASS="FOREIGNPHRASE"
+>Prompt</I
+> of root users command under bash shell</TD
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+>bash#</TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+><I
+CLASS="FOREIGNPHRASE"
+>Prompt</I
+> of user command under tcsh shell</TD
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+>tcsh$</TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+>Environment Variables</TD
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+><TT
+CLASS="ENVAR"
+>VARIABLE</TT
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+>Emphasized word</TD
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+><EM
+>word</EM
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+>Code Example</TD
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+><TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%"
+><TR
+><TD
+><PRE
+CLASS="PROGRAMLISTING"
+><TT
+CLASS="SGMLTAG"
+>&#60;para&#62;</TT
+>Beginning and end of paragraph<TT
+CLASS="SGMLTAG"
+>&#60;/para&#62;</TT
+></PRE
+></TD
+></TR
+></TABLE
+></TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+></DIV
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="translations.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="installation.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Translations</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="about.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Installing Bugzilla</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/copyright.html b/docs/html/copyright.html
new file mode 100644
index 000000000..dfae5da01
--- /dev/null
+++ b/docs/html/copyright.html
@@ -0,0 +1,190 @@
+<HTML
+><HEAD
+><TITLE
+>Copyright Information</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="About This Guide"
+HREF="about.html"><LINK
+REL="PREVIOUS"
+TITLE="Purpose and Scope of this Guide"
+HREF="aboutthisguide.html"><LINK
+REL="NEXT"
+TITLE="Disclaimer"
+HREF="disclaimer.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="aboutthisguide.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Chapter 1. About This Guide</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="disclaimer.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="COPYRIGHT"
+>1.2. Copyright Information</A
+></H1
+><A
+NAME="AEN57"
+></A
+><TABLE
+BORDER="0"
+WIDTH="100%"
+CELLSPACING="0"
+CELLPADDING="0"
+CLASS="BLOCKQUOTE"
+><TR
+><TD
+WIDTH="10%"
+VALIGN="TOP"
+>&nbsp;</TD
+><TD
+WIDTH="80%"
+VALIGN="TOP"
+><P
+>	Permission is granted to copy, distribute and/or modify this document under thei
+	terms of the GNU Free Documentation License, Version 1.1 or any later version published 
+	by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and 
+	with no Back-Cover Texts.  A copy of the license is included in the section entitled 
+	"GNU Free Documentation LIcense".
+      </P
+></TD
+><TD
+WIDTH="10%"
+VALIGN="TOP"
+>&nbsp;</TD
+></TR
+><TR
+><TD
+COLSPAN="2"
+ALIGN="RIGHT"
+VALIGN="TOP"
+>--<SPAN
+CLASS="ATTRIBUTION"
+>Copyright (c) 2000-2001 Matthew P. Barnson</SPAN
+></TD
+><TD
+WIDTH="10%"
+>&nbsp;</TD
+></TR
+></TABLE
+><P
+>      If you have any questions regarding this document, its' copyright, or publishing this
+      document in non-electronic form, please contact <TT
+CLASS="EMAIL"
+>&#60;<A
+HREF="mailto:barnboy@trilobyte.net"
+>barnboy@trilobyte.net</A
+>&#62;</TT
+>
+    </P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="aboutthisguide.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="disclaimer.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Purpose and Scope of this Guide</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="about.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Disclaimer</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/credits.html b/docs/html/credits.html
new file mode 100644
index 000000000..41cd51cfc
--- /dev/null
+++ b/docs/html/credits.html
@@ -0,0 +1,187 @@
+<HTML
+><HEAD
+><TITLE
+>Credits</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="About This Guide"
+HREF="about.html"><LINK
+REL="PREVIOUS"
+TITLE="New Versions"
+HREF="newversions.html"><LINK
+REL="NEXT"
+TITLE="Contributors"
+HREF="contributors.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="newversions.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Chapter 1. About This Guide</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="contributors.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="CREDITS"
+>1.5. Credits</A
+></H1
+><P
+>      The people listed below have made enormous contributions to the creation
+      of this Guide, through their dedicated hacking efforts,
+      numerous e-mail and IRC support sessions,
+      and overall excellent contribution to the Bugzilla community:
+    </P
+><P
+>      <A
+HREF="mailto://terry@mozilla.org"
+TARGET="_top"
+>Terry Weissman</A
+>
+      for initially converting Bugzilla from BugSplat!
+      and writing the README upon which this documentation is largely based.
+    </P
+><P
+>      <A
+HREF="mailto://tara@tequilarista.org"
+TARGET="_top"
+>Tara Hernandez</A
+> 
+      for keeping Bugzilla development going strong after Terry left Mozilla.org
+    </P
+><P
+>      <A
+HREF="mailto://dkl@redhat.com"
+TARGET="_top"
+>Dave Lawrence</A
+>
+      for providing insight into the key differences between Red Hat's 
+      customized Bugzilla, and being largely responsible for the
+      "Red Hat Bugzilla" appendix
+    </P
+><P
+>      <A
+HREF="mailto://endico@mozilla.org"
+TARGET="_top"
+>Dawn Endico</A
+>
+      for being a hacker extraordinaire and putting up with my incessant
+      questions and arguments on irc.mozilla.org in #mozwebtools
+    </P
+><P
+>      Last but not least, all the members of the
+      <A
+HREF="news://news.mozilla.org/netscape/public/mozilla/webtools"
+TARGET="_top"
+>	netscape.public.mozilla.webtools</A
+> newsgroup.  Without your
+      discussions, insight, suggestions, and patches, this could never have happened.
+    </P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="newversions.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="contributors.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>New Versions</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="about.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Contributors</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/cvs.html b/docs/html/cvs.html
new file mode 100644
index 000000000..fc4a7cacf
--- /dev/null
+++ b/docs/html/cvs.html
@@ -0,0 +1,138 @@
+<HTML
+><HEAD
+><TITLE
+>CVS</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="Integrating Bugzilla with Third-Party Tools"
+HREF="integration.html"><LINK
+REL="PREVIOUS"
+TITLE="Bonsai"
+HREF="bonsai.html"><LINK
+REL="NEXT"
+TITLE="Perforce SCM"
+HREF="scm.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="bonsai.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Chapter 5. Integrating Bugzilla with Third-Party Tools</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="scm.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="CVS"
+>5.2. CVS</A
+></H1
+><P
+>We need CVS integration information</P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="bonsai.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="scm.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Bonsai</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="integration.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Perforce SCM</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/database.html b/docs/html/database.html
new file mode 100644
index 000000000..008c3ec65
--- /dev/null
+++ b/docs/html/database.html
@@ -0,0 +1,168 @@
+<HTML
+><HEAD
+><TITLE
+>The Bugzilla Database</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="PREVIOUS"
+TITLE="Software Download Links"
+HREF="downloadlinks.html"><LINK
+REL="NEXT"
+TITLE="Database Schema Chart"
+HREF="dbschema.html"></HEAD
+><BODY
+CLASS="APPENDIX"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="downloadlinks.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+></TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="dbschema.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="APPENDIX"
+><H1
+><A
+NAME="DATABASE"
+>Appendix C. The Bugzilla Database</A
+></H1
+><DIV
+CLASS="TOC"
+><DL
+><DT
+><B
+>Table of Contents</B
+></DT
+><DT
+>C.1. <A
+HREF="dbschema.html"
+>Database Schema Chart</A
+></DT
+><DT
+>C.2. <A
+HREF="dbdoc.html"
+>MySQL Bugzilla Database Introduction</A
+></DT
+><DT
+>C.3. <A
+HREF="granttables.html"
+>MySQL Permissions &#38; Grant Tables</A
+></DT
+><DT
+>C.4. <A
+HREF="cleanupwork.html"
+>Cleaning up after mucking with Bugzilla</A
+></DT
+></DL
+></DIV
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>This document really needs to be updated with more fleshed out information about primary keys, interrelationships, and maybe some nifty tables to document dependencies.  Any takers?</P
+></BLOCKQUOTE
+></DIV
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="downloadlinks.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="dbschema.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Software Download Links</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+>&nbsp;</TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Database Schema Chart</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/dbaseintegrity.html b/docs/html/dbaseintegrity.html
new file mode 100644
index 000000000..4ddcd0bed
--- /dev/null
+++ b/docs/html/dbaseintegrity.html
@@ -0,0 +1,179 @@
+<HTML
+><HEAD
+><TITLE
+>Database Integrity</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="The Future of Bugzilla"
+HREF="future.html"><LINK
+REL="PREVIOUS"
+TITLE="Bug Issues"
+HREF="bugprobs.html"><LINK
+REL="NEXT"
+TITLE="Bugzilla 3.0"
+HREF="bz30.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="bugprobs.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Chapter 6. The Future of Bugzilla</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="bz30.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="DBASEINTEGRITY"
+>6.5. Database Integrity</A
+></H1
+><P
+><P
+CLASS="LITERALLAYOUT"
+>Bugzilla&nbsp;could&nbsp;be&nbsp;more&nbsp;proactive&nbsp;in&nbsp;detecting&nbsp;suboptimal&nbsp;situations&nbsp;and<br>
+prevent&nbsp;them&nbsp;or&nbsp;whine&nbsp;about&nbsp;them.<br>
+<br>
+1.&nbsp;Bugzilla&nbsp;Crime&nbsp;#1:&nbsp;Marking&nbsp;A&nbsp;Bug&nbsp;Fixed&nbsp;With&nbsp;Unresolved&nbsp;Dependencies<br>
+<br>
+It&nbsp;can't&nbsp;be&nbsp;marked&nbsp;fixed&nbsp;with&nbsp;unresolved&nbsp;dependencies.&nbsp;&nbsp;Either&nbsp;mark&nbsp;it<br>
+INVALID&nbsp;(tracking&nbsp;bugs),&nbsp;fix&nbsp;the&nbsp;dependencies&nbsp;at&nbsp;the&nbsp;same&nbsp;time,&nbsp;or<br>
+resolve&nbsp;the&nbsp;blockers.<br>
+<br>
+See&nbsp;"http://bugzilla.mozilla.org/show_bug.cgi?id=24496".<br>
+<br>
+2.&nbsp;Keyword&nbsp;Restrictions<br>
+<br>
+Some&nbsp;keywords&nbsp;should&nbsp;only&nbsp;apply&nbsp;in&nbsp;certain&nbsp;circumstances,&nbsp;eg&nbsp;beta1&nbsp;=&#62;<br>
+Milestone&nbsp;&#60;<br>
+M14,&nbsp;css1&nbsp;=&#62;&nbsp;Component&nbsp;=&nbsp;Style&nbsp;System&nbsp;are&nbsp;possibilities.&nbsp;&nbsp;See<br>
+"http://bugzilla.mozilla.org/show_bug.cgi?id=26940".<br>
+<br>
+3.&nbsp;Whine&nbsp;About&nbsp;Old&nbsp;Votes<br>
+<br>
+Old&nbsp;votes&nbsp;can&nbsp;just&nbsp;sit&nbsp;on&nbsp;resolved&nbsp;bugs.&nbsp;&nbsp;This&nbsp;is&nbsp;problematic&nbsp;with<br>
+duplicates&nbsp;especially.&nbsp;&nbsp;Automatic&nbsp;transferral/removal&nbsp;is&nbsp;not<br>
+appropriate&nbsp;since&nbsp;bugs&nbsp;can&nbsp;be&nbsp;reopened,&nbsp;but&nbsp;a&nbsp;whining&nbsp;solution&nbsp;might<br>
+work.&nbsp;&nbsp;See&nbsp;"http://bugzilla.mozilla.org/show_bug.cgi?id=27553".<br>
+<br>
+4.&nbsp;Whine&nbsp;And&nbsp;Warn&nbsp;About&nbsp;Milestone&nbsp;Mismatches<br>
+<br>
+Here's&nbsp;a&nbsp;fun&nbsp;one.&nbsp;&nbsp;Bug&nbsp;X&nbsp;(M17)&nbsp;depends&nbsp;on&nbsp;Bug&nbsp;Y&nbsp;(M15).&nbsp;&nbsp;Bug&nbsp;Y&nbsp;gets&nbsp;moved<br>
+out&nbsp;to&nbsp;M19.&nbsp;&nbsp;The&nbsp;notification&nbsp;to&nbsp;the&nbsp;assignee&nbsp;of&nbsp;Bug&nbsp;X&nbsp;gets&nbsp;ignored&nbsp;(of<br>
+course)&nbsp;and&nbsp;Bug&nbsp;X&nbsp;is&nbsp;now&nbsp;due&nbsp;to&nbsp;be&nbsp;fixed&nbsp;before&nbsp;one&nbsp;of&nbsp;its&nbsp;blockers.<br>
+<br>
+Warnings&nbsp;about&nbsp;this&nbsp;when&nbsp;it&nbsp;is&nbsp;detected&nbsp;as&nbsp;well&nbsp;as&nbsp;whining&nbsp;about&nbsp;it&nbsp;in<br>
+email&nbsp;would&nbsp;help&nbsp;bring&nbsp;these&nbsp;issues&nbsp;to&nbsp;the&nbsp;attention&nbsp;of&nbsp;people&nbsp;sooner.<br>
+<br>
+Note&nbsp;that&nbsp;this&nbsp;would&nbsp;be&nbsp;less&nbsp;of&nbsp;a&nbsp;problem&nbsp;if&nbsp;we&nbsp;didn't&nbsp;have&nbsp;so&nbsp;many<br>
+tracking&nbsp;bugs&nbsp;since&nbsp;they&nbsp;aren't&nbsp;updated&nbsp;that&nbsp;often&nbsp;and&nbsp;often&nbsp;have&nbsp;this<br>
+problem.<br>
+<br>
+See&nbsp;"http://bugzilla.mozilla.org/show_bug.cgi?id=16743".</P
+></P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="bugprobs.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="bz30.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Bug Issues</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="future.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Bugzilla 3.0</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/dbdoc.html b/docs/html/dbdoc.html
new file mode 100644
index 000000000..d3f4ec024
--- /dev/null
+++ b/docs/html/dbdoc.html
@@ -0,0 +1,509 @@
+<HTML
+><HEAD
+><TITLE
+>MySQL Bugzilla Database Introduction</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="The Bugzilla Database"
+HREF="database.html"><LINK
+REL="PREVIOUS"
+TITLE="Database Schema Chart"
+HREF="dbschema.html"><LINK
+REL="NEXT"
+TITLE="MySQL Permissions & Grant Tables"
+HREF="granttables.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="dbschema.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Appendix C. The Bugzilla Database</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="granttables.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="DBDOC"
+>C.2. MySQL Bugzilla Database Introduction</A
+></H1
+><P
+CLASS="LITERALLAYOUT"
+><br>
+Contributor(s):&nbsp;&nbsp;Matthew&nbsp;P.&nbsp;Barnson&nbsp;(mbarnson@excitehome.net)<br>
+<br>
+Last&nbsp;update:&nbsp;May&nbsp;16,&nbsp;2000<br>
+<br>
+Changes:<br>
+Version&nbsp;1.0:&nbsp;Initial&nbsp;public&nbsp;release&nbsp;(May&nbsp;16,&nbsp;2000)<br>
+<br>
+Maintainer:&nbsp;&nbsp;Matthew&nbsp;P.&nbsp;Barnson&nbsp;(mbarnson@excitehome.net)<br>
+<br>
+<br>
+===<br>
+Table&nbsp;Of&nbsp;Contents<br>
+===<br>
+<br>
+FOREWORD<br>
+INTRODUCTION<br>
+THE&nbsp;BASICS<br>
+THE&nbsp;TABLES<br>
+THE&nbsp;DETAILS<br>
+<br>
+<br>
+<br>
+===<br>
+FOREWORD<br>
+===<br>
+<br>
+&nbsp;&nbsp;This&nbsp;information&nbsp;comes&nbsp;straight&nbsp;from&nbsp;my&nbsp;life.&nbsp;&nbsp;I&nbsp;was&nbsp;forced&nbsp;to&nbsp;learn&nbsp;how<br>
+Bugzilla&nbsp;organizes&nbsp;database&nbsp;because&nbsp;of&nbsp;nitpicky&nbsp;requests&nbsp;from&nbsp;users&nbsp;for&nbsp;tiny<br>
+changes&nbsp;in&nbsp;wording,&nbsp;rather&nbsp;than&nbsp;having&nbsp;people&nbsp;re-educate&nbsp;themselves&nbsp;or<br>
+figure&nbsp;out&nbsp;how&nbsp;to&nbsp;work&nbsp;our&nbsp;procedures&nbsp;around&nbsp;the&nbsp;tool.&nbsp;&nbsp;It&nbsp;sucks,&nbsp;but&nbsp;it&nbsp;can<br>
+and&nbsp;will&nbsp;happen&nbsp;to&nbsp;you,&nbsp;so&nbsp;learn&nbsp;how&nbsp;the&nbsp;schema&nbsp;works&nbsp;and&nbsp;deal&nbsp;with&nbsp;it&nbsp;when&nbsp;it<br>
+comes.<br>
+<br>
+&nbsp;&nbsp;I'm&nbsp;sorry&nbsp;this&nbsp;version&nbsp;is&nbsp;plain&nbsp;text.&nbsp;&nbsp;I&nbsp;can&nbsp;whip&nbsp;this&nbsp;info&nbsp;out&nbsp;a&nbsp;lot&nbsp;faster<br>
+if&nbsp;I'm&nbsp;not&nbsp;concerned&nbsp;about&nbsp;complex&nbsp;formatting.&nbsp;&nbsp;I'll&nbsp;get&nbsp;it&nbsp;into&nbsp;sgml&nbsp;for&nbsp;easy<br>
+portability&nbsp;as&nbsp;time&nbsp;permits.<br>
+<br>
+&nbsp;&nbsp;The&nbsp;Bugzilla&nbsp;Database&nbsp;Schema&nbsp;has&nbsp;a&nbsp;home!&nbsp;&nbsp;In&nbsp;addition&nbsp;to&nbsp;availability&nbsp;via&nbsp;CVS<br>
+and&nbsp;released&nbsp;versions&nbsp;2.12&nbsp;and&nbsp;higher&nbsp;of&nbsp;Bugzilla,&nbsp;you&nbsp;can&nbsp;find&nbsp;the&nbsp;latest&nbsp;&#38;<br>
+greatest&nbsp;version&nbsp;of&nbsp;the&nbsp;Bugzilla&nbsp;Database&nbsp;Schema&nbsp;at<br>
+http://www.trilobyte.net/barnsons/.&nbsp;This&nbsp;is&nbsp;a&nbsp;living&nbsp;document;&nbsp;please&nbsp;be&nbsp;sure<br>
+you&nbsp;are&nbsp;up-to-date&nbsp;with&nbsp;the&nbsp;latest&nbsp;version&nbsp;before&nbsp;mirroring.<br>
+<br>
+&nbsp;&nbsp;The&nbsp;Bugzilla&nbsp;Database&nbsp;Schema&nbsp;is&nbsp;designed&nbsp;to&nbsp;provide&nbsp;vital&nbsp;information<br>
+regarding&nbsp;the&nbsp;structure&nbsp;of&nbsp;the&nbsp;MySQL&nbsp;database.&nbsp;&nbsp;Where&nbsp;appropriate,&nbsp;this<br>
+document&nbsp;will&nbsp;refer&nbsp;to&nbsp;URLs&nbsp;rather&nbsp;than&nbsp;including&nbsp;documents&nbsp;in&nbsp;their&nbsp;entirety<br>
+to&nbsp;ensure&nbsp;completeness&nbsp;even&nbsp;should&nbsp;this&nbsp;paper&nbsp;become&nbsp;out&nbsp;of&nbsp;date.<br>
+<br>
+&nbsp;&nbsp;This&nbsp;document&nbsp;is&nbsp;not&nbsp;maintained&nbsp;by&nbsp;Netscape&nbsp;or&nbsp;Netscape&nbsp;employees,&nbsp;so&nbsp;please<br>
+do&nbsp;not&nbsp;contact&nbsp;them&nbsp;regarding&nbsp;errors&nbsp;or&nbsp;omissions&nbsp;contained&nbsp;herein.&nbsp;Please<br>
+direct&nbsp;all&nbsp;questions,&nbsp;comments,&nbsp;updates,&nbsp;flames,&nbsp;etc.&nbsp;to&nbsp;Matthew&nbsp;P.&nbsp;Barnson<br>
+mbarnson@excitehome.net)&nbsp;(barnboy&nbsp;or&nbsp;barnhome&nbsp;on&nbsp;irc.mozilla.org&nbsp;in<br>
+#mozwebtools).<br>
+<br>
+&nbsp;&nbsp;I'm&nbsp;sure&nbsp;I've&nbsp;made&nbsp;some&nbsp;glaring&nbsp;errors&nbsp;or&nbsp;omissions&nbsp;in&nbsp;this&nbsp;paper&nbsp;--&nbsp;please<br>
+email&nbsp;me&nbsp;corrections&nbsp;or&nbsp;post&nbsp;corrections&nbsp;to&nbsp;the<br>
+netscape.public.mozilla.webtools&nbsp;newsgroup.<br>
+<br>
+<br>
+<br>
+===<br>
+INTRODUCTION<br>
+===<br>
+<br>
+<br>
+<br>
+&nbsp;&nbsp;So,&nbsp;here&nbsp;you&nbsp;are&nbsp;with&nbsp;your&nbsp;brand-new&nbsp;installation&nbsp;of&nbsp;Bugzilla.&nbsp;&nbsp;You've&nbsp;got<br>
+MySQL&nbsp;set&nbsp;up,&nbsp;Apache&nbsp;working&nbsp;right,&nbsp;Perl&nbsp;DBI&nbsp;and&nbsp;DBD&nbsp;talking&nbsp;to&nbsp;the&nbsp;database<br>
+flawlessly.&nbsp;&nbsp;Maybe&nbsp;you've&nbsp;even&nbsp;entered&nbsp;a&nbsp;few&nbsp;test&nbsp;bugs&nbsp;to&nbsp;make&nbsp;sure&nbsp;email's<br>
+working;&nbsp;people&nbsp;seem&nbsp;to&nbsp;be&nbsp;notified&nbsp;of&nbsp;new&nbsp;bugs&nbsp;and&nbsp;changes,&nbsp;and&nbsp;you&nbsp;can<br>
+enter&nbsp;and&nbsp;edit&nbsp;bugs&nbsp;to&nbsp;your&nbsp;heart's&nbsp;content.&nbsp;&nbsp;Perhaps&nbsp;you've&nbsp;gone&nbsp;through&nbsp;the<br>
+trouble&nbsp;of&nbsp;setting&nbsp;up&nbsp;a&nbsp;gateway&nbsp;for&nbsp;people&nbsp;to&nbsp;submit&nbsp;bugs&nbsp;to&nbsp;your&nbsp;database&nbsp;via<br>
+email,&nbsp;have&nbsp;had&nbsp;a&nbsp;few&nbsp;people&nbsp;test&nbsp;it,&nbsp;and&nbsp;received&nbsp;rave&nbsp;reviews&nbsp;from&nbsp;your&nbsp;beta<br>
+testers.<br>
+<br>
+&nbsp;&nbsp;What's&nbsp;the&nbsp;next&nbsp;thing&nbsp;you&nbsp;do?&nbsp;&nbsp;Outline&nbsp;a&nbsp;training&nbsp;strategy&nbsp;for&nbsp;your<br>
+development&nbsp;team,&nbsp;of&nbsp;course,&nbsp;and&nbsp;bring&nbsp;them&nbsp;up&nbsp;to&nbsp;speed&nbsp;on&nbsp;the&nbsp;new&nbsp;tool&nbsp;you've<br>
+labored&nbsp;over&nbsp;for&nbsp;hours.<br>
+<br>
+&nbsp;&nbsp;Your&nbsp;first&nbsp;training&nbsp;session&nbsp;starts&nbsp;off&nbsp;very&nbsp;well!&nbsp;&nbsp;You&nbsp;have&nbsp;a&nbsp;captive<br>
+audience&nbsp;which&nbsp;seems&nbsp;enraptured&nbsp;by&nbsp;the&nbsp;efficiency&nbsp;embodied&nbsp;in&nbsp;this&nbsp;thing&nbsp;called<br>
+"Bugzilla".&nbsp;&nbsp;You&nbsp;are&nbsp;caught&nbsp;up&nbsp;describing&nbsp;the&nbsp;nifty&nbsp;features,&nbsp;how&nbsp;people&nbsp;can<br>
+save&nbsp;favorite&nbsp;queries&nbsp;in&nbsp;the&nbsp;database,&nbsp;set&nbsp;them&nbsp;up&nbsp;as&nbsp;headers&nbsp;and&nbsp;footers&nbsp;on<br>
+their&nbsp;pages,&nbsp;customize&nbsp;their&nbsp;layouts,&nbsp;generate&nbsp;reports,&nbsp;track&nbsp;status&nbsp;with<br>
+greater&nbsp;efficiency&nbsp;than&nbsp;ever&nbsp;before,&nbsp;leap&nbsp;tall&nbsp;buildings&nbsp;with&nbsp;a&nbsp;single&nbsp;bound<br>
+and&nbsp;rescue&nbsp;Jane&nbsp;from&nbsp;the&nbsp;clutches&nbsp;of&nbsp;Certain&nbsp;Death!<br>
+<br>
+&nbsp;&nbsp;But&nbsp;Certain&nbsp;Death&nbsp;speaks&nbsp;up&nbsp;--&nbsp;a&nbsp;tiny&nbsp;voice,&nbsp;from&nbsp;the&nbsp;dark&nbsp;corners&nbsp;of&nbsp;the<br>
+conference&nbsp;room.&nbsp;&nbsp;"I&nbsp;have&nbsp;a&nbsp;concern,"&nbsp;the&nbsp;voice&nbsp;hisses&nbsp;from&nbsp;the&nbsp;darkness,<br>
+"about&nbsp;the&nbsp;use&nbsp;of&nbsp;the&nbsp;word&nbsp;'verified'.<br>
+<br>
+&nbsp;&nbsp;The&nbsp;room,&nbsp;previously&nbsp;filled&nbsp;with&nbsp;happy&nbsp;chatter,&nbsp;lapses&nbsp;into&nbsp;reverential<br>
+silence&nbsp;as&nbsp;Certain&nbsp;Death&nbsp;(better&nbsp;known&nbsp;as&nbsp;the&nbsp;Vice&nbsp;President&nbsp;of&nbsp;Software<br>
+Engineering)&nbsp;continues.&nbsp;&nbsp;"You&nbsp;see,&nbsp;for&nbsp;two&nbsp;years&nbsp;we've&nbsp;used&nbsp;the&nbsp;word&nbsp;'verified'<br>
+to&nbsp;indicate&nbsp;that&nbsp;a&nbsp;developer&nbsp;or&nbsp;quality&nbsp;assurance&nbsp;engineer&nbsp;has&nbsp;confirmed&nbsp;that,<br>
+in&nbsp;fact,&nbsp;a&nbsp;bug&nbsp;is&nbsp;valid.&nbsp;I&nbsp;don't&nbsp;want&nbsp;to&nbsp;lose&nbsp;two&nbsp;years&nbsp;of&nbsp;training&nbsp;to&nbsp;a<br>
+new&nbsp;software&nbsp;product.&nbsp;&nbsp;You&nbsp;need&nbsp;to&nbsp;change&nbsp;the&nbsp;bug&nbsp;status&nbsp;of&nbsp;'verified'&nbsp;to<br>
+'approved'&nbsp;as&nbsp;soon&nbsp;as&nbsp;possible.&nbsp;To&nbsp;avoid&nbsp;confusion,&nbsp;of&nbsp;course."<br>
+<br>
+&nbsp;&nbsp;Oh&nbsp;no!&nbsp;&nbsp;Terror&nbsp;strikes&nbsp;your&nbsp;heart,&nbsp;as&nbsp;you&nbsp;find&nbsp;yourself&nbsp;mumbling&nbsp;"yes,&nbsp;yes,&nbsp;I<br>
+don't&nbsp;think&nbsp;that&nbsp;would&nbsp;be&nbsp;a&nbsp;problem,"&nbsp;You&nbsp;review&nbsp;the&nbsp;changes&nbsp;with&nbsp;Certain<br>
+Death,&nbsp;and&nbsp;continue&nbsp;to&nbsp;jabber&nbsp;on,&nbsp;"no,&nbsp;it's&nbsp;not&nbsp;too&nbsp;big&nbsp;a&nbsp;change.&nbsp;I&nbsp;mean,&nbsp;we<br>
+have&nbsp;the&nbsp;source&nbsp;code,&nbsp;right?&nbsp;You&nbsp;know,&nbsp;'Use&nbsp;the&nbsp;Source,&nbsp;Luke'&nbsp;and&nbsp;all&nbsp;that...<br>
+no&nbsp;problem,"&nbsp;All&nbsp;the&nbsp;while&nbsp;you&nbsp;quiver&nbsp;inside&nbsp;like&nbsp;a&nbsp;beached&nbsp;jellyfish&nbsp;bubbling,<br>
+burbling,&nbsp;and&nbsp;boiling&nbsp;on&nbsp;a&nbsp;hot&nbsp;Jamaican&nbsp;sand&nbsp;dune...<br>
+<br>
+&nbsp;&nbsp;Thus&nbsp;begins&nbsp;your&nbsp;adventure&nbsp;into&nbsp;the&nbsp;heart&nbsp;of&nbsp;Bugzilla.&nbsp;&nbsp;You've&nbsp;been&nbsp;forced<br>
+to&nbsp;learn&nbsp;about&nbsp;non-portable&nbsp;enum()&nbsp;fields,&nbsp;varchar&nbsp;columns,&nbsp;and&nbsp;tinyint<br>
+definitions.&nbsp;The&nbsp;Adventure&nbsp;Awaits&nbsp;You!<br>
+<br>
+<br>
+<br>
+===<br>
+The&nbsp;Basics<br>
+===<br>
+<br>
+&nbsp;&nbsp;If&nbsp;you&nbsp;were&nbsp;like&nbsp;me,&nbsp;at&nbsp;this&nbsp;point&nbsp;you're&nbsp;totally&nbsp;clueless&nbsp;about&nbsp;the<br>
+internals&nbsp;of&nbsp;MySQL,&nbsp;and&nbsp;if&nbsp;it&nbsp;weren't&nbsp;for&nbsp;this&nbsp;executive&nbsp;order&nbsp;from&nbsp;the&nbsp;Vice<br>
+President&nbsp;you&nbsp;couldn't&nbsp;care&nbsp;less&nbsp;about&nbsp;the&nbsp;difference&nbsp;between&nbsp;a&nbsp;"bigint"&nbsp;and&nbsp;a<br>
+"tinyint"&nbsp;entry&nbsp;in&nbsp;MySQL.&nbsp;&nbsp;I'd&nbsp;refer&nbsp;you&nbsp;first&nbsp;to&nbsp;the&nbsp;MySQL&nbsp;documentation,<br>
+available&nbsp;at&nbsp;http://www.mysql.com/doc.html,&nbsp;but&nbsp;that's&nbsp;mostly&nbsp;a&nbsp;confusing<br>
+morass&nbsp;of&nbsp;high-level&nbsp;database&nbsp;jargon.&nbsp;&nbsp;Here&nbsp;are&nbsp;the&nbsp;basics&nbsp;you&nbsp;need&nbsp;to&nbsp;know<br>
+about&nbsp;the&nbsp;database&nbsp;to&nbsp;proceed:<br>
+<br>
+1.&nbsp;&nbsp;To&nbsp;connect&nbsp;to&nbsp;your&nbsp;database,&nbsp;type&nbsp;"mysql&nbsp;-u&nbsp;root"&nbsp;at&nbsp;the&nbsp;command&nbsp;prompt&nbsp;as<br>
+any&nbsp;user.&nbsp;If&nbsp;this&nbsp;works&nbsp;without&nbsp;asking&nbsp;you&nbsp;for&nbsp;a&nbsp;password,&nbsp;SHAME&nbsp;ON&nbsp;YOU!&nbsp;&nbsp;You<br>
+should&nbsp;have&nbsp;locked&nbsp;your&nbsp;security&nbsp;down&nbsp;like&nbsp;the&nbsp;README&nbsp;told&nbsp;you&nbsp;to.&nbsp;&nbsp;You&nbsp;can<br>
+find&nbsp;details&nbsp;on&nbsp;locking&nbsp;down&nbsp;your&nbsp;database&nbsp;in&nbsp;the&nbsp;Bugzilla&nbsp;FAQ&nbsp;in&nbsp;this<br>
+directory&nbsp;(under&nbsp;"Security"),&nbsp;or&nbsp;more&nbsp;robust&nbsp;security&nbsp;generalities&nbsp;in&nbsp;the<br>
+MySQL&nbsp;searchable&nbsp;documentation&nbsp;at<br>
+http://www.mysql.com/php/manual.php3?section=Privilege_system&nbsp;.<br>
+<br>
+2.&nbsp;&nbsp;You&nbsp;should&nbsp;now&nbsp;be&nbsp;at&nbsp;a&nbsp;prompt&nbsp;that&nbsp;looks&nbsp;like&nbsp;this:<br>
+<br>
+mysql&#62;<br>
+	<br>
+	At&nbsp;the&nbsp;prompt,&nbsp;if&nbsp;"bugs"&nbsp;is&nbsp;the&nbsp;name&nbsp;of&nbsp;your&nbsp;Bugzilla&nbsp;database,&nbsp;type:<br>
+	<br>
+mysql&#62;&nbsp;use&nbsp;bugs;<br>
+	<br>
+	(don't&nbsp;forget&nbsp;the&nbsp;";"&nbsp;at&nbsp;the&nbsp;end&nbsp;of&nbsp;each&nbsp;line,&nbsp;or&nbsp;you'll&nbsp;be&nbsp;kicking&nbsp;yourself<br>
+all&nbsp;the&nbsp;way&nbsp;through&nbsp;this&nbsp;documentation)<br>
+&nbsp;&nbsp;Young&nbsp;Grasshopper,&nbsp;you&nbsp;are&nbsp;now&nbsp;ready&nbsp;for&nbsp;the&nbsp;unveiling&nbsp;of&nbsp;the&nbsp;Bugzilla<br>
+database,&nbsp;in&nbsp;the&nbsp;next&nbsp;section...<br>
+<br>
+<br>
+<br>
+===<br>
+THE&nbsp;TABLES<br>
+===<br>
+<br>
+&nbsp;&nbsp;Imagine&nbsp;your&nbsp;MySQL&nbsp;database&nbsp;as&nbsp;a&nbsp;series&nbsp;of&nbsp;spreadsheets,&nbsp;and&nbsp;you&nbsp;won't&nbsp;be&nbsp;too<br>
+far&nbsp;off.&nbsp;&nbsp;If&nbsp;you&nbsp;use&nbsp;this&nbsp;command:<br>
+<br>
+mysql&#62;&nbsp;show&nbsp;tables&nbsp;from&nbsp;bugs;<br>
+	<br>
+	you'll&nbsp;be&nbsp;able&nbsp;to&nbsp;see&nbsp;all&nbsp;the&nbsp;"spreadsheets"&nbsp;(tables)&nbsp;in&nbsp;your&nbsp;database.&nbsp;&nbsp;Cool,<br>
+huh?&nbsp;&nbsp;It's&nbsp;kinda'&nbsp;like&nbsp;a&nbsp;filesystem,&nbsp;only&nbsp;much&nbsp;faster&nbsp;and&nbsp;more&nbsp;robust.&nbsp;&nbsp;Come<br>
+on,&nbsp;I'll&nbsp;show&nbsp;you&nbsp;more!<br>
+<br>
+&nbsp;&nbsp;From&nbsp;the&nbsp;command&nbsp;issued&nbsp;above,&nbsp;you&nbsp;should&nbsp;now&nbsp;have&nbsp;some&nbsp;output&nbsp;that&nbsp;looks<br>
+like&nbsp;this:<br>
+<br>
++-------------------+<br>
+|&nbsp;Tables&nbsp;in&nbsp;bugs&nbsp;&nbsp;&nbsp;&nbsp;|<br>
++-------------------+<br>
+|&nbsp;attachments&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;bugs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;bugs_activity&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;cc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;components&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;dependencies&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;fielddefs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;groups&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;keyworddefs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;keywords&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;logincookies&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;longdescs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;milestones&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;namedqueries&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;products&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;profiles&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;profiles_activity&nbsp;|<br>
+|&nbsp;shadowlog&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;versions&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;votes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
+|&nbsp;watch&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>
++-------------------+<br>
+<br>
+<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;it&nbsp;doesn't&nbsp;look&nbsp;quite&nbsp;the&nbsp;same,&nbsp;that&nbsp;probably&nbsp;means&nbsp;it's&nbsp;time&nbsp;to<br>
+update&nbsp;this&nbsp;documentation&nbsp;:)<br>
+<br>
+&nbsp;&nbsp;Here's&nbsp;an&nbsp;overview&nbsp;of&nbsp;what&nbsp;each&nbsp;table&nbsp;does.&nbsp;&nbsp;Most&nbsp;columns&nbsp;in&nbsp;each&nbsp;table&nbsp;have<br>
+descriptive&nbsp;names&nbsp;that&nbsp;make&nbsp;it&nbsp;fairly&nbsp;trivial&nbsp;to&nbsp;figure&nbsp;out&nbsp;their&nbsp;jobs.<br>
+<br>
+attachments:&nbsp;This&nbsp;table&nbsp;stores&nbsp;all&nbsp;attachments&nbsp;to&nbsp;bugs.&nbsp;&nbsp;It&nbsp;tends&nbsp;to&nbsp;be&nbsp;your<br>
+largest&nbsp;table,&nbsp;yet&nbsp;also&nbsp;generally&nbsp;has&nbsp;the&nbsp;fewest&nbsp;entries&nbsp;because&nbsp;file<br>
+attachments&nbsp;are&nbsp;so&nbsp;(relatively)&nbsp;large.<br>
+<br>
+bugs:&nbsp;&nbsp;This&nbsp;is&nbsp;the&nbsp;core&nbsp;of&nbsp;your&nbsp;system.&nbsp;&nbsp;The&nbsp;bugs&nbsp;table&nbsp;stores&nbsp;most&nbsp;of&nbsp;the<br>
+current&nbsp;information&nbsp;about&nbsp;a&nbsp;bug,&nbsp;with&nbsp;the&nbsp;exception&nbsp;of&nbsp;the&nbsp;info&nbsp;stored&nbsp;in&nbsp;the<br>
+other&nbsp;tables.<br>
+<br>
+bugs_activity:&nbsp;&nbsp;This&nbsp;stores&nbsp;information&nbsp;regarding&nbsp;what&nbsp;changes&nbsp;are&nbsp;made&nbsp;to&nbsp;bugs<br>
+when&nbsp;--&nbsp;a&nbsp;history&nbsp;file.<br>
+<br>
+cc:&nbsp;&nbsp;This&nbsp;tiny&nbsp;table&nbsp;simply&nbsp;stores&nbsp;all&nbsp;the&nbsp;CC&nbsp;information&nbsp;for&nbsp;any&nbsp;bug&nbsp;which&nbsp;has<br>
+any&nbsp;entries&nbsp;in&nbsp;the&nbsp;CC&nbsp;field&nbsp;of&nbsp;the&nbsp;bug.&nbsp;&nbsp;Note&nbsp;that,&nbsp;like&nbsp;most&nbsp;other&nbsp;tables&nbsp;in<br>
+Bugzilla,&nbsp;it&nbsp;does&nbsp;not&nbsp;refer&nbsp;to&nbsp;users&nbsp;by&nbsp;their&nbsp;user&nbsp;names,&nbsp;but&nbsp;by&nbsp;their&nbsp;unique<br>
+userid,&nbsp;stored&nbsp;as&nbsp;a&nbsp;primary&nbsp;key&nbsp;in&nbsp;the&nbsp;profiles&nbsp;table.<br>
+<br>
+components:&nbsp;This&nbsp;stores&nbsp;the&nbsp;programs&nbsp;and&nbsp;components&nbsp;(or&nbsp;products&nbsp;and<br>
+components,&nbsp;in&nbsp;newer&nbsp;Bugzilla&nbsp;parlance)&nbsp;for&nbsp;Bugzilla.&nbsp;&nbsp;Curiously,&nbsp;the&nbsp;"program"<br>
+(product)&nbsp;field&nbsp;is&nbsp;the&nbsp;full&nbsp;name&nbsp;of&nbsp;the&nbsp;product,&nbsp;rather&nbsp;than&nbsp;some&nbsp;other&nbsp;unique<br>
+identifier,&nbsp;like&nbsp;bug_id&nbsp;and&nbsp;user_id&nbsp;are&nbsp;elsewhere&nbsp;in&nbsp;the&nbsp;database.<br>
+<br>
+dependencies:&nbsp;Stores&nbsp;data&nbsp;about&nbsp;those&nbsp;cool&nbsp;dependency&nbsp;trees.<br>
+<br>
+fielddefs:&nbsp;&nbsp;A&nbsp;nifty&nbsp;table&nbsp;that&nbsp;defines&nbsp;other&nbsp;tables.&nbsp;&nbsp;For&nbsp;instance,&nbsp;when&nbsp;you<br>
+submit&nbsp;a&nbsp;form&nbsp;that&nbsp;changes&nbsp;the&nbsp;value&nbsp;of&nbsp;"AssignedTo"&nbsp;this&nbsp;table&nbsp;allows<br>
+translation&nbsp;to&nbsp;the&nbsp;actual&nbsp;field&nbsp;name&nbsp;"assigned_to"&nbsp;for&nbsp;entry&nbsp;into&nbsp;MySQL.<br>
+<br>
+groups:&nbsp;&nbsp;defines&nbsp;bitmasks&nbsp;for&nbsp;groups.&nbsp;&nbsp;A&nbsp;bitmask&nbsp;is&nbsp;a&nbsp;number&nbsp;that&nbsp;can&nbsp;uniquely<br>
+identify&nbsp;group&nbsp;memberships.&nbsp;&nbsp;For&nbsp;instance,&nbsp;say&nbsp;the&nbsp;group&nbsp;that&nbsp;is&nbsp;allowed&nbsp;to<br>
+tweak&nbsp;parameters&nbsp;is&nbsp;assigned&nbsp;a&nbsp;value&nbsp;of&nbsp;"1",&nbsp;the&nbsp;group&nbsp;that&nbsp;is&nbsp;allowed&nbsp;to&nbsp;edit<br>
+users&nbsp;is&nbsp;assigned&nbsp;a&nbsp;"2",&nbsp;and&nbsp;the&nbsp;group&nbsp;that&nbsp;is&nbsp;allowed&nbsp;to&nbsp;create&nbsp;new&nbsp;groups&nbsp;is<br>
+assigned&nbsp;the&nbsp;bitmask&nbsp;of&nbsp;"4".&nbsp;&nbsp;By&nbsp;uniquely&nbsp;combining&nbsp;the&nbsp;group&nbsp;bitmasks&nbsp;(much<br>
+like&nbsp;the&nbsp;chmod&nbsp;command&nbsp;in&nbsp;UNIX,)&nbsp;you&nbsp;can&nbsp;identify&nbsp;a&nbsp;user&nbsp;is&nbsp;allowed&nbsp;to&nbsp;tweak<br>
+parameters&nbsp;and&nbsp;create&nbsp;groups,&nbsp;but&nbsp;not&nbsp;edit&nbsp;users,&nbsp;by&nbsp;giving&nbsp;him&nbsp;a&nbsp;bitmask&nbsp;of<br>
+"5",&nbsp;or&nbsp;a&nbsp;user&nbsp;allowed&nbsp;to&nbsp;edit&nbsp;users&nbsp;and&nbsp;create&nbsp;groups,&nbsp;but&nbsp;not&nbsp;tweak<br>
+parameters,&nbsp;by&nbsp;giving&nbsp;him&nbsp;a&nbsp;bitmask&nbsp;of&nbsp;"6"&nbsp;Simple,&nbsp;huh?<br>
+&nbsp;&nbsp;If&nbsp;this&nbsp;makes&nbsp;no&nbsp;sense&nbsp;to&nbsp;you,&nbsp;try&nbsp;this&nbsp;at&nbsp;the&nbsp;mysql&nbsp;prompt:<br>
+mysql&#62;&nbsp;select&nbsp;*&nbsp;from&nbsp;groups;<br>
+&nbsp;&nbsp;You'll&nbsp;see&nbsp;the&nbsp;list,&nbsp;it&nbsp;makes&nbsp;much&nbsp;more&nbsp;sense&nbsp;that&nbsp;way.<br>
+<br>
+keyworddefs:&nbsp;&nbsp;Definitions&nbsp;of&nbsp;keywords&nbsp;to&nbsp;be&nbsp;used<br>
+<br>
+keywords:&nbsp;Unlike&nbsp;what&nbsp;you'd&nbsp;think,&nbsp;this&nbsp;table&nbsp;holds&nbsp;which&nbsp;keywords&nbsp;are<br>
+associated&nbsp;with&nbsp;which&nbsp;bug&nbsp;id's.<br>
+<br>
+logincookies:&nbsp;This&nbsp;stores&nbsp;every&nbsp;login&nbsp;cookie&nbsp;ever&nbsp;assigned&nbsp;to&nbsp;you&nbsp;for&nbsp;every<br>
+machine&nbsp;you've&nbsp;ever&nbsp;logged&nbsp;into&nbsp;Bugzilla&nbsp;from.&nbsp;&nbsp;Curiously,&nbsp;it&nbsp;never&nbsp;does&nbsp;any<br>
+housecleaning&nbsp;--&nbsp;I&nbsp;see&nbsp;cookies&nbsp;in&nbsp;this&nbsp;file&nbsp;I've&nbsp;not&nbsp;used&nbsp;for&nbsp;months.&nbsp;&nbsp;However,<br>
+since&nbsp;Bugzilla&nbsp;never&nbsp;expires&nbsp;your&nbsp;cookie&nbsp;(for&nbsp;convenience'&nbsp;sake),&nbsp;it&nbsp;makes<br>
+sense.<br>
+<br>
+longdescs:&nbsp;&nbsp;The&nbsp;meat&nbsp;of&nbsp;bugzilla&nbsp;--&nbsp;here&nbsp;is&nbsp;where&nbsp;all&nbsp;user&nbsp;comments&nbsp;are&nbsp;stored!<br>
+You've&nbsp;only&nbsp;got&nbsp;2^24&nbsp;bytes&nbsp;per&nbsp;comment&nbsp;(it's&nbsp;a&nbsp;mediumtext&nbsp;field),&nbsp;so&nbsp;speak<br>
+sparingly&nbsp;--&nbsp;that's&nbsp;only&nbsp;the&nbsp;amount&nbsp;of&nbsp;space&nbsp;the&nbsp;Old&nbsp;Testament&nbsp;from&nbsp;the&nbsp;Bible<br>
+would&nbsp;take&nbsp;(uncompressed,&nbsp;16&nbsp;megabytes).&nbsp;&nbsp;Each&nbsp;comment&nbsp;is&nbsp;keyed&nbsp;to&nbsp;the<br>
+bug_id&nbsp;to&nbsp;which&nbsp;it's&nbsp;attached,&nbsp;so&nbsp;the&nbsp;order&nbsp;is&nbsp;necessarily&nbsp;chronological,&nbsp;for<br>
+comments&nbsp;are&nbsp;played&nbsp;back&nbsp;in&nbsp;the&nbsp;order&nbsp;in&nbsp;which&nbsp;they&nbsp;are&nbsp;received.<br>
+<br>
+milestones:&nbsp;&nbsp;Interesting&nbsp;that&nbsp;milestones&nbsp;are&nbsp;associated&nbsp;with&nbsp;a&nbsp;specific&nbsp;product<br>
+in&nbsp;this&nbsp;table,&nbsp;but&nbsp;Bugzilla&nbsp;does&nbsp;not&nbsp;yet&nbsp;support&nbsp;differing&nbsp;milestones&nbsp;by<br>
+product&nbsp;through&nbsp;the&nbsp;standard&nbsp;configuration&nbsp;interfaces.<br>
+<br>
+namedqueries:&nbsp;&nbsp;This&nbsp;is&nbsp;where&nbsp;everybody&nbsp;stores&nbsp;their&nbsp;"custom&nbsp;queries".&nbsp;&nbsp;Very<br>
+cool&nbsp;feature;&nbsp;it&nbsp;beats&nbsp;the&nbsp;tar&nbsp;out&nbsp;of&nbsp;having&nbsp;to&nbsp;bookmark&nbsp;each&nbsp;cool&nbsp;query&nbsp;you<br>
+construct.<br>
+<br>
+products:&nbsp;&nbsp;What&nbsp;products&nbsp;you&nbsp;have,&nbsp;whether&nbsp;new&nbsp;bug&nbsp;entries&nbsp;are&nbsp;allowed&nbsp;for&nbsp;the<br>
+product,&nbsp;what&nbsp;milestone&nbsp;you're&nbsp;working&nbsp;toward&nbsp;on&nbsp;that&nbsp;product,&nbsp;votes,&nbsp;etc.&nbsp;&nbsp;It<br>
+will&nbsp;be&nbsp;nice&nbsp;when&nbsp;the&nbsp;components&nbsp;table&nbsp;supports&nbsp;these&nbsp;same&nbsp;features,&nbsp;so&nbsp;you<br>
+could&nbsp;close&nbsp;a&nbsp;particular&nbsp;component&nbsp;for&nbsp;bug&nbsp;entry&nbsp;without&nbsp;having&nbsp;to&nbsp;close&nbsp;an<br>
+entire&nbsp;product...<br>
+<br>
+profiles:&nbsp;&nbsp;Ahh,&nbsp;so&nbsp;you&nbsp;were&nbsp;wondering&nbsp;where&nbsp;your&nbsp;precious&nbsp;user&nbsp;information&nbsp;was<br>
+stored?&nbsp;&nbsp;Here&nbsp;it&nbsp;is!&nbsp;&nbsp;With&nbsp;the&nbsp;passwords&nbsp;in&nbsp;plain&nbsp;text&nbsp;for&nbsp;all&nbsp;to&nbsp;see!&nbsp;(but<br>
+sshh...&nbsp;don't&nbsp;tell&nbsp;your&nbsp;users!)<br>
+<br>
+profiles_activity:&nbsp;&nbsp;Need&nbsp;to&nbsp;know&nbsp;who&nbsp;did&nbsp;what&nbsp;when&nbsp;to&nbsp;who's&nbsp;profile?&nbsp;&nbsp;This'll<br>
+tell&nbsp;you,&nbsp;it's&nbsp;a&nbsp;pretty&nbsp;complete&nbsp;history.<br>
+<br>
+shadowlog:&nbsp;&nbsp;I&nbsp;could&nbsp;be&nbsp;mistaken&nbsp;here,&nbsp;but&nbsp;I&nbsp;believe&nbsp;this&nbsp;table&nbsp;tells&nbsp;you&nbsp;when<br>
+your&nbsp;shadow&nbsp;database&nbsp;is&nbsp;updated&nbsp;and&nbsp;what&nbsp;commands&nbsp;were&nbsp;used&nbsp;to&nbsp;update&nbsp;it.&nbsp;&nbsp;We<br>
+don't&nbsp;use&nbsp;a&nbsp;shadow&nbsp;database&nbsp;at&nbsp;our&nbsp;site&nbsp;yet,&nbsp;so&nbsp;it's&nbsp;pretty&nbsp;empty&nbsp;for&nbsp;us.<br>
+<br>
+versions:&nbsp;&nbsp;Version&nbsp;information&nbsp;for&nbsp;every&nbsp;product<br>
+<br>
+votes:&nbsp;&nbsp;Who&nbsp;voted&nbsp;for&nbsp;what&nbsp;when<br>
+<br>
+watch:&nbsp;&nbsp;Who&nbsp;(according&nbsp;to&nbsp;userid)&nbsp;is&nbsp;watching&nbsp;who's&nbsp;bugs&nbsp;(according&nbsp;to&nbsp;their<br>
+userid).<br>
+<br>
+<br>
+===<br>
+THE&nbsp;DETAILS<br>
+===<br>
+<br>
+&nbsp;&nbsp;Ahh,&nbsp;so&nbsp;you're&nbsp;wondering&nbsp;just&nbsp;what&nbsp;to&nbsp;do&nbsp;with&nbsp;the&nbsp;information&nbsp;above?&nbsp;&nbsp;At&nbsp;the<br>
+mysql&nbsp;prompt,&nbsp;you&nbsp;can&nbsp;view&nbsp;any&nbsp;information&nbsp;about&nbsp;the&nbsp;columns&nbsp;in&nbsp;a&nbsp;table&nbsp;with<br>
+this&nbsp;command&nbsp;(where&nbsp;"table"&nbsp;is&nbsp;the&nbsp;name&nbsp;of&nbsp;the&nbsp;table&nbsp;you&nbsp;wish&nbsp;to&nbsp;view):<br>
+<br>
+mysql&#62;&nbsp;show&nbsp;columns&nbsp;from&nbsp;table;<br>
+<br>
+&nbsp;&nbsp;You&nbsp;can&nbsp;also&nbsp;view&nbsp;all&nbsp;the&nbsp;data&nbsp;in&nbsp;a&nbsp;table&nbsp;with&nbsp;this&nbsp;command:<br>
+<br>
+mysql&#62;&nbsp;select&nbsp;*&nbsp;from&nbsp;table;<br>
+<br>
+&nbsp;&nbsp;--&nbsp;note:&nbsp;this&nbsp;is&nbsp;a&nbsp;very&nbsp;bad&nbsp;idea&nbsp;to&nbsp;do&nbsp;on,&nbsp;for&nbsp;instance,&nbsp;the&nbsp;"bugs"&nbsp;table&nbsp;if<br>
+you&nbsp;have&nbsp;50,000&nbsp;bugs.&nbsp;&nbsp;You'll&nbsp;be&nbsp;sitting&nbsp;there&nbsp;a&nbsp;while&nbsp;until&nbsp;you&nbsp;ctrl-c&nbsp;or<br>
+50,000&nbsp;bugs&nbsp;play&nbsp;across&nbsp;your&nbsp;screen.<br>
+<br>
+&nbsp;&nbsp;You&nbsp;can&nbsp;limit&nbsp;the&nbsp;display&nbsp;from&nbsp;above&nbsp;a&nbsp;little&nbsp;with&nbsp;the&nbsp;command,&nbsp;where<br>
+"column"&nbsp;is&nbsp;the&nbsp;name&nbsp;of&nbsp;the&nbsp;column&nbsp;for&nbsp;which&nbsp;you&nbsp;wish&nbsp;to&nbsp;restrict&nbsp;information:<br>
+<br>
+mysql&#62;&nbsp;select&nbsp;*&nbsp;from&nbsp;table&nbsp;where&nbsp;(column&nbsp;=&nbsp;"some&nbsp;info");<br>
+<br>
+&nbsp;&nbsp;--&nbsp;or&nbsp;the&nbsp;reverse&nbsp;of&nbsp;this<br>
+<br>
+mysql&#62;&nbsp;select&nbsp;*&nbsp;from&nbsp;table&nbsp;where&nbsp;(column&nbsp;!=&nbsp;"some&nbsp;info");<br>
+<br>
+&nbsp;&nbsp;Let's&nbsp;take&nbsp;our&nbsp;example&nbsp;from&nbsp;the&nbsp;introduction,&nbsp;and&nbsp;assume&nbsp;you&nbsp;need&nbsp;to&nbsp;change<br>
+the&nbsp;word&nbsp;"verified"&nbsp;to&nbsp;"approved"&nbsp;in&nbsp;the&nbsp;resolution&nbsp;field.&nbsp;&nbsp;We&nbsp;know&nbsp;from&nbsp;the<br>
+above&nbsp;information&nbsp;that&nbsp;the&nbsp;resolution&nbsp;is&nbsp;likely&nbsp;to&nbsp;be&nbsp;stored&nbsp;in&nbsp;the&nbsp;"bugs"<br>
+table.&nbsp;Note&nbsp;we'll&nbsp;need&nbsp;to&nbsp;change&nbsp;a&nbsp;little&nbsp;perl&nbsp;code&nbsp;as&nbsp;well&nbsp;as&nbsp;this&nbsp;database<br>
+change,&nbsp;but&nbsp;I&nbsp;won't&nbsp;plunge&nbsp;into&nbsp;that&nbsp;in&nbsp;this&nbsp;document.&nbsp;Let's&nbsp;verify&nbsp;the<br>
+information&nbsp;is&nbsp;stored&nbsp;in&nbsp;the&nbsp;"bugs"&nbsp;table:<br>
+<br>
+mysql&#62;&nbsp;show&nbsp;columns&nbsp;from&nbsp;bugs<br>
+<br>
+&nbsp;&nbsp;(exceedingly&nbsp;long&nbsp;output&nbsp;truncated&nbsp;here)<br>
+|&nbsp;bug_status|&nbsp;enum('UNCONFIRMED','NEW','ASSIGNED','REOPENED','RESOLVED','VERIFIED','CLOSED')||MUL&nbsp;|&nbsp;UNCONFIRMED||<br>
+<br>
+&nbsp;&nbsp;Sorry&nbsp;about&nbsp;that&nbsp;long&nbsp;line.&nbsp;&nbsp;We&nbsp;see&nbsp;from&nbsp;this&nbsp;that&nbsp;the&nbsp;"bug&nbsp;status"&nbsp;column&nbsp;is<br>
+an&nbsp;"enum&nbsp;field",&nbsp;which&nbsp;is&nbsp;a&nbsp;MySQL&nbsp;peculiarity&nbsp;where&nbsp;a&nbsp;string&nbsp;type&nbsp;field&nbsp;can<br>
+only&nbsp;have&nbsp;certain&nbsp;types&nbsp;of&nbsp;entries.&nbsp;&nbsp;While&nbsp;I&nbsp;think&nbsp;this&nbsp;is&nbsp;very&nbsp;cool,&nbsp;it's&nbsp;not<br>
+standard&nbsp;SQL.&nbsp;&nbsp;Anyway,&nbsp;we&nbsp;need&nbsp;to&nbsp;add&nbsp;the&nbsp;possible&nbsp;enum&nbsp;field&nbsp;entry<br>
+'APPROVED'&nbsp;by&nbsp;altering&nbsp;the&nbsp;"bugs"&nbsp;table.<br>
+<br>
+mysql&#62;&nbsp;ALTER&nbsp;table&nbsp;bugs&nbsp;CHANGE&nbsp;bug_status&nbsp;bug_status<br>
+&nbsp;&nbsp;&nbsp;&nbsp;-&#62;&nbsp;enum("UNCONFIRMED",&nbsp;"NEW",&nbsp;"ASSIGNED",&nbsp;"REOPENED",&nbsp;"RESOLVED",<br>
+&nbsp;&nbsp;&nbsp;&nbsp;-&#62;&nbsp;"VERIFIED",&nbsp;"APPROVED",&nbsp;"CLOSED")&nbsp;not&nbsp;null;<br>
+<br>
+&nbsp;&nbsp;&nbsp;&nbsp;(note&nbsp;we&nbsp;can&nbsp;take&nbsp;three&nbsp;lines&nbsp;or&nbsp;more&nbsp;--&nbsp;whatever&nbsp;you&nbsp;put&nbsp;in&nbsp;before&nbsp;the<br>
+semicolon&nbsp;is&nbsp;evaluated&nbsp;as&nbsp;a&nbsp;single&nbsp;expression)<br>
+<br>
+Now&nbsp;if&nbsp;you&nbsp;do&nbsp;this:<br>
+<br>
+mysql&#62;&nbsp;show&nbsp;columns&nbsp;from&nbsp;bugs;<br>
+<br>
+&nbsp;&nbsp;you'll&nbsp;see&nbsp;that&nbsp;the&nbsp;bug_status&nbsp;field&nbsp;has&nbsp;an&nbsp;extra&nbsp;"APPROVED"&nbsp;enum&nbsp;that's<br>
+available!&nbsp;&nbsp;Cool&nbsp;thing,&nbsp;too,&nbsp;is&nbsp;that&nbsp;this&nbsp;is&nbsp;reflected&nbsp;on&nbsp;your&nbsp;query&nbsp;page&nbsp;as<br>
+well&nbsp;--&nbsp;you&nbsp;can&nbsp;query&nbsp;by&nbsp;the&nbsp;new&nbsp;status.&nbsp;&nbsp;But&nbsp;how's&nbsp;it&nbsp;fit&nbsp;into&nbsp;the&nbsp;existing<br>
+scheme&nbsp;of&nbsp;things?<br>
+&nbsp;&nbsp;Looks&nbsp;like&nbsp;you&nbsp;need&nbsp;to&nbsp;go&nbsp;back&nbsp;and&nbsp;look&nbsp;for&nbsp;instances&nbsp;of&nbsp;the&nbsp;word&nbsp;"verified"<br>
+in&nbsp;the&nbsp;perl&nbsp;code&nbsp;for&nbsp;Bugzilla&nbsp;--&nbsp;wherever&nbsp;you&nbsp;find&nbsp;"verified",&nbsp;change&nbsp;it&nbsp;to<br>
+"approved"&nbsp;and&nbsp;you're&nbsp;in&nbsp;business&nbsp;(make&nbsp;sure&nbsp;that's&nbsp;a&nbsp;case-insensitive&nbsp;search).<br>
+Although&nbsp;you&nbsp;can&nbsp;query&nbsp;by&nbsp;the&nbsp;enum&nbsp;field,&nbsp;you&nbsp;can't&nbsp;give&nbsp;something&nbsp;a&nbsp;status<br>
+of&nbsp;"APPROVED"&nbsp;until&nbsp;you&nbsp;make&nbsp;the&nbsp;perl&nbsp;changes.&nbsp;&nbsp;&nbsp;Note&nbsp;that&nbsp;this&nbsp;change&nbsp;I<br>
+mentioned&nbsp;can&nbsp;also&nbsp;be&nbsp;done&nbsp;by&nbsp;editing&nbsp;checksetup.pl,&nbsp;which&nbsp;automates&nbsp;a&nbsp;lot&nbsp;of<br>
+this.&nbsp;&nbsp;But&nbsp;you&nbsp;need&nbsp;to&nbsp;know&nbsp;this&nbsp;stuff&nbsp;anyway,&nbsp;right?<br>
+<br>
+&nbsp;&nbsp;I&nbsp;hope&nbsp;this&nbsp;database&nbsp;tutorial&nbsp;has&nbsp;been&nbsp;useful&nbsp;for&nbsp;you.&nbsp;&nbsp;If&nbsp;you&nbsp;have&nbsp;comments<br>
+to&nbsp;add,&nbsp;questions,&nbsp;concerns,&nbsp;etc.&nbsp;please&nbsp;direct&nbsp;them&nbsp;to<br>
+mbarnson@excitehome.net.&nbsp;&nbsp;Please&nbsp;direct&nbsp;flames&nbsp;to&nbsp;/dev/null&nbsp;:)&nbsp;&nbsp;Have&nbsp;a&nbsp;nice<br>
+day!<br>
+<br>
+<br>
+<br>
+===<br>
+LINKS<br>
+===<br>
+<br>
+Great&nbsp;MySQL&nbsp;tutorial&nbsp;site:<br>
+http://www.devshed.com/Server_Side/MySQL/<br>
+<br>
+&nbsp;&nbsp;&nbsp;&nbsp;</P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="dbschema.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="granttables.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Database Schema Chart</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="database.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>MySQL Permissions &#38; Grant Tables</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/dbschema.html b/docs/html/dbschema.html
new file mode 100644
index 000000000..0f069365c
--- /dev/null
+++ b/docs/html/dbschema.html
@@ -0,0 +1,153 @@
+<HTML
+><HEAD
+><TITLE
+>Database Schema Chart</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="The Bugzilla Database"
+HREF="database.html"><LINK
+REL="PREVIOUS"
+TITLE="The Bugzilla Database"
+HREF="database.html"><LINK
+REL="NEXT"
+TITLE="MySQL Bugzilla Database Introduction"
+HREF="dbdoc.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="database.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Appendix C. The Bugzilla Database</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="dbdoc.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="DBSCHEMA"
+>C.1. Database Schema Chart</A
+></H1
+><P
+>      <DIV
+CLASS="MEDIAOBJECT"
+><P
+><IMG
+SRC="dbschema.jpg"
+ALT="Database Relationships"
+></IMG
+><DIV
+CLASS="CAPTION"
+><P
+>Bugzilla database relationships chart</P
+></DIV
+></P
+></DIV
+>
+    </P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="database.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="dbdoc.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>The Bugzilla Database</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="database.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>MySQL Bugzilla Database Introduction</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/dbschema.jpg b/docs/html/dbschema.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..17e2422e58a7f4ef2680cde4c8b89fdeb351e2a6
GIT binary patch
literal 220048
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
UljnG$OJf1wq%MsG{QqwP0Pqk@W&i*H

literal 0
HcmV?d00001

diff --git a/docs/html/disclaimer.html b/docs/html/disclaimer.html
new file mode 100644
index 000000000..fb8e1bbaa
--- /dev/null
+++ b/docs/html/disclaimer.html
@@ -0,0 +1,169 @@
+<HTML
+><HEAD
+><TITLE
+>Disclaimer</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="About This Guide"
+HREF="about.html"><LINK
+REL="PREVIOUS"
+TITLE="Copyright Information"
+HREF="copyright.html"><LINK
+REL="NEXT"
+TITLE="New Versions"
+HREF="newversions.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="copyright.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Chapter 1. About This Guide</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="newversions.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="DISCLAIMER"
+>1.3. Disclaimer</A
+></H1
+><P
+>      No liability for the contents of this document can be accepted.
+      Use the concepts, examples, and other content at your own risk.
+      As this is a new edition of this document, there may be errors
+      and inaccuracies that may damage your system.  Use of this document
+      may cause your girlfriend to leave you, your cats to pee on your
+      furniture and clothing, your computer to cease functioning, your
+      boss to fire you, and global thermonuclear war.  Proceed with caution.
+    </P
+><P
+>      All copyrights are held by their respective owners, unless specifically
+      noted otherwise.  Use of a term in this document should not be regarded
+      as affecting the validity of any trademark or service mark.
+      In particular, I like to put down Microsoft(tm).  Live with it.
+    </P
+><P
+>      Naming of particular products or brands should not be seen as endorsements,
+      with the exception of the term "GNU/Linux".
+      Use GNU/Linux.  Love it.  Bathe with it.  It is life and happiness.
+      I endorse it wholeheartedly and encourage you to do the same.
+    </P
+><P
+>      You are strongly recommended to make a backup of your system before
+      installing Bugzilla and at regular intervals thereafter.  Heaven knows
+      it's saved my bacon time after time; if you implement any suggestion in 
+      this Guide, implement this one!
+    </P
+><P
+>      Bugzilla has not undergone a complete security review.
+      Security holes probably exist in the code.
+      Great care should be taken both in the installation and usage of this software.
+      Carefully consider the implications of installing other network services with Bugzilla.
+    </P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="copyright.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="newversions.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Copyright Information</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="about.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>New Versions</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/downloadlinks.html b/docs/html/downloadlinks.html
new file mode 100644
index 000000000..897c66157
--- /dev/null
+++ b/docs/html/downloadlinks.html
@@ -0,0 +1,232 @@
+<HTML
+><HEAD
+><TITLE
+>Software Download Links</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="PREVIOUS"
+TITLE="The Bugzilla FAQ"
+HREF="faq.html"><LINK
+REL="NEXT"
+TITLE="The Bugzilla Database"
+HREF="database.html"></HEAD
+><BODY
+CLASS="APPENDIX"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="faq.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+></TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="database.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="APPENDIX"
+><H1
+><A
+NAME="DOWNLOADLINKS"
+>Appendix B. Software Download Links</A
+></H1
+><P
+>    All of these sites are current as of April, 2001.  Hopefully
+    they'll stay current for a while.
+  </P
+><P
+>    Apache Web Server: <A
+HREF="http://www.apache.org/"
+TARGET="_top"
+>http://www.apache.org</A
+>
+    Optional web server for Bugzilla, but recommended because of broad user base and support.
+  </P
+><P
+>    Bugzilla: <A
+HREF="http://www.mozilla.org/projects/bugzilla/"
+TARGET="_top"
+>      http://www.mozilla.org/projects/bugzilla/</A
+>
+  </P
+><P
+>    MySQL: <A
+HREF="http://www.mysql.org/"
+TARGET="_top"
+>http://www.mysql.org/</A
+>
+  </P
+><P
+>    Perl: <A
+HREF="http://www.perl.org"
+TARGET="_top"
+>http://www.perl.org/</A
+>
+  </P
+><P
+>    CPAN: <A
+HREF="http://www.cpan.org/"
+TARGET="_top"
+>http://www.cpan.org/</A
+>
+  </P
+><P
+>    DBI Perl module: 
+    <A
+HREF="ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/DBI/"
+TARGET="_top"
+>      ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/DBI/</A
+>
+  </P
+><P
+>    Data::Dumper module: 
+    <A
+HREF="ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/Data/"
+TARGET="_top"
+>      ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/Data/</A
+>
+  </P
+><P
+>    MySQL related Perl modules:
+    <A
+HREF="ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/Mysql/"
+TARGET="_top"
+>      ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/Mysql/</A
+>
+  </P
+><P
+>    TimeDate Perl module collection:
+    <A
+HREF="ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/Date/"
+TARGET="_top"
+>      ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/Date/</A
+>
+  </P
+><P
+>    GD Perl module:
+    <A
+HREF="ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/GD/"
+TARGET="_top"
+>      ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/GD/</A
+>
+    Alternately, you should be able to find the latest version of
+    GD at <A
+HREF="http://www.boutell.com/gd/"
+TARGET="_top"
+>http://www.boutell.com/gd/</A
+>
+  </P
+><P
+>    Chart::Base module:
+    <A
+HREF="ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/Chart/"
+TARGET="_top"
+>    ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/Chart/</A
+>
+  </P
+><P
+>    LinuxDoc Software: 
+    <A
+HREF="http://www.linuxdoc.org/"
+TARGET="_top"
+>http://www.linuxdoc.org/</A
+>
+    (for documentation maintenance)
+  </P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="faq.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="database.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>The Bugzilla FAQ</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+>&nbsp;</TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>The Bugzilla Database</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/faq.html b/docs/html/faq.html
new file mode 100644
index 000000000..4a2bb7505
--- /dev/null
+++ b/docs/html/faq.html
@@ -0,0 +1,3580 @@
+<HTML
+><HEAD
+><TITLE
+>The Bugzilla FAQ</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="PREVIOUS"
+TITLE="Bugzilla 3.0"
+HREF="bz30.html"><LINK
+REL="NEXT"
+TITLE="Software Download Links"
+HREF="downloadlinks.html"></HEAD
+><BODY
+CLASS="APPENDIX"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="bz30.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+></TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="downloadlinks.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="APPENDIX"
+><H1
+><A
+NAME="FAQ"
+>Appendix A. The Bugzilla FAQ</A
+></H1
+><DIV
+CLASS="QANDASET"
+><DL
+><DT
+>1. <A
+HREF="faq.html#FAQ_GENERAL"
+>General Questions</A
+></DT
+><DD
+><DL
+><DT
+>A.1.1. <A
+HREF="faq.html#AEN1302"
+>	    Where can I find information about Bugzilla?</A
+></DT
+><DT
+>A.1.2. <A
+HREF="faq.html#AEN1308"
+>	    What license is Bugzilla distributed under?
+	  </A
+></DT
+><DT
+>A.1.3. <A
+HREF="faq.html#AEN1314"
+>	    How do I get commercial support for Bugzilla?
+	  </A
+></DT
+><DT
+>A.1.4. <A
+HREF="faq.html#AEN1321"
+>	    What major companies or projects are currently using Bugzilla
+	    for bug-tracking?
+	  </A
+></DT
+><DT
+>A.1.5. <A
+HREF="faq.html#AEN1346"
+>	    Who maintains Bugzilla?
+	  </A
+></DT
+><DT
+>A.1.6. <A
+HREF="faq.html#AEN1351"
+>	    How does Bugzilla stack up against other bug-tracking databases?
+	  </A
+></DT
+><DT
+>A.1.7. <A
+HREF="faq.html#AEN1358"
+>	    How do I change my user name in Bugzilla?
+	  </A
+></DT
+><DT
+>A.1.8. <A
+HREF="faq.html#AEN1363"
+>	    Why doesn't Bugzilla offer this or that feature or compatability
+	    with this other tracking software?
+	  </A
+></DT
+><DT
+>A.1.9. <A
+HREF="faq.html#AEN1370"
+>	    Why MySQL?  I'm interested in seeing Bugzilla run on
+	    Oracle/Sybase/Msql/PostgreSQL/MSSQL?
+	  </A
+></DT
+><DT
+>A.1.10. <A
+HREF="faq.html#AEN1388"
+>	    Why do the scripts say "/usr/bonsaitools/bin/perl" instead of
+	    "/usr/bin/perl" or something else?
+	  </A
+></DT
+></DL
+></DD
+><DT
+>2. <A
+HREF="faq.html#FAQ_REDHAT"
+>Red Hat Bugzilla</A
+></DT
+><DD
+><DL
+><DT
+>A.2.1. <A
+HREF="faq.html#AEN1405"
+>	    What about Red Hat Bugzilla?
+	  </A
+></DT
+><DT
+>A.2.2. <A
+HREF="faq.html#AEN1413"
+>	    What are the primary benefits of Red Hat Bugzilla?
+	  </A
+></DT
+><DT
+>A.2.3. <A
+HREF="faq.html#AEN1441"
+>	    What's the current status of Red Hat Bugzilla?
+	  </A
+></DT
+></DL
+></DD
+><DT
+>3. <A
+HREF="faq.html#FAQ_LOKI"
+>Loki Bugzilla (AKA Fenris)</A
+></DT
+><DD
+><DL
+><DT
+>A.3.1. <A
+HREF="faq.html#AEN1457"
+>	    What about Loki Bugzilla?
+	  </A
+></DT
+><DT
+>A.3.2. <A
+HREF="faq.html#AEN1464"
+>	    Who maintains Fenris (Loki Bugzilla) now?
+	  </A
+></DT
+><DT
+>A.3.3. <A
+HREF="faq.html#AEN1469"
+>	    
+	  </A
+></DT
+></DL
+></DD
+><DT
+>4. <A
+HREF="faq.html#FAQ_PHB"
+>Pointy-Haired-Boss Questions</A
+></DT
+><DD
+><DL
+><DT
+>A.4.1. <A
+HREF="faq.html#AEN1477"
+>	    Is Bugzilla web-based or do you have to have specific software or
+	    specific operating system on your machine?
+	  </A
+></DT
+><DT
+>A.4.2. <A
+HREF="faq.html#AEN1482"
+>	    Has anyone you know of already done any Bugzilla integration with
+	    Perforce (SCM software)?
+	  </A
+></DT
+><DT
+>A.4.3. <A
+HREF="faq.html#AEN1487"
+>	    Does Bugzilla allow the user to track multiple projects?
+	  </A
+></DT
+><DT
+>A.4.4. <A
+HREF="faq.html#AEN1492"
+>	    If I am on many projects, and search for all bugs assigned to me, will
+	    Bugzilla list them for me and allow me to sort by project, severity etc?
+	  </A
+></DT
+><DT
+>A.4.5. <A
+HREF="faq.html#AEN1497"
+>	    Does Bugzilla allow attachments (text, screenshots, urls etc)? If yes,
+	    are there any that are NOT allowed?
+	  </A
+></DT
+><DT
+>A.4.6. <A
+HREF="faq.html#AEN1502"
+>	    Does Bugzilla allow us to define our own priorities and levels? Do we
+	    have complete freedom to change the labels of fields and format of them, and
+	    the choice of acceptable values?
+	  </A
+></DT
+><DT
+>A.4.7. <A
+HREF="faq.html#AEN1507"
+>	    Does Bugzilla provide any reporting features, metrics, graphs, etc? You
+	    know, the type of stuff that management likes to see. :)
+	  </A
+></DT
+><DT
+>A.4.8. <A
+HREF="faq.html#AEN1515"
+>	    Is there email notification and if so, what do you see when you get an
+	    email? Do you see bug number and title or is it only the number?
+	  </A
+></DT
+><DT
+>A.4.9. <A
+HREF="faq.html#AEN1520"
+>	    Can email notification be set up to send to multiple
+	    people, some on the To List, CC List, BCC List etc?
+	  </A
+></DT
+><DT
+>A.4.10. <A
+HREF="faq.html#AEN1525"
+>	    If there is email notification, do users have to have any particular
+	    type of email application?
+	  </A
+></DT
+><DT
+>A.4.11. <A
+HREF="faq.html#AEN1532"
+>	     If I just wanted to track certain bugs, as they go through life, can I
+	    set it up to alert me via email whenever that bug changes, whether it be
+	    owner, status or description etc.?
+	  </A
+></DT
+><DT
+>A.4.12. <A
+HREF="faq.html#AEN1537"
+>	    Does Bugzilla allow data to be imported and exported? If I had outsiders
+	    write up a bug report using a MS Word bug template, could that template be
+	    imported into "matching" fields? If I wanted to take the results of a query
+	    and export that data to MS Excel, could I do that?
+	  </A
+></DT
+><DT
+>A.4.13. <A
+HREF="faq.html#AEN1545"
+>	    Does Bugzilla allow fields to be added, changed or deleted? If I want to
+	    customize the bug submission form to meet our needs, can I do that using our
+	    terminology?
+	  </A
+></DT
+><DT
+>A.4.14. <A
+HREF="faq.html#AEN1550"
+>	    Has anyone converted Bugzilla to another language to be used in other
+	    countries? Is it localizable?
+	  </A
+></DT
+><DT
+>A.4.15. <A
+HREF="faq.html#AEN1555"
+>	    Can a user create and save reports? Can they do this in Word format?
+	    Excel format?
+	  </A
+></DT
+><DT
+>A.4.16. <A
+HREF="faq.html#AEN1560"
+>	    Can a user re-run a report with a new project, same query?
+	  </A
+></DT
+><DT
+>A.4.17. <A
+HREF="faq.html#AEN1565"
+>	    Can a user modify an existing report and then save it into another name?
+	  </A
+></DT
+><DT
+>A.4.18. <A
+HREF="faq.html#AEN1570"
+>	    Does Bugzilla have the ability to search by word, phrase, compound
+	    search?
+	  </A
+></DT
+><DT
+>A.4.19. <A
+HREF="faq.html#AEN1575"
+>	    Can the admin person establish separate group and individual user
+	    privileges?
+	  </A
+></DT
+><DT
+>A.4.20. <A
+HREF="faq.html#AEN1580"
+>	     Does Bugzilla provide record locking when there is simultaneous access
+	    to the same bug? Does the second person get a notice that the bug is in use
+	    or how are they notified?
+	  </A
+></DT
+><DT
+>A.4.21. <A
+HREF="faq.html#AEN1585"
+>	    Are there any backup features provided?
+	  </A
+></DT
+><DT
+>A.4.22. <A
+HREF="faq.html#AEN1591"
+>	    Can users be on the system while a backup is in progress?
+	  </A
+></DT
+><DT
+>A.4.23. <A
+HREF="faq.html#AEN1596"
+>	    What type of human resources are needed to be on staff to install and
+	    maintain Bugzilla? Specifically, what type of skills does the person need to
+	    have? I need to find out if we were to go with Bugzilla, what types of
+	    individuals would we need to hire and how much would that cost vs buying an
+	    "Out-of-the-Box" solution.
+	  </A
+></DT
+><DT
+>A.4.24. <A
+HREF="faq.html#AEN1603"
+>	    What time frame are we looking at if we decide to hire people to install
+	    and maintain the Bugzilla? Is this something that takes hours or weeks to
+	    install and a couple of hours per week to maintain and customize or is this
+	    a multi-week install process, plus a full time job for 1 person, 2 people,
+	    etc?
+	  </A
+></DT
+><DT
+>A.4.25. <A
+HREF="faq.html#AEN1608"
+>	    Is there any licensing fee or other fees for using Bugzilla? Any
+	    out-of-pocket cost other than the bodies needed as identified above?
+	  </A
+></DT
+></DL
+></DD
+><DT
+>5. <A
+HREF="faq.html#FAQ_INSTALL"
+>Bugzilla Installation</A
+></DT
+><DD
+><DL
+><DT
+>A.5.1. <A
+HREF="faq.html#AEN1615"
+>	    How do I download and install Bugzilla?
+	  </A
+></DT
+><DT
+>A.5.2. <A
+HREF="faq.html#AEN1621"
+>	    How do I install Bugzilla on Windows NT?
+	  </A
+></DT
+><DT
+>A.5.3. <A
+HREF="faq.html#AEN1626"
+>	    Is there an easy way to change the Bugzilla cookie name?
+	  </A
+></DT
+></DL
+></DD
+><DT
+>6. <A
+HREF="faq.html#FAQ_SECURITY"
+>Bugzilla Security</A
+></DT
+><DD
+><DL
+><DT
+>A.6.1. <A
+HREF="faq.html#AEN1633"
+>	    How do I completely disable MySQL security if it's giving me problems
+	    (I've followed the instructions in the README!)?
+	  </A
+></DT
+><DT
+>A.6.2. <A
+HREF="faq.html#AEN1639"
+>	    Are there any security problems with Bugzilla?
+	  </A
+></DT
+><DT
+>A.6.3. <A
+HREF="faq.html#AEN1644"
+>	    I've implemented the security fixes mentioned in Chris Yeh's security
+	    advisory of 5/10/2000 advising not to run MySQL as root, and am running into
+	    problems with MySQL no longer working correctly.
+	  </A
+></DT
+></DL
+></DD
+><DT
+>7. <A
+HREF="faq.html#FAQ_EMAIL"
+>Bugzilla Email</A
+></DT
+><DD
+><DL
+><DT
+>A.7.1. <A
+HREF="faq.html#AEN1651"
+>	    I have a user who doesn't want to receive any more email from Bugzilla.
+	    How do I stop it entirely for this user?
+	  </A
+></DT
+><DT
+>A.7.2. <A
+HREF="faq.html#AEN1656"
+>	    I'm evaluating/testing Bugzilla, and don't want it to send email to
+	    anyone but me. How do I do it?
+	  </A
+></DT
+><DT
+>A.7.3. <A
+HREF="faq.html#AEN1661"
+>	    I want whineatnews.pl to whine at something more, or other than, only new
+	    bugs. How do I do it?
+	  </A
+></DT
+><DT
+>A.7.4. <A
+HREF="faq.html#AEN1667"
+>	    I don't like/want to use Procmail to hand mail off to bug_email.pl.
+	    What alternatives do I have?
+	  </A
+></DT
+><DT
+>A.7.5. <A
+HREF="faq.html#AEN1674"
+>	    How do I set up the email interface to submit/change bugs via email?
+	  </A
+></DT
+><DT
+>A.7.6. <A
+HREF="faq.html#AEN1679"
+>	    Email takes FOREVER to reach me from bugzilla -- it's extremely slow.
+	    What gives?
+	  </A
+></DT
+><DT
+>A.7.7. <A
+HREF="faq.html#AEN1686"
+>	     How come email never reaches me from bugzilla changes?
+	  </A
+></DT
+></DL
+></DD
+><DT
+>8. <A
+HREF="faq.html#FAQ_DB"
+>Bugzilla Database</A
+></DT
+><DD
+><DL
+><DT
+>A.8.1. <A
+HREF="faq.html#AEN1694"
+>	    I've heard Bugzilla can be used with Oracle?
+	  </A
+></DT
+><DT
+>A.8.2. <A
+HREF="faq.html#AEN1699"
+>	    Bugs are missing from queries, but exist in the database (and I can pull
+	    them up by specifying the bug ID). What's wrong?
+	  </A
+></DT
+><DT
+>A.8.3. <A
+HREF="faq.html#AEN1704"
+>	    I think my database might be corrupted, or contain invalid entries. What
+	    do I do?
+	  </A
+></DT
+><DT
+>A.8.4. <A
+HREF="faq.html#AEN1709"
+>	    I want to manually edit some entries in my database. How?
+	  </A
+></DT
+><DT
+>A.8.5. <A
+HREF="faq.html#AEN1714"
+>	    I try to add myself as a user, but Bugzilla always tells me my password is wrong.
+	  </A
+></DT
+><DT
+>A.8.6. <A
+HREF="faq.html#AEN1719"
+>	    I think I've set up MySQL permissions correctly, but bugzilla still can't
+	    connect.
+	  </A
+></DT
+><DT
+>A.8.7. <A
+HREF="faq.html#AEN1724"
+>	    How do I synchronize bug information among multiple different Bugzilla
+	    databases?
+	  </A
+></DT
+><DT
+>A.8.8. <A
+HREF="faq.html#AEN1731"
+>	    Why do I get bizarre errors when trying to submit data, particularly problems
+	    with "groupset"?
+	  </A
+></DT
+><DT
+>A.8.9. <A
+HREF="faq.html#AEN1736"
+>	    How come even after I delete bugs, the long descriptions show up?
+	  </A
+></DT
+></DL
+></DD
+><DT
+>9. <A
+HREF="faq.html#FAQ_NT"
+>Bugzilla and Win32</A
+></DT
+><DD
+><DL
+><DT
+>A.9.1. <A
+HREF="faq.html#AEN1743"
+>	    What is the easiest way to run Bugzilla on Win32 (Win98+/NT/2K)?
+	  </A
+></DT
+><DT
+>A.9.2. <A
+HREF="faq.html#AEN1748"
+>	    Is there a "Bundle::Bugzilla" equivalent for Win32?
+	  </A
+></DT
+><DT
+>A.9.3. <A
+HREF="faq.html#AEN1753"
+>	    CGI's are failing with a "something.cgi is not a valid Windows NT
+	    application" error. Why?
+	  </A
+></DT
+><DT
+>A.9.4. <A
+HREF="faq.html#AEN1761"
+>	    Can I have some general instructions on how to make Bugzilla on Win32 work?
+	  </A
+></DT
+><DT
+>A.9.5. <A
+HREF="faq.html#AEN1767"
+>	    I'm having trouble with the perl modules for NT not being able to talk to
+	    to the database.
+	  </A
+></DT
+></DL
+></DD
+><DT
+>10. <A
+HREF="faq.html#FAQ_USE"
+>Bugzilla Usage</A
+></DT
+><DD
+><DL
+><DT
+>A.10.1. <A
+HREF="faq.html#AEN1788"
+>	    The query page is very confusing.  Isn't there a simpler way to query?
+	  </A
+></DT
+><DT
+>A.10.2. <A
+HREF="faq.html#AEN1794"
+>	    I'm confused by the behavior of the "accept" button in the Show Bug form.
+	    Why doesn't it assign the bug to me when I accept it?
+	  </A
+></DT
+><DT
+>A.10.3. <A
+HREF="faq.html#AEN1804"
+>	    I can't upload anything into the database via the "Create Attachment"
+	    link.  What am I doing wrong?
+	  </A
+></DT
+><DT
+>A.10.4. <A
+HREF="faq.html#AEN1809"
+>	    Email submissions to Bugzilla that have attachments end up asking me to
+	    save it as a "cgi" file.
+	  </A
+></DT
+><DT
+>A.10.5. <A
+HREF="faq.html#AEN1814"
+>	    How do I change a keyword in Bugzilla, once some bugs are using it?
+	  </A
+></DT
+></DL
+></DD
+><DT
+>11. <A
+HREF="faq.html#FAQ_HACKING"
+>Bugzilla Hacking</A
+></DT
+><DD
+><DL
+><DT
+>A.11.1. <A
+HREF="faq.html#AEN1821"
+>	    What bugs are in Bugzilla right now?
+	  </A
+></DT
+><DT
+>A.11.2. <A
+HREF="faq.html#AEN1830"
+>	    How can I change the default priority to a null value?  For instance, have the default
+	    priority be "---" instead of "P2"?
+	  </A
+></DT
+><DT
+>A.11.3. <A
+HREF="faq.html#AEN1836"
+>	    What's the best way to submit patches?  What guidelines should I follow?
+	  </A
+></DT
+></DL
+></DD
+></DL
+><DIV
+CLASS="QANDADIV"
+><H3
+><A
+NAME="FAQ_GENERAL"
+></A
+>1. General Questions</H3
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1302"
+></A
+><B
+>A.1.1. </B
+>	    Where can I find information about Bugzilla?</P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    You can stay up-to-date with the latest Bugzilla
+	    information at <A
+HREF="http://www.mozilla.org/projects/bugzilla/"
+TARGET="_top"
+>	    http://www.mozilla.org/projects/bugzilla/</A
+>
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1308"
+></A
+><B
+>A.1.2. </B
+>	    What license is Bugzilla distributed under?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Bugzilla is covered by the Mozilla Public License.
+	    See details at <A
+HREF="http://www.mozilla.org/MPL/"
+TARGET="_top"
+>	    http://www.mozilla.org/MPL/</A
+>
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1314"
+></A
+><B
+>A.1.3. </B
+>	    How do I get commercial support for Bugzilla?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    <A
+HREF="http://www.collab.net/"
+TARGET="_top"
+>www.collab.net</A
+> offers
+	    Bugzilla as part of their standard offering to large projects.
+	    They do have some minimum fees that are pretty hefty, and generally
+	    aren't interested in small projects.
+	  </P
+><P
+>	    There are several experienced
+	    Bugzilla hackers on the mailing list/newsgroup who are willing
+	    to whore themselves out for generous compensation.
+	    Try sending a message to the mailing list asking for a volunteer.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1321"
+></A
+><B
+>A.1.4. </B
+>	    What major companies or projects are currently using Bugzilla
+	    for bug-tracking?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    There are <EM
+>dozens</EM
+> of major comapanies with public
+	    Bugzilla sites to track bugs in their products.  A few include:
+	    <P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+>Netscape/AOL</TD
+></TR
+><TR
+><TD
+>Mozilla.org</TD
+></TR
+><TR
+><TD
+>AtHome Corporation</TD
+></TR
+><TR
+><TD
+>Red Hat Software</TD
+></TR
+><TR
+><TD
+>Loki Entertainment Software</TD
+></TR
+><TR
+><TD
+>SuSe Corp</TD
+></TR
+><TR
+><TD
+>The Horde Project</TD
+></TR
+><TR
+><TD
+>The Eazel Project</TD
+></TR
+><TR
+><TD
+>AbiSource</TD
+></TR
+><TR
+><TD
+>Real Time Enterprises, Inc</TD
+></TR
+><TR
+><TD
+>Eggheads.org</TD
+></TR
+><TR
+><TD
+>Strata Software</TD
+></TR
+><TR
+><TD
+>RockLinux</TD
+></TR
+><TR
+><TD
+>Creative Labs (makers of SoundBlaster)</TD
+></TR
+><TR
+><TD
+>The Apache Foundation</TD
+></TR
+><TR
+><TD
+>The Gnome Foundation</TD
+></TR
+><TR
+><TD
+>Linux-Mandrake</TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+>
+	  </P
+><P
+>	    Suffice to say, there are more than enough huge projects using Bugzilla
+	    that we can safely say it's extremely popular.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1346"
+></A
+><B
+>A.1.5. </B
+>	    Who maintains Bugzilla?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    There are many, many contributors from around the world maintaining Bugzilla.
+	    The designated "Maintainer" is Tara Hernandez, with QA support by Matthew Tuck.
+	    Dan Mosedale and Dawn Endico are employees of Mozilla.org responsible for the
+	    installation of Bugzilla there, and are very frequent code contributors.
+	    Terry Weissman originally ported Bugzilla, but "these days, Terry just hangs around
+	    and heckles."  The rest of us are mostly transient developers; Bugzilla suits
+	    our needs, and we contribute code as we have needs for updates.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1351"
+></A
+><B
+>A.1.6. </B
+>	    How does Bugzilla stack up against other bug-tracking databases?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    A year has gone by, and I <EM
+>still</EM
+> can't find any head-to-head
+	    comparisons of Bugzilla against other defect-tracking software.  However, from my
+	    personal experience with other bug-trackers, Bugzilla offers
+	    superior performance on commodity hardware, better price (free!), more developer-
+	    friendly features (such as stored queries, email integration, and platform
+	    independence), improved scalability, open source code, greater flexibility,
+	    and superior ease-of-use.
+	  </P
+><P
+>	    If you happen to be a commercial Bugzilla vendor, please step forward with a rebuttal
+	    so I can include it in the FAQ.  We're not in pursuit of Bugzilla ueber alles;
+	    we simply love having a powerful, open-source tool to get our jobs done.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1358"
+></A
+><B
+>A.1.7. </B
+>	    How do I change my user name in Bugzilla?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    You can't.  However, the administrative account can, by simply opening
+	    your user account in editusers.cgi and changing the login name.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1363"
+></A
+><B
+>A.1.8. </B
+>	    Why doesn't Bugzilla offer this or that feature or compatability
+	    with this other tracking software?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    It may be that the support has not been built yet, or that you
+	    have not yet found it.  Bugzilla is making tremendous strides in
+	    usability, customizability, scalability, and user interface.  It
+	    is widely considered the most complete and popular open-source
+	    bug-tracking software in existence.
+	  </P
+><P
+>	    That doesn't mean it can't use improvement!
+	    You can help the project along by either hacking a patch yourself
+	    that supports the functionality you require, or else submitting a
+	    "Request for Enhancement" (RFE) using the bug submission interface
+	    at <A
+HREF="http://bugzilla.mozilla.org/"
+TARGET="_top"
+>bugzilla.mozilla.org</A
+>.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1370"
+></A
+><B
+>A.1.9. </B
+>	    Why MySQL?  I'm interested in seeing Bugzilla run on
+	    Oracle/Sybase/Msql/PostgreSQL/MSSQL?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>Terry Weissman answers,
+	  <A
+NAME="AEN1374"
+></A
+><BLOCKQUOTE
+CLASS="BLOCKQUOTE"
+><P
+>	      You're not the only one. But <EM
+>I</EM
+> am not very interested. I'm not
+	      a real SQL or database person. I just wanted to make a useful tool,
+	      and build it on top of free software. So, I picked MySQL, and
+	      learned SQL by staring at the MySQL manual and some code lying
+	      around here, and
+	      wrote Bugzilla. I didn't know that Enum's were non-standard SQL.
+	      I'm not sure if I would have cared, but I didn't even know. So, to
+	      me, things are "portable" because it uses MySQL, and MySQL is
+	      portable enough. I fully understand (now) that people want to be
+	      portable to other databases, but that's never been a real concern
+	      of mine.
+	    </P
+></BLOCKQUOTE
+>
+	  </P
+><P
+>	    Things aren't quite that grim these days, however.  Terry pretty much
+	    sums up much of the thinking many of us have for Bugzilla, but there
+	    is light on the horizon for database-independence!  Here are some options:
+	  </P
+><P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+>	      <EM
+><A
+HREF="http://bugzilla.redhat.com/"
+TARGET="_top"
+>Red Hat Bugzilla</A
+></EM
+>:
+	      Runs a modified Bugzilla 2.8 atop an Oracle database.
+	    </TD
+></TR
+><TR
+><TD
+>	      <EM
+><A
+HREF="http://sourceforge.net/projects/interzilla"
+TARGET="_top"
+>Interzilla</A
+></EM
+>:
+	      A project to run Bugzilla on Interbase.  No code released yet, however.
+	    </TD
+></TR
+><TR
+><TD
+>	      <EM
+>Bugzilla 3.0</EM
+>: One of the primary stated goals
+	      is multiple database support.
+	    </TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1388"
+></A
+><B
+>A.1.10. </B
+>	    Why do the scripts say "/usr/bonsaitools/bin/perl" instead of
+	    "/usr/bin/perl" or something else?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	     Mozilla.org uses /usr/bonsaitools/bin/perl. The prime rule in making
+	    submissions is "don't break bugzilla.mozilla.org". If it breaks it, your
+	    patch will be reverted faster than you can do a diff.
+	  </P
+><P
+>	    Here's Terry Weissman's comment, for some historical context:
+	    <A
+NAME="AEN1393"
+></A
+><BLOCKQUOTE
+CLASS="BLOCKQUOTE"
+><P
+>		[This was] purely my own convention. I wanted a place to put a version of
+		Perl and other tools that was strictly under my control for the
+		various webtools, and not subject to anyone else. Edit it to point
+		to whatever you like.
+	      </P
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>		  We always recommend that, if possible, you keep the path
+		  as /usr/bonsaitools/bin/perl, and simply add a /usr/bonsaitools
+		  and /usr/bonsaitools/bin directory, then symlink your version
+		  of perl to /usr/bonsaitools/bin/perl.  This will make upgrading
+		  your Bugzilla much easier in the future.
+		</P
+><P
+>		  Obviously, if you do not have root access to your Bugzilla
+		  box, our suggestion is irrelevant.
+		</P
+></BLOCKQUOTE
+></DIV
+></BLOCKQUOTE
+>
+	  </P
+></DIV
+></DIV
+></DIV
+><DIV
+CLASS="QANDADIV"
+><H3
+><A
+NAME="FAQ_REDHAT"
+></A
+>2. Red Hat Bugzilla</H3
+><P
+>	<DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	    <EM
+>This section is no longer up-to-date.</EM
+>
+	    Please see the section on "Red Hat Bugzilla" under "Variants" in The Bugzilla Guide.
+	  </P
+></BLOCKQUOTE
+></DIV
+>
+      </P
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1405"
+></A
+><B
+>A.2.1. </B
+>	    What about Red Hat Bugzilla?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Red Hat Bugzilla is arguably more user-friendly, customizable, and scalable
+	    than stock Bugzilla. Check it out at
+	    http://bugzilla.redhat.com and the sources at ftp://people.redhat.com/dkl/.
+	    They've set their Bugzilla up to work with Oracle out of the box.
+	    Note that Redhat Bugzilla is based upon the 2.8 Bugzilla tree;
+	    Bugzilla has made some tremendous advances since the 2.8 release.
+	    Why not download both Bugzillas to check out the differences for
+	    yourself?
+	  </P
+><P
+>	    Dave Lawrence, the original Red Hat Bugzilla maintainer, mentions:
+	    <A
+NAME="AEN1410"
+></A
+><BLOCKQUOTE
+CLASS="BLOCKQUOTE"
+><P
+>		Somebody needs to take the ball and run with it.  I'm the only
+		maintainer and am very pressed for time.
+	      </P
+></BLOCKQUOTE
+>
+	    If you, or someone you know, has the time and expertise to do the integration
+	    work so main-tree Bugzilla 2.12 and higher integrates the Red
+	    Hat Bugzilla Oracle modifications, please donate your
+	    time to supporting the Bugzilla project.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1413"
+></A
+><B
+>A.2.2. </B
+>	    What are the primary benefits of Red Hat Bugzilla?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    <EM
+>Dave Lawrence</EM
+>:
+	    <A
+NAME="AEN1418"
+></A
+><BLOCKQUOTE
+CLASS="BLOCKQUOTE"
+><P
+>		For the record, we are not using any template type implementation for
+		the cosmetic changes maded to Bugzilla.  It is just alot of html changes
+		in the code itself.  I admit I may have gotten a little carried away with it
+		but the corporate types asked for a more standardized interface to match up
+		with other projects relating to Red Hat web sites.  A lot of other web based
+		internal tools I am working on also look like Bugzilla.
+	      </P
+><P
+>		I do want to land the changes that I have made to Bugzilla but I may
+		have to back out a good deal and make a different version of Red Hat's
+		Bugzilla for checking in to CVS. Especially the cosmetic changes because it
+		seems they may not fit the general public.  I will do that as soon as I can.
+		I also still do my regular QA responsibilities along with Bugzilla so time
+		is difficult sometimes to come by.
+	      </P
+><P
+>		There are also a good deal of other changes that were requested by
+		management for things like support contracts and different permission
+		groups for making bugs private. Here is a short list of the major
+		changes that have been made:
+	      </P
+><P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>		    No enum types. All old enum types are now separate smaller tables.
+		  </P
+></LI
+><LI
+><P
+>		    No bit wise operations. Not all databases support this so they were
+		    changed to a more generic way of doing this task
+		  </P
+></LI
+><LI
+><P
+>		    Bug reports can only be altered by the reporter, assignee, or a
+		    privileged bugzilla user. The rest of the world can see the bug but in
+		    a non-changeable format (unless the bug has been marked private).  They
+		    can however add comments, add and remove themselves from the CC list
+		  </P
+></LI
+><LI
+><P
+>		    Different group scheme. Each group has an id number related to it.
+		    There is a user_group table which contains userid to groupid mappings
+		    to determine which groups each user belongs to.  Additionally there is
+		    a bug_group table that has bugid to groupid mappings to show which
+		    groups can see a particular bug. If there are no entries for a bug in
+		    this table then the bug is public.
+		  </P
+></LI
+><LI
+><P
+>		    Product groups. product_table created to only allow certain products to
+		    be visible for certain groups in both bug entry and query. This was
+		    particulary helpful for support contracts.
+		  </P
+></LI
+><LI
+><P
+>		    Of course many (too many) changes to Bugzilla code itself to allow use
+		    with Oracle and still allow operation with Mysql if so desired.
+		    Currently if you use Mysql it is set to use Mysql's old permission
+		    scheme to keep breakage to a minimum. Hopefully one day this will
+		    standardize on one style which may of course be something completely
+		    different.
+		  </P
+></LI
+><LI
+><P
+>		    Uses Text::Template perl module for rendering of the dynamic HTML pages
+		    such as enter_bug.cgi, query.cgi, bug_form.pl, and for the header and
+		    footer parts of the page. This allows the html to be separate from the
+		    perl code for customizing the look and feel of the page to one's
+		    preference.
+		  </P
+></LI
+><LI
+><P
+>		    There are many other smaller changes. There is also a port to Oracle
+		    that I have been working on as time permits but is not completely
+		    finished but somewhat usable. I will merge it into our standard code
+		    base when it becomes production quality. Unfortunately there will have
+		    to be some conditionals in the code to make it work with other than
+		    Oracle due to some differences between Oracle and Mysql.
+		  </P
+></LI
+></OL
+><P
+>		Both the Mysql and Oracle versions of our current code base are
+		available from ftp://people.redhat.com/dkl. If Terry/Tara wants I can submit
+		patch files for all of the changes I have made and he can determine what is
+		suitable for addition to the main bugzilla cade base. But for me to commit
+		changes to the actual CVS I will need to back out alot of things that are
+		not suitable for the rest of the Bugzilla community. I am open to
+		suggestions.
+	      </P
+></BLOCKQUOTE
+>
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1441"
+></A
+><B
+>A.2.3. </B
+>	    What's the current status of Red Hat Bugzilla?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    <DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>		This information is somewhat dated; I last updated it
+		7 June 2000.  Please see the "Variants" section of "The Bugzilla Guide"
+		for more up-to-date information regarding Red Hat Bugzilla.
+	      </P
+></BLOCKQUOTE
+></DIV
+>
+	    <EM
+>Dave Lawrence</EM
+>:
+	    <A
+NAME="AEN1448"
+></A
+><BLOCKQUOTE
+CLASS="BLOCKQUOTE"
+><P
+>		     I suppose the current thread warrants an update on the status of
+		Oracle and bugzilla ;) We have now been running Bugzilla 2.8 on
+		Oracle for the last two days in our production environment. I
+		tried to do as much testing as possible with it before going live
+		which is some of the reason for the long delay. I did not get
+		enough feedback as I would have liked from internal developers to
+		help weed out any bugs still left so I said "Fine, i will take it
+		live and then I will get the feedback I want :)" So it is now
+		starting to stabilize and it running quite well after working
+		feverishly the last two days fixing problems as soon as they came
+		in from the outside world. The current branch in cvs is up2date if
+		anyone would like to grab it and try it out. The oracle _setup.pl
+		is broken right now due to some last minute changes but I will
+		update that soon. Therefore you would probably need to create the
+		database tables the old fashioned way using the supplied sql
+		creation scripts located in the ./oracle directory. We have heavy
+		optimizations in the database it self thanks to the in-house DBA
+		here at Red Hat so it is running quite fast. The database itself
+		is located on a dual PII450 with 1GB ram and 14 high voltage
+		differential raided scsi drives. The tables and indexes are
+		partitioned in 4 chuncks across the raided drive which is nice
+		because when ever you need to do a full table scan, it is actually
+		starting in 4 different locations on 4 different drives
+		simultaneously. And the indexes of course are on separate drives
+		from the data so that speeds things up tremendously. When  I can
+		find the time I will document all that we have done to get this
+		thing going to help others that may need it.
+	      </P
+><P
+>		As Matt has mentioned it is still using out-dated code and with a
+		little help I would like to bring everything up to date for
+		eventual  incorporation with the main cvs tree. Due to other
+		duties I have with the company any help with this wiould be
+		appreciated. What we are using  now is what I call a best first
+		effort. It definitely can be improved on and may even need
+		complete rewrites in a lot of areas. A lot of changes may have to
+		be made in the way Bugzilla does things currently  to make this
+		transition to a more generic database interface.  Fortunately when
+		making the Oracle changes I made sure I didn't do  anything that I
+		would consider Oracle specific and could not be easily done with
+		other databases. Alot of the sql statements need to be broken up
+		into smaller utilities that themselves would need to make
+		decisions on what database they are using but the majority of the
+		code can be made database neutral.
+	      </P
+></BLOCKQUOTE
+>
+	  </P
+></DIV
+></DIV
+></DIV
+><DIV
+CLASS="QANDADIV"
+><H3
+><A
+NAME="FAQ_LOKI"
+></A
+>3. Loki Bugzilla (AKA Fenris)</H3
+><P
+>	<DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	    Loki's "Fenris" Bugzilla is based upon the (now ancient) Bugzilla 2.8
+	    tree, and is no longer actively maintained.
+	    It works well enough for Loki.  Additionally, the major
+	    differences in Fenris have now been integrated into
+	    the main source tree of Bugzilla, so there's not much
+	    reason to go grab the source.  I leave this section of the
+	    FAQ principally for historical interest, but unless Loki has further
+	    input into Bugzilla's future, it will be deprecated in future versions
+	    of the Guide.
+	  </P
+></BLOCKQUOTE
+></DIV
+>
+      </P
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1457"
+></A
+><B
+>A.3.1. </B
+>	    What about Loki Bugzilla?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Loki Games has a customized version of Bugzilla available at
+	    http://fenris.lokigames.com.  From that page,
+	    <A
+NAME="AEN1461"
+></A
+><BLOCKQUOTE
+CLASS="BLOCKQUOTE"
+><P
+>		     You may have noticed that Fenris is a fork from Bugzilla-- our
+		patches weren't suitable for integration --and a few people have
+		expressed interest in the code. Fenris has one major  improvement
+		over Bugzilla, and that is individual comments are not appended
+		onto a string blob, they are stored as a record in a separate
+		table. This allows you to, for instance, separate comments out
+		according to privilege levels in case your bug database could
+		contain sensitive information not for public eyes. We also provide
+		things like email hiding to protect user's privacy, additional
+		fields such as 'user_affected' in case someone enters someone
+		else's bug, comment editing and deletion, and more conditional
+		system variables than Bugzilla does (turn off attachments,
+		qacontact, etc.).
+	      </P
+></BLOCKQUOTE
+>
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1464"
+></A
+><B
+>A.3.2. </B
+>	    Who maintains Fenris (Loki Bugzilla) now?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Raphael Barrerro &#60;raistlin@lokigames.com&#62;.
+	    Michael Vance created the initial fork, but no longer
+	    maintains the project.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1469"
+></A
+><B
+>A.3.3. </B
+>	    
+	  </P
+></DIV
+></DIV
+></DIV
+><DIV
+CLASS="QANDADIV"
+><H3
+><A
+NAME="FAQ_PHB"
+></A
+>4. Pointy-Haired-Boss Questions</H3
+><P
+>	<DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	    The title of this section doesn't mean you're a PHB -- it just means
+	    you probably HAVE a PHB who wants to know this :)
+	  </P
+></BLOCKQUOTE
+></DIV
+>
+      </P
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1477"
+></A
+><B
+>A.4.1. </B
+>	    Is Bugzilla web-based or do you have to have specific software or
+	    specific operating system on your machine?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    It is web and e-mail based.  You can edit bugs by sending specially
+	    formatted email to a properly configured Bugzilla, or control via the web.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1482"
+></A
+><B
+>A.4.2. </B
+>	    Has anyone you know of already done any Bugzilla integration with
+	    Perforce (SCM software)?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Yes!  You can find more information elsewhere in "The Bugzilla
+	    Guide" in the "Integration with Third-Party Products" section.
+	    The section on Perforce isn't very large, but as the maintainer
+	    of the Guide is charged with Perforce/Bugzilla integration by
+	    his company, you can expect this section to grow.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1487"
+></A
+><B
+>A.4.3. </B
+>	    Does Bugzilla allow the user to track multiple projects?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Absolutely!  You can track up to a "soft-limit" of around
+	    64 individual "Products", that can each be composed of as
+	    many "Components" as you want.  Check the Administration
+	    section of the Bugzilla Guide for more information regarding
+	    setting up Products and Components.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1492"
+></A
+><B
+>A.4.4. </B
+>	    If I am on many projects, and search for all bugs assigned to me, will
+	    Bugzilla list them for me and allow me to sort by project, severity etc?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Yes.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1497"
+></A
+><B
+>A.4.5. </B
+>	    Does Bugzilla allow attachments (text, screenshots, urls etc)? If yes,
+	    are there any that are NOT allowed?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Yes.  There are many specific MIME-types that are pre-defined by Bugzilla,
+	    but you may specify any arbitrary MIME-type you need when you
+	    upload the file.  Since all attachments are stored in the database,
+	    however, I recommend storing large binary attachments elsewhere
+	    in the web server's file system and providing a hyperlink
+	    as a comment, or in the provided "URL" field in the bug report.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1502"
+></A
+><B
+>A.4.6. </B
+>	    Does Bugzilla allow us to define our own priorities and levels? Do we
+	    have complete freedom to change the labels of fields and format of them, and
+	    the choice of acceptable values?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Yes.  However, modifying some fields, notably those related to bug
+	    progression states, also require adjusting the program logic to
+	    compensate for the change.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1507"
+></A
+><B
+>A.4.7. </B
+>	    Does Bugzilla provide any reporting features, metrics, graphs, etc? You
+	    know, the type of stuff that management likes to see. :)
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Yes.  Look at <A
+HREF="http://bugzilla.mozilla.org/reports.cgi"
+TARGET="_top"
+>	    http://bugzilla.mozilla.org/reports.cgi</A
+> for basic reporting
+	    facilities.
+	  </P
+><P
+>	    For more advanced reporting, I recommend hooking up a professional
+	    reporting package, such as Crystal Reports, and use ODBC to access
+	    the MySQL database.  You can do a lot through the Query page of
+	    Bugzilla as well, but right now Advanced Reporting is much
+	    better accomplished through third-party utilities that can
+	    interface with the database directly.
+	  </P
+><P
+>	    Advanced Reporting is a Bugzilla 3.X proposed feature.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1515"
+></A
+><B
+>A.4.8. </B
+>	    Is there email notification and if so, what do you see when you get an
+	    email? Do you see bug number and title or is it only the number?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Email notification is user-configurable.  The bug id and Topic
+	    of the bug report accompany each email notification, along with
+	    a list of the changes made.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1520"
+></A
+><B
+>A.4.9. </B
+>	    Can email notification be set up to send to multiple
+	    people, some on the To List, CC List, BCC List etc?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Yes.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1525"
+></A
+><B
+>A.4.10. </B
+>	    If there is email notification, do users have to have any particular
+	    type of email application?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Bugzilla email is sent in plain text, the most compatible mail format
+	    on the planet.
+	    <DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>		If you decide to use the bugzilla_email integration features
+		to allow Bugzilla to record responses to mail with the associated bug,
+		you may need to caution your users to set their mailer to "respond
+		to messages in the format in which they were sent".  For security reasons
+		Bugzilla ignores HTML tags in comments, and if a user sends HTML-based
+		email into Bugzilla the resulting comment looks downright awful.
+	      </P
+></BLOCKQUOTE
+></DIV
+>
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1532"
+></A
+><B
+>A.4.11. </B
+>	     If I just wanted to track certain bugs, as they go through life, can I
+	    set it up to alert me via email whenever that bug changes, whether it be
+	    owner, status or description etc.?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Yes.  Place yourself in the "cc" field of the bug you wish to monitor.
+	    Then change your "Notify me of changes to" field in the Email Settings
+	    tab of the User Preferences screen in Bugzilla to the "Only those
+	    bugs which I am listed on the CC line" option.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1537"
+></A
+><B
+>A.4.12. </B
+>	    Does Bugzilla allow data to be imported and exported? If I had outsiders
+	    write up a bug report using a MS Word bug template, could that template be
+	    imported into "matching" fields? If I wanted to take the results of a query
+	    and export that data to MS Excel, could I do that?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Mozilla allows data export through a custom DTD in XML format.
+	    It does not, however, export to specific formats other than the
+	    XML Mozilla DTD.  Importing the data into Excel or any other application
+	    is left as an exercise for the reader.
+	  </P
+><P
+>	    If you create import filters to other applications from Mozilla's XML,
+	    please submit your modifications for inclusion in future Bugzilla
+	    distributions.
+	  </P
+><P
+>	    As for data import, any application can send data to Bugzilla through
+	    the HTTP protocol, or through Mozilla's XML API.  However, it seems
+	    kind of silly to put another front-end in front of Bugzilla;
+	    it makes more sense to create a simplified bug submission form in
+	    HTML.  You can find an excellent example at
+	    <A
+HREF="http://www.mozilla.org/quality/help/bugzilla-helper.html"
+TARGET="_top"
+>	    http://www.mozilla.org/quality/help/bugzilla-helper.html</A
+>
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1545"
+></A
+><B
+>A.4.13. </B
+>	    Does Bugzilla allow fields to be added, changed or deleted? If I want to
+	    customize the bug submission form to meet our needs, can I do that using our
+	    terminology?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Yes.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1550"
+></A
+><B
+>A.4.14. </B
+>	    Has anyone converted Bugzilla to another language to be used in other
+	    countries? Is it localizable?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Currently, no.  Internationalization support for Perl did not
+	    exist in a robust fashion until the recent release of version 5.6.0;
+	    Bugzilla is, and likely will remain (until 3.X) completely
+	    non-localized.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1555"
+></A
+><B
+>A.4.15. </B
+>	    Can a user create and save reports? Can they do this in Word format?
+	    Excel format?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Yes.  No.  No.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1560"
+></A
+><B
+>A.4.16. </B
+>	    Can a user re-run a report with a new project, same query?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Yes.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1565"
+></A
+><B
+>A.4.17. </B
+>	    Can a user modify an existing report and then save it into another name?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    You can save an unlimited number of queries in Bugzilla.  You are free
+	    to modify them and rename them to your heart's desire.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1570"
+></A
+><B
+>A.4.18. </B
+>	    Does Bugzilla have the ability to search by word, phrase, compound
+	    search?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    You have no idea.  Bugzilla's query interface, particularly with the
+	    advanced Boolean operators, is incredibly versatile.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1575"
+></A
+><B
+>A.4.19. </B
+>	    Can the admin person establish separate group and individual user
+	    privileges?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Yes.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1580"
+></A
+><B
+>A.4.20. </B
+>	     Does Bugzilla provide record locking when there is simultaneous access
+	    to the same bug? Does the second person get a notice that the bug is in use
+	    or how are they notified?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Bugzilla does not lock records.  It provides mid-air collision detection,
+	    and offers the offending user a choice of options to deal with the conflict.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1585"
+></A
+><B
+>A.4.21. </B
+>	    Are there any backup features provided?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    MySQL, the database back-end for Bugzilla, allows hot-backup of data.
+	    You can find strategies for dealing with backup considerations
+	    at <A
+HREF="http://www.mysql.com/doc/B/a/Backup.html"
+TARGET="_top"
+>	    http://www.mysql.com/doc/B/a/Backup.html</A
+>
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1591"
+></A
+><B
+>A.4.22. </B
+>	    Can users be on the system while a backup is in progress?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Yes.  However, commits to the database must wait
+	    until the tables are unlocked.  Bugzilla databases are typically
+	    very small, and backups routinely take less than a minute.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1596"
+></A
+><B
+>A.4.23. </B
+>	    What type of human resources are needed to be on staff to install and
+	    maintain Bugzilla? Specifically, what type of skills does the person need to
+	    have? I need to find out if we were to go with Bugzilla, what types of
+	    individuals would we need to hire and how much would that cost vs buying an
+	    "Out-of-the-Box" solution.
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    If Bugzilla is set up correctly from the start, continuing maintenance needs
+	    are minimal and can be completed by unskilled labor.  Things like rotate
+	    backup tapes and check log files for the word "error".
+	  </P
+><P
+>	    Commercial Bug-tracking software typically costs somewhere upwards
+	    of $20,000 or more for 5-10 floating licenses.  Bugzilla consultation
+	    is available from skilled members of the newsgroup.
+	  </P
+><P
+>	    As an example, as of this writing I typically charge
+	     $115 for the first hour, and $89 each hour thereafter
+	    for consulting work.  It takes me three to five hours to make Bugzilla
+	    happy on a Development installation of Linux-Mandrake.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1603"
+></A
+><B
+>A.4.24. </B
+>	    What time frame are we looking at if we decide to hire people to install
+	    and maintain the Bugzilla? Is this something that takes hours or weeks to
+	    install and a couple of hours per week to maintain and customize or is this
+	    a multi-week install process, plus a full time job for 1 person, 2 people,
+	    etc?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    It all depends on your level of commitment.  Someone with much Bugzilla
+	    experience can get you up and running in less than a day, and
+	    your Bugzilla install can run untended for years.  If your
+	    Bugzilla strategy is critical to your business workflow, hire somebody
+	    with reasonable UNIX or Perl skills to handle your process management and
+	    bug-tracking maintenance &#38; customization.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1608"
+></A
+><B
+>A.4.25. </B
+>	    Is there any licensing fee or other fees for using Bugzilla? Any
+	    out-of-pocket cost other than the bodies needed as identified above?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    No.  MySQL asks, if you find their product valuable, that you purchase
+	    a support contract from them that suits your needs.
+	  </P
+></DIV
+></DIV
+></DIV
+><DIV
+CLASS="QANDADIV"
+><H3
+><A
+NAME="FAQ_INSTALL"
+></A
+>5. Bugzilla Installation</H3
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1615"
+></A
+><B
+>A.5.1. </B
+>	    How do I download and install Bugzilla?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Check <A
+HREF="http://www.mozilla.org/projects/bugzilla/"
+TARGET="_top"
+>	    http://www.mozilla.org/projects/bugzilla/</A
+> for details.
+	    Once you download it, untar it, read the README and 
+	    the Bugzilla Guide.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1621"
+></A
+><B
+>A.5.2. </B
+>	    How do I install Bugzilla on Windows NT?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Installation on Windows NT has its own section in
+	    "The Bugzilla Guide".
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1626"
+></A
+><B
+>A.5.3. </B
+>	    Is there an easy way to change the Bugzilla cookie name?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    At present, no.
+	  </P
+></DIV
+></DIV
+></DIV
+><DIV
+CLASS="QANDADIV"
+><H3
+><A
+NAME="FAQ_SECURITY"
+></A
+>6. Bugzilla Security</H3
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1633"
+></A
+><B
+>A.6.1. </B
+>	    How do I completely disable MySQL security if it's giving me problems
+	    (I've followed the instructions in the README!)?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Run mysql like this: "mysqld --skip-grant-tables".  Please remember <EM
+>this
+	    makes mysql as secure as taping a $100 to the floor of a football stadium
+	    bathroom for safekeeping.</EM
+>  Please read the Security section of the
+	    Administration chapter of "The Bugzilla Guide" before proceeding.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1639"
+></A
+><B
+>A.6.2. </B
+>	    Are there any security problems with Bugzilla?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    The Bugzilla code has not undergone a complete security audit.
+	    It is recommended that you closely examine permissions on your Bugzilla
+	    installation, and follow the recommended security guidelines found
+	    in the README and in The Bugzilla Guide.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1644"
+></A
+><B
+>A.6.3. </B
+>	    I've implemented the security fixes mentioned in Chris Yeh's security
+	    advisory of 5/10/2000 advising not to run MySQL as root, and am running into
+	    problems with MySQL no longer working correctly.
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    This is a common problem, related to running out of file descriptors.
+	    Simply add "ulimit -n unlimited" to the script which starts
+	    mysqld.
+	  </P
+></DIV
+></DIV
+></DIV
+><DIV
+CLASS="QANDADIV"
+><H3
+><A
+NAME="FAQ_EMAIL"
+></A
+>7. Bugzilla Email</H3
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1651"
+></A
+><B
+>A.7.1. </B
+>	    I have a user who doesn't want to receive any more email from Bugzilla.
+	    How do I stop it entirely for this user?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    With the email changes to 2.12, the user should be able to set
+	    this in user email preferences.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1656"
+></A
+><B
+>A.7.2. </B
+>	    I'm evaluating/testing Bugzilla, and don't want it to send email to
+	    anyone but me. How do I do it?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Edit the param for the mail text. Replace "To:" with "X-Real-To:",
+	    replace "Cc:" with "X-Real-CC:", and add a "To: (myemailaddress)".
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1661"
+></A
+><B
+>A.7.3. </B
+>	    I want whineatnews.pl to whine at something more, or other than, only new
+	    bugs. How do I do it?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Try Klaas Freitag's excellent patch for "whineatassigned" functionality.
+	    You can find it at<A
+HREF=" http://bugzilla.mozilla.org/show_bug.cgi?id=6679"
+TARGET="_top"
+>	      http://bugzilla.mozilla.org/show_bug.cgi?id=6679</A
+>. This
+	    patch is against an older version of Bugzilla, so you must apply
+	    the diffs manually.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1667"
+></A
+><B
+>A.7.4. </B
+>	    I don't like/want to use Procmail to hand mail off to bug_email.pl.
+	    What alternatives do I have?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    You can call bug_email.pl directly from your aliases file, with
+	    an entry like this:
+	    <A
+NAME="AEN1671"
+></A
+><BLOCKQUOTE
+CLASS="BLOCKQUOTE"
+><P
+>		bugzilla-daemon: "|/usr/local/bin/bugzilla/contrib/bug_email.pl"
+	      </P
+></BLOCKQUOTE
+>
+	    However, this is fairly nasty and subject to problems; you also
+	    need to set up your smrsh (sendmail restricted shell) to allow
+	    it.  In a pinch, though, it can work.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1674"
+></A
+><B
+>A.7.5. </B
+>	    How do I set up the email interface to submit/change bugs via email?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    You can find an updated README.mailif file in the contrib/ directory
+	    of your Bugzilla distribution that walks you through the setup.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1679"
+></A
+><B
+>A.7.6. </B
+>	    Email takes FOREVER to reach me from bugzilla -- it's extremely slow.
+	    What gives?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    If you are using an alternate Mail Transport Agent (MTA other than
+	    sendmail), make sure the options given in the "processmail" script for all
+	    instances of "sendmail" are correct for your MTA. If you are using Sendmail,
+	    you may wish to delete the "-ODeliveryMode=deferred" option in the
+	    "processmail" script for every invocation of "sendmail". (Be sure and leave
+	    the "-t" option, though!)
+	  </P
+><P
+>	    A better alternative is to change the "-O" option to
+	    "-ODeliveryMode=background".  This prevents Sendmail from hanging your
+	    Bugzilla Perl processes if the domain to which it must send mail
+	    is unavailable.
+	  </P
+><P
+>	    This is now a configurable parameter called "sendmailnow", available
+	    from editparams.cgi.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1686"
+></A
+><B
+>A.7.7. </B
+>	     How come email never reaches me from bugzilla changes?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Double-check that you have not turned off email in your user preferences.
+	    Confirm that Bugzilla is able to send email by visiting the "Log In"
+	    link of your Bugzilla installation and clicking the "Email me a password"
+	    button after entering your email address.
+	  </P
+><P
+>	    If you never receive mail from Bugzilla, chances you do not have
+	    sendmail in "/usr/lib/sendmail".  Ensure sendmail lives in, or is symlinked
+	    to, "/usr/lib/sendmail".
+	  </P
+></DIV
+></DIV
+></DIV
+><DIV
+CLASS="QANDADIV"
+><H3
+><A
+NAME="FAQ_DB"
+></A
+>8. Bugzilla Database</H3
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1694"
+></A
+><B
+>A.8.1. </B
+>	    I've heard Bugzilla can be used with Oracle?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Red Hat Bugzilla, mentioned above, works with Oracle.  The current version
+	    from Mozilla.org does not have this capability.  Unfortunately, though
+	    you will sacrifice a lot of the really great features available in
+	    Bugzilla 2.10 and 2.12 if you go with the 2.8-based Redhat version.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1699"
+></A
+><B
+>A.8.2. </B
+>	    Bugs are missing from queries, but exist in the database (and I can pull
+	    them up by specifying the bug ID). What's wrong?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	     You've almost certainly enabled the "shadow database", but for some
+	    reason it hasn't been updated for all your bugs. This is the database
+	    against which queries are run, so that really complex or slow queries won't
+	    lock up portions of the database for other users. You can turn off the
+	    shadow database in editparams.cgi. If you wish to continue using the shadow
+	    database, then as your "bugs" user run "./syncshadowdb -syncall" from the
+	    command line in the bugzilla installation directory to recreate your shadow
+	    database. After it finishes, be sure to check the params and make sure that
+	    "queryagainstshadowdb" is still turned on. The syncshadowdb program turns it
+	    off if it was on, and is supposed to turn it back on when completed; that
+	    way, if it crashes in the middle of recreating the database, it will stay
+	    off forever until someone turns it back on by hand. Apparently, it doesn't
+	    always do that yet.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1704"
+></A
+><B
+>A.8.3. </B
+>	    I think my database might be corrupted, or contain invalid entries. What
+	    do I do?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Run the "sanity check" utility (./sanitycheck.cgi in the bugzilla_home
+	    directory) to see! If it all comes back, you're OK.  If it doesn't come back
+	    OK (i.e. any red letters), there are certain things Bugzilla can recover
+	    from and certain things it can't.  If it can't auto-recover, I hope you're
+	    familiar with mysqladmin commands or have installed another way to manage
+	    your database...
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1709"
+></A
+><B
+>A.8.4. </B
+>	    I want to manually edit some entries in my database. How?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	     There is no facility in Bugzilla itself to do this. It's also generally
+	    not a smart thing to do if you don't know exactly what you're doing.
+	    However, if you understand SQL you can use the mysqladmin utility to
+	    manually insert, delete, and modify table information. Personally, I
+	    use "phpMyAdmin". You have to compile a PHP module with MySQL
+	    support to make it work, but it's very clean and easy to use.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1714"
+></A
+><B
+>A.8.5. </B
+>	    I try to add myself as a user, but Bugzilla always tells me my password is wrong.
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Certain version of MySQL (notably, 3.23.29 and 3.23.30) accidentally disabled
+	    the "crypt()" function.  This prevented MySQL from storing encrypted passwords.
+	    Upgrade to the "3.23 stable" version of MySQL and you should be good to go.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1719"
+></A
+><B
+>A.8.6. </B
+>	    I think I've set up MySQL permissions correctly, but bugzilla still can't
+	    connect.
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Try running MySQL from its binary: "mysqld --skip-grant-tables". This
+	    will allow you to completely rule out grant tables as the cause of your
+	    frustration. However, I do not recommend you run it this way on a regular
+	    basis, unless you really want your web site defaced and your machine
+	    cracked.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1724"
+></A
+><B
+>A.8.7. </B
+>	    How do I synchronize bug information among multiple different Bugzilla
+	    databases?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Well, you can synchronize or you can move bugs.  Synchronization will
+	    only work one way -- you can create a read-only copy of the database
+	    at one site, and have it regularly updated at intervals from the main
+	    database.
+	  </P
+><P
+>	    MySQL has some synchronization features builtin to the latest releases.
+	    It would be great if someone looked into the possibilities there
+	    and provided a report to the newsgroup on how to effectively
+	    synchronize two Bugzilla installations.
+	  </P
+><P
+>	    If you simply need to transfer bugs from one Bugzilla to another,
+	    checkout the "move.pl" script in the Bugzilla distribution.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1731"
+></A
+><B
+>A.8.8. </B
+>	    Why do I get bizarre errors when trying to submit data, particularly problems
+	    with "groupset"?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    If you're sure your MySQL parameters are correct, you might want turn
+	    "strictvaluechecks" OFF in editparams.cgi.  If you have "usebugsentry" set
+	    "On", you also cannot submit a bug as readable by more than one group with
+	    "strictvaluechecks" ON.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1736"
+></A
+><B
+>A.8.9. </B
+>	    How come even after I delete bugs, the long descriptions show up?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Delete everything from $BUZILLA_HOME/shadow.  Bugzilla creates shadow
+	    files there, with each filename corresponding to a
+	    bug number.  Also be sure to run syncshadowdb to make sure, if you are using
+	    a shadow database, that the shadow database is current.
+	  </P
+></DIV
+></DIV
+></DIV
+><DIV
+CLASS="QANDADIV"
+><H3
+><A
+NAME="FAQ_NT"
+></A
+>9. Bugzilla and Win32</H3
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1743"
+></A
+><B
+>A.9.1. </B
+>	    What is the easiest way to run Bugzilla on Win32 (Win98+/NT/2K)?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Remove Windows. Install Linux. Install Bugzilla.
+	    The boss will never know the difference.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1748"
+></A
+><B
+>A.9.2. </B
+>	    Is there a "Bundle::Bugzilla" equivalent for Win32?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Not currently.  Bundle::Bugzilla enormously simplifies Bugzilla
+	    installation on UNIX systems.  If someone can volunteer to
+	    create a suitable PPM bundle for Win32, it would be appreciated.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1753"
+></A
+><B
+>A.9.3. </B
+>	    CGI's are failing with a "something.cgi is not a valid Windows NT
+	    application" error. Why?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Depending on what Web server you are using, you will have to configure
+	    the Web server to treat *.cgi files as CGI scripts. In IIS, you do this by
+	    adding *.cgi to the App Mappings with the &#60;path&#62;\perl.exe %s %s as the
+	    executable.
+	  </P
+><P
+>	    Microsoft has some advice on this matter, as well:
+	    <A
+NAME="AEN1758"
+></A
+><BLOCKQUOTE
+CLASS="BLOCKQUOTE"
+><P
+>		"Set application mappings. In the ISM, map the extension for the script
+		file(s) to the executable for the script interpreter. For example, you might
+		map the extension .py to Python.exe, the executable for the Python script
+		interpreter. Note For the ActiveState Perl script interpreter, the extension
+		.pl is associated with PerlIS.dll by default. If you want to change the
+		association of .pl to perl.exe, you need to change the application mapping.
+		In the mapping, you must add two percent (%) characters to the end of the
+		pathname for perl.exe, as shown in this example: c:\perl\bin\perl.exe %s %s"
+	      </P
+></BLOCKQUOTE
+>
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1761"
+></A
+><B
+>A.9.4. </B
+>	    Can I have some general instructions on how to make Bugzilla on Win32 work?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    The following couple entries are deprecated in favor of the Windows installation
+	    instructions available in the "Administration" portion of "The Bugzilla Guide".
+	    However, they are provided here for historical interest and insight.
+	    <P
+CLASS="LITERALLAYOUT"
+>&nbsp;&nbsp;1.&nbsp;#!C:/perl/bin/perl&nbsp;had&nbsp;to&nbsp;be&nbsp;added&nbsp;to&nbsp;every&nbsp;perl&nbsp;file.<br>
+&nbsp;&nbsp;2.&nbsp;Converted&nbsp;to&nbsp;Net::SMTP&nbsp;to&nbsp;handle&nbsp;mail&nbsp;messages&nbsp;instead&nbsp;of<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/usr/bin/sendmail.<br>
+&nbsp;&nbsp;3.&nbsp;The&nbsp;crypt&nbsp;function&nbsp;isn't&nbsp;available&nbsp;on&nbsp;Windows&nbsp;NT&nbsp;(at&nbsp;least&nbsp;none&nbsp;that&nbsp;I<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;am&nbsp;aware),&nbsp;so&nbsp;I&nbsp;made&nbsp;encrypted&nbsp;passwords&nbsp;=&nbsp;plaintext&nbsp;passwords.<br>
+&nbsp;&nbsp;4.&nbsp;The&nbsp;system&nbsp;call&nbsp;to&nbsp;diff&nbsp;had&nbsp;to&nbsp;be&nbsp;changed&nbsp;to&nbsp;the&nbsp;Cygwin&nbsp;diff.<br>
+&nbsp;&nbsp;5.&nbsp;This&nbsp;was&nbsp;just&nbsp;to&nbsp;get&nbsp;a&nbsp;demo&nbsp;running&nbsp;under&nbsp;NT,&nbsp;it&nbsp;seems&nbsp;to&nbsp;be&nbsp;working<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;good,&nbsp;and&nbsp;I&nbsp;have&nbsp;inserted&nbsp;almost&nbsp;100&nbsp;bugs&nbsp;from&nbsp;another&nbsp;bug&nbsp;tracking<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;system.&nbsp;Since&nbsp;this&nbsp;work&nbsp;was&nbsp;done&nbsp;just&nbsp;to&nbsp;get&nbsp;an&nbsp;in-house&nbsp;demo,&nbsp;I&nbsp;am&nbsp;NOT<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;planning&nbsp;on&nbsp;making&nbsp;a&nbsp;patch&nbsp;for&nbsp;submission&nbsp;to&nbsp;Bugzilla.&nbsp;If&nbsp;you&nbsp;would<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;like&nbsp;a&nbsp;zip&nbsp;file,&nbsp;let&nbsp;me&nbsp;know.<br>
+<br>
+Q:&nbsp;Hmm,&nbsp;couldn't&nbsp;figure&nbsp;it&nbsp;out&nbsp;from&nbsp;the&nbsp;general&nbsp;instructions&nbsp;above.&nbsp;&nbsp;How<br>
+about&nbsp;step-by-step?<br>
+A:&nbsp;Sure!&nbsp;Here&nbsp;ya&nbsp;go!<br>
+<br>
+&nbsp;&nbsp;1.&nbsp;Install&nbsp;IIS&nbsp;4.0&nbsp;from&nbsp;the&nbsp;NT&nbsp;Option&nbsp;Pack&nbsp;#4.<br>
+&nbsp;&nbsp;2.&nbsp;Download&nbsp;and&nbsp;install&nbsp;Active&nbsp;Perl.<br>
+&nbsp;&nbsp;3.&nbsp;Install&nbsp;the&nbsp;Windows&nbsp;GNU&nbsp;tools&nbsp;from&nbsp;Cygwin.&nbsp;Make&nbsp;sure&nbsp;to&nbsp;add&nbsp;the&nbsp;bin<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;directory&nbsp;to&nbsp;your&nbsp;system&nbsp;path.&nbsp;(Everyone&nbsp;should&nbsp;have&nbsp;these,&nbsp;whether<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;they&nbsp;decide&nbsp;to&nbsp;use&nbsp;Bugzilla&nbsp;or&nbsp;not.&nbsp;:-)&nbsp;)<br>
+&nbsp;&nbsp;4.&nbsp;Download&nbsp;relevant&nbsp;packages&nbsp;from&nbsp;ActiveState&nbsp;at<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http://www.activestate.com/packages/zips/.&nbsp;+&nbsp;DBD-Mysql.zip<br>
+&nbsp;&nbsp;5.&nbsp;Extract&nbsp;each&nbsp;zip&nbsp;file&nbsp;with&nbsp;WinZip,&nbsp;and&nbsp;install&nbsp;each&nbsp;ppd&nbsp;file&nbsp;using&nbsp;the<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;notation:&nbsp;ppm&nbsp;install&nbsp;&#60;module&#62;.ppd<br>
+&nbsp;&nbsp;6.&nbsp;Install&nbsp;Mysql.&nbsp;&nbsp;*Note:&nbsp;If&nbsp;you&nbsp;move&nbsp;the&nbsp;default&nbsp;install&nbsp;from&nbsp;c:\mysql,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;you&nbsp;must&nbsp;add&nbsp;the&nbsp;appropriate&nbsp;startup&nbsp;parameters&nbsp;to&nbsp;the&nbsp;NT&nbsp;service.&nbsp;(ex.<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-b&nbsp;e:\\programs\\mysql)<br>
+&nbsp;&nbsp;7.&nbsp;Download&nbsp;any&nbsp;Mysql&nbsp;client.&nbsp;http://www.mysql.com/download_win.html<br>
+&nbsp;&nbsp;8.&nbsp;Setup&nbsp;MySql.&nbsp;(These&nbsp;are&nbsp;the&nbsp;commands&nbsp;that&nbsp;I&nbsp;used.)<br>
+<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I.&nbsp;Cleanup&nbsp;default&nbsp;database&nbsp;settings.<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C:\mysql\bin\mysql&nbsp;-u&nbsp;root&nbsp;mysql<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mysql&#62;&nbsp;DELETE&nbsp;FROM&nbsp;user&nbsp;WHERE&nbsp;Host='localhost'&nbsp;AND&nbsp;User='';<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mysql&#62;&nbsp;quit<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C:\mysql\bin\mysqladmin&nbsp;reload<br>
+<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;II.&nbsp;Set&nbsp;password&nbsp;for&nbsp;root.<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C:\mysql\bin\mysql&nbsp;-u&nbsp;root&nbsp;mysql<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mysql&#62;&nbsp;UPDATE&nbsp;user&nbsp;SET&nbsp;Password=PASSWORD('new_password')<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE&nbsp;user='root';<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mysql&#62;&nbsp;FLUSH&nbsp;PRIVILEGES;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mysql&#62;&nbsp;quit<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C:\mysql\bin\mysqladmin&nbsp;-u&nbsp;root&nbsp;reload<br>
+<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;III.&nbsp;Create&nbsp;bugs&nbsp;user.<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C:\mysql\bin\mysql&nbsp;-u&nbsp;root&nbsp;-p<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mysql&#62;&nbsp;insert&nbsp;into&nbsp;user&nbsp;(host,user,password)<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;values('localhost','bugs','');<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mysql&#62;&nbsp;quit<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C:\mysql\bin\mysqladmin&nbsp;-u&nbsp;root&nbsp;reload<br>
+<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IV.&nbsp;Create&nbsp;the&nbsp;bugs&nbsp;database.<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C:\mysql\bin\mysql&nbsp;-u&nbsp;root&nbsp;-p<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mysql&#62;&nbsp;create&nbsp;database&nbsp;bugs;<br>
+<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;V.&nbsp;Give&nbsp;the&nbsp;bugs&nbsp;user&nbsp;access&nbsp;to&nbsp;the&nbsp;bugs&nbsp;database.<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mysql&#62;&nbsp;insert&nbsp;into&nbsp;db<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(host,db,user,select_priv,insert_priv,update_priv,delete_priv,create_priv,drop_priv)<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;values('localhost','bugs','bugs','Y','Y','Y','Y','Y','N')<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mysql&#62;&nbsp;quit<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C:\mysql\bin\mysqladmin&nbsp;-u&nbsp;root&nbsp;reload<br>
+&nbsp;&nbsp;9.&nbsp;Run&nbsp;the&nbsp;table&nbsp;scripts&nbsp;to&nbsp;setup&nbsp;the&nbsp;bugs&nbsp;database.<br>
+&nbsp;10.&nbsp;Change&nbsp;CGI.pm&nbsp;to&nbsp;use&nbsp;the&nbsp;following&nbsp;regular&nbsp;expression&nbsp;because&nbsp;of<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;differing&nbsp;backslashes&nbsp;in&nbsp;NT&nbsp;versus&nbsp;UNIX.<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o&nbsp;$0&nbsp;=~&nbsp;m:[^\\]*$:;<br>
+&nbsp;11.&nbsp;Had&nbsp;to&nbsp;make&nbsp;the&nbsp;crypt&nbsp;password&nbsp;=&nbsp;plain&nbsp;text&nbsp;password&nbsp;in&nbsp;the&nbsp;database.<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Thanks&nbsp;to&nbsp;Andrew&nbsp;Lahser"&nbsp;&#60;andrew_lahser@merck.com&#62;"&nbsp;on&nbsp;this&nbsp;one.)&nbsp;The<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;files&nbsp;that&nbsp;I&nbsp;changed&nbsp;were:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o&nbsp;globals.pl<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o&nbsp;CGI.pl<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;o&nbsp;alternately,&nbsp;you&nbsp;can&nbsp;try&nbsp;commenting&nbsp;all&nbsp;references&nbsp;to&nbsp;'crypt'<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;and&nbsp;replace&nbsp;them&nbsp;with&nbsp;similar&nbsp;lines&nbsp;but&nbsp;without&nbsp;encrypt()<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;or&nbsp;crypr()&nbsp;functions&nbsp;insida&nbsp;all&nbsp;files.<br>
+&nbsp;12.&nbsp;Replaced&nbsp;sendmail&nbsp;with&nbsp;Windmail.&nbsp;Basically,&nbsp;you&nbsp;have&nbsp;to&nbsp;come&nbsp;up&nbsp;with&nbsp;a<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sendmail&nbsp;substitute&nbsp;for&nbsp;NT.&nbsp;Someone&nbsp;said&nbsp;that&nbsp;they&nbsp;used&nbsp;a&nbsp;Perl&nbsp;module<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Net::SMTP),&nbsp;but&nbsp;I&nbsp;was&nbsp;trying&nbsp;to&nbsp;save&nbsp;time&nbsp;and&nbsp;do&nbsp;as&nbsp;little&nbsp;Perl&nbsp;coding<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;as&nbsp;possible.<br>
+&nbsp;13.&nbsp;Added&nbsp;"perl"&nbsp;to&nbsp;the&nbsp;beginning&nbsp;of&nbsp;all&nbsp;Perl&nbsp;system&nbsp;calls&nbsp;that&nbsp;use&nbsp;a&nbsp;perl<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;script&nbsp;as&nbsp;an&nbsp;argument&nbsp;and&nbsp;renamed&nbsp;processmail&nbsp;to&nbsp;processmail.pl.<br>
+&nbsp;14.&nbsp;In&nbsp;processmail.pl,&nbsp;I&nbsp;added&nbsp;binmode(HANDLE)&nbsp;before&nbsp;all&nbsp;read()&nbsp;calls.&nbsp;I'm<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;not&nbsp;sure&nbsp;about&nbsp;this&nbsp;one,&nbsp;but&nbsp;the&nbsp;read()&nbsp;under&nbsp;NT&nbsp;wasn't&nbsp;counting&nbsp;the<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EOLs&nbsp;without&nbsp;the&nbsp;binary&nbsp;read."<br>
+	&nbsp;&nbsp;&nbsp;&nbsp;</P
+>
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1767"
+></A
+><B
+>A.9.5. </B
+>	    I'm having trouble with the perl modules for NT not being able to talk to
+	    to the database.
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Your modules may be outdated or inaccurate. Try:
+	    <P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>		  Hitting http://www.activestate.com/ActivePerl
+		</P
+></LI
+><LI
+><P
+>		  Download ActivePerl
+		</P
+></LI
+><LI
+><P
+>		  Go to your prompt
+		</P
+></LI
+><LI
+><P
+>		  Type 'ppm'
+		</P
+></LI
+><LI
+><P
+>		  <TT
+CLASS="PROMPT"
+>PPM&#62;</TT
+> <B
+CLASS="COMMAND"
+>install DBI DBD-mysql GD</B
+>
+		</P
+></LI
+></OL
+>
+	    I reckon TimeDate and Data::Dumper come with the activeperl. You can check
+	    the ActiveState site for packages for installation through PPM.
+	    <A
+HREF=" http://www.activestate.com/Packages/"
+TARGET="_top"
+>	      http://www.activestate.com/Packages/</A
+>
+	  </P
+></DIV
+></DIV
+></DIV
+><DIV
+CLASS="QANDADIV"
+><H3
+><A
+NAME="FAQ_USE"
+></A
+>10. Bugzilla Usage</H3
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1788"
+></A
+><B
+>A.10.1. </B
+>	    The query page is very confusing.  Isn't there a simpler way to query?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    We are developing in that direction.  You can follow progress on this
+	    at <A
+HREF="http://bugzilla.mozilla.org/show_bug.cgi?id=16775"
+TARGET="_top"
+>	      http://bugzilla.mozilla.org/show_bug.cgi?id=16775</A
+>.  Some functionality
+	    is available in Bugzilla 2.12, and is available as "quicksearch.html"
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1794"
+></A
+><B
+>A.10.2. </B
+>	    I'm confused by the behavior of the "accept" button in the Show Bug form.
+	    Why doesn't it assign the bug to me when I accept it?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    The current behavior is acceptable to bugzilla.mozilla.org and most
+	    users.  I personally don't like it.  You have your choice of patches
+	    to change this behavior, however.
+	    <P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+><A
+HREF="http://bugzilla.mozilla.org/showattachment.cgi?attach_id=8029"
+TARGET="_top"
+>		Add a "and accept bug" radio button</A
+></TD
+></TR
+><TR
+><TD
+><A
+HREF="http://bugzilla.mozilla.org/showattachment.cgi?attach_id=8153"
+TARGET="_top"
+>		"Accept" button automatically assigns to you</A
+></TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+>
+	    Note that these patches are somewhat dated.  You will need to do the find
+	    and replace manually to apply them.  They are very small, though.  It is easy.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1804"
+></A
+><B
+>A.10.3. </B
+>	    I can't upload anything into the database via the "Create Attachment"
+	    link.  What am I doing wrong?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    The most likely cause is a very old browser or a browser that is
+	    incompatible with file upload via POST.  Download the latest Netscape,
+	    Microsoft, or Mozilla browser to handle uploads correctly.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1809"
+></A
+><B
+>A.10.4. </B
+>	    Email submissions to Bugzilla that have attachments end up asking me to
+	    save it as a "cgi" file.
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Yup.  Just rename it once you download it, or save it under a different
+	    filename.  This will not be fixed anytime too soon, because it would
+	    cripple some other functionality.
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1814"
+></A
+><B
+>A.10.5. </B
+>	    How do I change a keyword in Bugzilla, once some bugs are using it?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    In the Bugzilla administrator UI, edit the keyword and it will let you
+	    replace the old keyword name with a new one.  This will cause a problem
+	    with the keyword cache.  Run sanitycheck.cgi to fix it.
+	  </P
+></DIV
+></DIV
+></DIV
+><DIV
+CLASS="QANDADIV"
+><H3
+><A
+NAME="FAQ_HACKING"
+></A
+>11. Bugzilla Hacking</H3
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1821"
+></A
+><B
+>A.11.1. </B
+>	    What bugs are in Bugzilla right now?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    Try <A
+HREF="http://bugzilla.mozilla.org/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&product=Webtools&component=Bugzilla"
+TARGET="_top"
+>	    this link</A
+> to view current bugs or requests for
+	    enhancement for Bugzilla.
+	  </P
+><P
+>	    You can view bugs marked for 2.14 release
+	    <A
+HREF="http://bugzilla.mozilla.org/buglist.cgi?product=Webtools&component=Bugzilla&target_milestone=Bugzilla+2.14"
+TARGET="_top"
+>here</A
+>.
+	    This list includes bugs for the 2.14 release that have already
+	    been fixed and checked into CVS.  Please consult the
+	    <A
+HREF="http://www.mozilla.org/projects/bugzilla/"
+TARGET="_top"
+>	      Bugzilla Project Page</A
+> for details on how to
+	    check current sources out of CVS so you can have these
+	    bug fixes early!
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1830"
+></A
+><B
+>A.11.2. </B
+>	    How can I change the default priority to a null value?  For instance, have the default
+	    priority be "---" instead of "P2"?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+>	    This is well-documented here: <A
+HREF="http://bugzilla.mozilla.org/show_bug.cgi?id=49862"
+TARGET="_top"
+>	    http://bugzilla.mozilla.org/show_bug.cgi?id=49862</A
+>.  Ultimately, it's as easy
+	    as adding the "---" priority field to your localconfig file in the appropriate area,
+	    re-running checksetup.pl, and then changing the default priority in your browser using
+	    "editparams.cgi".  Hmm, now that I think about it, that is kind of a klunky way to handle
+	    it, but for now it's what we have!  Although the bug has been closed "resolved wontfix",
+	    there may be a better way to handle this...
+	  </P
+></DIV
+></DIV
+><DIV
+CLASS="QANDAENTRY"
+><DIV
+CLASS="QUESTION"
+><P
+><A
+NAME="AEN1836"
+></A
+><B
+>A.11.3. </B
+>	    What's the best way to submit patches?  What guidelines should I follow?
+	  </P
+></DIV
+><DIV
+CLASS="ANSWER"
+><P
+><B
+> </B
+><P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>		  Enter a bug into bugzilla.mozilla.org for the "Webtools" product,
+		  "Bugzilla" component.
+		</P
+></LI
+><LI
+><P
+>		  Upload your patch as a unified DIFF (having used "diff -u" against
+		  the <EM
+>current sources</EM
+> checked out of CVS),
+		  or new source file by clicking
+		  "Create a new attachment" link on the bug page you've just created, and
+		  include any descriptions of database changes you may make, into the bug
+		  ID you submitted in step #1.  Be sure and click the "Patch" radio
+		  button to indicate the text you are sending is a patch!
+		</P
+></LI
+><LI
+><P
+>		  Announce your patch and the associated URL
+		  (http://bugzilla.mozilla.org/show_bug.cgi?id=XXXX) for discussion in
+		  the newsgroup (netscape.public.mozilla.webtools).  You'll get a really
+		  good, fairly immediate reaction to the implications of your patch,
+		  which will also give us an idea how well-received the change would
+		  be.
+		</P
+></LI
+><LI
+><P
+>		  If it passes muster with minimal modification, the person to whom
+		  the bug is assigned in Bugzilla is responsible for seeing the patch
+		  is checked into CVS.
+		</P
+></LI
+><LI
+><P
+>		  Bask in the glory of the fact that you helped write the most successful
+		  open-source bug-tracking software on the planet :)
+		</P
+></LI
+></OL
+></P
+></DIV
+></DIV
+></DIV
+></DIV
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="bz30.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="downloadlinks.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Bugzilla 3.0</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+>&nbsp;</TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Software Download Links</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/feedback.html b/docs/html/feedback.html
new file mode 100644
index 000000000..e5c347d2e
--- /dev/null
+++ b/docs/html/feedback.html
@@ -0,0 +1,154 @@
+<HTML
+><HEAD
+><TITLE
+>Feedback</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="About This Guide"
+HREF="about.html"><LINK
+REL="PREVIOUS"
+TITLE="Contributors"
+HREF="contributors.html"><LINK
+REL="NEXT"
+TITLE="Translations"
+HREF="translations.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="contributors.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Chapter 1. About This Guide</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="translations.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="FEEDBACK"
+>1.7. Feedback</A
+></H1
+><P
+>      I welcome feedback on this document.  Without your submissions and input,
+      this Guide cannot continue to exist.  Please mail additions, comments, criticisms, etc.
+      to <TT
+CLASS="EMAIL"
+>&#60;<A
+HREF="mailto:barnboy@trilobyte.net"
+>barnboy@trilobyte.net</A
+>&#62;</TT
+>.  Please send flames to 
+      <TT
+CLASS="EMAIL"
+>&#60;<A
+HREF="mailto:devnull@localhost"
+>devnull@localhost</A
+>&#62;</TT
+>
+    </P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="contributors.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="translations.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Contributors</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="about.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Translations</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/future.html b/docs/html/future.html
new file mode 100644
index 000000000..60553e411
--- /dev/null
+++ b/docs/html/future.html
@@ -0,0 +1,180 @@
+<HTML
+><HEAD
+><TITLE
+>The Future of Bugzilla</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="PREVIOUS"
+TITLE="Tinderbox"
+HREF="tinderbox.html"><LINK
+REL="NEXT"
+TITLE="Reducing Spam"
+HREF="spamlite.html"></HEAD
+><BODY
+CLASS="CHAPTER"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="tinderbox.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+></TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="spamlite.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="CHAPTER"
+><H1
+><A
+NAME="FUTURE"
+>Chapter 6. The Future of Bugzilla</A
+></H1
+><DIV
+CLASS="TOC"
+><DL
+><DT
+><B
+>Table of Contents</B
+></DT
+><DT
+>6.1. <A
+HREF="spamlite.html"
+>Reducing Spam</A
+></DT
+><DT
+>6.2. <A
+HREF="searching.html"
+>Better Searching</A
+></DT
+><DT
+>6.3. <A
+HREF="trackingbugs.html"
+>Description Flags and Tracking Bugs</A
+></DT
+><DT
+>6.4. <A
+HREF="bugprobs.html"
+>Bug Issues</A
+></DT
+><DT
+>6.5. <A
+HREF="dbaseintegrity.html"
+>Database Integrity</A
+></DT
+><DT
+>6.6. <A
+HREF="bz30.html"
+>Bugzilla 3.0</A
+></DT
+></DL
+></DIV
+><TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%"
+><TR
+><TD
+><PRE
+CLASS="SYNOPSIS"
+>Bugzilla's Future.  Much of this is the present, now.</PRE
+></TD
+></TR
+></TABLE
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="tinderbox.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="spamlite.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Tinderbox</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+>&nbsp;</TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Reducing Spam</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/gfdl.html b/docs/html/gfdl.html
new file mode 100644
index 000000000..5cd6b47cc
--- /dev/null
+++ b/docs/html/gfdl.html
@@ -0,0 +1,211 @@
+<HTML
+><HEAD
+><TITLE
+>GNU Free Documentation License</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="PREVIOUS"
+TITLE="The Quicksearch Utility"
+HREF="quicksearch.html"><LINK
+REL="NEXT"
+TITLE="PREAMBLE"
+HREF="gfdl_0.html"></HEAD
+><BODY
+CLASS="APPENDIX"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="quicksearch.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+></TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="gfdl_0.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="APPENDIX"
+><H1
+><A
+NAME="GFDL"
+>Appendix E. GNU Free Documentation License</A
+></H1
+><DIV
+CLASS="TOC"
+><DL
+><DT
+><B
+>Table of Contents</B
+></DT
+><DT
+>0. <A
+HREF="gfdl_0.html"
+>PREAMBLE</A
+></DT
+><DT
+>1. <A
+HREF="gfdl_1.html"
+>APPLICABILITY AND DEFINITIONS</A
+></DT
+><DT
+>2. <A
+HREF="gfdl_2.html"
+>VERBATIM COPYING</A
+></DT
+><DT
+>3. <A
+HREF="gfdl_3.html"
+>COPYING IN QUANTITY</A
+></DT
+><DT
+>4. <A
+HREF="gfdl_4.html"
+>MODIFICATIONS</A
+></DT
+><DT
+>5. <A
+HREF="gfdl_5.html"
+>COMBINING DOCUMENTS</A
+></DT
+><DT
+>6. <A
+HREF="gfdl_6.html"
+>COLLECTIONS OF DOCUMENTS</A
+></DT
+><DT
+>7. <A
+HREF="gfdl_7.html"
+>AGGREGATION WITH INDEPENDENT WORKS</A
+></DT
+><DT
+>8. <A
+HREF="gfdl_8.html"
+>TRANSLATION</A
+></DT
+><DT
+>9. <A
+HREF="gfdl_9.html"
+>TERMINATION</A
+></DT
+><DT
+>10. <A
+HREF="gfdl_10.html"
+>FUTURE REVISIONS OF THIS LICENSE</A
+></DT
+><DT
+><A
+HREF="gfdl_howto.html"
+>How to use this License for your documents</A
+></DT
+></DL
+></DIV
+><P
+>Version 1.1, March 2000</P
+><A
+NAME="AEN2019"
+></A
+><BLOCKQUOTE
+CLASS="BLOCKQUOTE"
+><P
+>Copyright (C) 2000  Free Software Foundation, Inc.
+59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.</P
+></BLOCKQUOTE
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="quicksearch.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="gfdl_0.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>The Quicksearch Utility</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+>&nbsp;</TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>PREAMBLE</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/gfdl_0.html b/docs/html/gfdl_0.html
new file mode 100644
index 000000000..376adafcd
--- /dev/null
+++ b/docs/html/gfdl_0.html
@@ -0,0 +1,159 @@
+<HTML
+><HEAD
+><TITLE
+>PREAMBLE</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="GNU Free Documentation License"
+HREF="gfdl.html"><LINK
+REL="PREVIOUS"
+TITLE="GNU Free Documentation License"
+HREF="gfdl.html"><LINK
+REL="NEXT"
+TITLE="APPLICABILITY AND DEFINITIONS"
+HREF="gfdl_1.html"></HEAD
+><BODY
+CLASS="SECT1"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="gfdl.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Appendix E. GNU Free Documentation License</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="gfdl_1.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECT1"
+><H1
+CLASS="SECT1"
+><A
+NAME="GFDL_0"
+>0. PREAMBLE</A
+></H1
+><P
+>The purpose of this License is to make a manual, textbook,
+    or other written document "free" in the sense of freedom: to
+    assure everyone the effective freedom to copy and redistribute it,
+    with or without modifying it, either commercially or
+    noncommercially.  Secondarily, this License preserves for the
+    author and publisher a way to get credit for their work, while not
+    being considered responsible for modifications made by
+    others.</P
+><P
+>This License is a kind of "copyleft", which means that
+    derivative works of the document must themselves be free in the
+    same sense.  It complements the GNU General Public License, which
+    is a copyleft license designed for free software.</P
+><P
+>We have designed this License in order to use it for manuals
+    for free software, because free software needs free documentation:
+    a free program should come with manuals providing the same
+    freedoms that the software does.  But this License is not limited
+    to software manuals; it can be used for any textual work,
+    regardless of subject matter or whether it is published as a
+    printed book.  We recommend this License principally for works
+    whose purpose is instruction or reference.</P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="gfdl.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="gfdl_1.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>GNU Free Documentation License</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="gfdl.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>APPLICABILITY AND DEFINITIONS</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/gfdl_1.html b/docs/html/gfdl_1.html
new file mode 100644
index 000000000..e54e987bb
--- /dev/null
+++ b/docs/html/gfdl_1.html
@@ -0,0 +1,200 @@
+<HTML
+><HEAD
+><TITLE
+>APPLICABILITY AND DEFINITIONS</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="GNU Free Documentation License"
+HREF="gfdl.html"><LINK
+REL="PREVIOUS"
+TITLE="PREAMBLE"
+HREF="gfdl_0.html"><LINK
+REL="NEXT"
+TITLE="VERBATIM COPYING"
+HREF="gfdl_2.html"></HEAD
+><BODY
+CLASS="SECT1"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="gfdl_0.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Appendix E. GNU Free Documentation License</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="gfdl_2.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECT1"
+><H1
+CLASS="SECT1"
+><A
+NAME="GFDL_1"
+>1. APPLICABILITY AND DEFINITIONS</A
+></H1
+><P
+>This License applies to any manual or other work that
+    contains a notice placed by the copyright holder saying it can be
+    distributed under the terms of this License.  The "Document",
+    below, refers to any such manual or work.  Any member of the
+    public is a licensee, and is addressed as "you".</P
+><P
+>A "Modified Version" of the Document means any work
+    containing the Document or a portion of it, either copied
+    verbatim, or with modifications and/or translated into another
+    language.</P
+><P
+>A "Secondary Section" is a named appendix or a front-matter
+    section of the Document that deals exclusively with the
+    relationship of the publishers or authors of the Document to the
+    Document's overall subject (or to related matters) and contains
+    nothing that could fall directly within that overall subject.
+    (For example, if the Document is in part a textbook of
+    mathematics, a Secondary Section may not explain any mathematics.)
+    The relationship could be a matter of historical connection with
+    the subject or with related matters, or of legal, commercial,
+    philosophical, ethical or political position regarding
+    them.</P
+><P
+>The "Invariant Sections" are certain Secondary Sections
+    whose titles are designated, as being those of Invariant Sections,
+    in the notice that says that the Document is released under this
+    License.</P
+><P
+>The "Cover Texts" are certain short passages of text that
+    are listed, as Front-Cover Texts or Back-Cover Texts, in the
+    notice that says that the Document is released under this
+    License.</P
+><P
+>A "Transparent" copy of the Document means a
+    machine-readable copy, represented in a format whose specification
+    is available to the general public, whose contents can be viewed
+    and edited directly and straightforwardly with generic text
+    editors or (for images composed of pixels) generic paint programs
+    or (for drawings) some widely available drawing editor, and that
+    is suitable for input to text formatters or for automatic
+    translation to a variety of formats suitable for input to text
+    formatters.  A copy made in an otherwise Transparent file format
+    whose markup has been designed to thwart or discourage subsequent
+    modification by readers is not Transparent.  A copy that is not
+    "Transparent" is called "Opaque".</P
+><P
+>Examples of suitable formats for Transparent copies include
+    plain ASCII without markup, Texinfo input format, LaTeX input
+    format, SGML or XML using a publicly available DTD, and
+    standard-conforming simple HTML designed for human modification.
+    Opaque formats include PostScript, PDF, proprietary formats that
+    can be read and edited only by proprietary word processors, SGML
+    or XML for which the DTD and/or processing tools are not generally
+    available, and the machine-generated HTML produced by some word
+    processors for output purposes only.</P
+><P
+>The "Title Page" means, for a printed book, the title page
+    itself, plus such following pages as are needed to hold, legibly,
+    the material this License requires to appear in the title page.
+    For works in formats which do not have any title page as such,
+    "Title Page" means the text near the most prominent appearance of
+    the work's title, preceding the beginning of the body of the
+    text.</P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="gfdl_0.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="gfdl_2.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>PREAMBLE</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="gfdl.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>VERBATIM COPYING</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/gfdl_10.html b/docs/html/gfdl_10.html
new file mode 100644
index 000000000..19469b513
--- /dev/null
+++ b/docs/html/gfdl_10.html
@@ -0,0 +1,156 @@
+<HTML
+><HEAD
+><TITLE
+>FUTURE REVISIONS OF THIS LICENSE</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="GNU Free Documentation License"
+HREF="gfdl.html"><LINK
+REL="PREVIOUS"
+TITLE="TERMINATION"
+HREF="gfdl_9.html"><LINK
+REL="NEXT"
+TITLE="How to use this License for your documents"
+HREF="gfdl_howto.html"></HEAD
+><BODY
+CLASS="SECT1"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="gfdl_9.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Appendix E. GNU Free Documentation License</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="gfdl_howto.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECT1"
+><H1
+CLASS="SECT1"
+><A
+NAME="GFDL_10"
+>10. FUTURE REVISIONS OF THIS LICENSE</A
+></H1
+><P
+>The Free Software Foundation may publish new, revised
+    versions of the GNU Free Documentation License from time to time.
+    Such new versions will be similar in spirit to the present
+    version, but may differ in detail to address new problems or
+    concerns.  See <A
+HREF="http://www.gnu.org/copyleft/"
+TARGET="_top"
+>http://www.gnu.org/copyleft/</A
+>.</P
+><P
+>Each version of the License is given a distinguishing
+    version number.  If the Document specifies that a particular
+    numbered version of this License "or any later version" applies to
+    it, you have the option of following the terms and conditions
+    either of that specified version or of any later version that has
+    been published (not as a draft) by the Free Software Foundation.
+    If the Document does not specify a version number of this License,
+    you may choose any version ever published (not as a draft) by the
+    Free Software Foundation.</P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="gfdl_9.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="gfdl_howto.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>TERMINATION</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="gfdl.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>How to use this License for your documents</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/gfdl_2.html b/docs/html/gfdl_2.html
new file mode 100644
index 000000000..c259dca1b
--- /dev/null
+++ b/docs/html/gfdl_2.html
@@ -0,0 +1,150 @@
+<HTML
+><HEAD
+><TITLE
+>VERBATIM COPYING</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="GNU Free Documentation License"
+HREF="gfdl.html"><LINK
+REL="PREVIOUS"
+TITLE="APPLICABILITY AND DEFINITIONS"
+HREF="gfdl_1.html"><LINK
+REL="NEXT"
+TITLE="COPYING IN QUANTITY"
+HREF="gfdl_3.html"></HEAD
+><BODY
+CLASS="SECT1"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="gfdl_1.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Appendix E. GNU Free Documentation License</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="gfdl_3.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECT1"
+><H1
+CLASS="SECT1"
+><A
+NAME="GFDL_2"
+>2. VERBATIM COPYING</A
+></H1
+><P
+>You may copy and distribute the Document in any medium,
+    either commercially or noncommercially, provided that this
+    License, the copyright notices, and the license notice saying this
+    License applies to the Document are reproduced in all copies, and
+    that you add no other conditions whatsoever to those of this
+    License.  You may not use technical measures to obstruct or
+    control the reading or further copying of the copies you make or
+    distribute.  However, you may accept compensation in exchange for
+    copies.  If you distribute a large enough number of copies you
+    must also follow the conditions in section 3.</P
+><P
+>You may also lend copies, under the same conditions stated
+    above, and you may publicly display copies.</P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="gfdl_1.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="gfdl_3.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>APPLICABILITY AND DEFINITIONS</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="gfdl.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>COPYING IN QUANTITY</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/gfdl_3.html b/docs/html/gfdl_3.html
new file mode 100644
index 000000000..e0d278085
--- /dev/null
+++ b/docs/html/gfdl_3.html
@@ -0,0 +1,174 @@
+<HTML
+><HEAD
+><TITLE
+>COPYING IN QUANTITY</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="GNU Free Documentation License"
+HREF="gfdl.html"><LINK
+REL="PREVIOUS"
+TITLE="VERBATIM COPYING"
+HREF="gfdl_2.html"><LINK
+REL="NEXT"
+TITLE="MODIFICATIONS"
+HREF="gfdl_4.html"></HEAD
+><BODY
+CLASS="SECT1"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="gfdl_2.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Appendix E. GNU Free Documentation License</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="gfdl_4.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECT1"
+><H1
+CLASS="SECT1"
+><A
+NAME="GFDL_3"
+>3. COPYING IN QUANTITY</A
+></H1
+><P
+>If you publish printed copies of the Document numbering more
+    than 100, and the Document's license notice requires Cover Texts,
+    you must enclose the copies in covers that carry, clearly and
+    legibly, all these Cover Texts: Front-Cover Texts on the front
+    cover, and Back-Cover Texts on the back cover.  Both covers must
+    also clearly and legibly identify you as the publisher of these
+    copies.  The front cover must present the full title with all
+    words of the title equally prominent and visible.  You may add
+    other material on the covers in addition.  Copying with changes
+    limited to the covers, as long as they preserve the title of the
+    Document and satisfy these conditions, can be treated as verbatim
+    copying in other respects.</P
+><P
+>If the required texts for either cover are too voluminous to
+    fit legibly, you should put the first ones listed (as many as fit
+    reasonably) on the actual cover, and continue the rest onto
+    adjacent pages.</P
+><P
+>If you publish or distribute Opaque copies of the Document
+    numbering more than 100, you must either include a
+    machine-readable Transparent copy along with each Opaque copy, or
+    state in or with each Opaque copy a publicly-accessible
+    computer-network location containing a complete Transparent copy
+    of the Document, free of added material, which the general
+    network-using public has access to download anonymously at no
+    charge using public-standard network protocols.  If you use the
+    latter option, you must take reasonably prudent steps, when you
+    begin distribution of Opaque copies in quantity, to ensure that
+    this Transparent copy will remain thus accessible at the stated
+    location until at least one year after the last time you
+    distribute an Opaque copy (directly or through your agents or
+    retailers) of that edition to the public.</P
+><P
+>It is requested, but not required, that you contact the
+    authors of the Document well before redistributing any large
+    number of copies, to give them a chance to provide you with an
+    updated version of the Document.</P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="gfdl_2.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="gfdl_4.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>VERBATIM COPYING</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="gfdl.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>MODIFICATIONS</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/gfdl_4.html b/docs/html/gfdl_4.html
new file mode 100644
index 000000000..6738204d0
--- /dev/null
+++ b/docs/html/gfdl_4.html
@@ -0,0 +1,280 @@
+<HTML
+><HEAD
+><TITLE
+>MODIFICATIONS</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="GNU Free Documentation License"
+HREF="gfdl.html"><LINK
+REL="PREVIOUS"
+TITLE="COPYING IN QUANTITY"
+HREF="gfdl_3.html"><LINK
+REL="NEXT"
+TITLE="COMBINING DOCUMENTS"
+HREF="gfdl_5.html"></HEAD
+><BODY
+CLASS="SECT1"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="gfdl_3.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Appendix E. GNU Free Documentation License</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="gfdl_5.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECT1"
+><H1
+CLASS="SECT1"
+><A
+NAME="GFDL_4"
+>4. MODIFICATIONS</A
+></H1
+><P
+>You may copy and distribute a Modified Version of the
+    Document under the conditions of sections 2 and 3 above, provided
+    that you release the Modified Version under precisely this
+    License, with the Modified Version filling the role of the
+    Document, thus licensing distribution and modification of the
+    Modified Version to whoever possesses a copy of it.  In addition,
+    you must do these things in the Modified Version:</P
+><P
+></P
+><OL
+TYPE="A"
+><LI
+><P
+>Use in the Title Page
+      (and on the covers, if any) a title distinct from that of the
+      Document, and from those of previous versions (which should, if
+      there were any, be listed in the History section of the
+      Document).  You may use the same title as a previous version if
+      the original publisher of that version gives permission.</P
+></LI
+><LI
+><P
+>List on the Title Page,
+      as authors, one or more persons or entities responsible for
+      authorship of the modifications in the Modified Version,
+      together with at least five of the principal authors of the
+      Document (all of its principal authors, if it has less than
+      five).</P
+></LI
+><LI
+><P
+>State on the Title page
+      the name of the publisher of the Modified Version, as the
+      publisher.</P
+></LI
+><LI
+><P
+>Preserve all the
+      copyright notices of the Document.</P
+></LI
+><LI
+><P
+>Add an appropriate
+      copyright notice for your modifications adjacent to the other
+      copyright notices.</P
+></LI
+><LI
+><P
+>Include, immediately
+      after the copyright notices, a license notice giving the public
+      permission to use the Modified Version under the terms of this
+      License, in the form shown in the Addendum below.</P
+></LI
+><LI
+><P
+>Preserve in that license
+      notice the full lists of Invariant Sections and required Cover
+      Texts given in the Document's license notice.</P
+></LI
+><LI
+><P
+>Include an unaltered
+      copy of this License.</P
+></LI
+><LI
+><P
+>Preserve the section
+      entitled "History", and its title, and add to it an item stating
+      at least the title, year, new authors, and publisher of the
+      Modified Version as given on the Title Page.  If there is no
+      section entitled "History" in the Document, create one stating
+      the title, year, authors, and publisher of the Document as given
+      on its Title Page, then add an item describing the Modified
+      Version as stated in the previous sentence.</P
+></LI
+><LI
+><P
+>Preserve the network
+      location, if any, given in the Document for public access to a
+      Transparent copy of the Document, and likewise the network
+      locations given in the Document for previous versions it was
+      based on.  These may be placed in the "History" section.  You
+      may omit a network location for a work that was published at
+      least four years before the Document itself, or if the original
+      publisher of the version it refers to gives permission.</P
+></LI
+><LI
+><P
+>In any section entitled
+      "Acknowledgements" or "Dedications", preserve the section's
+      title, and preserve in the section all the substance and tone of
+      each of the contributor acknowledgements and/or dedications
+      given therein.</P
+></LI
+><LI
+><P
+>Preserve all the
+      Invariant Sections of the Document, unaltered in their text and
+      in their titles.  Section numbers or the equivalent are not
+      considered part of the section titles.</P
+></LI
+><LI
+><P
+>Delete any section
+      entitled "Endorsements".  Such a section may not be included in
+      the Modified Version.</P
+></LI
+><LI
+><P
+>Do not retitle any
+      existing section as "Endorsements" or to conflict in title with
+      any Invariant Section.</P
+></LI
+></OL
+><P
+>If the Modified Version includes new front-matter sections
+    or appendices that qualify as Secondary Sections and contain no
+    material copied from the Document, you may at your option
+    designate some or all of these sections as invariant.  To do this,
+    add their titles to the list of Invariant Sections in the Modified
+    Version's license notice.  These titles must be distinct from any
+    other section titles.</P
+><P
+>You may add a section entitled "Endorsements", provided it
+    contains nothing but endorsements of your Modified Version by
+    various parties--for example, statements of peer review or that
+    the text has been approved by an organization as the authoritative
+    definition of a standard.</P
+><P
+>You may add a passage of up to five words as a Front-Cover
+    Text, and a passage of up to 25 words as a Back-Cover Text, to the
+    end of the list of Cover Texts in the Modified Version.  Only one
+    passage of Front-Cover Text and one of Back-Cover Text may be
+    added by (or through arrangements made by) any one entity.  If the
+    Document already includes a cover text for the same cover,
+    previously added by you or by arrangement made by the same entity
+    you are acting on behalf of, you may not add another; but you may
+    replace the old one, on explicit permission from the previous
+    publisher that added the old one.</P
+><P
+>The author(s) and publisher(s) of the Document do not by
+    this License give permission to use their names for publicity for
+    or to assert or imply endorsement of any Modified Version.</P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="gfdl_3.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="gfdl_5.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>COPYING IN QUANTITY</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="gfdl.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>COMBINING DOCUMENTS</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/gfdl_5.html b/docs/html/gfdl_5.html
new file mode 100644
index 000000000..9835eb4ca
--- /dev/null
+++ b/docs/html/gfdl_5.html
@@ -0,0 +1,159 @@
+<HTML
+><HEAD
+><TITLE
+>COMBINING DOCUMENTS</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="GNU Free Documentation License"
+HREF="gfdl.html"><LINK
+REL="PREVIOUS"
+TITLE="MODIFICATIONS"
+HREF="gfdl_4.html"><LINK
+REL="NEXT"
+TITLE="COLLECTIONS OF DOCUMENTS"
+HREF="gfdl_6.html"></HEAD
+><BODY
+CLASS="SECT1"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="gfdl_4.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Appendix E. GNU Free Documentation License</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="gfdl_6.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECT1"
+><H1
+CLASS="SECT1"
+><A
+NAME="GFDL_5"
+>5. COMBINING DOCUMENTS</A
+></H1
+><P
+>You may combine the Document with other documents released
+    under this License, under the terms defined in section 4 above for
+    modified versions, provided that you include in the combination
+    all of the Invariant Sections of all of the original documents,
+    unmodified, and list them all as Invariant Sections of your
+    combined work in its license notice.</P
+><P
+>The combined work need only contain one copy of this
+    License, and multiple identical Invariant Sections may be replaced
+    with a single copy.  If there are multiple Invariant Sections with
+    the same name but different contents, make the title of each such
+    section unique by adding at the end of it, in parentheses, the
+    name of the original author or publisher of that section if known,
+    or else a unique number.  Make the same adjustment to the section
+    titles in the list of Invariant Sections in the license notice of
+    the combined work.</P
+><P
+>In the combination, you must combine any sections entitled
+    "History" in the various original documents, forming one section
+    entitled "History"; likewise combine any sections entitled
+    "Acknowledgements", and any sections entitled "Dedications".  You
+    must delete all sections entitled "Endorsements."</P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="gfdl_4.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="gfdl_6.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>MODIFICATIONS</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="gfdl.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>COLLECTIONS OF DOCUMENTS</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/gfdl_6.html b/docs/html/gfdl_6.html
new file mode 100644
index 000000000..fa3f2aa82
--- /dev/null
+++ b/docs/html/gfdl_6.html
@@ -0,0 +1,149 @@
+<HTML
+><HEAD
+><TITLE
+>COLLECTIONS OF DOCUMENTS</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="GNU Free Documentation License"
+HREF="gfdl.html"><LINK
+REL="PREVIOUS"
+TITLE="COMBINING DOCUMENTS"
+HREF="gfdl_5.html"><LINK
+REL="NEXT"
+TITLE="AGGREGATION WITH INDEPENDENT WORKS"
+HREF="gfdl_7.html"></HEAD
+><BODY
+CLASS="SECT1"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="gfdl_5.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Appendix E. GNU Free Documentation License</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="gfdl_7.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECT1"
+><H1
+CLASS="SECT1"
+><A
+NAME="GFDL_6"
+>6. COLLECTIONS OF DOCUMENTS</A
+></H1
+><P
+>You may make a collection consisting of the Document and
+    other documents released under this License, and replace the
+    individual copies of this License in the various documents with a
+    single copy that is included in the collection, provided that you
+    follow the rules of this License for verbatim copying of each of
+    the documents in all other respects.</P
+><P
+>You may extract a single document from such a collection,
+    and distribute it individually under this License, provided you
+    insert a copy of this License into the extracted document, and
+    follow this License in all other respects regarding verbatim
+    copying of that document.</P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="gfdl_5.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="gfdl_7.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>COMBINING DOCUMENTS</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="gfdl.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>AGGREGATION WITH INDEPENDENT WORKS</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/gfdl_7.html b/docs/html/gfdl_7.html
new file mode 100644
index 000000000..94fad4c3c
--- /dev/null
+++ b/docs/html/gfdl_7.html
@@ -0,0 +1,153 @@
+<HTML
+><HEAD
+><TITLE
+>AGGREGATION WITH INDEPENDENT WORKS</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="GNU Free Documentation License"
+HREF="gfdl.html"><LINK
+REL="PREVIOUS"
+TITLE="COLLECTIONS OF DOCUMENTS"
+HREF="gfdl_6.html"><LINK
+REL="NEXT"
+TITLE="TRANSLATION"
+HREF="gfdl_8.html"></HEAD
+><BODY
+CLASS="SECT1"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="gfdl_6.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Appendix E. GNU Free Documentation License</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="gfdl_8.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECT1"
+><H1
+CLASS="SECT1"
+><A
+NAME="GFDL_7"
+>7. AGGREGATION WITH INDEPENDENT WORKS</A
+></H1
+><P
+>A compilation of the Document or its derivatives with other
+    separate and independent documents or works, in or on a volume of
+    a storage or distribution medium, does not as a whole count as a
+    Modified Version of the Document, provided no compilation
+    copyright is claimed for the compilation.  Such a compilation is
+    called an "aggregate", and this License does not apply to the
+    other self-contained works thus compiled with the Document, on
+    account of their being thus compiled, if they are not themselves
+    derivative works of the Document.</P
+><P
+>If the Cover Text requirement of section 3 is applicable to
+    these copies of the Document, then if the Document is less than
+    one quarter of the entire aggregate, the Document's Cover Texts
+    may be placed on covers that surround only the Document within the
+    aggregate.  Otherwise they must appear on covers around the whole
+    aggregate.</P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="gfdl_6.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="gfdl_8.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>COLLECTIONS OF DOCUMENTS</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="gfdl.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>TRANSLATION</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/gfdl_8.html b/docs/html/gfdl_8.html
new file mode 100644
index 000000000..8224c0c2c
--- /dev/null
+++ b/docs/html/gfdl_8.html
@@ -0,0 +1,148 @@
+<HTML
+><HEAD
+><TITLE
+>TRANSLATION</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="GNU Free Documentation License"
+HREF="gfdl.html"><LINK
+REL="PREVIOUS"
+TITLE="AGGREGATION WITH INDEPENDENT WORKS"
+HREF="gfdl_7.html"><LINK
+REL="NEXT"
+TITLE="TERMINATION"
+HREF="gfdl_9.html"></HEAD
+><BODY
+CLASS="SECT1"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="gfdl_7.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Appendix E. GNU Free Documentation License</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="gfdl_9.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECT1"
+><H1
+CLASS="SECT1"
+><A
+NAME="GFDL_8"
+>8. TRANSLATION</A
+></H1
+><P
+>Translation is considered a kind of modification, so you may
+    distribute translations of the Document under the terms of section
+    4.  Replacing Invariant Sections with translations requires
+    special permission from their copyright holders, but you may
+    include translations of some or all Invariant Sections in addition
+    to the original versions of these Invariant Sections.  You may
+    include a translation of this License provided that you also
+    include the original English version of this License.  In case of
+    a disagreement between the translation and the original English
+    version of this License, the original English version will
+    prevail.</P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="gfdl_7.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="gfdl_9.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>AGGREGATION WITH INDEPENDENT WORKS</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="gfdl.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>TERMINATION</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/gfdl_9.html b/docs/html/gfdl_9.html
new file mode 100644
index 000000000..b115424d4
--- /dev/null
+++ b/docs/html/gfdl_9.html
@@ -0,0 +1,145 @@
+<HTML
+><HEAD
+><TITLE
+>TERMINATION</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="GNU Free Documentation License"
+HREF="gfdl.html"><LINK
+REL="PREVIOUS"
+TITLE="TRANSLATION"
+HREF="gfdl_8.html"><LINK
+REL="NEXT"
+TITLE="FUTURE REVISIONS OF THIS LICENSE"
+HREF="gfdl_10.html"></HEAD
+><BODY
+CLASS="SECT1"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="gfdl_8.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Appendix E. GNU Free Documentation License</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="gfdl_10.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECT1"
+><H1
+CLASS="SECT1"
+><A
+NAME="GFDL_9"
+>9. TERMINATION</A
+></H1
+><P
+>You may not copy, modify, sublicense, or distribute the
+    Document except as expressly provided for under this License.  Any
+    other attempt to copy, modify, sublicense or distribute the
+    Document is void, and will automatically terminate your rights
+    under this License.  However, parties who have received copies, or
+    rights, from you under this License will not have their licenses
+    terminated so long as such parties remain in full
+    compliance.</P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="gfdl_8.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="gfdl_10.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>TRANSLATION</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="gfdl.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>FUTURE REVISIONS OF THIS LICENSE</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/gfdl_howto.html b/docs/html/gfdl_howto.html
new file mode 100644
index 000000000..8a7f15f58
--- /dev/null
+++ b/docs/html/gfdl_howto.html
@@ -0,0 +1,166 @@
+<HTML
+><HEAD
+><TITLE
+>How to use this License for your documents</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="GNU Free Documentation License"
+HREF="gfdl.html"><LINK
+REL="PREVIOUS"
+TITLE="FUTURE REVISIONS OF THIS LICENSE"
+HREF="gfdl_10.html"><LINK
+REL="NEXT"
+TITLE="Glossary"
+HREF="glossary.html"></HEAD
+><BODY
+CLASS="SECT1"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="gfdl_10.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Appendix E. GNU Free Documentation License</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="glossary.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECT1"
+><H1
+CLASS="SECT1"
+><A
+NAME="GFDL_HOWTO"
+>How to use this License for your documents</A
+></H1
+><P
+>To use this License in a document you have written, include
+    a copy of the License in the document and put the following
+    copyright and license notices just after the title page:</P
+><A
+NAME="AEN2109"
+></A
+><BLOCKQUOTE
+CLASS="BLOCKQUOTE"
+><P
+>      Copyright (c)  YEAR  YOUR NAME.
+      Permission is granted to copy, distribute and/or modify this document
+      under the terms of the GNU Free Documentation License, Version 1.1
+      or any later version published by the Free Software Foundation;
+      with the Invariant Sections being LIST THEIR TITLES, with the
+      Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+      A copy of the license is included in the section entitled "GNU
+      Free Documentation License".</P
+></BLOCKQUOTE
+><P
+>If you have no Invariant Sections, write "with no Invariant
+    Sections" instead of saying which ones are invariant.  If you have
+    no Front-Cover Texts, write "no Front-Cover Texts" instead of
+    "Front-Cover Texts being LIST"; likewise for Back-Cover
+    Texts.</P
+><P
+>If your document contains nontrivial examples of program
+    code, we recommend releasing these examples in parallel under your
+    choice of free software license, such as the GNU General Public
+    License, to permit their use in free software.</P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="gfdl_10.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="glossary.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>FUTURE REVISIONS OF THIS LICENSE</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="gfdl.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Glossary</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/glossary.html b/docs/html/glossary.html
new file mode 100644
index 000000000..35c6df076
--- /dev/null
+++ b/docs/html/glossary.html
@@ -0,0 +1,294 @@
+<HTML
+><HEAD
+><TITLE
+>Glossary</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="PREVIOUS"
+TITLE="How to use this License for your documents"
+HREF="gfdl_howto.html"></HEAD
+><BODY
+CLASS="GLOSSARY"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="gfdl_howto.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+></TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+>&nbsp;</TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="GLOSSARY"
+><H1
+><A
+NAME="GLOSSARY"
+>Glossary</A
+></H1
+><DIV
+CLASS="GLOSSDIV"
+><H1
+CLASS="GLOSSDIV"
+><A
+NAME="GLOSS_A"
+>A</A
+></H1
+><DL
+><DT
+><B
+>There are no entries for A</B
+></DT
+><DD
+><P
+></P
+></DD
+></DL
+></DIV
+><DIV
+CLASS="GLOSSDIV"
+><H1
+CLASS="GLOSSDIV"
+><A
+NAME="GLOSS_B"
+>B</A
+></H1
+><DL
+><DT
+><B
+>Bug</B
+></DT
+><DD
+><P
+>A "Bug" in Bugzilla refers to an issue entered into the database which has an associated number, assignments, comments, etc.  Many also refer to a "Ticket" or "Issue"; in this context, they are synonymous.</P
+></DD
+><DT
+><B
+>Bug Number</B
+></DT
+><DD
+><P
+>Each Bugzilla Bug is assigned a number that uniquely identifies that Bug.  The Bug associated with a Bug Number can be pulled up via a query, or easily from the very front page by typing the number in the "Find" box.</P
+></DD
+><DT
+><B
+>Bug Life Cycle</B
+></DT
+><DD
+><P
+>A Bug has stages through which it must pass before becoming a "closed bug", including acceptance, resolution, and verification.  The "Bug Life Cycle" is moderately flexible according to the needs of the organization using it, though.</P
+></DD
+></DL
+></DIV
+><DIV
+CLASS="GLOSSDIV"
+><H1
+CLASS="GLOSSDIV"
+><A
+NAME="GLOSS_I"
+>I</A
+></H1
+><DL
+><DT
+><A
+NAME="GLOSS_INFINITELOOP"
+><B
+>Infinite Loop</B
+></A
+></DT
+><DD
+><P
+><EM
+>See: </EM
+><A
+HREF="glossary.html#GLOSS_RECURSION"
+>Recursion</A
+></P
+></DD
+></DL
+></DIV
+><DIV
+CLASS="GLOSSDIV"
+><H1
+CLASS="GLOSSDIV"
+><A
+NAME="GLOSS_P"
+>P</A
+></H1
+><DL
+><DT
+><B
+>Product</B
+></DT
+><DD
+><P
+>A Product is a broad category of types of bugs.  In general, there are several Components to a Product.  A Product also defines a default Group (used for Bug Security) for all bugs entered into components beneath it.</P
+><DIV
+CLASS="EXAMPLE"
+><A
+NAME="AEN2145"
+></A
+><P
+><B
+>Example 1. A Sample Product</B
+></P
+><P
+>A company sells a software product called "X".  They also maintain some older software called "Y", and have a secret project "Z".  An effective use of Products might be to create Products "X", "Y", and "Z", each with Components "User Interface", "Database", and "Business Logic".  They might also change group permissions so that only those people who are members of Group "Z" can see components and bugs under Product "Z".</P
+></DIV
+></DD
+></DL
+></DIV
+><DIV
+CLASS="GLOSSDIV"
+><H1
+CLASS="GLOSSDIV"
+><A
+NAME="GLOSS_Q"
+>Q</A
+></H1
+><DL
+><DT
+><B
+>Q/A</B
+></DT
+><DD
+><P
+>"Q/A" is short for "Quality Assurance".  In most large software development organizations, there is a team devoted to ensuring the product meets minimum standards before shipping.  This team will also generally want to track the progress of bugs over their life cycle, thus the need for the "Q/A Contact" field in a Bug.</P
+></DD
+></DL
+></DIV
+><DIV
+CLASS="GLOSSDIV"
+><H1
+CLASS="GLOSSDIV"
+><A
+NAME="GLOSS_R"
+>R</A
+></H1
+><DL
+><DT
+><B
+>Recursion</B
+></DT
+><DD
+><P
+><EM
+>See: </EM
+><A
+HREF="glossary.html#GLOSS_INFINITELOOP"
+>Infinite Loop</A
+></P
+></DD
+></DL
+></DIV
+><DIV
+CLASS="GLOSSDIV"
+><H1
+CLASS="GLOSSDIV"
+><A
+NAME="GLOSS_Z"
+>Z</A
+></H1
+><DL
+><DT
+><B
+>Zarro Boogs Found</B
+></DT
+><DD
+><P
+>This is the cryptic response sent by Bugzilla when a query returned no results.  It is just a goofy way of saying "Zero Bugs Found".</P
+></DD
+></DL
+></DIV
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="gfdl_howto.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>&nbsp;</TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>How to use this License for your documents</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+>&nbsp;</TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>&nbsp;</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/granttables.html b/docs/html/granttables.html
new file mode 100644
index 000000000..779e9d311
--- /dev/null
+++ b/docs/html/granttables.html
@@ -0,0 +1,330 @@
+<HTML
+><HEAD
+><TITLE
+>MySQL Permissions &#38; Grant Tables</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="The Bugzilla Database"
+HREF="database.html"><LINK
+REL="PREVIOUS"
+TITLE="MySQL Bugzilla Database Introduction"
+HREF="dbdoc.html"><LINK
+REL="NEXT"
+TITLE="Cleaning up after mucking with Bugzilla"
+HREF="cleanupwork.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="dbdoc.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Appendix C. The Bugzilla Database</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="cleanupwork.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="GRANTTABLES"
+>C.3. MySQL Permissions &#38; Grant Tables</A
+></H1
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>The following portion of documentation comes from my answer to an old discussion of Keystone,
+	a cool product that does trouble-ticket tracking for IT departments.  I wrote this post to the 
+	Keystone support group regarding MySQL grant table permissions, and how to use them effectively.
+	It is badly in need of updating, as I believe MySQL has added a field or two to the grant tables 
+	since this time, but it serves as a decent introduction and troubleshooting document for grant
+	table issues.  I used Keynote to track my troubles until I discovered Bugzilla,
+	which gave me a whole new set of troubles to work on : )</P
+></BLOCKQUOTE
+></DIV
+><P
+CLASS="LITERALLAYOUT"
+>From&nbsp;matt_barnson@singletrac.com&nbsp;Wed&nbsp;Jul&nbsp;&nbsp;7&nbsp;09:00:07&nbsp;1999<br>
+Date:&nbsp;Mon,&nbsp;1&nbsp;Mar&nbsp;1999&nbsp;21:37:04&nbsp;-0700&nbsp;<br>
+From:&nbsp;Matthew&nbsp;Barnson&nbsp;matt_barnson@singletrac.com<br>
+To:&nbsp;keystone-users@homeport.org<br>
+Subject:&nbsp;[keystone-users]&nbsp;Grant&nbsp;Tables&nbsp;FAQ<br>
+<br>
+&nbsp;&nbsp;&nbsp;&nbsp;[The&nbsp;following&nbsp;text&nbsp;is&nbsp;in&nbsp;the&nbsp;"iso-8859-1"&nbsp;character&nbsp;set]<br>
+&nbsp;&nbsp;&nbsp;&nbsp;[Your&nbsp;display&nbsp;is&nbsp;set&nbsp;for&nbsp;the&nbsp;"US-ASCII"&nbsp;character&nbsp;set]<br>
+&nbsp;&nbsp;&nbsp;&nbsp;[Some&nbsp;characters&nbsp;may&nbsp;be&nbsp;displayed&nbsp;incorrectly]<br>
+<br>
+Maybe&nbsp;we&nbsp;can&nbsp;include&nbsp;this&nbsp;rambling&nbsp;message&nbsp;in&nbsp;the&nbsp;Keystone&nbsp;FAQ?&nbsp;&nbsp;It&nbsp;gets<br>
+asked&nbsp;a&nbsp;lot,&nbsp;and&nbsp;the&nbsp;only&nbsp;option&nbsp;current&nbsp;listed&nbsp;in&nbsp;the&nbsp;FAQ&nbsp;is<br>
+"--skip-grant-tables".<br>
+<br>
+Really,&nbsp;you&nbsp;can't&nbsp;go&nbsp;wrong&nbsp;by&nbsp;reading&nbsp;section&nbsp;6&nbsp;of&nbsp;the&nbsp;MySQL&nbsp;manual,&nbsp;at<br>
+http://www.mysql.com/Manual/manual.html.&nbsp;&nbsp;I&nbsp;am&nbsp;sure&nbsp;their&nbsp;description&nbsp;is<br>
+better&nbsp;than&nbsp;mine.<br>
+<br>
+MySQL&nbsp;runs&nbsp;fine&nbsp;without&nbsp;permissions&nbsp;set&nbsp;up&nbsp;correctly&nbsp;if&nbsp;you&nbsp;run&nbsp;the&nbsp;mysql<br>
+daemon&nbsp;with&nbsp;the&nbsp;"--skip-grant-tables"&nbsp;option.&nbsp;&nbsp;Running&nbsp;this&nbsp;way&nbsp;denies<br>
+access&nbsp;to&nbsp;nobody.&nbsp;&nbsp;Unfortunately,&nbsp;unless&nbsp;you've&nbsp;got&nbsp;yourself&nbsp;firewalled&nbsp;it<br>
+also&nbsp;opens&nbsp;the&nbsp;potential&nbsp;for&nbsp;abuse&nbsp;if&nbsp;someone&nbsp;knows&nbsp;you're&nbsp;running&nbsp;it.<br>
+<br>
+Additionally,&nbsp;the&nbsp;default&nbsp;permissions&nbsp;for&nbsp;MySQL&nbsp;allow&nbsp;anyone&nbsp;at&nbsp;localhost<br>
+access&nbsp;to&nbsp;the&nbsp;database&nbsp;if&nbsp;the&nbsp;database&nbsp;name&nbsp;begins&nbsp;with&nbsp;"test_"&nbsp;or&nbsp;is&nbsp;named<br>
+"test"&nbsp;(i.e.&nbsp;"test_keystone").&nbsp;&nbsp;You&nbsp;can&nbsp;change&nbsp;the&nbsp;name&nbsp;of&nbsp;your&nbsp;database&nbsp;in<br>
+the&nbsp;keystone.conf&nbsp;file&nbsp;($sys_dbname).&nbsp;&nbsp;This&nbsp;is&nbsp;the&nbsp;way&nbsp;I&nbsp;am&nbsp;doing&nbsp;it&nbsp;for<br>
+some&nbsp;of&nbsp;my&nbsp;databases,&nbsp;and&nbsp;it&nbsp;works&nbsp;fine.<br>
+<br>
+The&nbsp;methods&nbsp;described&nbsp;below&nbsp;assume&nbsp;you're&nbsp;running&nbsp;MySQL&nbsp;on&nbsp;the&nbsp;same&nbsp;box&nbsp;as<br>
+your&nbsp;webserver,&nbsp;and&nbsp;that&nbsp;you&nbsp;don't&nbsp;mind&nbsp;if&nbsp;your&nbsp;$sys_dbuser&nbsp;for&nbsp;Keystone&nbsp;has<br>
+superuser&nbsp;access.&nbsp;&nbsp;See&nbsp;near&nbsp;the&nbsp;bottom&nbsp;of&nbsp;this&nbsp;message&nbsp;for&nbsp;a&nbsp;description&nbsp;of<br>
+what&nbsp;each&nbsp;field&nbsp;does.<br>
+<br>
+Method&nbsp;#1:<br>
+<br>
+1.&nbsp;&nbsp;cd&nbsp;/var/lib<br>
+	#location&nbsp;where&nbsp;you'll&nbsp;want&nbsp;to&nbsp;run&nbsp;/usr/bin/mysql_install_db&nbsp;shell<br>
+script&nbsp;from&nbsp;to&nbsp;get&nbsp;it&nbsp;to&nbsp;work.<br>
+<br>
+2.&nbsp;&nbsp;ln&nbsp;-s&nbsp;mysql&nbsp;data&nbsp;&nbsp;<br>
+	#&nbsp;soft&nbsp;links&nbsp;the&nbsp;"mysql"&nbsp;directory&nbsp;to&nbsp;"data",&nbsp;which&nbsp;is&nbsp;what<br>
+mysql_install_db&nbsp;expects.&nbsp;&nbsp;Alternately,&nbsp;you&nbsp;can&nbsp;edit&nbsp;mysql_install_db&nbsp;and<br>
+change&nbsp;all&nbsp;the&nbsp;"./data"&nbsp;references&nbsp;to&nbsp;"./mysql".<br>
+<br>
+3.&nbsp;&nbsp;Edit&nbsp;/usr/bin/mysql_install_db&nbsp;with&nbsp;your&nbsp;favorite&nbsp;text&nbsp;editor&nbsp;(vi,<br>
+emacs,&nbsp;jot,&nbsp;pico,&nbsp;etc.)<br>
+A)&nbsp;&nbsp;Copy&nbsp;the&nbsp;"INSERT&nbsp;INTO&nbsp;db&nbsp;VALUES<br>
+('%','test\_%','','Y','Y','Y','Y','Y','Y');"&nbsp;and&nbsp;paste&nbsp;it&nbsp;immediately&nbsp;after<br>
+itself.&nbsp;&nbsp;Chage&nbsp;the&nbsp;'test\_%'&nbsp;value&nbsp;to&nbsp;'keystone',&nbsp;or&nbsp;the&nbsp;value&nbsp;of<br>
+$sys_dbname&nbsp;in&nbsp;keystone.conf.<br>
+B)&nbsp;&nbsp;If&nbsp;you&nbsp;are&nbsp;running&nbsp;your&nbsp;keystone&nbsp;database&nbsp;with&nbsp;any&nbsp;user,&nbsp;you'll&nbsp;need&nbsp;to<br>
+copy&nbsp;the&nbsp;"INSERT&nbsp;INTO&nbsp;user&nbsp;VALUES<br>
+('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');"&nbsp;line&nbsp;after<br>
+itself&nbsp;and&nbsp;change&nbsp;'root'&nbsp;to&nbsp;the&nbsp;name&nbsp;of&nbsp;the&nbsp;keystone&nbsp;database&nbsp;user<br>
+($sys_dbuser)&nbsp;in&nbsp;keystone.conf.<br>
+<br>
+	#&nbsp;adds&nbsp;entries&nbsp;to&nbsp;the&nbsp;script&nbsp;to&nbsp;create&nbsp;grant&nbsp;tables&nbsp;for&nbsp;specific<br>
+hosts&nbsp;and&nbsp;users.&nbsp;&nbsp;The&nbsp;user&nbsp;you&nbsp;set&nbsp;up&nbsp;has&nbsp;super-user&nbsp;access&nbsp;($sys_dbuser)&nbsp;--<br>
+you&nbsp;may&nbsp;or&nbsp;may&nbsp;not&nbsp;want&nbsp;this.&nbsp;&nbsp;The&nbsp;layout&nbsp;of&nbsp;mysql_install_db&nbsp;is&nbsp;really&nbsp;very<br>
+uncomplicated.<br>
+<br>
+4.&nbsp;&nbsp;/usr/bin/mysqladmin&nbsp;shutdown<br>
+	#&nbsp;ya&nbsp;gotta&nbsp;shut&nbsp;it&nbsp;down&nbsp;before&nbsp;you&nbsp;can&nbsp;reinstall&nbsp;the&nbsp;grant&nbsp;tables!<br>
+<br>
+5.&nbsp;&nbsp;rm&nbsp;-i&nbsp;/var/lib/mysql/mysql/*.IS?'&nbsp;and&nbsp;answer&nbsp;'Y'&nbsp;to&nbsp;the&nbsp;deletion<br>
+questions.<br>
+	#&nbsp;nuke&nbsp;your&nbsp;current&nbsp;grant&nbsp;tables.&nbsp;&nbsp;This&nbsp;WILL&nbsp;NOT&nbsp;delete&nbsp;any&nbsp;other<br>
+databases&nbsp;than&nbsp;your&nbsp;grant&nbsp;tables.<br>
+<br>
+6.&nbsp;&nbsp;/usr/bin/mysql_install_db<br>
+	#&nbsp;run&nbsp;the&nbsp;script&nbsp;you&nbsp;just&nbsp;edited&nbsp;to&nbsp;install&nbsp;your&nbsp;new&nbsp;grant&nbsp;tables.<br>
+<br>
+7.&nbsp;&nbsp;mysqladmin&nbsp;-u&nbsp;root&nbsp;password&nbsp;(new_password)&nbsp;&nbsp;<br>
+	#&nbsp;change&nbsp;the&nbsp;root&nbsp;MySQL&nbsp;password,&nbsp;or&nbsp;else&nbsp;anyone&nbsp;on&nbsp;localhost&nbsp;can<br>
+login&nbsp;to&nbsp;MySQL&nbsp;as&nbsp;root&nbsp;and&nbsp;make&nbsp;changes.&nbsp;&nbsp;You&nbsp;can&nbsp;skip&nbsp;this&nbsp;step&nbsp;if&nbsp;you&nbsp;want<br>
+keystone&nbsp;to&nbsp;connect&nbsp;as&nbsp;root&nbsp;with&nbsp;no&nbsp;password.<br>
+<br>
+8.&nbsp;&nbsp;mysqladmin&nbsp;-u&nbsp;(webserver_user_name)&nbsp;password&nbsp;(new_password)&nbsp;&nbsp;<br>
+	#&nbsp;change&nbsp;the&nbsp;password&nbsp;of&nbsp;the&nbsp;$sys_dbuser.&nbsp;&nbsp;Note&nbsp;that&nbsp;you&nbsp;will&nbsp;need<br>
+to&nbsp;change&nbsp;the&nbsp;password&nbsp;in&nbsp;the&nbsp;keystone.conf&nbsp;file&nbsp;as&nbsp;well&nbsp;in&nbsp;$sys_dbpasswd,<br>
+and&nbsp;if&nbsp;your&nbsp;permissions&nbsp;are&nbsp;set&nbsp;up&nbsp;incorrectly&nbsp;anybody&nbsp;can&nbsp;type&nbsp;the&nbsp;URL&nbsp;to<br>
+your&nbsp;keystone.conf&nbsp;file&nbsp;and&nbsp;get&nbsp;the&nbsp;password.&nbsp;&nbsp;Not&nbsp;that&nbsp;this&nbsp;will&nbsp;help&nbsp;them<br>
+much&nbsp;if&nbsp;your&nbsp;permissions&nbsp;are&nbsp;set&nbsp;to&nbsp;@localhost.<br>
+<br>
+<br>
+<br>
+Method&nbsp;#2:&nbsp;&nbsp;easier,&nbsp;but&nbsp;a&nbsp;pain&nbsp;reproducing&nbsp;if&nbsp;you&nbsp;have&nbsp;to&nbsp;delete&nbsp;your&nbsp;grant<br>
+tables.&nbsp;&nbsp;This&nbsp;is&nbsp;the&nbsp;"recommended"&nbsp;method&nbsp;for&nbsp;altering&nbsp;grant&nbsp;tables&nbsp;in<br>
+MySQL.&nbsp;&nbsp;I&nbsp;don't&nbsp;use&nbsp;it&nbsp;because&nbsp;I&nbsp;like&nbsp;the&nbsp;other&nbsp;way&nbsp;:)<br>
+<br>
+shell&#62;&nbsp;mysql&nbsp;--user=root&nbsp;keystone<br>
+<br>
+mysql&#62;&nbsp;GRANT<br>
+SELECT,INSERT,UPDATE,DELETE,INDEX,ALTER,CREATE,DROP,RELOAD,SHUTDOWN,PROCESS,<br>
+FILE,<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ON&nbsp;keystone.*<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TO&nbsp;&#60;$sys_dbuser&nbsp;name&#62;@localhost<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IDENTIFIED&nbsp;BY&nbsp;'(password)'<br>
+	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WITH&nbsp;GRANT&nbsp;OPTION;<br>
+<br>
+OR<br>
+<br>
+mysql&#62;&nbsp;GRANT&nbsp;ALL&nbsp;PRIVELEGES&nbsp;<br>
+		ON&nbsp;keystone.*<br>
+		TO&nbsp;&#60;$sys_dbuser&nbsp;name&#62;@localhost<br>
+		IDENTIFIED&nbsp;BY&nbsp;'(password)'<br>
+		WITH&nbsp;GRANT&nbsp;OPTION;<br>
+<br>
+	#&nbsp;this&nbsp;grants&nbsp;the&nbsp;required&nbsp;permissions&nbsp;to&nbsp;the&nbsp;keystone&nbsp;($sys_dbuser)<br>
+account&nbsp;defined&nbsp;in&nbsp;keystone.conf.&nbsp;&nbsp;However,&nbsp;if&nbsp;you&nbsp;are&nbsp;runnning&nbsp;many<br>
+different&nbsp;MySQL-based&nbsp;apps,&nbsp;as&nbsp;we&nbsp;are,&nbsp;it's&nbsp;generally&nbsp;better&nbsp;to&nbsp;edit&nbsp;the<br>
+mysql_install_db&nbsp;script&nbsp;to&nbsp;be&nbsp;able&nbsp;to&nbsp;quickly&nbsp;reproduce&nbsp;your&nbsp;permissions<br>
+structure&nbsp;again.&nbsp;&nbsp;Note&nbsp;that&nbsp;the&nbsp;FILE&nbsp;privelege&nbsp;and&nbsp;WITH&nbsp;GRANT&nbsp;OPTION&nbsp;may&nbsp;not<br>
+be&nbsp;in&nbsp;your&nbsp;best&nbsp;interest&nbsp;to&nbsp;include.<br>
+<br>
+<br>
+GRANT&nbsp;TABLE&nbsp;FIELDS&nbsp;EXPLANATION:<br>
+Quick&nbsp;syntax&nbsp;summary:&nbsp;&nbsp;"%"&nbsp;in&nbsp;MySQL&nbsp;is&nbsp;a&nbsp;wildcard.&nbsp;&nbsp;I.E.,&nbsp;if&nbsp;you&nbsp;are<br>
+defining&nbsp;your&nbsp;DB&nbsp;table&nbsp;and&nbsp;in&nbsp;the&nbsp;'host'&nbsp;field&nbsp;and&nbsp;enter&nbsp;'%',&nbsp;that&nbsp;means<br>
+that&nbsp;any&nbsp;host&nbsp;can&nbsp;access&nbsp;that&nbsp;database.&nbsp;&nbsp;Of&nbsp;course,&nbsp;that&nbsp;host&nbsp;must&nbsp;also&nbsp;have<br>
+a&nbsp;valid&nbsp;db&nbsp;user&nbsp;in&nbsp;order&nbsp;to&nbsp;do&nbsp;anything&nbsp;useful.&nbsp;&nbsp;'db'=name&nbsp;of&nbsp;database.&nbsp;&nbsp;In<br>
+our&nbsp;case,&nbsp;it&nbsp;should&nbsp;be&nbsp;"keystone".&nbsp;&nbsp;"user"&nbsp;should&nbsp;be&nbsp;your&nbsp;"$sys_dbuser"<br>
+defined&nbsp;in&nbsp;keystone.conf.&nbsp;&nbsp;Note&nbsp;that&nbsp;you&nbsp;CANNOT&nbsp;add&nbsp;or&nbsp;change&nbsp;a&nbsp;password&nbsp;by<br>
+using&nbsp;the&nbsp;"INSERT&nbsp;INTO&nbsp;db&nbsp;(X)"&nbsp;command&nbsp;--&nbsp;you&nbsp;must&nbsp;change&nbsp;it&nbsp;with&nbsp;the&nbsp;mysql<br>
+-u&nbsp;command&nbsp;as&nbsp;defined&nbsp;above.&nbsp;&nbsp;Passwords&nbsp;are&nbsp;stored&nbsp;encrypted&nbsp;in&nbsp;the&nbsp;MySQL<br>
+database,&nbsp;and&nbsp;if&nbsp;you&nbsp;try&nbsp;to&nbsp;enter&nbsp;it&nbsp;directly&nbsp;into&nbsp;the&nbsp;table&nbsp;they&nbsp;will&nbsp;not<br>
+match.<br>
+<br>
+TABLE:&nbsp;&nbsp;USER.&nbsp;&nbsp;Everything&nbsp;after&nbsp;"password"&nbsp;is&nbsp;a&nbsp;privelege&nbsp;granted&nbsp;(Y/N).<br>
+This&nbsp;table&nbsp;controls&nbsp;individual&nbsp;user&nbsp;global&nbsp;access&nbsp;rights.<br>
+<br>
+'host','user','password','select','insert','update','delete','index','alter'<br>
+,'create','drop','grant','reload','shutdown','process','file'<br>
+<br>
+TABLE:&nbsp;&nbsp;DB.&nbsp;&nbsp;This&nbsp;controls&nbsp;access&nbsp;of&nbsp;USERS&nbsp;to&nbsp;databases.<br>
+<br>
+'host','db','user','select','insert','update','delete','index','alter','crea<br>
+te','drop','grant'<br>
+<br>
+TABLE:&nbsp;&nbsp;HOST.&nbsp;&nbsp;This&nbsp;controls&nbsp;which&nbsp;HOSTS&nbsp;are&nbsp;allowed&nbsp;what&nbsp;global&nbsp;access<br>
+rights.&nbsp;&nbsp;Note&nbsp;that&nbsp;the&nbsp;HOST&nbsp;table,&nbsp;USER&nbsp;table,&nbsp;and&nbsp;DB&nbsp;table&nbsp;are&nbsp;very&nbsp;closely<br>
+connected&nbsp;--&nbsp;if&nbsp;an&nbsp;authorized&nbsp;USER&nbsp;attempts&nbsp;an&nbsp;SQL&nbsp;request&nbsp;from&nbsp;an<br>
+unauthorized&nbsp;HOST,&nbsp;she's&nbsp;denied.&nbsp;&nbsp;If&nbsp;a&nbsp;request&nbsp;from&nbsp;an&nbsp;authorized&nbsp;HOST&nbsp;is<br>
+not&nbsp;an&nbsp;authorized&nbsp;USER,&nbsp;it&nbsp;is&nbsp;denied.&nbsp;&nbsp;If&nbsp;a&nbsp;globally&nbsp;authorized&nbsp;USER&nbsp;does<br>
+not&nbsp;have&nbsp;rights&nbsp;to&nbsp;a&nbsp;certain&nbsp;DB,&nbsp;she's&nbsp;denied.&nbsp;&nbsp;Get&nbsp;the&nbsp;picture?<br>
+<br>
+'host','db','select','insert','update','delete','index','alter','create','dr<br>
+op','grant'<br>
+<br>
+<br>
+You&nbsp;should&nbsp;now&nbsp;have&nbsp;a&nbsp;working&nbsp;knowledge&nbsp;of&nbsp;MySQL&nbsp;grant&nbsp;tables.&nbsp;&nbsp;If&nbsp;there&nbsp;is<br>
+anything&nbsp;I've&nbsp;left&nbsp;out&nbsp;of&nbsp;this&nbsp;answer&nbsp;that&nbsp;you&nbsp;feel&nbsp;is&nbsp;pertinent,&nbsp;or&nbsp;if&nbsp;my<br>
+instructions&nbsp;don't&nbsp;work&nbsp;for&nbsp;you,&nbsp;please&nbsp;let&nbsp;me&nbsp;know&nbsp;and&nbsp;I'll&nbsp;re-post&nbsp;this<br>
+letter&nbsp;again,&nbsp;corrected.&nbsp;&nbsp;I&nbsp;threw&nbsp;it&nbsp;together&nbsp;one&nbsp;night&nbsp;out&nbsp;of&nbsp;exasperation<br>
+for&nbsp;all&nbsp;the&nbsp;newbies&nbsp;who&nbsp;don't&nbsp;know&nbsp;squat&nbsp;about&nbsp;MySQL&nbsp;yet,&nbsp;so&nbsp;it&nbsp;is&nbsp;almost<br>
+guaranteed&nbsp;to&nbsp;have&nbsp;errors.<br>
+<br>
+Once&nbsp;again,&nbsp;you&nbsp;can't&nbsp;go&nbsp;wrong&nbsp;by&nbsp;reading&nbsp;section&nbsp;6&nbsp;of&nbsp;the&nbsp;MySQL&nbsp;manual.&nbsp;&nbsp;It<br>
+is&nbsp;more&nbsp;detailed&nbsp;than&nbsp;I!<br>
+http://www.mysql.com/Manual/manual.html.<br>
+<br>
+----------------------------------------------------------------------------<br>
+10/12/2000<br>
+Matthew&nbsp;sent&nbsp;in&nbsp;some&nbsp;mail&nbsp;with&nbsp;updated&nbsp;contact&nbsp;information:<br>
+NEW&nbsp;CONTACT&nbsp;INFORMATION:&nbsp;<br>
+<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;------------------------&nbsp;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Matthew&nbsp;P.&nbsp;Barnson&nbsp;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Manager,&nbsp;Systems&nbsp;Administration&nbsp;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Excite@Home&nbsp;Business&nbsp;Applications&nbsp;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mbarnson@excitehome.net&nbsp;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(801)234-8300&nbsp;<br>
+<br>
+<br>
+&nbsp;&nbsp;&nbsp;&nbsp;</P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="dbdoc.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="cleanupwork.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>MySQL Bugzilla Database Introduction</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="database.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Cleaning up after mucking with Bugzilla</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/how.html b/docs/html/how.html
new file mode 100644
index 000000000..60ad56e55
--- /dev/null
+++ b/docs/html/how.html
@@ -0,0 +1,931 @@
+<HTML
+><HEAD
+><TITLE
+>How do I use Bugzilla?</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="Using Bugzilla"
+HREF="using.html"><LINK
+REL="PREVIOUS"
+TITLE="Why Should We Use Bugzilla?"
+HREF="why.html"><LINK
+REL="NEXT"
+TITLE="What's in it for me?"
+HREF="init4me.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="why.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Chapter 4. Using Bugzilla</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="init4me.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="HOW"
+>4.3. How do I use Bugzilla?</A
+></H1
+><TABLE
+BORDER="0"
+WIDTH="100%"
+CELLSPACING="0"
+CELLPADDING="0"
+CLASS="EPIGRAPH"
+><TR
+><TD
+WIDTH="45%"
+>&nbsp;</TD
+><TD
+WIDTH="45%"
+ALIGN="LEFT"
+VALIGN="TOP"
+><I
+><P
+><I
+>Hey!  I'm Woody!  Howdy, Howdy, Howdy!</I
+></P
+></I
+></TD
+></TR
+></TABLE
+><P
+>      Bugzilla is a large, complex system.  Describing how to use it
+      requires some time.  If you are only interested in installing or administering
+      a Bugzilla installation, please consult the Installing and Administering
+      Bugzilla portions of this Guide.  This section is principally aimed towards
+      developing end-user mastery of Bugzilla, so you may fully enjoy the benefits
+      afforded by using this reliable open-source bug-tracking software.
+    </P
+><P
+>      Throughout this portion of the Guide, we will refer to user account
+      options available at the Bugzilla test installation,
+      <A
+HREF="http://landfill.tequilarista.org/"
+TARGET="_top"
+>      landfill.tequilarista.org</A
+>.
+      <DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	  Some people have run into difficulties completing this tutorial.  If
+	  you run into problems, please check the updated, online documentation available
+	  at <A
+HREF="http://www.trilobyte.net/barnsons/"
+TARGET="_top"
+>http://www.trilobyte.net/barnsons</A
+>.
+	  If you're still stumped, please subscribe to the newsgroup and provide details of exactly
+	  what's stumping you!  If enough people complain, I'll have to fix it in the next
+	  version of this Guide.  You can subscribe to the newsgroup at
+	  <A
+HREF="news://news.mozilla.org/netscape.public.mozilla.webtools"
+TARGET="_top"
+>	  news://news.mozilla.org/netscape.public.mozilla.webtools</A
+>
+	</P
+></BLOCKQUOTE
+></DIV
+>
+      Although Landfill serves as a great introduction to Bugzilla, it does not offer
+      all the options you would have as a user on your own installation of Bugzilla,
+      nor can it do more than serve as a general introduction to Bugzilla.  Additionally,
+      Landfill often runs cutting-edge versions of Bugzilla for testing, so some things
+      may work slightly differently than mentioned here.
+    </P
+><DIV
+CLASS="SECTION"
+><H2
+CLASS="SECTION"
+><A
+NAME="MYACCOUNT"
+>4.3.1. Create a Bugzilla Account</A
+></H2
+><P
+>	First thing's first!  If you want to use Bugzilla, first you need to create
+	an account.  Consult with the administrator responsible for your installation
+	of Bugzilla for the URL you should use to access it.
+	If you're test-driving the end-user Bugzilla experience, use this URL:
+	<A
+HREF="http://landfill.tequilarista.org/mozilla/bugzilla/"
+TARGET="_top"
+>	  http://landfill.tequilarista.org/mozilla/bugzilla/</A
+>
+      </P
+><P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>	    Click the "Open a new Bugzilla account" link.
+	  </P
+></LI
+><LI
+><P
+>	    Enter your "E-mail address" and "Real Name" (or whatever name you want to call yourself)
+	    in the spaces provided, then select the "Create Account" button.
+	  </P
+></LI
+><LI
+><P
+>	    Within 5-10 minutes, you should receive an email to the address you provided above,
+	    which contains your login name (generally the same as the email address), and
+	    a password you can use to access your account.  This password is randomly generated,
+	    and should be changed at your nearest opportunity (we'll go into how to do it later).
+	  </P
+></LI
+><LI
+><P
+>	    Click the "Log In" link in the yellow area at the bottom of the page in your browser,
+	    then enter your "E-mail address" and "Password" you just received into the spaces provided,
+	    and select "Login".
+	    <DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>		If you ever forget your password, you can come back to this page, enter your
+		"E-mail address", then select the "E-mail me a password" button to have your password
+		mailed to you again so that you can login.
+	      </P
+></BLOCKQUOTE
+></DIV
+>
+	    <DIV
+CLASS="CAUTION"
+><P
+></P
+><TABLE
+CLASS="CAUTION"
+BORDER="1"
+WIDTH="90%"
+><TR
+><TD
+ALIGN="CENTER"
+><B
+>Caution</B
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+><P
+>		Many modern browsers include an "Auto-Complete" or "Form Fill" feature to
+		remember the user names and passwords you type in at many sites.  Unfortunately,
+		sometimes they attempt to "guess" what you will put in as your password, and guess
+		wrong.  If you notice a text box is already filled out, please overwrite the contents
+		of the text box so you can be sure to input the correct information.
+	      </P
+></TD
+></TR
+></TABLE
+></DIV
+>
+	  </P
+></LI
+></OL
+><P
+>	Congratulations!  If you followed these directions, you now are the
+	proud owner of a user account on landfill.tequilarista.org (Landfill) or
+	your local Bugzilla install.  You should now see in your browser a
+	page called the "Bugzilla Query Page".  It may look daunting, but
+	with this Guide to walk you through it, you will master it in no time.
+      </P
+></DIV
+><DIV
+CLASS="SECTION"
+><H2
+CLASS="SECTION"
+><A
+NAME="QUERY"
+>4.3.2. The Bugzilla Query Page</A
+></H2
+><P
+>	The Bugzilla Query Page is the heart and soul of Bugzilla.  It is the master
+	interface where you can find any bug report, comment, or patch currently in the Bugzilla
+	system.  We'll go into how to create your own bug report later on.
+      </P
+><P
+>	There are efforts underway to simplify query usage.  If you have a local installation
+	of Bugzilla 2.12 or higher, you should have "quicksearch.html" available
+	to use and simplify your searches.  There is also, or shortly will be, a helper
+	for the query interface, called "queryhelp.cgi".  Landfill tends to run the latest code,
+	so these two utilities should be available there for your perusal.
+      </P
+><P
+>	At this point, please visit the main Bugzilla site,
+	<A
+HREF="http://bugzilla.mozilla.org/query.cgi"
+TARGET="_top"
+>	bugzilla.mozilla.org</A
+>, to see a more fleshed-out query page.
+      </P
+><P
+>	The first thing you need to notice about the Bugzilla Query Page is that
+	nearly every box you see on your screen has a hyperlink nearby, explaining what
+	it is or what it does.  Near the upper-left-hand corner of your browser window
+	you should see the word "Status" underlined.  Select it.
+      </P
+><P
+>	Notice the page that popped up?  Every underlined word you see on your screen
+	is a hyperlink that will take you to context-sensitive help.
+	Click around for a while, and learn what everything here does.  To return
+	to the query interface after pulling up a help page, use the "Back" button in
+	your browser.
+      </P
+><P
+>	I'm sure that after checking out the online help, you are now an Expert
+	on the Bugzilla Query Page.  If, however, you feel you haven't mastered it yet,
+	let me walk you through making a few successful queries to find out what there
+	are in the Bugzilla bug-tracking system itself.
+      </P
+><P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>	    Ensure you are back on the "Bugzilla Query Page"
+	    Do nothing in the boxes marked "Status", "Resolution", "Platform", "OpSys",
+	    "Priority", or "Severity".  The default query for "Status" is to find all bugs that
+	    are NEW, ASSIGNED, or REOPENED, which is what we want.  If you don't select anything
+	    in the other 5 scrollboxes there, then you are saying that "any of these are OK";
+	    we're not locking ourselves into only finding bugs on the "DEC" Platform, or "Windows 95"
+	    OpSys (Operating System).  You're smart, I think you have it figured out.
+	  </P
+><P
+>	    Basically, selecting <EM
+>anything</EM
+> on the query page narrows your search
+	    down.  Leaving stuff unselected, or text boxes unfilled, broadens your search!
+	  </P
+></LI
+><LI
+><P
+>	    You see the box immediately below the top six boxes that contains an "Email" text box, 
+	    with the words "matching as", a drop-down selection box, then some checkboxes with
+	    "Assigned To" checked by default?  This allows you to filter your search down based upon
+	    email address.  Let's put my email address in there, and see what happens.
+	  </P
+><P
+>	    Type "barnboy@trilobyte.net" in the top Email text box.
+	  </P
+></LI
+><LI
+><P
+>	    Let's narrow the search some more.  Scroll down until you find the box with the word
+	    "Program" over the top of it.  This is where we can narrow our search down to only
+	    specific products (software programs or product lines) in our Bugzilla database.
+	    Please notice the box is a <EM
+>scrollbox</EM
+>.  Using the down arrow on the
+	    scrollbox, scroll down until you can see an entry called "Webtools".  Select this entry.
+	  </P
+></LI
+><LI
+><P
+>	    Did you notice that some of the boxes to the right changed when you selected "Webtools"?
+	    Every Program (or Product) has different Versions, Components, and Target Milestones associated
+	    with it.  A "Version" is the number of a software program.
+	    <DIV
+CLASS="EXAMPLE"
+><A
+NAME="AEN1095"
+></A
+><P
+><B
+>Example 4-1. Some Famous Software Versions</B
+></P
+><DIV
+CLASS="INFORMALEXAMPLE"
+><A
+NAME="AEN1097"
+></A
+><P
+></P
+><P
+>		  Do you remember the hype in 1995 when Microsoft Windows 95(r) was released?
+		  It may have been several years
+		  ago, but Microsoft(tm) spent over $300 Million advertising this new Version of their
+		  software.  Three years later, they released Microsoft Windows 98(r),
+		  another new version, to great fanfare, and then in 2000 quietly 
+		  released Microsoft Windows ME(Millenium Edition)(r). 
+		</P
+><P
+>		  Software "Versions" help a manufacturer differentiate
+		  their current product from their
+		  previous products.  Most do not identify their products
+		  by the year they were released.
+		  Instead, the "original" version of their software will
+		  often be numbered "1.0", with
+		  small bug-fix releases on subsequent tenths of a digit.  In most cases, it's not
+		  a decimal number; for instance, often 1.9 is an <EM
+>older</EM
+> version
+		  of the software than 1.11,
+		  but is a <EM
+>newer</EM
+> version than 1.1.1.
+		</P
+><P
+>		  In general, a "Version" in Bugzilla should refer to 
+		  <EM
+>released</EM
+>
+		  products, not products that have not yet been released 
+		  to the public.  Forthcoming products
+		  are what the Target Milestone field is for.
+		</P
+><P
+></P
+></DIV
+></DIV
+>
+	  </P
+><P
+>	    A "Component" is a piece of a Product.
+	    It may be a standalone program, or some other logical
+	    division of a Product or Program. 
+	    Normally, a Component has a single Owner, who is responsible
+	    for overseeing efforts to improve that Component.
+	    <DIV
+CLASS="EXAMPLE"
+><A
+NAME="AEN1105"
+></A
+><P
+><B
+>Example 4-2. Mozilla Webtools Components</B
+></P
+><DIV
+CLASS="INFORMALEXAMPLE"
+><A
+NAME="AEN1107"
+></A
+><P
+></P
+><P
+>		  Mozilla's "Webtools" Product is composed of several pieces (Components):
+		  <P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+><EM
+>Bonsai</EM
+>,
+		      a tool to show recent changes to Mozilla</TD
+></TR
+><TR
+><TD
+><EM
+>Bugzilla</EM
+>,
+		      a defect-tracking tool</TD
+></TR
+><TR
+><TD
+><EM
+>Build</EM
+>,
+		      a tool to automatically compile source code
+		      into machine-readable form</TD
+></TR
+><TR
+><TD
+><EM
+>Despot</EM
+>,
+		      a program that controls access to the other Webtools</TD
+></TR
+><TR
+><TD
+><EM
+>LXR</EM
+>,
+		      a utility that automatically marks up text files
+		    to make them more readable</TD
+></TR
+><TR
+><TD
+><EM
+>MozBot</EM
+>,
+		      a "robot" that announces changes to Mozilla in Chat</TD
+></TR
+><TR
+><TD
+><EM
+>TestManager</EM
+>,
+		      a tool to help find bugs in Mozilla</TD
+></TR
+><TR
+><TD
+><EM
+>Tinderbox</EM
+>,
+		      which displays reports from Build</TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+>
+		</P
+><P
+>		  A different person is responsible for each of these Components.
+		  Tara Hernandez keeps
+		  the "Bugzilla" component up-to-date.
+		</P
+><P
+></P
+></DIV
+></DIV
+>
+	  </P
+><P
+>	    A "Milestone", or "Target Milestone" is a often a planned future "Version" of a
+	    product.  In many cases, though, Milestones simply represent significant dates for
+	    a developer.  Having certain features in your Product is frequently
+	    tied to revenue (money)
+	    the developer will receive if the features work by the time she 
+	    reaches the Target Milestone.
+	    Target Milestones are a great tool to organize your time.
+	    If someone will pay you $100,000 for
+	    incorporating certain features by a certain date,
+	    those features by that Milestone date become
+	    a very high priority.  Milestones tend to be highly malleable creatures,
+	    though, that appear
+	    to be in reach but are out of reach by the time the important day arrives.
+	  </P
+><P
+>	    The Bugzilla Project has set up Milestones for future 
+	    Bugzilla versions 2.14, 2.16, 2.18, 3.0, etc.  However,
+	    a Target Milestone can just as easily be a specific date,
+	    code name, or weird alphanumeric
+	    combination, like "M19".
+	  </P
+></LI
+><LI
+><P
+>	    OK, now let's select the "Bugzilla" component from its scrollbox.
+	  </P
+></LI
+><LI
+><P
+>	    Skip down the page a bit -- do you see the "submit query" button?
+	    Select it, and let's run
+	    this query!
+	  </P
+></LI
+><LI
+><P
+>	    Congratulations!  You've completed your first Query, and have before you the Bug List
+	    of the author of this Guide, Matthew P. Barnson (barnboy@trilobyte.net).  If I'm
+	    doing well,
+	    you'll have a cryptic "Zarro Boogs Found" message on your screen.  It is just
+	    a happy hacker's way of saying "Zero Bugs Found".  However, I am fairly certain I will
+	    always have some bugs assigned to me that aren't done yet,
+	    so you won't often see that message!
+	  </P
+></LI
+></OL
+><P
+>	I encourage you to click the bug numbers in the left-hand column and examine
+	my bugs.  Also notice that if you click the underlined 
+	links near the top of this page, they do
+	not take you to context-sensitive help here,
+	but instead sort the columns of bugs on the screen!
+	When you need to sort your bugs by priority, severity,
+	or the people they are assigned to, this
+	is a tremendous timesaver.
+      </P
+><P
+>	A couple more interesting things about the Bug List page:
+	<P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+><EM
+>Change Columns</EM
+>:
+	    by selecting this link, you can show all kinds
+	    of information in the Bug List</TD
+></TR
+><TR
+><TD
+><EM
+>Change several bugs at once</EM
+>:
+	    If you have sufficient rights to change all
+	    the bugs shown in the Bug List, you can mass-modify them.
+	    This is a big time-saver.</TD
+></TR
+><TR
+><TD
+><EM
+>Send mail to bug owners</EM
+>:
+	    If you have many related bugs, you can request
+	    an update from every person who owns the bugs in
+	    the Bug List asking them the status.</TD
+></TR
+><TR
+><TD
+><EM
+>Edit this query</EM
+>:
+	    If you didn't get exactly the results you were looking for,
+	    you can return to the Query page through this link and make
+	    small revisions to the query you just made so
+	    you get more accurate results.</TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+>
+      </P
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	  There are many more options to the Bugzilla Query Page 
+	  and the Bug List than I have shown you.
+	  But this should be enough for you to learn to get around.
+	  I encourage you to check out the
+	  <A
+HREF="http://www.mozilla.org/bugs/"
+TARGET="_top"
+>Bugzilla Home Page</A
+>
+	  to learn about the Anatomy
+	  and Life Cycle of a Bug before continuing.
+	</P
+></BLOCKQUOTE
+></DIV
+></DIV
+><DIV
+CLASS="SECTION"
+><H2
+CLASS="SECTION"
+><A
+NAME="BUGREPORTS"
+>4.3.3. Creating and Managing Bug Reports</A
+></H2
+><TABLE
+BORDER="0"
+WIDTH="100%"
+CELLSPACING="0"
+CELLPADDING="0"
+CLASS="EPIGRAPH"
+><TR
+><TD
+WIDTH="45%"
+>&nbsp;</TD
+><TD
+WIDTH="45%"
+ALIGN="LEFT"
+VALIGN="TOP"
+><I
+><P
+><I
+>And all this time, I thought we were taking bugs <EM
+>out</EM
+>...</I
+></P
+></I
+></TD
+></TR
+></TABLE
+><DIV
+CLASS="SECTION"
+><H3
+CLASS="SECTION"
+><A
+NAME="BUG_WRITING"
+>4.3.3.1. Writing a Great Bug Report</A
+></H3
+><P
+>	  Before we plunge into writing your first bug report, I encourage you to read 
+	  <A
+HREF="http://www.mozilla.org/quality/bug-writing-guidelines.html"
+TARGET="_top"
+>Mozilla.org's Bug
+	    Writing Guidelines</A
+>.  While some of the advice is Mozilla-specific, the basic
+	  principles of reporting Reproducible, Specific bugs, isolating the Product you are
+	  using, the Version of the Product, the Component which failed, the Hardware Platform, and
+	  Operating System you were using at the time of the failure go a long way toward ensuring accurate,
+	  responsible fixes for the bug that bit you.
+	</P
+><P
+>	  While you are at it, why not learn how to find previously reported bugs?  Mozilla.org
+	  has published a great tutorial on finding duplicate bugs, available at
+	  <A
+HREF="http://www.mozilla.org/quality/help/beginning-duplicate-finding.html"
+TARGET="_top"
+>	    http://www.mozilla.org/quality/help/beginning-duplicate-finding.html</A
+>.
+	</P
+><P
+>	  I realize this was a lot to read.  However, understanding the mentality of writing
+	  great bug reports will help us on the next part!
+	</P
+><P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>	      Go back to <A
+HREF="http://landfill.tequilarista.org/mozilla/bugzilla/"
+TARGET="_top"
+>		http://landfill.tequilarista.org/mozilla/bugzilla/</A
+>
+	      in your browser.
+	    </P
+></LI
+><LI
+><P
+>	      Select the 
+	      <A
+HREF="http://landfill.tequilarista.org/mozilla/bugzilla/enter_bug.cgi"
+TARGET="_top"
+>		Enter a new bug report</A
+> link.
+	    </P
+></LI
+><LI
+><P
+>	      Select a product.
+	    </P
+></LI
+><LI
+><P
+>	      Now you should be at the "Enter Bug" form.
+	      The "reporter" should have been automatically filled out
+	      for you (or else Bugzilla prompted you to Log In again
+	      -- you did keep the email with your username
+	      and password, didn't you?).
+	    </P
+></LI
+><LI
+><P
+>	      Select a Component in the scrollbox.
+	    </P
+></LI
+><LI
+><P
+>	      Bugzilla should have made reasonable guesses, based upon your browser,
+	      for the "Platform" and "OS" drop-down
+	      boxes.  If those are wrong, change them -- if you're on an SGI box
+	      running IRIX, we want to know!
+	    </P
+></LI
+><LI
+><P
+>	      Fill in the "Assigned To" box with the email address you provided earlier. 
+	      This way you don't end up sending copies of your bug to lots of other people,
+	      since it's just a test bug.
+	    </P
+></LI
+><LI
+><P
+>	      Leave the "CC" text box blank. 
+	      Fill in the "URL" box with "http://www.mozilla.org".
+	    </P
+></LI
+><LI
+><P
+>	      Enter "The Bugzilla Guide" in the Summary text box,
+	      and place any comments you have on this
+	      tutorial, or the Guide in general, into the Description box.
+	    </P
+></LI
+></OL
+><P
+>	  Voila!  Select "Commit" and send in your bug report!
+	  Next we'll look at resolving bugs.
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><H3
+CLASS="SECTION"
+><A
+NAME="BUG_MANAGE"
+>4.3.3.2. Managing your Bug Reports</A
+></H3
+><P
+>	  OK, you should have a link to the bug you just created near the top of your page.
+	  It should say
+	  "Bug XXXX posted", with a link to the right saying "Back to BUG# XXXX".
+	  Select this link.
+	</P
+><P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>	      Scroll down a bit on the subsequent page,
+	      until you see the "Resolve bug, changing resolution to (dropdown box).
+	      Normally, you would
+	      "Accept bug (change status to ASSIGNED)", fix it, and then resolve.
+	      But in this case, we're
+	      going to short-circuit the process because this wasn't a real bug.
+	      Change the dropdown next to
+	      "Resolve Bug" to "INVALID", make sure the radio button is
+	      marked next to "Resolve Bug", then
+	      click "Commit".
+	    </P
+></LI
+><LI
+><P
+>	      Hey!  It said it couldn't take the change in a big red box!
+	      That's right, you must specify
+	      a Comment in order to make this change.  Select the "Back"
+	      button in your browser, add a
+	      Comment, then try Resolving the bug with INVALID status again.
+	      This time it should work.
+	    </P
+></LI
+></OL
+><P
+>	  You have now learned the basics of Bugzilla navigation,
+	  entering a bug, and bug maintenance.
+	  I encourage you to explore these features, and see what you can do with them!
+	  We'll spend no more time on individual Bugs or Queries from this point on, so you are
+	  on your own there.
+	</P
+><P
+>	  But I'll give a few last hints!
+	</P
+><P
+>	  There is a <A
+HREF="http://bugzilla.mozilla.org/help.html"
+TARGET="_top"
+>CLUE</A
+>
+	  on the Query page
+	  that will teach you more how to use the form.
+	</P
+><P
+>	  If you click the hyperlink on the
+	  <A
+HREF="http://bugzilla.mozilla.org/describecomponents.cgi"
+TARGET="_top"
+>Component</A
+>
+	  box of the Query page, you will be presented a form that will describe what all
+	  the components are.
+	</P
+><P
+>	  Possibly the most powerful feature of the Query page is the 
+	  <A
+HREF="http://bugzilla.mozilla.org/booleanchart.html"
+TARGET="_top"
+>Boolean Chart</A
+> section.
+	  It's a bit confusing to use the first time, but can provide unparalleled
+	  flexibility in your queries,
+	  allowing you to build extremely powerful requests.
+	</P
+><P
+>	  Finally, you can build some nifty 
+	  <A
+HREF="http://bugzilla.mozilla.org/reports.cgi"
+TARGET="_top"
+>Reports</A
+>
+	  using the "Bug Reports" link near the bottom of the query page, and also
+	  available via the "Reports" link
+	  at the footer of each page.
+	</P
+></DIV
+></DIV
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="why.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="init4me.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Why Should We Use Bugzilla?</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="using.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>What's in it for me?</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/index.html b/docs/html/index.html
new file mode 100644
index 000000000..815c0e1c2
--- /dev/null
+++ b/docs/html/index.html
@@ -0,0 +1,920 @@
+<HTML
+><HEAD
+><TITLE
+>The Bugzilla Guide</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="NEXT"
+TITLE="About This Guide"
+HREF="about.html"><META
+NAME="KEYWORD"
+CONTENT="Bugzilla"><META
+NAME="KEYWORD"
+CONTENT="Guide"><META
+NAME="KEYWORD"
+CONTENT="installation"><META
+NAME="KEYWORD"
+CONTENT="FAQ"><META
+NAME="KEYWORD"
+CONTENT="administration"><META
+NAME="KEYWORD"
+CONTENT="integration"><META
+NAME="KEYWORD"
+CONTENT="MySQL"><META
+NAME="KEYWORD"
+CONTENT="Mozilla"><META
+NAME="KEYWORD"
+CONTENT="webtools"></HEAD
+><BODY
+CLASS="BOOK"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="BOOK"
+><A
+NAME="INDEX"
+></A
+><DIV
+CLASS="TITLEPAGE"
+><H1
+CLASS="TITLE"
+><A
+NAME="AEN2"
+>The Bugzilla Guide</A
+></H1
+><H3
+CLASS="AUTHOR"
+><A
+NAME="AEN5"
+>Matthew P. Barnson</A
+></H3
+><DIV
+CLASS="AFFILIATION"
+><DIV
+CLASS="ADDRESS"
+><P
+CLASS="ADDRESS"
+>barnboy@trilobyte.net</P
+></DIV
+></DIV
+><DIV
+CLASS="REVHISTORY"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+><TR
+><TH
+ALIGN="LEFT"
+VALIGN="TOP"
+COLSPAN="3"
+><B
+>Revision History</B
+></TH
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+>Revision v2.11</TD
+><TD
+ALIGN="LEFT"
+>20 December 2000</TD
+><TD
+ALIGN="LEFT"
+>Revised by: MPB</TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+COLSPAN="3"
+>Converted the README, FAQ, and DATABASE information into SGML
+	  docbook format.</TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+>Revision 2.11.1</TD
+><TD
+ALIGN="LEFT"
+>06 March 2001</TD
+><TD
+ALIGN="LEFT"
+>Revised by: MPB</TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+COLSPAN="3"
+>Took way too long to revise this for 2.12 release.
+	  Updated FAQ to use qandaset tags instead of literallayout,
+	  cleaned up administration section, added User Guide section,
+	  miscellaneous FAQ updates and third-party integration information.
+	  From this point on all new tags are lowercase in preparation for the
+	  2.13 release of the Guide in XML format instead of SGML.</TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+>Revision 2.12.0</TD
+><TD
+ALIGN="LEFT"
+>24 April 2001</TD
+><TD
+ALIGN="LEFT"
+>Revised by: MPB</TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+COLSPAN="3"
+>Things fixed this release: Elaborated on queryhelp interface, added FAQ regarding
+	  moving bugs from one keyword to another, clarified possible problems with the Landfill
+	  tutorial, fixed a boatload of typos and unclear sentence structures.  Incorporated the
+	  README into the UNIX installation section, and changed the README to indicate the deprecated
+	  status.  Things I know need work:  Used "simplelist" a lot, where I should have used
+	  "procedure" to tag things.  Need to lowercase all tags to be XML compliant.</TD
+></TR
+></TABLE
+></DIV
+><DIV
+><DIV
+CLASS="ABSTRACT"
+><A
+NAME="AEN12"
+></A
+><P
+></P
+><P
+>This is the documentation for Bugzilla, the Mozilla bug-tracking system.</P
+><P
+></P
+></DIV
+></DIV
+><HR></DIV
+><DIV
+CLASS="TOC"
+><DL
+><DT
+><B
+>Table of Contents</B
+></DT
+><DT
+>1. <A
+HREF="about.html"
+>About This Guide</A
+></DT
+><DD
+><DL
+><DT
+>1.1. <A
+HREF="aboutthisguide.html"
+>Purpose and Scope of this Guide</A
+></DT
+><DT
+>1.2. <A
+HREF="copyright.html"
+>Copyright Information</A
+></DT
+><DT
+>1.3. <A
+HREF="disclaimer.html"
+>Disclaimer</A
+></DT
+><DT
+>1.4. <A
+HREF="newversions.html"
+>New Versions</A
+></DT
+><DT
+>1.5. <A
+HREF="credits.html"
+>Credits</A
+></DT
+><DT
+>1.6. <A
+HREF="contributors.html"
+>Contributors</A
+></DT
+><DT
+>1.7. <A
+HREF="feedback.html"
+>Feedback</A
+></DT
+><DT
+>1.8. <A
+HREF="translations.html"
+>Translations</A
+></DT
+><DT
+>1.9. <A
+HREF="conventions.html"
+>Document Conventions</A
+></DT
+></DL
+></DD
+><DT
+>2. <A
+HREF="installation.html"
+>Installing Bugzilla</A
+></DT
+><DD
+><DL
+><DT
+>2.1. <A
+HREF="readme.unix.html"
+>UNIX Installation</A
+></DT
+><DD
+><DL
+><DT
+>2.1.1. <A
+HREF="readme.unix.html#AEN190"
+>ERRATA</A
+></DT
+><DT
+>2.1.2. <A
+HREF="readme.unix.html#AEN204"
+>Step-by-step Install</A
+></DT
+><DD
+><DL
+><DT
+>2.1.2.1. <A
+HREF="readme.unix.html#AEN206"
+>Introduction</A
+></DT
+><DT
+>2.1.2.2. <A
+HREF="readme.unix.html#AEN211"
+>Installing the Prerequisites</A
+></DT
+><DT
+>2.1.2.3. <A
+HREF="readme.unix.html#AEN242"
+>Installing MySQL Database</A
+></DT
+><DT
+>2.1.2.4. <A
+HREF="readme.unix.html#AEN248"
+>Perl (5.004 or greater)</A
+></DT
+><DT
+>2.1.2.5. <A
+HREF="readme.unix.html#AEN259"
+>DBI Perl Module</A
+></DT
+><DT
+>2.1.2.6. <A
+HREF="readme.unix.html#AEN296"
+>Data::Dumper Perl Module</A
+></DT
+><DT
+>2.1.2.7. <A
+HREF="readme.unix.html#AEN300"
+>MySQL related Perl Module Collection</A
+></DT
+><DT
+>2.1.2.8. <A
+HREF="readme.unix.html#AEN309"
+>TimeDate Perl Module Collection</A
+></DT
+><DT
+>2.1.2.9. <A
+HREF="readme.unix.html#AEN312"
+>GD Perl Module (1.8.3)</A
+></DT
+><DT
+>2.1.2.10. <A
+HREF="readme.unix.html#AEN318"
+>Chart::Base Perl Module (0.99c)</A
+></DT
+><DT
+>2.1.2.11. <A
+HREF="readme.unix.html#AEN321"
+>DB_File Perl Module</A
+></DT
+><DT
+>2.1.2.12. <A
+HREF="readme.unix.html#AEN324"
+>HTTP Server</A
+></DT
+><DT
+>2.1.2.13. <A
+HREF="readme.unix.html#AEN334"
+>Installing the Bugzilla Files</A
+></DT
+><DT
+>2.1.2.14. <A
+HREF="readme.unix.html#AEN343"
+>Setting Up the MySQL Database</A
+></DT
+><DT
+>2.1.2.15. <A
+HREF="readme.unix.html#AEN379"
+>Tweaking "localconfig"</A
+></DT
+><DT
+>2.1.2.16. <A
+HREF="readme.unix.html#AEN401"
+>Setting Up Maintainers Manuall (Optional)</A
+></DT
+><DT
+>2.1.2.17. <A
+HREF="readme.unix.html#AEN410"
+>The Whining Cron (Optional)</A
+></DT
+><DT
+>2.1.2.18. <A
+HREF="readme.unix.html#AEN417"
+>Bug Graphs (Optional)</A
+></DT
+><DT
+>2.1.2.19. <A
+HREF="readme.unix.html#AEN429"
+>Securing MySQL</A
+></DT
+><DT
+>2.1.2.20. <A
+HREF="readme.unix.html#AEN495"
+>Installation General Notes</A
+></DT
+></DL
+></DD
+></DL
+></DD
+><DT
+>2.2. <A
+HREF="readme.windows.html"
+>Win32 (Win98+/NT/2K) Installation</A
+></DT
+><DD
+><DL
+><DT
+>2.2.1. <A
+HREF="readme.windows.html#NTVERIFIED"
+>Win32 Installation: Step-by-step</A
+></DT
+><DT
+>2.2.2. <A
+HREF="readme.windows.html#ADDLWINTIPS"
+>Additional Windows Tips</A
+></DT
+></DL
+></DD
+></DL
+></DD
+><DT
+>3. <A
+HREF="administration.html"
+>Administering Bugzilla</A
+></DT
+><DD
+><DL
+><DT
+>3.1. <A
+HREF="postinstall-check.html"
+>Post-Installation Checklist</A
+></DT
+><DT
+>3.2. <A
+HREF="useradmin.html"
+>User Administration</A
+></DT
+><DD
+><DL
+><DT
+>3.2.1. <A
+HREF="useradmin.html#DEFAULTUSER"
+>Creating the Default User</A
+></DT
+><DT
+>3.2.2. <A
+HREF="useradmin.html#MANAGEUSERS"
+>Managing Other Users</A
+></DT
+><DD
+><DL
+><DT
+>3.2.2.1. <A
+HREF="useradmin.html#LOGIN"
+>Logging In</A
+></DT
+><DT
+>3.2.2.2. <A
+HREF="useradmin.html#CREATENEWUSERS"
+>Creating new users</A
+></DT
+><DT
+>3.2.2.3. <A
+HREF="useradmin.html#DISABLEUSERS"
+>Disabling Users</A
+></DT
+><DT
+>3.2.2.4. <A
+HREF="useradmin.html#MODIFYUSERS"
+>Modifying Users</A
+></DT
+></DL
+></DD
+></DL
+></DD
+><DT
+>3.3. <A
+HREF="programadmin.html"
+>Product, Component, Milestone, and Version Administration</A
+></DT
+><DD
+><DL
+><DT
+>3.3.1. <A
+HREF="programadmin.html#PRODUCTS"
+>Products</A
+></DT
+><DT
+>3.3.2. <A
+HREF="programadmin.html#COMPONENTS"
+>Components</A
+></DT
+><DT
+>3.3.3. <A
+HREF="programadmin.html#VERSIONS"
+>Versions</A
+></DT
+><DT
+>3.3.4. <A
+HREF="programadmin.html#MILESTONES"
+>Milestones</A
+></DT
+><DT
+>3.3.5. <A
+HREF="programadmin.html#VOTING"
+>Voting</A
+></DT
+><DT
+>3.3.6. <A
+HREF="programadmin.html#GROUPS"
+>Groups and Group Security</A
+></DT
+></DL
+></DD
+><DT
+>3.4. <A
+HREF="security.html"
+>Bugzilla Security</A
+></DT
+></DL
+></DD
+><DT
+>4. <A
+HREF="using.html"
+>Using Bugzilla</A
+></DT
+><DD
+><DL
+><DT
+>4.1. <A
+HREF="whatis.html"
+>What is Bugzilla?</A
+></DT
+><DT
+>4.2. <A
+HREF="why.html"
+>Why Should We Use Bugzilla?</A
+></DT
+><DT
+>4.3. <A
+HREF="how.html"
+>How do I use Bugzilla?</A
+></DT
+><DD
+><DL
+><DT
+>4.3.1. <A
+HREF="how.html#MYACCOUNT"
+>Create a Bugzilla Account</A
+></DT
+><DT
+>4.3.2. <A
+HREF="how.html#QUERY"
+>The Bugzilla Query Page</A
+></DT
+><DT
+>4.3.3. <A
+HREF="how.html#BUGREPORTS"
+>Creating and Managing Bug Reports</A
+></DT
+><DD
+><DL
+><DT
+>4.3.3.1. <A
+HREF="how.html#BUG_WRITING"
+>Writing a Great Bug Report</A
+></DT
+><DT
+>4.3.3.2. <A
+HREF="how.html#BUG_MANAGE"
+>Managing your Bug Reports</A
+></DT
+></DL
+></DD
+></DL
+></DD
+><DT
+>4.4. <A
+HREF="init4me.html"
+>What's in it for me?</A
+></DT
+><DD
+><DL
+><DT
+>4.4.1. <A
+HREF="init4me.html#ACCOUNTSETTINGS"
+>Account Settings</A
+></DT
+><DT
+>4.4.2. <A
+HREF="init4me.html#EMAILSETTINGS"
+>Email Settings</A
+></DT
+><DD
+><DL
+><DT
+>4.4.2.1. <A
+HREF="init4me.html#NOTIFICATION"
+>Email Notification</A
+></DT
+><DT
+>4.4.2.2. <A
+HREF="init4me.html#NEWEMAILTECH"
+>New Email Technology</A
+></DT
+><DT
+>4.4.2.3. <A
+HREF="init4me.html#WATCHSETTINGS"
+>"Watching" Users</A
+></DT
+></DL
+></DD
+><DT
+>4.4.3. <A
+HREF="init4me.html#FOOTERSETTINGS"
+>Page Footer</A
+></DT
+><DT
+>4.4.4. <A
+HREF="init4me.html#PERMISSIONSETTINGS"
+>Permissions</A
+></DT
+></DL
+></DD
+><DT
+>4.5. <A
+HREF="usingbz-conc.html"
+>Using Bugzilla-Conclusion</A
+></DT
+></DL
+></DD
+><DT
+>5. <A
+HREF="integration.html"
+>Integrating Bugzilla with Third-Party Tools</A
+></DT
+><DD
+><DL
+><DT
+>5.1. <A
+HREF="bonsai.html"
+>Bonsai</A
+></DT
+><DT
+>5.2. <A
+HREF="cvs.html"
+>CVS</A
+></DT
+><DT
+>5.3. <A
+HREF="scm.html"
+>Perforce SCM</A
+></DT
+><DT
+>5.4. <A
+HREF="tinderbox.html"
+>Tinderbox</A
+></DT
+></DL
+></DD
+><DT
+>6. <A
+HREF="future.html"
+>The Future of Bugzilla</A
+></DT
+><DD
+><DL
+><DT
+>6.1. <A
+HREF="spamlite.html"
+>Reducing Spam</A
+></DT
+><DT
+>6.2. <A
+HREF="searching.html"
+>Better Searching</A
+></DT
+><DT
+>6.3. <A
+HREF="trackingbugs.html"
+>Description Flags and Tracking Bugs</A
+></DT
+><DT
+>6.4. <A
+HREF="bugprobs.html"
+>Bug Issues</A
+></DT
+><DT
+>6.5. <A
+HREF="dbaseintegrity.html"
+>Database Integrity</A
+></DT
+><DT
+>6.6. <A
+HREF="bz30.html"
+>Bugzilla 3.0</A
+></DT
+></DL
+></DD
+><DT
+>A. <A
+HREF="faq.html"
+>The Bugzilla FAQ</A
+></DT
+><DT
+>B. <A
+HREF="downloadlinks.html"
+>Software Download Links</A
+></DT
+><DT
+>C. <A
+HREF="database.html"
+>The Bugzilla Database</A
+></DT
+><DD
+><DL
+><DT
+>C.1. <A
+HREF="dbschema.html"
+>Database Schema Chart</A
+></DT
+><DT
+>C.2. <A
+HREF="dbdoc.html"
+>MySQL Bugzilla Database Introduction</A
+></DT
+><DT
+>C.3. <A
+HREF="granttables.html"
+>MySQL Permissions &#38; Grant Tables</A
+></DT
+><DT
+>C.4. <A
+HREF="cleanupwork.html"
+>Cleaning up after mucking with Bugzilla</A
+></DT
+></DL
+></DD
+><DT
+>7. <A
+HREF="variants.html"
+>Bugzilla Variants</A
+></DT
+><DD
+><DL
+><DT
+>7.1. <A
+HREF="rhbugzilla.html"
+>Red Hat Bugzilla</A
+></DT
+></DL
+></DD
+><DT
+>D. <A
+HREF="patches.html"
+>Useful Patches and Utilities for Bugzilla</A
+></DT
+><DD
+><DL
+><DT
+>D.1. <A
+HREF="setperl.html"
+>The setperl.csh Utility</A
+></DT
+><DT
+>D.2. <A
+HREF="cmdline.html"
+>Command-line Bugzilla Queries</A
+></DT
+><DT
+>D.3. <A
+HREF="quicksearch.html"
+>The Quicksearch Utility</A
+></DT
+></DL
+></DD
+><DT
+>E. <A
+HREF="gfdl.html"
+>GNU Free Documentation License</A
+></DT
+><DD
+><DL
+><DT
+>0. <A
+HREF="gfdl_0.html"
+>PREAMBLE</A
+></DT
+><DT
+>1. <A
+HREF="gfdl_1.html"
+>APPLICABILITY AND DEFINITIONS</A
+></DT
+><DT
+>2. <A
+HREF="gfdl_2.html"
+>VERBATIM COPYING</A
+></DT
+><DT
+>3. <A
+HREF="gfdl_3.html"
+>COPYING IN QUANTITY</A
+></DT
+><DT
+>4. <A
+HREF="gfdl_4.html"
+>MODIFICATIONS</A
+></DT
+><DT
+>5. <A
+HREF="gfdl_5.html"
+>COMBINING DOCUMENTS</A
+></DT
+><DT
+>6. <A
+HREF="gfdl_6.html"
+>COLLECTIONS OF DOCUMENTS</A
+></DT
+><DT
+>7. <A
+HREF="gfdl_7.html"
+>AGGREGATION WITH INDEPENDENT WORKS</A
+></DT
+><DT
+>8. <A
+HREF="gfdl_8.html"
+>TRANSLATION</A
+></DT
+><DT
+>9. <A
+HREF="gfdl_9.html"
+>TERMINATION</A
+></DT
+><DT
+>10. <A
+HREF="gfdl_10.html"
+>FUTURE REVISIONS OF THIS LICENSE</A
+></DT
+><DT
+><A
+HREF="gfdl_howto.html"
+>How to use this License for your documents</A
+></DT
+></DL
+></DD
+><DT
+><A
+HREF="glossary.html"
+>Glossary</A
+></DT
+></DL
+></DIV
+><DIV
+CLASS="LOT"
+><DL
+CLASS="LOT"
+><DT
+><B
+>List of Examples</B
+></DT
+><DT
+>2-1. <A
+HREF="readme.windows.html#AEN646"
+>Removing encrypt() for Windows NT installations</A
+></DT
+><DT
+>3-1. <A
+HREF="programadmin.html#AEN838"
+>Creating some Components</A
+></DT
+><DT
+>3-2. <A
+HREF="programadmin.html#AEN867"
+>Common Use of Versions</A
+></DT
+><DT
+>3-3. <A
+HREF="programadmin.html#AEN871"
+>A Different Use of Versions</A
+></DT
+><DT
+>3-4. <A
+HREF="programadmin.html#AEN899"
+>Using SortKey with Target Milestone</A
+></DT
+><DT
+>3-5. <A
+HREF="programadmin.html#AEN937"
+>When to Use Group Security</A
+></DT
+><DT
+>3-6. <A
+HREF="programadmin.html#AEN954"
+>Creating a New Group</A
+></DT
+><DT
+>4-1. <A
+HREF="how.html#AEN1095"
+>Some Famous Software Versions</A
+></DT
+><DT
+>4-2. <A
+HREF="how.html#AEN1105"
+>Mozilla Webtools Components</A
+></DT
+><DT
+>D-1. <A
+HREF="setperl.html#AEN1963"
+>Using Setperl to set your perl path</A
+></DT
+><DT
+>1. <A
+HREF="glossary.html#AEN2145"
+>A Sample Product</A
+></DT
+></DL
+></DIV
+>] &#62;
+
+</DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>&nbsp;</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+>&nbsp;</TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="about.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>&nbsp;</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+>&nbsp;</TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>About This Guide</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/init4me.html b/docs/html/init4me.html
new file mode 100644
index 000000000..d430ad21d
--- /dev/null
+++ b/docs/html/init4me.html
@@ -0,0 +1,398 @@
+<HTML
+><HEAD
+><TITLE
+>What's in it for me?</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="Using Bugzilla"
+HREF="using.html"><LINK
+REL="PREVIOUS"
+TITLE="How do I use Bugzilla?"
+HREF="how.html"><LINK
+REL="NEXT"
+TITLE="Using Bugzilla-Conclusion"
+HREF="usingbz-conc.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="how.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Chapter 4. Using Bugzilla</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="usingbz-conc.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="INIT4ME"
+>4.4. What's in it for me?</A
+></H1
+><TABLE
+BORDER="0"
+WIDTH="100%"
+CELLSPACING="0"
+CELLPADDING="0"
+CLASS="EPIGRAPH"
+><TR
+><TD
+WIDTH="45%"
+>&nbsp;</TD
+><TD
+WIDTH="45%"
+ALIGN="LEFT"
+VALIGN="TOP"
+><I
+><P
+><I
+>Indiana, it feels like we walking on fortune cookies!</I
+></P
+><P
+><I
+>These ain't fortune cookies, kid...</I
+></P
+></I
+></TD
+></TR
+></TABLE
+><P
+>      Customized User Preferences offer tremendous versatility to
+      your individual Bugzilla experience.
+      Let's plunge into what you can do!  The first step is to click
+      the "Edit prefs" link at the footer of each page once you
+      have logged in to
+      <A
+HREF="http://landfill.tequilarista.org/mozilla/bugzilla/query.cgi?GoAheadAndLogIn=1"
+TARGET="_top"
+>      Landfill</A
+>.
+    </P
+><DIV
+CLASS="SECTION"
+><H2
+CLASS="SECTION"
+><A
+NAME="ACCOUNTSETTINGS"
+>4.4.1. Account Settings</A
+></H2
+><P
+>	On this page, you can change your basic Account Settings,
+	including your password and full name.
+	For security reasons, in order to change anything on this page you
+	must type your <EM
+>current</EM
+>
+	password into the "Old Password" field. 
+	If you wish to change your password, type the new password you
+	want into the "New Password" field and again into the "Re-enter 
+	new password" field to ensure
+	you typed your new password correctly.  Select the "Submit" button and you're done!
+      </P
+></DIV
+><DIV
+CLASS="SECTION"
+><H2
+CLASS="SECTION"
+><A
+NAME="EMAILSETTINGS"
+>4.4.2. Email Settings</A
+></H2
+><DIV
+CLASS="SECTION"
+><H3
+CLASS="SECTION"
+><A
+NAME="NOTIFICATION"
+>4.4.2.1. Email Notification</A
+></H3
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	    The email notification settings described below have been obsoleted in Bugzilla 2.12, and
+	    this section will be replaced with a comprehensive description of the amazing array of 
+	    new options at your disposal.  However, in the meantime, throw this chunk out the window
+	    and go crazy with goofing around with different notification options.
+	  </P
+></BLOCKQUOTE
+></DIV
+><P
+>	  Ahh, here you can reduce or increase the amount of email sent you from Bugzilla!
+	  In the drop-down "Notify me of changes to", select one of
+	  <P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+><EM
+>All qualifying bugs</EM
+>: sends you every change to every bug
+	      where your name is somewhere on it, regardless of who changed it.</TD
+></TR
+><TR
+><TD
+><EM
+>Only those bugs which I am listed in the CC line</EM
+>: prevents
+	      you from receiving mail for which you are the reporter,'
+	      owner, or QA contact.  If you are on the CC
+	      list, presumably someone had a <EM
+>good</EM
+>
+	      reason for you to get the email.</TD
+></TR
+><TR
+><TD
+><EM
+>All qulifying bugs except those which I change</EM
+>:
+	      This is the default, and
+	      a sensible setting.  If someone else changes your bugs, you will get emailed,
+	      but if you change bugs
+	      yourself you will receive no notification of the change.</TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+>
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><H3
+CLASS="SECTION"
+><A
+NAME="NEWEMAILTECH"
+>4.4.2.2. New Email Technology</A
+></H3
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	    This option may not be available in all Bugzilla installations, depending upon
+	    the preferences of the systems administrator responsible for the setup of your Bugzilla.
+	    However, if you really want this functionality, ask her to "enable newemailtech
+	    in Params"
+	    and "make it the default for all new users", referring her to the Administration section
+	    of this Guide.
+	  </P
+></BLOCKQUOTE
+></DIV
+><P
+>	  Disregard the warnings about "experimental and bleeding edge"; the code to handle email
+	  in a cleaner manner than that historically used for Bugzilla is
+	  quite robust and well-tested now.
+	</P
+><P
+>	  I recommend you enable the option, "Click here to sign up (and risk any bugs)".
+	  Your email-box
+	  will thank you for it.  The fundamental shift in "newemailtech" is away from standard UNIX
+	  "diff" output, which is quite ugly, to a prettier, better laid-out email.
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><H3
+CLASS="SECTION"
+><A
+NAME="WATCHSETTINGS"
+>4.4.2.3. "Watching" Users</A
+></H3
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	    This option may not be available in all Bugzilla installations, depending upon
+	    the preferences of the systems administrator responsible for the setup of your Bugzilla.
+	    However, if you really want this functionality, ask her to "enable watchers in Params".
+	  </P
+></BLOCKQUOTE
+></DIV
+><P
+>	  By entering user email names into the "Users to watch" text entry box, delineated by commas,
+	  you can watch bugs of other users.  This powerful functionality enables seamless transitions
+	  as developers change projects, managers wish to get in touch with the issues faced by their
+	  direct reports, or users go on vacation.  If any of these three situations apply
+	  to you, you will undoubtedly find this feature quite convenient.
+	</P
+></DIV
+></DIV
+><DIV
+CLASS="SECTION"
+><H2
+CLASS="SECTION"
+><A
+NAME="FOOTERSETTINGS"
+>4.4.3. Page Footer</A
+></H2
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	  By default, this page is quite barren.  However, go explore the Query Page some more; you will
+	  find that you can store numerous queries on the server, so if you regularly run a particular query
+	  it is just a drop-down menu away.  On this page of Preferences, if you have many stored
+	  queries you can elect to have them always one-click away!
+	</P
+></BLOCKQUOTE
+></DIV
+><P
+>	If you have many stored queries on the server, here you will find individual drop-downs for each
+	stored query.  Each drop-down gives you the option of that query appearing on the footer of every
+	page in Bugzilla!  This gives you powerful one-click access to any complex searches you may set up,
+	and is an excellent way to impress your boss...
+      </P
+><DIV
+CLASS="TIP"
+><BLOCKQUOTE
+CLASS="TIP"
+><P
+><B
+>Tip: </B
+>By default, the "My Bugs" link appears at the bottom of each page.  However, this query
+	gives you both the bugs you have reported, as well as those you are assigned.  One of the most
+	common uses for this page is to remove the "My Bugs" link, replacing it with two other queries,
+	commonly called "My Bug Reports" and "My Bugs" (but only referencing bugs assigned to you).  This
+	allows you to distinguish those bugs you have reported from those you are assigned.  I commonly
+	set up complex Boolean queries in the Query page and link them to my footer in this page.  When
+	they are significantly complex, a one-click reference can save hours of work.</P
+></BLOCKQUOTE
+></DIV
+></DIV
+><DIV
+CLASS="SECTION"
+><H2
+CLASS="SECTION"
+><A
+NAME="PERMISSIONSETTINGS"
+>4.4.4. Permissions</A
+></H2
+><P
+>	This is a purely informative page which outlines your current permissions on
+	this installation of Bugzilla.  If you have permissions to grant certain permissions to
+	other users, the "other users" link appears on this page as well as the footer.
+	For more information regarding user administration, please consult the Administration
+	section of this Guide.
+      </P
+></DIV
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="how.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="usingbz-conc.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>How do I use Bugzilla?</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="using.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Using Bugzilla-Conclusion</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/installation.html b/docs/html/installation.html
new file mode 100644
index 000000000..f46abd61b
--- /dev/null
+++ b/docs/html/installation.html
@@ -0,0 +1,299 @@
+<HTML
+><HEAD
+><TITLE
+>Installing Bugzilla</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="PREVIOUS"
+TITLE="Document Conventions"
+HREF="conventions.html"><LINK
+REL="NEXT"
+TITLE="UNIX Installation"
+HREF="readme.unix.html"></HEAD
+><BODY
+CLASS="CHAPTER"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="conventions.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+></TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="readme.unix.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="CHAPTER"
+><H1
+><A
+NAME="INSTALLATION"
+>Chapter 2. Installing Bugzilla</A
+></H1
+><DIV
+CLASS="TOC"
+><DL
+><DT
+><B
+>Table of Contents</B
+></DT
+><DT
+>2.1. <A
+HREF="readme.unix.html"
+>UNIX Installation</A
+></DT
+><DD
+><DL
+><DT
+>2.1.1. <A
+HREF="readme.unix.html#AEN190"
+>ERRATA</A
+></DT
+><DT
+>2.1.2. <A
+HREF="readme.unix.html#AEN204"
+>Step-by-step Install</A
+></DT
+><DD
+><DL
+><DT
+>2.1.2.1. <A
+HREF="readme.unix.html#AEN206"
+>Introduction</A
+></DT
+><DT
+>2.1.2.2. <A
+HREF="readme.unix.html#AEN211"
+>Installing the Prerequisites</A
+></DT
+><DT
+>2.1.2.3. <A
+HREF="readme.unix.html#AEN242"
+>Installing MySQL Database</A
+></DT
+><DT
+>2.1.2.4. <A
+HREF="readme.unix.html#AEN248"
+>Perl (5.004 or greater)</A
+></DT
+><DT
+>2.1.2.5. <A
+HREF="readme.unix.html#AEN259"
+>DBI Perl Module</A
+></DT
+><DT
+>2.1.2.6. <A
+HREF="readme.unix.html#AEN296"
+>Data::Dumper Perl Module</A
+></DT
+><DT
+>2.1.2.7. <A
+HREF="readme.unix.html#AEN300"
+>MySQL related Perl Module Collection</A
+></DT
+><DT
+>2.1.2.8. <A
+HREF="readme.unix.html#AEN309"
+>TimeDate Perl Module Collection</A
+></DT
+><DT
+>2.1.2.9. <A
+HREF="readme.unix.html#AEN312"
+>GD Perl Module (1.8.3)</A
+></DT
+><DT
+>2.1.2.10. <A
+HREF="readme.unix.html#AEN318"
+>Chart::Base Perl Module (0.99c)</A
+></DT
+><DT
+>2.1.2.11. <A
+HREF="readme.unix.html#AEN321"
+>DB_File Perl Module</A
+></DT
+><DT
+>2.1.2.12. <A
+HREF="readme.unix.html#AEN324"
+>HTTP Server</A
+></DT
+><DT
+>2.1.2.13. <A
+HREF="readme.unix.html#AEN334"
+>Installing the Bugzilla Files</A
+></DT
+><DT
+>2.1.2.14. <A
+HREF="readme.unix.html#AEN343"
+>Setting Up the MySQL Database</A
+></DT
+><DT
+>2.1.2.15. <A
+HREF="readme.unix.html#AEN379"
+>Tweaking "localconfig"</A
+></DT
+><DT
+>2.1.2.16. <A
+HREF="readme.unix.html#AEN401"
+>Setting Up Maintainers Manuall (Optional)</A
+></DT
+><DT
+>2.1.2.17. <A
+HREF="readme.unix.html#AEN410"
+>The Whining Cron (Optional)</A
+></DT
+><DT
+>2.1.2.18. <A
+HREF="readme.unix.html#AEN417"
+>Bug Graphs (Optional)</A
+></DT
+><DT
+>2.1.2.19. <A
+HREF="readme.unix.html#AEN429"
+>Securing MySQL</A
+></DT
+><DT
+>2.1.2.20. <A
+HREF="readme.unix.html#AEN495"
+>Installation General Notes</A
+></DT
+><DD
+><DL
+><DT
+>2.1.2.20.1. <A
+HREF="readme.unix.html#AEN497"
+>Modifying Your Running System</A
+></DT
+><DT
+>2.1.2.20.2. <A
+HREF="readme.unix.html#AEN502"
+>Upgrading From Previous Versions</A
+></DT
+><DT
+>2.1.2.20.3. <A
+HREF="readme.unix.html#AEN505"
+>UNIX Installation Instructions History</A
+></DT
+></DL
+></DD
+></DL
+></DD
+></DL
+></DD
+><DT
+>2.2. <A
+HREF="readme.windows.html"
+>Win32 (Win98+/NT/2K) Installation</A
+></DT
+><DD
+><DL
+><DT
+>2.2.1. <A
+HREF="readme.windows.html#NTVERIFIED"
+>Win32 Installation: Step-by-step</A
+></DT
+><DT
+>2.2.2. <A
+HREF="readme.windows.html#ADDLWINTIPS"
+>Additional Windows Tips</A
+></DT
+></DL
+></DD
+></DL
+></DIV
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="conventions.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="readme.unix.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Document Conventions</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+>&nbsp;</TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>UNIX Installation</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/integration.html b/docs/html/integration.html
new file mode 100644
index 000000000..59970b107
--- /dev/null
+++ b/docs/html/integration.html
@@ -0,0 +1,158 @@
+<HTML
+><HEAD
+><TITLE
+>Integrating Bugzilla with Third-Party Tools</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="PREVIOUS"
+TITLE="Using Bugzilla-Conclusion"
+HREF="usingbz-conc.html"><LINK
+REL="NEXT"
+TITLE="Bonsai"
+HREF="bonsai.html"></HEAD
+><BODY
+CLASS="CHAPTER"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="usingbz-conc.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+></TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="bonsai.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="CHAPTER"
+><H1
+><A
+NAME="INTEGRATION"
+>Chapter 5. Integrating Bugzilla with Third-Party Tools</A
+></H1
+><DIV
+CLASS="TOC"
+><DL
+><DT
+><B
+>Table of Contents</B
+></DT
+><DT
+>5.1. <A
+HREF="bonsai.html"
+>Bonsai</A
+></DT
+><DT
+>5.2. <A
+HREF="cvs.html"
+>CVS</A
+></DT
+><DT
+>5.3. <A
+HREF="scm.html"
+>Perforce SCM</A
+></DT
+><DT
+>5.4. <A
+HREF="tinderbox.html"
+>Tinderbox</A
+></DT
+></DL
+></DIV
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="usingbz-conc.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="bonsai.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Using Bugzilla-Conclusion</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+>&nbsp;</TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Bonsai</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/newversions.html b/docs/html/newversions.html
new file mode 100644
index 000000000..de3135bce
--- /dev/null
+++ b/docs/html/newversions.html
@@ -0,0 +1,186 @@
+<HTML
+><HEAD
+><TITLE
+>New Versions</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="About This Guide"
+HREF="about.html"><LINK
+REL="PREVIOUS"
+TITLE="Disclaimer"
+HREF="disclaimer.html"><LINK
+REL="NEXT"
+TITLE="Credits"
+HREF="credits.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="disclaimer.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Chapter 1. About This Guide</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="credits.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="NEWVERSIONS"
+>1.4. New Versions</A
+></H1
+><P
+>      This is the initial release of the Bugzilla Guide.
+    </P
+><P
+>      This document can be found in the following places:
+    </P
+><P
+>      <P
+></P
+><UL
+><LI
+><P
+>	    <A
+HREF="http://www.trilobyte.net/barnsons/"
+TARGET="_top"
+>TriloBYTE</A
+>
+	  </P
+></LI
+><LI
+><P
+>	    <A
+HREF="http://www.mozilla.org/projects/bugzilla/"
+TARGET="_top"
+>Mozilla.org</A
+>
+	  </P
+></LI
+><LI
+><P
+>	    <A
+HREF="http://www.linuxdoc.org/"
+TARGET="_top"
+>The Linux Documentation Project</A
+>
+	  </P
+></LI
+></UL
+>
+    </P
+><P
+>      The latest version of this document can be checked out via CVS.
+      Please follow the instructions available at
+      <A
+HREF="http://www.mozilla.org/cvs.html"
+TARGET="_top"
+>the Mozilla CVS page</A
+>,
+      and check out the mozilla/webtools/bugzilla/docs/ branch.
+    </P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="disclaimer.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="credits.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Disclaimer</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="about.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Credits</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/patches.html b/docs/html/patches.html
new file mode 100644
index 000000000..9591e67ae
--- /dev/null
+++ b/docs/html/patches.html
@@ -0,0 +1,153 @@
+<HTML
+><HEAD
+><TITLE
+>Useful Patches and Utilities for Bugzilla</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="PREVIOUS"
+TITLE="Red Hat Bugzilla"
+HREF="rhbugzilla.html"><LINK
+REL="NEXT"
+TITLE="The setperl.csh Utility"
+HREF="setperl.html"></HEAD
+><BODY
+CLASS="APPENDIX"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="rhbugzilla.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+></TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="setperl.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="APPENDIX"
+><H1
+><A
+NAME="PATCHES"
+>Appendix D. Useful Patches and Utilities for Bugzilla</A
+></H1
+><DIV
+CLASS="TOC"
+><DL
+><DT
+><B
+>Table of Contents</B
+></DT
+><DT
+>D.1. <A
+HREF="setperl.html"
+>The setperl.csh Utility</A
+></DT
+><DT
+>D.2. <A
+HREF="cmdline.html"
+>Command-line Bugzilla Queries</A
+></DT
+><DT
+>D.3. <A
+HREF="quicksearch.html"
+>The Quicksearch Utility</A
+></DT
+></DL
+></DIV
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="rhbugzilla.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="setperl.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Red Hat Bugzilla</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+>&nbsp;</TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>The setperl.csh Utility</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/postinstall-check.html b/docs/html/postinstall-check.html
new file mode 100644
index 000000000..2ab4a39ce
--- /dev/null
+++ b/docs/html/postinstall-check.html
@@ -0,0 +1,318 @@
+<HTML
+><HEAD
+><TITLE
+>Post-Installation Checklist</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="Administering Bugzilla"
+HREF="administration.html"><LINK
+REL="PREVIOUS"
+TITLE="Administering Bugzilla"
+HREF="administration.html"><LINK
+REL="NEXT"
+TITLE="User Administration"
+HREF="useradmin.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="administration.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Chapter 3. Administering Bugzilla</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="useradmin.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="POSTINSTALL-CHECK"
+>3.1. Post-Installation Checklist</A
+></H1
+><P
+>      After installation, follow the checklist below to ensure that
+      you have a successful installation.
+      If you do not see a recommended setting for a parameter,
+      consider leaving it at the default
+      while you perform your initial tests on your Bugzilla setup.
+    </P
+><DIV
+CLASS="PROCEDURE"
+><OL
+TYPE="1"
+><LI
+><P
+>	  Bring up "editparams.cgi" in your web browser.  For instance, to edit parameters
+	  at mozilla.org, the URL would be <A
+HREF="http://bugzilla.mozilla.org/editparams.cgi"
+TARGET="_top"
+>	  http://bugzilla.mozilla.org/editparams.cgi</A
+>, also available under the "edit parameters"
+	  link on your query page.
+	</P
+></LI
+><LI
+><P
+>	  Set "maintainer" to <EM
+>your</EM
+> email address.
+	  This allows Bugzilla's error messages
+	  to display your email
+	  address and allow people to contact you for help.
+	</P
+></LI
+><LI
+><P
+>	  Set "urlbase" to the URL reference for your Bugzilla installation.
+	  If your bugzilla query page is at http://www.foo.com/bugzilla/query.cgi,
+	  your url base is http://www.foo.com/bugzilla/
+	</P
+></LI
+><LI
+><P
+>	  Set "usebuggroups" to "1" <EM
+>only</EM
+>
+	  if you need to restrict access to products.
+	  I suggest leaving this parameter <EM
+>off</EM
+>
+	  while initially testing your Bugzilla.
+	</P
+></LI
+><LI
+><P
+>	  Set "usebuggroupsentry" to "1" if you want to restrict access to products.
+	  Once again, if you are simply testing your installation, I suggest against
+	  turning this parameter on; the strict security checking may stop you from
+	  being able to modify your new entries.
+	</P
+></LI
+><LI
+><P
+>	  Set "shadowdb" to "bug_shadowdb" if you will be
+	  running a *very* large installation of Bugzilla.
+	  The shadow database enables many simultaneous users
+	  to read and write to the database
+	  without interfering with one another.  
+	  <DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	      Enabling "shadowdb" can adversely affect the stability
+	      of your installation of Bugzilla.
+	      You may frequently need to manually synchronize your databases,
+	      or schedule nightly syncs
+	      via "cron"
+	    </P
+></BLOCKQUOTE
+></DIV
+>
+	  Once again, in testing you should
+	  avoid this option -- use it if or when you <EM
+>need</EM
+> to use it, and have
+	  repeatedly run into the problem it was designed to solve -- very long wait times while
+	  attempting to commit a change to the database.
+        </P
+><P
+>	  If you use the "shadowdb" option,
+	  it is only natural that you should turn the "queryagainstshadowdb"
+	  option "On" as well.  Otherwise you are replicating data into a shadow database for no reason!
+	</P
+></LI
+><LI
+><P
+>	  If you have custom logos or HTML you must put in place to fit within your site design guidelines,
+	  place the code in the "headerhtml", "footerhtml", "errorhtml",
+	  "bannerhtml", or "blurbhtml" text boxes.
+	  <DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	      The "headerhtml" text box is the HTML printed out
+	      <EM
+>before</EM
+> any other code on the page.
+	      If you have a special banner, put the code for it in "bannerhtml".
+	      You may want to leave these
+	      settings at the defaults initially.
+	    </P
+></BLOCKQUOTE
+></DIV
+>
+	</P
+></LI
+><LI
+><P
+>	  Add any text you wish to the "passwordmail" parameter box.  For instance,
+	  many people choose to use this box to give a quick training blurb about how to
+	  use Bugzilla at your site.
+        </P
+></LI
+><LI
+><P
+>	  Ensure "newemailtech" is "on".
+	  Your users will thank you.  This is the default in the post-2.12 world, and is
+	  only an issue if you are upgrading.
+	</P
+></LI
+><LI
+><P
+>	  Do you want to use the qa contact ("useqacontact")
+	  and status whiteboard ("usestatuswhiteboard") fields?
+	  These fields are useful because they allow for more flexibility,
+	  particularly when you have an existing
+	  Quality Assurance and/or Release Engineering team, 
+	  but they may not be needed for smaller installations.
+	</P
+></LI
+><LI
+><P
+>	  Set "whinedays" to the amount of days you want to let bugs go
+	  in the "New" or "Reopened" state before
+	  notifying people they have untouched new bugs.  If you do not plan to use this feature, simply do
+	  not set up the whining cron job described in the README, or set this value to "0".
+	</P
+></LI
+><LI
+><P
+>	  Set the "commenton" options according to your site policy.
+	  It is a wise idea to require comments when users
+	  resolve, reassign, or reopen bugs.
+	  <DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	      It is generally far better to require a developer comment when resolving bugs than not.
+	      Few things are more annoying to bug database users than having a developer
+	      mark a bug "fixed" without any comment as to what the fix was (or even that it was truly fixed!)
+	    </P
+></BLOCKQUOTE
+></DIV
+>
+	</P
+></LI
+><LI
+><P
+>	  Set "supportwatchers" to "On".  This feature is helpful for team leads to monitor progress in their
+	  respective areas, and can offer many other benefits, such as allowing a developer to pick up a
+	  former engineer's bugs without requiring her to change all the information in the bug.
+	</P
+></LI
+></OL
+></DIV
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="administration.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="useradmin.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Administering Bugzilla</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="administration.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>User Administration</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/programadmin.html b/docs/html/programadmin.html
new file mode 100644
index 000000000..0098bf805
--- /dev/null
+++ b/docs/html/programadmin.html
@@ -0,0 +1,923 @@
+<HTML
+><HEAD
+><TITLE
+>Product, Component, Milestone, and Version Administration</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="Administering Bugzilla"
+HREF="administration.html"><LINK
+REL="PREVIOUS"
+TITLE="User Administration"
+HREF="useradmin.html"><LINK
+REL="NEXT"
+TITLE="Bugzilla Security"
+HREF="security.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="useradmin.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Chapter 3. Administering Bugzilla</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="security.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="PROGRAMADMIN"
+>3.3. Product, Component, Milestone, and Version Administration</A
+></H1
+><TABLE
+BORDER="0"
+WIDTH="100%"
+CELLSPACING="0"
+CELLPADDING="0"
+CLASS="EPIGRAPH"
+><TR
+><TD
+WIDTH="45%"
+>&nbsp;</TD
+><TD
+WIDTH="45%"
+ALIGN="LEFT"
+VALIGN="TOP"
+><I
+><P
+><I
+>Dear Lord, we have to get our users to do WHAT?</I
+></P
+></I
+></TD
+></TR
+></TABLE
+><DIV
+CLASS="SECTION"
+><H2
+CLASS="SECTION"
+><A
+NAME="PRODUCTS"
+>3.3.1. Products</A
+></H2
+><FONT
+COLOR="RED"
+>Formerly, and in some spots still, called "Programs"</FONT
+><P
+>	<A
+HREF="glossary.html#GLOSS_PRODUCT"
+><I
+CLASS="GLOSSTERM"
+>Products</I
+></A
+> are the
+	broadest category in Bugzilla, and you should have the least of these.
+	If your company makes computer games, you should have one product per game,
+	and possibly a few special products
+	(website, meetings...)
+      </P
+><P
+>	A Product (formerly called "Program", and still referred to that way
+	in some portions of the source code) controls some very important functions.
+	The number of "votes" available for users to vote for the most important bugs
+	is set per-product, as is the number of votes required to move a bug automatically
+	from the UNCONFIRMED status to the NEW status.  One can close a Product for further
+	bug entry and define various Versions available from the Edit Product screen.
+      </P
+><P
+>To create a new product:</P
+><P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>	    Select "components" from the yellow footer
+	  </P
+><DIV
+CLASS="TIP"
+><BLOCKQUOTE
+CLASS="TIP"
+><P
+><B
+>Tip: </B
+>	      It may seem counterintuitive to click "components" when you want
+	      to edit the properties associated with Products.  This is one of a long
+	      list of things we want in Bugzilla 3.0...
+	    </P
+></BLOCKQUOTE
+></DIV
+></LI
+><LI
+><P
+>	    Select the "Add" link to the right of "Add a new product".
+	  </P
+></LI
+><LI
+><P
+>	    Enter the name of the product and a description.
+	    The Description field is free-form.
+	  </P
+></LI
+></OL
+><DIV
+CLASS="TIP"
+><BLOCKQUOTE
+CLASS="TIP"
+><P
+><B
+>Tip: </B
+>	  Don't worry about the "Closed for bug entry", "Maximum Votes per person", 
+	  "Maximum votes a person can put on a single bug", "Number of votes a bug in
+	  this Product needs to automatically get out of the UNCOMFIRMED state",
+	  and "Version" options yet.
+	  We'll cover those in a few moments.
+	</P
+></BLOCKQUOTE
+></DIV
+></DIV
+><DIV
+CLASS="SECTION"
+><H2
+CLASS="SECTION"
+><A
+NAME="COMPONENTS"
+>3.3.2. Components</A
+></H2
+><P
+>	Components are subsections of a Product. 
+
+	<DIV
+CLASS="EXAMPLE"
+><A
+NAME="AEN838"
+></A
+><P
+><B
+>Example 3-1. Creating some Components</B
+></P
+><DIV
+CLASS="INFORMALEXAMPLE"
+><A
+NAME="AEN840"
+></A
+><P
+></P
+><P
+>	      The computer game you are designing may a "UI" component, an "API" component,
+	      a "Sound System" component, and a "Plugins" component, each overseen by a different
+	      programmer.  It often makes sense to divide Components in Bugzilla according to the
+	      natural divisions of responsibility within your Product or company.
+	    </P
+><P
+></P
+></DIV
+></DIV
+>
+
+	Each component has a owner and (if you turned it on in the parameters), a qa
+	contact. The owner should be the primary person who fixes bugs in that component.  The  QA
+	Contact should be the person who will ensure these bugs are completely fixed. The Owner,
+	QA Contact, and Reporter will get email when new bugs are created in this Component and
+	when these bugs change. Default Owner and Default QA Contact fields only dictate the
+	<EM
+>default assignments</EM
+>; the Owner and Q/A Contact fields in a bug 
+	are otherwise unrelated to the Component.
+      </P
+><P
+>	To create a new Component:
+      </P
+><P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>	    Select the "Edit components" link from the "Edit Product" page
+	  </P
+></LI
+><LI
+><P
+>	    Select the "Add" link to the right of the "Add a new component" text
+	    on the "Select Component" page.
+	  </P
+></LI
+><LI
+><P
+>	    Fill out the "Component" field, a short "Description", and the "Initial Owner".
+	    The "Component" field should not contain a space.  The "Description" field is
+	    free-form.  The "Initial Owner" field must be that of a valid user already
+	    existing in the database.  If the initial owner does not exist, Bugzilla
+	    will refuse to create the component.
+	    <DIV
+CLASS="TIP"
+><BLOCKQUOTE
+CLASS="TIP"
+><P
+><B
+>Tip: </B
+>		Is your "Default Owner" a user who is not yet in the database?
+		No problem.
+		<P
+></P
+><OL
+TYPE="a"
+><LI
+><P
+>		      Select the "Log out" link on the footer of the page.
+		    </P
+></LI
+><LI
+><P
+>		      Select the "New Account" link on the footer of the "Relogin" page
+		    </P
+></LI
+><LI
+><P
+>		      Type in the email address of the default owner you want to create
+		      in the "E-mail address" field, and her full name in the "Real name"
+		      field, then select the "Submit Query" button.
+		    </P
+></LI
+><LI
+><P
+>		      Now select "Log in" again, type in your login information, and you
+		      can modify the product to use the Default Owner information
+		      you require.
+		    </P
+></LI
+></OL
+>
+	      </P
+></BLOCKQUOTE
+></DIV
+>
+	  </P
+></LI
+><LI
+><P
+>	    Either "edit" more components or return to the "query" page on the ensuing
+	    "Addming new component" page.  To return to the Product you were editing, you
+	    must select the "components" link as before.
+	  </P
+></LI
+></OL
+></DIV
+><DIV
+CLASS="SECTION"
+><H2
+CLASS="SECTION"
+><A
+NAME="VERSIONS"
+>3.3.3. Versions</A
+></H2
+><P
+>	Versions are the revisions of the product, such as "Flinders 3.1", "Flinders 95",
+	and "Flinders 2000".  Using Versions helps you isolate code changes and are an aid
+	in reporting.
+
+	<DIV
+CLASS="EXAMPLE"
+><A
+NAME="AEN867"
+></A
+><P
+><B
+>Example 3-2. Common Use of Versions</B
+></P
+><DIV
+CLASS="INFORMALEXAMPLE"
+><A
+NAME="AEN869"
+></A
+><P
+></P
+><P
+>	      A user reports a bug
+	      against Version "Beta 2.0" of your product.  The current Version of your software
+	      is "Release Candidate 1", and no longer has the bug.  This will
+	      help you triage and classify bugs according to their relevance.  It is also
+	      possible people may report bugs against bleeding-edge beta versions that are
+	    not evident in older versions of the software.  This can help isolate code
+	      changes that caused the bug
+	    </P
+><P
+></P
+></DIV
+></DIV
+>
+	<DIV
+CLASS="EXAMPLE"
+><A
+NAME="AEN871"
+></A
+><P
+><B
+>Example 3-3. A Different Use of Versions</B
+></P
+><DIV
+CLASS="INFORMALEXAMPLE"
+><A
+NAME="AEN873"
+></A
+><P
+></P
+><P
+>	      This field has been used to good effect by an online service provider in a slightly
+	      different way.  They had three versions of the product: "Production", "QA",
+	      and "Dev".  Although it may be the same product, a bug in the development
+	      environment is not normally as critical as a Production bug, nor does it
+	      need to be reported publicly.  When used in conjunction with Target Milestones,
+	      one can easily specify the environment where a bug can be reproduced, and
+	      the Milestone by which it will be fixed.
+	    </P
+><P
+></P
+></DIV
+></DIV
+>
+       </P
+><P
+>	To create and edit Versions:
+      </P
+><P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>	    From the "Edit Product" screen, select "Edit Versions"
+	  </P
+></LI
+><LI
+><P
+>	    You will notice that the product already has the default version "undefined".
+	    If your product doesn't use version numbers, you may want to leave this as it is
+	    or edit it so that it is "---". You can then go back to the edit versions page
+	    and add new versions to your product.
+	  </P
+><P
+>	    Otherwise, click the "Add" button to the right of the "Add a new version" text.
+	  </P
+></LI
+><LI
+><P
+>	    Enter the name of the Version.  This can be free-form characters up to the limit of the
+	    text box.  Then select the "Add" button.
+	  </P
+></LI
+><LI
+><P
+>	    At this point you can select "Edit" to edit more Versions, or return to the "Query"
+	    page, from which you can navigate back to the product through the "components" link
+	    at the foot of the Query page.
+	  </P
+></LI
+></OL
+></DIV
+><DIV
+CLASS="SECTION"
+><H2
+CLASS="SECTION"
+><A
+NAME="MILESTONES"
+>3.3.4. Milestones</A
+></H2
+><P
+>	Milestones are "targets" that you plan to get a bug fixed by. For example, you have a bug that
+	you plan to fix for your 3.0 release, it would be assigned the milestone of 3.0. Or, you have a
+	bug that you plan to fix for 2.8, this would have a milestone of 2.8.
+      </P
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	  Milestone options will only appear for a Product if you turned the "usetargetmilestone" field
+	  in the "Edit Parameters" screen "On".
+	</P
+></BLOCKQUOTE
+></DIV
+><P
+>	To create new Milestones, set Default Milestones, and set Milestone URL: 
+      </P
+><P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>	    Select "edit milestones"
+	  </P
+></LI
+><LI
+><P
+>	    Select "Add" to the right of the "Add a new milestone" text
+	  </P
+></LI
+><LI
+><P
+>	    Enter the name of the Milestone in the "Milestone" field.
+	    You can optionally set the "Sortkey", which is a positive or negative number (-255 to 255)
+	    that defines where in the list this particular milestone appears.
+	    Select "Add".
+	  </P
+><DIV
+CLASS="EXAMPLE"
+><A
+NAME="AEN899"
+></A
+><P
+><B
+>Example 3-4. Using SortKey with Target Milestone</B
+></P
+><DIV
+CLASS="INFORMALEXAMPLE"
+><A
+NAME="AEN901"
+></A
+><P
+></P
+><P
+>		Let's say you create a target milestone called "Release 1.0", with Sortkey set to "0".
+		Later, you realize that you will have a public beta, called "Beta1".
+		You can create a Milestone called "Beta1", with a Sortkey of "-1" in order to ensure
+		people will see the Target Milestone of "Beta1" earlier on the list than "Release 1.0"
+	      </P
+><P
+></P
+></DIV
+></DIV
+></LI
+><LI
+><P
+>	    If you want to add more milestones, select the "Edit" link.
+	    If you don't, well shoot, you have to go back to the "query" page and select "components"
+	    again, and make your way back to the Product you were editing.
+	    <DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>		This is another in the list of unusual user interface decisions that
+		we'd like to get cleaned up.  Shouldn't there be a link to the effect of
+		"edit the Product I was editing when I ended up here"?  In any case,
+		clicking "components" in the footer takes you back to the "Select product"
+		screen, from which you can begin editing your product again.
+	      </P
+></BLOCKQUOTE
+></DIV
+>
+	  </P
+></LI
+><LI
+><P
+>	    From the Edit Product screen again (once you've made your way back), enter the URL
+	    for a description of what your milestones are for this product in the "Milestone URL" field.
+	    It should be of the format "http://www.foo.com/bugzilla/product_milestones.html"
+	  </P
+><P
+>	    Some common uses of this field include product descriptions, product roadmaps,
+	    and of course a simple description of the meaning of each milestone.
+	  </P
+></LI
+><LI
+><P
+>	    If you're using Target Milestones, the "Default Milestone" field must have some
+	    kind of entry.  If you really don't care if people set coherent Target Milestones, 
+	    simply leave this at the default, "---".  However, controlling and regularly updating the Default
+	    Milestone field is a powerful tool when reporting the status of projects.
+	  </P
+><P
+>Select the "Update" button when you are done.</P
+></LI
+><LI
+><P
+>	    
+	  </P
+></LI
+></OL
+></DIV
+><DIV
+CLASS="SECTION"
+><H2
+CLASS="SECTION"
+><A
+NAME="VOTING"
+>3.3.5. Voting</A
+></H2
+><P
+>	The concept of "voting" is a poorly understood, yet powerful feature for the management
+	of open-source projects.  Each user is assigned so many Votes per product, which they can
+	freely reassign (or assign multiple votes to a single bug).
+	This allows developers to gauge user need for a particular enhancement
+	or bugfix.  By allowing bugs with a certain number of votes to automatically move from
+	"UNCONFIRMED" to "NEW", users of the bug system can help high-priority bugs garner
+	attention so they don't sit for a long time awaiting triage.
+      </P
+><P
+>	The daunting challenge of Votes is deciding where you draw the line for a "vocal majority".  If you
+	only have a user base of 100 users, setting a low threshold for bugs to move from UNCONFIRMED
+	to NEW makes sense.  As the Bugzilla user base expands, however, these thresholds must be
+	re-evaluated.  You should gauge whether this feature is worth the time and close monitoring involved,
+	and perhaps forego implementation until you have a critical mass of users who demand it.
+      </P
+><P
+>To modify Voting settings:</P
+><P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>	    Navigate to the "Edit Product" screen for the Product you wish to modify
+	  </P
+></LI
+><LI
+><P
+>	    Set "Maximum Votes per person" to your calculated value.  Setting this field
+	    to "0" disables voting.
+	  </P
+></LI
+><LI
+><P
+>	    Set "Maximum Votes a person can put on a single bug" to your calculated value.  It
+	    should probably be some number lower than the "Maximum votes per person".
+	    Setting this field to "0" disables voting, but leaves the voting options open
+	    to the user.  This is confusing.
+	  </P
+></LI
+><LI
+><P
+>	    Set "Number of votes a bug in this product needs to automatically get out of the
+	    UNCONFIRMED state" to your calculated number.  Setting this field to "0" 
+	    disables the automatic move of bugs from UNCONFIRMED to NEW.  Some people
+	    advocate leaving this at "0", but of what use are Votes if your Bugzilla
+	    user base is unable to affect which bugs appear on Development radar?
+	    <DIV
+CLASS="TIP"
+><BLOCKQUOTE
+CLASS="TIP"
+><P
+><B
+>Tip: </B
+>		You should probably set this number to higher than a small coalition of
+		Bugzilla users can influence it.  Most sites use this as a "referendum"
+		mechanism -- if users are able to vote a bug out of UNCONFIRMED, it
+		is a <EM
+>really</EM
+> bad bug!
+	      </P
+></BLOCKQUOTE
+></DIV
+>
+	  </P
+></LI
+><LI
+><P
+>	    Once you have adjusted the values to your preference, select the "Update" button.
+	  </P
+></LI
+></OL
+></DIV
+><DIV
+CLASS="SECTION"
+><H2
+CLASS="SECTION"
+><A
+NAME="GROUPS"
+>3.3.6. Groups and Group Security</A
+></H2
+><P
+>	Groups can be very useful in bugzilla, because they allow users to isolate
+	bugs or products that should only be seen by certain people.  Groups can also
+	be a complicated minefield of interdependencies and weirdness if mismanaged.
+
+	<DIV
+CLASS="EXAMPLE"
+><A
+NAME="AEN937"
+></A
+><P
+><B
+>Example 3-5. When to Use Group Security</B
+></P
+><DIV
+CLASS="INFORMALEXAMPLE"
+><A
+NAME="AEN939"
+></A
+><P
+></P
+><P
+>	      Many Bugzilla sites isolate "Security-related" bugs from all other bugs.
+	      This way, they can have a fix ready before the security vulnerability
+	      is announced to the world.  You can create a "Security" product which, by
+	      default, has no members, and only add members to the group (in their individual
+	      User page, as described under User Administration) who should have
+	      priveleged access to "Security" bugs.  Alternately, you may create a Group
+	      independently of any Product, and change the Group mask on individual bugs
+	      to restrict access to members only of certain Groups.
+	    </P
+><P
+></P
+></DIV
+></DIV
+>
+	
+	Groups only work if you enable the "usebuggroups" paramater.
+	In addition, if the "usebuggroupsentry" parameter is "On", one can restrict access
+	to products by groups, so that only members of a product group are able to view
+	bugs within that product.
+	Group security in Bugzilla can be divided into two categories:
+	Generic and Product-Based.
+      </P
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	  Groups in Bugzilla are a complicated beast that evolved out of very simple user
+	  permission bitmasks, apparently itself derived from common concepts in UNIX access
+	  controls.  A "bitmask" is a fixed-length number whose value can describe one, and
+	  only one, set of states.  For instance, UNIX file permissions are assigned bitmask
+	  values:  "execute" has a value of 1, "write" has a value of 2, 
+	  and "read" has a value of 4.  Add them together,
+	  and a file can be read, written to, and executed if it has a bitmask of "7". (This
+	  is a simplified example -- anybody who knows UNIX security knows there is much
+	  more to it than this.  Please bear with me for the purpose of this note.)  The only
+	  way a bitmask scheme can work is by doubling the bit count for each value.  Thus
+	  if UNIX wanted to offer another file permission, the next would have to be a value of
+	  8, then the next 16, the next 32, etc.
+	</P
+><P
+>	  Similarly, Bugzilla offers a bitmask to define group permissions, with an internal
+	  limit of 64.  Several are already occupied
+	  by built-in permissions.  The way around this limitation is
+	  to avoid assigning groups to products if you have many products, avoid bloating
+	  of group lists, and religiously prune irrelevant groups.  In reality, most installations
+	  of Bugzilla support far fewer than 64 groups, so this limitation has not hit
+	  for most sites, but it is on the table to be revised for Bugzilla 3.0
+	  because it interferes with the security schemes of some administrators.
+	</P
+></BLOCKQUOTE
+></DIV
+><P
+>	To enable Generic Group Security ("usebuggroups"):
+      </P
+><P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>	    Turn "On" "usebuggroups" in the "Edit Parameters" screen.
+	  </P
+></LI
+><LI
+><P
+>	    You will generally have no groups set up.  Select the "groups" link
+	    in the footer.
+	  </P
+></LI
+><LI
+><P
+>	    Take a moment to understand the instructions on the "Edit Groups" screen.
+	    Once you feel confident you understand what is expected of you, select the
+	    "Add Group" link.
+	  </P
+></LI
+><LI
+><P
+>	    Fill out the "New Name" (remember, no spaces!), "New Description", and "New
+	    User RegExp" fields.  "New User RegExp" allows you to automatically place
+	    all users who fulfill the Regular Expression into the new group.
+
+	    <DIV
+CLASS="EXAMPLE"
+><A
+NAME="AEN954"
+></A
+><P
+><B
+>Example 3-6. Creating a New Group</B
+></P
+><DIV
+CLASS="INFORMALEXAMPLE"
+><A
+NAME="AEN956"
+></A
+><P
+></P
+><P
+>		  I created a group called "DefaultGroup" with a description of "This is simply
+		  a group to play with", and a "New User RegExp" of "*@velio.com".  This
+		  new group automatically includes all Bugzilla users with "@velio.com" at the
+		  end of their user id.  When I finished, my new group was assigned bit #128.
+		</P
+><P
+></P
+></DIV
+></DIV
+>
+	    
+	    When you have finished, select the "Add" button.
+	  </P
+></LI
+></OL
+><P
+>	To enable Product-Based Group Security ("usebuggroupsentry"):
+      </P
+><DIV
+CLASS="WARNING"
+><P
+></P
+><TABLE
+CLASS="WARNING"
+BORDER="1"
+WIDTH="100%"
+><TR
+><TD
+ALIGN="CENTER"
+><B
+>Warning</B
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+><P
+>	  Don't forget that you only have 64 groups masks available, total, for
+	  your installation of Bugzilla!  If you plan on having more than 50
+	  products in your individual Bugzilla installation, and require group
+	  security for your products, you should
+	  consider either running multiple Bugzillas or using Generic Group Security
+	  instead of Product-Based ("usebuggroupsentry") Group Security.
+	</P
+></TD
+></TR
+></TABLE
+></DIV
+><P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>	    Turn "On" "usebuggroups" and "usebuggroupsentry" in the "Edit Parameters" screen.
+	  </P
+><DIV
+CLASS="WARNING"
+><P
+></P
+><TABLE
+CLASS="WARNING"
+BORDER="1"
+WIDTH="90%"
+><TR
+><TD
+ALIGN="CENTER"
+><B
+>Warning</B
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+><P
+>	      "usebuggroupsentry" has the capacity to prevent the administrative user
+	      from directly altering bugs because of conflicting group permissions.
+	      If you plan on using "usebuggroupsentry", you should plan on restricting administrative
+	      account usage to administrative duties only.
+	      In other words, manage bugs with an unpriveleged user account, and
+	      manage users, groups, Products, etc. with the administrative account.
+	    </P
+></TD
+></TR
+></TABLE
+></DIV
+></LI
+><LI
+><P
+>	    You will generally have no Groups set up, unless you enabled "usebuggroupsentry"
+	    prior to creating any Products.  To create "Generic Group Security" groups,
+	    follow the instructions given above.  To create Product-Based Group security,
+	    simply follow the instructions for creating a new Product.  If you need to
+	    add users to these new groups as you create them, you will find the option
+	    to add them to the group available under the "Edit User" screens.
+	  </P
+></LI
+></OL
+></DIV
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="useradmin.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="security.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>User Administration</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="administration.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Bugzilla Security</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/quicksearch.html b/docs/html/quicksearch.html
new file mode 100644
index 000000000..14df20f49
--- /dev/null
+++ b/docs/html/quicksearch.html
@@ -0,0 +1,186 @@
+<HTML
+><HEAD
+><TITLE
+>The Quicksearch Utility</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="Useful Patches and Utilities for Bugzilla"
+HREF="patches.html"><LINK
+REL="PREVIOUS"
+TITLE="Command-line Bugzilla Queries"
+HREF="cmdline.html"><LINK
+REL="NEXT"
+TITLE="GNU Free Documentation License"
+HREF="gfdl.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="cmdline.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Appendix D. Useful Patches and Utilities for Bugzilla</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="gfdl.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="QUICKSEARCH"
+>D.3. The Quicksearch Utility</A
+></H1
+><P
+>      Quicksearch is a new, experimental feature of the 2.12 release.
+      It consist of two Javascript files, "quicksearch.js" and "localconfig.js",
+      and two documentation files, "quicksearch.html" and "quicksearchhack.html"
+    </P
+><P
+>      The index.html page has been updated to include the QuickSearch text box.
+    </P
+><P
+>      To take full advantage of the query power, the Bugzilla maintainer must
+      edit "localconfig.js" according to the value sets used in the local installation.
+    </P
+><P
+>      Currently, keywords must be hard-coded in localconfig.js.  If they are not,
+      keywords are not automatically recognized.  This means, if localconfig.js
+      is left unconfigured, that searching for a bug with the "foo" keyword
+      will only find bugs with "foo" in the summary, status whiteboard, product or
+      component name, but not those with the keyword "foo".
+    </P
+><P
+>      Workarounds for Bugzilla users:
+      <P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+>search for '!foo' (this will find only bugs with the keyword "foo"</TD
+></TR
+><TR
+><TD
+>search 'foo,!foo' (equivalent to 'foo OR keyword:foo')</TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+>
+    </P
+><P
+>      When this tool is ported from client-side JavaScript to server-side Perl,
+      the requirement for hard-coding keywords can be fixed.
+      <A
+HREF="http://bugzilla.mozilla.org/show_bug.cgi?id=70907"
+TARGET="_top"
+>This bug</A
+>
+      has details.
+    </P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="cmdline.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="gfdl.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Command-line Bugzilla Queries</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="patches.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>GNU Free Documentation License</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/readme.unix.html b/docs/html/readme.unix.html
new file mode 100644
index 000000000..faca430af
--- /dev/null
+++ b/docs/html/readme.unix.html
@@ -0,0 +1,1735 @@
+<HTML
+><HEAD
+><TITLE
+>UNIX Installation</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="Installing Bugzilla"
+HREF="installation.html"><LINK
+REL="PREVIOUS"
+TITLE="Installing Bugzilla"
+HREF="installation.html"><LINK
+REL="NEXT"
+TITLE="Win32 (Win98+/NT/2K) Installation"
+HREF="readme.windows.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="installation.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Chapter 2. Installing Bugzilla</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="readme.windows.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="README.UNIX"
+>2.1. UNIX Installation</A
+></H1
+><DIV
+CLASS="SECTION"
+><H2
+CLASS="SECTION"
+><A
+NAME="AEN190"
+>2.1.1. ERRATA</A
+></H2
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	  If you are installing Bugzilla on S.u.S.e. Linux, or some other
+	  distributions with "paranoid" security options, it is possible
+	  that the checksetup.pl script may fail with the error:
+	  <SPAN
+CLASS="ERRORNAME"
+>cannot chdir(/var/spool/mqueue): Permission denied</SPAN
+>
+	  This is because your
+	  /var/spool/mqueue directory has a mode of "drwx------".  Type
+	  <B
+CLASS="COMMAND"
+>chmod 755 /var/spool/mqueue</B
+> as root to fix this problem.
+	</P
+></BLOCKQUOTE
+></DIV
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	  Release Notes for Bugzilla 2.12 are available at docs/rel_notes.txt
+	</P
+></BLOCKQUOTE
+></DIV
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	  The preferred documentation for Bugzilla is available in docs/, with
+	  a variety of document types available.  Please refer to these documents when 
+	  installing, configuring, and maintaining your Bugzilla installation.
+	</P
+></BLOCKQUOTE
+></DIV
+><DIV
+CLASS="WARNING"
+><P
+></P
+><TABLE
+CLASS="WARNING"
+BORDER="1"
+WIDTH="100%"
+><TR
+><TD
+ALIGN="CENTER"
+><B
+>Warning</B
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+><P
+>	  Bugzilla is not a package where you can just plop it in a directory,
+	  twiddle a few things, and you're off.  Installing Bugzilla assumes you
+	  know your variant of UNIX or Microsoft Windows well, are familiar with the
+	  command line, and are comfortable compiling and installing a plethora
+	  of third-party utilities.  To install Bugzilla on Win32 requires
+	  fair Perl proficiency, and if you use a webserver other than Apache you
+	  should be intimately familiar with the security mechanisms and CGI
+	  environment thereof.
+	</P
+></TD
+></TR
+></TABLE
+></DIV
+><DIV
+CLASS="WARNING"
+><P
+></P
+><TABLE
+CLASS="WARNING"
+BORDER="1"
+WIDTH="100%"
+><TR
+><TD
+ALIGN="CENTER"
+><B
+>Warning</B
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+><P
+>	  Bugzilla has not undergone a complete security review. Security holes
+	  may exist in the code.  Great care should be taken both in the installation
+	  and usage of this software.  Carefully consider the implications of
+	  installing other network services with Bugzilla.
+	</P
+></TD
+></TR
+></TABLE
+></DIV
+></DIV
+><DIV
+CLASS="SECTION"
+><H2
+CLASS="SECTION"
+><A
+NAME="AEN204"
+>2.1.2. Step-by-step Install</A
+></H2
+><DIV
+CLASS="SECTION"
+><H3
+CLASS="SECTION"
+><A
+NAME="AEN206"
+>2.1.2.1. Introduction</A
+></H3
+><P
+>	  Installation of bugzilla is pretty straightforward, particularly if your
+	  machine already has MySQL and the MySQL-related perl packages installed.
+	  If those aren't installed yet, then that's the first order of business.  The
+	  other necessary ingredient is a web server set up to run cgi scripts.
+	  While using Apache for your webserver is not required, it is recommended.
+	</P
+><P
+>	  Bugzilla has been successfully installed under Solaris, Linux, and
+	  Win32. The peculiarities of installing on Win32 (Win98+/NT/2K) are not
+	  included in this section of the Guide; please check out the "Win32 Installation Instructions"
+	  for further advice on getting Bugzilla to work on Microsoft Windows.
+	</P
+><P
+>	  The Bugzilla Guide is contained in the "docs/" folder.  It is available
+	  in plain text (docs/txt), HTML (docs/html), or SGML source (docs/sgml).
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><H3
+CLASS="SECTION"
+><A
+NAME="AEN211"
+>2.1.2.2. Installing the Prerequisites</A
+></H3
+><P
+>	  The software packages necessary for the proper running of bugzilla are:
+	  <P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>		MySQL database server and the mysql client (3.22.5 or greater)
+	      </P
+></LI
+><LI
+><P
+>		Perl (5.004 or greater)
+	      </P
+></LI
+><LI
+><P
+>		DBI Perl module
+	      </P
+></LI
+><LI
+><P
+>		Data::Dumper Perl module
+	      </P
+></LI
+><LI
+><P
+>		DBD::mySQL
+	      </P
+></LI
+><LI
+><P
+>		TimeDate Perl module collection
+	      </P
+></LI
+><LI
+><P
+>		GD perl module (1.8.3) (optional, for bug charting)
+	      </P
+></LI
+><LI
+><P
+>		Chart::Base Perl module (0.99c) (optional, for bug charting)
+	      </P
+></LI
+><LI
+><P
+>		DB_File Perl module (optional, for bug charting)
+	      </P
+></LI
+><LI
+><P
+>		The web server of your choice.  Apache is recommended.
+	      </P
+></LI
+><LI
+><P
+>		MIME::Parser Perl module (optional, for contrib/bug_email.pl interface)
+	      </P
+></LI
+></OL
+>
+	  <DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	      You must run Bugzilla on a filesystem that supports file locking via
+	      flock().  This is necessary for Bugzilla to operate safely with multiple
+	      instances.
+	    </P
+></BLOCKQUOTE
+></DIV
+>
+	  <DIV
+CLASS="WARNING"
+><P
+></P
+><TABLE
+CLASS="WARNING"
+BORDER="1"
+WIDTH="100%"
+><TR
+><TD
+ALIGN="CENTER"
+><B
+>Warning</B
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+><P
+>	      It is a good idea, while installing Bugzilla, to ensure it is not
+	      <EM
+>accessible</EM
+> by other machines on the Internet.
+	      Your machine may be vulnerable to attacks
+	      while you are installing. In other words, ensure there is some kind of firewall between you
+	      and the rest of the Internet.  Many installation steps require an active Internet connection
+	      to complete, but you must take care to ensure that at no point is your machine vulnerable
+	      to an attack.
+	    </P
+></TD
+></TR
+></TABLE
+></DIV
+>
+
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><H3
+CLASS="SECTION"
+><A
+NAME="AEN242"
+>2.1.2.3. Installing MySQL Database</A
+></H3
+><P
+>	  Visit MySQL homepage at http://www.mysql.org/ and grab the latest stable
+	  release of the server.  Both binaries and source are available and which
+	  you get shouldn't matter.  Be aware that many of the binary versions
+	  of MySQL store their data files in /var which on many installations
+	  (particularly common with linux installations) is part of a smaller
+	  root partition.  If you decide to build from sources you can easily set
+	  the dataDir as an option to configure.
+	</P
+><P
+>	  If you've installed from source or non-package (RPM, deb, etc.) binaries
+	  you'll want to make sure to add mysqld to your init scripts so the server
+	  daemon will come back up whenever your machine reboots.
+	  You also may want to edit those init scripts, to make sure that
+	  mysqld will accept large packets.  By default, mysqld is set up to only
+	  accept packets up to 64K long.  This limits the size of attachments you
+	  may put on bugs.  If you add something like "-O max_allowed_packet=1M"
+	  to the command that starts mysqld (or safe_mysqld), then you will be
+	  able to have attachments up to about 1 megabyte.
+	</P
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	    If you plan on running Bugzilla and MySQL on the same machine,
+	    consider using the "--skip-networking" option in the init script.
+	    This enhances security by preventing network access to MySQL.
+	  </P
+></BLOCKQUOTE
+></DIV
+></DIV
+><DIV
+CLASS="SECTION"
+><H3
+CLASS="SECTION"
+><A
+NAME="AEN248"
+>2.1.2.4. Perl (5.004 or greater)</A
+></H3
+><P
+>	  Any machine that doesn't have perl on it is a sad machine indeed.  Perl
+	  for *nix systems can be gotten in source form from http://www.perl.com.
+	</P
+><P
+>	  Perl is now a far cry from the the single compiler/interpreter binary it
+	  once was.  It now includes a great many required modules and quite a
+	  few other support files.  If you're not up to or not inclined to build
+	  perl from source, you'll want to install it on your machine using some
+	  sort of packaging system (be it RPM, deb, or what have you) to ensure
+	  a sane install.  In the subsequent sections you'll be installing quite
+	  a few perl modules; this can be quite ornery if your perl installation
+	  isn't up to snuff.
+	</P
+><DIV
+CLASS="TIP"
+><BLOCKQUOTE
+CLASS="TIP"
+><P
+><B
+>Tip: </B
+>	    You can skip the following Perl module installation
+	    steps by installing "Bundle::Bugzilla" from CPAN, which includes them.
+	    All Perl module installation steps require you have an active Internet
+	    connection.
+	  </P
+><P
+>	    <TT
+CLASS="COMPUTEROUTPUT"
+>	      <TT
+CLASS="PROMPT"
+>bash#</TT
+>
+	      <B
+CLASS="COMMAND"
+>perl -MCPAN -e 'install "Bundle::Bugzilla"'</B
+>
+	    </TT
+>
+	  </P
+><P
+>	    Bundle::Bugzilla doesn't include GD, Chart::Base, or MIME::Parser,
+	    which are not essential to a basic Bugzilla install.  If installing
+	    this bundle fails, you should install each module individually to
+	    isolate the problem.
+	  </P
+></BLOCKQUOTE
+></DIV
+></DIV
+><DIV
+CLASS="SECTION"
+><H3
+CLASS="SECTION"
+><A
+NAME="AEN259"
+>2.1.2.5. DBI Perl Module</A
+></H3
+><P
+>	  The DBI module is a generic Perl module used by other database related
+	  Perl modules.  For our purposes it's required by the MySQL-related
+	  modules.  As long as your Perl installation was done correctly the
+	  DBI module should be a breeze.  It's a mixed Perl/C module, but Perl's
+	  MakeMaker system simplifies the C compilation greatly.
+	</P
+><P
+>	  Like almost all Perl modules DBI can be found on the Comprehensive Perl
+	  Archive Network (CPAN) at http://www.cpan.org.  The CPAN servers have a
+	  real tendency to bog down, so please use mirrors.  The current location
+	  at the time of this writing (02/17/99) can be found in Appendix A.
+	</P
+><P
+>	  Quality, general Perl module installation instructions can be found on
+	  the CPAN website, but the easy thing to do is to just use the CPAN shell
+	  which does all the hard work for you.
+	</P
+><P
+>	  To use the CPAN shell to install DBI:
+	  <DIV
+CLASS="INFORMALEXAMPLE"
+><A
+NAME="AEN265"
+></A
+><P
+></P
+><P
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>bash#</TT
+>
+		<B
+CLASS="COMMAND"
+>perl -MCPAN -e 'install "DBI"'</B
+>
+	      </TT
+>
+	      <DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>Replace "DBI" with the name of whichever module you wish
+		to install, such as Data::Dumper, TimeDate, GD, etc.</P
+></BLOCKQUOTE
+></DIV
+>
+	    </P
+><P
+></P
+></DIV
+>
+	  To do it the hard way:
+	  <DIV
+CLASS="INFORMALEXAMPLE"
+><A
+NAME="AEN272"
+></A
+><P
+></P
+><P
+>	      Untar the module tarball -- it should create its own directory
+	    </P
+><P
+>	      CD to the directory just created, and enter the following commands:
+	      <P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>		    <TT
+CLASS="COMPUTEROUTPUT"
+>		      <TT
+CLASS="PROMPT"
+>bash#</TT
+>
+		      <B
+CLASS="COMMAND"
+>perl Makefile.PL</B
+>
+		    </TT
+>
+		  </P
+></LI
+><LI
+><P
+>		    <TT
+CLASS="COMPUTEROUTPUT"
+>		      <TT
+CLASS="PROMPT"
+>bash#</TT
+>
+		      <B
+CLASS="COMMAND"
+>make</B
+>
+		    </TT
+>
+		  </P
+></LI
+><LI
+><P
+>		    <TT
+CLASS="COMPUTEROUTPUT"
+>		      <TT
+CLASS="PROMPT"
+>bash#</TT
+>
+		      <B
+CLASS="COMMAND"
+>make test</B
+>
+		    </TT
+>
+		  </P
+></LI
+><LI
+><P
+>		    <TT
+CLASS="COMPUTEROUTPUT"
+>		      <TT
+CLASS="PROMPT"
+>bash#</TT
+>
+		      <B
+CLASS="COMMAND"
+>make install</B
+>
+		    </TT
+>
+		  </P
+></LI
+></OL
+>
+	      If everything went ok that should be all it takes.  For the vast
+	      majority of perl modules this is all that's required.
+	    </P
+><P
+></P
+></DIV
+>
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><H3
+CLASS="SECTION"
+><A
+NAME="AEN296"
+>2.1.2.6. Data::Dumper Perl Module</A
+></H3
+><P
+>	  The Data::Dumper module provides data structure persistence for Perl
+	  (similar to Java's serialization).  It comes with later sub-releases of
+	  Perl 5.004, but a re-installation just to be sure it's available won't
+	  hurt anything.
+	</P
+><P
+>	  Data::Dumper is used by the MySQL related Perl modules.  It can be
+	  found on CPAN (link in Appendix A) and can be installed by following
+	  the same four step make sequence used for the DBI module.
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><H3
+CLASS="SECTION"
+><A
+NAME="AEN300"
+>2.1.2.7. MySQL related Perl Module Collection</A
+></H3
+><P
+>	  The Perl/MySQL interface requires a few mutually-dependent perl
+	  modules.  These modules are grouped together into the the
+	  Msql-Mysql-modules package.  This package can be found at CPAN.
+	  After the archive file has been downloaded it should
+	  be untarred.
+	</P
+><P
+>	  The MySQL modules are all built using one make file which is generated
+	  by running:
+	  <TT
+CLASS="PROMPT"
+>bash#</TT
+>
+	  <B
+CLASS="COMMAND"
+>perl Makefile.pl</B
+>
+	</P
+><P
+>	  The MakeMaker process will ask you a few questions about the desired
+	  compilation target and your MySQL installation.  For many of the questions
+	  the provided default will be adequate.
+	</P
+><P
+>	  When asked if your desired target is the MySQL or mSQL packages
+	  selected the MySQL related ones.  Later you will be asked if you wish
+	  to provide backwards compatibility with the older MySQL packages; you
+	  must answer YES to this question.  The default will be no, and if you
+	  select it things won't work later.
+	</P
+><P
+>	  A host of 'localhost' should be fine and a testing user of 'test' and
+	  a null password should find itself with sufficient access to run tests
+	  on the 'test' database which MySQL created upon installation.  If 'make
+	  test' and 'make install' go through without errors you should be ready
+	  to go as far as database connectivity is concerned.
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><H3
+CLASS="SECTION"
+><A
+NAME="AEN309"
+>2.1.2.8. TimeDate Perl Module Collection</A
+></H3
+><P
+>	  Many of the more common date/time/calendar related Perl modules have
+	  been grouped into a bundle similar to the MySQL modules bundle. This
+	  bundle is stored on the CPAN under the name TimeDate.  A (hopefully
+	  current) link can be found in Appendix A.  The component module we're
+	  most interested in is the Date::Format module, but installing all of them
+	  is probably a good idea anyway.  The standard Perl module installation
+	  instructions should work perfectly for this simple package.
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><H3
+CLASS="SECTION"
+><A
+NAME="AEN312"
+>2.1.2.9. GD Perl Module (1.8.3)</A
+></H3
+><P
+>	  The GD library was written by Thomas Boutell a long while ago to
+	  programatically generate images in C.  Since then it's become almost a
+	  defacto standard for programatic image construction.  The Perl bindings
+	  to it found in the GD library are used on a million web pages to generate
+	  graphs on the fly.  That's what bugzilla will be using it for so you'd
+	  better install it if you want any of the graphing to work.
+	</P
+><P
+>	  Actually bugzilla uses the Graph module which relies on GD itself,
+	  but isn't that always the way with OOP.  At any rate, you can find the
+	  GD library on CPAN (link in Appendix "Required Software").  
+	</P
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	    The Perl GD library requires some other libraries that may or may not be
+	    installed on your system, including "libpng" and "libgd".  The full requirements
+	    are listed in the Perl GD library README.  Just realize that if compiling GD fails,
+	    it's probably because you're missing a required library.
+	  </P
+></BLOCKQUOTE
+></DIV
+></DIV
+><DIV
+CLASS="SECTION"
+><H3
+CLASS="SECTION"
+><A
+NAME="AEN318"
+>2.1.2.10. Chart::Base Perl Module (0.99c)</A
+></H3
+><P
+>	  The Chart module provides bugzilla with on-the-fly charting
+	  abilities.  It can be installed in the usual fashion after it has been
+	  fetched from CPAN where it is found as the Chart-x.x... tarball in a
+	  directory to be listed in Appendix "Required Software".  Note that as with the GD perl
+	  module, only the specific versions listed above (or newer) will work. Earlier
+	  versions used GIF's, which are no longer supported by the latest
+	  versions of GD.
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><H3
+CLASS="SECTION"
+><A
+NAME="AEN321"
+>2.1.2.11. DB_File Perl Module</A
+></H3
+><P
+>	  DB_File is a module which allows Perl programs to make use of the facilities provided by 
+	  Berkeley DB version 1.x. This module is required by collectstats.pl which is used for 
+	  bug charting. If you plan to make use of bug charting, you must install this module.
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><H3
+CLASS="SECTION"
+><A
+NAME="AEN324"
+>2.1.2.12. HTTP Server</A
+></H3
+><P
+>	  You have a freedom of choice here - Apache, Netscape or any other
+	  server on UNIX would do.  You can easily run the web server on a different
+	  machine than MySQL, but need to adjust the MySQL "bugs" user permissions
+	  accordingly.
+	</P
+><P
+>	  You'll want to make sure that your web server will run any file
+	  with the .cgi extension as a cgi and not just display it.  If you're using
+	  apache that means uncommenting the following line in the srm.conf file:
+	  <TT
+CLASS="COMPUTEROUTPUT"
+>AddHandler cgi-script .cgi</TT
+>
+	</P
+><P
+>	  With apache you'll also want to make sure that within the access.conf
+	  file the line:
+	  <TT
+CLASS="COMPUTEROUTPUT"
+>	    Options ExecCGI
+	  </TT
+>
+	  is in the stanza that covers the directories you intend to put the bugzilla
+	  .html and .cgi files into.
+	</P
+><P
+>	  If you are using a newer version of Apache, both of the above lines will be
+	  (or will need to be) in the httpd.conf file, rather than srm.conf or
+	  access.conf.
+	</P
+><DIV
+CLASS="WARNING"
+><P
+></P
+><TABLE
+CLASS="WARNING"
+BORDER="1"
+WIDTH="100%"
+><TR
+><TD
+ALIGN="CENTER"
+><B
+>Warning</B
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+><P
+>	    There are two critical directories and a file that should not be a served by
+	    the HTTP server. These are the 'data' and 'shadow' directories and the
+	    'localconfig' file. You should configure your HTTP server to not serve
+	    content from these files. Failure to do so will expose critical passwords
+	    and other data. Please see your HTTP server configuration manual on how
+	    to do this. If you use quips (at the top of the buglist pages) you will want
+	    the 'data/comments' file to still be served. This file contains those quips.
+	  </P
+></TD
+></TR
+></TABLE
+></DIV
+></DIV
+><DIV
+CLASS="SECTION"
+><H3
+CLASS="SECTION"
+><A
+NAME="AEN334"
+>2.1.2.13. Installing the Bugzilla Files</A
+></H3
+><P
+>	  You should untar the Bugzilla files into a directory that you're
+	  willing to make writable by the default web server user (probably
+	  'nobody').  You may decide to put the files off of the main web space
+	  for your web server or perhaps off of /usr/local with a symbolic link
+	  in the web space that points to the bugzilla directory.  At any rate,
+	  just dump all the files in the same place (optionally omitting the CVS
+	  directories if they were accidentally tarred up with the rest of Bugzilla)
+	  and make sure you can access the files in that directory through your
+	  web server.
+	</P
+><DIV
+CLASS="TIP"
+><BLOCKQUOTE
+CLASS="TIP"
+><P
+><B
+>Tip: </B
+>	    HINT:  If you symlink the bugzilla directory into your Apache's
+	    HTML heirarchy, you may receive "Forbidden" errors unless you
+	    add the "FollowSymLinks" directive to the &#60;Directory&#62; entry
+	    for the HTML root.
+	  </P
+></BLOCKQUOTE
+></DIV
+><P
+>	  Once all the files are in a web accessible directory, make that
+	  directory writable by your webserver's user (which may require just
+	  making it world writable).  This is a temporary step until you run
+	  the post-install "checksetup.pl" script, which locks down your
+	  installation.
+	</P
+><P
+>	  Lastly, you'll need to set up a symbolic link from /usr/bonsaitools/bin
+	  to the correct location of your perl executable (probably /usr/bin/perl).
+	  Otherwise you must hack all the .cgi files to change where they look
+	  for perl.  To make future upgrades easier, you should use the symlink
+	  approach.
+	  <DIV
+CLASS="TIP"
+><BLOCKQUOTE
+CLASS="TIP"
+><P
+><B
+>Tip: </B
+>	      If you don't have root access to set this symlink up, check out the
+	      "setperl.csh" utility, listed in the Patches section of this
+	      Guide.  It will change the path to perl in all your Bugzilla files for
+	      you.
+	    </P
+></BLOCKQUOTE
+></DIV
+>
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><H3
+CLASS="SECTION"
+><A
+NAME="AEN343"
+>2.1.2.14. Setting Up the MySQL Database</A
+></H3
+><P
+>	  After you've gotten all the software installed and working you're ready
+	  to start preparing the database for its life as a the back end to a high
+	  quality bug tracker.
+	</P
+><P
+>	  First, you'll want to fix MySQL permissions to allow access from
+	  Bugzilla.  For the purpose of this Installation section, the Bugzilla username
+	  will be "bugs", and will have minimal permissions.  Bugzilla has
+	  not undergone a thorough security audit.  It may be possible for
+	  a system cracker to somehow trick Bugzilla into executing a command
+	  such as "; DROP DATABASE mysql".
+	</P
+><P
+>	  That would be bad.
+	</P
+><P
+>	  Give the MySQL root user a password.  MySQL passwords are
+	  limited to 16 characters.
+	  <P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>bash#</TT
+>
+		<B
+CLASS="COMMAND"
+>mysql -u root mysql</B
+>
+	      </TT
+>
+	    </TD
+></TR
+><TR
+><TD
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>mysql&#62;</TT
+>
+		<B
+CLASS="COMMAND"
+>		  UPDATE user SET Password=PASSWORD ('new_password')
+		  WHERE user='root';
+		</B
+>
+	      </TT
+>
+	    </TD
+></TR
+><TR
+><TD
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>mysql&#62;</TT
+>
+		<B
+CLASS="COMMAND"
+>FLUSH PRIVILEGES;</B
+>
+	      </TT
+>
+	    </TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+>
+	  From this point on, if you need to access MySQL as the
+	  MySQL root user, you will need to use "mysql -u root -p" and
+	  enter your new_password.  Remember that MySQL user names have
+	  nothing to do with Unix user names (login names).	  
+	</P
+><P
+>	  Next, we create the "bugs" user, and grant sufficient
+	  permissions for checksetup.pl, which we'll use later, to work
+	  its magic.  This also restricts the "bugs" user to operations
+	  within a database called "bugs", and only allows the account
+	  to connect from "localhost".  Modify it to reflect your setup
+	  if you will be connecting from another machine or as a different
+	  user.
+	</P
+><P
+>	  Remember to set bugs_password to some unique password.
+	  <P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>mysql&#62;</TT
+>
+		<B
+CLASS="COMMAND"
+>GRANT SELECT,INSERT,UPDATE,DELETE,INDEX,
+		  ALTER,CREATE,DROP,REFERENCES 
+		  ON bugs.* TO bugs@localhost
+		  IDENTIFIED BY 'bugs_password';</B
+>
+	      </TT
+>
+	    </TD
+></TR
+><TR
+><TD
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>		  mysql&#62;
+		</TT
+>
+		<B
+CLASS="COMMAND"
+>		  FLUSH PRIVILEGES;
+		</B
+>
+	      </TT
+>
+	    </TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+>
+	</P
+><P
+>	  Next, run the magic checksetup.pl script.  (Many thanks to Holger
+	  Schurig &#60;holgerschurig@nikocity.de&#62; for writing this script!)
+	  It will make sure Bugzilla files and directories have reasonable
+	  permissions, set up the "data" directory, and create all the MySQL
+	  tables.
+	  <P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>bash#</TT
+>
+		<B
+CLASS="COMMAND"
+>./checksetup.pl</B
+>
+	      </TT
+>
+	    </TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+>
+	  The first time you run it, it will create a file called "localconfig".
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><H3
+CLASS="SECTION"
+><A
+NAME="AEN379"
+>2.1.2.15. Tweaking "localconfig"</A
+></H3
+><P
+>	  This file contains a variety of settings you may need to tweak including
+	  how Bugzilla should connect to the MySQL database.
+	</P
+><P
+>	  The connection settings include:
+	  <P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>		server's host: just use "localhost" if the MySQL server is
+                local
+	      </P
+></LI
+><LI
+><P
+>		database name: "bugs" if you're following these directions
+	      </P
+></LI
+><LI
+><P
+>		MySQL username: "bugs" if you're following these directions
+	      </P
+></LI
+><LI
+><P
+>		Password for the "bugs" MySQL account above
+	      </P
+></LI
+></OL
+>
+	</P
+><P
+>	  Once you are happy with the settings, re-run checksetup.pl.  On this
+	  second run, it will create the database and an administrator account
+	  for which you will be prompted to provide information.
+	</P
+><P
+>	  When logged into an administrator account once Bugzilla is running,
+	  if you go to the query page (off of the bugzilla main menu), you'll
+	  find an 'edit parameters' option that is filled with editable treats.
+	</P
+><P
+>	  Should everything work, you should have a nearly empty copy of the bug
+	  tracking setup.
+	</P
+><P
+>	  The second time around, checksetup.pl will stall if it is on a
+	  filesystem that does not fully support file locking via flock(), such as
+	  NFS mounts.  This support is required for Bugzilla to operate safely with
+	  multiple instances. If flock() is not fully supported, it will stall at:
+	  <SPAN
+CLASS="ERRORCODE"
+>Now regenerating the shadow database for all bugs.</SPAN
+>
+	  <DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	      The second time you run checksetup.pl, it is recommended you be the same
+	      user as your web server runs under, and that you be sure you have set the
+	      "webservergroup" parameter in localconfig to match the web server's group
+	      name, if any.  Under some systems, otherwise, checksetup.pl will goof up
+	      your file permissions and make them unreadable to your web server.
+	    </P
+></BLOCKQUOTE
+></DIV
+>
+	</P
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	    The checksetup.pl script is designed so that you can run it at any time
+	    without causing harm.  You should run it after any upgrade to Bugzilla.
+	  </P
+></BLOCKQUOTE
+></DIV
+></DIV
+><DIV
+CLASS="SECTION"
+><H3
+CLASS="SECTION"
+><A
+NAME="AEN401"
+>2.1.2.16. Setting Up Maintainers Manuall (Optional)</A
+></H3
+><P
+>	  If you want to add someone else to every group by hand, you can do it
+	  by typing the appropriate MySQL commands.  Run '<TT
+CLASS="COMPUTEROUTPUT"
+>	    mysql -u root -p bugs</TT
+>'
+	  (you may need different parameters, depending on your security settings
+	  according to section 3, above).  Then:
+	  <P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>mysql&#62;</TT
+>
+		<B
+CLASS="COMMAND"
+>update profiles set groupset=0x7fffffffffffffff
+               where login_name = 'XXX';</B
+>
+	      </TT
+>
+	    </TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+>
+	  replacing XXX with the Bugzilla email address.
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><H3
+CLASS="SECTION"
+><A
+NAME="AEN410"
+>2.1.2.17. The Whining Cron (Optional)</A
+></H3
+><P
+>	  By now you've got a fully functional bugzilla, but what good are bugs
+	  if they're not annoying?  To help make those bugs more annoying you can
+	  set up bugzilla's automatic whining system.  This can be done by adding
+	  the following command as a daily crontab entry (for help on that see that
+	  crontab man page):
+	  <P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<B
+CLASS="COMMAND"
+>cd &#60;your-bugzilla-directory&#62; ; ./whineatnews.pl</B
+>
+	      </TT
+>
+	    </TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+>
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><H3
+CLASS="SECTION"
+><A
+NAME="AEN417"
+>2.1.2.18. Bug Graphs (Optional)</A
+></H3
+><P
+>	  As long as you installed the GD and Graph::Base Perl modules you might
+	  as well turn on the nifty bugzilla bug reporting graphs.
+	</P
+><P
+>	  Add a cron entry like this to run collectstats daily at 5 after midnight:
+	  <P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>bash#</TT
+>
+		<B
+CLASS="COMMAND"
+>crontab -e</B
+>
+	      </TT
+>
+	    </TD
+></TR
+><TR
+><TD
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		 5 0 * * * cd &#60;your-bugzilla-directory&#62; ; ./collectstats.pl
+	      </TT
+>
+	    </TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+>
+	</P
+><P
+>	  After two days have passed you'll be able to view bug graphs from the
+	  Bug Reports page. 
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><H3
+CLASS="SECTION"
+><A
+NAME="AEN429"
+>2.1.2.19. Securing MySQL</A
+></H3
+><P
+>	  If you followed the README for setting up your "bugs" and "root" user in
+	  MySQL, much of this should not apply to you.  If you are upgrading
+	  an existing installation of Bugzilla, you should pay close attention
+	  to this section.
+	</P
+><P
+>	  Most MySQL installs have "interesting" default security parameters:
+	  <P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+>mysqld defaults to running as root</TD
+></TR
+><TR
+><TD
+>it defaults to allowing external network connections</TD
+></TR
+><TR
+><TD
+>it has a known port number, and is easy to detect</TD
+></TR
+><TR
+><TD
+>it defaults to no passwords whatsoever</TD
+></TR
+><TR
+><TD
+>it defaults to allowing "File_Priv"</TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+>
+	</P
+><P
+>	  This means anyone from anywhere on the internet can not only drop the
+	  database with one SQL command, and they can write as root to the system.
+	</P
+><P
+>	  To see your permissions do:
+	  <P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>bash#</TT
+>
+		<B
+CLASS="COMMAND"
+>mysql -u root -p</B
+>
+	      </TT
+>
+	    </TD
+></TR
+><TR
+><TD
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>mysql&#62;</TT
+>
+		<B
+CLASS="COMMAND"
+>use mysql;</B
+>
+	      </TT
+>
+	    </TD
+></TR
+><TR
+><TD
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>mysql&#62;</TT
+>
+		<B
+CLASS="COMMAND"
+>show tables;</B
+>
+	      </TT
+>
+	    </TD
+></TR
+><TR
+><TD
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>mysql&#62;</TT
+>
+		<B
+CLASS="COMMAND"
+>select * from user;</B
+>
+	      </TT
+>
+	    </TD
+></TR
+><TR
+><TD
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>mysql&#62;</TT
+>
+		<B
+CLASS="COMMAND"
+>select * from db;</B
+>
+	      </TT
+>
+	    </TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+>
+	</P
+><P
+>	  To fix the gaping holes:
+	  <P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+>DELETE FROM user WHERE User='';</TD
+></TR
+><TR
+><TD
+>UPDATE user SET Password=PASSWORD('new_password') WHERE user='root';</TD
+></TR
+><TR
+><TD
+> FLUSH PRIVILEGES;</TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+>
+	</P
+><P
+>	  If you're not running "mit-pthreads" you can use:
+	  <P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+>GRANT USAGE ON *.* TO bugs@localhost;</TD
+></TR
+><TR
+><TD
+>GRANT ALL ON bugs.* TO bugs@localhost;</TD
+></TR
+><TR
+><TD
+>REVOKE DROP ON bugs.* FROM bugs@localhost;</TD
+></TR
+><TR
+><TD
+>FLUSH PRIVILEGES;</TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+>
+	</P
+><P
+>	  With "mit-pthreads" you'll need to modify the "globals.pl" Mysql-&#62;Connect
+	  line to specify a specific host name instead of "localhost", and accept
+	  external connections:
+	  <P
+></P
+><TABLE
+BORDER="0"
+><TBODY
+><TR
+><TD
+>GRANT USAGE ON *.* TO bugs@bounce.hop.com;</TD
+></TR
+><TR
+><TD
+>GRANT ALL ON bugs.* TO bugs@bounce.hop.com;</TD
+></TR
+><TR
+><TD
+>REVOKE DROP ON bugs.* FROM bugs@bounce.hop.com;</TD
+></TR
+><TR
+><TD
+>FLUSH PRIVILEGES;</TD
+></TR
+></TBODY
+></TABLE
+><P
+></P
+>
+	</P
+><P
+>	  Consider also:
+	  <P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>		Turning off external networking with "--skip-networking",
+		unless you have "mit-pthreads", in which case you can't.
+		Without networking, MySQL connects with a Unix domain socket.
+	      </P
+></LI
+><LI
+><P
+>		using the --user= option to mysqld to run it as an unprivileged
+		user.
+	      </P
+></LI
+><LI
+><P
+>		starting MySQL in a chroot jail
+	      </P
+></LI
+><LI
+><P
+>		running the httpd in a "chrooted" jail
+	      </P
+></LI
+><LI
+><P
+>		making sure the MySQL passwords are different from the OS
+		passwords (MySQL "root" has nothing to do with system "root").
+	      </P
+></LI
+><LI
+><P
+>		running MySQL on a separate untrusted machine
+	      </P
+></LI
+><LI
+><P
+>		making backups ;-)
+	      </P
+></LI
+></OL
+>
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><H3
+CLASS="SECTION"
+><A
+NAME="AEN495"
+>2.1.2.20. Installation General Notes</A
+></H3
+><DIV
+CLASS="SECTION"
+><H4
+CLASS="SECTION"
+><A
+NAME="AEN497"
+>2.1.2.20.1. Modifying Your Running System</A
+></H4
+><P
+>	    Bugzilla optimizes database lookups by storing all relatively static
+	    information in the versioncache file, located in the data/ subdirectory
+	    under your installation directory (we said before it needs to be writable,
+	    right?!)
+	  </P
+><P
+>	    If you make a change to the structural data in your database (the
+	    versions table for example), or to the "constants" encoded in
+	    defparams.pl, you will need to remove the cached content from the data
+	    directory (by doing a "rm data/versioncache"), or your changes won't show
+	    up!
+	  </P
+><P
+>	    That file gets automatically regenerated whenever it's more than an
+	    hour old, so Bugzilla will eventually notice your changes by itself, but
+	    generally you want it to notice right away, so that you can test things.
+	  </P
+></DIV
+><DIV
+CLASS="SECTION"
+><H4
+CLASS="SECTION"
+><A
+NAME="AEN502"
+>2.1.2.20.2. Upgrading From Previous Versions</A
+></H4
+><P
+>	    The developers of Bugzilla are constantly adding new tables, columns and
+	    fields.  You'll get SQL errors if you just update the code.  The strategy
+	    to update is to simply always run the checksetup.pl script whenever
+	    you upgrade your installation of Bugzilla.  If you want to see what has
+	    changed, you can read the comments in that file, starting from the end.
+	  </P
+></DIV
+><DIV
+CLASS="SECTION"
+><H4
+CLASS="SECTION"
+><A
+NAME="AEN505"
+>2.1.2.20.3. UNIX Installation Instructions History</A
+></H4
+><P
+>	    This document was originally adapted from the Bonsai installation
+	    instructions by Terry Weissman &#60;terry@mozilla.org&#62;.
+	  </P
+><P
+>	    The February 25, 1999 re-write of this page was done by Ry4an Brase
+	    &#60;ry4an@ry4an.org&#62;, with some edits by Terry Weissman, Bryce Nesbitt,
+	    Martin Pool, &#38; Dan Mosedale (But don't send bug reports to them!
+	    Report them using bugzilla, at http://bugzilla.mozilla.org/enter_bug.cgi ,
+	    project Webtools, component Bugzilla).
+	  </P
+><P
+>	    This document was heavily modified again Wednesday, March 07 2001 to
+	    reflect changes for Bugzilla 2.12 release by Matthew P. Barnson.  The
+	    securing MySQL section should be changed to become standard procedure
+	    for Bugzilla installations.
+	  </P
+><P
+>	    Finally, the README in its entirety was marked up in SGML and included into
+	    the Guide on April 24, 2001.
+	  </P
+><P
+>	    Comments from people using this Guide for the first time are particularly welcome.
+	  </P
+></DIV
+></DIV
+></DIV
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="installation.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="readme.windows.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Installing Bugzilla</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="installation.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Win32 (Win98+/NT/2K) Installation</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/readme.windows.html b/docs/html/readme.windows.html
new file mode 100644
index 000000000..dc29a39ef
--- /dev/null
+++ b/docs/html/readme.windows.html
@@ -0,0 +1,755 @@
+<HTML
+><HEAD
+><TITLE
+>Win32 (Win98+/NT/2K) Installation</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="Installing Bugzilla"
+HREF="installation.html"><LINK
+REL="PREVIOUS"
+TITLE="UNIX Installation"
+HREF="readme.unix.html"><LINK
+REL="NEXT"
+TITLE="Administering Bugzilla"
+HREF="administration.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="readme.unix.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Chapter 2. Installing Bugzilla</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="administration.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="README.WINDOWS"
+>2.2. Win32 (Win98+/NT/2K) Installation</A
+></H1
+><P
+>      These directions have <EM
+>not</EM
+> been extensively tested.
+      We need testers!  Please try these out and post any changes to the
+      newsgroup.
+    </P
+><DIV
+CLASS="SECTION"
+><H2
+CLASS="SECTION"
+><A
+NAME="NTVERIFIED"
+>2.2.1. Win32 Installation: Step-by-step</A
+></H2
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	  You should be familiar with, and cross-reference, the UNIX README
+	  while performing your Win32 installation.  Unfortunately, Win32
+	  directions are not yet as detailed as those for UNIX.
+	</P
+><P
+>	  The <EM
+>most critical</EM
+> difference for Win32 users is
+	  the lack of support for a crypt() function in MySQL for Windows.  It does not
+	  have it!  All ENCRYPT statements must be modified.
+	</P
+></BLOCKQUOTE
+></DIV
+><DIV
+CLASS="PROCEDURE"
+><OL
+TYPE="1"
+><LI
+><P
+>	    Install <A
+HREF="http://www.apache.org/"
+TARGET="_top"
+>Apache Web Server</A
+>
+	    for Windows.
+	  </P
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	      You may also use Internet Information Server or Personal Web
+	      Server for this purpose.  However, setup is slightly more
+	      difficult.  If ActivePerl doesn't seem to handle your file
+	      associations correctly (for .cgi and .pl files), please
+	      consult the FAQ, in the "Win32" section.
+	    </P
+><P
+>	      If you are going to use IIS, if on Windows NT you must be updated
+	      to at least Service Pack 4.
+	    </P
+></BLOCKQUOTE
+></DIV
+></LI
+><LI
+><P
+>	    Install <A
+HREF="http://www.activestate.com/"
+TARGET="_top"
+>ActivePerl</A
+>
+	  </P
+><P
+>	    Please also check the following links to fully understand the status
+	    of ActivePerl on Win32:
+	    <A
+HREF="http://language.perl.com/newdocs/pod/perlport.html"
+TARGET="_top"
+>	      Perl Porting</A
+>, and
+	    <A
+HREF="http://ftp.univie.ac.at/packages/perl/ports/nt/FAQ/perlwin32faq5.html"
+TARGET="_top"
+>	      Hixie Click Here</A
+>
+	  </P
+></LI
+><LI
+><P
+>	    Use ppm from your perl\bin directory to install the following packs: DBI,
+	    DBD-Mysql, TimeDate, Chart, Date-Calc, Date-Manip, and GD.  You may need
+	    to extract them from .zip format using Winzip or other unzip program first.
+	    These additional ppm modules can be downloaded from ActiveState.
+	  </P
+><P
+>	    The syntax for ppm is:
+	    <TT
+CLASS="COMPUTEROUTPUT"
+>	      <TT
+CLASS="PROMPT"
+>C:&#62; </TT
+><B
+CLASS="COMMAND"
+>ppm install &#60;module&#62;.ppd</B
+>
+	    </TT
+>
+	  </P
+><P
+>	    You can find ActiveState ppm modules at
+	    <A
+HREF="http://www.activestate.com/PPMPackages/5.6plus/"
+TARGET="_top"
+>	      http://www.activestate.com/PPMPackages/5.6plus</A
+>
+	  </P
+></LI
+><LI
+><P
+>	    Download and install the Windows GNU tools from
+	    <A
+HREF="http://www.cygwin.com/"
+TARGET="_top"
+>www.cygwin.com</A
+>.
+	    Make sure the GNU utilities are in your $PATH.
+	  </P
+></LI
+><LI
+><P
+>	    Install MySQL for NT.
+	    <DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>		Your configuration file for MySQL <EM
+>must</EM
+> be named C:\MY.CNF.
+	      </P
+></BLOCKQUOTE
+></DIV
+>
+	  </P
+></LI
+><LI
+><P
+>	    Setup MySQL
+	  </P
+><OL
+CLASS="SUBSTEPS"
+TYPE="a"
+><LI
+><P
+>		<TT
+CLASS="COMPUTEROUTPUT"
+>		  <TT
+CLASS="PROMPT"
+>C:&#62; </TT
+>
+		  <B
+CLASS="COMMAND"
+>C:\mysql\bin\mysql -u root mysql</B
+>
+		</TT
+>
+	      </P
+></LI
+><LI
+><P
+>		<TT
+CLASS="COMPUTEROUTPUT"
+>		  <TT
+CLASS="PROMPT"
+>mysql&#62;</TT
+>
+		  <B
+CLASS="COMMAND"
+>DELETE FROM user WHERE Host='localhost' AND User='';</B
+>
+		</TT
+>
+	      </P
+></LI
+><LI
+><P
+>		<TT
+CLASS="COMPUTEROUTPUT"
+>		  <TT
+CLASS="PROMPT"
+>mysql&#62;</TT
+>
+		  <B
+CLASS="COMMAND"
+>UPDATE user SET Password=PASSWORD ('new_password')
+		    WHERE user='root';</B
+>
+		</TT
+>
+	      </P
+></LI
+><LI
+><P
+>		<TT
+CLASS="COMPUTEROUTPUT"
+>		  <TT
+CLASS="PROMPT"
+>mysql&#62;</TT
+>
+		  <B
+CLASS="COMMAND"
+>GRANT SELECT, INSERT, UPDATE, DELETE,
+		    INDEX, ALTER, CREATE, DROP, REFERENCES
+		    ON bugs.* to bugs@localhost
+		    IDENTIFIED BY 'bugs_password';</B
+>
+		</TT
+>
+	      </P
+></LI
+><LI
+><P
+>		<TT
+CLASS="COMPUTEROUTPUT"
+>		  <TT
+CLASS="PROMPT"
+>mysql&#62;</TT
+>
+		  <B
+CLASS="COMMAND"
+>FLUSH PRIVILEGES;</B
+>
+		</TT
+>
+	      </P
+></LI
+><LI
+><P
+>		<TT
+CLASS="COMPUTEROUTPUT"
+>		  <TT
+CLASS="PROMPT"
+>mysql&#62;</TT
+>
+		  <B
+CLASS="COMMAND"
+>create database bugs;</B
+>
+		</TT
+>
+	      </P
+></LI
+><LI
+><P
+>		<TT
+CLASS="COMPUTEROUTPUT"
+>		  <TT
+CLASS="PROMPT"
+>mysql&#62;</TT
+>
+		  <B
+CLASS="COMMAND"
+>exit</B
+>
+		</TT
+>
+	      </P
+></LI
+><LI
+><P
+>		<TT
+CLASS="COMPUTEROUTPUT"
+>		  <TT
+CLASS="PROMPT"
+>C:&#62;</TT
+>
+		  <B
+CLASS="COMMAND"
+>C:\mysql\bin\mysqladmin -u root -p reload</B
+>
+		</TT
+>
+	      </P
+></LI
+></OL
+></LI
+><LI
+><P
+>	    Configure Bugzilla.  For Win32, this involves editing "defparams.pl"
+	    and "localconfig" to taste.  Running "checksetup.pl" should create
+	    localconfig for you.  Note that getgrnam() doesn't work, and should be
+	    deleted.  Change this line:
+	    "my $webservergid = getgrnam($my_webservergroup); "
+	    to
+	    "my $webservergid = $my_webservergroup; "
+	  </P
+></LI
+><LI
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	      There are several alternatives to Sendmail that will work on Win32.
+	      The one mentioned here is a <EM
+>suggestion</EM
+>, not
+	      a requirement.  Some other mail packages that can work include
+	      <A
+HREF="http://www.blat.net/"
+TARGET="_top"
+>BLAT</A
+>,
+	      <A
+HREF="http://www.geocel.com/windmail/"
+TARGET="_top"
+>Windmail</A
+>,
+	      <A
+HREF="http://www.dynamicstate.com/"
+TARGET="_top"
+>Mercury Sendmail</A
+>,
+	      and the CPAN Net::SMTP Perl module (available in .ppm).
+	      Every option requires some hacking of the Perl scripts for Bugzilla
+	      to make it work.  The option here simply requires the least.
+	    </P
+></BLOCKQUOTE
+></DIV
+><P
+>	    Download NTsendmail, available from<A
+HREF="http://www.ntsendmail.com/"
+TARGET="_top"
+>	    www.ntsendmail.com</A
+>.  In order for it to work, you must set up some
+	    new environment variables (detailed on the ntsendmail home page).  Figuring
+	    out where to put those variables is left as an exercise for the reader.
+	    You must have a "real" mail server which allows you to relay off it
+	    in your $ENV{"NTsendmail"} (which you should probably place in globals.pl)
+	  </P
+><P
+>	    Once downloaded and installed, modify all open(SENDMAIL) calls to open
+	    "| c:\ntsendmail\ntsendmail -t" instead of "|/usr/lib/sendmail -t".
+	  </P
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	      We need someone to test this and make sure this works as advertised.
+	    </P
+></BLOCKQUOTE
+></DIV
+></LI
+><LI
+><P
+>	    Modify globals.pl and CGI.pl to remove the word "encrypt".
+	  </P
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	      I'm not sure this is all that is involved to remove crypt.  Any
+	      NT Bugzilla hackers want to pipe up?
+	    </P
+></BLOCKQUOTE
+></DIV
+></LI
+><LI
+><P
+>	    Change all references to "processmail" to "processmail.pl" in
+	    all files, and rename "processmail" to "processmail.pl"
+	  </P
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	      I really think this may be a change we want to make for
+	      main-tree Bugzilla.  It's painless for the UNIX folks,
+	      and will make the Win32 people happier.
+	    </P
+></BLOCKQUOTE
+></DIV
+></LI
+><LI
+><P
+>	    Modify the path to perl on the first line (#!) of all files
+	    to point to your Perl installation, and
+	    add "perl" to the beginning of all Perl system calls that
+	    use a perl script as an argument.  This may take you a while.
+	    There is a "setperl.pl" utility to speed part of this procedure,
+	    available in the "Patches and Utilities" section of The Bugzilla Guide.
+	  </P
+></LI
+><LI
+><P
+>	    In processmail.pl, add "binmode(HANDLE)" before all read() calls.
+	    This may not be necessary, but in some cases the read() under
+	    Win32 doesn't count the EOL's without using a binary read().
+	  </P
+></LI
+></OL
+></DIV
+></DIV
+><DIV
+CLASS="SECTION"
+><H2
+CLASS="SECTION"
+><A
+NAME="ADDLWINTIPS"
+>2.2.2. Additional Windows Tips</A
+></H2
+><DIV
+CLASS="TIP"
+><BLOCKQUOTE
+CLASS="TIP"
+><P
+><B
+>Tip: </B
+>	  From Andrew Pearson:
+	  <A
+NAME="AEN624"
+></A
+><BLOCKQUOTE
+CLASS="BLOCKQUOTE"
+><P
+>	      "You can make Bugzilla work with Personal Web Server for
+	      Windows 98 and higher, as well as for IIS 4.0.  Microsoft has
+	      information available at
+	      <A
+HREF=" http://support.microsoft.com/support/kb/articles/Q231/9/98.ASP"
+TARGET="_top"
+>		http://support.microsoft.com/support/kb/articles/Q231/9/98.ASP</A
+>
+	    </P
+><P
+>	      Basically you need to add two String Keys in the
+	      registry at the following location:
+	    </P
+><P
+>	      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ScriptMap
+	    </P
+><P
+>	      The keys should be called ".pl" and ".cgi", and both
+	      should have a value something like:
+	      <B
+CLASS="COMMAND"
+>c:/perl/bin/perl.exe "%s" "%s"</B
+>
+	    </P
+><P
+>	      The KB article only talks about .pl, but it goes into
+	      more detail and provides a perl test script.
+	    </P
+></BLOCKQUOTE
+>
+	</P
+></BLOCKQUOTE
+></DIV
+><DIV
+CLASS="TIP"
+><BLOCKQUOTE
+CLASS="TIP"
+><P
+><B
+>Tip: </B
+>"Brian" had this to add, about upgrading to Bugzilla 2.12 from previous versions:</P
+><A
+NAME="AEN634"
+></A
+><BLOCKQUOTE
+CLASS="BLOCKQUOTE"
+><P
+>	    Hi - I am updating bugzilla to 2.12 so I can tell you what I did (after I
+	    deleted the current dir and copied the files in).
+	  </P
+><P
+>	    In checksetup.pl, I did the following...
+	  </P
+><DIV
+CLASS="PROCEDURE"
+><OL
+TYPE="1"
+><LI
+><TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%"
+><TR
+><TD
+><PRE
+CLASS="PROGRAMLISTING"
+>my $webservergid = getgrnam($my_webservergroup);
+	      </PRE
+></TD
+></TR
+></TABLE
+><P
+>to</P
+><TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%"
+><TR
+><TD
+><PRE
+CLASS="PROGRAMLISTING"
+>my $webservergid = 'Administrators'		
+	      </PRE
+></TD
+></TR
+></TABLE
+></LI
+><LI
+><P
+>		I then ran checksetup.pl
+	      </P
+></LI
+><LI
+><P
+>		I removed all the encrypt()
+		<DIV
+CLASS="EXAMPLE"
+><A
+NAME="AEN646"
+></A
+><P
+><B
+>Example 2-1. Removing encrypt() for Windows NT installations</B
+></P
+><P
+>		    Replace this:
+		    <TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%"
+><TR
+><TD
+><PRE
+CLASS="PROGRAMLISTING"
+>SendSQL("SELECT encrypt(" . SqlQuote($enteredpwd) . ", " .
+    SqlQuote(substr($realcryptpwd, 0, 2)) . ")");
+my $enteredcryptpwd = FetchOneColumn();
+		    </PRE
+></TD
+></TR
+></TABLE
+>
+		    with this:
+		    <TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%"
+><TR
+><TD
+><PRE
+CLASS="PROGRAMLISTING"
+>my $enteredcryptpwd = $enteredpwd
+		    </PRE
+></TD
+></TR
+></TABLE
+>
+		    in cgi.pl.
+		  </P
+></DIV
+>
+	      </P
+></LI
+><LI
+><P
+>		I renamed processmail to processmail.pl
+	      </P
+></LI
+><LI
+><P
+>		I altered the sendmail statements to windmail:
+		<TABLE
+BORDER="0"
+BGCOLOR="#E0E0E0"
+WIDTH="100%"
+><TR
+><TD
+><PRE
+CLASS="PROGRAMLISTING"
+>  
+open SENDMAIL, "|\"C:/General/Web/tools/Windmail 4.0 Beta/windmail\" -t &#62; mail.log";
+		</PRE
+></TD
+></TR
+></TABLE
+>
+	      </P
+><P
+>		The quotes around the dir is for the spaces. mail.log is for the output
+	      </P
+></LI
+></OL
+></DIV
+></BLOCKQUOTE
+></BLOCKQUOTE
+></DIV
+></DIV
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="readme.unix.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="administration.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>UNIX Installation</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="installation.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Administering Bugzilla</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/rhbugzilla.html b/docs/html/rhbugzilla.html
new file mode 100644
index 000000000..1d78c6473
--- /dev/null
+++ b/docs/html/rhbugzilla.html
@@ -0,0 +1,196 @@
+<HTML
+><HEAD
+><TITLE
+>Red Hat Bugzilla</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="Bugzilla Variants"
+HREF="variants.html"><LINK
+REL="PREVIOUS"
+TITLE="Bugzilla Variants"
+HREF="variants.html"><LINK
+REL="NEXT"
+TITLE="Useful Patches and Utilities for Bugzilla"
+HREF="patches.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="variants.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Chapter 7. Bugzilla Variants</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="patches.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="RHBUGZILLA"
+>7.1. Red Hat Bugzilla</A
+></H1
+><P
+>      Red Hat Bugzilla is probably the most popular Bugzilla variant, aside from Mozilla Bugzilla,
+      on the planet.
+      One of the major benefits of Red Hat Bugzilla is the ability to work with Oracle as a
+      database, as well as MySQL.
+      Here's what Dave Lawrence had to say about the status of Red Hat Bugzilla,
+      <A
+NAME="AEN1913"
+></A
+><BLOCKQUOTE
+CLASS="BLOCKQUOTE"
+><P
+CLASS="LITERALLAYOUT"
+>	&nbsp;&nbsp;Hello.&nbsp;I&nbsp;apologize&nbsp;that&nbsp;I&nbsp;am&nbsp;getting&nbsp;back&nbsp;to&nbsp;you&nbsp;so&nbsp;late.&nbsp;It&nbsp;has&nbsp;been&nbsp;difficult&nbsp;to&nbsp;keep<br>
+up&nbsp;with&nbsp;email&nbsp;this&nbsp;past&nbsp;week.&nbsp;I&nbsp;have&nbsp;checked&nbsp;out&nbsp;your&nbsp;updated&nbsp;documentation&nbsp;and&nbsp;I&nbsp;will<br>
+have&nbsp;to&nbsp;say&nbsp;very&nbsp;good&nbsp;work.&nbsp;A&nbsp;few&nbsp;notes&nbsp;and&nbsp;additions&nbsp;as&nbsp;follows.<br>
+<br>
+(ed:&nbsp;from&nbsp;the&nbsp;FAQ)<br>
+&#62;For&nbsp;the&nbsp;record,&nbsp;we&nbsp;are&nbsp;not&nbsp;using&nbsp;any&nbsp;template&nbsp;type&nbsp;implementation&nbsp;for&nbsp;the&nbsp;cosmetic&nbsp;changes&nbsp;<br>
+&#62;maded&nbsp;to&nbsp;Bugzilla.&nbsp;It&nbsp;is&nbsp;just&nbsp;alot&nbsp;of&nbsp;html&nbsp;changes&nbsp;in&nbsp;the&nbsp;code&nbsp;itself.&nbsp;I&nbsp;admit&nbsp;I&nbsp;may&nbsp;have&nbsp;<br>
+&#62;gotten&nbsp;a&nbsp;little&nbsp;carried&nbsp;away&nbsp;with&nbsp;it&nbsp;but&nbsp;the&nbsp;corporate&nbsp;types&nbsp;asked&nbsp;for&nbsp;a&nbsp;more&nbsp;standardized&nbsp;<br>
+&#62;interface&nbsp;to&nbsp;match&nbsp;up&nbsp;with&nbsp;other&nbsp;projects&nbsp;relating&nbsp;to&nbsp;Red&nbsp;Hat&nbsp;web&nbsp;sites.&nbsp;A&nbsp;lot&nbsp;of&nbsp;other&nbsp;web&nbsp;<br>
+&#62;based&nbsp;internal&nbsp;tools&nbsp;I&nbsp;am&nbsp;working&nbsp;on&nbsp;also&nbsp;look&nbsp;like&nbsp;Bugzilla.&nbsp;<br>
+<br>
+<br>
+This&nbsp;should&nbsp;probably&nbsp;be&nbsp;changed&nbsp;since&nbsp;we&nbsp;are&nbsp;now&nbsp;in&nbsp;fact&nbsp;using&nbsp;Text::Template&nbsp;for&nbsp;most<br>
+of&nbsp;the&nbsp;html&nbsp;rendering.&nbsp;You&nbsp;actually&nbsp;state&nbsp;this&nbsp;later&nbsp;in&nbsp;your&nbsp;numbered&nbsp;list.<br>
+<br>
+Also&nbsp;number&nbsp;6&nbsp;contradicts&nbsp;number&nbsp;8&nbsp;where&nbsp;number&nbsp;6&nbsp;would&nbsp;be&nbsp;the&nbsp;most&nbsp;up&nbsp;to&nbsp;date&nbsp;status<br>
+on&nbsp;the&nbsp;Oracle&nbsp;port.<br>
+<br>
+Additional&nbsp;Information:<br>
+-----------------------------<br>
+1.&nbsp;Comments&nbsp;are&nbsp;now&nbsp;stored&nbsp;in&nbsp;varchar&nbsp;fields&nbsp;of&nbsp;4k&nbsp;in&nbsp;size&nbsp;each.&nbsp;If&nbsp;the&nbsp;comment&nbsp;is&nbsp;more<br>
+than&nbsp;4k&nbsp;it&nbsp;is&nbsp;broken&nbsp;up&nbsp;into&nbsp;chunks&nbsp;and&nbsp;given&nbsp;a&nbsp;sort&nbsp;number&nbsp;so&nbsp;each&nbsp;comment&nbsp;can&nbsp;be&nbsp;re<br>
+assembled&nbsp;in&nbsp;the&nbsp;correct&nbsp;order.&nbsp;This&nbsp;was&nbsp;done&nbsp;because&nbsp;originally&nbsp;I&nbsp;was&nbsp;storing&nbsp;the&nbsp;comments<br>
+in&nbsp;a&nbsp;long&nbsp;datatype&nbsp;which&nbsp;unfortunately&nbsp;cannot&nbsp;be&nbsp;indexed&nbsp;or&nbsp;joined&nbsp;with&nbsp;another&nbsp;table.&nbsp;This<br>
+cause&nbsp;the&nbsp;search&nbsp;of&nbsp;text&nbsp;within&nbsp;the&nbsp;long&nbsp;description&nbsp;to&nbsp;be&nbsp;disabled&nbsp;for&nbsp;a&nbsp;long&nbsp;time.&nbsp;That<br>
+is&nbsp;now&nbsp;working&nbsp;and&nbsp;is&nbsp;nto&nbsp;showing&nbsp;any&nbsp;noticeble&nbsp;performance&nbsp;hit&nbsp;that&nbsp;I&nbsp;can&nbsp;tell.&nbsp;<br>
+<br>
+2.&nbsp;Work&nbsp;is&nbsp;being&nbsp;started&nbsp;on&nbsp;internationalizing&nbsp;the&nbsp;Bugzilla&nbsp;source&nbsp;we&nbsp;have&nbsp;to&nbsp;allow&nbsp;our<br>
+Japanese&nbsp;customers&nbsp;to&nbsp;enter&nbsp;bug&nbsp;reports&nbsp;into&nbsp;a&nbsp;single&nbsp;bugzilla&nbsp;system.&nbsp;This&nbsp;will&nbsp;probably<br>
+be&nbsp;done&nbsp;by&nbsp;using&nbsp;the&nbsp;nvarchar&nbsp;data&nbsp;types&nbsp;supported&nbsp;by&nbsp;Oracle&nbsp;which&nbsp;allows&nbsp;storage&nbsp;of<br>
+double&nbsp;byte&nbsp;characters&nbsp;and&nbsp;also&nbsp;the&nbsp;use&nbsp;of&nbsp;the&nbsp;Accept-Language&nbsp;in&nbsp;the&nbsp;http&nbsp;header&nbsp;for&nbsp;<br>
+detection&nbsp;by&nbsp;Bugilla&nbsp;of&nbsp;which&nbsp;language&nbsp;to&nbsp;render.<br>
+<br>
+3.&nbsp;Of&nbsp;course&nbsp;even&nbsp;more&nbsp;cosmetic&nbsp;changes.&nbsp;It&nbsp;is&nbsp;difficult&nbsp;to&nbsp;keep&nbsp;up&nbsp;with&nbsp;the&nbsp;ever&nbsp;<br>
+changing&nbsp;faces&nbsp;of&nbsp;www.redhat.com.<br>
+<br>
+4.&nbsp;Some&nbsp;convenience&nbsp;enhancements&nbsp;in&nbsp;the&nbsp;administration&nbsp;utilities.&nbsp;And&nbsp;more&nbsp;integration<br>
+with&nbsp;other&nbsp;internal/external&nbsp;Red&nbsp;Hat&nbsp;web&nbsp;sites.<br>
+<br>
+I&nbsp;hope&nbsp;this&nbsp;information&nbsp;may&nbsp;prove&nbsp;helpful&nbsp;for&nbsp;your&nbsp;documentation.&nbsp;Please&nbsp;contact<br>
+me&nbsp;if&nbsp;you&nbsp;have&nbsp;any&nbsp;more&nbsp;question&nbsp;or&nbsp;I&nbsp;can&nbsp;do&nbsp;anything&nbsp;else.<br>
+<br>
+Regards<br>
+	</P
+></BLOCKQUOTE
+>
+    </P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="variants.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="patches.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Bugzilla Variants</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="variants.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Useful Patches and Utilities for Bugzilla</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/scm.html b/docs/html/scm.html
new file mode 100644
index 000000000..87dd195f1
--- /dev/null
+++ b/docs/html/scm.html
@@ -0,0 +1,169 @@
+<HTML
+><HEAD
+><TITLE
+>Perforce SCM</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="Integrating Bugzilla with Third-Party Tools"
+HREF="integration.html"><LINK
+REL="PREVIOUS"
+TITLE="CVS"
+HREF="cvs.html"><LINK
+REL="NEXT"
+TITLE="Tinderbox"
+HREF="tinderbox.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="cvs.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Chapter 5. Integrating Bugzilla with Third-Party Tools</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="tinderbox.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="SCM"
+>5.3. Perforce SCM</A
+></H1
+><P
+>      Richard Brooksby created a Perforce integration tool for Bugzilla and TeamTrack.
+      You can find the main project page at
+      <A
+HREF="http://www.ravenbrook.com/project/p4dti/"
+TARGET="_top"
+>	http://www.ravenbrook.com/project/p4dti</A
+>.  "p4dti" is now an officially
+      supported product from Perforce, and you can find the "Perforce Public Depot"
+      p4dti page at <A
+HREF="http://public.perforce.com/public/perforce/p4dti/index.html"
+TARGET="_top"
+>	http://public.perforce.com/public/perforce/p4dti/index.html</A
+>.
+    </P
+><P
+>      Integration of Perforce with Bugzilla, once patches are applied, is fairly seamless.  However,
+      p4dti is a patch against the Bugzilla 2.10 release, not the current 2.12 release.  I anticipate
+      patches for 2.12 will be out shortly.  Check the project page regularly for updates, or
+      take the given patches and patch it manually.  p4dti is designed to support multiple defect
+      trackers, and maintains its own documentation for it.  Please consult the pages linked
+      above for further information.
+    </P
+><P
+>      Right now, there is no way to synchronize the Bug ID and the Perforce Transaction Number, or
+      to change the Bug ID to read (PRODUCT).bugID unless you hack it in.  Additionally, if you
+      have synchronization problems, the easiest way to avoid them is to only put the bug
+      information, comments, etc. into Bugzilla, and not into the Perforce change records.
+      They will link anyway; merely reference the bug ID fixed in your change description,
+      and put a comment into Bugzilla
+      giving the change ID that fixed the Bugzilla bug.  It's a process issue, not a technology
+      question.
+    </P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="cvs.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="tinderbox.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>CVS</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="integration.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Tinderbox</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/searching.html b/docs/html/searching.html
new file mode 100644
index 000000000..39cfe2793
--- /dev/null
+++ b/docs/html/searching.html
@@ -0,0 +1,197 @@
+<HTML
+><HEAD
+><TITLE
+>Better Searching</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="The Future of Bugzilla"
+HREF="future.html"><LINK
+REL="PREVIOUS"
+TITLE="Reducing Spam"
+HREF="spamlite.html"><LINK
+REL="NEXT"
+TITLE="Description Flags and Tracking Bugs"
+HREF="trackingbugs.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="spamlite.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Chapter 6. The Future of Bugzilla</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="trackingbugs.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="SEARCHING"
+>6.2. Better Searching</A
+></H1
+><P
+><P
+CLASS="LITERALLAYOUT"
+>Current&nbsp;searching&nbsp;tools&nbsp;in&nbsp;Bugzilla&nbsp;include&nbsp;the&nbsp;querying&nbsp;mechanism,<br>
+special&nbsp;summary&nbsp;reports&nbsp;and&nbsp;dependency&nbsp;trees.&nbsp;&nbsp;This&nbsp;message&nbsp;is&nbsp;about&nbsp;new<br>
+facilities.<br>
+<br>
+1.&nbsp;General&nbsp;Summary&nbsp;Reports<br>
+<br>
+For&nbsp;some&nbsp;time&nbsp;now&nbsp;it&nbsp;has&nbsp;been&nbsp;apparent&nbsp;to&nbsp;me&nbsp;that&nbsp;the&nbsp;query&nbsp;bug&nbsp;list<br>
+leaves&nbsp;a&nbsp;little&nbsp;to&nbsp;be&nbsp;desired&nbsp;in&nbsp;its&nbsp;linear&nbsp;nature.&nbsp;&nbsp;There&nbsp;is&nbsp;a&nbsp;need&nbsp;to<br>
+have&nbsp;categorised&nbsp;subsets,&nbsp;and&nbsp;counts&nbsp;of&nbsp;each&nbsp;category.&nbsp;&nbsp;If&nbsp;you&nbsp;don't<br>
+believe&nbsp;me,&nbsp;how&nbsp;about&nbsp;these&nbsp;facilities&nbsp;already&nbsp;in&nbsp;place&nbsp;or&nbsp;which&nbsp;people<br>
+have&nbsp;asked&nbsp;for:<br>
+<br>
+Most&nbsp;Doomed&nbsp;Reports&nbsp;-&nbsp;Categorised&nbsp;On&nbsp;Assignee,&nbsp;Shows&nbsp;and&nbsp;Counts&nbsp;Number<br>
+of&nbsp;Bugs&nbsp;For&nbsp;Each&nbsp;Assignee<br>
+Bug&nbsp;#15806&nbsp;(Most&nbsp;Voted&nbsp;For&nbsp;Bugs)&nbsp;-&nbsp;Categorised&nbsp;On&nbsp;Product,&nbsp;Shows&nbsp;Bugs<br>
+Voters&nbsp;Most&nbsp;Want&nbsp;Fixed<br>
+Bug&nbsp;#9789&nbsp;(BugAThon&nbsp;Tracking&nbsp;Page)&nbsp;-&nbsp;Categorised&nbsp;On&nbsp;Developer&nbsp;(Subset),<br>
+Counts&nbsp;Number&nbsp;of&nbsp;Bugs<br>
+Bug&nbsp;#9409&nbsp;and&nbsp;#9411&nbsp;-&nbsp;The&nbsp;desire&nbsp;to&nbsp;be&nbsp;able&nbsp;to&nbsp;report&nbsp;on&nbsp;more&nbsp;subsets.<br>
+<br>
+Hopefully&nbsp;you&nbsp;can&nbsp;see&nbsp;the&nbsp;gist&nbsp;of&nbsp;what&nbsp;is&nbsp;desired&nbsp;here.&nbsp;&nbsp;It's&nbsp;a&nbsp;general<br>
+reporting&nbsp;mechanism.<br>
+<br>
+This&nbsp;mechanism&nbsp;lets&nbsp;you&nbsp;choose&nbsp;the&nbsp;subset&nbsp;of&nbsp;bugs&nbsp;to&nbsp;operate&nbsp;on&nbsp;(like<br>
+query),&nbsp;let's&nbsp;you&nbsp;categorise&nbsp;them,&nbsp;possibly&nbsp;along&nbsp;with&nbsp;subcategories&nbsp;and<br>
+counts&nbsp;the&nbsp;number&nbsp;of&nbsp;bugs&nbsp;within&nbsp;each&nbsp;category.&nbsp;&nbsp;It&nbsp;might&nbsp;or&nbsp;might&nbsp;not<br>
+show&nbsp;the&nbsp;actual&nbsp;bugs&nbsp;themselves,&nbsp;and&nbsp;it&nbsp;might&nbsp;limit&nbsp;the&nbsp;number&nbsp;of&nbsp;bugs<br>
+within&nbsp;a&nbsp;category,&nbsp;or&nbsp;categories&nbsp;to&nbsp;report&nbsp;on.<br>
+<br>
+I'm&nbsp;further&nbsp;sure&nbsp;that&nbsp;many&nbsp;applications&nbsp;of&nbsp;this&nbsp;mechanism&nbsp;would&nbsp;only&nbsp;be<br>
+recognised&nbsp;once&nbsp;it&nbsp;was&nbsp;implemented.<br>
+<br>
+The&nbsp;general&nbsp;summary&nbsp;reports&nbsp;bug&nbsp;is&nbsp;at<br>
+"http://bugzilla.mozilla.org/show_bug.cgi?id=12282".<br>
+<br>
+2.&nbsp;Related&nbsp;Bugs<br>
+<br>
+It&nbsp;would&nbsp;be&nbsp;nice&nbsp;to&nbsp;have&nbsp;a&nbsp;field&nbsp;where&nbsp;you&nbsp;could&nbsp;enter&nbsp;other&nbsp;bugs<br>
+related&nbsp;to&nbsp;the&nbsp;current&nbsp;bug&nbsp;-&nbsp;it&nbsp;would&nbsp;be&nbsp;handy&nbsp;for&nbsp;navigation&nbsp;and<br>
+possibly&nbsp;even&nbsp;finding&nbsp;duplicates.&nbsp;&nbsp;See<br>
+"http://bugzilla.mozilla.org/show_bug.cgi?id=12286".<br>
+<br>
+3.&nbsp;Column&nbsp;Specification&nbsp;Support<br>
+<br>
+Currently&nbsp;query&nbsp;seems&nbsp;to&nbsp;get&nbsp;what&nbsp;columns&nbsp;to&nbsp;report&nbsp;on&nbsp;from&nbsp;whatever&nbsp;the<br>
+user&nbsp;last&nbsp;used.&nbsp;&nbsp;This&nbsp;doesn't&nbsp;work&nbsp;well&nbsp;for&nbsp;"prepackaged&nbsp;queries",&nbsp;where<br>
+you&nbsp;followed&nbsp;a&nbsp;link.&nbsp;&nbsp;You&nbsp;can&nbsp;probably&nbsp;add&nbsp;a&nbsp;column&nbsp;by&nbsp;specifying&nbsp;a&nbsp;sort<br>
+column,&nbsp;but&nbsp;this&nbsp;is&nbsp;difficult&nbsp;and&nbsp;suboptimal.<br>
+<br>
+Furthermore,&nbsp;I&nbsp;find&nbsp;that&nbsp;when&nbsp;I&nbsp;want&nbsp;to&nbsp;add&nbsp;a&nbsp;column&nbsp;to&nbsp;a&nbsp;query,&nbsp;it's<br>
+usually&nbsp;a&nbsp;one&nbsp;off&nbsp;and&nbsp;I&nbsp;would&nbsp;prefer&nbsp;it&nbsp;to&nbsp;go&nbsp;away&nbsp;for&nbsp;the&nbsp;next&nbsp;query.&nbsp;<br>
+Hence,&nbsp;it&nbsp;would&nbsp;be&nbsp;nice&nbsp;to&nbsp;specify&nbsp;the&nbsp;columns&nbsp;that&nbsp;appear&nbsp;on&nbsp;the&nbsp;query<br>
+(and&nbsp;general&nbsp;summary&nbsp;report)&nbsp;pages.&nbsp;&nbsp;The&nbsp;default&nbsp;query&nbsp;mechanism&nbsp;should<br>
+be&nbsp;able&nbsp;to&nbsp;let&nbsp;you&nbsp;specify&nbsp;your&nbsp;default&nbsp;columns.<br>
+<br>
+This&nbsp;proposal&nbsp;lives&nbsp;at<br>
+"http://bugzilla.mozilla.org/show_bug.cgi?id=12284".</P
+></P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="spamlite.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="trackingbugs.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Reducing Spam</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="future.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Description Flags and Tracking Bugs</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/security.html b/docs/html/security.html
new file mode 100644
index 000000000..220559a72
--- /dev/null
+++ b/docs/html/security.html
@@ -0,0 +1,299 @@
+<HTML
+><HEAD
+><TITLE
+>Bugzilla Security</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="Administering Bugzilla"
+HREF="administration.html"><LINK
+REL="PREVIOUS"
+TITLE="Product, Component, Milestone, and Version Administration"
+HREF="programadmin.html"><LINK
+REL="NEXT"
+TITLE="Using Bugzilla"
+HREF="using.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="programadmin.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Chapter 3. Administering Bugzilla</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="using.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="SECURITY"
+>3.4. Bugzilla Security</A
+></H1
+><TABLE
+BORDER="0"
+WIDTH="100%"
+CELLSPACING="0"
+CELLPADDING="0"
+CLASS="EPIGRAPH"
+><TR
+><TD
+WIDTH="45%"
+>&nbsp;</TD
+><TD
+WIDTH="45%"
+ALIGN="LEFT"
+VALIGN="TOP"
+><I
+><P
+><I
+>Putting your money in a wall safe is better protection than depending on the fact that
+	no one knows that you hide your money in a mayonnaise jar in your fridge.</I
+></P
+></I
+></TD
+></TR
+></TABLE
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	Poorly-configured MySQL, Bugzilla, and FTP installations have given attackers full
+	access to systems in the past.  Please take these guidelines seriously, even
+	for Bugzilla machines hidden away behind your firewall.  80% of all computer
+	trespassers are insiders, not anonymous crackers.
+      </P
+></BLOCKQUOTE
+></DIV
+><P
+>      First thing's first: Secure your installation.
+      <DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>	  These instructions must, of necessity, be somewhat vague since Bugzilla runs on so many different
+	  platforms.  If you have refinements of these directions for specific platforms, please
+	  submit them to <A
+HREF="mailto://mozilla-webtools@mozilla.org"
+TARGET="_top"
+>mozilla-webtools@mozilla.org</A
+>
+	</P
+></BLOCKQUOTE
+></DIV
+>
+      <P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>	    Ensure you are running at least MysQL version 3.22.32 or newer.  Earlier versions had
+	    notable security holes and poorly secured default configuration choices.
+	  </P
+></LI
+><LI
+><P
+><EM
+>There is no substitute for understanding the tools on your system!</EM
+>
+	    Read <A
+HREF="http://www.mysql.com/documentation/mysql/bychapter/manual_Privilege_system.html"
+TARGET="_top"
+>	  The MySQL Privelege System</A
+> until you can recite it from memory!</P
+><P
+>	    At the very least, ensure you password the "mysql -u root" account and the "bugs" account, establish grant
+	    table rights (consult the Keystone guide in Appendix C: The Bugzilla Database for some easy-to-use details)
+	    that do not allow CREATE, DROP, RELOAD, SHUTDOWN, and PROCESS for user "bugs".  I wrote up the Keystone
+	    advice back when I knew far less about security than I do now : )
+	  </P
+></LI
+><LI
+><P
+>	    Lock down /etc/inetd.conf.  Heck, disable inet entirely on this box.  It should only listen to
+	    port 25 for Sendmail
+	    and port 80 for Apache.
+	  </P
+></LI
+><LI
+><P
+>Do not run Apache as "nobody".  This will require very lax permissions in your Bugzilla directories.
+	  Run it, instead, as a user with a name, set via your httpd.conf file.</P
+></LI
+><LI
+><P
+>	    Ensure you have adequate access controls for the $BUGZILLA_HOME/data/ and
+	    $BUGZILLA_HOME/shadow/ directories, as well as the $BUGZILLA_HOME/localconfig file.
+	    The localconfig file stores your "bugs" user password,
+	    which would be terrible to have in the hands
+	    of a criminal.  Also some files under $BUGZILLA_HOME/data/ store sensitive information, and
+	    $BUGZILLA_HOME/shadow/ stores bug information for faster retrieval.  If you fail to secure
+	    these directories and this file, you will expose bug information to those who may not
+	    be allowed to see it.
+	  </P
+><P
+>	    On Apache, you can use .htaccess files to protect access to these directories, as outlined
+	    in <A
+HREF="http://bugzilla.mozilla.org/show_bug.cgi?id=57161"
+TARGET="_top"
+>Bug 57161</A
+> for the
+	    localconfig file, and <A
+HREF="http://bugzilla.mozilla.org/show_bug.cgi?id=65572"
+TARGET="_top"
+>	    Bug 65572</A
+> for adequate protection in your data/ and shadow/ directories.
+	  </P
+><P
+>	    Note the instructions which follow are Apache-specific.  If you use IIS, Netscape, or other
+	    non-Apache web servers, please consult your system documentation for how to secure these
+	    files from being transmitted to curious users.
+	  </P
+><P
+>	    Place the following text into a file named ".htaccess", readable by your web server,
+	    in your $BUGZILLA_HOME/data directory.
+	    <P
+CLASS="LITERALLAYOUT"
+>	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;Files&nbsp;comments&#62;<br>
+	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;allow&nbsp;from&nbsp;all<br>
+	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;/Files&#62;<br>
+	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;deny&nbsp;from&nbsp;all<br>
+	&nbsp;&nbsp;&nbsp;&nbsp;</P
+>
+	  </P
+><P
+>	    Place the following text into a file named ".htaccess", readable by your web server,
+	    in your $BUGZILLA_HOME/ directory.
+	    <P
+CLASS="LITERALLAYOUT"
+>	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;Files&nbsp;localconfig&#62;<br>
+	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;deny&nbsp;from&nbsp;all<br>
+	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#60;/Files&#62;<br>
+	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;allow&nbsp;from&nbsp;all<br>
+	&nbsp;&nbsp;&nbsp;&nbsp;</P
+>
+	  </P
+><P
+>	    Place the following text into a file named ".htaccess", readable by your web server,
+	    in your $BUGZILLA_HOME/shadow directory.
+	    <P
+CLASS="LITERALLAYOUT"
+>	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;deny&nbsp;from&nbsp;all<br>
+	&nbsp;&nbsp;&nbsp;&nbsp;</P
+>
+	  </P
+></LI
+></OL
+>
+    </P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="programadmin.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="using.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Product, Component, Milestone, and Version Administration</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="administration.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Using Bugzilla</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/setperl.html b/docs/html/setperl.html
new file mode 100644
index 000000000..376d87a1a
--- /dev/null
+++ b/docs/html/setperl.html
@@ -0,0 +1,308 @@
+<HTML
+><HEAD
+><TITLE
+>The setperl.csh Utility</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="Useful Patches and Utilities for Bugzilla"
+HREF="patches.html"><LINK
+REL="PREVIOUS"
+TITLE="Useful Patches and Utilities for Bugzilla"
+HREF="patches.html"><LINK
+REL="NEXT"
+TITLE="Command-line Bugzilla Queries"
+HREF="cmdline.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="patches.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Appendix D. Useful Patches and Utilities for Bugzilla</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="cmdline.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="SETPERL"
+>D.1. The setperl.csh Utility</A
+></H1
+><P
+>	
+      You can use the "setperl.csh" utility to quickly and easily
+      change the path to perl on all your Bugzilla files.
+      This is a C-shell script; if you do not have "csh" or "tcsh" in the search
+      path on your system, it will not work!
+    </P
+><DIV
+CLASS="PROCEDURE"
+><OL
+TYPE="1"
+><LI
+><P
+>	  Download the "setperl.csh" utility to your Bugzilla
+	  directory and make it executable.
+	</P
+><OL
+CLASS="SUBSTEPS"
+TYPE="a"
+><LI
+><P
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>bash#</TT
+>
+		<B
+CLASS="COMMAND"
+>cd /your/path/to/bugzilla</B
+>
+	      </TT
+>
+	    </P
+></LI
+><LI
+><P
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>bash#</TT
+>
+		<B
+CLASS="COMMAND"
+>wget -O setperl.csh 'http://bugzilla.mozilla.org/showattachment.cgi?attach_id=10795'</B
+>
+	      </TT
+>
+	    </P
+></LI
+><LI
+><P
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>bash#</TT
+>
+		<B
+CLASS="COMMAND"
+>chmod u+x setperl.csh</B
+>
+	      </TT
+>
+	    </P
+></LI
+></OL
+></LI
+><LI
+><P
+>	  Prepare (and fix) Bugzilla file permissions.
+	</P
+><OL
+CLASS="SUBSTEPS"
+TYPE="a"
+><LI
+><P
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>bash#</TT
+>
+		<B
+CLASS="COMMAND"
+>chmod u+w *</B
+>
+	      </TT
+>
+	    </P
+></LI
+><LI
+><P
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>bash#</TT
+>
+		<B
+CLASS="COMMAND"
+>chmod u+x duplicates.cgi</B
+>
+	      </TT
+>
+	    </P
+></LI
+><LI
+><P
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>		<TT
+CLASS="PROMPT"
+>bash#</TT
+>
+		<B
+CLASS="COMMAND"
+>chmod a-x bug_status.html</B
+>
+	      </TT
+>
+	    </P
+></LI
+></OL
+></LI
+><LI
+><P
+>	  Run the script:
+	</P
+><P
+>	  <TT
+CLASS="COMPUTEROUTPUT"
+>	    <TT
+CLASS="PROMPT"
+>bash#</TT
+>
+	    <B
+CLASS="COMMAND"
+>./setperl.csh /your/path/to/perl</B
+>
+	  </TT
+>
+<DIV
+CLASS="EXAMPLE"
+><A
+NAME="AEN1963"
+></A
+><P
+><B
+>Example D-1. Using Setperl to set your perl path</B
+></P
+><P
+>	      <TT
+CLASS="COMPUTEROUTPUT"
+>	      <TT
+CLASS="PROMPT"
+>bash#</TT
+>
+	      <B
+CLASS="COMMAND"
+>./setperl.csh /usr/bin/perl</B
+>
+	      </TT
+>
+            </P
+></DIV
+>
+	</P
+></LI
+></OL
+></DIV
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="patches.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="cmdline.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Useful Patches and Utilities for Bugzilla</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="patches.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Command-line Bugzilla Queries</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/spamlite.html b/docs/html/spamlite.html
new file mode 100644
index 000000000..b5701aa8f
--- /dev/null
+++ b/docs/html/spamlite.html
@@ -0,0 +1,189 @@
+<HTML
+><HEAD
+><TITLE
+>Reducing Spam</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="The Future of Bugzilla"
+HREF="future.html"><LINK
+REL="PREVIOUS"
+TITLE="The Future of Bugzilla"
+HREF="future.html"><LINK
+REL="NEXT"
+TITLE="Better Searching"
+HREF="searching.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="future.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Chapter 6. The Future of Bugzilla</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="searching.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="SPAMLITE"
+>6.1. Reducing Spam</A
+></H1
+><P
+><P
+CLASS="LITERALLAYOUT"
+>Those&nbsp;who&nbsp;use&nbsp;Bugzilla&nbsp;frequently&nbsp;are&nbsp;probably&nbsp;used&nbsp;to&nbsp;notification&nbsp;spam<br>
+-&nbsp;unwanted&nbsp;or&nbsp;unnecessary&nbsp;notifications.&nbsp;&nbsp;A&nbsp;number&nbsp;of&nbsp;proposals&nbsp;have<br>
+been&nbsp;put&nbsp;forward&nbsp;to&nbsp;attempt&nbsp;to&nbsp;reduce&nbsp;this.<br>
+<br>
+1.&nbsp;Reduce&nbsp;CC&nbsp;Spam<br>
+<br>
+Some&nbsp;of&nbsp;you&nbsp;probably&nbsp;know&nbsp;me&nbsp;as&nbsp;that&nbsp;guy&nbsp;who&nbsp;CCs&nbsp;on&nbsp;heaps&nbsp;and&nbsp;heaps&nbsp;of<br>
+bugs.&nbsp;&nbsp;Just&nbsp;as&nbsp;you&nbsp;get&nbsp;a&nbsp;lot&nbsp;of&nbsp;CC&nbsp;changes&nbsp;from&nbsp;me,&nbsp;so&nbsp;do&nbsp;I&nbsp;get&nbsp;a&nbsp;lot<br>
+from&nbsp;others.&nbsp;&nbsp;Why&nbsp;should&nbsp;CC&nbsp;changes&nbsp;send&nbsp;out&nbsp;email&nbsp;notifications?<br>
+<br>
+It's&nbsp;not&nbsp;necessarily&nbsp;the&nbsp;best&nbsp;idea&nbsp;to&nbsp;just&nbsp;remove&nbsp;the&nbsp;CC&nbsp;spam,&nbsp;there&nbsp;are<br>
+other&nbsp;issues&nbsp;too,&nbsp;like&nbsp;the&nbsp;difficulty&nbsp;of&nbsp;adding&nbsp;to&nbsp;large&nbsp;CC&nbsp;fields.<br>
+<br>
+For&nbsp;these&nbsp;reasons&nbsp;and&nbsp;more,&nbsp;an&nbsp;RFE&nbsp;for&nbsp;a&nbsp;per&nbsp;user&nbsp;"BCC"&nbsp;facility&nbsp;exists<br>
+that&nbsp;people&nbsp;could&nbsp;use&nbsp;to&nbsp;silently&nbsp;and&nbsp;privately&nbsp;track&nbsp;bugs,&nbsp;in&nbsp;a&nbsp;similar<br>
+way&nbsp;to&nbsp;voting&nbsp;today,&nbsp;but&nbsp;applying&nbsp;to&nbsp;an&nbsp;unlimited&nbsp;number&nbsp;of&nbsp;bugs.&nbsp;&nbsp;See<br>
+"http://bugzilla.mozilla.org/show_bug.cgi?id=7345".<br>
+<br>
+2.&nbsp;Bulk&nbsp;Changes<br>
+<br>
+You&nbsp;know&nbsp;the&nbsp;drill&nbsp;-&nbsp;a&nbsp;large&nbsp;milestone&nbsp;change,&nbsp;a&nbsp;component&nbsp;movement,<br>
+whatever,&nbsp;and&nbsp;lots&nbsp;of&nbsp;notifications&nbsp;are&nbsp;generated.&nbsp;&nbsp;If&nbsp;there's&nbsp;enough<br>
+maybe&nbsp;you'll&nbsp;just&nbsp;go&nbsp;delete,&nbsp;delete,&nbsp;delete,&nbsp;whoops,&nbsp;there&nbsp;goes&nbsp;another<br>
+notification&nbsp;that&nbsp;wasn't&nbsp;from&nbsp;the&nbsp;bulk&nbsp;change&nbsp;you&nbsp;missed.<br>
+<br>
+Shouldn't&nbsp;bulk&nbsp;changes&nbsp;send&nbsp;out&nbsp;one&nbsp;notification?&nbsp;&nbsp;A&nbsp;proposal&nbsp;for&nbsp;this<br>
+is&nbsp;at&nbsp;"http://bugzilla.mozilla.org/show_bug.cgi?id=26943".<br>
+<br>
+3.&nbsp;Configurable&nbsp;Notification&nbsp;Criteria<br>
+<br>
+It&nbsp;would&nbsp;be&nbsp;good&nbsp;if&nbsp;you&nbsp;could&nbsp;choose&nbsp;what&nbsp;you&nbsp;want&nbsp;to&nbsp;receive.&nbsp;&nbsp;There<br>
+are&nbsp;two&nbsp;parts&nbsp;to&nbsp;this.<br>
+<br>
+(a)&nbsp;Choose&nbsp;a&nbsp;selection&nbsp;of&nbsp;bugs&nbsp;you're&nbsp;interested&nbsp;in.&nbsp;&nbsp;This&nbsp;would&nbsp;be<br>
+similar&nbsp;to&nbsp;CC&nbsp;except&nbsp;you&nbsp;let&nbsp;the&nbsp;set&nbsp;be&nbsp;computed&nbsp;from&nbsp;selection&nbsp;criteria<br>
+rather&nbsp;than&nbsp;limited&nbsp;to&nbsp;the&nbsp;bugs&nbsp;your&nbsp;name&nbsp;is&nbsp;on.&nbsp;&nbsp;There&nbsp;is&nbsp;currently&nbsp;a<br>
+limited&nbsp;version&nbsp;of&nbsp;this&nbsp;in&nbsp;the&nbsp;bugzilla&nbsp;preferences,&nbsp;ie&nbsp;"all&nbsp;qualifying<br>
+bugs"/"all&nbsp;qualifying&nbsp;bugs&nbsp;except&nbsp;the&nbsp;ones&nbsp;I&nbsp;change"/"only&nbsp;those&nbsp;bugs<br>
+which&nbsp;I&nbsp;am&nbsp;listed&nbsp;on&nbsp;the&nbsp;cc&nbsp;line".<br>
+(b)&nbsp;Choose&nbsp;what&nbsp;changes&nbsp;will&nbsp;trigger&nbsp;a&nbsp;notification&nbsp;for&nbsp;the&nbsp;bugs&nbsp;you&nbsp;are<br>
+watching.&nbsp;&nbsp;With&nbsp;this,&nbsp;you&nbsp;could&nbsp;choose&nbsp;whether&nbsp;you&nbsp;want&nbsp;to&nbsp;receive&nbsp;cc,<br>
+dependency&nbsp;and&nbsp;keyword&nbsp;changes,&nbsp;for&nbsp;example.<br>
+<br>
+Both&nbsp;of&nbsp;these&nbsp;proposals&nbsp;live&nbsp;at<br>
+"http://bugzilla.mozilla.org/show_bug.cgi?id=14137".<br>
+Note&nbsp;that&nbsp;they&nbsp;also&nbsp;live&nbsp;at<br>
+"http://bugzilla.mozilla.org/show_bug.cgi?id=17464",&nbsp;and&nbsp;the&nbsp;change&nbsp;<br>
+has&nbsp;been&nbsp;checked&nbsp;in.&nbsp;&nbsp;This&nbsp;is&nbsp;fixed&nbsp;with&nbsp;Bugzilla&nbsp;2.12&nbsp;and&nbsp;is&nbsp;no&nbsp;longer<br>
+an&nbsp;issue.&nbsp;&nbsp;Woo-Hoo!</P
+></P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="future.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="searching.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>The Future of Bugzilla</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="future.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Better Searching</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/tinderbox.html b/docs/html/tinderbox.html
new file mode 100644
index 000000000..6ed10c5fb
--- /dev/null
+++ b/docs/html/tinderbox.html
@@ -0,0 +1,138 @@
+<HTML
+><HEAD
+><TITLE
+>Tinderbox</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="Integrating Bugzilla with Third-Party Tools"
+HREF="integration.html"><LINK
+REL="PREVIOUS"
+TITLE="Perforce SCM"
+HREF="scm.html"><LINK
+REL="NEXT"
+TITLE="The Future of Bugzilla"
+HREF="future.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="scm.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Chapter 5. Integrating Bugzilla with Third-Party Tools</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="future.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="TINDERBOX"
+>5.4. Tinderbox</A
+></H1
+><P
+>We need Tinderbox integration information</P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="scm.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="future.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Perforce SCM</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="integration.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>The Future of Bugzilla</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/trackingbugs.html b/docs/html/trackingbugs.html
new file mode 100644
index 000000000..4083db800
--- /dev/null
+++ b/docs/html/trackingbugs.html
@@ -0,0 +1,193 @@
+<HTML
+><HEAD
+><TITLE
+>Description Flags and Tracking Bugs</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="The Future of Bugzilla"
+HREF="future.html"><LINK
+REL="PREVIOUS"
+TITLE="Better Searching"
+HREF="searching.html"><LINK
+REL="NEXT"
+TITLE="Bug Issues"
+HREF="bugprobs.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="searching.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Chapter 6. The Future of Bugzilla</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="bugprobs.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="TRACKINGBUGS"
+>6.3. Description Flags and Tracking Bugs</A
+></H1
+><P
+><P
+CLASS="LITERALLAYOUT"
+>Since&nbsp;I&nbsp;last&nbsp;posted&nbsp;on&nbsp;this&nbsp;issue,&nbsp;we&nbsp;now&nbsp;have&nbsp;"keywords"&nbsp;that&nbsp;solve<br>
+many&nbsp;of&nbsp;the&nbsp;issues&nbsp;of&nbsp;description&nbsp;and&nbsp;status&nbsp;whiteboard&nbsp;keywords.&nbsp;&nbsp;We<br>
+have&nbsp;seen&nbsp;a&nbsp;migration&nbsp;towards&nbsp;keywords,&nbsp;but&nbsp;there&nbsp;is&nbsp;still&nbsp;further&nbsp;to<br>
+go.<br>
+<br>
+Description&nbsp;(&nbsp;+&nbsp;Status&nbsp;Whiteboard&nbsp;)&nbsp;Keywords<br>
+--------------------------------------------<br>
+<br>
+Some&nbsp;description&nbsp;keywords&nbsp;remain.&nbsp;&nbsp;I'd&nbsp;like&nbsp;to&nbsp;hear&nbsp;what&nbsp;reasons,&nbsp;other<br>
+than&nbsp;time,&nbsp;there&nbsp;are&nbsp;for&nbsp;these&nbsp;staying&nbsp;as&nbsp;they&nbsp;are.&nbsp;&nbsp;I'm&nbsp;suspecting&nbsp;many<br>
+are&nbsp;not&nbsp;really&nbsp;being&nbsp;used.&nbsp;&nbsp;Hopefully&nbsp;we&nbsp;can&nbsp;totally&nbsp;remove&nbsp;these<br>
+eventually.<br>
+<br>
+Tracking&nbsp;Bugs<br>
+-------------<br>
+<br>
+When&nbsp;I&nbsp;suggested&nbsp;keywords,&nbsp;I&nbsp;did&nbsp;so&nbsp;to&nbsp;get&nbsp;rid&nbsp;of&nbsp;tracking&nbsp;bugs&nbsp;too,<br>
+though&nbsp;we've&nbsp;had&nbsp;less&nbsp;success&nbsp;on&nbsp;that&nbsp;front.<br>
+<br>
+There&nbsp;are&nbsp;many&nbsp;disadvantages&nbsp;to&nbsp;tracking&nbsp;bugs.<br>
+<br>
+-&nbsp;They&nbsp;can&nbsp;pollute&nbsp;bugs&nbsp;counts,&nbsp;and&nbsp;you&nbsp;must&nbsp;make&nbsp;sure&nbsp;you&nbsp;exclude<br>
+them.&nbsp;&nbsp;I&nbsp;believe&nbsp;the&nbsp;meta&nbsp;keyword&nbsp;might&nbsp;be&nbsp;used&nbsp;for&nbsp;this&nbsp;purpose.<br>
+-&nbsp;They&nbsp;have&nbsp;an&nbsp;assignee&nbsp;but&nbsp;there&nbsp;is&nbsp;nothing&nbsp;to&nbsp;fix,&nbsp;and&nbsp;that&nbsp;person&nbsp;can<br>
+get&nbsp;whined&nbsp;at&nbsp;by&nbsp;Bugzilla.<br>
+-&nbsp;It&nbsp;would&nbsp;be&nbsp;better&nbsp;to&nbsp;craft&nbsp;your&nbsp;own&nbsp;"dependency&nbsp;tree"&nbsp;rather&nbsp;than<br>
+rely&nbsp;on&nbsp;a&nbsp;fixed&nbsp;hierachy&nbsp;in&nbsp;the&nbsp;bug&nbsp;system.<br>
+-&nbsp;In&nbsp;creating&nbsp;a&nbsp;nice&nbsp;little&nbsp;hierachy,&nbsp;many&nbsp;bugs&nbsp;duplicate&nbsp;information<br>
+that&nbsp;should&nbsp;be&nbsp;available&nbsp;in&nbsp;other&nbsp;ways,&nbsp;eg<br>
+"http://bugzilla.mozilla.org/show_bug.cgi?id=12833"&nbsp;which&nbsp;is<br>
+about&nbsp;beta&nbsp;1&nbsp;networking&nbsp;issues.&nbsp;&nbsp;These&nbsp;could&nbsp;fall&nbsp;behind&nbsp;the&nbsp;actual<br>
+data.&nbsp;&nbsp;What&nbsp;tracking&nbsp;bugs&nbsp;are&nbsp;good&nbsp;for,&nbsp;ad&nbsp;hoc&nbsp;lists,&nbsp;is&nbsp;what&nbsp;keywords<br>
+are&nbsp;better&nbsp;for.<br>
+-&nbsp;An&nbsp;automatically&nbsp;generated&nbsp;dependency&nbsp;structure&nbsp;between&nbsp;one&nbsp;"tracking<br>
+bug"&nbsp;and&nbsp;another&nbsp;would&nbsp;be&nbsp;better&nbsp;than&nbsp;a&nbsp;manual&nbsp;one,&nbsp;since&nbsp;it&nbsp;gives&nbsp;exact<br>
+rather&nbsp;than&nbsp;manually&nbsp;set&nbsp;up&nbsp;classifications.<br>
+<br>
+Probably&nbsp;the&nbsp;only&nbsp;feature&nbsp;preventing&nbsp;tracking&nbsp;bugs&nbsp;being&nbsp;replaced&nbsp;is&nbsp;the<br>
+dependency&nbsp;tree.&nbsp;&nbsp;The&nbsp;quintessential&nbsp;tracking&nbsp;bug&nbsp;seems&nbsp;to&nbsp;be&nbsp;bug&nbsp;#7229<br>
+"chofmann's&nbsp;watch&nbsp;list",&nbsp;which&nbsp;probably&nbsp;has&nbsp;about&nbsp;a&nbsp;couple&nbsp;of&nbsp;hundred<br>
+bugs&nbsp;at&nbsp;various&nbsp;levels,&nbsp;which&nbsp;allows&nbsp;a&nbsp;nice&nbsp;visualisation.<br>
+<br>
+Before&nbsp;keywords&nbsp;can&nbsp;replace&nbsp;tracking&nbsp;bugs&nbsp;better&nbsp;visualisation&nbsp;is&nbsp;going<br>
+to&nbsp;be&nbsp;required.&nbsp;&nbsp;General&nbsp;summary&nbsp;reports&nbsp;and&nbsp;dependency&nbsp;forests&nbsp;of&nbsp;a&nbsp;bug<br>
+list&nbsp;("http://bugzilla.mozilla.org/show_bug.cgi?id=12992")&nbsp;could&nbsp;both<br>
+help,&nbsp;but&nbsp;neither&nbsp;solves&nbsp;the&nbsp;problem&nbsp;totally.&nbsp;&nbsp;Perhaps&nbsp;keywords&nbsp;within<br>
+keywords&nbsp;would&nbsp;help&nbsp;here.&nbsp;&nbsp;In&nbsp;any&nbsp;case,&nbsp;I'm&nbsp;still&nbsp;thinking&nbsp;about&nbsp;this<br>
+one.<br>
+<br>
+Some&nbsp;tracking&nbsp;bugs&nbsp;could&nbsp;definitely&nbsp;be&nbsp;turned&nbsp;into&nbsp;keywords&nbsp;immediately<br>
+though,&nbsp;and&nbsp;I'll&nbsp;point&nbsp;the&nbsp;finger&nbsp;at<br>
+"http://bugzilla.mozilla.org/show_bug.cgi?id=7954"&nbsp;here&nbsp;since&nbsp;that's<br>
+what&nbsp;came&nbsp;to&nbsp;mind&nbsp;first.</P
+></P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="searching.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="bugprobs.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Better Searching</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="future.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Bug Issues</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/translations.html b/docs/html/translations.html
new file mode 100644
index 000000000..b3ca1cbd5
--- /dev/null
+++ b/docs/html/translations.html
@@ -0,0 +1,149 @@
+<HTML
+><HEAD
+><TITLE
+>Translations</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="About This Guide"
+HREF="about.html"><LINK
+REL="PREVIOUS"
+TITLE="Feedback"
+HREF="feedback.html"><LINK
+REL="NEXT"
+TITLE="Document Conventions"
+HREF="conventions.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="feedback.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Chapter 1. About This Guide</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="conventions.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="TRANSLATIONS"
+>1.8. Translations</A
+></H1
+><P
+>      The Bugzilla Guide needs translators!
+      Please volunteer your translation into the language of your choice.
+      If you will translate this Guide, please notify the members of the mozilla-webtools mailing list at
+      <TT
+CLASS="EMAIL"
+>&#60;<A
+HREF="mailto:mozilla-webtools@mozilla.org"
+>mozilla-webtools@mozilla.org</A
+>&#62;</TT
+>.  Since The Bugzilla Guide is also hosted on the
+      Linux Documentation Project, you would also do well to notify 
+    </P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="feedback.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="conventions.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Feedback</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="about.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Document Conventions</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/useradmin.html b/docs/html/useradmin.html
new file mode 100644
index 000000000..644259a3d
--- /dev/null
+++ b/docs/html/useradmin.html
@@ -0,0 +1,589 @@
+<HTML
+><HEAD
+><TITLE
+>User Administration</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="Administering Bugzilla"
+HREF="administration.html"><LINK
+REL="PREVIOUS"
+TITLE="Post-Installation Checklist"
+HREF="postinstall-check.html"><LINK
+REL="NEXT"
+TITLE="Product, Component, Milestone, and Version Administration"
+HREF="programadmin.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="postinstall-check.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Chapter 3. Administering Bugzilla</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="programadmin.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="USERADMIN"
+>3.2. User Administration</A
+></H1
+><P
+>      User administration is one of the easiest parts of Bugzilla.
+      Keeping it from getting out of hand, however, can become a challenge.
+    </P
+><DIV
+CLASS="SECTION"
+><H2
+CLASS="SECTION"
+><A
+NAME="DEFAULTUSER"
+>3.2.1. Creating the Default User</A
+></H2
+><P
+>	When you first run checksetup.pl after installing Bugzilla, it will prompt you
+	for the administrative username (email address) and password for this "super user".
+	If for some reason you were to delete the "super user" account, re-running
+	checksetup.pl will again prompt you for this username and password.
+      </P
+><DIV
+CLASS="TIP"
+><BLOCKQUOTE
+CLASS="TIP"
+><P
+><B
+>Tip: </B
+>       If you wish to add more administrative users, you must use the MySQL interface.
+	Run "mysql" from the command line, and use these commands ("mysql&#62;" denotes the 
+	mysql prompt, not something you should type in):
+	<B
+CLASS="COMMAND"
+><TT
+CLASS="PROMPT"
+>mysql&#62;</TT
+> use bugs;</B
+>
+	<B
+CLASS="COMMAND"
+><TT
+CLASS="PROMPT"
+>mysql&#62;</TT
+> update profiles set groupset=0x7ffffffffffffff
+	  where login_name = "(user's login name)"; </B
+>
+	</P
+></BLOCKQUOTE
+></DIV
+></DIV
+><DIV
+CLASS="SECTION"
+><H2
+CLASS="SECTION"
+><A
+NAME="MANAGEUSERS"
+>3.2.2. Managing Other Users</A
+></H2
+><DIV
+CLASS="SECTION"
+><H3
+CLASS="SECTION"
+><A
+NAME="LOGIN"
+>3.2.2.1. Logging In</A
+></H3
+><P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>	      Open the index.html page for your Bugzilla installation in your browser window.
+	    </P
+></LI
+><LI
+><P
+>	      Click the "Query Existing Bug Reports" link.
+	    </P
+></LI
+><LI
+><P
+>	      Click the "Log In" link at the foot of the page.
+	    </P
+></LI
+><LI
+><P
+>	      Type your email address, and the password which was emailed to you when you
+	      created your Bugzilla account, into the spaces provided.
+	    </P
+></LI
+></OL
+><P
+>Congratulations, you are logged in!</P
+></DIV
+><DIV
+CLASS="SECTION"
+><H3
+CLASS="SECTION"
+><A
+NAME="CREATENEWUSERS"
+>3.2.2.2. Creating new users</A
+></H3
+><P
+>	  Your users can create their own user accounts by clicking the "New Account"
+	  link at the bottom of each page.
+	  However, should you desire to create user accounts ahead of time, here is how you do it.
+	</P
+><P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>	      After logging in, click the "Users" link at the footer of the query page.
+	    </P
+></LI
+><LI
+><P
+>	      To see a specific user, type a portion of their login name
+	      in the box provided and click "submit".
+	      To see all users, simply click the "submit" button.
+	      You must click "submit" here to be able to add a new user.
+	    </P
+><DIV
+CLASS="TIP"
+><BLOCKQUOTE
+CLASS="TIP"
+><P
+><B
+>Tip: </B
+>		More functionality is available via the list on the right-hand side
+		of the text entry box.
+		You can match what you type as a case-insensitive substring (the default)
+		of all users on your system, a case-sensitive regular expression
+		(please see the "man regexp" manual page for details on regular expression syntax),
+		or a <EM
+>reverse</EM
+> regular expression match,
+		where every user name which does NOT match the regular expression
+		is selected.
+	      </P
+></BLOCKQUOTE
+></DIV
+></LI
+><LI
+><P
+>	      Click the "Add New User" link at the bottom of the user list
+	    </P
+></LI
+><LI
+><P
+>	      Fill out the form presented.  This page is self-explanatory.  When done, click "submit".
+	    </P
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>		Adding a user this way will <EM
+>not</EM
+> send an email
+		informing them of their username and password.
+		In general, it is preferable to log out and use the "New Account"
+		button to create users, as it will pre-populate all the required fields and also notify 
+		the user of her account name and password.
+	      </P
+></BLOCKQUOTE
+></DIV
+></LI
+></OL
+></DIV
+><DIV
+CLASS="SECTION"
+><H3
+CLASS="SECTION"
+><A
+NAME="DISABLEUSERS"
+>3.2.2.3. Disabling Users</A
+></H3
+><P
+>	  I bet you noticed that big "Disabled Text" entry box available from the "Add New User" screen,
+	  when you edit an account?
+	  By entering any text in this box and selecting "submit",
+	  you have prevented the user from using Bugzilla via the web interface.
+	  Your explanation, written in this text box, will be presented to the user
+	  the next time she attempts to use the system.
+	  <DIV
+CLASS="WARNING"
+><P
+></P
+><TABLE
+CLASS="WARNING"
+BORDER="1"
+WIDTH="100%"
+><TR
+><TD
+ALIGN="CENTER"
+><B
+>Warning</B
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+><P
+>	      Don't disable your own administrative account, or you will hate life!
+	    </P
+></TD
+></TR
+></TABLE
+></DIV
+>
+	</P
+></DIV
+><DIV
+CLASS="SECTION"
+><H3
+CLASS="SECTION"
+><A
+NAME="MODIFYUSERS"
+>3.2.2.4. Modifying Users</A
+></H3
+><P
+>	  Here I will attempt to describe the function of each option on the user edit screen.
+	</P
+><P
+></P
+><UL
+><LI
+><P
+>	      <EM
+>Login Name</EM
+>: This is generally the user's email address.
+	      However, if you have edited your system parameters,
+	      this may just be the user's login name or some other identifier.
+	      <DIV
+CLASS="TIP"
+><BLOCKQUOTE
+CLASS="TIP"
+><P
+><B
+>Tip: </B
+>		  For compatability reasons, you should probably
+		  stick with email addresses as user login names.  It will make your life easier.
+		</P
+></BLOCKQUOTE
+></DIV
+>
+	    </P
+></LI
+><LI
+><P
+>	      <EM
+>Real Name</EM
+>: Duh!
+	    </P
+></LI
+><LI
+><P
+>	      <EM
+>Password</EM
+>: You will only see asterisks in versions
+	      of Bugzilla newer than 2.10 or early 2.11.  You can change the user password here.
+	    </P
+></LI
+><LI
+><P
+>	      <EM
+>Email Notification</EM
+>: You may choose from one of three options:
+	      <P
+></P
+><OL
+TYPE="1"
+><LI
+><P
+>		    All qualifying bugs except those which I change:
+		    The user will be notified of any change to any bug
+		    for which she is the reporter, assignee, Q/A contact, CC recipient, or "watcher".
+		  </P
+></LI
+><LI
+><P
+>		    Only those bugs which I am listed on the CC line:
+		    The user will not be notified of changes to bugs where she is the assignee,
+		    reporter, or Q/A contact, but will receive them if she is on the CC list.
+		    <DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>			She will still receive whining cron emails if you set up the "whinemail" feature.
+		      </P
+></BLOCKQUOTE
+></DIV
+>
+		  </P
+></LI
+><LI
+><P
+>		    <EM
+>All Qualifying Bugs</EM
+>: This user is a glutton for punishment.
+		    If her name is in the reporter, Q/A contact, CC, assignee, or is a "watcher",
+		    she will get email updates regarding the bug.
+		  </P
+></LI
+></OL
+></P
+><P
+>	      <EM
+>Disable Text</EM
+>: If you type anything in this box,
+	      including just a space, the user account is disabled from making any changes
+	      to bugs via the web interface, and what you type in this box is presented as the reason.
+	      <DIV
+CLASS="WARNING"
+><P
+></P
+><TABLE
+CLASS="WARNING"
+BORDER="1"
+WIDTH="90%"
+><TR
+><TD
+ALIGN="CENTER"
+><B
+>Warning</B
+></TD
+></TR
+><TR
+><TD
+ALIGN="LEFT"
+><P
+>Don't disable the administrator account!</P
+></TD
+></TR
+></TABLE
+></DIV
+>
+	      <DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>		  As of this writing, the user can still submit bugs via the e-mail gateway,
+		  if you set it up, despite the disabled text field.  The e-mail gateway should
+		  <EM
+>not</EM
+> be enabled for secure installations of Bugzilla.
+		</P
+></BLOCKQUOTE
+></DIV
+>
+	    </P
+></LI
+><LI
+><P
+>	      <EM
+>CanConfirm</EM
+>: This field is only used if you have enabled
+	      "unconfirmed" status in your parameters screen.  If you enable this for a user,
+	      that user can then move bugs from "Unconfirmed" to "Confirmed" status (ergo: "New" status).
+	      Be judicious about allowing users to turn this bit on for other users.
+	    </P
+></LI
+><LI
+><P
+>	      <EM
+>Creategroups</EM
+>: This option will allow a user to create and
+	      destroy groups in Bugzilla.  Unless you are using the Bugzilla GroupSentry security
+	      option "usebuggroupsentry" in your parameters, this setting has no effect.
+	    </P
+></LI
+><LI
+><P
+>	      <EM
+>Editbugs</EM
+>: Unless a user has this bit set, they can only edit
+	      those bugs for which they are the assignee or the reporter.  
+	      <DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>		  Leaving this option unchecked does not prevent users from adding
+		  comments to a bug!  They simply cannot change a bug priority, severity,
+		  etc. unless they are the assignee or reporter.
+		</P
+></BLOCKQUOTE
+></DIV
+>
+	    </P
+></LI
+><LI
+><P
+>	      <EM
+>Editcomponents</EM
+>: This flag allows a user to create new 
+	      products and components, as well as modify and destroy those that have no bugs
+	      associated with them.  If a product or component has bugs associated with it,
+	      those bugs must be moved to a different product or component before Bugzilla
+	      will allow them to be destroyed.  The name of a product or component can be
+	      changed without affecting the associated bugs, but it tends to annoy
+	      the hell out of your users when these change a lot.
+	    </P
+></LI
+><LI
+><P
+>	      <EM
+>Editkeywords</EM
+>: If you use Bugzilla's keyword functionality,
+	      enabling this feature allows a user can create and destroy keywords.
+	      As always, the keywords for existing bugs containing the keyword
+	      the user wishes to destroy must be changed before Bugzilla will allow it to die.
+	      You must be very careful about creating too many new keywords
+	      if you run a very large Bugzilla installation; keywords are global variables 
+	      across products, and you can often run into a phenomenon called "keyword bloat".
+	      This confuses users, and then the feature goes unused.
+	    </P
+></LI
+><LI
+><P
+>	      <EM
+>Editusers</EM
+>: This flag allows a user do what you're doing
+	      right now: edit other users.
+	      This will allow those with the right to do so to remove administrator
+	      priveleges from other users or grant them to themselves.  Enable with care.
+	    </P
+></LI
+><LI
+><P
+>	      <EM
+>PRODUCT</EM
+>: PRODUCT bugs access.  This allows an administrator,
+	      with product-level granularity, to specify in which products a user can edit bugs. 
+	      The user must still have the "editbugs" privelege to edit bugs in this area;
+	      this simply restricts them from even seeing bugs outside these boundaries if the administrator
+	      has enabled the group sentry parameter "usebuggroupsentry".  Unless you are using bug groups,
+	      this option has no effect.
+	    </P
+></LI
+></UL
+></DIV
+></DIV
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="postinstall-check.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="programadmin.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Post-Installation Checklist</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="administration.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Product, Component, Milestone, and Version Administration</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/using.html b/docs/html/using.html
new file mode 100644
index 000000000..1d71a2219
--- /dev/null
+++ b/docs/html/using.html
@@ -0,0 +1,262 @@
+<HTML
+><HEAD
+><TITLE
+>Using Bugzilla</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="PREVIOUS"
+TITLE="Bugzilla Security"
+HREF="security.html"><LINK
+REL="NEXT"
+TITLE="What is Bugzilla?"
+HREF="whatis.html"></HEAD
+><BODY
+CLASS="CHAPTER"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="security.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+></TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="whatis.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="CHAPTER"
+><H1
+><A
+NAME="USING"
+>Chapter 4. Using Bugzilla</A
+></H1
+><TABLE
+BORDER="0"
+WIDTH="100%"
+CELLSPACING="0"
+CELLPADDING="0"
+CLASS="EPIGRAPH"
+><TR
+><TD
+WIDTH="45%"
+>&nbsp;</TD
+><TD
+WIDTH="45%"
+ALIGN="LEFT"
+VALIGN="TOP"
+><I
+><P
+><I
+>What, Why, How, &#38; What's in it for me?</I
+></P
+></I
+></TD
+></TR
+></TABLE
+><DIV
+CLASS="TOC"
+><DL
+><DT
+><B
+>Table of Contents</B
+></DT
+><DT
+>4.1. <A
+HREF="whatis.html"
+>What is Bugzilla?</A
+></DT
+><DT
+>4.2. <A
+HREF="why.html"
+>Why Should We Use Bugzilla?</A
+></DT
+><DT
+>4.3. <A
+HREF="how.html"
+>How do I use Bugzilla?</A
+></DT
+><DD
+><DL
+><DT
+>4.3.1. <A
+HREF="how.html#MYACCOUNT"
+>Create a Bugzilla Account</A
+></DT
+><DT
+>4.3.2. <A
+HREF="how.html#QUERY"
+>The Bugzilla Query Page</A
+></DT
+><DT
+>4.3.3. <A
+HREF="how.html#BUGREPORTS"
+>Creating and Managing Bug Reports</A
+></DT
+><DD
+><DL
+><DT
+>4.3.3.1. <A
+HREF="how.html#BUG_WRITING"
+>Writing a Great Bug Report</A
+></DT
+><DT
+>4.3.3.2. <A
+HREF="how.html#BUG_MANAGE"
+>Managing your Bug Reports</A
+></DT
+></DL
+></DD
+></DL
+></DD
+><DT
+>4.4. <A
+HREF="init4me.html"
+>What's in it for me?</A
+></DT
+><DD
+><DL
+><DT
+>4.4.1. <A
+HREF="init4me.html#ACCOUNTSETTINGS"
+>Account Settings</A
+></DT
+><DT
+>4.4.2. <A
+HREF="init4me.html#EMAILSETTINGS"
+>Email Settings</A
+></DT
+><DD
+><DL
+><DT
+>4.4.2.1. <A
+HREF="init4me.html#NOTIFICATION"
+>Email Notification</A
+></DT
+><DT
+>4.4.2.2. <A
+HREF="init4me.html#NEWEMAILTECH"
+>New Email Technology</A
+></DT
+><DT
+>4.4.2.3. <A
+HREF="init4me.html#WATCHSETTINGS"
+>"Watching" Users</A
+></DT
+></DL
+></DD
+><DT
+>4.4.3. <A
+HREF="init4me.html#FOOTERSETTINGS"
+>Page Footer</A
+></DT
+><DT
+>4.4.4. <A
+HREF="init4me.html#PERMISSIONSETTINGS"
+>Permissions</A
+></DT
+></DL
+></DD
+><DT
+>4.5. <A
+HREF="usingbz-conc.html"
+>Using Bugzilla-Conclusion</A
+></DT
+></DL
+></DIV
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="security.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="whatis.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Bugzilla Security</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+>&nbsp;</TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>What is Bugzilla?</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/usingbz-conc.html b/docs/html/usingbz-conc.html
new file mode 100644
index 000000000..823b12694
--- /dev/null
+++ b/docs/html/usingbz-conc.html
@@ -0,0 +1,148 @@
+<HTML
+><HEAD
+><TITLE
+>Using Bugzilla-Conclusion</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="Using Bugzilla"
+HREF="using.html"><LINK
+REL="PREVIOUS"
+TITLE="What's in it for me?"
+HREF="init4me.html"><LINK
+REL="NEXT"
+TITLE="Integrating Bugzilla with Third-Party Tools"
+HREF="integration.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="init4me.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Chapter 4. Using Bugzilla</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="integration.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="USINGBZ-CONC"
+>4.5. Using Bugzilla-Conclusion</A
+></H1
+><P
+>      Thank you for reading through this portion of the Bugzilla Guide.  I anticipate
+      it may not yet meet the needs of all readers.  If you have additional comments or
+      corrections to make, please submit your contributions to the
+      <A
+HREF="mailto://mozilla-webtools@mozilla.org"
+TARGET="_top"
+>mozilla-webtools</A
+>
+      mailing list/newsgroup.  The mailing list is mirrored to the netscape.public.mozilla.webtools
+      newsgroup, and the newsgroup is mirrored to mozilla-webtools@mozilla.org
+    </P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="init4me.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="integration.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>What's in it for me?</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="using.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Integrating Bugzilla with Third-Party Tools</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/variants.html b/docs/html/variants.html
new file mode 100644
index 000000000..997f00461
--- /dev/null
+++ b/docs/html/variants.html
@@ -0,0 +1,144 @@
+<HTML
+><HEAD
+><TITLE
+>Bugzilla Variants</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="PREVIOUS"
+TITLE="Cleaning up after mucking with Bugzilla"
+HREF="cleanupwork.html"><LINK
+REL="NEXT"
+TITLE="Red Hat Bugzilla"
+HREF="rhbugzilla.html"></HEAD
+><BODY
+CLASS="CHAPTER"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="cleanupwork.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+></TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="rhbugzilla.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="CHAPTER"
+><H1
+><A
+NAME="VARIANTS"
+>Chapter 7. Bugzilla Variants</A
+></H1
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>      I <EM
+>know</EM
+> there are more variants than just RedHat Bugzilla out there.
+      Please help me get information about them, their project status, and benefits there
+      might be in using them or in using their code in main-tree Bugzilla.
+    </P
+></BLOCKQUOTE
+></DIV
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="cleanupwork.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="rhbugzilla.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Cleaning up after mucking with Bugzilla</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+>&nbsp;</TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Red Hat Bugzilla</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/whatis.html b/docs/html/whatis.html
new file mode 100644
index 000000000..d53d68370
--- /dev/null
+++ b/docs/html/whatis.html
@@ -0,0 +1,226 @@
+<HTML
+><HEAD
+><TITLE
+>What is Bugzilla?</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="Using Bugzilla"
+HREF="using.html"><LINK
+REL="PREVIOUS"
+TITLE="Using Bugzilla"
+HREF="using.html"><LINK
+REL="NEXT"
+TITLE="Why Should We Use Bugzilla?"
+HREF="why.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="using.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Chapter 4. Using Bugzilla</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="why.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="WHATIS"
+>4.1. What is Bugzilla?</A
+></H1
+><P
+>      Bugzilla is one example of a class of programs called "Defect Tracking Systems",
+      or, more commonly, "Bug-Tracking Systems".  Defect Tracking Systems allow individual or
+      groups of developers to keep track of outstanding bugs in their product effectively.
+      Bugzilla was originally written by Terry Weissman in a programming language called
+      "TCL", to replace a crappy
+      bug-tracking database used internally for Netscape Communications.  Terry later ported
+      Bugzilla to
+      Perl from TCL, and in Perl it remains to this day.
+      Most commercial defect-tracking software vendors at the
+      time charged enormous licensing fees, and Bugzilla quickly became a favorite of the
+      open-source crowd (with its genesis in the open-source browser project, Mozilla).  It
+      is now the de-facto standard defect-tracking system against which all others are
+      measured.
+    </P
+><P
+>      Bugzilla has matured immensely, and now boasts many advanced features.  These include:
+      <P
+></P
+><UL
+><LI
+><P
+>	    integrated, product-based granular security schema
+	  </P
+></LI
+><LI
+><P
+>	    inter-bug dependencies and dependency graphing
+	  </P
+></LI
+><LI
+><P
+>	    advanced reporting capabilities
+	  </P
+></LI
+><LI
+><P
+>	    a robust, stable RDBMS back-end
+	  </P
+></LI
+><LI
+><P
+>	    extensive configurability
+	  </P
+></LI
+><LI
+><P
+>	    a very well-understood and well-thought-out natural bug resolution protocol
+	  </P
+></LI
+><LI
+><P
+>	    email, XML, and HTTP APIs
+	  </P
+></LI
+><LI
+><P
+>	    available integration with automated software configuration management systems, including
+	    Perforce and CVS.
+	  </P
+></LI
+><LI
+><P
+>	    too many more features to list
+	  </P
+></LI
+></UL
+>
+    </P
+><P
+>      Despite its current robustness and popularity, however, Bugzilla
+      faces some near-term challenges, such as reliance on a single database, a lack of
+      abstraction of the user interface and program logic, verbose email bug
+      notifications, a powerful but daunting query interface, little reporting configurability,
+      problems with extremely large queries, some unsupportable bug resolution options,
+      no internationalization, and dependence on some nonstandard libraries.
+    </P
+><P
+>      Some recent headway has been made on the query front, however.  If you are using the latest
+      version of Bugzilla, you should see a "simple search" form on the default front page of
+      your Bugzilla install.  Type in two or three search terms and you should pull up some
+      relevant information.  This is also available as "queryhelp.cgi".
+    </P
+><P
+>      Despite these small problems, Bugzilla is very hard to beat.  It is under <EM
+>very</EM
+>
+      active development to address the current issues, and a long-awaited overhaul in the form
+      of Bugzilla 3.0 is expected sometime later this year.
+    </P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="using.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="why.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Using Bugzilla</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="using.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Why Should We Use Bugzilla?</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/html/why.html b/docs/html/why.html
new file mode 100644
index 000000000..b3110f1ec
--- /dev/null
+++ b/docs/html/why.html
@@ -0,0 +1,207 @@
+<HTML
+><HEAD
+><TITLE
+>Why Should We Use Bugzilla?</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.64
+"><LINK
+REL="HOME"
+TITLE="The Bugzilla Guide"
+HREF="index.html"><LINK
+REL="UP"
+TITLE="Using Bugzilla"
+HREF="using.html"><LINK
+REL="PREVIOUS"
+TITLE="What is Bugzilla?"
+HREF="whatis.html"><LINK
+REL="NEXT"
+TITLE="How do I use Bugzilla?"
+HREF="how.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Bugzilla Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="whatis.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Chapter 4. Using Bugzilla</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="how.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="WHY"
+>4.2. Why Should We Use Bugzilla?</A
+></H1
+><TABLE
+BORDER="0"
+WIDTH="100%"
+CELLSPACING="0"
+CELLPADDING="0"
+CLASS="EPIGRAPH"
+><TR
+><TD
+WIDTH="45%"
+>&nbsp;</TD
+><TD
+WIDTH="45%"
+ALIGN="LEFT"
+VALIGN="TOP"
+><I
+><P
+><I
+>No, Who's on first...</I
+></P
+></I
+></TD
+></TR
+></TABLE
+><P
+>      For many years, defect-tracking software has remained principally the domain
+      of large software development houses.  Even then, most shops never bothered
+      with bug-tracking software, and instead simply relied on shared lists and
+      email to monitor the status of defects.  This procedure is error-prone and
+      tends to cause those bugs judged least significant by developers to be
+      dropped or ignored
+    </P
+><P
+>      These days, many companies are finding that integrated defect-tracking
+      systems reduce downtime, increase productivity, and raise customer 
+      satisfaction with their systems.  Along with full disclosure, an open
+      bug-tracker allows manufacturers to keep in touch with their clients
+      and resellers, to communicate about problems effectively throughout
+      the data management chain.  Many corporations have also discovered that
+      defect-tracking helps reduce costs by providing IT support accountability,
+      telephone support knowledge bases, and a common, well-understood system
+      for accounting for unusual system or software issues.
+    </P
+><P
+>      But why should <EM
+>you</EM
+> use Bugzilla?
+    </P
+><P
+>      Bugzilla is very adaptable to various situations.  Known uses currently
+      include IT support queues, Systems Administration deployment management,
+      chip design and development problem tracking (both pre-and-post fabrication),
+      and software and hardware bug tracking for luminaries such as Redhat, Loki software,
+      Linux-Mandrake, and VA Systems.  Combined with systems such as CVS, Bonsai,
+      or Perforce SCM, Bugzilla provides a powerful, easy-to-use  solution to
+      configuration management and replication problems
+    </P
+><P
+>      Bugzilla can dramatically increase the productivity and accountability
+      of individual employees by providing a documented workflow and positive
+      feedback for good performance.  How many times do you wake up in the
+      morning, remembering that you were supposed to do *something* today,
+      but you just can't quite remember?  Put it in Bugzilla, and you have a record
+      of it from which you can extrapolate milestones, predict product versions
+      for integration, and by using Bugzilla's e-mail integration features
+      be able to follow the discussion trail that led to critical decisions.
+    </P
+><P
+>      Ultimately, Bugzilla puts the power in your hands to improve your value
+      to your employer or business while providing a usable framework for your natural
+      attention to detail and knowledge store to flourish.
+    </P
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="whatis.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="index.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="how.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>What is Bugzilla?</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="using.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>How do I use Bugzilla?</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file
diff --git a/docs/rel_notes.txt b/docs/rel_notes.txt
new file mode 100644
index 000000000..81807ef4f
--- /dev/null
+++ b/docs/rel_notes.txt
@@ -0,0 +1,155 @@
+There has not been a Bugzilla release for a while, but
+development has continued, and the Bugzilla team is proud
+to announce release of Bugzilla 2.12.
+
+Recommended Practice For The Upgrade
+------------------------------------
+
+As always, please ensure you have ran checksetup.pl after
+replacing the files in your installation.
+
+It is recommended that you view the sanity check page
+(sanitycheck.cgi) both before the upgrade and after running
+checksetup.pl after the upgrade, to see if there are any
+problems with your installation.
+
+It is also recommended that if you can, you immediately fix
+any problems you find.  Be aware that if the sanity check page
+contains more errors after an upgrade, it doesn't necessarily
+mean there are more errors in your database, as it is likely
+they weren't being checked for in the old version.
+
+New email tech for email notifications is now recommended.
+Old email tech will probably be removed in Bugzilla 2.14.
+It is strongly recommended that you turn on the newemailtech
+and newemailtechdefault options on the Edit Parameters page
+(editparams.cgi), so new accounts will use new email tech.
+
+If you wish, you may move all old accounts over to new email
+tech by executing the following SQL statement in MySQL:
+
+    UPDATE profiles SET newemailtech = '1';
+
+About This Version
+------------------
+
+Bugs referenced in the following text are bug numbers on
+bugzilla.mozilla.org.
+
+*** IMPORTANT CHANGES ***
+
+- There is now a facility for new email tech users to choose
+  the sort of notifications they wish to receive.  This
+  facility will probably be improved in future versions.
+  (bug 17464)
+
+- "Changed" will no longer appear on the subject line of
+  change notification emails.  Because of this, you should
+  change the subject line in your 'changedmail' and
+  'newchangedmail' params on editparams.cgi. The subject
+  line needs to be changed from
+
+    Subject: [Bug %bugid%] %neworchanged% - %summary%
+
+  to
+
+    Subject: [Bug %bugid%] %neworchanged%%summary%
+
+  or whatever is appropriate for the subject you are using
+  on your system. Note the removal of the " - " in the
+  middle.
+  (bug 29820)
+
+- Some security holes have been fixed where shell escape characters
+  could be passed to Bugzilla, allowing remote users to execute
+  system commands on the web server.
+
+*** Other changes of note ***
+
+- Bug titles now appear in the page title, and will hence
+  display in the user's browser's bookmarks and history.
+  (bug 22041)
+- Edit groups functionality (editgroups.cgi).
+  (bug 25010)
+- Support for moving bugs to other Bugzilla databases.
+  (bug 36133)
+- Bugzilla now can generate a frequently reported bugs list
+  based on what duplicates you receive.
+  (bug 25693)
+- When installing Bugzilla fresh, the administrator account is
+  now created in checksetup.pl.
+  (bug 17773)
+- Stored queries now show their name above the bug list, which
+  helps the user when they have multiple bug lists in multiple
+  browser windows.  It also appears in the page title, and will
+  hence display in the user's browser's bookmarks and history.
+  (bug 52228)
+- All states and resolutions can now be collected for charting.
+  (bug 6682)
+- A new search-engine-like "quick search" feature appears on
+  the front page to try and making searching easier.
+  (bug 69793)
+- Querying on dependencies now works in the advanced query
+  section of the query page.
+  (bug 30823)
+- When a bug is marked as a duplicate, the reporter of the
+  resolved bug is automatically added to the CC list of the
+  open bug.
+  (bug 28676)
+
+*** Bug fixes of note ***
+
+- Notification emails using new email tech will now be sent to
+  QA contacts.
+  (bug 30826)
+- When marking a bug as a duplicate, the duplicate stamp marked
+  on the open bug will no longer be written too early (such as
+  on mid-air collisions).
+  (bug 7873)
+- Various bug fixes were made to the initial assignee and QA
+  of a component.  It is no longer possible to enter an
+  invalid address.  They will also now properly update when
+  a user's email address is changed.  Sanity check will now
+  check these.
+  (bug 66876)
+- Administrators can no longer create an email accounts that do
+  not match the global email regexp parameter.  Previously this
+  would cause sanity check errors.
+  (bug 32971)
+- The resolution field can no longer become empty when the
+  bug is resolved.  This occurred because of midair collisions.
+  (bug 49306)
+
+*** Outstanding issues of note ***
+
+- Bug counts (on reports.cgi) can be very slow if you have to
+  count a lot of bugs.  In this case the connection can time
+  out before the  page finishes loading.  Extending the cgi
+  timeout on your web server might help this situation.
+  (bug 63249)
+- Administrators must make sure that certain files are
+  properly inaccessible or confidential information might become
+  available to enterprising individuals.  This includes the
+  localconfig file, the entire shadow directory and the entire
+  data directory except for data/comments (the quips file).
+  (bug 65572)
+- Renaming or removing keywords will not update the "keyword
+  cache", and queries on keywords may not work properly, until
+  you rebuild the cache on the sanity check page
+  (sanitycheck.cgi).  The changer will receive a warning to do
+  this when altering the keyword.
+  (bug 69621)
+- Email notifications will not work out of the box if you are
+  using Postfix, Exim or possibly other non-SendMail mail
+  transfer agents, as Bugzilla sends mail by default in
+  "deferred" mode using the "-ODeliveryMode=deferred" command
+  line option, which needs to be supported by the sendmail
+  program.  To fix this, you can turn on the "sendmailnow"
+  parameter on the Edit Parameters page (editparams.cgi).
+  (bug 50159)
+
+
+
+
+
+
diff --git a/docs/sgml/Bugzilla-Guide.sgml b/docs/sgml/Bugzilla-Guide.sgml
new file mode 100644
index 000000000..9334472af
--- /dev/null
+++ b/docs/sgml/Bugzilla-Guide.sgml
@@ -0,0 +1,196 @@
+<!DOCTYPE BOOK PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
+
+<!-- Include macros -->
+<!ENTITY about SYSTEM "about.sgml">
+<!ENTITY conventions SYSTEM "conventions.sgml">
+<!ENTITY doc-index SYSTEM "index.sgml">
+<!ENTITY faq SYSTEM "faq.sgml">
+<!ENTITY gfdl SYSTEM "gfdl.sgml">
+<!ENTITY glossary SYSTEM "glossary.sgml">
+<!ENTITY installation SYSTEM "installation.sgml">
+<!ENTITY administration SYSTEM "administration.sgml">
+<!ENTITY using SYSTEM "using.sgml">
+<!ENTITY integration SYSTEM "integration.sgml">
+<!ENTITY future SYSTEM "future.sgml">
+<!ENTITY index SYSTEM "index.sgml">
+<!ENTITY database SYSTEM "database.sgml">
+<!ENTITY patches SYSTEM "patches.sgml">
+<!ENTITY variants SYSTEM "variants.sgml">
+<!ENTITY requiredsoftware SYSTEM "requiredsoftware.sgml">
+
+]>
+
+<!-- Coding standards for this document 
+
+1.  Preface new or modified sections with a comment stating who
+ modified it and when; please also use the "authorinitials" tag.
+
+2.  There is no "two".
+
+3.  Other than the GFDL, please use the "section" tag instead of "sect1", "sect2", etc.
+
+4.  Use Entities to include files for new chapters in Bugzilla-Guide.sgml.
+
+5.  Ensure all documents compile cleanly to HTML after modification.
+  The errors "DTD Declaration not allowed here" and "DTDDECL catalog types not supported"
+ are normal errors to be expected when compiling the whole guide.
+
+6.  Try to index important terms wherever possible.
+
+7.  Follow coding standards at http://www.linuxdoc.org.
+
+8.  All tags should be lowercase (needsfix)
+
+9.  Code being submitted for review should use the 
+"review" tag. Documentation on this is available at 
+http://www.linuxdoc.org/LDP/LDP-Author-Guide/tools-hints.html
+ under section 4.9.4, "Making notes on the text while it's being written".
+
+10.  Please use sensible spacing.  The comments at the very end of each Guide
+ file define reasonable defaults for PSGML mode in EMACS.
+  Double-indent tags, use double spacing whenever possible,
+ try to avoid clutter and feel free to waste space in the code to make it more readable.
+
+-->
+
+<BOOK ID="index">
+
+<!-- Header -->
+
+  <BOOKINFO>
+    <TITLE>The Bugzilla Guide</TITLE>
+    <PUBDATE>v2.12.0, 24 April 2001</PUBDATE>
+    <AUTHOR>
+      <FIRSTNAME>Matthew</FIRSTNAME>
+      <OTHERNAME>P.</OTHERNAME>
+      <SURNAME>Barnson</SURNAME>
+      <affiliation>
+	<address><email>barnboy@trilobyte.net</email></address>
+      </affiliation>
+    </AUTHOR>
+
+    <ABSTRACT>
+      <PARA>This is the documentation for Bugzilla, the Mozilla bug-tracking system.</PARA>
+    </ABSTRACT>
+
+    <REVHISTORY>
+      <REVISION>
+	<REVNUMBER>v2.11</REVNUMBER>
+	<DATE>20 December 2000</DATE>
+	<AUTHORINITIALS>MPB</AUTHORINITIALS>
+	<REVREMARK>Converted the README, FAQ, and DATABASE information into SGML
+	  docbook format.</REVREMARK>
+      </REVISION>
+
+      <revision>
+	<revnumber>2.11.1</revnumber>
+	<date>06 March 2001</date>
+	<authorinitials>MPB</authorinitials>
+	<revremark>
+	  Took way too long to revise this for 2.12 release.
+	  Updated FAQ to use qandaset tags instead of literallayout,
+	  cleaned up administration section, added User Guide section,
+	  miscellaneous FAQ updates and third-party integration information.
+	  From this point on all new tags are lowercase in preparation for the
+	  2.13 release of the Guide in XML format instead of SGML.
+	</revremark>
+      </revision>
+
+      <revision>
+	<revnumber>2.12.0</revnumber>
+	<date>24 April 2001</date>
+	<authorinitials>MPB</authorinitials>
+	<revremark>
+	  Things fixed this release: Elaborated on queryhelp interface, added FAQ regarding
+	  moving bugs from one keyword to another, clarified possible problems with the Landfill
+	  tutorial, fixed a boatload of typos and unclear sentence structures.  Incorporated the
+	  README into the UNIX installation section, and changed the README to indicate the deprecated
+	  status.  Things I know need work:  Used "simplelist" a lot, where I should have used
+	  "procedure" to tag things.  Need to lowercase all tags to be XML compliant.
+	</revremark>
+      </revision>
+    </REVHISTORY>
+
+    <KEYWORDSET>
+      <KEYWORD>Bugzilla</KEYWORD>
+      <KEYWORD>Guide</KEYWORD>
+      <KEYWORD>installation</KEYWORD>
+      <KEYWORD>FAQ</KEYWORD>
+      <KEYWORD>administration</KEYWORD>
+      <KEYWORD>integration</KEYWORD>
+      <KEYWORD>MySQL</KEYWORD>
+      <KEYWORD>Mozilla</KEYWORD>
+      <KEYWORD>webtools</KEYWORD>
+    </KEYWORDSET>
+  </BOOKINFO>
+
+<!-- About This Guide -->
+&about;
+
+<!-- Installing Bugzilla -->
+&installation;
+
+<!-- Administering Bugzilla -->
+&administration;
+
+<!-- Using Bugzilla -->
+&using;
+
+<!-- Integrating Bugzilla with Third-Party Tools -->
+&integration;
+
+<!-- The Future of Bugzilla -->
+&future;
+
+<!-- Appendix: The Frequently Asked Questions -->
+&faq;
+
+<!-- Appendix: Required Bugzilla Software Links -->
+&requiredsoftware
+
+<!-- Appendix: The Database Schema -->
+&database;
+
+<!-- Appendix: Major Bugzilla Variants -->
+&variants;
+
+<!-- Appendix: Custom Patches -->
+&patches;
+
+<!-- Appendix: The GNU Free Documentation License -->
+&gfdl;
+
+<!-- Glossary -->
+&glossary;
+
+<!-- Index -->
+&index;
+
+</BOOK>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-namecase-general:t
+sgml-general-insert-case:lower
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
+
+
+
+
+
+
+
+
+
diff --git a/docs/sgml/CVS/Entries b/docs/sgml/CVS/Entries
new file mode 100644
index 000000000..e1e2b8af3
--- /dev/null
+++ b/docs/sgml/CVS/Entries
@@ -0,0 +1,18 @@
+/Bugzilla-Guide.sgml/1.2/Wed Apr 25 07:12:11 2001//
+/about.sgml/1.2/Wed Apr 25 07:12:11 2001//
+/administration.sgml/1.3/Wed Apr 25 07:38:21 2001//
+/conventions.sgml/1.1/Thu Mar  8 05:36:37 2001//
+/database.sgml/1.2/Wed Apr 25 07:12:12 2001//
+/dbschema.jpg/1.5/Fri Apr  6 04:44:41 2001//
+/faq.sgml/1.2/Wed Apr 25 07:12:12 2001//
+/future.sgml/1.2/Wed Apr 25 07:12:13 2001//
+/gfdl.sgml/1.1/Thu Mar  8 05:36:42 2001//
+/glossary.sgml/1.1/Thu Mar  8 05:36:43 2001//
+/index.sgml/1.1/Thu Mar  8 05:36:44 2001//
+/installation.sgml/1.2/Wed Apr 25 07:12:13 2001//
+/integration.sgml/1.2/Wed Apr 25 07:12:15 2001//
+/patches.sgml/1.2/Wed Apr 25 07:12:15 2001//
+/requiredsoftware.sgml/1.1/Wed Apr 25 07:12:17 2001//
+/using.sgml/1.2/Wed Apr 25 07:12:17 2001//
+/variants.sgml/1.2/Wed Apr 25 07:12:17 2001//
+D
diff --git a/docs/sgml/CVS/Repository b/docs/sgml/CVS/Repository
new file mode 100644
index 000000000..7f128f54e
--- /dev/null
+++ b/docs/sgml/CVS/Repository
@@ -0,0 +1 @@
+mozilla/webtools/bugzilla/docs/sgml
diff --git a/docs/sgml/CVS/Root b/docs/sgml/CVS/Root
new file mode 100644
index 000000000..cdb6f4a07
--- /dev/null
+++ b/docs/sgml/CVS/Root
@@ -0,0 +1 @@
+:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot
diff --git a/docs/sgml/about.sgml b/docs/sgml/about.sgml
new file mode 100644
index 000000000..d1b56cfdb
--- /dev/null
+++ b/docs/sgml/about.sgml
@@ -0,0 +1,242 @@
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
+<!ENTITY conventions SYSTEM "conventions.sgml"> ] >
+
+<CHAPTER ID="about">
+<TITLE>About This Guide</TITLE>
+
+  <SECTION ID="aboutthisguide">
+    <TITLE>Purpose and Scope of this Guide</TITLE>
+    <PARA>
+      This document was started on September 17, 2000
+      by Matthew P. Barnson after a great deal of procrastination updating the Bugzilla FAQ,
+      which I left untouched for nearly half a year.
+      After numerous complete rewrites and reformatting, it is the document you see today.
+    </PARA>
+    <PARA>
+      Despite the lack of updates, Bugzilla is simply the best piece of bug-tracking software
+      the world has ever seen.  This document is intended to be the comprehensive guide to 
+      the installation, administration, maintenance, and use of the Bugzilla bug-tracking system.
+    </PARA>
+    <PARA>
+      This release of the Bugzilla Guide is the <EMPHASIS>2.11</EMPHASIS> release.
+      It is so named that it may match the current version of Bugzilla.
+      The numbering tradition stems from that used for many free software projects,
+      in which <EMPHASIS>even-numbered</EMPHASIS> point releases (1.2, 1.14, etc.)
+      are considered "stable releases", intended for public consumption; on the other 
+      hand, <EMPHASIS>odd-numbered</EMPHASIS> point releases (1.3, 2.09, etc.)
+      are considered unstable <EMPHASIS>development</EMPHASIS> releases intended
+      for advanced users, systems administrators, developers, and those who enjoy
+      a lot of pain. 
+    </PARA>
+    <PARA>
+      Newer revisions of the Bugzilla Guide will follow the numbering conventions of
+      the main-tree Bugzilla releases, available at
+      <ULINK URL="http://www.mozilla.org/bugs/source.html">Mozilla.org</ULINK>, with
+      the exception that intermediate releases will have a minor revision number
+      following a period.  For instance, if the current version of Bugzilla is 4.2,
+      the current "stable" version of the Bugzilla guide, in, say, it's fifth revision,
+      would be numbered "4.2.5".  Got it?  Good.
+    </PARA>
+    <PARA>
+      I wrote this in response to the enormous demand for decent Bugzilla documentation.
+      I have incorporated instructions from the Bugzilla README, Frequently Asked Questions,
+      Database Schema Document, and various mailing lists to create it.
+      Chances are, there are glaring errors in this documentation; please contact
+      <EMAIL>barnboy@trilobyte.net</EMAIL> to correct them.
+    </PARA>
+  </SECTION>
+
+  <SECTION ID="copyright">
+    <TITLE>Copyright Information</TITLE>
+    <BLOCKQUOTE>
+      <ATTRIBUTION>Copyright (c) 2000-2001 Matthew P. Barnson</ATTRIBUTION>
+      <PARA>
+	Permission is granted to copy, distribute and/or modify this document under thei
+	terms of the GNU Free Documentation License, Version 1.1 or any later version published 
+	by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and 
+	with no Back-Cover Texts.  A copy of the license is included in the section entitled 
+	"GNU Free Documentation LIcense".
+      </PARA>
+    </BLOCKQUOTE>
+    <PARA>
+      If you have any questions regarding this document, its' copyright, or publishing this
+      document in non-electronic form, please contact <EMAIL>barnboy@trilobyte.net</EMAIL>
+    </PARA>
+  </SECTION>
+
+  <SECTION ID="disclaimer">
+    <TITLE>Disclaimer</TITLE>
+    <PARA>
+      No liability for the contents of this document can be accepted.
+      Use the concepts, examples, and other content at your own risk.
+      As this is a new edition of this document, there may be errors
+      and inaccuracies that may damage your system.  Use of this document
+      may cause your girlfriend to leave you, your cats to pee on your
+      furniture and clothing, your computer to cease functioning, your
+      boss to fire you, and global thermonuclear war.  Proceed with caution.
+    </PARA>
+    <PARA>
+      All copyrights are held by their respective owners, unless specifically
+      noted otherwise.  Use of a term in this document should not be regarded
+      as affecting the validity of any trademark or service mark.
+      In particular, I like to put down Microsoft(tm).  Live with it.
+    </PARA>
+    <PARA>
+      Naming of particular products or brands should not be seen as endorsements,
+      with the exception of the term "GNU/Linux".
+      Use GNU/Linux.  Love it.  Bathe with it.  It is life and happiness.
+      I endorse it wholeheartedly and encourage you to do the same.
+    </PARA>
+    <PARA>
+      You are strongly recommended to make a backup of your system before
+      installing Bugzilla and at regular intervals thereafter.  Heaven knows
+      it's saved my bacon time after time; if you implement any suggestion in 
+      this Guide, implement this one!
+    </PARA>
+    <PARA>
+      Bugzilla has not undergone a complete security review.
+      Security holes probably exist in the code.
+      Great care should be taken both in the installation and usage of this software.
+      Carefully consider the implications of installing other network services with Bugzilla.
+    </PARA>
+  </SECTION>
+
+<!-- Section 2: New Versions -->
+
+  <SECTION ID="newversions">
+    <TITLE>New Versions</TITLE>
+    <PARA>
+      This is the initial release of the Bugzilla Guide.
+    </PARA>
+    <PARA>
+      This document can be found in the following places:
+    </PARA>
+    <PARA>
+      <ITEMIZEDLIST>
+	<LISTITEM>
+	  <PARA>
+	    <ULINK URL="http://www.trilobyte.net/barnsons/">TriloBYTE</ULINK>
+	  </PARA>
+	</LISTITEM>
+	<LISTITEM>
+	  <PARA>
+	    <ULINK URL="http://www.mozilla.org/projects/bugzilla/">Mozilla.org</ULINK>
+	  </PARA>
+	</LISTITEM>
+	<LISTITEM>
+	  <PARA>
+	    <ULINK URL="http://www.linuxdoc.org/">The Linux Documentation Project</ULINK>
+	  </PARA>
+	</LISTITEM>
+      </ITEMIZEDLIST>
+    </PARA>
+    <PARA>
+      The latest version of this document can be checked out via CVS.
+      Please follow the instructions available at
+      <ULINK URL="http://www.mozilla.org/cvs.html">the Mozilla CVS page</ULINK>,
+      and check out the mozilla/webtools/bugzilla/docs/ branch.
+    </PARA>
+  </SECTION>
+
+  <SECTION ID="credits">
+    <TITLE>Credits</TITLE>
+    <PARA>
+      The people listed below have made enormous contributions to the creation
+      of this Guide, through their dedicated hacking efforts,
+      numerous e-mail and IRC support sessions,
+      and overall excellent contribution to the Bugzilla community:
+    </PARA>
+    <PARA>
+      <ULINK URL="mailto://terry@mozilla.org">Terry Weissman</ULINK>
+      for initially converting Bugzilla from BugSplat!
+      and writing the README upon which this documentation is largely based.
+    </PARA>
+    <PARA>
+      <ULINK URL="mailto://tara@tequilarista.org">Tara Hernandez</ULINK> 
+      for keeping Bugzilla development going strong after Terry left Mozilla.org
+    </PARA>
+    <PARA>
+      <ULINK URL="mailto://dkl@redhat.com">Dave Lawrence</ULINK>
+      for providing insight into the key differences between Red Hat's 
+      customized Bugzilla, and being largely responsible for the
+      "Red Hat Bugzilla" appendix
+    </PARA>
+    <PARA>
+      <ULINK URL="mailto://endico@mozilla.org">Dawn Endico</ULINK>
+      for being a hacker extraordinaire and putting up with my incessant
+      questions and arguments on irc.mozilla.org in #mozwebtools
+    </PARA>
+    <PARA>
+      Last but not least, all the members of the
+      <ULINK URL="news://news.mozilla.org/netscape/public/mozilla/webtools">
+	netscape.public.mozilla.webtools</ULINK> newsgroup.  Without your
+      discussions, insight, suggestions, and patches, this could never have happened.
+    </PARA>
+  </SECTION>
+  <SECTION id="contributors">
+<TITLE>Contributors</TITLE>
+    <PARA>
+      Thanks go to these people for significant contributions
+      to this documentation (in no particular order):
+    </PARA>
+    <PARA>
+      Zach Lipton (significant textual contributions),
+      Andrew Pearson,
+      Spencer Smith,
+      Eric Hanson,
+      Kevin Brannen,
+    </PARA>
+  </SECTION>
+  <SECTION ID="feedback">
+    <TITLE>Feedback</TITLE>
+    <PARA>
+      I welcome feedback on this document.  Without your submissions and input,
+      this Guide cannot continue to exist.  Please mail additions, comments, criticisms, etc.
+      to <EMAIL>barnboy@trilobyte.net</EMAIL>.  Please send flames to 
+      <EMAIL>devnull@localhost</EMAIL>
+    </PARA>
+  </SECTION>
+
+  <SECTION ID="translations">
+    <TITLE>Translations</TITLE>
+    <PARA>
+      The Bugzilla Guide needs translators!
+      Please volunteer your translation into the language of your choice.
+      If you will translate this Guide, please notify the members of the mozilla-webtools mailing list at
+      <email>mozilla-webtools@mozilla.org</email>.  Since The Bugzilla Guide is also hosted on the
+      Linux Documentation Project, you would also do well to notify 
+    </PARA>
+  </SECTION>
+
+  <!-- conventions used here (didn't want to give it a chapter of its own) -->
+&conventions;
+
+</CHAPTER>
+
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-namecase-general:t
+sgml-general-insert-case:upper
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:Bugzilla-Guide\.sgml
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+sgml-doctype:"<!DOCTYPE chapter PUBLIC \"-//OASIS//DTD DocBook V4.1//EN\">"
+End:
+-->
+
+
+
+
+
+
+
+
diff --git a/docs/sgml/administration.sgml b/docs/sgml/administration.sgml
new file mode 100644
index 000000000..a35ba047d
--- /dev/null
+++ b/docs/sgml/administration.sgml
@@ -0,0 +1,1121 @@
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
+
+<!-- TOC
+Chapter: Administration
+ Localconfig and Checksetup.pl customizations
+ The Email Gateway
+ Editing parameters
+  Deciding your site policies
+  The Shadow Database
+  Customizing password mail & layout
+  The Whining Cron
+  Why you shouldn't allow deletion
+ User administration
+  Creating Users
+  Disabling Users
+  User Permissions
+ Product Administration
+  Creating products
+  Creating components
+  Assigning default owners and Q/A contacts to components
+  Product Milestones
+  Product Versions
+  Voting
+-->
+
+<CHAPTER id="administration">
+  <TITLE>Administering Bugzilla</TITLE>
+<SUBTITLE>Or, I just got this cool thing installed.  Now what the heck do I do with it?</SUBTITLE>
+
+<PARA>
+So you followed the README isntructions to the letter, and
+just logged into bugzilla with your super-duper god account and you are sitting at the query
+screen. Yet, you have nothing to query. Your first act of business needs to be to setup the
+operating parameters for bugzilla.</PARA>
+
+  <SECTION id="postinstall-check">
+    <TITLE>Post-Installation Checklist</TITLE>
+    <PARA>
+      After installation, follow the checklist below to ensure that
+      you have a successful installation.
+      If you do not see a recommended setting for a parameter,
+      consider leaving it at the default
+      while you perform your initial tests on your Bugzilla setup.
+    </PARA>
+      <INDEXTERM>
+	<PRIMARY>checklist</PRIMARY>
+      </INDEXTERM>
+    <PROCEDURE>
+      <STEP>
+	<PARA>
+	  Bring up "editparams.cgi" in your web browser.  For instance, to edit parameters
+	  at mozilla.org, the URL would be <ULINK URL="http://bugzilla.mozilla.org/editparams.cgi">
+	  http://bugzilla.mozilla.org/editparams.cgi</ULINK>, also available under the "edit parameters"
+	  link on your query page.
+	</PARA>
+      </STEP>
+      <STEP>
+	<PARA>
+	  Set "maintainer" to <EMPHASIS>your</EMPHASIS> email address.
+	  This allows Bugzilla's error messages
+	  to display your email
+	  address and allow people to contact you for help.
+	</PARA>
+      </STEP>
+      <STEP>
+	<PARA>
+	  Set "urlbase" to the URL reference for your Bugzilla installation.
+	  If your bugzilla query page is at http://www.foo.com/bugzilla/query.cgi,
+	  your url base is http://www.foo.com/bugzilla/
+	</PARA>
+      </STEP>
+      <STEP>
+	<PARA>
+	  Set "usebuggroups" to "1" <EMPHASIS>only</EMPHASIS>
+	  if you need to restrict access to products.
+	  I suggest leaving this parameter <EMPHASIS>off</EMPHASIS>
+	  while initially testing your Bugzilla.
+	</PARA>
+      </STEP>
+      <STEP>
+	<PARA>
+	  Set "usebuggroupsentry" to "1" if you want to restrict access to products.
+	  Once again, if you are simply testing your installation, I suggest against
+	  turning this parameter on; the strict security checking may stop you from
+	  being able to modify your new entries.
+	</PARA>
+      </STEP>
+      <STEP>
+        <PARA>
+	  Set "shadowdb" to "bug_shadowdb" if you will be
+	  running a *very* large installation of Bugzilla.
+	  The shadow database enables many simultaneous users
+	  to read and write to the database
+	  without interfering with one another.  
+	  <NOTE>
+	    <PARA>
+	      Enabling "shadowdb" can adversely affect the stability
+	      of your installation of Bugzilla.
+	      You may frequently need to manually synchronize your databases,
+	      or schedule nightly syncs
+	      via "cron"
+	    </PARA>
+	  </NOTE>
+	  Once again, in testing you should
+	  avoid this option -- use it if or when you <EMPHASIS>need</EMPHASIS> to use it, and have
+	  repeatedly run into the problem it was designed to solve -- very long wait times while
+	  attempting to commit a change to the database.
+        </PARA>
+	<PARA>
+	  If you use the "shadowdb" option,
+	  it is only natural that you should turn the "queryagainstshadowdb"
+	  option "On" as well.  Otherwise you are replicating data into a shadow database for no reason!
+	</PARA>
+      </STEP>
+      <STEP>
+        <PARA>
+	  If you have custom logos or HTML you must put in place to fit within your site design guidelines,
+	  place the code in the "headerhtml", "footerhtml", "errorhtml",
+	  "bannerhtml", or "blurbhtml" text boxes.
+	  <NOTE>
+	    <PARA>
+	      The "headerhtml" text box is the HTML printed out
+	      <EMPHASIS>before</EMPHASIS> any other code on the page.
+	      If you have a special banner, put the code for it in "bannerhtml".
+	      You may want to leave these
+	      settings at the defaults initially.
+	    </PARA>
+	  </NOTE>
+	</PARA>
+      </STEP>
+      <STEP>
+        <PARA>
+	  Add any text you wish to the "passwordmail" parameter box.  For instance,
+	  many people choose to use this box to give a quick training blurb about how to
+	  use Bugzilla at your site.
+        </PARA>
+      </STEP>
+      <STEP>
+        <PARA>
+	  Ensure "newemailtech" is "on".
+	  Your users will thank you.  This is the default in the post-2.12 world, and is
+	  only an issue if you are upgrading.
+	</PARA>
+      </STEP>
+      <STEP>
+	<PARA>
+	  Do you want to use the qa contact ("useqacontact")
+	  and status whiteboard ("usestatuswhiteboard") fields?
+	  These fields are useful because they allow for more flexibility,
+	  particularly when you have an existing
+	  Quality Assurance and/or Release Engineering team, 
+	  but they may not be needed for smaller installations.
+	</PARA>
+      </STEP>
+      <STEP>
+	<PARA>
+	  Set "whinedays" to the amount of days you want to let bugs go
+	  in the "New" or "Reopened" state before
+	  notifying people they have untouched new bugs.  If you do not plan to use this feature, simply do
+	  not set up the whining cron job described in the README, or set this value to "0".
+	</PARA>
+      </STEP>
+      <STEP>
+	<PARA>
+	  Set the "commenton" options according to your site policy.
+	  It is a wise idea to require comments when users
+	  resolve, reassign, or reopen bugs.
+	  <NOTE>
+	    <PARA>
+	      It is generally far better to require a developer comment when resolving bugs than not.
+	      Few things are more annoying to bug database users than having a developer
+	      mark a bug "fixed" without any comment as to what the fix was (or even that it was truly fixed!)
+	    </PARA>
+	  </NOTE>
+	</PARA>
+      </STEP>
+      <STEP>
+	<PARA>
+	  Set "supportwatchers" to "On".  This feature is helpful for team leads to monitor progress in their
+	  respective areas, and can offer many other benefits, such as allowing a developer to pick up a
+	  former engineer's bugs without requiring her to change all the information in the bug.
+	</PARA>
+      </STEP>
+    </PROCEDURE>
+  </SECTION>
+
+  <SECTION id="useradmin">
+    <TITLE>User Administration</TITLE>
+    <PARA>
+      User administration is one of the easiest parts of Bugzilla.
+      Keeping it from getting out of hand, however, can become a challenge.
+    </PARA>
+
+    <SECTION id="defaultuser">
+      <TITLE>Creating the Default User</TITLE>
+
+      <PARA>
+	When you first run checksetup.pl after installing Bugzilla, it will prompt you
+	for the administrative username (email address) and password for this "super user".
+	If for some reason you were to delete the "super user" account, re-running
+	checksetup.pl will again prompt you for this username and password.
+      </PARA>
+      <TIP>
+	<PARA>
+       If you wish to add more administrative users, you must use the MySQL interface.
+	Run "mysql" from the command line, and use these commands ("mysql>" denotes the 
+	mysql prompt, not something you should type in):
+	<COMMAND><PROMPT>mysql></PROMPT> use bugs;</COMMAND>
+	<COMMAND><PROMPT>mysql></PROMPT> update profiles set groupset=0x7ffffffffffffff
+	  where login_name = "(user's login name)"; </COMMAND>
+	</PARA>
+      </TIP>
+    </SECTION>
+
+    <SECTION id="manageusers">
+      <TITLE>Managing Other Users</TITLE>
+
+      <SECTION id="login">
+	<TITLE>Logging In</TITLE>
+	<ORDEREDLIST>
+	  <LISTITEM>
+	    <PARA>
+	      Open the index.html page for your Bugzilla installation in your browser window.
+	    </PARA>
+	  </LISTITEM>
+	  <LISTITEM>
+	    <PARA>
+	      Click the "Query Existing Bug Reports" link.
+	    </PARA>
+	  </LISTITEM>
+	  <LISTITEM>
+	    <PARA>
+	      Click the "Log In" link at the foot of the page.
+	    </PARA>
+	  </LISTITEM>
+	  <LISTITEM>
+	    <PARA>
+	      Type your email address, and the password which was emailed to you when you
+	      created your Bugzilla account, into the spaces provided.
+	    </PARA>
+	  </LISTITEM>
+	</ORDEREDLIST>
+	<PARA>Congratulations, you are logged in!</PARA>
+      </SECTION>
+
+      <SECTION id="createnewusers">
+	<TITLE>Creating new users</TITLE>
+	<PARA>
+	  Your users can create their own user accounts by clicking the "New Account"
+	  link at the bottom of each page.
+	  However, should you desire to create user accounts ahead of time, here is how you do it.
+	</PARA>
+	<ORDEREDLIST>
+	  <LISTITEM>
+	    <PARA>
+	      After logging in, click the "Users" link at the footer of the query page.
+	    </PARA>
+	  </LISTITEM>
+	  <LISTITEM>
+	    <PARA>
+	      To see a specific user, type a portion of their login name
+	      in the box provided and click "submit".
+	      To see all users, simply click the "submit" button.
+	      You must click "submit" here to be able to add a new user.
+	    </PARA>
+	    <TIP>
+	      <PARA>
+		More functionality is available via the list on the right-hand side
+		of the text entry box.
+		You can match what you type as a case-insensitive substring (the default)
+		of all users on your system, a case-sensitive regular expression
+		(please see the "man regexp" manual page for details on regular expression syntax),
+		or a <EMPHASIS>reverse</EMPHASIS> regular expression match,
+		where every user name which does NOT match the regular expression
+		is selected.
+	      </PARA>
+	    </TIP>
+	  </LISTITEM>
+	  <LISTITEM>
+	    <PARA>
+	      Click the "Add New User" link at the bottom of the user list
+	    </PARA>
+	  </LISTITEM>
+	  <LISTITEM>
+	    <PARA>
+	      Fill out the form presented.  This page is self-explanatory.  When done, click "submit".
+	    </PARA>
+	    <NOTE>
+	      <PARA>
+		Adding a user this way will <EMPHASIS>not</EMPHASIS> send an email
+		informing them of their username and password.
+		In general, it is preferable to log out and use the "New Account"
+		button to create users, as it will pre-populate all the required fields and also notify 
+		the user of her account name and password.
+	      </PARA>
+	    </NOTE>
+	  </LISTITEM>
+	</ORDEREDLIST>
+      </SECTION>
+
+      <SECTION id="disableusers">
+	<TITLE>Disabling Users</TITLE>
+	<PARA>
+	  I bet you noticed that big "Disabled Text" entry box available from the "Add New User" screen,
+	  when you edit an account?
+	  By entering any text in this box and selecting "submit",
+	  you have prevented the user from using Bugzilla via the web interface.
+	  Your explanation, written in this text box, will be presented to the user
+	  the next time she attempts to use the system.
+	  <WARNING>
+	    <PARA>
+	      Don't disable your own administrative account, or you will hate life!
+	    </PARA>
+	  </WARNING>
+	</PARA>
+      </SECTION>
+
+      <SECTION id="modifyusers">
+	<TITLE>Modifying Users</TITLE>
+	<PARA>
+	  Here I will attempt to describe the function of each option on the user edit screen.
+	</PARA>
+	<ITEMIZEDLIST>
+	  <LISTITEM>
+	    <PARA>
+	      <EMPHASIS>Login Name</EMPHASIS>: This is generally the user's email address.
+	      However, if you have edited your system parameters,
+	      this may just be the user's login name or some other identifier.
+	      <TIP>
+		<PARA>
+		  For compatability reasons, you should probably
+		  stick with email addresses as user login names.  It will make your life easier.
+		</PARA>
+	      </TIP>
+	    </PARA>
+	  </LISTITEM>
+	  <LISTITEM>
+	    <PARA>
+	      <EMPHASIS>Real Name</EMPHASIS>: Duh!
+	    </PARA>
+	  </LISTITEM>
+	  <LISTITEM>
+	    <PARA>
+	      <EMPHASIS>Password</EMPHASIS>: You will only see asterisks in versions
+	      of Bugzilla newer than 2.10 or early 2.11.  You can change the user password here.
+	    </PARA>
+	  </LISTITEM>
+	  <LISTITEM>
+	    <PARA>
+	      <EMPHASIS>Email Notification</EMPHASIS>: You may choose from one of three options:
+	      <ORDEREDLIST>
+		<LISTITEM>
+		  <PARA>
+		    All qualifying bugs except those which I change:
+		    The user will be notified of any change to any bug
+		    for which she is the reporter, assignee, Q/A contact, CC recipient, or "watcher".
+		  </PARA>
+		</LISTITEM>
+		<LISTITEM>
+		  <PARA>
+		    Only those bugs which I am listed on the CC line:
+		    The user will not be notified of changes to bugs where she is the assignee,
+		    reporter, or Q/A contact, but will receive them if she is on the CC list.
+		    <NOTE>
+		      <PARA>
+			She will still receive whining cron emails if you set up the "whinemail" feature.
+		      </PARA>
+		    </NOTE>
+		  </PARA>
+		</LISTITEM>
+		<LISTITEM>
+		  <PARA>
+		    <EMPHASIS>All Qualifying Bugs</EMPHASIS>: This user is a glutton for punishment.
+		    If her name is in the reporter, Q/A contact, CC, assignee, or is a "watcher",
+		    she will get email updates regarding the bug.
+		  </PARA>
+		</LISTITEM>
+	      </ORDEREDLIST>
+</PARA>
+	    <PARA>
+	      <EMPHASIS>Disable Text</EMPHASIS>: If you type anything in this box,
+	      including just a space, the user account is disabled from making any changes
+	      to bugs via the web interface, and what you type in this box is presented as the reason.
+	      <WARNING>
+		<PARA>Don't disable the administrator account!</PARA>
+	      </WARNING>
+	      <NOTE>
+		<PARA>
+		  As of this writing, the user can still submit bugs via the e-mail gateway,
+		  if you set it up, despite the disabled text field.  The e-mail gateway should
+		  <EMPHASIS>not</EMPHASIS> be enabled for secure installations of Bugzilla.
+		</PARA>
+	      </NOTE>
+	    </PARA>
+	  </LISTITEM>
+	  <LISTITEM>
+	    <PARA>
+	      <EMPHASIS>CanConfirm</EMPHASIS>: This field is only used if you have enabled
+	      "unconfirmed" status in your parameters screen.  If you enable this for a user,
+	      that user can then move bugs from "Unconfirmed" to "Confirmed" status (ergo: "New" status).
+	      Be judicious about allowing users to turn this bit on for other users.
+	    </PARA>
+	  </LISTITEM>
+	  <LISTITEM>
+	    <PARA>
+	      <EMPHASIS>Creategroups</EMPHASIS>: This option will allow a user to create and
+	      destroy groups in Bugzilla.  Unless you are using the Bugzilla GroupSentry security
+	      option "usebuggroupsentry" in your parameters, this setting has no effect.
+	    </PARA>
+	  </LISTITEM>
+	  <LISTITEM>
+	    <PARA>
+	      <EMPHASIS>Editbugs</EMPHASIS>: Unless a user has this bit set, they can only edit
+	      those bugs for which they are the assignee or the reporter.  
+	      <NOTE>
+		<PARA>
+		  Leaving this option unchecked does not prevent users from adding
+		  comments to a bug!  They simply cannot change a bug priority, severity,
+		  etc. unless they are the assignee or reporter.
+		</PARA>
+	      </NOTE>
+	    </PARA>
+	  </LISTITEM>
+	  <LISTITEM>
+	    <PARA>
+	      <EMPHASIS>Editcomponents</EMPHASIS>: This flag allows a user to create new 
+	      products and components, as well as modify and destroy those that have no bugs
+	      associated with them.  If a product or component has bugs associated with it,
+	      those bugs must be moved to a different product or component before Bugzilla
+	      will allow them to be destroyed.  The name of a product or component can be
+	      changed without affecting the associated bugs, but it tends to annoy
+	      the hell out of your users when these change a lot.
+	    </PARA>
+	  </LISTITEM>
+	  <LISTITEM>
+	    <PARA>
+	      <EMPHASIS>Editkeywords</EMPHASIS>: If you use Bugzilla's keyword functionality,
+	      enabling this feature allows a user can create and destroy keywords.
+	      As always, the keywords for existing bugs containing the keyword
+	      the user wishes to destroy must be changed before Bugzilla will allow it to die.
+	      You must be very careful about creating too many new keywords
+	      if you run a very large Bugzilla installation; keywords are global variables 
+	      across products, and you can often run into a phenomenon called "keyword bloat".
+	      This confuses users, and then the feature goes unused.
+	    </PARA>
+	  </LISTITEM>
+	  <LISTITEM>
+	    <PARA>
+	      <EMPHASIS>Editusers</EMPHASIS>: This flag allows a user do what you're doing
+	      right now: edit other users.
+	      This will allow those with the right to do so to remove administrator
+	      priveleges from other users or grant them to themselves.  Enable with care.
+	    </PARA>
+	  </LISTITEM>
+	  <LISTITEM>
+	    <PARA>
+	      <EMPHASIS>PRODUCT</EMPHASIS>: PRODUCT bugs access.  This allows an administrator,
+	      with product-level granularity, to specify in which products a user can edit bugs. 
+	      The user must still have the "editbugs" privelege to edit bugs in this area;
+	      this simply restricts them from even seeing bugs outside these boundaries if the administrator
+	      has enabled the group sentry parameter "usebuggroupsentry".  Unless you are using bug groups,
+	      this option has no effect.
+	    </PARA>
+	  </LISTITEM>
+	</ITEMIZEDLIST>
+      </SECTION>
+    </SECTION>
+  </SECTION>
+
+  <SECTION id="programadmin">
+    <TITLE>Product, Component, Milestone, and Version Administration</TITLE>
+    <EPIGRAPH>
+      <PARA>
+	Dear Lord, we have to get our users to do WHAT?
+      </PARA>
+    </EPIGRAPH>
+
+    <SECTION id="products">
+      <TITLE>Products</TITLE>
+      <SUBTITLE>Formerly, and in some spots still, called "Programs"</SUBTITLE>
+      <PARA>
+	<GLOSSTERM baseform="product" linkend="gloss_product">Products</GLOSSTERM> are the
+	broadest category in Bugzilla, and you should have the least of these.
+	If your company makes computer games, you should have one product per game,
+	and possibly a few special products
+	(website, meetings...)
+      </PARA>
+      <PARA>
+	A Product (formerly called "Program", and still referred to that way
+	in some portions of the source code) controls some very important functions.
+	The number of "votes" available for users to vote for the most important bugs
+	is set per-product, as is the number of votes required to move a bug automatically
+	from the UNCONFIRMED status to the NEW status.  One can close a Product for further
+	bug entry and define various Versions available from the Edit Product screen.
+      </PARA>
+      <PARA>To create a new product:</PARA>
+      <ORDEREDLIST>
+	<LISTITEM>
+	  <PARA>
+	    Select "components" from the yellow footer
+	  </PARA>
+	  <TIP>
+	    <PARA>
+	      It may seem counterintuitive to click "components" when you want
+	      to edit the properties associated with Products.  This is one of a long
+	      list of things we want in Bugzilla 3.0...
+	    </PARA>
+	  </TIP>
+	</LISTITEM>
+	<LISTITEM>
+	  <PARA>
+	    Select the "Add" link to the right of "Add a new product".
+	  </PARA>
+	</LISTITEM>
+	<LISTITEM>
+	  <PARA>
+	    Enter the name of the product and a description.
+	    The Description field is free-form.
+	  </PARA>
+	</LISTITEM>
+      </ORDEREDLIST>
+      <TIP>
+	<PARA>
+	  Don't worry about the "Closed for bug entry", "Maximum Votes per person", 
+	  "Maximum votes a person can put on a single bug", "Number of votes a bug in
+	  this Product needs to automatically get out of the UNCOMFIRMED state",
+	  and "Version" options yet.
+	  We'll cover those in a few moments.
+	</PARA>
+      </TIP>
+    </SECTION>
+    
+    <SECTION id="components">
+      <TITLE>Components</TITLE>
+      <PARA>
+	Components are subsections of a Product. 
+
+	<EXAMPLE>
+	  <TITLE>Creating some Components</TITLE>
+	  <INFORMALEXAMPLE>
+	    <PARA>
+	      The computer game you are designing may a "UI" component, an "API" component,
+	      a "Sound System" component, and a "Plugins" component, each overseen by a different
+	      programmer.  It often makes sense to divide Components in Bugzilla according to the
+	      natural divisions of responsibility within your Product or company.
+	    </PARA>
+	  </INFORMALEXAMPLE>
+	</EXAMPLE>
+
+	Each component has a owner and (if you turned it on in the parameters), a qa
+	contact. The owner should be the primary person who fixes bugs in that component.  The  QA
+	Contact should be the person who will ensure these bugs are completely fixed. The Owner,
+	QA Contact, and Reporter will get email when new bugs are created in this Component and
+	when these bugs change. Default Owner and Default QA Contact fields only dictate the
+	<EMPHASIS>default assignments</EMPHASIS>; the Owner and Q/A Contact fields in a bug 
+	are otherwise unrelated to the Component.
+      </PARA>
+
+      <PARA>
+	To create a new Component:
+      </PARA>
+      <ORDEREDLIST>
+	<LISTITEM>
+	  <PARA>
+	    Select the "Edit components" link from the "Edit Product" page
+	  </PARA>
+	</LISTITEM>
+	<LISTITEM>
+	  <PARA>
+	    Select the "Add" link to the right of the "Add a new component" text
+	    on the "Select Component" page.
+	  </PARA>
+	</LISTITEM>
+	<LISTITEM>
+	  <PARA>
+	    Fill out the "Component" field, a short "Description", and the "Initial Owner".
+	    The "Component" field should not contain a space.  The "Description" field is
+	    free-form.  The "Initial Owner" field must be that of a valid user already
+	    existing in the database.  If the initial owner does not exist, Bugzilla
+	    will refuse to create the component.
+	    <TIP>
+	      <PARA>
+		Is your "Default Owner" a user who is not yet in the database?
+		No problem.
+		<ORDEREDLIST>
+		  <LISTITEM>
+		    <PARA>
+		      Select the "Log out" link on the footer of the page.
+		    </PARA>
+		  </LISTITEM>
+		  <LISTITEM>
+		    <PARA>
+		      Select the "New Account" link on the footer of the "Relogin" page
+		    </PARA>
+		  </LISTITEM>
+		  <LISTITEM>
+		    <PARA>
+		      Type in the email address of the default owner you want to create
+		      in the "E-mail address" field, and her full name in the "Real name"
+		      field, then select the "Submit Query" button.
+		    </PARA>
+		  </LISTITEM>
+		  <LISTITEM>
+		    <PARA>
+		      Now select "Log in" again, type in your login information, and you
+		      can modify the product to use the Default Owner information
+		      you require.
+		    </PARA>
+		  </LISTITEM>
+		</ORDEREDLIST>
+	      </PARA>
+	    </TIP>
+	  </PARA>
+	</LISTITEM>
+	<LISTITEM>
+	  <PARA>
+	    Either "edit" more components or return to the "query" page on the ensuing
+	    "Addming new component" page.  To return to the Product you were editing, you
+	    must select the "components" link as before.
+	  </PARA>
+	</LISTITEM>
+      </ORDEREDLIST>
+    </SECTION>
+    
+    <SECTION id="versions">
+      <TITLE>Versions</TITLE>
+      <PARA>
+	Versions are the revisions of the product, such as "Flinders 3.1", "Flinders 95",
+	and "Flinders 2000".  Using Versions helps you isolate code changes and are an aid
+	in reporting.
+
+	<EXAMPLE>
+	  <TITLE>Common Use of Versions</TITLE>
+	  <INFORMALEXAMPLE>
+	    <PARA>
+	      A user reports a bug
+	      against Version "Beta 2.0" of your product.  The current Version of your software
+	      is "Release Candidate 1", and no longer has the bug.  This will
+	      help you triage and classify bugs according to their relevance.  It is also
+	      possible people may report bugs against bleeding-edge beta versions that are
+	    not evident in older versions of the software.  This can help isolate code
+	      changes that caused the bug
+	    </PARA>
+	  </INFORMALEXAMPLE>
+	</EXAMPLE>
+	<EXAMPLE>
+	  <TITLE>A Different Use of Versions</TITLE>
+	  <INFORMALEXAMPLE>
+	    <PARA>
+	      This field has been used to good effect by an online service provider in a slightly
+	      different way.  They had three versions of the product: "Production", "QA",
+	      and "Dev".  Although it may be the same product, a bug in the development
+	      environment is not normally as critical as a Production bug, nor does it
+	      need to be reported publicly.  When used in conjunction with Target Milestones,
+	      one can easily specify the environment where a bug can be reproduced, and
+	      the Milestone by which it will be fixed.
+	    </PARA>
+	  </INFORMALEXAMPLE>
+	</EXAMPLE>
+       </PARA>
+      <PARA>
+	To create and edit Versions:
+      </PARA>
+      <ORDEREDLIST>
+	<LISTITEM>
+	  <PARA>
+	    From the "Edit Product" screen, select "Edit Versions"
+	  </PARA>
+	</LISTITEM>
+	<LISTITEM>
+	  <PARA>
+	    You will notice that the product already has the default version "undefined".
+	    If your product doesn't use version numbers, you may want to leave this as it is
+	    or edit it so that it is "---". You can then go back to the edit versions page
+	    and add new versions to your product.
+	  </PARA>
+	  <PARA>
+	    Otherwise, click the "Add" button to the right of the "Add a new version" text.
+	  </PARA>
+	</LISTITEM>
+	<LISTITEM>
+	  <PARA>
+	    Enter the name of the Version.  This can be free-form characters up to the limit of the
+	    text box.  Then select the "Add" button.
+	  </PARA>
+	</LISTITEM>
+	<LISTITEM>
+	  <PARA>
+	    At this point you can select "Edit" to edit more Versions, or return to the "Query"
+	    page, from which you can navigate back to the product through the "components" link
+	    at the foot of the Query page.
+	  </PARA>
+	</LISTITEM>
+      </ORDEREDLIST>
+    </SECTION>
+    
+    <SECTION id="milestones">
+      <TITLE>Milestones</TITLE>
+      <PARA>
+	Milestones are "targets" that you plan to get a bug fixed by. For example, you have a bug that
+	you plan to fix for your 3.0 release, it would be assigned the milestone of 3.0. Or, you have a
+	bug that you plan to fix for 2.8, this would have a milestone of 2.8.
+      </PARA>
+      <NOTE>
+	<PARA>
+	  Milestone options will only appear for a Product if you turned the "usetargetmilestone" field
+	  in the "Edit Parameters" screen "On".
+	</PARA>
+      </NOTE>
+      <PARA>
+	To create new Milestones, set Default Milestones, and set Milestone URL: 
+      </PARA>
+      <ORDEREDLIST>
+	<LISTITEM>
+	  <PARA>
+	    Select "edit milestones"
+	  </PARA>
+	</LISTITEM>
+	<LISTITEM>
+	  <PARA>
+	    Select "Add" to the right of the "Add a new milestone" text
+	  </PARA>
+	</LISTITEM>
+	<LISTITEM>
+	  <PARA>
+	    Enter the name of the Milestone in the "Milestone" field.
+	    You can optionally set the "Sortkey", which is a positive or negative number (-255 to 255)
+	    that defines where in the list this particular milestone appears.
+	    Select "Add".
+	  </PARA>
+	  <EXAMPLE>
+	    <TITLE>Using SortKey with Target Milestone</TITLE>
+	    <INFORMALEXAMPLE>
+	      <PARA>
+		Let's say you create a target milestone called "Release 1.0", with Sortkey set to "0".
+		Later, you realize that you will have a public beta, called "Beta1".
+		You can create a Milestone called "Beta1", with a Sortkey of "-1" in order to ensure
+		people will see the Target Milestone of "Beta1" earlier on the list than "Release 1.0"
+	      </PARA>
+	    </INFORMALEXAMPLE>
+	  </EXAMPLE>
+	</LISTITEM>
+	<LISTITEM>
+	  <PARA>
+	    If you want to add more milestones, select the "Edit" link.
+	    If you don't, well shoot, you have to go back to the "query" page and select "components"
+	    again, and make your way back to the Product you were editing.
+	    <NOTE>
+	      <PARA>
+		This is another in the list of unusual user interface decisions that
+		we'd like to get cleaned up.  Shouldn't there be a link to the effect of
+		"edit the Product I was editing when I ended up here"?  In any case,
+		clicking "components" in the footer takes you back to the "Select product"
+		screen, from which you can begin editing your product again.
+	      </PARA>
+	    </NOTE>
+	  </PARA>
+	</LISTITEM>
+	<LISTITEM>
+	  <PARA>
+	    From the Edit Product screen again (once you've made your way back), enter the URL
+	    for a description of what your milestones are for this product in the "Milestone URL" field.
+	    It should be of the format "http://www.foo.com/bugzilla/product_milestones.html"
+	  </PARA>
+	  <PARA>
+	    Some common uses of this field include product descriptions, product roadmaps,
+	    and of course a simple description of the meaning of each milestone.
+	  </PARA>
+	</LISTITEM>
+	<LISTITEM>
+	  <PARA>
+	    If you're using Target Milestones, the "Default Milestone" field must have some
+	    kind of entry.  If you really don't care if people set coherent Target Milestones, 
+	    simply leave this at the default, "---".  However, controlling and regularly updating the Default
+	    Milestone field is a powerful tool when reporting the status of projects.
+	  </PARA>
+	  <PARA>Select the "Update" button when you are done.</PARA>
+	</LISTITEM>
+	<LISTITEM>
+	  <PARA>
+	    
+	  </PARA>
+	</LISTITEM>
+      </ORDEREDLIST>
+    </SECTION>
+    
+    <SECTION id="voting">
+      <TITLE>Voting</TITLE>
+      <PARA>
+	The concept of "voting" is a poorly understood, yet powerful feature for the management
+	of open-source projects.  Each user is assigned so many Votes per product, which they can
+	freely reassign (or assign multiple votes to a single bug).
+	This allows developers to gauge user need for a particular enhancement
+	or bugfix.  By allowing bugs with a certain number of votes to automatically move from
+	"UNCONFIRMED" to "NEW", users of the bug system can help high-priority bugs garner
+	attention so they don't sit for a long time awaiting triage.
+      </PARA>
+      <PARA>
+	The daunting challenge of Votes is deciding where you draw the line for a "vocal majority".  If you
+	only have a user base of 100 users, setting a low threshold for bugs to move from UNCONFIRMED
+	to NEW makes sense.  As the Bugzilla user base expands, however, these thresholds must be
+	re-evaluated.  You should gauge whether this feature is worth the time and close monitoring involved,
+	and perhaps forego implementation until you have a critical mass of users who demand it.
+      </PARA>
+      <PARA>To modify Voting settings:</PARA>
+      <ORDEREDLIST>
+	<LISTITEM>
+	  <PARA>
+	    Navigate to the "Edit Product" screen for the Product you wish to modify
+	  </PARA>
+	</LISTITEM>
+	<LISTITEM>
+	  <PARA>
+	    Set "Maximum Votes per person" to your calculated value.  Setting this field
+	    to "0" disables voting.
+	  </PARA>
+	</LISTITEM>
+	<LISTITEM>
+	  <PARA>
+	    Set "Maximum Votes a person can put on a single bug" to your calculated value.  It
+	    should probably be some number lower than the "Maximum votes per person".
+	    Setting this field to "0" disables voting, but leaves the voting options open
+	    to the user.  This is confusing.
+	  </PARA>
+	</LISTITEM>
+	<LISTITEM>
+	  <PARA>
+	    Set "Number of votes a bug in this product needs to automatically get out of the
+	    UNCONFIRMED state" to your calculated number.  Setting this field to "0" 
+	    disables the automatic move of bugs from UNCONFIRMED to NEW.  Some people
+	    advocate leaving this at "0", but of what use are Votes if your Bugzilla
+	    user base is unable to affect which bugs appear on Development radar?
+	    <TIP>
+	      <PARA>
+		You should probably set this number to higher than a small coalition of
+		Bugzilla users can influence it.  Most sites use this as a "referendum"
+		mechanism -- if users are able to vote a bug out of UNCONFIRMED, it
+		is a <EMPHASIS>really</EMPHASIS> bad bug!
+	      </PARA>
+	    </TIP>
+	  </PARA>
+	</LISTITEM>
+	<LISTITEM>
+	  <PARA>
+	    Once you have adjusted the values to your preference, select the "Update" button.
+	  </PARA>
+	</LISTITEM>
+      </ORDEREDLIST>
+    </SECTION>    
+
+    <SECTION id="groups">
+      <TITLE>Groups and Group Security</TITLE>
+      <PARA>
+	Groups can be very useful in bugzilla, because they allow users to isolate
+	bugs or products that should only be seen by certain people.  Groups can also
+	be a complicated minefield of interdependencies and weirdness if mismanaged.
+
+	<EXAMPLE>
+	  <TITLE>When to Use Group Security</TITLE>
+	  <INFORMALEXAMPLE>
+	    <PARA>
+	      Many Bugzilla sites isolate "Security-related" bugs from all other bugs.
+	      This way, they can have a fix ready before the security vulnerability
+	      is announced to the world.  You can create a "Security" product which, by
+	      default, has no members, and only add members to the group (in their individual
+	      User page, as described under User Administration) who should have
+	      priveleged access to "Security" bugs.  Alternately, you may create a Group
+	      independently of any Product, and change the Group mask on individual bugs
+	      to restrict access to members only of certain Groups.
+	    </PARA>
+	  </INFORMALEXAMPLE>
+	</EXAMPLE>
+	
+	Groups only work if you enable the "usebuggroups" paramater.
+	In addition, if the "usebuggroupsentry" parameter is "On", one can restrict access
+	to products by groups, so that only members of a product group are able to view
+	bugs within that product.
+	Group security in Bugzilla can be divided into two categories:
+	Generic and Product-Based.
+      </PARA>
+      <NOTE>
+	<PARA>
+	  Groups in Bugzilla are a complicated beast that evolved out of very simple user
+	  permission bitmasks, apparently itself derived from common concepts in UNIX access
+	  controls.  A "bitmask" is a fixed-length number whose value can describe one, and
+	  only one, set of states.  For instance, UNIX file permissions are assigned bitmask
+	  values:  "execute" has a value of 1, "write" has a value of 2, 
+	  and "read" has a value of 4.  Add them together,
+	  and a file can be read, written to, and executed if it has a bitmask of "7". (This
+	  is a simplified example -- anybody who knows UNIX security knows there is much
+	  more to it than this.  Please bear with me for the purpose of this note.)  The only
+	  way a bitmask scheme can work is by doubling the bit count for each value.  Thus
+	  if UNIX wanted to offer another file permission, the next would have to be a value of
+	  8, then the next 16, the next 32, etc.
+	</PARA>
+	<PARA>
+	  Similarly, Bugzilla offers a bitmask to define group permissions, with an internal
+	  limit of 64.  Several are already occupied
+	  by built-in permissions.  The way around this limitation is
+	  to avoid assigning groups to products if you have many products, avoid bloating
+	  of group lists, and religiously prune irrelevant groups.  In reality, most installations
+	  of Bugzilla support far fewer than 64 groups, so this limitation has not hit
+	  for most sites, but it is on the table to be revised for Bugzilla 3.0
+	  because it interferes with the security schemes of some administrators.
+	</PARA>
+      </NOTE>
+      <PARA>
+	To enable Generic Group Security ("usebuggroups"):
+      </PARA>
+      <ORDEREDLIST>
+	<LISTITEM>
+	  <PARA>
+	    Turn "On" "usebuggroups" in the "Edit Parameters" screen.
+	  </PARA>
+	</LISTITEM>
+	<LISTITEM>
+	  <PARA>
+	    You will generally have no groups set up.  Select the "groups" link
+	    in the footer.
+	  </PARA>
+	</LISTITEM>
+	<LISTITEM>
+	  <PARA>
+	    Take a moment to understand the instructions on the "Edit Groups" screen.
+	    Once you feel confident you understand what is expected of you, select the
+	    "Add Group" link.
+	  </PARA>
+	</LISTITEM>
+	<LISTITEM>
+	  <PARA>
+	    Fill out the "New Name" (remember, no spaces!), "New Description", and "New
+	    User RegExp" fields.  "New User RegExp" allows you to automatically place
+	    all users who fulfill the Regular Expression into the new group.
+
+	    <EXAMPLE>
+	      <TITLE>Creating a New Group</TITLE>
+	      <INFORMALEXAMPLE>
+		<PARA>
+		  I created a group called "DefaultGroup" with a description of "This is simply
+		  a group to play with", and a "New User RegExp" of "*@velio.com".  This
+		  new group automatically includes all Bugzilla users with "@velio.com" at the
+		  end of their user id.  When I finished, my new group was assigned bit #128.
+		</PARA>
+	      </INFORMALEXAMPLE>
+	    </EXAMPLE>
+	    
+	    When you have finished, select the "Add" button.
+	  </PARA>
+	</LISTITEM>
+      </ORDEREDLIST>
+
+      <PARA>
+	To enable Product-Based Group Security ("usebuggroupsentry"):
+      </PARA>
+      <WARNING>
+	<PARA>
+	  Don't forget that you only have 64 groups masks available, total, for
+	  your installation of Bugzilla!  If you plan on having more than 50
+	  products in your individual Bugzilla installation, and require group
+	  security for your products, you should
+	  consider either running multiple Bugzillas or using Generic Group Security
+	  instead of Product-Based ("usebuggroupsentry") Group Security.
+	</PARA>
+      </WARNING>
+      <ORDEREDLIST>
+	<LISTITEM>
+	  <PARA>
+	    Turn "On" "usebuggroups" and "usebuggroupsentry" in the "Edit Parameters" screen.
+	  </PARA>
+	  <WARNING>
+	    <PARA>
+	      "usebuggroupsentry" has the capacity to prevent the administrative user
+	      from directly altering bugs because of conflicting group permissions.
+	      If you plan on using "usebuggroupsentry", you should plan on restricting administrative
+	      account usage to administrative duties only.
+	      In other words, manage bugs with an unpriveleged user account, and
+	      manage users, groups, Products, etc. with the administrative account.
+	    </PARA>
+	  </WARNING>
+	</LISTITEM>
+	<LISTITEM>
+	  <PARA>
+	    You will generally have no Groups set up, unless you enabled "usebuggroupsentry"
+	    prior to creating any Products.  To create "Generic Group Security" groups,
+	    follow the instructions given above.  To create Product-Based Group security,
+	    simply follow the instructions for creating a new Product.  If you need to
+	    add users to these new groups as you create them, you will find the option
+	    to add them to the group available under the "Edit User" screens.
+	  </PARA>
+	</LISTITEM>
+      </ORDEREDLIST>
+    </SECTION>
+  </SECTION>
+  
+  <SECTION id="security">
+    <TITLE>Bugzilla Security</TITLE>
+    <EPIGRAPH>
+      <PARA>
+	Putting your money in a wall safe is better protection than depending on the fact that
+	no one knows that you hide your money in a mayonnaise jar in your fridge.
+      </PARA>
+    </EPIGRAPH>
+    <NOTE>
+      <PARA>
+	Poorly-configured MySQL, Bugzilla, and FTP installations have given attackers full
+	access to systems in the past.  Please take these guidelines seriously, even
+	for Bugzilla machines hidden away behind your firewall.  80% of all computer
+	trespassers are insiders, not anonymous crackers.
+      </PARA>
+    </NOTE>
+    <PARA>
+      First thing's first: Secure your installation.
+      <NOTE>
+	<PARA>
+	  These instructions must, of necessity, be somewhat vague since Bugzilla runs on so many different
+	  platforms.  If you have refinements of these directions for specific platforms, please
+	  submit them to <ULINK URL="mailto://mozilla-webtools@mozilla.org">mozilla-webtools@mozilla.org</ULINK>
+	</PARA>
+      </NOTE>
+      <ORDEREDLIST>
+	<LISTITEM>
+	  <PARA>
+	    Ensure you are running at least MysQL version 3.22.32 or newer.  Earlier versions had
+	    notable security holes and poorly secured default configuration choices.
+	  </PARA>
+	</LISTITEM>
+	<LISTITEM>
+	  <PARA><EMPHASIS>There is no substitute for understanding the tools on your system!</EMPHASIS>
+	    Read <ULINK URL="http://www.mysql.com/documentation/mysql/bychapter/manual_Privilege_system.html">
+	  The MySQL Privelege System</ULINK> until you can recite it from memory!</PARA>
+	  <PARA>
+	    At the very least, ensure you password the "mysql -u root" account and the "bugs" account, establish grant
+	    table rights (consult the Keystone guide in Appendix C: The Bugzilla Database for some easy-to-use details)
+	    that do not allow CREATE, DROP, RELOAD, SHUTDOWN, and PROCESS for user "bugs".  I wrote up the Keystone
+	    advice back when I knew far less about security than I do now : )
+	  </PARA>
+	</LISTITEM>
+	<LISTITEM>
+	  <PARA>
+	    Lock down /etc/inetd.conf.  Heck, disable inet entirely on this box.  It should only listen to
+	    port 25 for Sendmail
+	    and port 80 for Apache.
+	  </PARA>
+	</LISTITEM>
+	<LISTITEM>
+	  <PARA>Do not run Apache as "nobody".  This will require very lax permissions in your Bugzilla directories.
+	  Run it, instead, as a user with a name, set via your httpd.conf file.</PARA>
+	</LISTITEM>
+	<LISTITEM>
+	  <PARA>
+	    Ensure you have adequate access controls for the $BUGZILLA_HOME/data/ and
+	    $BUGZILLA_HOME/shadow/ directories, as well as the $BUGZILLA_HOME/localconfig file.
+	    The localconfig file stores your "bugs" user password,
+	    which would be terrible to have in the hands
+	    of a criminal.  Also some files under $BUGZILLA_HOME/data/ store sensitive information, and
+	    $BUGZILLA_HOME/shadow/ stores bug information for faster retrieval.  If you fail to secure
+	    these directories and this file, you will expose bug information to those who may not
+	    be allowed to see it.
+	  </PARA>
+	  <PARA>
+	    On Apache, you can use .htaccess files to protect access to these directories, as outlined
+	    in <ULINK URL="http://bugzilla.mozilla.org/show_bug.cgi?id=57161">Bug 57161</ULINK> for the
+	    localconfig file, and <ULINK URL="http://bugzilla.mozilla.org/show_bug.cgi?id=65572">
+	    Bug 65572</ULINK> for adequate protection in your data/ and shadow/ directories.
+	  </PARA>
+	  <PARA>
+	    Note the instructions which follow are Apache-specific.  If you use IIS, Netscape, or other
+	    non-Apache web servers, please consult your system documentation for how to secure these
+	    files from being transmitted to curious users.
+	  </PARA>
+	  <PARA>
+	    Place the following text into a file named ".htaccess", readable by your web server,
+	    in your $BUGZILLA_HOME/data directory.
+	    <LITERALLAYOUT>
+	      &lt;Files comments&gt;
+	      allow from all
+	      &lt;/Files&gt;
+	      deny from all
+	    </LITERALLAYOUT>
+	  </PARA>
+	  <PARA>
+	    Place the following text into a file named ".htaccess", readable by your web server,
+	    in your $BUGZILLA_HOME/ directory.
+	    <LITERALLAYOUT>
+	      &lt;Files localconfig&gt;
+	      deny from all
+	      &lt;/Files&gt;
+	      allow from all
+	    </LITERALLAYOUT>
+	  </PARA>
+	  <PARA>
+	    Place the following text into a file named ".htaccess", readable by your web server,
+	    in your $BUGZILLA_HOME/shadow directory.
+	    <LITERALLAYOUT>
+	      deny from all
+	    </LITERALLAYOUT>
+	  </PARA>
+	</LISTITEM>
+      </ORDEREDLIST>
+    </PARA>
+  </SECTION>
+</CHAPTER>
+
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-namecase-general:t
+sgml-general-insert-case:upper
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
diff --git a/docs/sgml/conventions.sgml b/docs/sgml/conventions.sgml
new file mode 100644
index 000000000..66f72303c
--- /dev/null
+++ b/docs/sgml/conventions.sgml
@@ -0,0 +1,111 @@
+<!-- <!DOCTYPE section PUBLIC "-//OASIS//DTD DocBook V4.1//EN"> -->
+
+<section id="conventions">
+  <title>Document Conventions</title>
+  
+  <indexterm zone="conventions">
+    <primary>conventions</primary>
+  </indexterm>
+  
+  <para>
+    This document uses the following conventions
+  </para>
+  
+  <informaltable frame="none">
+    <tgroup cols="2">
+      <thead>
+        <row>
+          <entry>Descriptions</entry>
+          <entry>Appearance</entry>
+        </row>
+      </thead>
+      <tbody>
+        <row>
+          <entry>Warnings</entry>
+          <entry><caution>
+              <para>Warnings.</para>
+            </caution></entry>
+        </row>
+        <row>
+          <entry>Hint</entry>
+          <entry><tip>
+              <para>Hint.</para>
+            </tip></entry>
+        </row>
+        <row>
+          <entry>Notes</entry>
+          <entry><note>
+              <para>Note.</para>
+            </note></entry>
+        </row>
+        <row>
+          <entry>Information requiring special attention</entry>
+          <entry><warning>
+              <para>Warning.</para>
+            </warning></entry>
+        </row>
+        <row>
+          <entry>File Names</entry>
+          <entry><filename>file.extension</filename></entry>
+        </row>
+        <row>
+          <entry>Directory Names</entry>
+          <entry><filename class="directory">directory</filename></entry>
+        </row>
+        <row>
+          <entry>Commands to be typed</entry>
+          <entry><command>command</command></entry>
+        </row>
+        <row>
+          <entry>Applications Names</entry>
+          <entry><application>application</application></entry>
+        </row>
+        <row>
+          <entry><foreignphrase>Prompt</foreignphrase> of users command under bash shell</entry>
+          <entry>bash$</entry>
+        </row>
+        <row>
+          <entry><foreignphrase>Prompt</foreignphrase> of root users command under bash shell</entry>
+          <entry>bash#</entry>
+        </row>
+	<row>
+	  <entry><foreignphrase>Prompt</foreignphrase> of user command under tcsh shell</entry>
+	  <entry>tcsh$</entry>
+	</row>
+        <row>
+          <entry>Environment Variables</entry>
+          <entry><envar>VARIABLE</envar></entry>
+        </row>
+        <row>
+          <entry>Emphasized word</entry>
+          <entry><emphasis>word</emphasis></entry>
+        </row>
+        <row>
+          <entry>Code Example</entry>
+          <entry><programlisting><sgmltag class="starttag">para</sgmltag>Beginning and end of paragraph<sgmltag class="endtag">para</sgmltag></programlisting></entry> 
+        </row>
+      </tbody>
+    </tgroup>
+  </informaltable>
+  
+</section>
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-namecase-general:t
+sgml-general-insert-case:upper
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
+
+
+
diff --git a/docs/sgml/database.sgml b/docs/sgml/database.sgml
new file mode 100644
index 000000000..eced31c52
--- /dev/null
+++ b/docs/sgml/database.sgml
@@ -0,0 +1,635 @@
+<!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
+
+<APPENDIX id="database">
+
+<TITLE>The Bugzilla Database</TITLE>
+<NOTE>
+<PARA>This document really needs to be updated with more fleshed out information about primary keys, interrelationships, and maybe some nifty tables to document dependencies.  Any takers?</PARA>
+</NOTE>
+  <SECTION id="dbschema">
+    <TITLE>Database Schema Chart</TITLE>
+    <PARA>
+      <MEDIAOBJECT>
+	<IMAGEOBJECT>
+	  <IMAGEDATA FILEREF="dbschema.jpg" FORMAT="jpg">
+	</IMAGEOBJECT>
+
+	<TEXTOBJECT>
+	  <PHRASE>Database Relationships</PHRASE>
+	</TEXTOBJECT>
+
+	<CAPTION>
+	  <PARA>Bugzilla database relationships chart</PARA>
+	</CAPTION>
+      </MEDIAOBJECT>
+    </PARA>
+  </SECTION>
+
+  <SECTION id="dbdoc">
+<TITLE>MySQL Bugzilla Database Introduction</TITLE>
+<LITERALLAYOUT>
+
+Contributor(s):  Matthew P. Barnson (mbarnson@excitehome.net)
+
+Last update: May 16, 2000
+
+Changes:
+Version 1.0: Initial public release (May 16, 2000)
+
+Maintainer:  Matthew P. Barnson (mbarnson@excitehome.net)
+
+
+===
+Table Of Contents
+===
+
+FOREWORD
+INTRODUCTION
+THE BASICS
+THE TABLES
+THE DETAILS
+
+
+
+===
+FOREWORD
+===
+
+  This information comes straight from my life.  I was forced to learn how
+Bugzilla organizes database because of nitpicky requests from users for tiny
+changes in wording, rather than having people re-educate themselves or
+figure out how to work our procedures around the tool.  It sucks, but it can
+and will happen to you, so learn how the schema works and deal with it when it
+comes.
+
+  I'm sorry this version is plain text.  I can whip this info out a lot faster
+if I'm not concerned about complex formatting.  I'll get it into sgml for easy
+portability as time permits.
+
+  The Bugzilla Database Schema has a home!  In addition to availability via CVS
+and released versions 2.12 and higher of Bugzilla, you can find the latest &
+greatest version of the Bugzilla Database Schema at
+http://www.trilobyte.net/barnsons/. This is a living document; please be sure
+you are up-to-date with the latest version before mirroring.
+
+  The Bugzilla Database Schema is designed to provide vital information
+regarding the structure of the MySQL database.  Where appropriate, this
+document will refer to URLs rather than including documents in their entirety
+to ensure completeness even should this paper become out of date.
+
+  This document is not maintained by Netscape or Netscape employees, so please
+do not contact them regarding errors or omissions contained herein. Please
+direct all questions, comments, updates, flames, etc. to Matthew P. Barnson
+mbarnson@excitehome.net) (barnboy or barnhome on irc.mozilla.org in
+#mozwebtools).
+
+  I'm sure I've made some glaring errors or omissions in this paper -- please
+email me corrections or post corrections to the
+netscape.public.mozilla.webtools newsgroup.
+
+
+
+===
+INTRODUCTION
+===
+
+
+
+  So, here you are with your brand-new installation of Bugzilla.  You've got
+MySQL set up, Apache working right, Perl DBI and DBD talking to the database
+flawlessly.  Maybe you've even entered a few test bugs to make sure email's
+working; people seem to be notified of new bugs and changes, and you can
+enter and edit bugs to your heart's content.  Perhaps you've gone through the
+trouble of setting up a gateway for people to submit bugs to your database via
+email, have had a few people test it, and received rave reviews from your beta
+testers.
+
+  What's the next thing you do?  Outline a training strategy for your
+development team, of course, and bring them up to speed on the new tool you've
+labored over for hours.
+
+  Your first training session starts off very well!  You have a captive
+audience which seems enraptured by the efficiency embodied in this thing called
+"Bugzilla".  You are caught up describing the nifty features, how people can
+save favorite queries in the database, set them up as headers and footers on
+their pages, customize their layouts, generate reports, track status with
+greater efficiency than ever before, leap tall buildings with a single bound
+and rescue Jane from the clutches of Certain Death!
+
+  But Certain Death speaks up -- a tiny voice, from the dark corners of the
+conference room.  "I have a concern," the voice hisses from the darkness,
+"about the use of the word 'verified'.
+
+  The room, previously filled with happy chatter, lapses into reverential
+silence as Certain Death (better known as the Vice President of Software
+Engineering) continues.  "You see, for two years we've used the word 'verified'
+to indicate that a developer or quality assurance engineer has confirmed that,
+in fact, a bug is valid. I don't want to lose two years of training to a
+new software product.  You need to change the bug status of 'verified' to
+'approved' as soon as possible. To avoid confusion, of course."
+
+  Oh no!  Terror strikes your heart, as you find yourself mumbling "yes, yes, I
+don't think that would be a problem," You review the changes with Certain
+Death, and continue to jabber on, "no, it's not too big a change. I mean, we
+have the source code, right? You know, 'Use the Source, Luke' and all that...
+no problem," All the while you quiver inside like a beached jellyfish bubbling,
+burbling, and boiling on a hot Jamaican sand dune...
+
+  Thus begins your adventure into the heart of Bugzilla.  You've been forced
+to learn about non-portable enum() fields, varchar columns, and tinyint
+definitions. The Adventure Awaits You!
+
+
+
+===
+The Basics
+===
+
+  If you were like me, at this point you're totally clueless about the
+internals of MySQL, and if it weren't for this executive order from the Vice
+President you couldn't care less about the difference between a "bigint" and a
+"tinyint" entry in MySQL.  I'd refer you first to the MySQL documentation,
+available at http://www.mysql.com/doc.html, but that's mostly a confusing
+morass of high-level database jargon.  Here are the basics you need to know
+about the database to proceed:
+
+1.  To connect to your database, type "mysql -u root" at the command prompt as
+any user. If this works without asking you for a password, SHAME ON YOU!  You
+should have locked your security down like the README told you to.  You can
+find details on locking down your database in the Bugzilla FAQ in this
+directory (under "Security"), or more robust security generalities in the
+MySQL searchable documentation at
+http://www.mysql.com/php/manual.php3?section=Privilege_system .
+
+2.  You should now be at a prompt that looks like this:
+
+mysql>
+	
+	At the prompt, if "bugs" is the name of your Bugzilla database, type:
+	
+mysql> use bugs;
+	
+	(don't forget the ";" at the end of each line, or you'll be kicking yourself
+all the way through this documentation)
+  Young Grasshopper, you are now ready for the unveiling of the Bugzilla
+database, in the next section...
+
+
+
+===
+THE TABLES
+===
+
+  Imagine your MySQL database as a series of spreadsheets, and you won't be too
+far off.  If you use this command:
+
+mysql> show tables from bugs;
+	
+	you'll be able to see all the "spreadsheets" (tables) in your database.  Cool,
+huh?  It's kinda' like a filesystem, only much faster and more robust.  Come
+on, I'll show you more!
+
+  From the command issued above, you should now have some output that looks
+like this:
+
++-------------------+
+| Tables in bugs    |
++-------------------+
+| attachments       |
+| bugs              |
+| bugs_activity     |
+| cc                |
+| components        |
+| dependencies      |
+| fielddefs         |
+| groups            |
+| keyworddefs       |
+| keywords          |
+| logincookies      |
+| longdescs         |
+| milestones        |
+| namedqueries      |
+| products          |
+| profiles          |
+| profiles_activity |
+| shadowlog         |
+| versions          |
+| votes             |
+| watch             |
++-------------------+
+
+
+          If it doesn't look quite the same, that probably means it's time to
+update this documentation :)
+
+  Here's an overview of what each table does.  Most columns in each table have
+descriptive names that make it fairly trivial to figure out their jobs.
+
+attachments: This table stores all attachments to bugs.  It tends to be your
+largest table, yet also generally has the fewest entries because file
+attachments are so (relatively) large.
+
+bugs:  This is the core of your system.  The bugs table stores most of the
+current information about a bug, with the exception of the info stored in the
+other tables.
+
+bugs_activity:  This stores information regarding what changes are made to bugs
+when -- a history file.
+
+cc:  This tiny table simply stores all the CC information for any bug which has
+any entries in the CC field of the bug.  Note that, like most other tables in
+Bugzilla, it does not refer to users by their user names, but by their unique
+userid, stored as a primary key in the profiles table.
+
+components: This stores the programs and components (or products and
+components, in newer Bugzilla parlance) for Bugzilla.  Curiously, the "program"
+(product) field is the full name of the product, rather than some other unique
+identifier, like bug_id and user_id are elsewhere in the database.
+
+dependencies: Stores data about those cool dependency trees.
+
+fielddefs:  A nifty table that defines other tables.  For instance, when you
+submit a form that changes the value of "AssignedTo" this table allows
+translation to the actual field name "assigned_to" for entry into MySQL.
+
+groups:  defines bitmasks for groups.  A bitmask is a number that can uniquely
+identify group memberships.  For instance, say the group that is allowed to
+tweak parameters is assigned a value of "1", the group that is allowed to edit
+users is assigned a "2", and the group that is allowed to create new groups is
+assigned the bitmask of "4".  By uniquely combining the group bitmasks (much
+like the chmod command in UNIX,) you can identify a user is allowed to tweak
+parameters and create groups, but not edit users, by giving him a bitmask of
+"5", or a user allowed to edit users and create groups, but not tweak
+parameters, by giving him a bitmask of "6" Simple, huh?
+  If this makes no sense to you, try this at the mysql prompt:
+mysql> select * from groups;
+  You'll see the list, it makes much more sense that way.
+
+keyworddefs:  Definitions of keywords to be used
+
+keywords: Unlike what you'd think, this table holds which keywords are
+associated with which bug id's.
+
+logincookies: This stores every login cookie ever assigned to you for every
+machine you've ever logged into Bugzilla from.  Curiously, it never does any
+housecleaning -- I see cookies in this file I've not used for months.  However,
+since Bugzilla never expires your cookie (for convenience' sake), it makes
+sense.
+
+longdescs:  The meat of bugzilla -- here is where all user comments are stored!
+You've only got 2^24 bytes per comment (it's a mediumtext field), so speak
+sparingly -- that's only the amount of space the Old Testament from the Bible
+would take (uncompressed, 16 megabytes).  Each comment is keyed to the
+bug_id to which it's attached, so the order is necessarily chronological, for
+comments are played back in the order in which they are received.
+
+milestones:  Interesting that milestones are associated with a specific product
+in this table, but Bugzilla does not yet support differing milestones by
+product through the standard configuration interfaces.
+
+namedqueries:  This is where everybody stores their "custom queries".  Very
+cool feature; it beats the tar out of having to bookmark each cool query you
+construct.
+
+products:  What products you have, whether new bug entries are allowed for the
+product, what milestone you're working toward on that product, votes, etc.  It
+will be nice when the components table supports these same features, so you
+could close a particular component for bug entry without having to close an
+entire product...
+
+profiles:  Ahh, so you were wondering where your precious user information was
+stored?  Here it is!  With the passwords in plain text for all to see! (but
+sshh... don't tell your users!)
+
+profiles_activity:  Need to know who did what when to who's profile?  This'll
+tell you, it's a pretty complete history.
+
+shadowlog:  I could be mistaken here, but I believe this table tells you when
+your shadow database is updated and what commands were used to update it.  We
+don't use a shadow database at our site yet, so it's pretty empty for us.
+
+versions:  Version information for every product
+
+votes:  Who voted for what when
+
+watch:  Who (according to userid) is watching who's bugs (according to their
+userid).
+
+
+===
+THE DETAILS
+===
+
+  Ahh, so you're wondering just what to do with the information above?  At the
+mysql prompt, you can view any information about the columns in a table with
+this command (where "table" is the name of the table you wish to view):
+
+mysql> show columns from table;
+
+  You can also view all the data in a table with this command:
+
+mysql> select * from table;
+
+  -- note: this is a very bad idea to do on, for instance, the "bugs" table if
+you have 50,000 bugs.  You'll be sitting there a while until you ctrl-c or
+50,000 bugs play across your screen.
+
+  You can limit the display from above a little with the command, where
+"column" is the name of the column for which you wish to restrict information:
+
+mysql> select * from table where (column = "some info");
+
+  -- or the reverse of this
+
+mysql> select * from table where (column != "some info");
+
+  Let's take our example from the introduction, and assume you need to change
+the word "verified" to "approved" in the resolution field.  We know from the
+above information that the resolution is likely to be stored in the "bugs"
+table. Note we'll need to change a little perl code as well as this database
+change, but I won't plunge into that in this document. Let's verify the
+information is stored in the "bugs" table:
+
+mysql> show columns from bugs
+
+  (exceedingly long output truncated here)
+| bug_status| enum('UNCONFIRMED','NEW','ASSIGNED','REOPENED','RESOLVED','VERIFIED','CLOSED')||MUL | UNCONFIRMED||
+
+  Sorry about that long line.  We see from this that the "bug status" column is
+an "enum field", which is a MySQL peculiarity where a string type field can
+only have certain types of entries.  While I think this is very cool, it's not
+standard SQL.  Anyway, we need to add the possible enum field entry
+'APPROVED' by altering the "bugs" table.
+
+mysql> ALTER table bugs CHANGE bug_status bug_status
+    -> enum("UNCONFIRMED", "NEW", "ASSIGNED", "REOPENED", "RESOLVED",
+    -> "VERIFIED", "APPROVED", "CLOSED") not null;
+
+    (note we can take three lines or more -- whatever you put in before the
+semicolon is evaluated as a single expression)
+
+Now if you do this:
+
+mysql> show columns from bugs;
+
+  you'll see that the bug_status field has an extra "APPROVED" enum that's
+available!  Cool thing, too, is that this is reflected on your query page as
+well -- you can query by the new status.  But how's it fit into the existing
+scheme of things?
+  Looks like you need to go back and look for instances of the word "verified"
+in the perl code for Bugzilla -- wherever you find "verified", change it to
+"approved" and you're in business (make sure that's a case-insensitive search).
+Although you can query by the enum field, you can't give something a status
+of "APPROVED" until you make the perl changes.   Note that this change I
+mentioned can also be done by editing checksetup.pl, which automates a lot of
+this.  But you need to know this stuff anyway, right?
+
+  I hope this database tutorial has been useful for you.  If you have comments
+to add, questions, concerns, etc. please direct them to
+mbarnson@excitehome.net.  Please direct flames to /dev/null :)  Have a nice
+day!
+
+
+
+===
+LINKS
+===
+
+Great MySQL tutorial site:
+http://www.devshed.com/Server_Side/MySQL/
+
+    </LITERALLAYOUT>
+  </SECTION>
+
+  <SECTION id="granttables">
+    <TITLE>MySQL Permissions & Grant Tables</TITLE>
+
+    <NOTE>
+      <PARA>The following portion of documentation comes from my answer to an old discussion of Keystone,
+	a cool product that does trouble-ticket tracking for IT departments.  I wrote this post to the 
+	Keystone support group regarding MySQL grant table permissions, and how to use them effectively.
+	It is badly in need of updating, as I believe MySQL has added a field or two to the grant tables 
+	since this time, but it serves as a decent introduction and troubleshooting document for grant
+	table issues.  I used Keynote to track my troubles until I discovered Bugzilla,
+	which gave me a whole new set of troubles to work on : )</PARA>
+    </NOTE>
+
+    <LITERALLAYOUT>
+From matt_barnson@singletrac.com Wed Jul  7 09:00:07 1999
+Date: Mon, 1 Mar 1999 21:37:04 -0700 
+From: Matthew Barnson matt_barnson@singletrac.com
+To: keystone-users@homeport.org
+Subject: [keystone-users] Grant Tables FAQ
+
+    [The following text is in the "iso-8859-1" character set]
+    [Your display is set for the "US-ASCII" character set]
+    [Some characters may be displayed incorrectly]
+
+Maybe we can include this rambling message in the Keystone FAQ?  It gets
+asked a lot, and the only option current listed in the FAQ is
+"--skip-grant-tables".
+
+Really, you can't go wrong by reading section 6 of the MySQL manual, at
+http://www.mysql.com/Manual/manual.html.  I am sure their description is
+better than mine.
+
+MySQL runs fine without permissions set up correctly if you run the mysql
+daemon with the "--skip-grant-tables" option.  Running this way denies
+access to nobody.  Unfortunately, unless you've got yourself firewalled it
+also opens the potential for abuse if someone knows you're running it.
+
+Additionally, the default permissions for MySQL allow anyone at localhost
+access to the database if the database name begins with "test_" or is named
+"test" (i.e. "test_keystone").  You can change the name of your database in
+the keystone.conf file ($sys_dbname).  This is the way I am doing it for
+some of my databases, and it works fine.
+
+The methods described below assume you're running MySQL on the same box as
+your webserver, and that you don't mind if your $sys_dbuser for Keystone has
+superuser access.  See near the bottom of this message for a description of
+what each field does.
+
+Method #1:
+
+1.  cd /var/lib
+	#location where you'll want to run /usr/bin/mysql_install_db shell
+script from to get it to work.
+
+2.  ln -s mysql data  
+	# soft links the "mysql" directory to "data", which is what
+mysql_install_db expects.  Alternately, you can edit mysql_install_db and
+change all the "./data" references to "./mysql".
+
+3.  Edit /usr/bin/mysql_install_db with your favorite text editor (vi,
+emacs, jot, pico, etc.)
+A)  Copy the "INSERT INTO db VALUES
+('%','test\_%','','Y','Y','Y','Y','Y','Y');" and paste it immediately after
+itself.  Chage the 'test\_%' value to 'keystone', or the value of
+$sys_dbname in keystone.conf.
+B)  If you are running your keystone database with any user, you'll need to
+copy the "INSERT INTO user VALUES
+('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');" line after
+itself and change 'root' to the name of the keystone database user
+($sys_dbuser) in keystone.conf.
+
+	# adds entries to the script to create grant tables for specific
+hosts and users.  The user you set up has super-user access ($sys_dbuser) --
+you may or may not want this.  The layout of mysql_install_db is really very
+uncomplicated.
+
+4.  /usr/bin/mysqladmin shutdown
+	# ya gotta shut it down before you can reinstall the grant tables!
+
+5.  rm -i /var/lib/mysql/mysql/*.IS?' and answer 'Y' to the deletion
+questions.
+	# nuke your current grant tables.  This WILL NOT delete any other
+databases than your grant tables.
+
+6.  /usr/bin/mysql_install_db
+	# run the script you just edited to install your new grant tables.
+
+7.  mysqladmin -u root password (new_password)  
+	# change the root MySQL password, or else anyone on localhost can
+login to MySQL as root and make changes.  You can skip this step if you want
+keystone to connect as root with no password.
+
+8.  mysqladmin -u (webserver_user_name) password (new_password)  
+	# change the password of the $sys_dbuser.  Note that you will need
+to change the password in the keystone.conf file as well in $sys_dbpasswd,
+and if your permissions are set up incorrectly anybody can type the URL to
+your keystone.conf file and get the password.  Not that this will help them
+much if your permissions are set to @localhost.
+
+
+
+Method #2:  easier, but a pain reproducing if you have to delete your grant
+tables.  This is the "recommended" method for altering grant tables in
+MySQL.  I don't use it because I like the other way :)
+
+shell> mysql --user=root keystone
+
+mysql> GRANT
+SELECT,INSERT,UPDATE,DELETE,INDEX,ALTER,CREATE,DROP,RELOAD,SHUTDOWN,PROCESS,
+FILE,
+           ON keystone.*
+           TO <$sys_dbuser name>@localhost
+           IDENTIFIED BY '(password)'
+	     WITH GRANT OPTION;
+
+OR
+
+mysql> GRANT ALL PRIVELEGES 
+		ON keystone.*
+		TO <$sys_dbuser name>@localhost
+		IDENTIFIED BY '(password)'
+		WITH GRANT OPTION;
+
+	# this grants the required permissions to the keystone ($sys_dbuser)
+account defined in keystone.conf.  However, if you are runnning many
+different MySQL-based apps, as we are, it's generally better to edit the
+mysql_install_db script to be able to quickly reproduce your permissions
+structure again.  Note that the FILE privelege and WITH GRANT OPTION may not
+be in your best interest to include.
+
+
+GRANT TABLE FIELDS EXPLANATION:
+Quick syntax summary:  "%" in MySQL is a wildcard.  I.E., if you are
+defining your DB table and in the 'host' field and enter '%', that means
+that any host can access that database.  Of course, that host must also have
+a valid db user in order to do anything useful.  'db'=name of database.  In
+our case, it should be "keystone".  "user" should be your "$sys_dbuser"
+defined in keystone.conf.  Note that you CANNOT add or change a password by
+using the "INSERT INTO db (X)" command -- you must change it with the mysql
+-u command as defined above.  Passwords are stored encrypted in the MySQL
+database, and if you try to enter it directly into the table they will not
+match.
+
+TABLE:  USER.  Everything after "password" is a privelege granted (Y/N).
+This table controls individual user global access rights.
+
+'host','user','password','select','insert','update','delete','index','alter'
+,'create','drop','grant','reload','shutdown','process','file'
+
+TABLE:  DB.  This controls access of USERS to databases.
+
+'host','db','user','select','insert','update','delete','index','alter','crea
+te','drop','grant'
+
+TABLE:  HOST.  This controls which HOSTS are allowed what global access
+rights.  Note that the HOST table, USER table, and DB table are very closely
+connected -- if an authorized USER attempts an SQL request from an
+unauthorized HOST, she's denied.  If a request from an authorized HOST is
+not an authorized USER, it is denied.  If a globally authorized USER does
+not have rights to a certain DB, she's denied.  Get the picture?
+
+'host','db','select','insert','update','delete','index','alter','create','dr
+op','grant'
+
+
+You should now have a working knowledge of MySQL grant tables.  If there is
+anything I've left out of this answer that you feel is pertinent, or if my
+instructions don't work for you, please let me know and I'll re-post this
+letter again, corrected.  I threw it together one night out of exasperation
+for all the newbies who don't know squat about MySQL yet, so it is almost
+guaranteed to have errors.
+
+Once again, you can't go wrong by reading section 6 of the MySQL manual.  It
+is more detailed than I!
+http://www.mysql.com/Manual/manual.html.
+
+----------------------------------------------------------------------------
+10/12/2000
+Matthew sent in some mail with updated contact information:
+NEW CONTACT INFORMATION: 
+
+                        ------------------------ 
+                        Matthew P. Barnson 
+                        Manager, Systems Administration 
+                        Excite@Home Business Applications 
+                        mbarnson@excitehome.net 
+                        (801)234-8300 
+
+
+    </LITERALLAYOUT>
+  </SECTION>
+  <SECTION id="cleanupwork">
+    <TITLE>Cleaning up after mucking with Bugzilla</TITLE>
+    <LITERALLAYOUT>
+Contributed by Eric Hanson:
+There are several things, and one trick.  There is a small tiny piece of
+documentation I saw once that said something very important.
+1)  After pretty much any manual working of the Mysql db, you must
+delete a file in the bugzilla directory: data/versioncache
+Versioncache basically is a way to speed up bugzilla (from what I
+understand).  It stores a lot of commonly used information.  However,
+this file is refreshed every so often (I can't remember the time
+interval though).  So eventually all changes do propogate out, so you
+may see stuff suddenly working.
+2)  Assuming that failed, you will also have to check something with the
+checksetup.pl file.  It actually is run twice.  The first time it
+creates the file: localconfig.  You can modify localconfig, (or not if
+you are doing bug_status stuff) or you should delete localconfig and
+rerun your modified checksetup.pl.  Since I don't actually see anything
+in localconfig pertaining to bug_status, this point is mainly a FYI.
+    </LITERALLAYOUT>
+  </SECTION>
+
+</APPENDIX>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-namecase-general:t
+sgml-general-insert-case:upper
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
diff --git a/docs/sgml/dbschema.jpg b/docs/sgml/dbschema.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..17e2422e58a7f4ef2680cde4c8b89fdeb351e2a6
GIT binary patch
literal 220048
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
UljnG$OJf1wq%MsG{QqwP0Pqk@W&i*H

literal 0
HcmV?d00001

diff --git a/docs/sgml/faq.sgml b/docs/sgml/faq.sgml
new file mode 100644
index 000000000..b7ca03201
--- /dev/null
+++ b/docs/sgml/faq.sgml
@@ -0,0 +1,1880 @@
+<!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
+
+<appendix id="faq">
+  <title>The Bugzilla FAQ</title>
+
+  <qandaset>
+
+
+    <qandadiv id="faq_general">
+      <title>General Questions</title>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    Where can I find information about Bugzilla?</para>
+	</question>
+	<answer>
+	  <para>
+	    You can stay up-to-date with the latest Bugzilla
+	    information at <ulink url="http://www.mozilla.org/projects/bugzilla/">
+	    http://www.mozilla.org/projects/bugzilla/</ulink>
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    What license is Bugzilla distributed under?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Bugzilla is covered by the Mozilla Public License.
+	    See details at <ulink url="http://www.mozilla.org/MPL/">
+	    http://www.mozilla.org/MPL/</ulink>
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    How do I get commercial support for Bugzilla?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    <ulink url="http://www.collab.net/">www.collab.net</ulink> offers
+	    Bugzilla as part of their standard offering to large projects.
+	    They do have some minimum fees that are pretty hefty, and generally
+	    aren't interested in small projects.
+	  </para>
+	  <para>
+	    There are several experienced
+	    Bugzilla hackers on the mailing list/newsgroup who are willing
+	    to whore themselves out for generous compensation.
+	    Try sending a message to the mailing list asking for a volunteer.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    What major companies or projects are currently using Bugzilla
+	    for bug-tracking?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    There are <emphasis>dozens</emphasis> of major comapanies with public
+	    Bugzilla sites to track bugs in their products.  A few include:
+	    <simplelist>
+	      <member>Netscape/AOL</member>
+	      <member>Mozilla.org</member>
+	      <member>AtHome Corporation</member>
+	      <member>Red Hat Software</member>
+	      <member>Loki Entertainment Software</member>
+	      <member>SuSe Corp</member>
+	      <member>The Horde Project</member>
+	      <member>The Eazel Project</member>
+	      <member>AbiSource</member>
+	      <member>Real Time Enterprises, Inc</member>
+	      <member>Eggheads.org</member>
+	      <member>Strata Software</member>
+	      <member>RockLinux</member>
+	      <member>Creative Labs (makers of SoundBlaster)</member>
+	      <member>The Apache Foundation</member>
+	      <member>The Gnome Foundation</member>
+	      <member>Linux-Mandrake</member>
+	    </simplelist>
+	  </para>
+	  <para>
+	    Suffice to say, there are more than enough huge projects using Bugzilla
+	    that we can safely say it's extremely popular.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    Who maintains Bugzilla?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    There are many, many contributors from around the world maintaining Bugzilla.
+	    The designated "Maintainer" is Tara Hernandez, with QA support by Matthew Tuck.
+	    Dan Mosedale and Dawn Endico are employees of Mozilla.org responsible for the
+	    installation of Bugzilla there, and are very frequent code contributors.
+	    Terry Weissman originally ported Bugzilla, but "these days, Terry just hangs around
+	    and heckles."  The rest of us are mostly transient developers; Bugzilla suits
+	    our needs, and we contribute code as we have needs for updates.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    How does Bugzilla stack up against other bug-tracking databases?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    A year has gone by, and I <emphasis>still</emphasis> can't find any head-to-head
+	    comparisons of Bugzilla against other defect-tracking software.  However, from my
+	    personal experience with other bug-trackers, Bugzilla offers
+	    superior performance on commodity hardware, better price (free!), more developer-
+	    friendly features (such as stored queries, email integration, and platform
+	    independence), improved scalability, open source code, greater flexibility,
+	    and superior ease-of-use.
+	  </para>
+	  <para>
+	    If you happen to be a commercial Bugzilla vendor, please step forward with a rebuttal
+	    so I can include it in the FAQ.  We're not in pursuit of Bugzilla ueber alles;
+	    we simply love having a powerful, open-source tool to get our jobs done.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    How do I change my user name in Bugzilla?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    You can't.  However, the administrative account can, by simply opening
+	    your user account in editusers.cgi and changing the login name.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    Why doesn't Bugzilla offer this or that feature or compatability
+	    with this other tracking software?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    It may be that the support has not been built yet, or that you
+	    have not yet found it.  Bugzilla is making tremendous strides in
+	    usability, customizability, scalability, and user interface.  It
+	    is widely considered the most complete and popular open-source
+	    bug-tracking software in existence.
+	  </para>
+	  <para>
+	    That doesn't mean it can't use improvement!
+	    You can help the project along by either hacking a patch yourself
+	    that supports the functionality you require, or else submitting a
+	    "Request for Enhancement" (RFE) using the bug submission interface
+	    at <ulink url="http://bugzilla.mozilla.org/">bugzilla.mozilla.org</ulink>.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    Why MySQL?  I'm interested in seeing Bugzilla run on
+	    Oracle/Sybase/Msql/PostgreSQL/MSSQL?
+	  </para>
+	</question>
+	<answer>
+	  <para>Terry Weissman answers,
+	  <blockquote>
+	    <para>
+	      You're not the only one. But <emphasis>I</emphasis> am not very interested. I'm not
+	      a real SQL or database person. I just wanted to make a useful tool,
+	      and build it on top of free software. So, I picked MySQL, and
+	      learned SQL by staring at the MySQL manual and some code lying
+	      around here, and
+	      wrote Bugzilla. I didn't know that Enum's were non-standard SQL.
+	      I'm not sure if I would have cared, but I didn't even know. So, to
+	      me, things are "portable" because it uses MySQL, and MySQL is
+	      portable enough. I fully understand (now) that people want to be
+	      portable to other databases, but that's never been a real concern
+	      of mine.
+	    </para>
+	  </blockquote>
+	  </para>
+	  <para>
+	    Things aren't quite that grim these days, however.  Terry pretty much
+	    sums up much of the thinking many of us have for Bugzilla, but there
+	    is light on the horizon for database-independence!  Here are some options:
+	  </para>
+	  <simplelist>
+	    <member>
+	      <emphasis><ulink url="http://bugzilla.redhat.com/">Red Hat Bugzilla</ulink></emphasis>:
+	      Runs a modified Bugzilla 2.8 atop an Oracle database.
+	    </member>
+	    <member>
+	      <emphasis><ulink url="http://sourceforge.net/projects/interzilla">Interzilla</ulink></emphasis>:
+	      A project to run Bugzilla on Interbase.  No code released yet, however.
+	    </member>
+	    <member>
+	      <emphasis>Bugzilla 3.0</emphasis>: One of the primary stated goals
+	      is multiple database support.
+	    </member>
+	  </simplelist>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    Why do the scripts say "/usr/bonsaitools/bin/perl" instead of
+	    "/usr/bin/perl" or something else?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	     Mozilla.org uses /usr/bonsaitools/bin/perl. The prime rule in making
+	    submissions is "don't break bugzilla.mozilla.org". If it breaks it, your
+	    patch will be reverted faster than you can do a diff.
+	  </para>
+	  <para>
+	    Here's Terry Weissman's comment, for some historical context:
+	    <blockquote>
+	      <para>
+		[This was] purely my own convention. I wanted a place to put a version of
+		Perl and other tools that was strictly under my control for the
+		various webtools, and not subject to anyone else. Edit it to point
+		to whatever you like.
+	      </para>
+	      <note>
+		<para>
+		  We always recommend that, if possible, you keep the path
+		  as /usr/bonsaitools/bin/perl, and simply add a /usr/bonsaitools
+		  and /usr/bonsaitools/bin directory, then symlink your version
+		  of perl to /usr/bonsaitools/bin/perl.  This will make upgrading
+		  your Bugzilla much easier in the future.
+		</para>
+		<para>
+		  Obviously, if you do not have root access to your Bugzilla
+		  box, our suggestion is irrelevant.
+		</para>
+	      </note>
+	    </blockquote>
+	  </para>
+	</answer>
+      </qandaentry>
+
+    </qandadiv>
+
+
+    <qandadiv id="faq_redhat">
+      <title>Red Hat Bugzilla</title>
+      <para>
+	<note>
+	  <para>
+	    <emphasis>This section is no longer up-to-date.</emphasis>
+	    Please see the section on "Red Hat Bugzilla" under "Variants" in The Bugzilla Guide.
+	  </para>
+	</note>
+      </para>
+      <qandaentry>
+	<question>
+	  <para>
+	    What about Red Hat Bugzilla?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Red Hat Bugzilla is arguably more user-friendly, customizable, and scalable
+	    than stock Bugzilla. Check it out at
+	    http://bugzilla.redhat.com and the sources at ftp://people.redhat.com/dkl/.
+	    They've set their Bugzilla up to work with Oracle out of the box.
+	    Note that Redhat Bugzilla is based upon the 2.8 Bugzilla tree;
+	    Bugzilla has made some tremendous advances since the 2.8 release.
+	    Why not download both Bugzillas to check out the differences for
+	    yourself?
+	  </para>
+	  <para>
+	    Dave Lawrence, the original Red Hat Bugzilla maintainer, mentions:
+	    <blockquote>
+	      <para>
+		Somebody needs to take the ball and run with it.  I'm the only
+		maintainer and am very pressed for time.
+	      </para>
+	    </blockquote>
+	    If you, or someone you know, has the time and expertise to do the integration
+	    work so main-tree Bugzilla 2.12 and higher integrates the Red
+	    Hat Bugzilla Oracle modifications, please donate your
+	    time to supporting the Bugzilla project.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    What are the primary benefits of Red Hat Bugzilla?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    <emphasis>Dave Lawrence</emphasis>:
+	    <blockquote>
+	      <para>
+		For the record, we are not using any template type implementation for
+		the cosmetic changes maded to Bugzilla.  It is just alot of html changes
+		in the code itself.  I admit I may have gotten a little carried away with it
+		but the corporate types asked for a more standardized interface to match up
+		with other projects relating to Red Hat web sites.  A lot of other web based
+		internal tools I am working on also look like Bugzilla.
+	      </para>
+	      <para>
+		I do want to land the changes that I have made to Bugzilla but I may
+		have to back out a good deal and make a different version of Red Hat's
+		Bugzilla for checking in to CVS. Especially the cosmetic changes because it
+		seems they may not fit the general public.  I will do that as soon as I can.
+		I also still do my regular QA responsibilities along with Bugzilla so time
+		is difficult sometimes to come by.
+	      </para>
+	      <para>
+		There are also a good deal of other changes that were requested by
+		management for things like support contracts and different permission
+		groups for making bugs private. Here is a short list of the major
+		changes that have been made:
+	      </para>
+	      <orderedlist>
+		<listitem>
+		  <para>
+		    No enum types. All old enum types are now separate smaller tables.
+		  </para>
+		</listitem>
+		<listitem>
+		  <para>
+		    No bit wise operations. Not all databases support this so they were
+		    changed to a more generic way of doing this task
+		  </para>
+		</listitem>
+		<listitem>
+		  <para>
+		    Bug reports can only be altered by the reporter, assignee, or a
+		    privileged bugzilla user. The rest of the world can see the bug but in
+		    a non-changeable format (unless the bug has been marked private).  They
+		    can however add comments, add and remove themselves from the CC list
+		  </para>
+		</listitem>
+		<listitem>
+		  <para>
+		    Different group scheme. Each group has an id number related to it.
+		    There is a user_group table which contains userid to groupid mappings
+		    to determine which groups each user belongs to.  Additionally there is
+		    a bug_group table that has bugid to groupid mappings to show which
+		    groups can see a particular bug. If there are no entries for a bug in
+		    this table then the bug is public.
+		  </para>
+		</listitem>
+		<listitem>
+		  <para>
+		    Product groups. product_table created to only allow certain products to
+		    be visible for certain groups in both bug entry and query. This was
+		    particulary helpful for support contracts.
+		  </para>
+		</listitem>
+		<listitem>
+		  <para>
+		    Of course many (too many) changes to Bugzilla code itself to allow use
+		    with Oracle and still allow operation with Mysql if so desired.
+		    Currently if you use Mysql it is set to use Mysql's old permission
+		    scheme to keep breakage to a minimum. Hopefully one day this will
+		    standardize on one style which may of course be something completely
+		    different.
+		  </para>
+		</listitem>
+		<listitem>
+		  <para>
+		    Uses Text::Template perl module for rendering of the dynamic HTML pages
+		    such as enter_bug.cgi, query.cgi, bug_form.pl, and for the header and
+		    footer parts of the page. This allows the html to be separate from the
+		    perl code for customizing the look and feel of the page to one's
+		    preference.
+		  </para>
+		</listitem>
+		<listitem>
+		  <para>
+		    There are many other smaller changes. There is also a port to Oracle
+		    that I have been working on as time permits but is not completely
+		    finished but somewhat usable. I will merge it into our standard code
+		    base when it becomes production quality. Unfortunately there will have
+		    to be some conditionals in the code to make it work with other than
+		    Oracle due to some differences between Oracle and Mysql.
+		  </para>
+		</listitem>
+	      </orderedlist>
+	      <para>
+		Both the Mysql and Oracle versions of our current code base are
+		available from ftp://people.redhat.com/dkl. If Terry/Tara wants I can submit
+		patch files for all of the changes I have made and he can determine what is
+		suitable for addition to the main bugzilla cade base. But for me to commit
+		changes to the actual CVS I will need to back out alot of things that are
+		not suitable for the rest of the Bugzilla community. I am open to
+		suggestions.
+	      </para>
+	    </blockquote>
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    What's the current status of Red Hat Bugzilla?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    <note>
+	      <para>
+		This information is somewhat dated; I last updated it
+		7 June 2000.  Please see the "Variants" section of "The Bugzilla Guide"
+		for more up-to-date information regarding Red Hat Bugzilla.
+	      </para>
+	    </note>
+	    <emphasis>Dave Lawrence</emphasis>:
+	    <blockquote>
+	      <para>
+		     I suppose the current thread warrants an update on the status of
+		Oracle and bugzilla ;) We have now been running Bugzilla 2.8 on
+		Oracle for the last two days in our production environment. I
+		tried to do as much testing as possible with it before going live
+		which is some of the reason for the long delay. I did not get
+		enough feedback as I would have liked from internal developers to
+		help weed out any bugs still left so I said "Fine, i will take it
+		live and then I will get the feedback I want :)" So it is now
+		starting to stabilize and it running quite well after working
+		feverishly the last two days fixing problems as soon as they came
+		in from the outside world. The current branch in cvs is up2date if
+		anyone would like to grab it and try it out. The oracle _setup.pl
+		is broken right now due to some last minute changes but I will
+		update that soon. Therefore you would probably need to create the
+		database tables the old fashioned way using the supplied sql
+		creation scripts located in the ./oracle directory. We have heavy
+		optimizations in the database it self thanks to the in-house DBA
+		here at Red Hat so it is running quite fast. The database itself
+		is located on a dual PII450 with 1GB ram and 14 high voltage
+		differential raided scsi drives. The tables and indexes are
+		partitioned in 4 chuncks across the raided drive which is nice
+		because when ever you need to do a full table scan, it is actually
+		starting in 4 different locations on 4 different drives
+		simultaneously. And the indexes of course are on separate drives
+		from the data so that speeds things up tremendously. When  I can
+		find the time I will document all that we have done to get this
+		thing going to help others that may need it.
+	      </para>
+	      <para>
+		As Matt has mentioned it is still using out-dated code and with a
+		little help I would like to bring everything up to date for
+		eventual  incorporation with the main cvs tree. Due to other
+		duties I have with the company any help with this wiould be
+		appreciated. What we are using  now is what I call a best first
+		effort. It definitely can be improved on and may even need
+		complete rewrites in a lot of areas. A lot of changes may have to
+		be made in the way Bugzilla does things currently  to make this
+		transition to a more generic database interface.  Fortunately when
+		making the Oracle changes I made sure I didn't do  anything that I
+		would consider Oracle specific and could not be easily done with
+		other databases. Alot of the sql statements need to be broken up
+		into smaller utilities that themselves would need to make
+		decisions on what database they are using but the majority of the
+		code can be made database neutral.
+	      </para>
+	    </blockquote>
+	  </para>
+	</answer>
+      </qandaentry>
+    </qandadiv>
+
+
+    <qandadiv id="faq_loki">
+      <title>Loki Bugzilla (AKA Fenris)</title>
+      <para>
+	<note>
+	  <para>
+	    Loki's "Fenris" Bugzilla is based upon the (now ancient) Bugzilla 2.8
+	    tree, and is no longer actively maintained.
+	    It works well enough for Loki.  Additionally, the major
+	    differences in Fenris have now been integrated into
+	    the main source tree of Bugzilla, so there's not much
+	    reason to go grab the source.  I leave this section of the
+	    FAQ principally for historical interest, but unless Loki has further
+	    input into Bugzilla's future, it will be deprecated in future versions
+	    of the Guide.
+	  </para>
+	</note>
+      </para>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    What about Loki Bugzilla?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Loki Games has a customized version of Bugzilla available at
+	    http://fenris.lokigames.com.  From that page,
+	    <blockquote>
+	      <para>
+		     You may have noticed that Fenris is a fork from Bugzilla-- our
+		patches weren't suitable for integration --and a few people have
+		expressed interest in the code. Fenris has one major  improvement
+		over Bugzilla, and that is individual comments are not appended
+		onto a string blob, they are stored as a record in a separate
+		table. This allows you to, for instance, separate comments out
+		according to privilege levels in case your bug database could
+		contain sensitive information not for public eyes. We also provide
+		things like email hiding to protect user's privacy, additional
+		fields such as 'user_affected' in case someone enters someone
+		else's bug, comment editing and deletion, and more conditional
+		system variables than Bugzilla does (turn off attachments,
+		qacontact, etc.).
+	      </para>
+	    </blockquote>
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    Who maintains Fenris (Loki Bugzilla) now?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Raphael Barrerro &lt;raistlin@lokigames.com&gt;.
+	    Michael Vance created the initial fork, but no longer
+	    maintains the project.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    
+	  </para>
+	</question>
+      </qandaentry>
+    </qandadiv>
+
+    <qandadiv id="faq_phb">
+      <title>Pointy-Haired-Boss Questions</title>
+      <para>
+	<note>
+	  <para>
+	    The title of this section doesn't mean you're a PHB -- it just means
+	    you probably HAVE a PHB who wants to know this :)
+	  </para>
+	</note>
+      </para>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    Is Bugzilla web-based or do you have to have specific software or
+	    specific operating system on your machine?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    It is web and e-mail based.  You can edit bugs by sending specially
+	    formatted email to a properly configured Bugzilla, or control via the web.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    Has anyone you know of already done any Bugzilla integration with
+	    Perforce (SCM software)?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Yes!  You can find more information elsewhere in "The Bugzilla
+	    Guide" in the "Integration with Third-Party Products" section.
+	    The section on Perforce isn't very large, but as the maintainer
+	    of the Guide is charged with Perforce/Bugzilla integration by
+	    his company, you can expect this section to grow.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    Does Bugzilla allow the user to track multiple projects?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Absolutely!  You can track up to a "soft-limit" of around
+	    64 individual "Products", that can each be composed of as
+	    many "Components" as you want.  Check the Administration
+	    section of the Bugzilla Guide for more information regarding
+	    setting up Products and Components.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    If I am on many projects, and search for all bugs assigned to me, will
+	    Bugzilla list them for me and allow me to sort by project, severity etc?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Yes.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    Does Bugzilla allow attachments (text, screenshots, urls etc)? If yes,
+	    are there any that are NOT allowed?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Yes.  There are many specific MIME-types that are pre-defined by Bugzilla,
+	    but you may specify any arbitrary MIME-type you need when you
+	    upload the file.  Since all attachments are stored in the database,
+	    however, I recommend storing large binary attachments elsewhere
+	    in the web server's file system and providing a hyperlink
+	    as a comment, or in the provided "URL" field in the bug report.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    Does Bugzilla allow us to define our own priorities and levels? Do we
+	    have complete freedom to change the labels of fields and format of them, and
+	    the choice of acceptable values?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Yes.  However, modifying some fields, notably those related to bug
+	    progression states, also require adjusting the program logic to
+	    compensate for the change.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    Does Bugzilla provide any reporting features, metrics, graphs, etc? You
+	    know, the type of stuff that management likes to see. :)
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Yes.  Look at <ulink url="http://bugzilla.mozilla.org/reports.cgi">
+	    http://bugzilla.mozilla.org/reports.cgi</ulink> for basic reporting
+	    facilities.
+	  </para>
+	  <para>
+	    For more advanced reporting, I recommend hooking up a professional
+	    reporting package, such as Crystal Reports, and use ODBC to access
+	    the MySQL database.  You can do a lot through the Query page of
+	    Bugzilla as well, but right now Advanced Reporting is much
+	    better accomplished through third-party utilities that can
+	    interface with the database directly.
+	  </para>
+	  <para>
+	    Advanced Reporting is a Bugzilla 3.X proposed feature.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    Is there email notification and if so, what do you see when you get an
+	    email? Do you see bug number and title or is it only the number?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Email notification is user-configurable.  The bug id and Topic
+	    of the bug report accompany each email notification, along with
+	    a list of the changes made.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    Can email notification be set up to send to multiple
+	    people, some on the To List, CC List, BCC List etc?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Yes.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    If there is email notification, do users have to have any particular
+	    type of email application?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Bugzilla email is sent in plain text, the most compatible mail format
+	    on the planet.
+	    <note>
+	      <para>
+		If you decide to use the bugzilla_email integration features
+		to allow Bugzilla to record responses to mail with the associated bug,
+		you may need to caution your users to set their mailer to "respond
+		to messages in the format in which they were sent".  For security reasons
+		Bugzilla ignores HTML tags in comments, and if a user sends HTML-based
+		email into Bugzilla the resulting comment looks downright awful.
+	      </para>
+	    </note>
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	     If I just wanted to track certain bugs, as they go through life, can I
+	    set it up to alert me via email whenever that bug changes, whether it be
+	    owner, status or description etc.?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Yes.  Place yourself in the "cc" field of the bug you wish to monitor.
+	    Then change your "Notify me of changes to" field in the Email Settings
+	    tab of the User Preferences screen in Bugzilla to the "Only those
+	    bugs which I am listed on the CC line" option.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    Does Bugzilla allow data to be imported and exported? If I had outsiders
+	    write up a bug report using a MS Word bug template, could that template be
+	    imported into "matching" fields? If I wanted to take the results of a query
+	    and export that data to MS Excel, could I do that?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Mozilla allows data export through a custom DTD in XML format.
+	    It does not, however, export to specific formats other than the
+	    XML Mozilla DTD.  Importing the data into Excel or any other application
+	    is left as an exercise for the reader.
+	  </para>
+	  <para>
+	    If you create import filters to other applications from Mozilla's XML,
+	    please submit your modifications for inclusion in future Bugzilla
+	    distributions.
+	  </para>
+	  <para>
+	    As for data import, any application can send data to Bugzilla through
+	    the HTTP protocol, or through Mozilla's XML API.  However, it seems
+	    kind of silly to put another front-end in front of Bugzilla;
+	    it makes more sense to create a simplified bug submission form in
+	    HTML.  You can find an excellent example at
+	    <ulink url="http://www.mozilla.org/quality/help/bugzilla-helper.html">
+	    http://www.mozilla.org/quality/help/bugzilla-helper.html</ulink>
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    Does Bugzilla allow fields to be added, changed or deleted? If I want to
+	    customize the bug submission form to meet our needs, can I do that using our
+	    terminology?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Yes.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    Has anyone converted Bugzilla to another language to be used in other
+	    countries? Is it localizable?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Currently, no.  Internationalization support for Perl did not
+	    exist in a robust fashion until the recent release of version 5.6.0;
+	    Bugzilla is, and likely will remain (until 3.X) completely
+	    non-localized.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    Can a user create and save reports? Can they do this in Word format?
+	    Excel format?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Yes.  No.  No.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    Can a user re-run a report with a new project, same query?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Yes.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    Can a user modify an existing report and then save it into another name?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    You can save an unlimited number of queries in Bugzilla.  You are free
+	    to modify them and rename them to your heart's desire.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    Does Bugzilla have the ability to search by word, phrase, compound
+	    search?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    You have no idea.  Bugzilla's query interface, particularly with the
+	    advanced Boolean operators, is incredibly versatile.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    Can the admin person establish separate group and individual user
+	    privileges?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Yes.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	     Does Bugzilla provide record locking when there is simultaneous access
+	    to the same bug? Does the second person get a notice that the bug is in use
+	    or how are they notified?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Bugzilla does not lock records.  It provides mid-air collision detection,
+	    and offers the offending user a choice of options to deal with the conflict.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    Are there any backup features provided?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    MySQL, the database back-end for Bugzilla, allows hot-backup of data.
+	    You can find strategies for dealing with backup considerations
+	    at <ulink url="http://www.mysql.com/doc/B/a/Backup.html">
+	    http://www.mysql.com/doc/B/a/Backup.html</ulink>
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    Can users be on the system while a backup is in progress?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Yes.  However, commits to the database must wait
+	    until the tables are unlocked.  Bugzilla databases are typically
+	    very small, and backups routinely take less than a minute.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    What type of human resources are needed to be on staff to install and
+	    maintain Bugzilla? Specifically, what type of skills does the person need to
+	    have? I need to find out if we were to go with Bugzilla, what types of
+	    individuals would we need to hire and how much would that cost vs buying an
+	    "Out-of-the-Box" solution.
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    If Bugzilla is set up correctly from the start, continuing maintenance needs
+	    are minimal and can be completed by unskilled labor.  Things like rotate
+	    backup tapes and check log files for the word "error".
+	  </para>
+	  <para>
+	    Commercial Bug-tracking software typically costs somewhere upwards
+	    of $20,000 or more for 5-10 floating licenses.  Bugzilla consultation
+	    is available from skilled members of the newsgroup.
+	  </para>
+	  <para>
+	    As an example, as of this writing I typically charge
+	     $115 for the first hour, and $89 each hour thereafter
+	    for consulting work.  It takes me three to five hours to make Bugzilla
+	    happy on a Development installation of Linux-Mandrake.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    What time frame are we looking at if we decide to hire people to install
+	    and maintain the Bugzilla? Is this something that takes hours or weeks to
+	    install and a couple of hours per week to maintain and customize or is this
+	    a multi-week install process, plus a full time job for 1 person, 2 people,
+	    etc?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    It all depends on your level of commitment.  Someone with much Bugzilla
+	    experience can get you up and running in less than a day, and
+	    your Bugzilla install can run untended for years.  If your
+	    Bugzilla strategy is critical to your business workflow, hire somebody
+	    with reasonable UNIX or Perl skills to handle your process management and
+	    bug-tracking maintenance & customization.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    Is there any licensing fee or other fees for using Bugzilla? Any
+	    out-of-pocket cost other than the bodies needed as identified above?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    No.  MySQL asks, if you find their product valuable, that you purchase
+	    a support contract from them that suits your needs.
+	  </para>
+	</answer>
+      </qandaentry>
+    </qandadiv>
+
+    <qandadiv id="faq_install">
+      <title>Bugzilla Installation</title>
+      <qandaentry>
+	<question>
+	  <para>
+	    How do I download and install Bugzilla?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Check <ulink url="http://www.mozilla.org/projects/bugzilla/">
+	    http://www.mozilla.org/projects/bugzilla/</ulink> for details.
+	    Once you download it, untar it, read the README and 
+	    the Bugzilla Guide.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    How do I install Bugzilla on Windows NT?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Installation on Windows NT has its own section in
+	    "The Bugzilla Guide".
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    Is there an easy way to change the Bugzilla cookie name?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    At present, no.
+	  </para>
+	</answer>
+      </qandaentry>
+
+    </qandadiv>
+
+    <qandadiv id="faq_security">
+      <title>Bugzilla Security</title>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    How do I completely disable MySQL security if it's giving me problems
+	    (I've followed the instructions in the README!)?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Run mysql like this: "mysqld --skip-grant-tables".  Please remember <emphasis>this
+	    makes mysql as secure as taping a $100 to the floor of a football stadium
+	    bathroom for safekeeping.</emphasis>  Please read the Security section of the
+	    Administration chapter of "The Bugzilla Guide" before proceeding.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    Are there any security problems with Bugzilla?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    The Bugzilla code has not undergone a complete security audit.
+	    It is recommended that you closely examine permissions on your Bugzilla
+	    installation, and follow the recommended security guidelines found
+	    in the README and in The Bugzilla Guide.
+	  </para>
+	</answer>
+      </qandaentry>
+
+
+      <qandaentry>
+	<question>
+	  <para>
+	    I've implemented the security fixes mentioned in Chris Yeh's security
+	    advisory of 5/10/2000 advising not to run MySQL as root, and am running into
+	    problems with MySQL no longer working correctly.
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    This is a common problem, related to running out of file descriptors.
+	    Simply add "ulimit -n unlimited" to the script which starts
+	    mysqld.
+	  </para>
+	</answer>
+      </qandaentry>
+    </qandadiv>
+
+    <qandadiv id="faq_email">
+      <title>Bugzilla Email</title>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    I have a user who doesn't want to receive any more email from Bugzilla.
+	    How do I stop it entirely for this user?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    With the email changes to 2.12, the user should be able to set
+	    this in user email preferences.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    I'm evaluating/testing Bugzilla, and don't want it to send email to
+	    anyone but me. How do I do it?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Edit the param for the mail text. Replace "To:" with "X-Real-To:",
+	    replace "Cc:" with "X-Real-CC:", and add a "To: (myemailaddress)".
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    I want whineatnews.pl to whine at something more, or other than, only new
+	    bugs. How do I do it?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Try Klaas Freitag's excellent patch for "whineatassigned" functionality.
+	    You can find it at<ulink url=" http://bugzilla.mozilla.org/show_bug.cgi?id=6679">
+	      http://bugzilla.mozilla.org/show_bug.cgi?id=6679</ulink>. This
+	    patch is against an older version of Bugzilla, so you must apply
+	    the diffs manually.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    I don't like/want to use Procmail to hand mail off to bug_email.pl.
+	    What alternatives do I have?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    You can call bug_email.pl directly from your aliases file, with
+	    an entry like this:
+	    <blockquote>
+	      <para>
+		bugzilla-daemon: "|/usr/local/bin/bugzilla/contrib/bug_email.pl"
+	      </para>
+	    </blockquote>
+	    However, this is fairly nasty and subject to problems; you also
+	    need to set up your smrsh (sendmail restricted shell) to allow
+	    it.  In a pinch, though, it can work.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    How do I set up the email interface to submit/change bugs via email?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    You can find an updated README.mailif file in the contrib/ directory
+	    of your Bugzilla distribution that walks you through the setup.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    Email takes FOREVER to reach me from bugzilla -- it's extremely slow.
+	    What gives?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    If you are using an alternate Mail Transport Agent (MTA other than
+	    sendmail), make sure the options given in the "processmail" script for all
+	    instances of "sendmail" are correct for your MTA. If you are using Sendmail,
+	    you may wish to delete the "-ODeliveryMode=deferred" option in the
+	    "processmail" script for every invocation of "sendmail". (Be sure and leave
+	    the "-t" option, though!)
+	  </para>
+	  <para>
+	    A better alternative is to change the "-O" option to
+	    "-ODeliveryMode=background".  This prevents Sendmail from hanging your
+	    Bugzilla Perl processes if the domain to which it must send mail
+	    is unavailable.
+	  </para>
+	  <para>
+	    This is now a configurable parameter called "sendmailnow", available
+	    from editparams.cgi.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	     How come email never reaches me from bugzilla changes?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Double-check that you have not turned off email in your user preferences.
+	    Confirm that Bugzilla is able to send email by visiting the "Log In"
+	    link of your Bugzilla installation and clicking the "Email me a password"
+	    button after entering your email address.
+	  </para>
+	  <para>
+	    If you never receive mail from Bugzilla, chances you do not have
+	    sendmail in "/usr/lib/sendmail".  Ensure sendmail lives in, or is symlinked
+	    to, "/usr/lib/sendmail".
+	  </para>
+	</answer>
+      </qandaentry>
+    </qandadiv>
+
+    <qandadiv id="faq_db">
+      <title>Bugzilla Database</title>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    I've heard Bugzilla can be used with Oracle?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Red Hat Bugzilla, mentioned above, works with Oracle.  The current version
+	    from Mozilla.org does not have this capability.  Unfortunately, though
+	    you will sacrifice a lot of the really great features available in
+	    Bugzilla 2.10 and 2.12 if you go with the 2.8-based Redhat version.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    Bugs are missing from queries, but exist in the database (and I can pull
+	    them up by specifying the bug ID). What's wrong?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	     You've almost certainly enabled the "shadow database", but for some
+	    reason it hasn't been updated for all your bugs. This is the database
+	    against which queries are run, so that really complex or slow queries won't
+	    lock up portions of the database for other users. You can turn off the
+	    shadow database in editparams.cgi. If you wish to continue using the shadow
+	    database, then as your "bugs" user run "./syncshadowdb -syncall" from the
+	    command line in the bugzilla installation directory to recreate your shadow
+	    database. After it finishes, be sure to check the params and make sure that
+	    "queryagainstshadowdb" is still turned on. The syncshadowdb program turns it
+	    off if it was on, and is supposed to turn it back on when completed; that
+	    way, if it crashes in the middle of recreating the database, it will stay
+	    off forever until someone turns it back on by hand. Apparently, it doesn't
+	    always do that yet.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    I think my database might be corrupted, or contain invalid entries. What
+	    do I do?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Run the "sanity check" utility (./sanitycheck.cgi in the bugzilla_home
+	    directory) to see! If it all comes back, you're OK.  If it doesn't come back
+	    OK (i.e. any red letters), there are certain things Bugzilla can recover
+	    from and certain things it can't.  If it can't auto-recover, I hope you're
+	    familiar with mysqladmin commands or have installed another way to manage
+	    your database...
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    I want to manually edit some entries in my database. How?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	     There is no facility in Bugzilla itself to do this. It's also generally
+	    not a smart thing to do if you don't know exactly what you're doing.
+	    However, if you understand SQL you can use the mysqladmin utility to
+	    manually insert, delete, and modify table information. Personally, I
+	    use "phpMyAdmin". You have to compile a PHP module with MySQL
+	    support to make it work, but it's very clean and easy to use.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    I try to add myself as a user, but Bugzilla always tells me my password is wrong.
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Certain version of MySQL (notably, 3.23.29 and 3.23.30) accidentally disabled
+	    the "crypt()" function.  This prevented MySQL from storing encrypted passwords.
+	    Upgrade to the "3.23 stable" version of MySQL and you should be good to go.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    I think I've set up MySQL permissions correctly, but bugzilla still can't
+	    connect.
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Try running MySQL from its binary: "mysqld --skip-grant-tables". This
+	    will allow you to completely rule out grant tables as the cause of your
+	    frustration. However, I do not recommend you run it this way on a regular
+	    basis, unless you really want your web site defaced and your machine
+	    cracked.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    How do I synchronize bug information among multiple different Bugzilla
+	    databases?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Well, you can synchronize or you can move bugs.  Synchronization will
+	    only work one way -- you can create a read-only copy of the database
+	    at one site, and have it regularly updated at intervals from the main
+	    database.
+	  </para>
+	  <para>
+	    MySQL has some synchronization features builtin to the latest releases.
+	    It would be great if someone looked into the possibilities there
+	    and provided a report to the newsgroup on how to effectively
+	    synchronize two Bugzilla installations.
+	  </para>
+	  <para>
+	    If you simply need to transfer bugs from one Bugzilla to another,
+	    checkout the "move.pl" script in the Bugzilla distribution.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    Why do I get bizarre errors when trying to submit data, particularly problems
+	    with "groupset"?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    If you're sure your MySQL parameters are correct, you might want turn
+	    "strictvaluechecks" OFF in editparams.cgi.  If you have "usebugsentry" set
+	    "On", you also cannot submit a bug as readable by more than one group with
+	    "strictvaluechecks" ON.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    How come even after I delete bugs, the long descriptions show up?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Delete everything from $BUZILLA_HOME/shadow.  Bugzilla creates shadow
+	    files there, with each filename corresponding to a
+	    bug number.  Also be sure to run syncshadowdb to make sure, if you are using
+	    a shadow database, that the shadow database is current.
+	  </para>
+	</answer>
+      </qandaentry>
+
+    </qandadiv>
+
+    <qandadiv id="faq_nt">
+      <title>Bugzilla and Win32</title>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    What is the easiest way to run Bugzilla on Win32 (Win98+/NT/2K)?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Remove Windows. Install Linux. Install Bugzilla.
+	    The boss will never know the difference.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    Is there a "Bundle::Bugzilla" equivalent for Win32?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Not currently.  Bundle::Bugzilla enormously simplifies Bugzilla
+	    installation on UNIX systems.  If someone can volunteer to
+	    create a suitable PPM bundle for Win32, it would be appreciated.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    CGI's are failing with a "something.cgi is not a valid Windows NT
+	    application" error. Why?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Depending on what Web server you are using, you will have to configure
+	    the Web server to treat *.cgi files as CGI scripts. In IIS, you do this by
+	    adding *.cgi to the App Mappings with the &lt;path&gt;\perl.exe %s %s as the
+	    executable.
+	  </para>
+	  <para>
+	    Microsoft has some advice on this matter, as well:
+	    <blockquote>
+	      <para>
+		"Set application mappings. In the ISM, map the extension for the script
+		file(s) to the executable for the script interpreter. For example, you might
+		map the extension .py to Python.exe, the executable for the Python script
+		interpreter. Note For the ActiveState Perl script interpreter, the extension
+		.pl is associated with PerlIS.dll by default. If you want to change the
+		association of .pl to perl.exe, you need to change the application mapping.
+		In the mapping, you must add two percent (%) characters to the end of the
+		pathname for perl.exe, as shown in this example: c:\perl\bin\perl.exe %s %s"
+	      </para>
+	    </blockquote>
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    Can I have some general instructions on how to make Bugzilla on Win32 work?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    The following couple entries are deprecated in favor of the Windows installation
+	    instructions available in the "Administration" portion of "The Bugzilla Guide".
+	    However, they are provided here for historical interest and insight.
+	    <literallayout>
+  1. #!C:/perl/bin/perl had to be added to every perl file.
+  2. Converted to Net::SMTP to handle mail messages instead of
+     /usr/bin/sendmail.
+  3. The crypt function isn't available on Windows NT (at least none that I
+     am aware), so I made encrypted passwords = plaintext passwords.
+  4. The system call to diff had to be changed to the Cygwin diff.
+  5. This was just to get a demo running under NT, it seems to be working
+     good, and I have inserted almost 100 bugs from another bug tracking
+     system. Since this work was done just to get an in-house demo, I am NOT
+     planning on making a patch for submission to Bugzilla. If you would
+     like a zip file, let me know.
+
+Q: Hmm, couldn't figure it out from the general instructions above.  How
+about step-by-step?
+A: Sure! Here ya go!
+
+  1. Install IIS 4.0 from the NT Option Pack #4.
+  2. Download and install Active Perl.
+  3. Install the Windows GNU tools from Cygwin. Make sure to add the bin
+     directory to your system path. (Everyone should have these, whether
+     they decide to use Bugzilla or not. :-) )
+  4. Download relevant packages from ActiveState at
+     http://www.activestate.com/packages/zips/. + DBD-Mysql.zip
+  5. Extract each zip file with WinZip, and install each ppd file using the
+     notation: ppm install &lt;module&gt;.ppd
+  6. Install Mysql.  *Note: If you move the default install from c:\mysql,
+     you must add the appropriate startup parameters to the NT service. (ex.
+     -b e:\\programs\\mysql)
+  7. Download any Mysql client. http://www.mysql.com/download_win.html
+  8. Setup MySql. (These are the commands that I used.)
+
+          I. Cleanup default database settings.
+           C:\mysql\bin\mysql -u root mysql
+           mysql> DELETE FROM user WHERE Host='localhost' AND User='';
+           mysql> quit
+          C:\mysql\bin\mysqladmin reload
+
+          II. Set password for root.
+           C:\mysql\bin\mysql -u root mysql
+           mysql> UPDATE user SET Password=PASSWORD('new_password')
+           WHERE user='root';
+           mysql> FLUSH PRIVILEGES;
+           mysql> quit
+           C:\mysql\bin\mysqladmin -u root reload
+
+          III. Create bugs user.
+           C:\mysql\bin\mysql -u root -p
+           mysql> insert into user (host,user,password)
+          values('localhost','bugs','');
+           mysql> quit
+           C:\mysql\bin\mysqladmin -u root reload
+
+          IV. Create the bugs database.
+           C:\mysql\bin\mysql -u root -p
+           mysql> create database bugs;
+
+          V. Give the bugs user access to the bugs database.
+           mysql> insert into db
+          (host,db,user,select_priv,insert_priv,update_priv,delete_priv,create_priv,drop_priv)
+          values('localhost','bugs','bugs','Y','Y','Y','Y','Y','N')
+           mysql> quit
+           C:\mysql\bin\mysqladmin -u root reload
+  9. Run the table scripts to setup the bugs database.
+ 10. Change CGI.pm to use the following regular expression because of
+     differing backslashes in NT versus UNIX.
+        o $0 =~ m:[^\\]*$:;
+ 11. Had to make the crypt password = plain text password in the database.
+     (Thanks to Andrew Lahser" &lt;andrew_lahser@merck.com&gt;" on this one.) The
+     files that I changed were:
+        o globals.pl
+        o CGI.pl
+        o alternately, you can try commenting all references to 'crypt'
+          string and replace them with similar lines but without encrypt()
+          or crypr() functions insida all files.
+ 12. Replaced sendmail with Windmail. Basically, you have to come up with a
+     sendmail substitute for NT. Someone said that they used a Perl module
+     (Net::SMTP), but I was trying to save time and do as little Perl coding
+     as possible.
+ 13. Added "perl" to the beginning of all Perl system calls that use a perl
+     script as an argument and renamed processmail to processmail.pl.
+ 14. In processmail.pl, I added binmode(HANDLE) before all read() calls. I'm
+     not sure about this one, but the read() under NT wasn't counting the
+     EOLs without the binary read."
+	    </literallayout>
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    I'm having trouble with the perl modules for NT not being able to talk to
+	    to the database.
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Your modules may be outdated or inaccurate. Try:
+	    <orderedlist>
+	      <listitem>
+		<para>
+		  Hitting http://www.activestate.com/ActivePerl
+		</para>
+	      </listitem>
+	      <listitem>
+		<para>
+		  Download ActivePerl
+		</para>
+	      </listitem>
+	      <listitem>
+		<para>
+		  Go to your prompt
+		</para>
+	      </listitem>
+	      <listitem>
+		<para>
+		  Type 'ppm'
+		</para>
+	      </listitem>
+	      <listitem>
+		<para>
+		  <prompt>PPM></prompt> <command>install DBI DBD-mysql GD</command>
+		</para>
+	      </listitem>
+	    </orderedlist>
+	    I reckon TimeDate and Data::Dumper come with the activeperl. You can check
+	    the ActiveState site for packages for installation through PPM.
+	    <ulink url=" http://www.activestate.com/Packages/">
+	      http://www.activestate.com/Packages/</ulink>
+	  </para>
+	</answer>
+      </qandaentry>
+
+    </qandadiv>
+
+    <qandadiv id="faq_use">
+      <title>Bugzilla Usage</title>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    The query page is very confusing.  Isn't there a simpler way to query?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    We are developing in that direction.  You can follow progress on this
+	    at <ulink url="http://bugzilla.mozilla.org/show_bug.cgi?id=16775">
+	      http://bugzilla.mozilla.org/show_bug.cgi?id=16775</ulink>.  Some functionality
+	    is available in Bugzilla 2.12, and is available as "quicksearch.html"
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    I'm confused by the behavior of the "accept" button in the Show Bug form.
+	    Why doesn't it assign the bug to me when I accept it?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    The current behavior is acceptable to bugzilla.mozilla.org and most
+	    users.  I personally don't like it.  You have your choice of patches
+	    to change this behavior, however.
+	    <simplelist>
+	      <member><ulink url="http://bugzilla.mozilla.org/showattachment.cgi?attach_id=8029">
+		Add a "and accept bug" radio button</ulink></member>
+	      <member><ulink url="http://bugzilla.mozilla.org/showattachment.cgi?attach_id=8153">
+		"Accept" button automatically assigns to you</ulink></member>
+	    </simplelist>
+	    Note that these patches are somewhat dated.  You will need to do the find
+	    and replace manually to apply them.  They are very small, though.  It is easy.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    I can't upload anything into the database via the "Create Attachment"
+	    link.  What am I doing wrong?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    The most likely cause is a very old browser or a browser that is
+	    incompatible with file upload via POST.  Download the latest Netscape,
+	    Microsoft, or Mozilla browser to handle uploads correctly.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    Email submissions to Bugzilla that have attachments end up asking me to
+	    save it as a "cgi" file.
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Yup.  Just rename it once you download it, or save it under a different
+	    filename.  This will not be fixed anytime too soon, because it would
+	    cripple some other functionality.
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    How do I change a keyword in Bugzilla, once some bugs are using it?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    In the Bugzilla administrator UI, edit the keyword and it will let you
+	    replace the old keyword name with a new one.  This will cause a problem
+	    with the keyword cache.  Run sanitycheck.cgi to fix it.
+	  </para>
+	</answer>
+      </qandaentry>
+
+    </qandadiv>
+
+    <qandadiv id="faq_hacking">
+      <title>Bugzilla Hacking</title>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    What bugs are in Bugzilla right now?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    Try <ulink url="http://bugzilla.mozilla.org/buglist.cgi?bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;product=Webtools&amp;component=Bugzilla">
+	    this link</ulink> to view current bugs or requests for
+	    enhancement for Bugzilla.
+	  </para>
+	  <para>
+	    You can view bugs marked for 2.14 release
+	    <ulink url="http://bugzilla.mozilla.org/buglist.cgi?product=Webtools&amp;component=Bugzilla&amp;target_milestone=Bugzilla+2.14">here</ulink>.
+	    This list includes bugs for the 2.14 release that have already
+	    been fixed and checked into CVS.  Please consult the
+	    <ulink url="http://www.mozilla.org/projects/bugzilla/">
+	      Bugzilla Project Page</ulink> for details on how to
+	    check current sources out of CVS so you can have these
+	    bug fixes early!
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    How can I change the default priority to a null value?  For instance, have the default
+	    priority be "---" instead of "P2"?
+	  </para>
+	</question>
+	<answer>
+	  <para>
+	    This is well-documented here: <ulink url="http://bugzilla.mozilla.org/show_bug.cgi?id=49862">
+	    http://bugzilla.mozilla.org/show_bug.cgi?id=49862</ulink>.  Ultimately, it's as easy
+	    as adding the "---" priority field to your localconfig file in the appropriate area,
+	    re-running checksetup.pl, and then changing the default priority in your browser using
+	    "editparams.cgi".  Hmm, now that I think about it, that is kind of a klunky way to handle
+	    it, but for now it's what we have!  Although the bug has been closed "resolved wontfix",
+	    there may be a better way to handle this...
+	  </para>
+	</answer>
+      </qandaentry>
+
+      <qandaentry>
+	<question>
+	  <para>
+	    What's the best way to submit patches?  What guidelines should I follow?
+	  </para>
+	</question>
+	<answer>
+	  <blockquote>
+	    <orderedlist>
+	      <listitem>
+		<para>
+		  Enter a bug into bugzilla.mozilla.org for the "Webtools" product,
+		  "Bugzilla" component.
+		</para>
+	      </listitem>
+	      <listitem>
+		<para>
+		  Upload your patch as a unified DIFF (having used "diff -u" against
+		  the <emphasis>current sources</emphasis> checked out of CVS),
+		  or new source file by clicking
+		  "Create a new attachment" link on the bug page you've just created, and
+		  include any descriptions of database changes you may make, into the bug
+		  ID you submitted in step #1.  Be sure and click the "Patch" radio
+		  button to indicate the text you are sending is a patch!
+		</para>
+	      </listitem>
+	      <listitem>
+		<para>
+		  Announce your patch and the associated URL
+		  (http://bugzilla.mozilla.org/show_bug.cgi?id=XXXX) for discussion in
+		  the newsgroup (netscape.public.mozilla.webtools).  You'll get a really
+		  good, fairly immediate reaction to the implications of your patch,
+		  which will also give us an idea how well-received the change would
+		  be.
+		</para>
+	      </listitem>
+	      <listitem>
+		<para>
+		  If it passes muster with minimal modification, the person to whom
+		  the bug is assigned in Bugzilla is responsible for seeing the patch
+		  is checked into CVS.
+		</para>
+	      </listitem>
+	      <listitem>
+		<para>
+		  Bask in the glory of the fact that you helped write the most successful
+		  open-source bug-tracking software on the planet :)
+		</para>
+	      </listitem>
+	    </orderedlist>
+	  </blockquote>
+	</answer>
+      </qandaentry>
+
+
+    </qandadiv>
+
+  </qandaset>
+
+</APPENDIX>
+
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-namecase-general:t
+sgml-general-insert-case:lower
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
diff --git a/docs/sgml/future.sgml b/docs/sgml/future.sgml
new file mode 100644
index 000000000..4cdf9e6f8
--- /dev/null
+++ b/docs/sgml/future.sgml
@@ -0,0 +1,328 @@
+<!-- <!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook V4.1//EN" > -->
+
+<chapter id="future">
+  <title>The Future of Bugzilla</title>
+  <synopsis>Bugzilla's Future.  Much of this is the present, now.</synopsis>
+  <section id="spamlite">
+    <title>Reducing Spam</title>
+    <para><literallayout>
+Those who use Bugzilla frequently are probably used to notification spam
+- unwanted or unnecessary notifications.  A number of proposals have
+been put forward to attempt to reduce this.
+
+1. Reduce CC Spam
+
+Some of you probably know me as that guy who CCs on heaps and heaps of
+bugs.  Just as you get a lot of CC changes from me, so do I get a lot
+from others.  Why should CC changes send out email notifications?
+
+It's not necessarily the best idea to just remove the CC spam, there are
+other issues too, like the difficulty of adding to large CC fields.
+
+For these reasons and more, an RFE for a per user "BCC" facility exists
+that people could use to silently and privately track bugs, in a similar
+way to voting today, but applying to an unlimited number of bugs.  See
+"http://bugzilla.mozilla.org/show_bug.cgi?id=7345".
+
+2. Bulk Changes
+
+You know the drill - a large milestone change, a component movement,
+whatever, and lots of notifications are generated.  If there's enough
+maybe you'll just go delete, delete, delete, whoops, there goes another
+notification that wasn't from the bulk change you missed.
+
+Shouldn't bulk changes send out one notification?  A proposal for this
+is at "http://bugzilla.mozilla.org/show_bug.cgi?id=26943".
+
+3. Configurable Notification Criteria
+
+It would be good if you could choose what you want to receive.  There
+are two parts to this.
+
+(a) Choose a selection of bugs you're interested in.  This would be
+similar to CC except you let the set be computed from selection criteria
+rather than limited to the bugs your name is on.  There is currently a
+limited version of this in the bugzilla preferences, ie "all qualifying
+bugs"/"all qualifying bugs except the ones I change"/"only those bugs
+which I am listed on the cc line".
+(b) Choose what changes will trigger a notification for the bugs you are
+watching.  With this, you could choose whether you want to receive cc,
+dependency and keyword changes, for example.
+
+Both of these proposals live at
+"http://bugzilla.mozilla.org/show_bug.cgi?id=14137".
+Note that they also live at
+"http://bugzilla.mozilla.org/show_bug.cgi?id=17464", and the change 
+has been checked in.  This is fixed with Bugzilla 2.12 and is no longer
+an issue.  Woo-Hoo!
+</literallayout></para>
+  </section>
+
+  <section id="searching">
+    <title>Better Searching</title>
+    <para><literallayout>
+Current searching tools in Bugzilla include the querying mechanism,
+special summary reports and dependency trees.  This message is about new
+facilities.
+
+1. General Summary Reports
+
+For some time now it has been apparent to me that the query bug list
+leaves a little to be desired in its linear nature.  There is a need to
+have categorised subsets, and counts of each category.  If you don't
+believe me, how about these facilities already in place or which people
+have asked for:
+
+Most Doomed Reports - Categorised On Assignee, Shows and Counts Number
+of Bugs For Each Assignee
+Bug #15806 (Most Voted For Bugs) - Categorised On Product, Shows Bugs
+Voters Most Want Fixed
+Bug #9789 (BugAThon Tracking Page) - Categorised On Developer (Subset),
+Counts Number of Bugs
+Bug #9409 and #9411 - The desire to be able to report on more subsets.
+
+Hopefully you can see the gist of what is desired here.  It's a general
+reporting mechanism.
+
+This mechanism lets you choose the subset of bugs to operate on (like
+query), let's you categorise them, possibly along with subcategories and
+counts the number of bugs within each category.  It might or might not
+show the actual bugs themselves, and it might limit the number of bugs
+within a category, or categories to report on.
+
+I'm further sure that many applications of this mechanism would only be
+recognised once it was implemented.
+
+The general summary reports bug is at
+"http://bugzilla.mozilla.org/show_bug.cgi?id=12282".
+
+2. Related Bugs
+
+It would be nice to have a field where you could enter other bugs
+related to the current bug - it would be handy for navigation and
+possibly even finding duplicates.  See
+"http://bugzilla.mozilla.org/show_bug.cgi?id=12286".
+
+3. Column Specification Support
+
+Currently query seems to get what columns to report on from whatever the
+user last used.  This doesn't work well for "prepackaged queries", where
+you followed a link.  You can probably add a column by specifying a sort
+column, but this is difficult and suboptimal.
+
+Furthermore, I find that when I want to add a column to a query, it's
+usually a one off and I would prefer it to go away for the next query. 
+Hence, it would be nice to specify the columns that appear on the query
+(and general summary report) pages.  The default query mechanism should
+be able to let you specify your default columns.
+
+This proposal lives at
+"http://bugzilla.mozilla.org/show_bug.cgi?id=12284".
+</literallayout></para>
+  </section>
+
+  <section id="trackingbugs">
+    <title>Description Flags and Tracking Bugs</title>
+    <para><literallayout>
+Since I last posted on this issue, we now have "keywords" that solve
+many of the issues of description and status whiteboard keywords.  We
+have seen a migration towards keywords, but there is still further to
+go.
+
+Description ( + Status Whiteboard ) Keywords
+--------------------------------------------
+
+Some description keywords remain.  I'd like to hear what reasons, other
+than time, there are for these staying as they are.  I'm suspecting many
+are not really being used.  Hopefully we can totally remove these
+eventually.
+
+Tracking Bugs
+-------------
+
+When I suggested keywords, I did so to get rid of tracking bugs too,
+though we've had less success on that front.
+
+There are many disadvantages to tracking bugs.
+
+- They can pollute bugs counts, and you must make sure you exclude
+them.  I believe the meta keyword might be used for this purpose.
+- They have an assignee but there is nothing to fix, and that person can
+get whined at by Bugzilla.
+- It would be better to craft your own "dependency tree" rather than
+rely on a fixed hierachy in the bug system.
+- In creating a nice little hierachy, many bugs duplicate information
+that should be available in other ways, eg
+"http://bugzilla.mozilla.org/show_bug.cgi?id=12833" which is
+about beta 1 networking issues.  These could fall behind the actual
+data.  What tracking bugs are good for, ad hoc lists, is what keywords
+are better for.
+- An automatically generated dependency structure between one "tracking
+bug" and another would be better than a manual one, since it gives exact
+rather than manually set up classifications.
+
+Probably the only feature preventing tracking bugs being replaced is the
+dependency tree.  The quintessential tracking bug seems to be bug #7229
+"chofmann's watch list", which probably has about a couple of hundred
+bugs at various levels, which allows a nice visualisation.
+
+Before keywords can replace tracking bugs better visualisation is going
+to be required.  General summary reports and dependency forests of a bug
+list ("http://bugzilla.mozilla.org/show_bug.cgi?id=12992") could both
+help, but neither solves the problem totally.  Perhaps keywords within
+keywords would help here.  In any case, I'm still thinking about this
+one.
+
+Some tracking bugs could definitely be turned into keywords immediately
+though, and I'll point the finger at
+"http://bugzilla.mozilla.org/show_bug.cgi?id=7954" here since that's
+what came to mind first.
+</literallayout></para>
+  </section>
+
+  <section id="bugprobs">
+    <title>Bug Issues</title>
+    <para><literallayout>
+1. Inline Bug Changes
+
+Why do I see so many "moving to M5" and "reassigning to blahblah"
+messages, and in other circumstances none are entered?  Why aren't these
+automatically generated?  A comment should be only necessary when there
+is something to add, and if I'm not interested in this sort of
+information, I should be able to hide it.
+
+At the moment we're in a hybrid world where we don't get everything, but
+we can't get rid of the bug change "messages" either.  Furthermore,
+"View Bug Activity" requires me to manually cross reference events on
+another page, rather than being able to visually see the chronological
+order.  Shouldn't I be able to see all the information on one page?
+
+A proposal to allow bugs to be shown either way is at
+"http://bugzilla.mozilla.org/show_bug.cgi?id=11368".
+
+2.  Hard Wrapping Comments
+
+One thing that annoys me is the fact that comments are "hard wrapped" to
+a certain column width.  This is a mistake Internet Mail and News has
+made, unlike every word processor in existence, and as a consequence,
+Usenet suffers to this day from bad software.  Why has Bugzilla repeated
+the problem?
+
+Hard wrapping to a certain column width is open to abuse (see old
+Mozilla browsers that didn't wrap properly, resulting in many ugly bug
+reports we have to read to this day), and furthermore doesn't expand to
+fill greater screen sizes.  I'm also under the impression the current
+hard wrap uses a non-standard HTML facility.  See
+"http://bugzilla.mozilla.org/show_bug.cgi?id=11901".
+
+3. REMIND and LATER Are Evil
+
+I really hate REMIND and LATER.  Not because they mean something
+won't be implemented, but because they aren't the best solutions.
+
+Why are they bad?  Well, basically because they are not resolved, yet
+they are marked as such.  Hence queries have to be well crafted to
+include them.
+
+LATER, according to Bugzilla, means it won't be done this release. 
+There is a better mechanism of doing this, that is assigning to
+nobody@mozilla.org and making the milestone blank.  It's more likely to
+appear in a casual query, and it doesn't resolve the bug.
+
+REMIND, according to Bugzilla, means it might still be implemented this
+release.  Well, why not just move it to a later milestone then?  You're
+a lot less likely to forget it.  If it's really needed, a keyword would
+be better.
+
+Some people can't use blank milestones to mean an untargetted milestone,
+since they use this to assess new bugs that have no target.  Hence, it
+would be nice to distinguish between bugs that have not yet been
+considered, and those that really are not assigned to any milestone in
+the future (assumedly beyond).
+
+All this is covered at
+"http://bugzilla.mozilla.org/show_bug.cgi?id=13534".
+
+4. Create An Enhancement Field
+
+Currently enhancement is an option in severity.  This means that
+important enhancements (like for example, POP3 support) are not properly
+distinguished as such, because they need a proper severity.  This
+dilutes the meaning of enhancement.
+
+If enhancement was separated, we could properly see what was an
+enhancement.  See "http://bugzilla.mozilla.org/show_bug.cgi?id=9412".  I
+see keywords like [RFE] and [FEATURE] that seem to be compensating for
+this problem.
+</literallayout></para>
+  </section>
+
+  <section id="dbaseintegrity">
+    <title>Database Integrity</title>
+    <para><literallayout>
+Bugzilla could be more proactive in detecting suboptimal situations and
+prevent them or whine about them.
+
+1. Bugzilla Crime #1: Marking A Bug Fixed With Unresolved Dependencies
+
+It can't be marked fixed with unresolved dependencies.  Either mark it
+INVALID (tracking bugs), fix the dependencies at the same time, or
+resolve the blockers.
+
+See "http://bugzilla.mozilla.org/show_bug.cgi?id=24496".
+
+2. Keyword Restrictions
+
+Some keywords should only apply in certain circumstances, eg beta1 =>
+Milestone <
+M14, css1 => Component = Style System are possibilities.  See
+"http://bugzilla.mozilla.org/show_bug.cgi?id=26940".
+
+3. Whine About Old Votes
+
+Old votes can just sit on resolved bugs.  This is problematic with
+duplicates especially.  Automatic transferral/removal is not
+appropriate since bugs can be reopened, but a whining solution might
+work.  See "http://bugzilla.mozilla.org/show_bug.cgi?id=27553".
+
+4. Whine And Warn About Milestone Mismatches
+
+Here's a fun one.  Bug X (M17) depends on Bug Y (M15).  Bug Y gets moved
+out to M19.  The notification to the assignee of Bug X gets ignored (of
+course) and Bug X is now due to be fixed before one of its blockers.
+
+Warnings about this when it is detected as well as whining about it in
+email would help bring these issues to the attention of people sooner.
+
+Note that this would be less of a problem if we didn't have so many
+tracking bugs since they aren't updated that often and often have this
+problem.
+
+See "http://bugzilla.mozilla.org/show_bug.cgi?id=16743".
+</literallayout></para>
+  </section>
+
+  <section id="bz30">
+    <title>Bugzilla 3.0</title>
+    <para>One day, Bugzilla 3.0 will have lots of cool stuff.</para>
+  </section>
+
+</chapter>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-namecase-general:t
+sgml-general-insert-case:lower
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
diff --git a/docs/sgml/gfdl.sgml b/docs/sgml/gfdl.sgml
new file mode 100644
index 000000000..1091631d4
--- /dev/null
+++ b/docs/sgml/gfdl.sgml
@@ -0,0 +1,468 @@
+<!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
+
+<appendix id="gfdl">
+<title>GNU Free Documentation License</title>
+<!-- - GNU Project - Free Software Foundation (FSF) -->
+<!-- LINK REV="made" HREF="mailto:webmasters@gnu.org" -->
+
+
+  <!-- sect1>
+    <title>GNU Free Documentation License</title -->
+
+    <para>Version 1.1, March 2000</para>
+
+    <blockquote>
+      <para>Copyright (C) 2000  Free Software Foundation, Inc.
+59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.</para>
+    </blockquote>
+
+  <sect1 label="0" id="gfdl_0">
+    <title>PREAMBLE</title>
+
+    <para>The purpose of this License is to make a manual, textbook,
+    or other written document "free" in the sense of freedom: to
+    assure everyone the effective freedom to copy and redistribute it,
+    with or without modifying it, either commercially or
+    noncommercially.  Secondarily, this License preserves for the
+    author and publisher a way to get credit for their work, while not
+    being considered responsible for modifications made by
+    others.</para>
+
+    <para>This License is a kind of "copyleft", which means that
+    derivative works of the document must themselves be free in the
+    same sense.  It complements the GNU General Public License, which
+    is a copyleft license designed for free software.</para>
+
+    <para>We have designed this License in order to use it for manuals
+    for free software, because free software needs free documentation:
+    a free program should come with manuals providing the same
+    freedoms that the software does.  But this License is not limited
+    to software manuals; it can be used for any textual work,
+    regardless of subject matter or whether it is published as a
+    printed book.  We recommend this License principally for works
+    whose purpose is instruction or reference.</para>
+  </sect1>
+
+  <sect1 label="1" id="gfdl_1">
+    <title>APPLICABILITY AND DEFINITIONS</title>
+
+    <para>This License applies to any manual or other work that
+    contains a notice placed by the copyright holder saying it can be
+    distributed under the terms of this License.  The "Document",
+    below, refers to any such manual or work.  Any member of the
+    public is a licensee, and is addressed as "you".</para>
+
+    <para>A "Modified Version" of the Document means any work
+    containing the Document or a portion of it, either copied
+    verbatim, or with modifications and/or translated into another
+    language.</para>
+
+    <para>A "Secondary Section" is a named appendix or a front-matter
+    section of the Document that deals exclusively with the
+    relationship of the publishers or authors of the Document to the
+    Document's overall subject (or to related matters) and contains
+    nothing that could fall directly within that overall subject.
+    (For example, if the Document is in part a textbook of
+    mathematics, a Secondary Section may not explain any mathematics.)
+    The relationship could be a matter of historical connection with
+    the subject or with related matters, or of legal, commercial,
+    philosophical, ethical or political position regarding
+    them.</para>
+
+    <para>The "Invariant Sections" are certain Secondary Sections
+    whose titles are designated, as being those of Invariant Sections,
+    in the notice that says that the Document is released under this
+    License.</para>
+
+    <para>The "Cover Texts" are certain short passages of text that
+    are listed, as Front-Cover Texts or Back-Cover Texts, in the
+    notice that says that the Document is released under this
+    License.</para>
+
+    <para>A "Transparent" copy of the Document means a
+    machine-readable copy, represented in a format whose specification
+    is available to the general public, whose contents can be viewed
+    and edited directly and straightforwardly with generic text
+    editors or (for images composed of pixels) generic paint programs
+    or (for drawings) some widely available drawing editor, and that
+    is suitable for input to text formatters or for automatic
+    translation to a variety of formats suitable for input to text
+    formatters.  A copy made in an otherwise Transparent file format
+    whose markup has been designed to thwart or discourage subsequent
+    modification by readers is not Transparent.  A copy that is not
+    "Transparent" is called "Opaque".</para>
+
+    <para>Examples of suitable formats for Transparent copies include
+    plain ASCII without markup, Texinfo input format, LaTeX input
+    format, SGML or XML using a publicly available DTD, and
+    standard-conforming simple HTML designed for human modification.
+    Opaque formats include PostScript, PDF, proprietary formats that
+    can be read and edited only by proprietary word processors, SGML
+    or XML for which the DTD and/or processing tools are not generally
+    available, and the machine-generated HTML produced by some word
+    processors for output purposes only.</para>
+
+    <para>The "Title Page" means, for a printed book, the title page
+    itself, plus such following pages as are needed to hold, legibly,
+    the material this License requires to appear in the title page.
+    For works in formats which do not have any title page as such,
+    "Title Page" means the text near the most prominent appearance of
+    the work's title, preceding the beginning of the body of the
+    text.</para>
+  </sect1>
+
+  <sect1 label="2" id="gfdl_2">
+    <title>VERBATIM COPYING</title>
+
+    <para>You may copy and distribute the Document in any medium,
+    either commercially or noncommercially, provided that this
+    License, the copyright notices, and the license notice saying this
+    License applies to the Document are reproduced in all copies, and
+    that you add no other conditions whatsoever to those of this
+    License.  You may not use technical measures to obstruct or
+    control the reading or further copying of the copies you make or
+    distribute.  However, you may accept compensation in exchange for
+    copies.  If you distribute a large enough number of copies you
+    must also follow the conditions in section 3.</para>
+
+    <para>You may also lend copies, under the same conditions stated
+    above, and you may publicly display copies.</para>
+  </sect1>
+
+  <sect1 label="3" id="gfdl_3">
+    <title>COPYING IN QUANTITY</title>
+
+    <para>If you publish printed copies of the Document numbering more
+    than 100, and the Document's license notice requires Cover Texts,
+    you must enclose the copies in covers that carry, clearly and
+    legibly, all these Cover Texts: Front-Cover Texts on the front
+    cover, and Back-Cover Texts on the back cover.  Both covers must
+    also clearly and legibly identify you as the publisher of these
+    copies.  The front cover must present the full title with all
+    words of the title equally prominent and visible.  You may add
+    other material on the covers in addition.  Copying with changes
+    limited to the covers, as long as they preserve the title of the
+    Document and satisfy these conditions, can be treated as verbatim
+    copying in other respects.</para>
+
+    <para>If the required texts for either cover are too voluminous to
+    fit legibly, you should put the first ones listed (as many as fit
+    reasonably) on the actual cover, and continue the rest onto
+    adjacent pages.</para>
+
+    <para>If you publish or distribute Opaque copies of the Document
+    numbering more than 100, you must either include a
+    machine-readable Transparent copy along with each Opaque copy, or
+    state in or with each Opaque copy a publicly-accessible
+    computer-network location containing a complete Transparent copy
+    of the Document, free of added material, which the general
+    network-using public has access to download anonymously at no
+    charge using public-standard network protocols.  If you use the
+    latter option, you must take reasonably prudent steps, when you
+    begin distribution of Opaque copies in quantity, to ensure that
+    this Transparent copy will remain thus accessible at the stated
+    location until at least one year after the last time you
+    distribute an Opaque copy (directly or through your agents or
+    retailers) of that edition to the public.</para>
+
+    <para>It is requested, but not required, that you contact the
+    authors of the Document well before redistributing any large
+    number of copies, to give them a chance to provide you with an
+    updated version of the Document.</para>
+  </sect1>
+
+  <sect1 label="4" id="gfdl_4">
+    <title>MODIFICATIONS</title>
+
+    <para>You may copy and distribute a Modified Version of the
+    Document under the conditions of sections 2 and 3 above, provided
+    that you release the Modified Version under precisely this
+    License, with the Modified Version filling the role of the
+    Document, thus licensing distribution and modification of the
+    Modified Version to whoever possesses a copy of it.  In addition,
+    you must do these things in the Modified Version:</para>
+
+    <orderedlist numeration="upperalpha">
+      <listitem><para>Use in the Title Page
+      (and on the covers, if any) a title distinct from that of the
+      Document, and from those of previous versions (which should, if
+      there were any, be listed in the History section of the
+      Document).  You may use the same title as a previous version if
+      the original publisher of that version gives permission.</para>
+      </listitem>
+
+      <listitem><para>List on the Title Page,
+      as authors, one or more persons or entities responsible for
+      authorship of the modifications in the Modified Version,
+      together with at least five of the principal authors of the
+      Document (all of its principal authors, if it has less than
+      five).</para>
+      </listitem>
+
+      <listitem><para>State on the Title page
+      the name of the publisher of the Modified Version, as the
+      publisher.</para>
+      </listitem>
+
+      <listitem><para>Preserve all the
+      copyright notices of the Document.</para>
+      </listitem>
+
+      <listitem><para>Add an appropriate
+      copyright notice for your modifications adjacent to the other
+      copyright notices.</para>
+      </listitem>
+
+      <listitem><para>Include, immediately
+      after the copyright notices, a license notice giving the public
+      permission to use the Modified Version under the terms of this
+      License, in the form shown in the Addendum below.</para>
+      </listitem>
+
+      <listitem><para>Preserve in that license
+      notice the full lists of Invariant Sections and required Cover
+      Texts given in the Document's license notice.</para>
+      </listitem>
+
+      <listitem><para>Include an unaltered
+      copy of this License.</para>
+      </listitem>
+
+      <listitem><para>Preserve the section
+      entitled "History", and its title, and add to it an item stating
+      at least the title, year, new authors, and publisher of the
+      Modified Version as given on the Title Page.  If there is no
+      section entitled "History" in the Document, create one stating
+      the title, year, authors, and publisher of the Document as given
+      on its Title Page, then add an item describing the Modified
+      Version as stated in the previous sentence.</para>
+      </listitem>
+
+      <listitem><para>Preserve the network
+      location, if any, given in the Document for public access to a
+      Transparent copy of the Document, and likewise the network
+      locations given in the Document for previous versions it was
+      based on.  These may be placed in the "History" section.  You
+      may omit a network location for a work that was published at
+      least four years before the Document itself, or if the original
+      publisher of the version it refers to gives permission.</para>
+      </listitem>
+
+      <listitem><para>In any section entitled
+      "Acknowledgements" or "Dedications", preserve the section's
+      title, and preserve in the section all the substance and tone of
+      each of the contributor acknowledgements and/or dedications
+      given therein.</para>
+      </listitem>
+
+      <listitem><para>Preserve all the
+      Invariant Sections of the Document, unaltered in their text and
+      in their titles.  Section numbers or the equivalent are not
+      considered part of the section titles.</para>
+      </listitem>
+
+      <listitem><para>Delete any section
+      entitled "Endorsements".  Such a section may not be included in
+      the Modified Version.</para>
+      </listitem>
+
+      <listitem><para>Do not retitle any
+      existing section as "Endorsements" or to conflict in title with
+      any Invariant Section.</para>
+      </listitem>
+    </orderedlist>
+    
+    <para>If the Modified Version includes new front-matter sections
+    or appendices that qualify as Secondary Sections and contain no
+    material copied from the Document, you may at your option
+    designate some or all of these sections as invariant.  To do this,
+    add their titles to the list of Invariant Sections in the Modified
+    Version's license notice.  These titles must be distinct from any
+    other section titles.</para>
+
+    <para>You may add a section entitled "Endorsements", provided it
+    contains nothing but endorsements of your Modified Version by
+    various parties--for example, statements of peer review or that
+    the text has been approved by an organization as the authoritative
+    definition of a standard.</para>
+
+    <para>You may add a passage of up to five words as a Front-Cover
+    Text, and a passage of up to 25 words as a Back-Cover Text, to the
+    end of the list of Cover Texts in the Modified Version.  Only one
+    passage of Front-Cover Text and one of Back-Cover Text may be
+    added by (or through arrangements made by) any one entity.  If the
+    Document already includes a cover text for the same cover,
+    previously added by you or by arrangement made by the same entity
+    you are acting on behalf of, you may not add another; but you may
+    replace the old one, on explicit permission from the previous
+    publisher that added the old one.</para>
+
+    <para>The author(s) and publisher(s) of the Document do not by
+    this License give permission to use their names for publicity for
+    or to assert or imply endorsement of any Modified Version.</para>
+  </sect1>
+
+  <sect1 label="5" id="gfdl_5">
+    <title>COMBINING DOCUMENTS</title>
+
+    <para>You may combine the Document with other documents released
+    under this License, under the terms defined in section 4 above for
+    modified versions, provided that you include in the combination
+    all of the Invariant Sections of all of the original documents,
+    unmodified, and list them all as Invariant Sections of your
+    combined work in its license notice.</para>
+
+    <para>The combined work need only contain one copy of this
+    License, and multiple identical Invariant Sections may be replaced
+    with a single copy.  If there are multiple Invariant Sections with
+    the same name but different contents, make the title of each such
+    section unique by adding at the end of it, in parentheses, the
+    name of the original author or publisher of that section if known,
+    or else a unique number.  Make the same adjustment to the section
+    titles in the list of Invariant Sections in the license notice of
+    the combined work.</para>
+
+    <para>In the combination, you must combine any sections entitled
+    "History" in the various original documents, forming one section
+    entitled "History"; likewise combine any sections entitled
+    "Acknowledgements", and any sections entitled "Dedications".  You
+    must delete all sections entitled "Endorsements."</para>
+  </sect1>
+
+  <sect1 label="6" id="gfdl_6">
+    <title>COLLECTIONS OF DOCUMENTS</title>
+
+    <para>You may make a collection consisting of the Document and
+    other documents released under this License, and replace the
+    individual copies of this License in the various documents with a
+    single copy that is included in the collection, provided that you
+    follow the rules of this License for verbatim copying of each of
+    the documents in all other respects.</para>
+
+    <para>You may extract a single document from such a collection,
+    and distribute it individually under this License, provided you
+    insert a copy of this License into the extracted document, and
+    follow this License in all other respects regarding verbatim
+    copying of that document.</para>
+  </sect1>
+
+  <sect1 label="7" id="gfdl_7">
+    <title>AGGREGATION WITH INDEPENDENT WORKS</title>
+    
+    <para>A compilation of the Document or its derivatives with other
+    separate and independent documents or works, in or on a volume of
+    a storage or distribution medium, does not as a whole count as a
+    Modified Version of the Document, provided no compilation
+    copyright is claimed for the compilation.  Such a compilation is
+    called an "aggregate", and this License does not apply to the
+    other self-contained works thus compiled with the Document, on
+    account of their being thus compiled, if they are not themselves
+    derivative works of the Document.</para>
+
+    <para>If the Cover Text requirement of section 3 is applicable to
+    these copies of the Document, then if the Document is less than
+    one quarter of the entire aggregate, the Document's Cover Texts
+    may be placed on covers that surround only the Document within the
+    aggregate.  Otherwise they must appear on covers around the whole
+    aggregate.</para>
+  </sect1>
+
+  <sect1 label="8" id="gfdl_8">
+    <title>TRANSLATION</title>
+
+    <para>Translation is considered a kind of modification, so you may
+    distribute translations of the Document under the terms of section
+    4.  Replacing Invariant Sections with translations requires
+    special permission from their copyright holders, but you may
+    include translations of some or all Invariant Sections in addition
+    to the original versions of these Invariant Sections.  You may
+    include a translation of this License provided that you also
+    include the original English version of this License.  In case of
+    a disagreement between the translation and the original English
+    version of this License, the original English version will
+    prevail.</para>
+  </sect1>
+
+  <sect1 label="9" id="gfdl_9">
+    <title>TERMINATION</title>
+    
+    <para>You may not copy, modify, sublicense, or distribute the
+    Document except as expressly provided for under this License.  Any
+    other attempt to copy, modify, sublicense or distribute the
+    Document is void, and will automatically terminate your rights
+    under this License.  However, parties who have received copies, or
+    rights, from you under this License will not have their licenses
+    terminated so long as such parties remain in full
+    compliance.</para>
+  </sect1>
+
+  <sect1 label="10" id="gfdl_10">
+    <title>FUTURE REVISIONS OF THIS LICENSE</title>
+
+    <para>The Free Software Foundation may publish new, revised
+    versions of the GNU Free Documentation License from time to time.
+    Such new versions will be similar in spirit to the present
+    version, but may differ in detail to address new problems or
+    concerns.  See <ulink
+    url="http://www.gnu.org/copyleft/">http://www.gnu.org/copyleft/</ulink>.</para>
+
+    <para>Each version of the License is given a distinguishing
+    version number.  If the Document specifies that a particular
+    numbered version of this License "or any later version" applies to
+    it, you have the option of following the terms and conditions
+    either of that specified version or of any later version that has
+    been published (not as a draft) by the Free Software Foundation.
+    If the Document does not specify a version number of this License,
+    you may choose any version ever published (not as a draft) by the
+    Free Software Foundation.</para>
+  </sect1>
+
+  <sect1 label="" id="gfdl_howto">
+    <title>How to use this License for your documents</title>
+
+    <para>To use this License in a document you have written, include
+    a copy of the License in the document and put the following
+    copyright and license notices just after the title page:</para>
+
+<blockquote><para>
+      Copyright (c)  YEAR  YOUR NAME.
+      Permission is granted to copy, distribute and/or modify this document
+      under the terms of the GNU Free Documentation License, Version 1.1
+      or any later version published by the Free Software Foundation;
+      with the Invariant Sections being LIST THEIR TITLES, with the
+      Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+      A copy of the license is included in the section entitled "GNU
+      Free Documentation License".
+</para></blockquote>
+
+    <para>If you have no Invariant Sections, write "with no Invariant
+    Sections" instead of saying which ones are invariant.  If you have
+    no Front-Cover Texts, write "no Front-Cover Texts" instead of
+    "Front-Cover Texts being LIST"; likewise for Back-Cover
+    Texts.</para>
+
+    <para>If your document contains nontrivial examples of program
+    code, we recommend releasing these examples in parallel under your
+    choice of free software license, such as the GNU General Public
+    License, to permit their use in free software.</para>
+  </sect1>
+
+</appendix>
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:nil
+sgml-shorttag:t
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-parent-document: ("Bugzilla-Guide.sgml" "appendix")
+sgml-exposed-tags:nil
+sgml-local-ecat-files:nil
+sgml-local-catalogs: CATALOG
+sgml-validate-command: "nsgmls -s gfdl.sgml"
+ispell-skip-sgml: t
+End:
+-->
diff --git a/docs/sgml/glossary.sgml b/docs/sgml/glossary.sgml
new file mode 100644
index 000000000..32525f737
--- /dev/null
+++ b/docs/sgml/glossary.sgml
@@ -0,0 +1,108 @@
+<!-- <!DOCTYPE glossary PUBLIC "-//OASIS//DTD DocBook V4.1//EN" > -->
+
+<glossary id="glossary">
+
+  <glossdiv id="gloss_a">
+    <title>A</title>
+    <glossentry>
+      <glossterm>There are no entries for A</glossterm>
+      <glossdef>
+	<para></para>
+      </glossdef>
+    </glossentry>
+  </glossdiv>
+
+  <glossdiv id="gloss_b">
+    <title>B</title>
+    <glossentry>
+      <glossterm>Bug</glossterm>
+      <glossdef>
+	<para>A "Bug" in Bugzilla refers to an issue entered into the database which has an associated number, assignments, comments, etc.  Many also refer to a "Ticket" or "Issue"; in this context, they are synonymous.</para>
+      </glossdef>
+    </glossentry>
+
+    <glossentry>
+      <glossterm>Bug Number</glossterm>
+      <glossdef>
+	<para>Each Bugzilla Bug is assigned a number that uniquely identifies that Bug.  The Bug associated with a Bug Number can be pulled up via a query, or easily from the very front page by typing the number in the "Find" box.</para>
+      </glossdef>
+    </glossentry>
+
+    <glossentry>
+      <glossterm>Bug Life Cycle</glossterm>
+      <glossdef>
+      <para>A Bug has stages through which it must pass before becoming a "closed bug", including acceptance, resolution, and verification.  The "Bug Life Cycle" is moderately flexible according to the needs of the organization using it, though.</para>
+      </glossdef>
+    </glossentry>
+  </glossdiv>
+
+  <glossdiv id="gloss_i">
+    <title>I</title>
+    <glossentry id="gloss_infiniteloop">
+      <glossterm>Infinite Loop</glossterm>
+      <glosssee otherterm="gloss_recursion">
+    </glossentry>
+  </glossdiv>
+
+<glossdiv id="gloss_p">
+    <title>P</title>
+    <glossentry>
+      <glossterm id="gloss_product">Product</glossterm>
+      <glossdef>
+	<para>A Product is a broad category of types of bugs.  In general, there are several Components to a Product.  A Product also defines a default Group (used for Bug Security) for all bugs entered into components beneath it.</para>
+	<example>
+	  <title>A Sample Product</title>
+	  <para>A company sells a software product called "X".  They also maintain some older software called "Y", and have a secret project "Z".  An effective use of Products might be to create Products "X", "Y", and "Z", each with Components "User Interface", "Database", and "Business Logic".  They might also change group permissions so that only those people who are members of Group "Z" can see components and bugs under Product "Z".</para>
+	</example>
+      </glossdef>
+    </glossentry>
+  </glossdiv>
+
+  <glossdiv id="gloss_q">
+    <title>Q</title>
+    <glossentry>
+      <glossterm>Q/A</glossterm>
+      <glossdef>
+	<para>"Q/A" is short for "Quality Assurance".  In most large software development organizations, there is a team devoted to ensuring the product meets minimum standards before shipping.  This team will also generally want to track the progress of bugs over their life cycle, thus the need for the "Q/A Contact" field in a Bug.</para>
+      </glossdef>
+    </glossentry>
+  </glossdiv>
+
+<glossdiv id="gloss_r">
+    <title>R</title>
+    <glossentry>
+      <glossterm id="gloss_recursion">Recursion</glossterm>
+      <glosssee otherterm="gloss_infiniteloop">
+    </glossentry>
+  </glossdiv>
+
+<glossdiv id="gloss_z">
+    <title>Z</title>
+    <glossentry>
+      <glossterm>Zarro Boogs Found</glossterm>
+      <glossdef>
+	<para>This is the cryptic response sent by Bugzilla when a query returned no results.  It is just a goofy way of saying "Zero Bugs Found".</para>
+      </glossdef>
+    </glossentry>
+</glossdiv>
+
+</glossary>
+
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-namecase-general:t
+sgml-general-insert-case:lower
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
diff --git a/docs/sgml/index.sgml b/docs/sgml/index.sgml
new file mode 100644
index 000000000..e69de29bb
diff --git a/docs/sgml/installation.sgml b/docs/sgml/installation.sgml
new file mode 100644
index 000000000..03ff0bd8d
--- /dev/null
+++ b/docs/sgml/installation.sgml
@@ -0,0 +1,1322 @@
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
+
+<CHAPTER id="installation">
+  <TITLE>Installing Bugzilla</TITLE>
+  
+  <SECTION id="README.unix">
+    <TITLE>UNIX Installation</TITLE>
+    <SECTION>
+      <TITLE>ERRATA</TITLE>
+      <NOTE>
+	<PARA>
+	  If you are installing Bugzilla on S.u.S.e. Linux, or some other
+	  distributions with "paranoid" security options, it is possible
+	  that the checksetup.pl script may fail with the error:
+	  <ERRORNAME>cannot chdir(/var/spool/mqueue): Permission denied</ERRORNAME>
+	  This is because your
+	  /var/spool/mqueue directory has a mode of "drwx------".  Type
+	  <COMMAND>chmod 755 /var/spool/mqueue</COMMAND> as root to fix this problem.
+	</PARA>
+      </NOTE>
+      
+      <NOTE>
+	<PARA>
+	  Release Notes for Bugzilla 2.12 are available at docs/rel_notes.txt
+	</PARA>
+      </NOTE>
+      
+      <NOTE>
+	<PARA>
+	  The preferred documentation for Bugzilla is available in docs/, with
+	  a variety of document types available.  Please refer to these documents when 
+	  installing, configuring, and maintaining your Bugzilla installation.
+	</PARA>
+      </NOTE>
+      
+      <WARNING>
+	<PARA>
+	  Bugzilla is not a package where you can just plop it in a directory,
+	  twiddle a few things, and you're off.  Installing Bugzilla assumes you
+	  know your variant of UNIX or Microsoft Windows well, are familiar with the
+	  command line, and are comfortable compiling and installing a plethora
+	  of third-party utilities.  To install Bugzilla on Win32 requires
+	  fair Perl proficiency, and if you use a webserver other than Apache you
+	  should be intimately familiar with the security mechanisms and CGI
+	  environment thereof.
+	</PARA>
+      </WARNING>
+      
+      <WARNING>
+	<PARA>
+	  Bugzilla has not undergone a complete security review. Security holes
+	  may exist in the code.  Great care should be taken both in the installation
+	  and usage of this software.  Carefully consider the implications of
+	  installing other network services with Bugzilla.
+	</PARA>
+      </WARNING>
+    </SECTION>
+
+    <SECTION>
+      <TITLE>Step-by-step Install</TITLE>
+      <SECTION>
+	<TITLE>Introduction</TITLE>
+	<PARA>
+	  Installation of bugzilla is pretty straightforward, particularly if your
+	  machine already has MySQL and the MySQL-related perl packages installed.
+	  If those aren't installed yet, then that's the first order of business.  The
+	  other necessary ingredient is a web server set up to run cgi scripts.
+	  While using Apache for your webserver is not required, it is recommended.
+	</PARA>
+
+	<PARA>
+	  Bugzilla has been successfully installed under Solaris, Linux, and
+	  Win32. The peculiarities of installing on Win32 (Win98+/NT/2K) are not
+	  included in this section of the Guide; please check out the "Win32 Installation Instructions"
+	  for further advice on getting Bugzilla to work on Microsoft Windows.
+	</PARA>
+
+	<PARA>
+	  The Bugzilla Guide is contained in the "docs/" folder.  It is available
+	  in plain text (docs/txt), HTML (docs/html), or SGML source (docs/sgml).
+	</PARA>
+      </SECTION>
+      <SECTION>
+	<TITLE>Installing the Prerequisites</TITLE>
+
+	<PARA>
+	  The software packages necessary for the proper running of bugzilla are:
+	  <ORDEREDLIST>
+	    <LISTITEM>
+	      <PARA>
+		MySQL database server and the mysql client (3.22.5 or greater)
+	      </PARA>
+	    </LISTITEM>
+	    <LISTITEM>
+	      <PARA>
+		Perl (5.004 or greater)
+	      </PARA>
+	    </LISTITEM>
+	    <LISTITEM>
+	      <PARA>
+		DBI Perl module
+	      </PARA>
+	    </LISTITEM>
+	    <LISTITEM>
+	      <PARA>
+		Data::Dumper Perl module
+	      </PARA>
+	    </LISTITEM>
+	    <LISTITEM>
+	      <PARA>
+		DBD::mySQL
+	      </PARA>
+	    </LISTITEM>
+	    <LISTITEM>
+	      <PARA>
+		TimeDate Perl module collection
+	      </PARA>
+	    </LISTITEM>
+	    <LISTITEM>
+	      <PARA>
+		GD perl module (1.8.3) (optional, for bug charting)
+	      </PARA>
+	    </LISTITEM>
+	    <LISTITEM>
+	      <PARA>
+		Chart::Base Perl module (0.99c) (optional, for bug charting)
+	      </PARA>
+	    </LISTITEM>
+	    <LISTITEM>
+	      <PARA>
+		DB_File Perl module (optional, for bug charting)
+	      </PARA>
+	    </LISTITEM>
+	    <LISTITEM>
+	      <PARA>
+		The web server of your choice.  Apache is recommended.
+	      </PARA>
+	    </LISTITEM>
+	    <LISTITEM>
+	      <PARA>
+		MIME::Parser Perl module (optional, for contrib/bug_email.pl interface)
+	      </PARA>
+	    </LISTITEM>
+	  </ORDEREDLIST>
+	  <NOTE>
+	    <PARA>
+	      You must run Bugzilla on a filesystem that supports file locking via
+	      flock().  This is necessary for Bugzilla to operate safely with multiple
+	      instances.
+	    </PARA>
+	  </NOTE>
+	  <WARNING>
+	    <PARA>
+	      It is a good idea, while installing Bugzilla, to ensure it is not
+	      <EMPHASIS>accessible</EMPHASIS> by other machines on the Internet.
+	      Your machine may be vulnerable to attacks
+	      while you are installing. In other words, ensure there is some kind of firewall between you
+	      and the rest of the Internet.  Many installation steps require an active Internet connection
+	      to complete, but you must take care to ensure that at no point is your machine vulnerable
+	      to an attack.
+	    </PARA>
+	  </WARNING>
+
+	</PARA>
+      </SECTION>
+      <SECTION>
+	<TITLE>Installing MySQL Database</TITLE>
+	<PARA>
+	  Visit MySQL homepage at http://www.mysql.org/ and grab the latest stable
+	  release of the server.  Both binaries and source are available and which
+	  you get shouldn't matter.  Be aware that many of the binary versions
+	  of MySQL store their data files in /var which on many installations
+	  (particularly common with linux installations) is part of a smaller
+	  root partition.  If you decide to build from sources you can easily set
+	  the dataDir as an option to configure.
+	</PARA>
+	<PARA>
+	  If you've installed from source or non-package (RPM, deb, etc.) binaries
+	  you'll want to make sure to add mysqld to your init scripts so the server
+	  daemon will come back up whenever your machine reboots.
+	  You also may want to edit those init scripts, to make sure that
+	  mysqld will accept large packets.  By default, mysqld is set up to only
+	  accept packets up to 64K long.  This limits the size of attachments you
+	  may put on bugs.  If you add something like "-O max_allowed_packet=1M"
+	  to the command that starts mysqld (or safe_mysqld), then you will be
+	  able to have attachments up to about 1 megabyte.
+	</PARA>
+	<NOTE>
+	  <PARA>
+	    If you plan on running Bugzilla and MySQL on the same machine,
+	    consider using the "--skip-networking" option in the init script.
+	    This enhances security by preventing network access to MySQL.
+	  </PARA>
+	</NOTE>
+      </SECTION>
+
+      <SECTION>
+	<TITLE>Perl (5.004 or greater)</TITLE>
+	<PARA>
+	  Any machine that doesn't have perl on it is a sad machine indeed.  Perl
+	  for *nix systems can be gotten in source form from http://www.perl.com.
+	</PARA>
+	<PARA>
+	  Perl is now a far cry from the the single compiler/interpreter binary it
+	  once was.  It now includes a great many required modules and quite a
+	  few other support files.  If you're not up to or not inclined to build
+	  perl from source, you'll want to install it on your machine using some
+	  sort of packaging system (be it RPM, deb, or what have you) to ensure
+	  a sane install.  In the subsequent sections you'll be installing quite
+	  a few perl modules; this can be quite ornery if your perl installation
+	  isn't up to snuff.
+	</PARA>
+	<TIP>
+	  <PARA>
+	    You can skip the following Perl module installation
+	    steps by installing "Bundle::Bugzilla" from CPAN, which includes them.
+	    All Perl module installation steps require you have an active Internet
+	    connection.
+	  </PARA>
+	  <PARA>
+	    <COMPUTEROUTPUT>
+	      <PROMPT>bash#</PROMPT>
+	      <COMMAND>perl -MCPAN -e 'install "Bundle::Bugzilla"'</COMMAND>
+	    </COMPUTEROUTPUT>
+	  </PARA>
+	  <PARA>
+	    Bundle::Bugzilla doesn't include GD, Chart::Base, or MIME::Parser,
+	    which are not essential to a basic Bugzilla install.  If installing
+	    this bundle fails, you should install each module individually to
+	    isolate the problem.
+	  </PARA>
+	</TIP>
+      </SECTION>
+
+      <SECTION>
+	<TITLE>DBI Perl Module</TITLE>
+	<PARA>
+	  The DBI module is a generic Perl module used by other database related
+	  Perl modules.  For our purposes it's required by the MySQL-related
+	  modules.  As long as your Perl installation was done correctly the
+	  DBI module should be a breeze.  It's a mixed Perl/C module, but Perl's
+	  MakeMaker system simplifies the C compilation greatly.
+	</PARA>
+	<PARA>
+	  Like almost all Perl modules DBI can be found on the Comprehensive Perl
+	  Archive Network (CPAN) at http://www.cpan.org.  The CPAN servers have a
+	  real tendency to bog down, so please use mirrors.  The current location
+	  at the time of this writing (02/17/99) can be found in Appendix A.
+	</PARA>
+	<PARA>
+	  Quality, general Perl module installation instructions can be found on
+	  the CPAN website, but the easy thing to do is to just use the CPAN shell
+	  which does all the hard work for you.
+	</PARA>
+	<PARA>
+	  To use the CPAN shell to install DBI:
+	  <INFORMALEXAMPLE>
+	    <PARA>
+	      <COMPUTEROUTPUT>
+		<PROMPT>bash#</PROMPT>
+		<COMMAND>perl -MCPAN -e 'install "DBI"'</COMMAND>
+	      </COMPUTEROUTPUT>
+	      <NOTE>
+		<PARA>Replace "DBI" with the name of whichever module you wish
+		to install, such as Data::Dumper, TimeDate, GD, etc.</PARA>
+	      </NOTE>
+	    </PARA>
+	  </INFORMALEXAMPLE>
+	  To do it the hard way:
+	  <INFORMALEXAMPLE>
+	    <PARA>
+	      Untar the module tarball -- it should create its own directory
+	    </PARA>
+	    <PARA>
+	      CD to the directory just created, and enter the following commands:
+	      <ORDEREDLIST>
+		<LISTITEM>
+		  <PARA>
+		    <COMPUTEROUTPUT>
+		      <PROMPT>bash#</PROMPT>
+		      <COMMAND>perl Makefile.PL</COMMAND>
+		    </COMPUTEROUTPUT>
+		  </PARA>
+		</LISTITEM>
+		<LISTITEM>
+		  <PARA>
+		    <COMPUTEROUTPUT>
+		      <PROMPT>bash#</PROMPT>
+		      <COMMAND>make</COMMAND>
+		    </COMPUTEROUTPUT>
+		  </PARA>
+		</LISTITEM>
+		<LISTITEM>
+		  <PARA>
+		    <COMPUTEROUTPUT>
+		      <PROMPT>bash#</PROMPT>
+		      <COMMAND>make test</COMMAND>
+		    </COMPUTEROUTPUT>
+		  </PARA>
+		</LISTITEM>
+		<LISTITEM>
+		  <PARA>
+		    <COMPUTEROUTPUT>
+		      <PROMPT>bash#</PROMPT>
+		      <COMMAND>make install</COMMAND>
+		    </COMPUTEROUTPUT>
+		  </PARA>
+		</LISTITEM>
+	      </ORDEREDLIST>
+	      If everything went ok that should be all it takes.  For the vast
+	      majority of perl modules this is all that's required.
+	    </PARA>
+	  </INFORMALEXAMPLE>
+	</PARA>
+      </SECTION>
+      <SECTION>
+	<TITLE>Data::Dumper Perl Module</TITLE>
+	<PARA>
+	  The Data::Dumper module provides data structure persistence for Perl
+	  (similar to Java's serialization).  It comes with later sub-releases of
+	  Perl 5.004, but a re-installation just to be sure it's available won't
+	  hurt anything.
+	</PARA>
+	<PARA>
+	  Data::Dumper is used by the MySQL related Perl modules.  It can be
+	  found on CPAN (link in Appendix A) and can be installed by following
+	  the same four step make sequence used for the DBI module.
+	</PARA>
+      </SECTION>
+
+      <SECTION>
+	<TITLE>MySQL related Perl Module Collection</TITLE>
+	<PARA>
+	  The Perl/MySQL interface requires a few mutually-dependent perl
+	  modules.  These modules are grouped together into the the
+	  Msql-Mysql-modules package.  This package can be found at CPAN.
+	  After the archive file has been downloaded it should
+	  be untarred.
+	</PARA>
+	<PARA>
+	  The MySQL modules are all built using one make file which is generated
+	  by running:
+	  <PROMPT>bash#</PROMPT>
+	  <COMMAND>perl Makefile.pl</COMMAND>
+	</PARA>
+	<PARA>
+	  The MakeMaker process will ask you a few questions about the desired
+	  compilation target and your MySQL installation.  For many of the questions
+	  the provided default will be adequate.
+	</PARA>
+	<PARA>
+	  When asked if your desired target is the MySQL or mSQL packages
+	  selected the MySQL related ones.  Later you will be asked if you wish
+	  to provide backwards compatibility with the older MySQL packages; you
+	  must answer YES to this question.  The default will be no, and if you
+	  select it things won't work later.
+	</PARA>
+	<PARA>
+	  A host of 'localhost' should be fine and a testing user of 'test' and
+	  a null password should find itself with sufficient access to run tests
+	  on the 'test' database which MySQL created upon installation.  If 'make
+	  test' and 'make install' go through without errors you should be ready
+	  to go as far as database connectivity is concerned.
+	</PARA>
+      </SECTION>
+
+      <SECTION>
+	<TITLE>TimeDate Perl Module Collection</TITLE>
+	<PARA>
+	  Many of the more common date/time/calendar related Perl modules have
+	  been grouped into a bundle similar to the MySQL modules bundle. This
+	  bundle is stored on the CPAN under the name TimeDate.  A (hopefully
+	  current) link can be found in Appendix A.  The component module we're
+	  most interested in is the Date::Format module, but installing all of them
+	  is probably a good idea anyway.  The standard Perl module installation
+	  instructions should work perfectly for this simple package.
+	</PARA>
+      </SECTION>
+      <SECTION>
+	<TITLE>GD Perl Module (1.8.3)</TITLE>
+	<PARA>
+	  The GD library was written by Thomas Boutell a long while ago to
+	  programatically generate images in C.  Since then it's become almost a
+	  defacto standard for programatic image construction.  The Perl bindings
+	  to it found in the GD library are used on a million web pages to generate
+	  graphs on the fly.  That's what bugzilla will be using it for so you'd
+	  better install it if you want any of the graphing to work.
+	</PARA>
+	<PARA>
+	  Actually bugzilla uses the Graph module which relies on GD itself,
+	  but isn't that always the way with OOP.  At any rate, you can find the
+	  GD library on CPAN (link in Appendix "Required Software").  
+	</PARA>
+	<NOTE>
+	  <PARA>
+	    The Perl GD library requires some other libraries that may or may not be
+	    installed on your system, including "libpng" and "libgd".  The full requirements
+	    are listed in the Perl GD library README.  Just realize that if compiling GD fails,
+	    it's probably because you're missing a required library.
+	  </PARA>
+	</NOTE>
+      </SECTION>
+
+      <SECTION>
+	<TITLE>Chart::Base Perl Module (0.99c)</TITLE>
+	<PARA>
+	  The Chart module provides bugzilla with on-the-fly charting
+	  abilities.  It can be installed in the usual fashion after it has been
+	  fetched from CPAN where it is found as the Chart-x.x... tarball in a
+	  directory to be listed in Appendix "Required Software".  Note that as with the GD perl
+	  module, only the specific versions listed above (or newer) will work. Earlier
+	  versions used GIF's, which are no longer supported by the latest
+	  versions of GD.
+	</PARA>
+      </SECTION>
+
+      <SECTION>
+	<TITLE>DB_File Perl Module</TITLE>
+	<PARA>
+	  DB_File is a module which allows Perl programs to make use of the facilities provided by 
+	  Berkeley DB version 1.x. This module is required by collectstats.pl which is used for 
+	  bug charting. If you plan to make use of bug charting, you must install this module.
+	</PARA>
+      </SECTION>
+
+      <SECTION>
+	<TITLE>HTTP Server</TITLE>
+	<PARA>
+	  You have a freedom of choice here - Apache, Netscape or any other
+	  server on UNIX would do.  You can easily run the web server on a different
+	  machine than MySQL, but need to adjust the MySQL "bugs" user permissions
+	  accordingly.
+	</PARA>
+	<PARA>
+	  You'll want to make sure that your web server will run any file
+	  with the .cgi extension as a cgi and not just display it.  If you're using
+	  apache that means uncommenting the following line in the srm.conf file:
+	  <COMPUTEROUTPUT>AddHandler cgi-script .cgi</COMPUTEROUTPUT>
+	</PARA>
+	<PARA>
+	  With apache you'll also want to make sure that within the access.conf
+	  file the line:
+	  <COMPUTEROUTPUT>
+	    Options ExecCGI
+	  </COMPUTEROUTPUT>
+	  is in the stanza that covers the directories you intend to put the bugzilla
+	  .html and .cgi files into.
+	</PARA>
+	<PARA>
+	  If you are using a newer version of Apache, both of the above lines will be
+	  (or will need to be) in the httpd.conf file, rather than srm.conf or
+	  access.conf.
+	</PARA>
+	<WARNING>
+	  <PARA>
+	    There are two critical directories and a file that should not be a served by
+	    the HTTP server. These are the 'data' and 'shadow' directories and the
+	    'localconfig' file. You should configure your HTTP server to not serve
+	    content from these files. Failure to do so will expose critical passwords
+	    and other data. Please see your HTTP server configuration manual on how
+	    to do this. If you use quips (at the top of the buglist pages) you will want
+	    the 'data/comments' file to still be served. This file contains those quips.
+	  </PARA>
+	</WARNING>
+      </SECTION>
+
+      <SECTION>
+	<TITLE>Installing the Bugzilla Files</TITLE>
+	<PARA>
+	  You should untar the Bugzilla files into a directory that you're
+	  willing to make writable by the default web server user (probably
+	  'nobody').  You may decide to put the files off of the main web space
+	  for your web server or perhaps off of /usr/local with a symbolic link
+	  in the web space that points to the bugzilla directory.  At any rate,
+	  just dump all the files in the same place (optionally omitting the CVS
+	  directories if they were accidentally tarred up with the rest of Bugzilla)
+	  and make sure you can access the files in that directory through your
+	  web server.
+	</PARA>
+	<TIP>
+	  <PARA>
+	    HINT:  If you symlink the bugzilla directory into your Apache's
+	    HTML heirarchy, you may receive "Forbidden" errors unless you
+	    add the "FollowSymLinks" directive to the &lt;Directory&gt; entry
+	    for the HTML root.
+	  </PARA>
+	</TIP>
+	<PARA>
+	  Once all the files are in a web accessible directory, make that
+	  directory writable by your webserver's user (which may require just
+	  making it world writable).  This is a temporary step until you run
+	  the post-install "checksetup.pl" script, which locks down your
+	  installation.
+	</PARA>
+	<PARA>
+	  Lastly, you'll need to set up a symbolic link from /usr/bonsaitools/bin
+	  to the correct location of your perl executable (probably /usr/bin/perl).
+	  Otherwise you must hack all the .cgi files to change where they look
+	  for perl.  To make future upgrades easier, you should use the symlink
+	  approach.
+	  <TIP>
+	    <PARA>
+	      If you don't have root access to set this symlink up, check out the
+	      "setperl.csh" utility, listed in the Patches section of this
+	      Guide.  It will change the path to perl in all your Bugzilla files for
+	      you.
+	    </PARA>
+	  </TIP>
+	</PARA>
+      </SECTION>
+
+      <SECTION>
+	<TITLE>Setting Up the MySQL Database</TITLE>
+	<PARA>
+	  After you've gotten all the software installed and working you're ready
+	  to start preparing the database for its life as a the back end to a high
+	  quality bug tracker.
+	</PARA>
+	<PARA>
+	  First, you'll want to fix MySQL permissions to allow access from
+	  Bugzilla.  For the purpose of this Installation section, the Bugzilla username
+	  will be "bugs", and will have minimal permissions.  Bugzilla has
+	  not undergone a thorough security audit.  It may be possible for
+	  a system cracker to somehow trick Bugzilla into executing a command
+	  such as "; DROP DATABASE mysql".
+	</PARA>
+	<PARA>
+	  That would be bad.
+	</PARA>
+	<PARA>
+	  Give the MySQL root user a password.  MySQL passwords are
+	  limited to 16 characters.
+	  <SIMPLELIST>
+	    <MEMBER>
+	      <COMPUTEROUTPUT>
+		<PROMPT>bash#</PROMPT>
+		<COMMAND>mysql -u root mysql</COMMAND>
+	      </COMPUTEROUTPUT>
+	    </MEMBER>
+	    <MEMBER>
+	      <COMPUTEROUTPUT>
+		<PROMPT>mysql></PROMPT>
+		<COMMAND>
+		  UPDATE user SET Password=PASSWORD ('new_password')
+		  WHERE user='root';
+		</COMMAND>
+	      </COMPUTEROUTPUT>
+	    </MEMBER>
+	    <MEMBER>
+	      <COMPUTEROUTPUT>
+		<PROMPT>mysql></PROMPT>
+		<COMMAND>FLUSH PRIVILEGES;</COMMAND>
+	      </COMPUTEROUTPUT>
+	    </MEMBER>
+	  </SIMPLELIST>
+	  From this point on, if you need to access MySQL as the
+	  MySQL root user, you will need to use "mysql -u root -p" and
+	  enter your new_password.  Remember that MySQL user names have
+	  nothing to do with Unix user names (login names).	  
+	</PARA>
+	<PARA>
+	  Next, we create the "bugs" user, and grant sufficient
+	  permissions for checksetup.pl, which we'll use later, to work
+	  its magic.  This also restricts the "bugs" user to operations
+	  within a database called "bugs", and only allows the account
+	  to connect from "localhost".  Modify it to reflect your setup
+	  if you will be connecting from another machine or as a different
+	  user.
+	</PARA>
+	<PARA>
+	  Remember to set bugs_password to some unique password.
+	  <SIMPLELIST>
+	    <MEMBER>
+	      <COMPUTEROUTPUT>
+		<PROMPT>mysql></PROMPT>
+		<COMMAND>GRANT SELECT,INSERT,UPDATE,DELETE,INDEX,
+		  ALTER,CREATE,DROP,REFERENCES 
+		  ON bugs.* TO bugs@localhost
+		  IDENTIFIED BY 'bugs_password';</COMMAND>
+	      </COMPUTEROUTPUT>
+	    </MEMBER>
+	    <MEMBER>
+	      <COMPUTEROUTPUT>
+		<PROMPT>
+		  mysql>
+		</PROMPT>
+		<COMMAND>
+		  FLUSH PRIVILEGES;
+		</COMMAND>
+	      </COMPUTEROUTPUT>
+	    </MEMBER>
+	  </SIMPLELIST>
+	</PARA>
+	<PARA>
+	  Next, run the magic checksetup.pl script.  (Many thanks to Holger
+	  Schurig &lt;holgerschurig@nikocity.de&gt; for writing this script!)
+	  It will make sure Bugzilla files and directories have reasonable
+	  permissions, set up the "data" directory, and create all the MySQL
+	  tables.
+	  <SIMPLELIST>
+	    <MEMBER>
+	      <COMPUTEROUTPUT>
+		<PROMPT>bash#</PROMPT>
+		<COMMAND>./checksetup.pl</COMMAND>
+	      </COMPUTEROUTPUT>
+	    </MEMBER>
+	  </SIMPLELIST>
+	  The first time you run it, it will create a file called "localconfig".
+	</PARA>
+      </SECTION>
+
+      <SECTION>
+	<TITLE>Tweaking "localconfig"</TITLE>
+	<PARA>
+	  This file contains a variety of settings you may need to tweak including
+	  how Bugzilla should connect to the MySQL database.
+	</PARA>
+	<PARA>
+	  The connection settings include:
+	  <ORDEREDLIST>
+	    <LISTITEM>
+	      <PARA>
+		server's host: just use "localhost" if the MySQL server is
+                local
+	      </PARA>
+	    </LISTITEM>
+	    <LISTITEM>
+	      <PARA>
+		database name: "bugs" if you're following these directions
+	      </PARA>
+	    </LISTITEM>
+	    <LISTITEM>
+	      <PARA>
+		MySQL username: "bugs" if you're following these directions
+	      </PARA>
+	    </LISTITEM>
+	    <LISTITEM>
+	      <PARA>
+		Password for the "bugs" MySQL account above
+	      </PARA>
+	    </LISTITEM>
+	  </ORDEREDLIST>
+	</PARA>
+	<PARA>
+	  Once you are happy with the settings, re-run checksetup.pl.  On this
+	  second run, it will create the database and an administrator account
+	  for which you will be prompted to provide information.
+	</PARA>
+	<PARA>
+	  When logged into an administrator account once Bugzilla is running,
+	  if you go to the query page (off of the bugzilla main menu), you'll
+	  find an 'edit parameters' option that is filled with editable treats.
+	</PARA>
+	<PARA>
+	  Should everything work, you should have a nearly empty copy of the bug
+	  tracking setup.
+	</PARA>
+	<PARA>
+	  The second time around, checksetup.pl will stall if it is on a
+	  filesystem that does not fully support file locking via flock(), such as
+	  NFS mounts.  This support is required for Bugzilla to operate safely with
+	  multiple instances. If flock() is not fully supported, it will stall at:
+	  <ERRORCODE>Now regenerating the shadow database for all bugs.</ERRORCODE>
+	  <NOTE>
+	    <PARA>
+	      The second time you run checksetup.pl, it is recommended you be the same
+	      user as your web server runs under, and that you be sure you have set the
+	      "webservergroup" parameter in localconfig to match the web server's group
+	      name, if any.  Under some systems, otherwise, checksetup.pl will goof up
+	      your file permissions and make them unreadable to your web server.
+	    </PARA>
+	  </NOTE>
+	</PARA>
+	<NOTE>
+	  <PARA>
+	    The checksetup.pl script is designed so that you can run it at any time
+	    without causing harm.  You should run it after any upgrade to Bugzilla.
+	  </PARA>
+	</NOTE>
+      </SECTION>
+
+      <SECTION>
+	<TITLE>Setting Up Maintainers Manuall (Optional)</TITLE>
+	<PARA>
+	  If you want to add someone else to every group by hand, you can do it
+	  by typing the appropriate MySQL commands.  Run '<COMPUTEROUTPUT>
+	    mysql -u root -p bugs</COMPUTEROUTPUT>'
+	  (you may need different parameters, depending on your security settings
+	  according to section 3, above).  Then:
+	  <SIMPLELIST>
+	    <MEMBER>
+	      <COMPUTEROUTPUT>
+		<PROMPT>mysql></PROMPT>
+		<COMMAND>update profiles set groupset=0x7fffffffffffffff
+               where login_name = 'XXX';</COMMAND>
+	      </COMPUTEROUTPUT>
+	    </MEMBER>
+	  </SIMPLELIST>
+	  replacing XXX with the Bugzilla email address.
+	</PARA>
+      </SECTION>
+
+      <SECTION>
+	<TITLE>The Whining Cron (Optional)</TITLE>
+	<PARA>
+	  By now you've got a fully functional bugzilla, but what good are bugs
+	  if they're not annoying?  To help make those bugs more annoying you can
+	  set up bugzilla's automatic whining system.  This can be done by adding
+	  the following command as a daily crontab entry (for help on that see that
+	  crontab man page):
+	  <SIMPLELIST>
+	    <MEMBER>
+	      <COMPUTEROUTPUT>
+		<COMMAND>cd &lt;your-bugzilla-directory&gt; ; ./whineatnews.pl</COMMAND>
+	      </COMPUTEROUTPUT>
+	    </MEMBER>
+	  </SIMPLELIST>
+	</PARA>
+      </SECTION>
+
+      <SECTION>
+	<TITLE>Bug Graphs (Optional)</TITLE>
+	<PARA>
+	  As long as you installed the GD and Graph::Base Perl modules you might
+	  as well turn on the nifty bugzilla bug reporting graphs.
+	</PARA>
+	<PARA>
+	  Add a cron entry like this to run collectstats daily at 5 after midnight:
+	  <SIMPLELIST>
+	    <MEMBER>
+	      <COMPUTEROUTPUT>
+		<PROMPT>bash#</PROMPT>
+		<COMMAND>crontab -e</COMMAND>
+	      </COMPUTEROUTPUT>
+	    </MEMBER>
+	    <MEMBER>
+	      <COMPUTEROUTPUT>
+		 5 0 * * * cd &lt;your-bugzilla-directory&gt; ; ./collectstats.pl
+	      </COMPUTEROUTPUT>
+	    </MEMBER>
+	  </SIMPLELIST>
+	</PARA>
+	<PARA>
+	  After two days have passed you'll be able to view bug graphs from the
+	  Bug Reports page. 
+	</PARA>
+      </SECTION>
+
+      <SECTION>
+	<TITLE>Securing MySQL</TITLE>
+	<PARA>
+	  If you followed the README for setting up your "bugs" and "root" user in
+	  MySQL, much of this should not apply to you.  If you are upgrading
+	  an existing installation of Bugzilla, you should pay close attention
+	  to this section.
+	</PARA>
+	<PARA>
+	  Most MySQL installs have "interesting" default security parameters:
+	  <SIMPLELIST>
+	    <MEMBER>mysqld defaults to running as root</MEMBER>
+	    <MEMBER>it defaults to allowing external network connections</MEMBER>
+	    <MEMBER>it has a known port number, and is easy to detect</MEMBER>
+	    <MEMBER>it defaults to no passwords whatsoever</MEMBER>
+	    <MEMBER>it defaults to allowing "File_Priv"</MEMBER>
+	  </SIMPLELIST>
+	</PARA>
+	<PARA>
+	  This means anyone from anywhere on the internet can not only drop the
+	  database with one SQL command, and they can write as root to the system.
+	</PARA>
+	<PARA>
+	  To see your permissions do:
+	  <SIMPLELIST>
+	    <MEMBER>
+	      <COMPUTEROUTPUT>
+		<PROMPT>bash#</PROMPT>
+		<COMMAND>mysql -u root -p</COMMAND>
+	      </COMPUTEROUTPUT>
+	    </MEMBER>
+	    <MEMBER>
+	      <COMPUTEROUTPUT>
+		<PROMPT>mysql></PROMPT>
+		<COMMAND>use mysql;</COMMAND>
+	      </COMPUTEROUTPUT>
+	    </MEMBER>
+	    <MEMBER>
+	      <COMPUTEROUTPUT>
+		<PROMPT>mysql></PROMPT>
+		<COMMAND>show tables;</COMMAND>
+	      </COMPUTEROUTPUT>
+	    </MEMBER>
+	    <MEMBER>
+	      <COMPUTEROUTPUT>
+		<PROMPT>mysql></PROMPT>
+		<COMMAND>select * from user;</COMMAND>
+	      </COMPUTEROUTPUT>
+	    </MEMBER>
+	    <MEMBER>
+	      <COMPUTEROUTPUT>
+		<PROMPT>mysql></PROMPT>
+		<COMMAND>select * from db;</COMMAND>
+	      </COMPUTEROUTPUT>
+	    </MEMBER>
+	  </SIMPLELIST>
+	</PARA>
+	<PARA>
+	  To fix the gaping holes:
+	  <SIMPLELIST>
+	    <MEMBER>DELETE FROM user WHERE User='';</MEMBER>
+	    <MEMBER>UPDATE user SET Password=PASSWORD('new_password') WHERE user='root';</MEMBER>
+	    <MEMBER> FLUSH PRIVILEGES;</MEMBER>
+	  </SIMPLELIST>
+	</PARA>
+	<PARA>
+	  If you're not running "mit-pthreads" you can use:
+	  <SIMPLELIST>
+	    <MEMBER>GRANT USAGE ON *.* TO bugs@localhost;</MEMBER>
+	    <MEMBER>GRANT ALL ON bugs.* TO bugs@localhost;</MEMBER>
+	    <MEMBER>REVOKE DROP ON bugs.* FROM bugs@localhost;</MEMBER>
+	    <MEMBER>FLUSH PRIVILEGES;</MEMBER>
+	  </SIMPLELIST>
+	</PARA>
+	<PARA>
+	  With "mit-pthreads" you'll need to modify the "globals.pl" Mysql->Connect
+	  line to specify a specific host name instead of "localhost", and accept
+	  external connections:
+	  <SIMPLELIST>
+	    <MEMBER>GRANT USAGE ON *.* TO bugs@bounce.hop.com;</MEMBER>
+	    <MEMBER>GRANT ALL ON bugs.* TO bugs@bounce.hop.com;</MEMBER>
+	    <MEMBER>REVOKE DROP ON bugs.* FROM bugs@bounce.hop.com;</MEMBER>
+	    <MEMBER>FLUSH PRIVILEGES;</MEMBER>
+	  </SIMPLELIST>
+	</PARA>
+	<PARA>
+	  Consider also:
+	  <ORDEREDLIST>
+	    <LISTITEM>
+	      <PARA>
+		Turning off external networking with "--skip-networking",
+		unless you have "mit-pthreads", in which case you can't.
+		Without networking, MySQL connects with a Unix domain socket.
+	      </PARA>
+	    </LISTITEM>
+	    <LISTITEM>
+	      <PARA>
+		using the --user= option to mysqld to run it as an unprivileged
+		user.
+	      </PARA>
+	    </LISTITEM>
+	    <LISTITEM>
+	      <PARA>
+		starting MySQL in a chroot jail
+	      </PARA>
+	    </LISTITEM>
+	    <LISTITEM>
+	      <PARA>
+		running the httpd in a "chrooted" jail
+	      </PARA>
+	    </LISTITEM>
+	    <LISTITEM>
+	      <PARA>
+		making sure the MySQL passwords are different from the OS
+		passwords (MySQL "root" has nothing to do with system "root").
+	      </PARA>
+	    </LISTITEM>
+	    <LISTITEM>
+	      <PARA>
+		running MySQL on a separate untrusted machine
+	      </PARA>
+	    </LISTITEM>
+	    <LISTITEM>
+	      <PARA>
+		making backups ;-)
+	      </PARA>
+	    </LISTITEM>
+	  </ORDEREDLIST>
+	</PARA>
+      </SECTION>
+      
+      <SECTION>
+	<TITLE>Installation General Notes</TITLE>
+	<SECTION>
+	  <TITLE>Modifying Your Running System</TITLE>
+	  <PARA>
+	    Bugzilla optimizes database lookups by storing all relatively static
+	    information in the versioncache file, located in the data/ subdirectory
+	    under your installation directory (we said before it needs to be writable,
+	    right?!)
+	  </PARA>
+	  <PARA>
+	    If you make a change to the structural data in your database (the
+	    versions table for example), or to the "constants" encoded in
+	    defparams.pl, you will need to remove the cached content from the data
+	    directory (by doing a "rm data/versioncache"), or your changes won't show
+	    up!
+	  </PARA>
+	  <PARA>
+	    That file gets automatically regenerated whenever it's more than an
+	    hour old, so Bugzilla will eventually notice your changes by itself, but
+	    generally you want it to notice right away, so that you can test things.
+	  </PARA>
+	</SECTION>
+	<SECTION>
+	  <TITLE>Upgrading From Previous Versions</TITLE>
+	  <PARA>
+	    The developers of Bugzilla are constantly adding new tables, columns and
+	    fields.  You'll get SQL errors if you just update the code.  The strategy
+	    to update is to simply always run the checksetup.pl script whenever
+	    you upgrade your installation of Bugzilla.  If you want to see what has
+	    changed, you can read the comments in that file, starting from the end.
+	  </PARA>
+	</SECTION>
+	<SECTION>
+	  <TITLE>UNIX Installation Instructions History</TITLE>
+	  <PARA>
+	    This document was originally adapted from the Bonsai installation
+	    instructions by Terry Weissman &lt;terry@mozilla.org&gt;.
+	  </PARA>
+	  <PARA>
+	    The February 25, 1999 re-write of this page was done by Ry4an Brase
+	    &lt;ry4an@ry4an.org&gt;, with some edits by Terry Weissman, Bryce Nesbitt,
+	    Martin Pool, & Dan Mosedale (But don't send bug reports to them!
+	    Report them using bugzilla, at http://bugzilla.mozilla.org/enter_bug.cgi ,
+	    project Webtools, component Bugzilla).
+	  </PARA>
+	  <PARA>
+	    This document was heavily modified again Wednesday, March 07 2001 to
+	    reflect changes for Bugzilla 2.12 release by Matthew P. Barnson.  The
+	    securing MySQL section should be changed to become standard procedure
+	    for Bugzilla installations.
+	  </PARA>
+	  <PARA>
+	    Finally, the README in its entirety was marked up in SGML and included into
+	    the Guide on April 24, 2001.
+	  </PARA>
+	  <PARA>
+	    Comments from people using this Guide for the first time are particularly welcome.
+	  </PARA>
+	</SECTION>
+      </SECTION>
+
+    </SECTION>
+  </SECTION>
+
+  <SECTION id="README.windows">
+    <TITLE>Win32 (Win98+/NT/2K) Installation</TITLE>
+    <PARA>
+      These directions have <EMPHASIS>not</EMPHASIS> been extensively tested.
+      We need testers!  Please try these out and post any changes to the
+      newsgroup.
+    </PARA>
+    <SECTION id="ntverified">
+      <TITLE>Win32 Installation: Step-by-step</TITLE>
+      <NOTE>
+	<PARA>
+	  You should be familiar with, and cross-reference, the UNIX README
+	  while performing your Win32 installation.  Unfortunately, Win32
+	  directions are not yet as detailed as those for UNIX.
+	</PARA>
+	<PARA>
+	  The <EMPHASIS>most critical</EMPHASIS> difference for Win32 users is
+	  the lack of support for a crypt() function in MySQL for Windows.  It does not
+	  have it!  All ENCRYPT statements must be modified.
+	</PARA>
+      </NOTE>
+
+      <PROCEDURE>
+	<STEP>
+	  <PARA>
+	    Install <ULINK URL="http://www.apache.org/">Apache Web Server</ULINK>
+	    for Windows.
+	  </PARA>
+	  <NOTE>
+	    <PARA>
+	      You may also use Internet Information Server or Personal Web
+	      Server for this purpose.  However, setup is slightly more
+	      difficult.  If ActivePerl doesn't seem to handle your file
+	      associations correctly (for .cgi and .pl files), please
+	      consult the FAQ, in the "Win32" section.
+	    </PARA>
+	    <PARA>
+	      If you are going to use IIS, if on Windows NT you must be updated
+	      to at least Service Pack 4.
+	    </PARA>
+	  </NOTE>
+	</STEP>
+	<STEP>
+	  <PARA>
+	    Install <ULINK URL="http://www.activestate.com/">ActivePerl</ULINK>
+	  </PARA>
+	  <PARA>
+	    Please also check the following links to fully understand the status
+	    of ActivePerl on Win32:
+	    <ULINK URL="http://language.perl.com/newdocs/pod/perlport.html">
+	      Perl Porting</ULINK>, and
+	    <ULINK URL="http://ftp.univie.ac.at/packages/perl/ports/nt/FAQ/perlwin32faq5.html">
+	      Hixie Click Here</ULINK>
+	  </PARA>
+	</STEP>
+	<STEP>
+	  <PARA>
+	    Use ppm from your perl\bin directory to install the following packs: DBI,
+	    DBD-Mysql, TimeDate, Chart, Date-Calc, Date-Manip, and GD.  You may need
+	    to extract them from .zip format using Winzip or other unzip program first.
+	    These additional ppm modules can be downloaded from ActiveState.
+	  </PARA>
+	  <PARA>
+	    The syntax for ppm is:
+	    <COMPUTEROUTPUT>
+	      <PROMPT>C:> </PROMPT><COMMAND>ppm install &lt;module&gt;.ppd</COMMAND>
+	    </COMPUTEROUTPUT>
+	  </PARA>
+	  <PARA>
+	    You can find ActiveState ppm modules at
+	    <ULINK URL="http://www.activestate.com/PPMPackages/5.6plus/">
+	      http://www.activestate.com/PPMPackages/5.6plus</ULINK>
+	  </PARA>
+	</STEP>
+	<STEP>
+	  <PARA>
+	    Download and install the Windows GNU tools from
+	    <ULINK URL="http://www.cygwin.com/">www.cygwin.com</ULINK>.
+	    Make sure the GNU utilities are in your $PATH.
+	  </PARA>
+	</STEP>
+	<STEP>
+	  <PARA>
+	    Install MySQL for NT.
+	    <NOTE>
+	      <PARA>
+		Your configuration file for MySQL <EMPHASIS>must</EMPHASIS> be named C:\MY.CNF.
+	      </PARA>
+	    </NOTE>
+	  </PARA>
+	</STEP>
+	<STEP>
+	  <PARA>
+	    Setup MySQL
+	  </PARA>
+	  <SUBSTEPS>
+	    <STEP>
+	      <PARA>
+		<COMPUTEROUTPUT>
+		  <PROMPT>C:> </PROMPT>
+		  <COMMAND>C:\mysql\bin\mysql -u root mysql</COMMAND>
+		</COMPUTEROUTPUT>
+	      </PARA>
+	    </STEP>
+	    <STEP>
+	      <PARA>
+		<COMPUTEROUTPUT>
+		  <PROMPT>mysql></PROMPT>
+		  <COMMAND>DELETE FROM user WHERE Host='localhost' AND User='';</COMMAND>
+		</COMPUTEROUTPUT>
+	      </PARA>
+	    </STEP>
+	    <STEP>
+	      <PARA>
+		<COMPUTEROUTPUT>
+		  <PROMPT>mysql></PROMPT>
+		  <COMMAND>UPDATE user SET Password=PASSWORD ('new_password')
+		    WHERE user='root';</COMMAND>
+		</COMPUTEROUTPUT>
+	      </PARA>
+	    </STEP>
+	    <STEP>
+	      <PARA>
+		<COMPUTEROUTPUT>
+		  <PROMPT>mysql></PROMPT>
+		  <COMMAND>GRANT SELECT, INSERT, UPDATE, DELETE,
+		    INDEX, ALTER, CREATE, DROP, REFERENCES
+		    ON bugs.* to bugs@localhost
+		    IDENTIFIED BY 'bugs_password';</COMMAND>
+		</COMPUTEROUTPUT>
+	      </PARA>
+	    </STEP>
+	    <STEP>
+	      <PARA>
+		<COMPUTEROUTPUT>
+		  <PROMPT>mysql></PROMPT>
+		  <COMMAND>FLUSH PRIVILEGES;</COMMAND>
+		</COMPUTEROUTPUT>
+	      </PARA>
+	    </STEP>
+	    <STEP>
+	      <PARA>
+		<COMPUTEROUTPUT>
+		  <PROMPT>mysql></PROMPT>
+		  <COMMAND>create database bugs;</COMMAND>
+		</COMPUTEROUTPUT>
+	      </PARA>
+	    </STEP>
+	    <STEP>
+	      <PARA>
+		<COMPUTEROUTPUT>
+		  <PROMPT>mysql></PROMPT>
+		  <COMMAND>exit</COMMAND>
+		</COMPUTEROUTPUT>
+	      </PARA>
+	    </STEP>
+	    <STEP>
+	      <PARA>
+		<COMPUTEROUTPUT>
+		  <PROMPT>C:></PROMPT>
+		  <COMMAND>C:\mysql\bin\mysqladmin -u root -p reload</COMMAND>
+		</COMPUTEROUTPUT>
+	      </PARA>
+	    </STEP>
+	  </SUBSTEPS>
+	</STEP>
+
+	<STEP>
+	  <PARA>
+	    Configure Bugzilla.  For Win32, this involves editing "defparams.pl"
+	    and "localconfig" to taste.  Running "checksetup.pl" should create
+	    localconfig for you.  Note that getgrnam() doesn't work, and should be
+	    deleted.  Change this line:
+	    "my $webservergid = getgrnam($my_webservergroup); "
+	    to
+	    "my $webservergid = $my_webservergroup; "
+	  </PARA>
+	</STEP>
+
+	<STEP>
+	  <NOTE>
+	    <PARA>
+	      There are several alternatives to Sendmail that will work on Win32.
+	      The one mentioned here is a <EMPHASIS>suggestion</EMPHASIS>, not
+	      a requirement.  Some other mail packages that can work include
+	      <ULINK URL="http://www.blat.net/">BLAT</ULINK>,
+	      <ULINK URL="http://www.geocel.com/windmail/">Windmail</ULINK>,
+	      <ULINK URL="http://www.dynamicstate.com/">Mercury Sendmail</ULINK>,
+	      and the CPAN Net::SMTP Perl module (available in .ppm).
+	      Every option requires some hacking of the Perl scripts for Bugzilla
+	      to make it work.  The option here simply requires the least.
+	    </PARA>
+	  </NOTE>
+	  <PARA>
+	    Download NTsendmail, available from<ULINK URL="http://www.ntsendmail.com/">
+	    www.ntsendmail.com</ULINK>.  In order for it to work, you must set up some
+	    new environment variables (detailed on the ntsendmail home page).  Figuring
+	    out where to put those variables is left as an exercise for the reader.
+	    You must have a "real" mail server which allows you to relay off it
+	    in your $ENV{"NTsendmail"} (which you should probably place in globals.pl)
+	  </PARA>
+	  <PARA>
+	    Once downloaded and installed, modify all open(SENDMAIL) calls to open
+	    "| c:\ntsendmail\ntsendmail -t" instead of "|/usr/lib/sendmail -t".
+	  </PARA>
+	  <NOTE>
+	    <PARA>
+	      We need someone to test this and make sure this works as advertised.
+	    </PARA>
+	  </NOTE>
+	</STEP>
+	<STEP>
+	  <PARA>
+	    Modify globals.pl and CGI.pl to remove the word "encrypt".
+	  </PARA>
+	  <NOTE>
+	    <PARA>
+	      I'm not sure this is all that is involved to remove crypt.  Any
+	      NT Bugzilla hackers want to pipe up?
+	    </PARA>
+	  </NOTE>
+	</STEP>
+	<STEP>
+	  <PARA>
+	    Change all references to "processmail" to "processmail.pl" in
+	    all files, and rename "processmail" to "processmail.pl"
+	  </PARA>
+	  <NOTE>
+	    <PARA>
+	      I really think this may be a change we want to make for
+	      main-tree Bugzilla.  It's painless for the UNIX folks,
+	      and will make the Win32 people happier.
+	    </PARA>
+	  </NOTE>
+	</STEP>
+	<STEP>
+	  <PARA>
+	    Modify the path to perl on the first line (#!) of all files
+	    to point to your Perl installation, and
+	    add "perl" to the beginning of all Perl system calls that
+	    use a perl script as an argument.  This may take you a while.
+	    There is a "setperl.pl" utility to speed part of this procedure,
+	    available in the "Patches and Utilities" section of The Bugzilla Guide.
+	  </PARA>
+	</STEP>
+	<STEP>
+	  <PARA>
+	    In processmail.pl, add "binmode(HANDLE)" before all read() calls.
+	    This may not be necessary, but in some cases the read() under
+	    Win32 doesn't count the EOL's without using a binary read().
+	  </PARA>
+	</STEP>
+      </PROCEDURE>
+
+    </SECTION>
+
+    <SECTION id="addlwintips">
+      <TITLE>Additional Windows Tips</TITLE>
+      <TIP>
+	<PARA>
+	  From Andrew Pearson:
+	  <BLOCKQUOTE>
+	    <PARA>
+	      "You can make Bugzilla work with Personal Web Server for
+	      Windows 98 and higher, as well as for IIS 4.0.  Microsoft has
+	      information available at
+	      <ULINK URL=" http://support.microsoft.com/support/kb/articles/Q231/9/98.ASP">
+		http://support.microsoft.com/support/kb/articles/Q231/9/98.ASP</ULINK>
+	    </PARA>
+	    <PARA>
+	      Basically you need to add two String Keys in the
+	      registry at the following location:
+	    </PARA>
+	    <PARA>
+	      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\ScriptMap
+	    </PARA>
+	    <PARA>
+	      The keys should be called ".pl" and ".cgi", and both
+	      should have a value something like:
+	      <COMMAND>c:/perl/bin/perl.exe "%s" "%s"</COMMAND>
+	    </PARA>
+	    <PARA>
+	      The KB article only talks about .pl, but it goes into
+	      more detail and provides a perl test script.
+	    </PARA>
+	  </BLOCKQUOTE>
+	</PARA>
+      </TIP>
+      <TIP>
+	<PARA>"Brian" had this to add, about upgrading to Bugzilla 2.12 from previous versions:</PARA>
+	<BLOCKQUOTE>
+	  <PARA>
+	    Hi - I am updating bugzilla to 2.12 so I can tell you what I did (after I
+	    deleted the current dir and copied the files in).
+	  </PARA>
+	  <PARA>
+	    In checksetup.pl, I did the following...
+	  </PARA>
+	  <PROCEDURE>
+	    <STEP>
+	      <PROGRAMLISTING>
+my $webservergid = getgrnam($my_webservergroup);
+	      </PROGRAMLISTING>
+	      <PARA>to</PARA>
+	      <PROGRAMLISTING>
+my $webservergid = 'Administrators'		
+	      </PROGRAMLISTING>
+	    </STEP>
+	    <STEP>
+	      <PARA>
+		I then ran checksetup.pl
+	      </PARA>
+	    </STEP>
+	    <STEP>
+	      <PARA>
+		I removed all the encrypt()
+		<EXAMPLE>
+		  <TITLE>Removing encrypt() for Windows NT installations</TITLE>
+		  <PARA>
+		    Replace this:
+		    <PROGRAMLISTING>
+SendSQL("SELECT encrypt(" . SqlQuote($enteredpwd) . ", " .
+    SqlQuote(substr($realcryptpwd, 0, 2)) . ")");
+my $enteredcryptpwd = FetchOneColumn();
+		    </PROGRAMLISTING>
+		    with this:
+		    <PROGRAMLISTING>
+my $enteredcryptpwd = $enteredpwd
+		    </PROGRAMLISTING>
+		    in cgi.pl.
+		  </PARA>
+		</EXAMPLE>
+	      </PARA>
+	    </STEP>
+	    <STEP>
+	      <PARA>
+		I renamed processmail to processmail.pl
+	      </PARA>
+	    </STEP>
+	    <STEP>
+	      <PARA>
+		I altered the sendmail statements to windmail:
+		<PROGRAMLISTING>  
+open SENDMAIL, "|\"C:/General/Web/tools/Windmail 4.0 Beta/windmail\" -t > mail.log";
+		</PROGRAMLISTING>
+	      </PARA>
+	      <PARA>
+		The quotes around the dir is for the spaces. mail.log is for the output
+	      </PARA>
+	    </STEP>
+	  </PROCEDURE>
+	</BLOCKQUOTE>
+      </TIP>
+    </SECTION>
+  </SECTION>
+</CHAPTER>
+
+
+
+
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-namecase-general:t
+sgml-general-insert-case:upper
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
diff --git a/docs/sgml/integration.sgml b/docs/sgml/integration.sgml
new file mode 100644
index 000000000..74ec817f5
--- /dev/null
+++ b/docs/sgml/integration.sgml
@@ -0,0 +1,75 @@
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook V4.1//EN" >
+
+<!-- Keep these tools listings in alphabetical order please. -MPB -->
+
+<chapter id="integration">
+  <title>Integrating Bugzilla with Third-Party Tools</title>
+
+  <section id="bonsai">
+    <title>Bonsai</title>
+    <para>We need Bonsai integration information.</para>
+  </section>
+
+  <section id="cvs">
+    <title>CVS</title>
+    <para>We need CVS integration information</para>
+  </section>
+
+  <section id="scm">
+    <title>Perforce SCM</title>
+    <para>
+      Richard Brooksby created a Perforce integration tool for Bugzilla and TeamTrack.
+      You can find the main project page at
+      <ulink url="http://www.ravenbrook.com/project/p4dti/">
+	http://www.ravenbrook.com/project/p4dti</ulink>.  "p4dti" is now an officially
+      supported product from Perforce, and you can find the "Perforce Public Depot"
+      p4dti page at <ulink url="http://public.perforce.com/public/perforce/p4dti/index.html">
+	http://public.perforce.com/public/perforce/p4dti/index.html</ulink>.
+    </para>
+    <para>
+      Integration of Perforce with Bugzilla, once patches are applied, is fairly seamless.  However,
+      p4dti is a patch against the Bugzilla 2.10 release, not the current 2.12 release.  I anticipate
+      patches for 2.12 will be out shortly.  Check the project page regularly for updates, or
+      take the given patches and patch it manually.  p4dti is designed to support multiple defect
+      trackers, and maintains its own documentation for it.  Please consult the pages linked
+      above for further information.
+    </para>
+    <para>
+      Right now, there is no way to synchronize the Bug ID and the Perforce Transaction Number, or
+      to change the Bug ID to read (PRODUCT).bugID unless you hack it in.  Additionally, if you
+      have synchronization problems, the easiest way to avoid them is to only put the bug
+      information, comments, etc. into Bugzilla, and not into the Perforce change records.
+      They will link anyway; merely reference the bug ID fixed in your change description,
+      and put a comment into Bugzilla
+      giving the change ID that fixed the Bugzilla bug.  It's a process issue, not a technology
+      question.
+    </para>
+  </section>
+
+  <section id="tinderbox">
+    <title>Tinderbox</title>
+    <para>We need Tinderbox integration information</para>
+  </section>
+
+</chapter>
+
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-namecase-general:t
+sgml-general-insert-case:lower
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
+
+
diff --git a/docs/sgml/patches.sgml b/docs/sgml/patches.sgml
new file mode 100644
index 000000000..8d7a72682
--- /dev/null
+++ b/docs/sgml/patches.sgml
@@ -0,0 +1,237 @@
+<!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
+
+<appendix id="patches">
+  <title>Useful Patches and Utilities for Bugzilla</title>		
+
+<section id="setperl">
+    <title>The setperl.csh Utility</title>
+    <para>	
+      You can use the "setperl.csh" utility to quickly and easily
+      change the path to perl on all your Bugzilla files.
+      This is a C-shell script; if you do not have "csh" or "tcsh" in the search
+      path on your system, it will not work!
+    </para>	
+    <procedure>
+      <step>
+	<para>
+	  Download the "setperl.csh" utility to your Bugzilla
+	  directory and make it executable.
+	</para>
+	<substeps>
+	  <step>
+	    <para>
+	      <computeroutput>
+		<prompt>bash#</prompt>
+		<command>cd /your/path/to/bugzilla</command>
+	      </computeroutput>
+	    </para>
+	  </step>
+	  <step>
+	  <para>
+	      <computeroutput>
+		<prompt>bash#</prompt>
+		<command>wget -O setperl.csh 'http://bugzilla.mozilla.org/showattachment.cgi?attach_id=10795'</command>
+	      </computeroutput>
+	    </para>
+	  </step>
+	<step>
+	    <para>
+	      <computeroutput>
+		<prompt>bash#</prompt>
+		<command>chmod u+x setperl.csh</command>
+	      </computeroutput>
+	    </para>
+	  </step>
+      </substeps>
+      </step>
+      <step>
+	<para>
+	  Prepare (and fix) Bugzilla file permissions.
+	</para>
+	<substeps>
+	  <step>
+	    <para>
+	      <computeroutput>
+		<prompt>bash#</prompt>
+		<command>chmod u+w *</command>
+	      </computeroutput>
+	    </para>
+	  </step>
+	  <step>
+	  <para>
+	      <computeroutput>
+		<prompt>bash#</prompt>
+		<command>chmod u+x duplicates.cgi</command>
+	      </computeroutput>
+	    </para>
+	  </step>
+	  <step>
+	    <para>
+	      <computeroutput>
+		<prompt>bash#</prompt>
+		<command>chmod a-x bug_status.html</command>
+	      </computeroutput>
+	    </para>
+	  </step>
+	</substeps>
+      </step>
+      <step>
+	<para>
+	  Run the script:
+	</para>
+	<para>
+	  <computeroutput>
+	    <prompt>bash#</prompt>
+	    <command>./setperl.csh /your/path/to/perl</command>
+	  </computeroutput>
+<example>
+	    <title>Using Setperl to set your perl path</title>
+	    <para>
+	      <computeroutput>
+	      <prompt>bash#</prompt>
+	      <command>./setperl.csh /usr/bin/perl</command>
+	      </computeroutput>
+            </para>
+	  </example>
+	</para>
+      </step>
+    </procedure>
+  </section>
+
+  <section id="cmdline">
+    <title>Command-line Bugzilla Queries</title>
+    <para>
+      Users can query Bugzilla from the command line using
+      this suite of utilities.
+    </para>
+    <para>
+      The query.conf file contains the mapping from options to field
+      names and comparison types.  Quoted option names are "grepped" for, so
+      it should be easy to edit this file.  Comments (#) have no effect; you
+      must make sure these lines do not contain any quoted "option"
+    </para>
+    <para>
+      buglist is a shell script which submits a Bugzilla query and writes the
+      resulting HTML page to stdout.  It supports both short options,
+      (such as "-Afoo" or "-Rbar") and long options (such as
+      "--assignedto=foo" or "--reporter=bar").  If the first character
+      of an option is not "-", it is treated as if it were prefixed
+      with "--default=".
+    </para>
+    <para>
+      The columlist is taken from the COLUMNLIST environment variable.
+      This is equivalent to the "Change Columns" option when you list
+      bugs in buglist.cgi.  If you have already used Bugzilla, use
+      <command>grep COLUMLIST ~/.netscape/cookies</command> to see
+      your current COLUMNLIST setting.
+    </para>
+    <para>
+      bugs is a simple shell script which calls buglist and extracts
+      the bug numbers from the output.  Adding the prefix
+      "http://bugzilla.mozilla.org/buglist.cgi?bug_id="
+      turns the bug list into a working link if any bugs are found.
+      Counting bugs is easy.  Pipe the results through
+      <command>sed -e 's/,/ /g' | wc | awk '{printf $2 "\n"}'</command>
+    </para>
+    <para>
+      Akkana says she has good results piping buglist output through
+      <command>w3m -T text/html -dump</command>
+    </para>
+    <procedure>
+      <step>
+	<para>
+	  Download three files:
+	</para>
+	<substeps>
+	  <step>
+	    <para>
+	      <computeroutput>
+		<prompt>bash$</prompt>
+		<command>wget -O query.conf 'http://bugzilla.mozilla.org/showattachment.cgi?attach_id=26157'</command>
+	      </computeroutput>
+	    </para>
+	  </step>
+	  <step>
+	    <para>
+	      <computeroutput>
+		<prompt>bash$</prompt>
+		<command>wget -O buglist 'http://bugzilla.mozilla.org/showattachment.cgi?attach_id=26944'</command>
+	      </computeroutput>
+	    </para>
+	  </step>
+	  <step>
+	    <para>
+	      <computeroutput>
+		<prompt>bash#</prompt>
+		<command>wget -O bugs 'http://bugzilla.mozilla.org/showattachment.cgi?attach_id=26215'</command>
+	      </computeroutput>
+	    </para>
+	  </step>
+	</substeps>
+      </step>
+      <step>
+	<para>
+	  Make your utilities executable:
+	  <computeroutput>
+	    <prompt>bash$</prompt>
+	    <command>chmod u+x buglist bugs</command>
+	  </computeroutput>
+	</para>
+      </step>
+    </procedure>
+  </section>
+
+  <section id="quicksearch">
+    <title>The Quicksearch Utility</title>
+    <para>
+      Quicksearch is a new, experimental feature of the 2.12 release.
+      It consist of two Javascript files, "quicksearch.js" and "localconfig.js",
+      and two documentation files, "quicksearch.html" and "quicksearchhack.html"
+    </para>
+    <para>
+      The index.html page has been updated to include the QuickSearch text box.
+    </para>
+    <para>
+      To take full advantage of the query power, the Bugzilla maintainer must
+      edit "localconfig.js" according to the value sets used in the local installation.
+    </para>
+    <para>
+      Currently, keywords must be hard-coded in localconfig.js.  If they are not,
+      keywords are not automatically recognized.  This means, if localconfig.js
+      is left unconfigured, that searching for a bug with the "foo" keyword
+      will only find bugs with "foo" in the summary, status whiteboard, product or
+      component name, but not those with the keyword "foo".
+    </para>
+    <para>
+      Workarounds for Bugzilla users:
+      <simplelist>
+	<member>search for '!foo' (this will find only bugs with the keyword "foo"</member>
+	<member>search 'foo,!foo' (equivalent to 'foo OR keyword:foo')</member>
+      </simplelist>
+    </para>
+    <para>
+      When this tool is ported from client-side JavaScript to server-side Perl,
+      the requirement for hard-coding keywords can be fixed.
+      <ulink url="http://bugzilla.mozilla.org/show_bug.cgi?id=70907">This bug</ulink>
+      has details.
+    </para>
+  </section>
+
+</appendix>
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-namecase-general:t
+sgml-general-insert-case:lower
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
diff --git a/docs/sgml/requiredsoftware.sgml b/docs/sgml/requiredsoftware.sgml
new file mode 100644
index 000000000..2d819ab62
--- /dev/null
+++ b/docs/sgml/requiredsoftware.sgml
@@ -0,0 +1,82 @@
+<!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
+
+<appendix id="downloadlinks">
+  <title>Software Download Links</title>
+  <para>
+    All of these sites are current as of April, 2001.  Hopefully
+    they'll stay current for a while.
+  </para>
+  <para>
+    Apache Web Server: <ulink url="http://www.apache.org/">http://www.apache.org</ulink>
+    Optional web server for Bugzilla, but recommended because of broad user base and support.
+  </para>
+  <para>
+    Bugzilla: <ulink url="http://www.mozilla.org/projects/bugzilla/">
+      http://www.mozilla.org/projects/bugzilla/</ulink>
+  </para>
+  <para>
+    MySQL: <ulink url="http://www.mysql.org/">http://www.mysql.org/</ulink>
+  </para>
+  <para>
+    Perl: <ulink url="http://www.perl.org">http://www.perl.org/</ulink>
+  </para>
+  <para>
+    CPAN: <ulink url="http://www.cpan.org/">http://www.cpan.org/</ulink>
+  </para>
+  <para>
+    DBI Perl module: 
+    <ulink url="ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/DBI/">
+      ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/DBI/</ulink>
+  </para>
+  <para>
+    Data::Dumper module: 
+    <ulink url="ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/Data/">
+      ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/Data/</ulink>
+  </para>
+  <para>
+    MySQL related Perl modules:
+    <ulink url="ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/Mysql/">
+      ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/Mysql/</ulink>
+  </para>
+  <para>
+    TimeDate Perl module collection:
+    <ulink url="ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/Date/">
+      ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/Date/</ulink>
+  </para>
+  <para>
+    GD Perl module:
+    <ulink url="ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/GD/">
+      ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/GD/</ulink>
+    Alternately, you should be able to find the latest version of
+    GD at <ulink url="http://www.boutell.com/gd/">http://www.boutell.com/gd/</ulink>
+  </para>
+  <para>
+    Chart::Base module:
+    <ulink url="ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/Chart/">
+    ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/Chart/</ulink>
+  </para>
+  <para>
+    LinuxDoc Software: 
+    <ulink url="http://www.linuxdoc.org/">http://www.linuxdoc.org/</ulink>
+    (for documentation maintenance)
+  </para>
+
+</appendix>
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-namecase-general:t
+sgml-general-insert-case:lower
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
diff --git a/docs/sgml/using.sgml b/docs/sgml/using.sgml
new file mode 100644
index 000000000..bc8159835
--- /dev/null
+++ b/docs/sgml/using.sgml
@@ -0,0 +1,877 @@
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
+
+<!-- TOC
+Chapter: Using Bugzilla
+ Create an account
+ Logging in
+ Setting up preferences
+  Account Settings
+  Email Settings
+  Page Footer
+  Permissions
+ Life cycle of a bug
+ Creating a bug
+  Checking for duplicates
+  Overview of all bug fields
+  Setting bug permissions
+ The Query Interface
+  Standard Queries
+  Email Queries
+  Boolean Queries
+  Regexp Queries
+ The Query Results
+  Changing Columns
+  Changing sorting order
+  Mass changes 
+ Miscellaneous usage hints
+
+-->
+
+<chapter id="using">
+<title>Using Bugzilla</title>
+  <epigraph>
+    <para>
+      What, Why, How, & What's in it for me?
+    </para>
+  </epigraph>
+
+  <section id="whatis">
+    <title>What is Bugzilla?</title>
+    <para>
+      Bugzilla is one example of a class of programs called "Defect Tracking Systems",
+      or, more commonly, "Bug-Tracking Systems".  Defect Tracking Systems allow individual or
+      groups of developers to keep track of outstanding bugs in their product effectively.
+      Bugzilla was originally written by Terry Weissman in a programming language called
+      "TCL", to replace a crappy
+      bug-tracking database used internally for Netscape Communications.  Terry later ported
+      Bugzilla to
+      Perl from TCL, and in Perl it remains to this day.
+      Most commercial defect-tracking software vendors at the
+      time charged enormous licensing fees, and Bugzilla quickly became a favorite of the
+      open-source crowd (with its genesis in the open-source browser project, Mozilla).  It
+      is now the de-facto standard defect-tracking system against which all others are
+      measured.
+    </para>
+    <para>
+      Bugzilla has matured immensely, and now boasts many advanced features.  These include:
+      <itemizedlist>
+	<listitem>
+	  <para>
+	    integrated, product-based granular security schema
+	  </para>
+	</listitem>
+	<listitem>
+	  <para>
+	    inter-bug dependencies and dependency graphing
+	  </para>
+	</listitem>
+	<listitem>
+	  <para>
+	    advanced reporting capabilities
+	  </para>
+	</listitem>
+	<listitem>
+	  <para>
+	    a robust, stable RDBMS back-end
+	  </para>
+	</listitem>
+	<listitem>
+	  <para>
+	    extensive configurability
+	  </para>
+	</listitem>
+	<listitem>
+	  <para>
+	    a very well-understood and well-thought-out natural bug resolution protocol
+	  </para>
+	</listitem>
+	<listitem>
+	  <para>
+	    email, XML, and HTTP APIs
+	  </para>
+	</listitem>
+	<listitem>
+	  <para>
+	    available integration with automated software configuration management systems, including
+	    Perforce and CVS.
+	  </para>
+	</listitem>
+	<listitem>
+	  <para>
+	    too many more features to list
+	  </para>
+	</listitem>
+      </itemizedlist>
+    </para>
+    <para>
+      Despite its current robustness and popularity, however, Bugzilla
+      faces some near-term challenges, such as reliance on a single database, a lack of
+      abstraction of the user interface and program logic, verbose email bug
+      notifications, a powerful but daunting query interface, little reporting configurability,
+      problems with extremely large queries, some unsupportable bug resolution options,
+      no internationalization, and dependence on some nonstandard libraries.
+    </para>
+    <para>
+      Some recent headway has been made on the query front, however.  If you are using the latest
+      version of Bugzilla, you should see a "simple search" form on the default front page of
+      your Bugzilla install.  Type in two or three search terms and you should pull up some
+      relevant information.  This is also available as "queryhelp.cgi".
+    </para>
+    <para>
+      Despite these small problems, Bugzilla is very hard to beat.  It is under <emphasis>very</emphasis>
+      active development to address the current issues, and a long-awaited overhaul in the form
+      of Bugzilla 3.0 is expected sometime later this year.
+    </para>
+  </section>
+  
+  <section id="why">
+    <title>Why Should We Use Bugzilla?</title>
+    <epigraph>
+      <para>
+	No, Who's on first...
+      </para>
+    </epigraph>
+    <para>
+      For many years, defect-tracking software has remained principally the domain
+      of large software development houses.  Even then, most shops never bothered
+      with bug-tracking software, and instead simply relied on shared lists and
+      email to monitor the status of defects.  This procedure is error-prone and
+      tends to cause those bugs judged least significant by developers to be
+      dropped or ignored
+    </para>
+    <para>
+      These days, many companies are finding that integrated defect-tracking
+      systems reduce downtime, increase productivity, and raise customer 
+      satisfaction with their systems.  Along with full disclosure, an open
+      bug-tracker allows manufacturers to keep in touch with their clients
+      and resellers, to communicate about problems effectively throughout
+      the data management chain.  Many corporations have also discovered that
+      defect-tracking helps reduce costs by providing IT support accountability,
+      telephone support knowledge bases, and a common, well-understood system
+      for accounting for unusual system or software issues.
+    </para>
+    <para>
+      But why should <emphasis>you</emphasis> use Bugzilla?
+    </para>
+    <para>
+      Bugzilla is very adaptable to various situations.  Known uses currently
+      include IT support queues, Systems Administration deployment management,
+      chip design and development problem tracking (both pre-and-post fabrication),
+      and software and hardware bug tracking for luminaries such as Redhat, Loki software,
+      Linux-Mandrake, and VA Systems.  Combined with systems such as CVS, Bonsai,
+      or Perforce SCM, Bugzilla provides a powerful, easy-to-use  solution to
+      configuration management and replication problems
+    </para>
+    <para>
+      Bugzilla can dramatically increase the productivity and accountability
+      of individual employees by providing a documented workflow and positive
+      feedback for good performance.  How many times do you wake up in the
+      morning, remembering that you were supposed to do *something* today,
+      but you just can't quite remember?  Put it in Bugzilla, and you have a record
+      of it from which you can extrapolate milestones, predict product versions
+      for integration, and by using Bugzilla's e-mail integration features
+      be able to follow the discussion trail that led to critical decisions.
+    </para>
+    <para>
+      Ultimately, Bugzilla puts the power in your hands to improve your value
+      to your employer or business while providing a usable framework for your natural
+      attention to detail and knowledge store to flourish.
+    </para>
+  </section>
+  
+  <section id="how">
+    <title>How do I use Bugzilla?</title>
+    <epigraph>
+      <para>
+	Hey!  I'm Woody!  Howdy, Howdy, Howdy!
+      </para>
+    </epigraph>
+    
+    <para>
+      Bugzilla is a large, complex system.  Describing how to use it
+      requires some time.  If you are only interested in installing or administering
+      a Bugzilla installation, please consult the Installing and Administering
+      Bugzilla portions of this Guide.  This section is principally aimed towards
+      developing end-user mastery of Bugzilla, so you may fully enjoy the benefits
+      afforded by using this reliable open-source bug-tracking software.
+    </para>
+    <para>
+      Throughout this portion of the Guide, we will refer to user account
+      options available at the Bugzilla test installation,
+      <ulink url="http://landfill.tequilarista.org/">
+      landfill.tequilarista.org</ulink>.
+      <note>
+	<para>
+	  Some people have run into difficulties completing this tutorial.  If
+	  you run into problems, please check the updated, online documentation available
+	  at <ulink url="http://www.trilobyte.net/barnsons/">http://www.trilobyte.net/barnsons</ulink>.
+	  If you're still stumped, please subscribe to the newsgroup and provide details of exactly
+	  what's stumping you!  If enough people complain, I'll have to fix it in the next
+	  version of this Guide.  You can subscribe to the newsgroup at
+	  <ulink url="news://news.mozilla.org/netscape.public.mozilla.webtools">
+	  news://news.mozilla.org/netscape.public.mozilla.webtools</ulink>
+	</para>
+ 
+      </note>
+      Although Landfill serves as a great introduction to Bugzilla, it does not offer
+      all the options you would have as a user on your own installation of Bugzilla,
+      nor can it do more than serve as a general introduction to Bugzilla.  Additionally,
+      Landfill often runs cutting-edge versions of Bugzilla for testing, so some things
+      may work slightly differently than mentioned here.
+    </para>
+    
+    <section id="myaccount">
+      <title>Create a Bugzilla Account</title>
+      <para>
+	First thing's first!  If you want to use Bugzilla, first you need to create
+	an account.  Consult with the administrator responsible for your installation
+	of Bugzilla for the URL you should use to access it.
+	If you're test-driving the end-user Bugzilla experience, use this URL:
+	<ulink url="http://landfill.tequilarista.org/mozilla/bugzilla/">
+	  http://landfill.tequilarista.org/mozilla/bugzilla/</ulink>
+      </para>
+      <orderedlist>
+	<listitem>
+	  <para>
+	    Click the "Open a new Bugzilla account" link.
+	  </para>
+	</listitem>
+	<listitem>
+	  <para>
+	    Enter your "E-mail address" and "Real Name" (or whatever name you want to call yourself)
+	    in the spaces provided, then select the "Create Account" button.
+	  </para>
+	</listitem>
+	<listitem>
+	  <para>
+	    Within 5-10 minutes, you should receive an email to the address you provided above,
+	    which contains your login name (generally the same as the email address), and
+	    a password you can use to access your account.  This password is randomly generated,
+	    and should be changed at your nearest opportunity (we'll go into how to do it later).
+	  </para>
+	</listitem>
+	<listitem>
+	  <para>
+	    Click the "Log In" link in the yellow area at the bottom of the page in your browser,
+	    then enter your "E-mail address" and "Password" you just received into the spaces provided,
+	    and select "Login".
+	    <note>
+	      <para>
+		If you ever forget your password, you can come back to this page, enter your
+		"E-mail address", then select the "E-mail me a password" button to have your password
+		mailed to you again so that you can login.
+	      </para>
+	    </note>
+	    <caution>
+	      <para>
+		Many modern browsers include an "Auto-Complete" or "Form Fill" feature to
+		remember the user names and passwords you type in at many sites.  Unfortunately,
+		sometimes they attempt to "guess" what you will put in as your password, and guess
+		wrong.  If you notice a text box is already filled out, please overwrite the contents
+		of the text box so you can be sure to input the correct information.
+	      </para>
+	    </caution>
+	  </para>
+	</listitem>
+      </orderedlist>
+      <para>
+	Congratulations!  If you followed these directions, you now are the
+	proud owner of a user account on landfill.tequilarista.org (Landfill) or
+	your local Bugzilla install.  You should now see in your browser a
+	page called the "Bugzilla Query Page".  It may look daunting, but
+	with this Guide to walk you through it, you will master it in no time.
+      </para>
+    </section>
+    
+    <section id="query">
+      <title>The Bugzilla Query Page</title>
+      <para>
+	The Bugzilla Query Page is the heart and soul of Bugzilla.  It is the master
+	interface where you can find any bug report, comment, or patch currently in the Bugzilla
+	system.  We'll go into how to create your own bug report later on.
+      </para>
+      <para>
+	There are efforts underway to simplify query usage.  If you have a local installation
+	of Bugzilla 2.12 or higher, you should have "quicksearch.html" available
+	to use and simplify your searches.  There is also, or shortly will be, a helper
+	for the query interface, called "queryhelp.cgi".  Landfill tends to run the latest code,
+	so these two utilities should be available there for your perusal.
+      </para>
+      <para>
+	At this point, please visit the main Bugzilla site,
+	<ulink url="http://bugzilla.mozilla.org/query.cgi">
+	bugzilla.mozilla.org</ulink>, to see a more fleshed-out query page.
+      </para>
+      <para>
+	The first thing you need to notice about the Bugzilla Query Page is that
+	nearly every box you see on your screen has a hyperlink nearby, explaining what
+	it is or what it does.  Near the upper-left-hand corner of your browser window
+	you should see the word "Status" underlined.  Select it.
+      </para>
+      <para>
+	Notice the page that popped up?  Every underlined word you see on your screen
+	is a hyperlink that will take you to context-sensitive help.
+	Click around for a while, and learn what everything here does.  To return
+	to the query interface after pulling up a help page, use the "Back" button in
+	your browser.
+      </para>
+      <para>
+	I'm sure that after checking out the online help, you are now an Expert
+	on the Bugzilla Query Page.  If, however, you feel you haven't mastered it yet,
+	let me walk you through making a few successful queries to find out what there
+	are in the Bugzilla bug-tracking system itself.
+      </para>
+      <orderedlist>
+	<listitem>
+	  <para>
+	    Ensure you are back on the "Bugzilla Query Page"
+	    Do nothing in the boxes marked "Status", "Resolution", "Platform", "OpSys",
+	    "Priority", or "Severity".  The default query for "Status" is to find all bugs that
+	    are NEW, ASSIGNED, or REOPENED, which is what we want.  If you don't select anything
+	    in the other 5 scrollboxes there, then you are saying that "any of these are OK";
+	    we're not locking ourselves into only finding bugs on the "DEC" Platform, or "Windows 95"
+	    OpSys (Operating System).  You're smart, I think you have it figured out.
+	  </para>
+	  <para>
+	    Basically, selecting <emphasis>anything</emphasis> on the query page narrows your search
+	    down.  Leaving stuff unselected, or text boxes unfilled, broadens your search!
+	  </para>
+	</listitem>
+
+	<listitem>
+	  <para>
+	    You see the box immediately below the top six boxes that contains an "Email" text box, 
+	    with the words "matching as", a drop-down selection box, then some checkboxes with
+	    "Assigned To" checked by default?  This allows you to filter your search down based upon
+	    email address.  Let's put my email address in there, and see what happens.
+	  </para>
+	  <para>
+	    Type "barnboy@trilobyte.net" in the top Email text box.
+	  </para>
+	</listitem>
+
+	<listitem>
+	  <para>
+	    Let's narrow the search some more.  Scroll down until you find the box with the word
+	    "Program" over the top of it.  This is where we can narrow our search down to only
+	    specific products (software programs or product lines) in our Bugzilla database.
+	    Please notice the box is a <emphasis>scrollbox</emphasis>.  Using the down arrow on the
+	    scrollbox, scroll down until you can see an entry called "Webtools".  Select this entry.
+	  </para>
+	</listitem>
+	<listitem>
+	  <para>
+	    Did you notice that some of the boxes to the right changed when you selected "Webtools"?
+	    Every Program (or Product) has different Versions, Components, and Target Milestones associated
+	    with it.  A "Version" is the number of a software program.
+	    <example>
+	      <title>Some Famous Software Versions</title>
+	      <informalexample>
+		<para>
+		  Do you remember the hype in 1995 when Microsoft Windows 95(r) was released?
+		  It may have been several years
+		  ago, but Microsoft(tm) spent over $300 Million advertising this new Version of their
+		  software.  Three years later, they released Microsoft Windows 98(r),
+		  another new version, to great fanfare, and then in 2000 quietly 
+		  released Microsoft Windows ME(Millenium Edition)(r). 
+		</para>
+		<para>
+		  Software "Versions" help a manufacturer differentiate
+		  their current product from their
+		  previous products.  Most do not identify their products
+		  by the year they were released.
+		  Instead, the "original" version of their software will
+		  often be numbered "1.0", with
+		  small bug-fix releases on subsequent tenths of a digit.  In most cases, it's not
+		  a decimal number; for instance, often 1.9 is an <emphasis>older</emphasis> version
+		  of the software than 1.11,
+		  but is a <emphasis>newer</emphasis> version than 1.1.1.
+		</para>
+		<para>
+		  In general, a "Version" in Bugzilla should refer to 
+		  <emphasis>released</emphasis>
+		  products, not products that have not yet been released 
+		  to the public.  Forthcoming products
+		  are what the Target Milestone field is for.
+		</para>
+	      </informalexample>
+	    </example>
+	  </para>
+	  <para>
+	    A "Component" is a piece of a Product.
+	    It may be a standalone program, or some other logical
+	    division of a Product or Program. 
+	    Normally, a Component has a single Owner, who is responsible
+	    for overseeing efforts to improve that Component.
+	    <example>
+	      <title>Mozilla Webtools Components</title>
+	      <informalexample>
+		<para>
+		  Mozilla's "Webtools" Product is composed of several pieces (Components):
+		  <simplelist>
+		    <member><emphasis>Bonsai</emphasis>,
+		      a tool to show recent changes to Mozilla</member>
+		    <member><emphasis>Bugzilla</emphasis>,
+		      a defect-tracking tool</member>
+		    <member><emphasis>Build</emphasis>,
+		      a tool to automatically compile source code
+		      into machine-readable form</member>
+		    <member><emphasis>Despot</emphasis>,
+		      a program that controls access to the other Webtools</member>
+		    <member><emphasis>LXR</emphasis>,
+		      a utility that automatically marks up text files
+		    to make them more readable</member>
+		    <member><emphasis>MozBot</emphasis>,
+		      a "robot" that announces changes to Mozilla in Chat</member>
+		    <member><emphasis>TestManager</emphasis>,
+		      a tool to help find bugs in Mozilla</member>
+		    <member><emphasis>Tinderbox</emphasis>,
+		      which displays reports from Build</member>
+		  </simplelist>
+		</para>
+		<para>
+		  A different person is responsible for each of these Components.
+		  Tara Hernandez keeps
+		  the "Bugzilla" component up-to-date.
+		</para>
+	      </informalexample>
+	    </example>
+	  </para>
+	  <para>
+	    A "Milestone", or "Target Milestone" is a often a planned future "Version" of a
+	    product.  In many cases, though, Milestones simply represent significant dates for
+	    a developer.  Having certain features in your Product is frequently
+	    tied to revenue (money)
+	    the developer will receive if the features work by the time she 
+	    reaches the Target Milestone.
+	    Target Milestones are a great tool to organize your time.
+	    If someone will pay you $100,000 for
+	    incorporating certain features by a certain date,
+	    those features by that Milestone date become
+	    a very high priority.  Milestones tend to be highly malleable creatures,
+	    though, that appear
+	    to be in reach but are out of reach by the time the important day arrives.
+	  </para>
+	  <para>
+	    The Bugzilla Project has set up Milestones for future 
+	    Bugzilla versions 2.14, 2.16, 2.18, 3.0, etc.  However,
+	    a Target Milestone can just as easily be a specific date,
+	    code name, or weird alphanumeric
+	    combination, like "M19".
+	  </para>
+	</listitem>
+
+	<listitem>
+	  <para>
+	    OK, now let's select the "Bugzilla" component from its scrollbox.
+	  </para>
+	</listitem>
+	<listitem>
+	  <para>
+	    Skip down the page a bit -- do you see the "submit query" button?
+	    Select it, and let's run
+	    this query!
+	  </para>
+	</listitem>
+	<listitem>
+	  <para>
+	    Congratulations!  You've completed your first Query, and have before you the Bug List
+	    of the author of this Guide, Matthew P. Barnson (barnboy@trilobyte.net).  If I'm
+	    doing well,
+	    you'll have a cryptic "Zarro Boogs Found" message on your screen.  It is just
+	    a happy hacker's way of saying "Zero Bugs Found".  However, I am fairly certain I will
+	    always have some bugs assigned to me that aren't done yet,
+	    so you won't often see that message!
+	  </para>
+	</listitem>
+      </orderedlist>
+      <para>
+	I encourage you to click the bug numbers in the left-hand column and examine
+	my bugs.  Also notice that if you click the underlined 
+	links near the top of this page, they do
+	not take you to context-sensitive help here,
+	but instead sort the columns of bugs on the screen!
+	When you need to sort your bugs by priority, severity,
+	or the people they are assigned to, this
+	is a tremendous timesaver.
+      </para>
+      <para>
+	A couple more interesting things about the Bug List page:
+	<simplelist>
+	  <member><emphasis>Change Columns</emphasis>:
+	    by selecting this link, you can show all kinds
+	    of information in the Bug List</member>
+	  <member><emphasis>Change several bugs at once</emphasis>:
+	    If you have sufficient rights to change all
+	    the bugs shown in the Bug List, you can mass-modify them.
+	    This is a big time-saver.</member>
+	  <member><emphasis>Send mail to bug owners</emphasis>:
+	    If you have many related bugs, you can request
+	    an update from every person who owns the bugs in
+	    the Bug List asking them the status.</member>
+	  <member><emphasis>Edit this query</emphasis>:
+	    If you didn't get exactly the results you were looking for,
+	    you can return to the Query page through this link and make
+	    small revisions to the query you just made so
+	    you get more accurate results.</member>
+	</simplelist>
+      </para>
+      <note>
+	<para>
+	  There are many more options to the Bugzilla Query Page 
+	  and the Bug List than I have shown you.
+	  But this should be enough for you to learn to get around.
+	  I encourage you to check out the
+	  <ulink url="http://www.mozilla.org/bugs/">Bugzilla Home Page</ulink>
+	  to learn about the Anatomy
+	  and Life Cycle of a Bug before continuing.
+	</para>
+      </note>
+    </section>
+    
+    
+    <section id="bugreports">
+      <title>Creating and Managing Bug Reports</title>
+      <epigraph>
+	<para>And all this time, I thought we were taking bugs <emphasis>out</emphasis>...</para>
+      </epigraph>
+      
+      <section id="bug_writing">
+	<title>Writing a Great Bug Report</title>
+	<para>
+	  Before we plunge into writing your first bug report, I encourage you to read 
+	  <ulink url="http://www.mozilla.org/quality/bug-writing-guidelines.html">Mozilla.org's Bug
+	    Writing Guidelines</ulink>.  While some of the advice is Mozilla-specific, the basic
+	  principles of reporting Reproducible, Specific bugs, isolating the Product you are
+	  using, the Version of the Product, the Component which failed, the Hardware Platform, and
+	  Operating System you were using at the time of the failure go a long way toward ensuring accurate,
+	  responsible fixes for the bug that bit you.
+	</para>
+	<para>
+	  While you are at it, why not learn how to find previously reported bugs?  Mozilla.org
+	  has published a great tutorial on finding duplicate bugs, available at
+	  <ulink url="http://www.mozilla.org/quality/help/beginning-duplicate-finding.html">
+	    http://www.mozilla.org/quality/help/beginning-duplicate-finding.html</ulink>.
+	</para>
+	<para>
+	  I realize this was a lot to read.  However, understanding the mentality of writing
+	  great bug reports will help us on the next part!
+	</para>
+	<orderedlist>
+	  <listitem>
+	    <para>
+	      Go back to <ulink url="http://landfill.tequilarista.org/mozilla/bugzilla/">
+		http://landfill.tequilarista.org/mozilla/bugzilla/</ulink>
+	      in your browser.
+	    </para>
+	  </listitem>
+	  <listitem>
+	    <para>
+	      Select the 
+	      <ulink url="http://landfill.tequilarista.org/mozilla/bugzilla/enter_bug.cgi">
+		Enter a new bug report</ulink> link.
+	    </para>
+	  </listitem>
+	  <listitem>
+	    <para>
+	      Select a product.
+	    </para>
+	  </listitem>
+	  <listitem>
+	    <para>
+	      Now you should be at the "Enter Bug" form.
+	      The "reporter" should have been automatically filled out
+	      for you (or else Bugzilla prompted you to Log In again
+	      -- you did keep the email with your username
+	      and password, didn't you?).
+	    </para>
+	  </listitem>
+	  <listitem>
+	    <para>
+	      Select a Component in the scrollbox.
+	    </para>
+	  </listitem>
+	  <listitem>
+	    <para>
+	      Bugzilla should have made reasonable guesses, based upon your browser,
+	      for the "Platform" and "OS" drop-down
+	      boxes.  If those are wrong, change them -- if you're on an SGI box
+	      running IRIX, we want to know!
+	    </para>
+	  </listitem>
+	  <listitem>
+	    <para>
+	      Fill in the "Assigned To" box with the email address you provided earlier. 
+	      This way you don't end up sending copies of your bug to lots of other people,
+	      since it's just a test bug.
+	    </para>
+	  </listitem>
+	  <listitem>
+	    <para>
+	      Leave the "CC" text box blank. 
+	      Fill in the "URL" box with "http://www.mozilla.org".
+	    </para>
+	  </listitem>
+	  <listitem>
+	    <para>
+	      Enter "The Bugzilla Guide" in the Summary text box,
+	      and place any comments you have on this
+	      tutorial, or the Guide in general, into the Description box.
+	    </para>
+	  </listitem>
+	</orderedlist>
+	<para>
+	  Voila!  Select "Commit" and send in your bug report!
+	  Next we'll look at resolving bugs.
+	</para>
+      </section>
+
+      <section id="bug_manage">
+	<title>Managing your Bug Reports</title>
+	<para>
+	  OK, you should have a link to the bug you just created near the top of your page.
+	  It should say
+	  "Bug XXXX posted", with a link to the right saying "Back to BUG# XXXX".
+	  Select this link.
+	</para>
+	<orderedlist>
+	  <listitem>
+	    <para>
+	      Scroll down a bit on the subsequent page,
+	      until you see the "Resolve bug, changing resolution to (dropdown box).
+	      Normally, you would
+	      "Accept bug (change status to ASSIGNED)", fix it, and then resolve.
+	      But in this case, we're
+	      going to short-circuit the process because this wasn't a real bug.
+	      Change the dropdown next to
+	      "Resolve Bug" to "INVALID", make sure the radio button is
+	      marked next to "Resolve Bug", then
+	      click "Commit".
+	    </para>
+	  </listitem>
+	  <listitem>
+	    <para>
+	      Hey!  It said it couldn't take the change in a big red box!
+	      That's right, you must specify
+	      a Comment in order to make this change.  Select the "Back"
+	      button in your browser, add a
+	      Comment, then try Resolving the bug with INVALID status again.
+	      This time it should work.
+	    </para>
+	  </listitem>
+	</orderedlist>
+	<para>
+	  You have now learned the basics of Bugzilla navigation,
+	  entering a bug, and bug maintenance.
+	  I encourage you to explore these features, and see what you can do with them!
+	  We'll spend no more time on individual Bugs or Queries from this point on, so you are
+	  on your own there.
+	</para>
+	<para>
+	  But I'll give a few last hints!
+	</para>
+	<para>
+	  There is a <ulink url="http://bugzilla.mozilla.org/help.html">CLUE</ulink>
+	  on the Query page
+	  that will teach you more how to use the form.
+	</para>
+	<para>
+	  If you click the hyperlink on the
+	  <ulink url="http://bugzilla.mozilla.org/describecomponents.cgi">Component</ulink>
+	  box of the Query page, you will be presented a form that will describe what all
+	  the components are.
+	</para>
+	<para>
+	  Possibly the most powerful feature of the Query page is the 
+	  <ulink url="http://bugzilla.mozilla.org/booleanchart.html">Boolean Chart</ulink> section.
+	  It's a bit confusing to use the first time, but can provide unparalleled
+	  flexibility in your queries,
+	  allowing you to build extremely powerful requests.
+	</para>
+	<para>
+	  Finally, you can build some nifty 
+	  <ulink url="http://bugzilla.mozilla.org/reports.cgi">Reports</ulink>
+	  using the "Bug Reports" link near the bottom of the query page, and also
+	  available via the "Reports" link
+	  at the footer of each page.
+	</para>
+      </section>
+    </section>
+
+  </section>
+
+  <section id="init4me">
+    <title>What's in it for me?</title>
+    <epigraph>
+      <para>
+	Indiana, it feels like we walking on fortune cookies!
+      </para>
+      <para>
+	These ain't fortune cookies, kid...
+      </para>
+    </epigraph>
+    <para>
+      Customized User Preferences offer tremendous versatility to
+      your individual Bugzilla experience.
+      Let's plunge into what you can do!  The first step is to click
+      the "Edit prefs" link at the footer of each page once you
+      have logged in to
+      <ulink url="http://landfill.tequilarista.org/mozilla/bugzilla/query.cgi?GoAheadAndLogIn=1">
+      Landfill</ulink>.
+    </para>
+    <section id="accountsettings">
+      <title>Account Settings</title>
+      <para>
+	On this page, you can change your basic Account Settings,
+	including your password and full name.
+	For security reasons, in order to change anything on this page you
+	must type your <emphasis>current</emphasis>
+	password into the "Old Password" field. 
+	If you wish to change your password, type the new password you
+	want into the "New Password" field and again into the "Re-enter 
+	new password" field to ensure
+	you typed your new password correctly.  Select the "Submit" button and you're done!
+      </para>
+    </section>
+    <section id="emailsettings">
+      <title>Email Settings</title>
+      <section id="notification">
+	<title>Email Notification</title>
+	<note>
+	  <para>
+	    The email notification settings described below have been obsoleted in Bugzilla 2.12, and
+	    this section will be replaced with a comprehensive description of the amazing array of 
+	    new options at your disposal.  However, in the meantime, throw this chunk out the window
+	    and go crazy with goofing around with different notification options.
+	  </para>
+	</note>
+	<para>
+	  Ahh, here you can reduce or increase the amount of email sent you from Bugzilla!
+	  In the drop-down "Notify me of changes to", select one of
+	  <simplelist>
+	    <member><emphasis>All qualifying bugs</emphasis>: sends you every change to every bug
+	      where your name is somewhere on it, regardless of who changed it.</member>
+	    <member><emphasis>Only those bugs which I am listed in the CC line</emphasis>: prevents
+	      you from receiving mail for which you are the reporter,'
+	      owner, or QA contact.  If you are on the CC
+	      list, presumably someone had a <emphasis>good</emphasis>
+	      reason for you to get the email.</member>
+	    <member><emphasis>All qulifying bugs except those which I change</emphasis>:
+	      This is the default, and
+	      a sensible setting.  If someone else changes your bugs, you will get emailed,
+	      but if you change bugs
+	      yourself you will receive no notification of the change.</member>
+	  </simplelist>
+	</para>
+      </section>
+      <section id="newemailtech">
+	<title>New Email Technology</title>
+	<note>
+	  <para>
+	    This option may not be available in all Bugzilla installations, depending upon
+	    the preferences of the systems administrator responsible for the setup of your Bugzilla.
+	    However, if you really want this functionality, ask her to "enable newemailtech
+	    in Params"
+	    and "make it the default for all new users", referring her to the Administration section
+	    of this Guide.
+	  </para>
+	</note>
+	<para>
+	  Disregard the warnings about "experimental and bleeding edge"; the code to handle email
+	  in a cleaner manner than that historically used for Bugzilla is
+	  quite robust and well-tested now.
+	</para>
+	<para>
+	  I recommend you enable the option, "Click here to sign up (and risk any bugs)".
+	  Your email-box
+	  will thank you for it.  The fundamental shift in "newemailtech" is away from standard UNIX
+	  "diff" output, which is quite ugly, to a prettier, better laid-out email.
+	</para>
+      </section>
+      <section id="watchsettings">
+	<title>"Watching" Users</title>
+	<note>
+	  <para>
+	    This option may not be available in all Bugzilla installations, depending upon
+	    the preferences of the systems administrator responsible for the setup of your Bugzilla.
+	    However, if you really want this functionality, ask her to "enable watchers in Params".
+	  </para>
+	</note>
+	<para>
+	  By entering user email names into the "Users to watch" text entry box, delineated by commas,
+	  you can watch bugs of other users.  This powerful functionality enables seamless transitions
+	  as developers change projects, managers wish to get in touch with the issues faced by their
+	  direct reports, or users go on vacation.  If any of these three situations apply
+	  to you, you will undoubtedly find this feature quite convenient.
+	</para>
+      </section>
+    </section>
+    <section id="footersettings">
+      <title>Page Footer</title>
+      <note>
+	<para>
+	  By default, this page is quite barren.  However, go explore the Query Page some more; you will
+	  find that you can store numerous queries on the server, so if you regularly run a particular query
+	  it is just a drop-down menu away.  On this page of Preferences, if you have many stored
+	  queries you can elect to have them always one-click away!
+	</para>
+      </note>
+      <para>
+	If you have many stored queries on the server, here you will find individual drop-downs for each
+	stored query.  Each drop-down gives you the option of that query appearing on the footer of every
+	page in Bugzilla!  This gives you powerful one-click access to any complex searches you may set up,
+	and is an excellent way to impress your boss...
+      </para>
+      <tip>
+	<para>By default, the "My Bugs" link appears at the bottom of each page.  However, this query
+	gives you both the bugs you have reported, as well as those you are assigned.  One of the most
+	common uses for this page is to remove the "My Bugs" link, replacing it with two other queries,
+	commonly called "My Bug Reports" and "My Bugs" (but only referencing bugs assigned to you).  This
+	allows you to distinguish those bugs you have reported from those you are assigned.  I commonly
+	set up complex Boolean queries in the Query page and link them to my footer in this page.  When
+	they are significantly complex, a one-click reference can save hours of work.</para>
+      </tip>
+    </section>
+    <section id="permissionsettings">
+      <title>Permissions</title>
+      <para>
+	This is a purely informative page which outlines your current permissions on
+	this installation of Bugzilla.  If you have permissions to grant certain permissions to
+	other users, the "other users" link appears on this page as well as the footer.
+	For more information regarding user administration, please consult the Administration
+	section of this Guide.
+      </para>
+    </section>
+  </section>
+
+  <section id="usingbz-conc">
+    <title>Using Bugzilla-Conclusion</title>
+    <para>
+      Thank you for reading through this portion of the Bugzilla Guide.  I anticipate
+      it may not yet meet the needs of all readers.  If you have additional comments or
+      corrections to make, please submit your contributions to the
+      <ulink url="mailto://mozilla-webtools@mozilla.org">mozilla-webtools</ulink>
+      mailing list/newsgroup.  The mailing list is mirrored to the netscape.public.mozilla.webtools
+      newsgroup, and the newsgroup is mirrored to mozilla-webtools@mozilla.org
+    </para>
+  </section>
+</chapter>
+
+
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-namecase-general:t
+sgml-general-insert-case:lower
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:Bugzilla-Guide\.sgml
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
diff --git a/docs/sgml/variants.sgml b/docs/sgml/variants.sgml
new file mode 100644
index 000000000..d13b9ee8d
--- /dev/null
+++ b/docs/sgml/variants.sgml
@@ -0,0 +1,87 @@
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
+
+<chapter id="variants">
+  <title>Bugzilla Variants</title>
+  <note>
+    <para>
+      I <emphasis>know</emphasis> there are more variants than just RedHat Bugzilla out there.
+      Please help me get information about them, their project status, and benefits there
+      might be in using them or in using their code in main-tree Bugzilla.
+    </para>
+  </note>
+
+  <section id="rhbugzilla">
+    <title>Red Hat Bugzilla</title>
+    <para>
+      Red Hat Bugzilla is probably the most popular Bugzilla variant, aside from Mozilla Bugzilla,
+      on the planet.
+      One of the major benefits of Red Hat Bugzilla is the ability to work with Oracle as a
+      database, as well as MySQL.
+      Here's what Dave Lawrence had to say about the status of Red Hat Bugzilla,
+      <blockquote>
+	<literallayout>
+	  Hello. I apologize that I am getting back to you so late. It has been difficult to keep
+up with email this past week. I have checked out your updated documentation and I will
+have to say very good work. A few notes and additions as follows.
+
+(ed: from the FAQ)
+>For the record, we are not using any template type implementation for the cosmetic changes 
+>maded to Bugzilla. It is just alot of html changes in the code itself. I admit I may have 
+>gotten a little carried away with it but the corporate types asked for a more standardized 
+>interface to match up with other projects relating to Red Hat web sites. A lot of other web 
+>based internal tools I am working on also look like Bugzilla. 
+
+
+This should probably be changed since we are now in fact using Text::Template for most
+of the html rendering. You actually state this later in your numbered list.
+
+Also number 6 contradicts number 8 where number 6 would be the most up to date status
+on the Oracle port.
+
+Additional Information:
+-----------------------------
+1. Comments are now stored in varchar fields of 4k in size each. If the comment is more
+than 4k it is broken up into chunks and given a sort number so each comment can be re
+assembled in the correct order. This was done because originally I was storing the comments
+in a long datatype which unfortunately cannot be indexed or joined with another table. This
+cause the search of text within the long description to be disabled for a long time. That
+is now working and is nto showing any noticeble performance hit that I can tell. 
+
+2. Work is being started on internationalizing the Bugzilla source we have to allow our
+Japanese customers to enter bug reports into a single bugzilla system. This will probably
+be done by using the nvarchar data types supported by Oracle which allows storage of
+double byte characters and also the use of the Accept-Language in the http header for 
+detection by Bugilla of which language to render.
+
+3. Of course even more cosmetic changes. It is difficult to keep up with the ever 
+changing faces of www.redhat.com.
+
+4. Some convenience enhancements in the administration utilities. And more integration
+with other internal/external Red Hat web sites.
+
+I hope this information may prove helpful for your documentation. Please contact
+me if you have any more question or I can do anything else.
+
+Regards
+	</literallayout>
+      </blockquote>
+    </para>
+  </section>
+</chapter>
+<!-- Keep this comment at the end of the file
+Local variables:
+mode: sgml
+sgml-omittag:t
+sgml-shorttag:t
+sgml-namecase-general:t
+sgml-general-insert-case:lower
+sgml-minimize-attributes:nil
+sgml-always-quote-attributes:t
+sgml-indent-step:2
+sgml-indent-data:t
+sgml-parent-document:nil
+sgml-exposed-tags:nil
+sgml-local-catalogs:nil
+sgml-local-ecat-files:nil
+End:
+-->
diff --git a/docs/txt/Bugzilla-Guide.txt b/docs/txt/Bugzilla-Guide.txt
new file mode 100644
index 000000000..b31a112e6
--- /dev/null
+++ b/docs/txt/Bugzilla-Guide.txt
@@ -0,0 +1,5279 @@
+
+The Bugzilla Guide
+
+Matthew P. Barnson
+
+   barnboy@trilobyte.net
+   Revision History
+   Revision v2.11  20 December 2000 Revised by: MPB
+   Converted the README, FAQ, and DATABASE information into SGML docbook
+   format.
+   Revision 2.11.1 06 March 2001    Revised by: MPB
+   Took way too long to revise this for 2.12 release. Updated FAQ to use
+   qandaset tags instead of literallayout, cleaned up administration
+   section, added User Guide section, miscellaneous FAQ updates and
+   third-party integration information. From this point on all new tags
+   are lowercase in preparation for the 2.13 release of the Guide in XML
+   format instead of SGML.
+   Revision 2.12.0 24 April 2001    Revised by: MPB
+   Things fixed this release: Elaborated on queryhelp interface, added
+   FAQ regarding moving bugs from one keyword to another, clarified
+   possible problems with the Landfill tutorial, fixed a boatload of
+   typos and unclear sentence structures. Incorporated the README into
+   the UNIX installation section, and changed the README to indicate the
+   deprecated status. Things I know need work: Used "simplelist" a lot,
+   where I should have used "procedure" to tag things. Need to lowercase
+   all tags to be XML compliant.
+
+   This is the documentation for Bugzilla, the Mozilla bug-tracking
+   system.
+     _________________________________________________________________
+
+   Table of Contents
+   1. About This Guide
+
+        1.1. Purpose and Scope of this Guide
+        1.2. Copyright Information
+        1.3. Disclaimer
+        1.4. New Versions
+        1.5. Credits
+        1.6. Contributors
+        1.7. Feedback
+        1.8. Translations
+        1.9. Document Conventions
+
+   2. Installing Bugzilla
+
+        2.1. UNIX Installation
+
+              2.1.1. ERRATA
+              2.1.2. Step-by-step Install
+
+                    2.1.2.1. Introduction
+                    2.1.2.2. Installing the Prerequisites
+                    2.1.2.3. Installing MySQL Database
+                    2.1.2.4. Perl (5.004 or greater)
+                    2.1.2.5. DBI Perl Module
+                    2.1.2.6. Data::Dumper Perl Module
+                    2.1.2.7. MySQL related Perl Module Collection
+                    2.1.2.8. TimeDate Perl Module Collection
+                    2.1.2.9. GD Perl Module (1.8.3)
+                    2.1.2.10. Chart::Base Perl Module (0.99c)
+                    2.1.2.11. DB_File Perl Module
+                    2.1.2.12. HTTP Server
+                    2.1.2.13. Installing the Bugzilla Files
+                    2.1.2.14. Setting Up the MySQL Database
+                    2.1.2.15. Tweaking "localconfig"
+                    2.1.2.16. Setting Up Maintainers Manuall (Optional)
+                    2.1.2.17. The Whining Cron (Optional)
+                    2.1.2.18. Bug Graphs (Optional)
+                    2.1.2.19. Securing MySQL
+                    2.1.2.20. Installation General Notes
+
+        2.2. Win32 (Win98+/NT/2K) Installation
+
+              2.2.1. Win32 Installation: Step-by-step
+              2.2.2. Additional Windows Tips
+
+   3. Administering Bugzilla
+
+        3.1. Post-Installation Checklist
+        3.2. User Administration
+
+              3.2.1. Creating the Default User
+              3.2.2. Managing Other Users
+
+                    3.2.2.1. Logging In
+                    3.2.2.2. Creating new users
+                    3.2.2.3. Disabling Users
+                    3.2.2.4. Modifying Users
+
+        3.3. Product, Component, Milestone, and Version Administration
+
+              3.3.1. Products
+              3.3.2. Components
+              3.3.3. Versions
+              3.3.4. Milestones
+              3.3.5. Voting
+              3.3.6. Groups and Group Security
+
+        3.4. Bugzilla Security
+
+   4. Using Bugzilla
+
+        4.1. What is Bugzilla?
+        4.2. Why Should We Use Bugzilla?
+        4.3. How do I use Bugzilla?
+
+              4.3.1. Create a Bugzilla Account
+              4.3.2. The Bugzilla Query Page
+              4.3.3. Creating and Managing Bug Reports
+
+                    4.3.3.1. Writing a Great Bug Report
+                    4.3.3.2. Managing your Bug Reports
+
+        4.4. What's in it for me?
+
+              4.4.1. Account Settings
+              4.4.2. Email Settings
+
+                    4.4.2.1. Email Notification
+                    4.4.2.2. New Email Technology
+                    4.4.2.3. "Watching" Users
+
+              4.4.3. Page Footer
+              4.4.4. Permissions
+
+        4.5. Using Bugzilla-Conclusion
+
+   5. Integrating Bugzilla with Third-Party Tools
+
+        5.1. Bonsai
+        5.2. CVS
+        5.3. Perforce SCM
+        5.4. Tinderbox
+
+   6. The Future of Bugzilla
+
+        6.1. Reducing Spam
+        6.2. Better Searching
+        6.3. Description Flags and Tracking Bugs
+        6.4. Bug Issues
+        6.5. Database Integrity
+        6.6. Bugzilla 3.0
+
+   A. The Bugzilla FAQ
+   B. Software Download Links
+   C. The Bugzilla Database
+
+        C.1. Database Schema Chart
+        C.2. MySQL Bugzilla Database Introduction
+        C.3. MySQL Permissions & Grant Tables
+        C.4. Cleaning up after mucking with Bugzilla
+
+   7. Bugzilla Variants
+
+        7.1. Red Hat Bugzilla
+
+   D. Useful Patches and Utilities for Bugzilla
+
+        D.1. The setperl.csh Utility
+        D.2. Command-line Bugzilla Queries
+        D.3. The Quicksearch Utility
+
+   E. GNU Free Documentation License
+
+        0. PREAMBLE
+        1. APPLICABILITY AND DEFINITIONS
+        2. VERBATIM COPYING
+        3. COPYING IN QUANTITY
+        4. MODIFICATIONS
+        5. COMBINING DOCUMENTS
+        6. COLLECTIONS OF DOCUMENTS
+        7. AGGREGATION WITH INDEPENDENT WORKS
+        8. TRANSLATION
+        9. TERMINATION
+        10. FUTURE REVISIONS OF THIS LICENSE
+        How to use this License for your documents
+
+   Glossary
+
+   List of Examples
+   2-1. Removing encrypt() for Windows NT installations
+   3-1. Creating some Components
+   3-2. Common Use of Versions
+   3-3. A Different Use of Versions
+   3-4. Using SortKey with Target Milestone
+   3-5. When to Use Group Security
+   3-6. Creating a New Group
+   4-1. Some Famous Software Versions
+   4-2. Mozilla Webtools Components
+   D-1. Using Setperl to set your perl path
+   1. A Sample Product
+
+   ] >
+     _________________________________________________________________
+
+Chapter 1. About This Guide
+
+1.1. Purpose and Scope of this Guide
+
+   This document was started on September 17, 2000 by Matthew P. Barnson
+   after a great deal of procrastination updating the Bugzilla FAQ, which
+   I left untouched for nearly half a year. After numerous complete
+   rewrites and reformatting, it is the document you see today.
+
+   Despite the lack of updates, Bugzilla is simply the best piece of
+   bug-tracking software the world has ever seen. This document is
+   intended to be the comprehensive guide to the installation,
+   administration, maintenance, and use of the Bugzilla bug-tracking
+   system.
+
+   This release of the Bugzilla Guide is the 2.11 release. It is so named
+   that it may match the current version of Bugzilla. The numbering
+   tradition stems from that used for many free software projects, in
+   which even-numbered point releases (1.2, 1.14, etc.) are considered
+   "stable releases", intended for public consumption; on the other hand,
+   odd-numbered point releases (1.3, 2.09, etc.) are considered unstable
+   development releases intended for advanced users, systems
+   administrators, developers, and those who enjoy a lot of pain.
+
+   Newer revisions of the Bugzilla Guide will follow the numbering
+   conventions of the main-tree Bugzilla releases, available at
+   Mozilla.org, with the exception that intermediate releases will have a
+   minor revision number following a period. For instance, if the current
+   version of Bugzilla is 4.2, the current "stable" version of the
+   Bugzilla guide, in, say, it's fifth revision, would be numbered
+   "4.2.5". Got it? Good.
+
+   I wrote this in response to the enormous demand for decent Bugzilla
+   documentation. I have incorporated instructions from the Bugzilla
+   README, Frequently Asked Questions, Database Schema Document, and
+   various mailing lists to create it. Chances are, there are glaring
+   errors in this documentation; please contact <barnboy@trilobyte.net>
+   to correct them.
+     _________________________________________________________________
+
+1.2. Copyright Information
+
+
+
+   Permission is granted to copy, distribute and/or modify this document
+   under thei terms of the GNU Free Documentation License, Version 1.1 or
+   any later version published by the Free Software Foundation; with no
+   Invariant Sections, no Front-Cover Texts, and with no Back-Cover
+   Texts. A copy of the license is included in the section entitled "GNU
+   Free Documentation LIcense".
+
+   --Copyright (c) 2000-2001 Matthew P. Barnson
+
+   If you have any questions regarding this document, its' copyright, or
+   publishing this document in non-electronic form, please contact
+   <barnboy@trilobyte.net>
+     _________________________________________________________________
+
+1.3. Disclaimer
+
+   No liability for the contents of this document can be accepted. Use
+   the concepts, examples, and other content at your own risk. As this is
+   a new edition of this document, there may be errors and inaccuracies
+   that may damage your system. Use of this document may cause your
+   girlfriend to leave you, your cats to pee on your furniture and
+   clothing, your computer to cease functioning, your boss to fire you,
+   and global thermonuclear war. Proceed with caution.
+
+   All copyrights are held by their respective owners, unless
+   specifically noted otherwise. Use of a term in this document should
+   not be regarded as affecting the validity of any trademark or service
+   mark. In particular, I like to put down Microsoft(tm). Live with it.
+
+   Naming of particular products or brands should not be seen as
+   endorsements, with the exception of the term "GNU/Linux". Use
+   GNU/Linux. Love it. Bathe with it. It is life and happiness. I endorse
+   it wholeheartedly and encourage you to do the same.
+
+   You are strongly recommended to make a backup of your system before
+   installing Bugzilla and at regular intervals thereafter. Heaven knows
+   it's saved my bacon time after time; if you implement any suggestion
+   in this Guide, implement this one!
+
+   Bugzilla has not undergone a complete security review. Security holes
+   probably exist in the code. Great care should be taken both in the
+   installation and usage of this software. Carefully consider the
+   implications of installing other network services with Bugzilla.
+     _________________________________________________________________
+
+1.4. New Versions
+
+   This is the initial release of the Bugzilla Guide.
+
+   This document can be found in the following places:
+
+     * TriloBYTE
+     * Mozilla.org
+     * The Linux Documentation Project
+
+   The latest version of this document can be checked out via CVS. Please
+   follow the instructions available at the Mozilla CVS page, and check
+   out the mozilla/webtools/bugzilla/docs/ branch.
+     _________________________________________________________________
+
+1.5. Credits
+
+   The people listed below have made enormous contributions to the
+   creation of this Guide, through their dedicated hacking efforts,
+   numerous e-mail and IRC support sessions, and overall excellent
+   contribution to the Bugzilla community:
+
+   Terry Weissman for initially converting Bugzilla from BugSplat! and
+   writing the README upon which this documentation is largely based.
+
+   Tara Hernandez for keeping Bugzilla development going strong after
+   Terry left Mozilla.org
+
+   Dave Lawrence for providing insight into the key differences between
+   Red Hat's customized Bugzilla, and being largely responsible for the
+   "Red Hat Bugzilla" appendix
+
+   Dawn Endico for being a hacker extraordinaire and putting up with my
+   incessant questions and arguments on irc.mozilla.org in #mozwebtools
+
+   Last but not least, all the members of the
+   netscape.public.mozilla.webtools newsgroup. Without your discussions,
+   insight, suggestions, and patches, this could never have happened.
+     _________________________________________________________________
+
+1.6. Contributors
+
+   Thanks go to these people for significant contributions to this
+   documentation (in no particular order):
+
+   Zach Lipton (significant textual contributions), Andrew Pearson,
+   Spencer Smith, Eric Hanson, Kevin Brannen,
+     _________________________________________________________________
+
+1.7. Feedback
+
+   I welcome feedback on this document. Without your submissions and
+   input, this Guide cannot continue to exist. Please mail additions,
+   comments, criticisms, etc. to <barnboy@trilobyte.net>. Please send
+   flames to <devnull@localhost>
+     _________________________________________________________________
+
+1.8. Translations
+
+   The Bugzilla Guide needs translators! Please volunteer your
+   translation into the language of your choice. If you will translate
+   this Guide, please notify the members of the mozilla-webtools mailing
+   list at <mozilla-webtools@mozilla.org>. Since The Bugzilla Guide is
+   also hosted on the Linux Documentation Project, you would also do well
+   to notify
+     _________________________________________________________________
+
+1.9. Document Conventions
+
+   This document uses the following conventions
+
+   Descriptions Appearance
+   Warnings
+
+   Caution
+
+   Warnings.
+   Hint
+
+     Tip: Hint.
+
+   Notes
+
+     Note: Note.
+
+   Information requiring special attention
+
+   Warning
+
+   Warning.
+   File Names file.extension
+   Directory Names directory
+   Commands to be typed command
+   Applications Names application
+   Prompt of users command under bash shell bash$
+   Prompt of root users command under bash shell bash#
+   Prompt of user command under tcsh shell tcsh$
+   Environment Variables VARIABLE
+   Emphasized word word
+   Code Example
+   <para>Beginning and end of paragraph</para>
+     _________________________________________________________________
+
+Chapter 2. Installing Bugzilla
+
+2.1. UNIX Installation
+
+2.1.1. ERRATA
+
+     Note: If you are installing Bugzilla on S.u.S.e. Linux, or some
+     other distributions with "paranoid" security options, it is
+     possible that the checksetup.pl script may fail with the error:
+     cannot chdir(/var/spool/mqueue): Permission denied This is because
+     your /var/spool/mqueue directory has a mode of "drwx------". Type
+     chmod 755 /var/spool/mqueue as root to fix this problem.
+
+     Note: Release Notes for Bugzilla 2.12 are available at
+     docs/rel_notes.txt
+
+     Note: The preferred documentation for Bugzilla is available in
+     docs/, with a variety of document types available. Please refer to
+     these documents when installing, configuring, and maintaining your
+     Bugzilla installation.
+
+   Warning
+
+   Bugzilla is not a package where you can just plop it in a directory,
+   twiddle a few things, and you're off. Installing Bugzilla assumes you
+   know your variant of UNIX or Microsoft Windows well, are familiar with
+   the command line, and are comfortable compiling and installing a
+   plethora of third-party utilities. To install Bugzilla on Win32
+   requires fair Perl proficiency, and if you use a webserver other than
+   Apache you should be intimately familiar with the security mechanisms
+   and CGI environment thereof.
+
+   Warning
+
+   Bugzilla has not undergone a complete security review. Security holes
+   may exist in the code. Great care should be taken both in the
+   installation and usage of this software. Carefully consider the
+   implications of installing other network services with Bugzilla.
+     _________________________________________________________________
+
+2.1.2. Step-by-step Install
+
+2.1.2.1. Introduction
+
+   Installation of bugzilla is pretty straightforward, particularly if
+   your machine already has MySQL and the MySQL-related perl packages
+   installed. If those aren't installed yet, then that's the first order
+   of business. The other necessary ingredient is a web server set up to
+   run cgi scripts. While using Apache for your webserver is not
+   required, it is recommended.
+
+   Bugzilla has been successfully installed under Solaris, Linux, and
+   Win32. The peculiarities of installing on Win32 (Win98+/NT/2K) are not
+   included in this section of the Guide; please check out the "Win32
+   Installation Instructions" for further advice on getting Bugzilla to
+   work on Microsoft Windows.
+
+   The Bugzilla Guide is contained in the "docs/" folder. It is available
+   in plain text (docs/txt), HTML (docs/html), or SGML source
+   (docs/sgml).
+     _________________________________________________________________
+
+2.1.2.2. Installing the Prerequisites
+
+   The software packages necessary for the proper running of bugzilla
+   are:
+
+    1. MySQL database server and the mysql client (3.22.5 or greater)
+    2. Perl (5.004 or greater)
+    3. DBI Perl module
+    4. Data::Dumper Perl module
+    5. DBD::mySQL
+    6. TimeDate Perl module collection
+    7. GD perl module (1.8.3) (optional, for bug charting)
+    8. Chart::Base Perl module (0.99c) (optional, for bug charting)
+    9. DB_File Perl module (optional, for bug charting)
+   10. The web server of your choice. Apache is recommended.
+   11. MIME::Parser Perl module (optional, for contrib/bug_email.pl
+       interface)
+
+     Note: You must run Bugzilla on a filesystem that supports file
+     locking via flock(). This is necessary for Bugzilla to operate
+     safely with multiple instances.
+
+   Warning
+
+   It is a good idea, while installing Bugzilla, to ensure it is not
+   accessible by other machines on the Internet. Your machine may be
+   vulnerable to attacks while you are installing. In other words, ensure
+   there is some kind of firewall between you and the rest of the
+   Internet. Many installation steps require an active Internet
+   connection to complete, but you must take care to ensure that at no
+   point is your machine vulnerable to an attack.
+     _________________________________________________________________
+
+2.1.2.3. Installing MySQL Database
+
+   Visit MySQL homepage at http://www.mysql.org/ and grab the latest
+   stable release of the server. Both binaries and source are available
+   and which you get shouldn't matter. Be aware that many of the binary
+   versions of MySQL store their data files in /var which on many
+   installations (particularly common with linux installations) is part
+   of a smaller root partition. If you decide to build from sources you
+   can easily set the dataDir as an option to configure.
+
+   If you've installed from source or non-package (RPM, deb, etc.)
+   binaries you'll want to make sure to add mysqld to your init scripts
+   so the server daemon will come back up whenever your machine reboots.
+   You also may want to edit those init scripts, to make sure that mysqld
+   will accept large packets. By default, mysqld is set up to only accept
+   packets up to 64K long. This limits the size of attachments you may
+   put on bugs. If you add something like "-O max_allowed_packet=1M" to
+   the command that starts mysqld (or safe_mysqld), then you will be able
+   to have attachments up to about 1 megabyte.
+
+     Note: If you plan on running Bugzilla and MySQL on the same
+     machine, consider using the "--skip-networking" option in the init
+     script. This enhances security by preventing network access to
+     MySQL.
+     _________________________________________________________________
+
+2.1.2.4. Perl (5.004 or greater)
+
+   Any machine that doesn't have perl on it is a sad machine indeed. Perl
+   for *nix systems can be gotten in source form from
+   http://www.perl.com.
+
+   Perl is now a far cry from the the single compiler/interpreter binary
+   it once was. It now includes a great many required modules and quite a
+   few other support files. If you're not up to or not inclined to build
+   perl from source, you'll want to install it on your machine using some
+   sort of packaging system (be it RPM, deb, or what have you) to ensure
+   a sane install. In the subsequent sections you'll be installing quite
+   a few perl modules; this can be quite ornery if your perl installation
+   isn't up to snuff.
+
+     Tip: You can skip the following Perl module installation steps by
+     installing "Bundle::Bugzilla" from CPAN, which includes them. All
+     Perl module installation steps require you have an active Internet
+     connection.
+
+     bash# perl -MCPAN -e 'install "Bundle::Bugzilla"'
+
+     Bundle::Bugzilla doesn't include GD, Chart::Base, or MIME::Parser,
+     which are not essential to a basic Bugzilla install. If installing
+     this bundle fails, you should install each module individually to
+     isolate the problem.
+     _________________________________________________________________
+
+2.1.2.5. DBI Perl Module
+
+   The DBI module is a generic Perl module used by other database related
+   Perl modules. For our purposes it's required by the MySQL-related
+   modules. As long as your Perl installation was done correctly the DBI
+   module should be a breeze. It's a mixed Perl/C module, but Perl's
+   MakeMaker system simplifies the C compilation greatly.
+
+   Like almost all Perl modules DBI can be found on the Comprehensive
+   Perl Archive Network (CPAN) at http://www.cpan.org. The CPAN servers
+   have a real tendency to bog down, so please use mirrors. The current
+   location at the time of this writing (02/17/99) can be found in
+   Appendix A.
+
+   Quality, general Perl module installation instructions can be found on
+   the CPAN website, but the easy thing to do is to just use the CPAN
+   shell which does all the hard work for you.
+
+   To use the CPAN shell to install DBI:
+
+   bash# perl -MCPAN -e 'install "DBI"'
+
+     Note: Replace "DBI" with the name of whichever module you wish to
+     install, such as Data::Dumper, TimeDate, GD, etc.
+
+   To do it the hard way:
+
+   Untar the module tarball -- it should create its own directory
+
+   CD to the directory just created, and enter the following commands:
+
+    1. bash# perl Makefile.PL
+    2. bash# make
+    3. bash# make test
+    4. bash# make install
+
+   If everything went ok that should be all it takes. For the vast
+   majority of perl modules this is all that's required.
+     _________________________________________________________________
+
+2.1.2.6. Data::Dumper Perl Module
+
+   The Data::Dumper module provides data structure persistence for Perl
+   (similar to Java's serialization). It comes with later sub-releases of
+   Perl 5.004, but a re-installation just to be sure it's available won't
+   hurt anything.
+
+   Data::Dumper is used by the MySQL related Perl modules. It can be
+   found on CPAN (link in Appendix A) and can be installed by following
+   the same four step make sequence used for the DBI module.
+     _________________________________________________________________
+
+2.1.2.7. MySQL related Perl Module Collection
+
+   The Perl/MySQL interface requires a few mutually-dependent perl
+   modules. These modules are grouped together into the the
+   Msql-Mysql-modules package. This package can be found at CPAN. After
+   the archive file has been downloaded it should be untarred.
+
+   The MySQL modules are all built using one make file which is generated
+   by running: bash# perl Makefile.pl
+
+   The MakeMaker process will ask you a few questions about the desired
+   compilation target and your MySQL installation. For many of the
+   questions the provided default will be adequate.
+
+   When asked if your desired target is the MySQL or mSQL packages
+   selected the MySQL related ones. Later you will be asked if you wish
+   to provide backwards compatibility with the older MySQL packages; you
+   must answer YES to this question. The default will be no, and if you
+   select it things won't work later.
+
+   A host of 'localhost' should be fine and a testing user of 'test' and
+   a null password should find itself with sufficient access to run tests
+   on the 'test' database which MySQL created upon installation. If 'make
+   test' and 'make install' go through without errors you should be ready
+   to go as far as database connectivity is concerned.
+     _________________________________________________________________
+
+2.1.2.8. TimeDate Perl Module Collection
+
+   Many of the more common date/time/calendar related Perl modules have
+   been grouped into a bundle similar to the MySQL modules bundle. This
+   bundle is stored on the CPAN under the name TimeDate. A (hopefully
+   current) link can be found in Appendix A. The component module we're
+   most interested in is the Date::Format module, but installing all of
+   them is probably a good idea anyway. The standard Perl module
+   installation instructions should work perfectly for this simple
+   package.
+     _________________________________________________________________
+
+2.1.2.9. GD Perl Module (1.8.3)
+
+   The GD library was written by Thomas Boutell a long while ago to
+   programatically generate images in C. Since then it's become almost a
+   defacto standard for programatic image construction. The Perl bindings
+   to it found in the GD library are used on a million web pages to
+   generate graphs on the fly. That's what bugzilla will be using it for
+   so you'd better install it if you want any of the graphing to work.
+
+   Actually bugzilla uses the Graph module which relies on GD itself, but
+   isn't that always the way with OOP. At any rate, you can find the GD
+   library on CPAN (link in Appendix "Required Software").
+
+     Note: The Perl GD library requires some other libraries that may or
+     may not be installed on your system, including "libpng" and
+     "libgd". The full requirements are listed in the Perl GD library
+     README. Just realize that if compiling GD fails, it's probably
+     because you're missing a required library.
+     _________________________________________________________________
+
+2.1.2.10. Chart::Base Perl Module (0.99c)
+
+   The Chart module provides bugzilla with on-the-fly charting abilities.
+   It can be installed in the usual fashion after it has been fetched
+   from CPAN where it is found as the Chart-x.x... tarball in a directory
+   to be listed in Appendix "Required Software". Note that as with the GD
+   perl module, only the specific versions listed above (or newer) will
+   work. Earlier versions used GIF's, which are no longer supported by
+   the latest versions of GD.
+     _________________________________________________________________
+
+2.1.2.11. DB_File Perl Module
+
+   DB_File is a module which allows Perl programs to make use of the
+   facilities provided by Berkeley DB version 1.x. This module is
+   required by collectstats.pl which is used for bug charting. If you
+   plan to make use of bug charting, you must install this module.
+     _________________________________________________________________
+
+2.1.2.12. HTTP Server
+
+   You have a freedom of choice here - Apache, Netscape or any other
+   server on UNIX would do. You can easily run the web server on a
+   different machine than MySQL, but need to adjust the MySQL "bugs" user
+   permissions accordingly.
+
+   You'll want to make sure that your web server will run any file with
+   the .cgi extension as a cgi and not just display it. If you're using
+   apache that means uncommenting the following line in the srm.conf
+   file: AddHandler cgi-script .cgi
+
+   With apache you'll also want to make sure that within the access.conf
+   file the line: Options ExecCGI is in the stanza that covers the
+   directories you intend to put the bugzilla .html and .cgi files into.
+
+   If you are using a newer version of Apache, both of the above lines
+   will be (or will need to be) in the httpd.conf file, rather than
+   srm.conf or access.conf.
+
+   Warning
+
+   There are two critical directories and a file that should not be a
+   served by the HTTP server. These are the 'data' and 'shadow'
+   directories and the 'localconfig' file. You should configure your HTTP
+   server to not serve content from these files. Failure to do so will
+   expose critical passwords and other data. Please see your HTTP server
+   configuration manual on how to do this. If you use quips (at the top
+   of the buglist pages) you will want the 'data/comments' file to still
+   be served. This file contains those quips.
+     _________________________________________________________________
+
+2.1.2.13. Installing the Bugzilla Files
+
+   You should untar the Bugzilla files into a directory that you're
+   willing to make writable by the default web server user (probably
+   'nobody'). You may decide to put the files off of the main web space
+   for your web server or perhaps off of /usr/local with a symbolic link
+   in the web space that points to the bugzilla directory. At any rate,
+   just dump all the files in the same place (optionally omitting the CVS
+   directories if they were accidentally tarred up with the rest of
+   Bugzilla) and make sure you can access the files in that directory
+   through your web server.
+
+     Tip: HINT: If you symlink the bugzilla directory into your Apache's
+     HTML heirarchy, you may receive "Forbidden" errors unless you add
+     the "FollowSymLinks" directive to the <Directory> entry for the
+     HTML root.
+
+   Once all the files are in a web accessible directory, make that
+   directory writable by your webserver's user (which may require just
+   making it world writable). This is a temporary step until you run the
+   post-install "checksetup.pl" script, which locks down your
+   installation.
+
+   Lastly, you'll need to set up a symbolic link from
+   /usr/bonsaitools/bin to the correct location of your perl executable
+   (probably /usr/bin/perl). Otherwise you must hack all the .cgi files
+   to change where they look for perl. To make future upgrades easier,
+   you should use the symlink approach.
+
+     Tip: If you don't have root access to set this symlink up, check
+     out the "setperl.csh" utility, listed in the Patches section of
+     this Guide. It will change the path to perl in all your Bugzilla
+     files for you.
+     _________________________________________________________________
+
+2.1.2.14. Setting Up the MySQL Database
+
+   After you've gotten all the software installed and working you're
+   ready to start preparing the database for its life as a the back end
+   to a high quality bug tracker.
+
+   First, you'll want to fix MySQL permissions to allow access from
+   Bugzilla. For the purpose of this Installation section, the Bugzilla
+   username will be "bugs", and will have minimal permissions. Bugzilla
+   has not undergone a thorough security audit. It may be possible for a
+   system cracker to somehow trick Bugzilla into executing a command such
+   as "; DROP DATABASE mysql".
+
+   That would be bad.
+
+   Give the MySQL root user a password. MySQL passwords are limited to 16
+   characters.
+
+   bash# mysql -u root mysql
+   mysql> UPDATE user SET Password=PASSWORD ('new_password') WHERE
+   user='root';
+   mysql> FLUSH PRIVILEGES;
+
+   From this point on, if you need to access MySQL as the MySQL root
+   user, you will need to use "mysql -u root -p" and enter your
+   new_password. Remember that MySQL user names have nothing to do with
+   Unix user names (login names).
+
+   Next, we create the "bugs" user, and grant sufficient permissions for
+   checksetup.pl, which we'll use later, to work its magic. This also
+   restricts the "bugs" user to operations within a database called
+   "bugs", and only allows the account to connect from "localhost".
+   Modify it to reflect your setup if you will be connecting from another
+   machine or as a different user.
+
+   Remember to set bugs_password to some unique password.
+
+   mysql> GRANT SELECT,INSERT,UPDATE,DELETE,INDEX,
+   ALTER,CREATE,DROP,REFERENCES ON bugs.* TO bugs@localhost IDENTIFIED BY
+   'bugs_password';
+   mysql> FLUSH PRIVILEGES;
+
+   Next, run the magic checksetup.pl script. (Many thanks to Holger
+   Schurig <holgerschurig@nikocity.de> for writing this script!) It will
+   make sure Bugzilla files and directories have reasonable permissions,
+   set up the "data" directory, and create all the MySQL tables.
+
+   bash# ./checksetup.pl
+
+   The first time you run it, it will create a file called "localconfig".
+     _________________________________________________________________
+
+2.1.2.15. Tweaking "localconfig"
+
+   This file contains a variety of settings you may need to tweak
+   including how Bugzilla should connect to the MySQL database.
+
+   The connection settings include:
+
+    1. server's host: just use "localhost" if the MySQL server is local
+    2. database name: "bugs" if you're following these directions
+    3. MySQL username: "bugs" if you're following these directions
+    4. Password for the "bugs" MySQL account above
+
+   Once you are happy with the settings, re-run checksetup.pl. On this
+   second run, it will create the database and an administrator account
+   for which you will be prompted to provide information.
+
+   When logged into an administrator account once Bugzilla is running, if
+   you go to the query page (off of the bugzilla main menu), you'll find
+   an 'edit parameters' option that is filled with editable treats.
+
+   Should everything work, you should have a nearly empty copy of the bug
+   tracking setup.
+
+   The second time around, checksetup.pl will stall if it is on a
+   filesystem that does not fully support file locking via flock(), such
+   as NFS mounts. This support is required for Bugzilla to operate safely
+   with multiple instances. If flock() is not fully supported, it will
+   stall at: Now regenerating the shadow database for all bugs.
+
+     Note: The second time you run checksetup.pl, it is recommended you
+     be the same user as your web server runs under, and that you be
+     sure you have set the "webservergroup" parameter in localconfig to
+     match the web server's group name, if any. Under some systems,
+     otherwise, checksetup.pl will goof up your file permissions and
+     make them unreadable to your web server.
+
+     Note: The checksetup.pl script is designed so that you can run it
+     at any time without causing harm. You should run it after any
+     upgrade to Bugzilla.
+     _________________________________________________________________
+
+2.1.2.16. Setting Up Maintainers Manuall (Optional)
+
+   If you want to add someone else to every group by hand, you can do it
+   by typing the appropriate MySQL commands. Run ' mysql -u root -p bugs'
+   (you may need different parameters, depending on your security
+   settings according to section 3, above). Then:
+
+   mysql> update profiles set groupset=0x7fffffffffffffff where
+   login_name = 'XXX';
+
+   replacing XXX with the Bugzilla email address.
+     _________________________________________________________________
+
+2.1.2.17. The Whining Cron (Optional)
+
+   By now you've got a fully functional bugzilla, but what good are bugs
+   if they're not annoying? To help make those bugs more annoying you can
+   set up bugzilla's automatic whining system. This can be done by adding
+   the following command as a daily crontab entry (for help on that see
+   that crontab man page):
+
+   cd <your-bugzilla-directory> ; ./whineatnews.pl
+     _________________________________________________________________
+
+2.1.2.18. Bug Graphs (Optional)
+
+   As long as you installed the GD and Graph::Base Perl modules you might
+   as well turn on the nifty bugzilla bug reporting graphs.
+
+   Add a cron entry like this to run collectstats daily at 5 after
+   midnight:
+
+   bash# crontab -e
+   5 0 * * * cd <your-bugzilla-directory> ; ./collectstats.pl
+
+   After two days have passed you'll be able to view bug graphs from the
+   Bug Reports page.
+     _________________________________________________________________
+
+2.1.2.19. Securing MySQL
+
+   If you followed the README for setting up your "bugs" and "root" user
+   in MySQL, much of this should not apply to you. If you are upgrading
+   an existing installation of Bugzilla, you should pay close attention
+   to this section.
+
+   Most MySQL installs have "interesting" default security parameters:
+
+   mysqld defaults to running as root
+   it defaults to allowing external network connections
+   it has a known port number, and is easy to detect
+   it defaults to no passwords whatsoever
+   it defaults to allowing "File_Priv"
+
+   This means anyone from anywhere on the internet can not only drop the
+   database with one SQL command, and they can write as root to the
+   system.
+
+   To see your permissions do:
+
+   bash# mysql -u root -p
+   mysql> use mysql;
+   mysql> show tables;
+   mysql> select * from user;
+   mysql> select * from db;
+
+   To fix the gaping holes:
+
+   DELETE FROM user WHERE User='';
+   UPDATE user SET Password=PASSWORD('new_password') WHERE user='root';
+   FLUSH PRIVILEGES;
+
+   If you're not running "mit-pthreads" you can use:
+
+   GRANT USAGE ON *.* TO bugs@localhost;
+   GRANT ALL ON bugs.* TO bugs@localhost;
+   REVOKE DROP ON bugs.* FROM bugs@localhost;
+   FLUSH PRIVILEGES;
+
+   With "mit-pthreads" you'll need to modify the "globals.pl"
+   Mysql->Connect line to specify a specific host name instead of
+   "localhost", and accept external connections:
+
+   GRANT USAGE ON *.* TO bugs@bounce.hop.com;
+   GRANT ALL ON bugs.* TO bugs@bounce.hop.com;
+   REVOKE DROP ON bugs.* FROM bugs@bounce.hop.com;
+   FLUSH PRIVILEGES;
+
+   Consider also:
+
+    1. Turning off external networking with "--skip-networking", unless
+       you have "mit-pthreads", in which case you can't. Without
+       networking, MySQL connects with a Unix domain socket.
+    2. using the --user= option to mysqld to run it as an unprivileged
+       user.
+    3. starting MySQL in a chroot jail
+    4. running the httpd in a "chrooted" jail
+    5. making sure the MySQL passwords are different from the OS
+       passwords (MySQL "root" has nothing to do with system "root").
+    6. running MySQL on a separate untrusted machine
+    7. making backups ;-)
+     _________________________________________________________________
+
+2.1.2.20. Installation General Notes
+
+2.1.2.20.1. Modifying Your Running System
+
+   Bugzilla optimizes database lookups by storing all relatively static
+   information in the versioncache file, located in the data/
+   subdirectory under your installation directory (we said before it
+   needs to be writable, right?!)
+
+   If you make a change to the structural data in your database (the
+   versions table for example), or to the "constants" encoded in
+   defparams.pl, you will need to remove the cached content from the data
+   directory (by doing a "rm data/versioncache"), or your changes won't
+   show up!
+
+   That file gets automatically regenerated whenever it's more than an
+   hour old, so Bugzilla will eventually notice your changes by itself,
+   but generally you want it to notice right away, so that you can test
+   things.
+     _________________________________________________________________
+
+2.1.2.20.2. Upgrading From Previous Versions
+
+   The developers of Bugzilla are constantly adding new tables, columns
+   and fields. You'll get SQL errors if you just update the code. The
+   strategy to update is to simply always run the checksetup.pl script
+   whenever you upgrade your installation of Bugzilla. If you want to see
+   what has changed, you can read the comments in that file, starting
+   from the end.
+     _________________________________________________________________
+
+2.1.2.20.3. UNIX Installation Instructions History
+
+   This document was originally adapted from the Bonsai installation
+   instructions by Terry Weissman <terry@mozilla.org>.
+
+   The February 25, 1999 re-write of this page was done by Ry4an Brase
+   <ry4an@ry4an.org>, with some edits by Terry Weissman, Bryce Nesbitt,
+   Martin Pool, & Dan Mosedale (But don't send bug reports to them!
+   Report them using bugzilla, at
+   http://bugzilla.mozilla.org/enter_bug.cgi , project Webtools,
+   component Bugzilla).
+
+   This document was heavily modified again Wednesday, March 07 2001 to
+   reflect changes for Bugzilla 2.12 release by Matthew P. Barnson. The
+   securing MySQL section should be changed to become standard procedure
+   for Bugzilla installations.
+
+   Finally, the README in its entirety was marked up in SGML and included
+   into the Guide on April 24, 2001.
+
+   Comments from people using this Guide for the first time are
+   particularly welcome.
+     _________________________________________________________________
+
+2.2. Win32 (Win98+/NT/2K) Installation
+
+   These directions have not been extensively tested. We need testers!
+   Please try these out and post any changes to the newsgroup.
+     _________________________________________________________________
+
+2.2.1. Win32 Installation: Step-by-step
+
+     Note: You should be familiar with, and cross-reference, the UNIX
+     README while performing your Win32 installation. Unfortunately,
+     Win32 directions are not yet as detailed as those for UNIX.
+
+     The most critical difference for Win32 users is the lack of support
+     for a crypt() function in MySQL for Windows. It does not have it!
+     All ENCRYPT statements must be modified.
+
+    1. Install Apache Web Server for Windows.
+
+     Note: You may also use Internet Information Server or Personal Web
+     Server for this purpose. However, setup is slightly more difficult.
+     If ActivePerl doesn't seem to handle your file associations
+     correctly (for .cgi and .pl files), please consult the FAQ, in the
+     "Win32" section.
+     If you are going to use IIS, if on Windows NT you must be updated
+     to at least Service Pack 4.
+    2. Install ActivePerl
+       Please also check the following links to fully understand the
+       status of ActivePerl on Win32: Perl Porting, and Hixie Click Here
+    3. Use ppm from your perl\bin directory to install the following
+       packs: DBI, DBD-Mysql, TimeDate, Chart, Date-Calc, Date-Manip, and
+       GD. You may need to extract them from .zip format using Winzip or
+       other unzip program first. These additional ppm modules can be
+       downloaded from ActiveState.
+       The syntax for ppm is: C:> ppm install <module>.ppd
+       You can find ActiveState ppm modules at
+       http://www.activestate.com/PPMPackages/5.6plus
+    4. Download and install the Windows GNU tools from www.cygwin.com.
+       Make sure the GNU utilities are in your $PATH.
+    5. Install MySQL for NT.
+
+     Note: Your configuration file for MySQL must be named C:\MY.CNF.
+    6. Setup MySQL
+         a. C:> C:\mysql\bin\mysql -u root mysql
+         b. mysql> DELETE FROM user WHERE Host='localhost' AND User='';
+         c. mysql> UPDATE user SET Password=PASSWORD ('new_password')
+            WHERE user='root';
+         d. mysql> GRANT SELECT, INSERT, UPDATE, DELETE, INDEX, ALTER,
+            CREATE, DROP, REFERENCES ON bugs.* to bugs@localhost
+            IDENTIFIED BY 'bugs_password';
+         e. mysql> FLUSH PRIVILEGES;
+         f. mysql> create database bugs;
+         g. mysql> exit
+         h. C:> C:\mysql\bin\mysqladmin -u root -p reload
+    7. Configure Bugzilla. For Win32, this involves editing
+       "defparams.pl" and "localconfig" to taste. Running "checksetup.pl"
+       should create localconfig for you. Note that getgrnam() doesn't
+       work, and should be deleted. Change this line: "my $webservergid =
+       getgrnam($my_webservergroup); " to "my $webservergid =
+       $my_webservergroup; "
+    8.
+
+     Note: There are several alternatives to Sendmail that will work on
+     Win32. The one mentioned here is a suggestion, not a requirement.
+     Some other mail packages that can work include BLAT, Windmail,
+     Mercury Sendmail, and the CPAN Net::SMTP Perl module (available in
+     .ppm). Every option requires some hacking of the Perl scripts for
+     Bugzilla to make it work. The option here simply requires the
+     least.
+       Download NTsendmail, available from www.ntsendmail.com. In order
+       for it to work, you must set up some new environment variables
+       (detailed on the ntsendmail home page). Figuring out where to put
+       those variables is left as an exercise for the reader. You must
+       have a "real" mail server which allows you to relay off it in your
+       $ENV{"NTsendmail"} (which you should probably place in globals.pl)
+       Once downloaded and installed, modify all open(SENDMAIL) calls to
+       open "| c:\ntsendmail\ntsendmail -t" instead of
+       "|/usr/lib/sendmail -t".
+
+     Note: We need someone to test this and make sure this works as
+     advertised.
+    9. Modify globals.pl and CGI.pl to remove the word "encrypt".
+
+     Note: I'm not sure this is all that is involved to remove crypt.
+     Any NT Bugzilla hackers want to pipe up?
+   10. Change all references to "processmail" to "processmail.pl" in all
+       files, and rename "processmail" to "processmail.pl"
+
+     Note: I really think this may be a change we want to make for
+     main-tree Bugzilla. It's painless for the UNIX folks, and will make
+     the Win32 people happier.
+   11. Modify the path to perl on the first line (#!) of all files to
+       point to your Perl installation, and add "perl" to the beginning
+       of all Perl system calls that use a perl script as an argument.
+       This may take you a while. There is a "setperl.pl" utility to
+       speed part of this procedure, available in the "Patches and
+       Utilities" section of The Bugzilla Guide.
+   12. In processmail.pl, add "binmode(HANDLE)" before all read() calls.
+       This may not be necessary, but in some cases the read() under
+       Win32 doesn't count the EOL's without using a binary read().
+     _________________________________________________________________
+
+2.2.2. Additional Windows Tips
+
+     Tip: From Andrew Pearson:
+
+     "You can make Bugzilla work with Personal Web Server for Windows 98
+     and higher, as well as for IIS 4.0. Microsoft has information
+     available at
+     http://support.microsoft.com/support/kb/articles/Q231/9/98.ASP
+
+     Basically you need to add two String Keys in the registry at the
+     following location:
+
+     HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\Paramete
+     rs\ScriptMap
+
+     The keys should be called ".pl" and ".cgi", and both should have a
+     value something like: c:/perl/bin/perl.exe "%s" "%s"
+
+     The KB article only talks about .pl, but it goes into more detail
+     and provides a perl test script.
+
+     Tip: "Brian" had this to add, about upgrading to Bugzilla 2.12 from
+     previous versions:
+
+     Hi - I am updating bugzilla to 2.12 so I can tell you what I did
+     (after I deleted the current dir and copied the files in).
+
+     In checksetup.pl, I did the following...
+
+    1.
+
+my $webservergid = getgrnam($my_webservergroup);
+
+
+       to
+
+my $webservergid = 'Administrators'
+
+
+    2. I then ran checksetup.pl
+    3. I removed all the encrypt()
+       Example 2-1. Removing encrypt() for Windows NT installations
+       Replace this:
+
+SendSQL("SELECT encrypt(" . SqlQuote($enteredpwd) . ", " .
+    SqlQuote(substr($realcryptpwd, 0, 2)) . ")");
+my $enteredcryptpwd = FetchOneColumn();
+
+
+       with this:
+
+my $enteredcryptpwd = $enteredpwd
+
+
+       in cgi.pl.
+    4. I renamed processmail to processmail.pl
+    5. I altered the sendmail statements to windmail:
+
+
+open SENDMAIL, "|\"C:/General/Web/tools/Windmail 4.0 Beta/windmail\" -t > mail.
+log";
+
+       The quotes around the dir is for the spaces. mail.log is for the
+       output
+     _________________________________________________________________
+
+Chapter 3. Administering Bugzilla
+
+   Or, I just got this cool thing installed. Now what the heck do I do
+   with it?
+
+   So you followed the README isntructions to the letter, and just logged
+   into bugzilla with your super-duper god account and you are sitting at
+   the query screen. Yet, you have nothing to query. Your first act of
+   business needs to be to setup the operating parameters for bugzilla.
+     _________________________________________________________________
+
+3.1. Post-Installation Checklist
+
+   After installation, follow the checklist below to ensure that you have
+   a successful installation. If you do not see a recommended setting for
+   a parameter, consider leaving it at the default while you perform your
+   initial tests on your Bugzilla setup.
+    1. Bring up "editparams.cgi" in your web browser. For instance, to
+       edit parameters at mozilla.org, the URL would be
+       http://bugzilla.mozilla.org/editparams.cgi, also available under
+       the "edit parameters" link on your query page.
+    2. Set "maintainer" to your email address. This allows Bugzilla's
+       error messages to display your email address and allow people to
+       contact you for help.
+    3. Set "urlbase" to the URL reference for your Bugzilla installation.
+       If your bugzilla query page is at
+       http://www.foo.com/bugzilla/query.cgi, your url base is
+       http://www.foo.com/bugzilla/
+    4. Set "usebuggroups" to "1" only if you need to restrict access to
+       products. I suggest leaving this parameter off while initially
+       testing your Bugzilla.
+    5. Set "usebuggroupsentry" to "1" if you want to restrict access to
+       products. Once again, if you are simply testing your installation,
+       I suggest against turning this parameter on; the strict security
+       checking may stop you from being able to modify your new entries.
+    6. Set "shadowdb" to "bug_shadowdb" if you will be running a *very*
+       large installation of Bugzilla. The shadow database enables many
+       simultaneous users to read and write to the database without
+       interfering with one another.
+
+     Note: Enabling "shadowdb" can adversely affect the stability of
+     your installation of Bugzilla. You may frequently need to manually
+     synchronize your databases, or schedule nightly syncs via "cron"
+       Once again, in testing you should avoid this option -- use it if
+       or when you need to use it, and have repeatedly run into the
+       problem it was designed to solve -- very long wait times while
+       attempting to commit a change to the database.
+       If you use the "shadowdb" option, it is only natural that you
+       should turn the "queryagainstshadowdb" option "On" as well.
+       Otherwise you are replicating data into a shadow database for no
+       reason!
+    7. If you have custom logos or HTML you must put in place to fit
+       within your site design guidelines, place the code in the
+       "headerhtml", "footerhtml", "errorhtml", "bannerhtml", or
+       "blurbhtml" text boxes.
+
+     Note: The "headerhtml" text box is the HTML printed out before any
+     other code on the page. If you have a special banner, put the code
+     for it in "bannerhtml". You may want to leave these settings at the
+     defaults initially.
+    8. Add any text you wish to the "passwordmail" parameter box. For
+       instance, many people choose to use this box to give a quick
+       training blurb about how to use Bugzilla at your site.
+    9. Ensure "newemailtech" is "on". Your users will thank you. This is
+       the default in the post-2.12 world, and is only an issue if you
+       are upgrading.
+   10. Do you want to use the qa contact ("useqacontact") and status
+       whiteboard ("usestatuswhiteboard") fields? These fields are useful
+       because they allow for more flexibility, particularly when you
+       have an existing Quality Assurance and/or Release Engineering
+       team, but they may not be needed for smaller installations.
+   11. Set "whinedays" to the amount of days you want to let bugs go in
+       the "New" or "Reopened" state before notifying people they have
+       untouched new bugs. If you do not plan to use this feature, simply
+       do not set up the whining cron job described in the README, or set
+       this value to "0".
+   12. Set the "commenton" options according to your site policy. It is a
+       wise idea to require comments when users resolve, reassign, or
+       reopen bugs.
+
+     Note: It is generally far better to require a developer comment
+     when resolving bugs than not. Few things are more annoying to bug
+     database users than having a developer mark a bug "fixed" without
+     any comment as to what the fix was (or even that it was truly
+     fixed!)
+   13. Set "supportwatchers" to "On". This feature is helpful for team
+       leads to monitor progress in their respective areas, and can offer
+       many other benefits, such as allowing a developer to pick up a
+       former engineer's bugs without requiring her to change all the
+       information in the bug.
+     _________________________________________________________________
+
+3.2. User Administration
+
+   User administration is one of the easiest parts of Bugzilla. Keeping
+   it from getting out of hand, however, can become a challenge.
+     _________________________________________________________________
+
+3.2.1. Creating the Default User
+
+   When you first run checksetup.pl after installing Bugzilla, it will
+   prompt you for the administrative username (email address) and
+   password for this "super user". If for some reason you were to delete
+   the "super user" account, re-running checksetup.pl will again prompt
+   you for this username and password.
+
+     Tip: If you wish to add more administrative users, you must use the
+     MySQL interface. Run "mysql" from the command line, and use these
+     commands ("mysql>" denotes the mysql prompt, not something you
+     should type in): mysql> use bugs; mysql> update profiles set
+     groupset=0x7ffffffffffffff where login_name = "(user's login
+     name)";
+     _________________________________________________________________
+
+3.2.2. Managing Other Users
+
+3.2.2.1. Logging In
+
+    1. Open the index.html page for your Bugzilla installation in your
+       browser window.
+    2. Click the "Query Existing Bug Reports" link.
+    3. Click the "Log In" link at the foot of the page.
+    4. Type your email address, and the password which was emailed to you
+       when you created your Bugzilla account, into the spaces provided.
+
+   Congratulations, you are logged in!
+     _________________________________________________________________
+
+3.2.2.2. Creating new users
+
+   Your users can create their own user accounts by clicking the "New
+   Account" link at the bottom of each page. However, should you desire
+   to create user accounts ahead of time, here is how you do it.
+
+    1. After logging in, click the "Users" link at the footer of the
+       query page.
+    2. To see a specific user, type a portion of their login name in the
+       box provided and click "submit". To see all users, simply click
+       the "submit" button. You must click "submit" here to be able to
+       add a new user.
+
+     Tip: More functionality is available via the list on the right-hand
+     side of the text entry box. You can match what you type as a
+     case-insensitive substring (the default) of all users on your
+     system, a case-sensitive regular expression (please see the "man
+     regexp" manual page for details on regular expression syntax), or a
+     reverse regular expression match, where every user name which does
+     NOT match the regular expression is selected.
+    3. Click the "Add New User" link at the bottom of the user list
+    4. Fill out the form presented. This page is self-explanatory. When
+       done, click "submit".
+
+     Note: Adding a user this way will not send an email informing them
+     of their username and password. In general, it is preferable to log
+     out and use the "New Account" button to create users, as it will
+     pre-populate all the required fields and also notify the user of
+     her account name and password.
+     _________________________________________________________________
+
+3.2.2.3. Disabling Users
+
+   I bet you noticed that big "Disabled Text" entry box available from
+   the "Add New User" screen, when you edit an account? By entering any
+   text in this box and selecting "submit", you have prevented the user
+   from using Bugzilla via the web interface. Your explanation, written
+   in this text box, will be presented to the user the next time she
+   attempts to use the system.
+
+   Warning
+
+   Don't disable your own administrative account, or you will hate life!
+     _________________________________________________________________
+
+3.2.2.4. Modifying Users
+
+   Here I will attempt to describe the function of each option on the
+   user edit screen.
+
+     * Login Name: This is generally the user's email address. However,
+       if you have edited your system parameters, this may just be the
+       user's login name or some other identifier.
+
+     Tip: For compatability reasons, you should probably stick with
+     email addresses as user login names. It will make your life easier.
+     * Real Name: Duh!
+     * Password: You will only see asterisks in versions of Bugzilla
+       newer than 2.10 or early 2.11. You can change the user password
+       here.
+     * Email Notification: You may choose from one of three options:
+         1. All qualifying bugs except those which I change: The user
+            will be notified of any change to any bug for which she is
+            the reporter, assignee, Q/A contact, CC recipient, or
+            "watcher".
+         2. Only those bugs which I am listed on the CC line: The user
+            will not be notified of changes to bugs where she is the
+            assignee, reporter, or Q/A contact, but will receive them if
+            she is on the CC list.
+
+     Note: She will still receive whining cron emails if you set up the
+     "whinemail" feature.
+         3. All Qualifying Bugs: This user is a glutton for punishment.
+            If her name is in the reporter, Q/A contact, CC, assignee, or
+            is a "watcher", she will get email updates regarding the bug.
+       Disable Text: If you type anything in this box, including just a
+       space, the user account is disabled from making any changes to
+       bugs via the web interface, and what you type in this box is
+       presented as the reason.
+
+                       Warning
+       Don't disable the administrator account!
+
+     Note: As of this writing, the user can still submit bugs via the
+     e-mail gateway, if you set it up, despite the disabled text field.
+     The e-mail gateway should not be enabled for secure installations
+     of Bugzilla.
+     * CanConfirm: This field is only used if you have enabled
+       "unconfirmed" status in your parameters screen. If you enable this
+       for a user, that user can then move bugs from "Unconfirmed" to
+       "Confirmed" status (ergo: "New" status). Be judicious about
+       allowing users to turn this bit on for other users.
+     * Creategroups: This option will allow a user to create and destroy
+       groups in Bugzilla. Unless you are using the Bugzilla GroupSentry
+       security option "usebuggroupsentry" in your parameters, this
+       setting has no effect.
+     * Editbugs: Unless a user has this bit set, they can only edit those
+       bugs for which they are the assignee or the reporter.
+
+     Note: Leaving this option unchecked does not prevent users from
+     adding comments to a bug! They simply cannot change a bug priority,
+     severity, etc. unless they are the assignee or reporter.
+     * Editcomponents: This flag allows a user to create new products and
+       components, as well as modify and destroy those that have no bugs
+       associated with them. If a product or component has bugs
+       associated with it, those bugs must be moved to a different
+       product or component before Bugzilla will allow them to be
+       destroyed. The name of a product or component can be changed
+       without affecting the associated bugs, but it tends to annoy the
+       hell out of your users when these change a lot.
+     * Editkeywords: If you use Bugzilla's keyword functionality,
+       enabling this feature allows a user can create and destroy
+       keywords. As always, the keywords for existing bugs containing the
+       keyword the user wishes to destroy must be changed before Bugzilla
+       will allow it to die. You must be very careful about creating too
+       many new keywords if you run a very large Bugzilla installation;
+       keywords are global variables across products, and you can often
+       run into a phenomenon called "keyword bloat". This confuses users,
+       and then the feature goes unused.
+     * Editusers: This flag allows a user do what you're doing right now:
+       edit other users. This will allow those with the right to do so to
+       remove administrator priveleges from other users or grant them to
+       themselves. Enable with care.
+     * PRODUCT: PRODUCT bugs access. This allows an administrator, with
+       product-level granularity, to specify in which products a user can
+       edit bugs. The user must still have the "editbugs" privelege to
+       edit bugs in this area; this simply restricts them from even
+       seeing bugs outside these boundaries if the administrator has
+       enabled the group sentry parameter "usebuggroupsentry". Unless you
+       are using bug groups, this option has no effect.
+     _________________________________________________________________
+
+3.3. Product, Component, Milestone, and Version Administration
+
+
+
+   Dear Lord, we have to get our users to do WHAT?
+     _________________________________________________________________
+
+3.3.1. Products
+
+   Formerly, and in some spots still, called "Programs"
+
+   Products are the broadest category in Bugzilla, and you should have
+   the least of these. If your company makes computer games, you should
+   have one product per game, and possibly a few special products
+   (website, meetings...)
+
+   A Product (formerly called "Program", and still referred to that way
+   in some portions of the source code) controls some very important
+   functions. The number of "votes" available for users to vote for the
+   most important bugs is set per-product, as is the number of votes
+   required to move a bug automatically from the UNCONFIRMED status to
+   the NEW status. One can close a Product for further bug entry and
+   define various Versions available from the Edit Product screen.
+
+   To create a new product:
+
+    1. Select "components" from the yellow footer
+
+     Tip: It may seem counterintuitive to click "components" when you
+     want to edit the properties associated with Products. This is one
+     of a long list of things we want in Bugzilla 3.0...
+    2. Select the "Add" link to the right of "Add a new product".
+    3. Enter the name of the product and a description. The Description
+       field is free-form.
+
+     Tip: Don't worry about the "Closed for bug entry", "Maximum Votes
+     per person", "Maximum votes a person can put on a single bug",
+     "Number of votes a bug in this Product needs to automatically get
+     out of the UNCOMFIRMED state", and "Version" options yet. We'll
+     cover those in a few moments.
+     _________________________________________________________________
+
+3.3.2. Components
+
+   Components are subsections of a Product.
+
+   Example 3-1. Creating some Components
+
+   The computer game you are designing may a "UI" component, an "API"
+   component, a "Sound System" component, and a "Plugins" component, each
+   overseen by a different programmer. It often makes sense to divide
+   Components in Bugzilla according to the natural divisions of
+   responsibility within your Product or company.
+
+   Each component has a owner and (if you turned it on in the
+   parameters), a qa contact. The owner should be the primary person who
+   fixes bugs in that component. The QA Contact should be the person who
+   will ensure these bugs are completely fixed. The Owner, QA Contact,
+   and Reporter will get email when new bugs are created in this
+   Component and when these bugs change. Default Owner and Default QA
+   Contact fields only dictate the default assignments; the Owner and Q/A
+   Contact fields in a bug are otherwise unrelated to the Component.
+
+   To create a new Component:
+
+    1. Select the "Edit components" link from the "Edit Product" page
+    2. Select the "Add" link to the right of the "Add a new component"
+       text on the "Select Component" page.
+    3. Fill out the "Component" field, a short "Description", and the
+       "Initial Owner". The "Component" field should not contain a space.
+       The "Description" field is free-form. The "Initial Owner" field
+       must be that of a valid user already existing in the database. If
+       the initial owner does not exist, Bugzilla will refuse to create
+       the component.
+
+     Tip: Is your "Default Owner" a user who is not yet in the database?
+     No problem.
+         a. Select the "Log out" link on the footer of the page.
+         b. Select the "New Account" link on the footer of the "Relogin"
+            page
+         c. Type in the email address of the default owner you want to
+            create in the "E-mail address" field, and her full name in
+            the "Real name" field, then select the "Submit Query" button.
+         d. Now select "Log in" again, type in your login information,
+            and you can modify the product to use the Default Owner
+            information you require.
+
+    4. Either "edit" more components or return to the "query" page on the
+       ensuing "Addming new component" page. To return to the Product you
+       were editing, you must select the "components" link as before.
+     _________________________________________________________________
+
+3.3.3. Versions
+
+   Versions are the revisions of the product, such as "Flinders 3.1",
+   "Flinders 95", and "Flinders 2000". Using Versions helps you isolate
+   code changes and are an aid in reporting.
+
+   Example 3-2. Common Use of Versions
+
+   A user reports a bug against Version "Beta 2.0" of your product. The
+   current Version of your software is "Release Candidate 1", and no
+   longer has the bug. This will help you triage and classify bugs
+   according to their relevance. It is also possible people may report
+   bugs against bleeding-edge beta versions that are not evident in older
+   versions of the software. This can help isolate code changes that
+   caused the bug
+
+   Example 3-3. A Different Use of Versions
+
+   This field has been used to good effect by an online service provider
+   in a slightly different way. They had three versions of the product:
+   "Production", "QA", and "Dev". Although it may be the same product, a
+   bug in the development environment is not normally as critical as a
+   Production bug, nor does it need to be reported publicly. When used in
+   conjunction with Target Milestones, one can easily specify the
+   environment where a bug can be reproduced, and the Milestone by which
+   it will be fixed.
+
+   To create and edit Versions:
+
+    1. From the "Edit Product" screen, select "Edit Versions"
+    2. You will notice that the product already has the default version
+       "undefined". If your product doesn't use version numbers, you may
+       want to leave this as it is or edit it so that it is "---". You
+       can then go back to the edit versions page and add new versions to
+       your product.
+       Otherwise, click the "Add" button to the right of the "Add a new
+       version" text.
+    3. Enter the name of the Version. This can be free-form characters up
+       to the limit of the text box. Then select the "Add" button.
+    4. At this point you can select "Edit" to edit more Versions, or
+       return to the "Query" page, from which you can navigate back to
+       the product through the "components" link at the foot of the Query
+       page.
+     _________________________________________________________________
+
+3.3.4. Milestones
+
+   Milestones are "targets" that you plan to get a bug fixed by. For
+   example, you have a bug that you plan to fix for your 3.0 release, it
+   would be assigned the milestone of 3.0. Or, you have a bug that you
+   plan to fix for 2.8, this would have a milestone of 2.8.
+
+     Note: Milestone options will only appear for a Product if you
+     turned the "usetargetmilestone" field in the "Edit Parameters"
+     screen "On".
+
+   To create new Milestones, set Default Milestones, and set Milestone
+   URL:
+
+    1. Select "edit milestones"
+    2. Select "Add" to the right of the "Add a new milestone" text
+    3. Enter the name of the Milestone in the "Milestone" field. You can
+       optionally set the "Sortkey", which is a positive or negative
+       number (-255 to 255) that defines where in the list this
+       particular milestone appears. Select "Add".
+       Example 3-4. Using SortKey with Target Milestone
+       Let's say you create a target milestone called "Release 1.0", with
+       Sortkey set to "0". Later, you realize that you will have a public
+       beta, called "Beta1". You can create a Milestone called "Beta1",
+       with a Sortkey of "-1" in order to ensure people will see the
+       Target Milestone of "Beta1" earlier on the list than "Release 1.0"
+    4. If you want to add more milestones, select the "Edit" link. If you
+       don't, well shoot, you have to go back to the "query" page and
+       select "components" again, and make your way back to the Product
+       you were editing.
+
+     Note: This is another in the list of unusual user interface
+     decisions that we'd like to get cleaned up. Shouldn't there be a
+     link to the effect of "edit the Product I was editing when I ended
+     up here"? In any case, clicking "components" in the footer takes
+     you back to the "Select product" screen, from which you can begin
+     editing your product again.
+    5. From the Edit Product screen again (once you've made your way
+       back), enter the URL for a description of what your milestones are
+       for this product in the "Milestone URL" field. It should be of the
+       format "http://www.foo.com/bugzilla/product_milestones.html"
+       Some common uses of this field include product descriptions,
+       product roadmaps, and of course a simple description of the
+       meaning of each milestone.
+    6. If you're using Target Milestones, the "Default Milestone" field
+       must have some kind of entry. If you really don't care if people
+       set coherent Target Milestones, simply leave this at the default,
+       "---". However, controlling and regularly updating the Default
+       Milestone field is a powerful tool when reporting the status of
+       projects.
+       Select the "Update" button when you are done.
+    7.
+     _________________________________________________________________
+
+3.3.5. Voting
+
+   The concept of "voting" is a poorly understood, yet powerful feature
+   for the management of open-source projects. Each user is assigned so
+   many Votes per product, which they can freely reassign (or assign
+   multiple votes to a single bug). This allows developers to gauge user
+   need for a particular enhancement or bugfix. By allowing bugs with a
+   certain number of votes to automatically move from "UNCONFIRMED" to
+   "NEW", users of the bug system can help high-priority bugs garner
+   attention so they don't sit for a long time awaiting triage.
+
+   The daunting challenge of Votes is deciding where you draw the line
+   for a "vocal majority". If you only have a user base of 100 users,
+   setting a low threshold for bugs to move from UNCONFIRMED to NEW makes
+   sense. As the Bugzilla user base expands, however, these thresholds
+   must be re-evaluated. You should gauge whether this feature is worth
+   the time and close monitoring involved, and perhaps forego
+   implementation until you have a critical mass of users who demand it.
+
+   To modify Voting settings:
+
+    1. Navigate to the "Edit Product" screen for the Product you wish to
+       modify
+    2. Set "Maximum Votes per person" to your calculated value. Setting
+       this field to "0" disables voting.
+    3. Set "Maximum Votes a person can put on a single bug" to your
+       calculated value. It should probably be some number lower than the
+       "Maximum votes per person". Setting this field to "0" disables
+       voting, but leaves the voting options open to the user. This is
+       confusing.
+    4. Set "Number of votes a bug in this product needs to automatically
+       get out of the UNCONFIRMED state" to your calculated number.
+       Setting this field to "0" disables the automatic move of bugs from
+       UNCONFIRMED to NEW. Some people advocate leaving this at "0", but
+       of what use are Votes if your Bugzilla user base is unable to
+       affect which bugs appear on Development radar?
+
+     Tip: You should probably set this number to higher than a small
+     coalition of Bugzilla users can influence it. Most sites use this
+     as a "referendum" mechanism -- if users are able to vote a bug out
+     of UNCONFIRMED, it is a really bad bug!
+    5. Once you have adjusted the values to your preference, select the
+       "Update" button.
+     _________________________________________________________________
+
+3.3.6. Groups and Group Security
+
+   Groups can be very useful in bugzilla, because they allow users to
+   isolate bugs or products that should only be seen by certain people.
+   Groups can also be a complicated minefield of interdependencies and
+   weirdness if mismanaged.
+
+   Example 3-5. When to Use Group Security
+
+   Many Bugzilla sites isolate "Security-related" bugs from all other
+   bugs. This way, they can have a fix ready before the security
+   vulnerability is announced to the world. You can create a "Security"
+   product which, by default, has no members, and only add members to the
+   group (in their individual User page, as described under User
+   Administration) who should have priveleged access to "Security" bugs.
+   Alternately, you may create a Group independently of any Product, and
+   change the Group mask on individual bugs to restrict access to members
+   only of certain Groups.
+
+   Groups only work if you enable the "usebuggroups" paramater. In
+   addition, if the "usebuggroupsentry" parameter is "On", one can
+   restrict access to products by groups, so that only members of a
+   product group are able to view bugs within that product. Group
+   security in Bugzilla can be divided into two categories: Generic and
+   Product-Based.
+
+     Note: Groups in Bugzilla are a complicated beast that evolved out
+     of very simple user permission bitmasks, apparently itself derived
+     from common concepts in UNIX access controls. A "bitmask" is a
+     fixed-length number whose value can describe one, and only one, set
+     of states. For instance, UNIX file permissions are assigned bitmask
+     values: "execute" has a value of 1, "write" has a value of 2, and
+     "read" has a value of 4. Add them together, and a file can be read,
+     written to, and executed if it has a bitmask of "7". (This is a
+     simplified example -- anybody who knows UNIX security knows there
+     is much more to it than this. Please bear with me for the purpose
+     of this note.) The only way a bitmask scheme can work is by
+     doubling the bit count for each value. Thus if UNIX wanted to offer
+     another file permission, the next would have to be a value of 8,
+     then the next 16, the next 32, etc.
+
+     Similarly, Bugzilla offers a bitmask to define group permissions,
+     with an internal limit of 64. Several are already occupied by
+     built-in permissions. The way around this limitation is to avoid
+     assigning groups to products if you have many products, avoid
+     bloating of group lists, and religiously prune irrelevant groups.
+     In reality, most installations of Bugzilla support far fewer than
+     64 groups, so this limitation has not hit for most sites, but it is
+     on the table to be revised for Bugzilla 3.0 because it interferes
+     with the security schemes of some administrators.
+
+   To enable Generic Group Security ("usebuggroups"):
+
+    1. Turn "On" "usebuggroups" in the "Edit Parameters" screen.
+    2. You will generally have no groups set up. Select the "groups" link
+       in the footer.
+    3. Take a moment to understand the instructions on the "Edit Groups"
+       screen. Once you feel confident you understand what is expected of
+       you, select the "Add Group" link.
+    4. Fill out the "New Name" (remember, no spaces!), "New Description",
+       and "New User RegExp" fields. "New User RegExp" allows you to
+       automatically place all users who fulfill the Regular Expression
+       into the new group.
+       Example 3-6. Creating a New Group
+       I created a group called "DefaultGroup" with a description of
+       "This is simply a group to play with", and a "New User RegExp" of
+       "*@velio.com". This new group automatically includes all Bugzilla
+       users with "@velio.com" at the end of their user id. When I
+       finished, my new group was assigned bit #128.
+       When you have finished, select the "Add" button.
+
+   To enable Product-Based Group Security ("usebuggroupsentry"):
+
+   Warning
+
+   Don't forget that you only have 64 groups masks available, total, for
+   your installation of Bugzilla! If you plan on having more than 50
+   products in your individual Bugzilla installation, and require group
+   security for your products, you should consider either running
+   multiple Bugzillas or using Generic Group Security instead of
+   Product-Based ("usebuggroupsentry") Group Security.
+
+    1. Turn "On" "usebuggroups" and "usebuggroupsentry" in the "Edit
+       Parameters" screen.
+
+       Warning
+   "usebuggroupsentry" has the capacity to prevent the administrative
+   user from directly altering bugs because of conflicting group
+   permissions. If you plan on using "usebuggroupsentry", you should plan
+   on restricting administrative account usage to administrative duties
+   only. In other words, manage bugs with an unpriveleged user account,
+   and manage users, groups, Products, etc. with the administrative
+   account.
+    2. You will generally have no Groups set up, unless you enabled
+       "usebuggroupsentry" prior to creating any Products. To create
+       "Generic Group Security" groups, follow the instructions given
+       above. To create Product-Based Group security, simply follow the
+       instructions for creating a new Product. If you need to add users
+       to these new groups as you create them, you will find the option
+       to add them to the group available under the "Edit User" screens.
+     _________________________________________________________________
+
+3.4. Bugzilla Security
+
+
+
+   Putting your money in a wall safe is better protection than depending
+   on the fact that no one knows that you hide your money in a mayonnaise
+   jar in your fridge.
+
+     Note: Poorly-configured MySQL, Bugzilla, and FTP installations have
+     given attackers full access to systems in the past. Please take
+     these guidelines seriously, even for Bugzilla machines hidden away
+     behind your firewall. 80% of all computer trespassers are insiders,
+     not anonymous crackers.
+
+   First thing's first: Secure your installation.
+
+     Note: These instructions must, of necessity, be somewhat vague
+     since Bugzilla runs on so many different platforms. If you have
+     refinements of these directions for specific platforms, please
+     submit them to mozilla-webtools@mozilla.org
+
+    1. Ensure you are running at least MysQL version 3.22.32 or newer.
+       Earlier versions had notable security holes and poorly secured
+       default configuration choices.
+    2. There is no substitute for understanding the tools on your system!
+       Read The MySQL Privelege System until you can recite it from
+       memory!
+       At the very least, ensure you password the "mysql -u root" account
+       and the "bugs" account, establish grant table rights (consult the
+       Keystone guide in Appendix C: The Bugzilla Database for some
+       easy-to-use details) that do not allow CREATE, DROP, RELOAD,
+       SHUTDOWN, and PROCESS for user "bugs". I wrote up the Keystone
+       advice back when I knew far less about security than I do now : )
+    3. Lock down /etc/inetd.conf. Heck, disable inet entirely on this
+       box. It should only listen to port 25 for Sendmail and port 80 for
+       Apache.
+    4. Do not run Apache as "nobody". This will require very lax
+       permissions in your Bugzilla directories. Run it, instead, as a
+       user with a name, set via your httpd.conf file.
+    5. Ensure you have adequate access controls for the
+       $BUGZILLA_HOME/data/ and $BUGZILLA_HOME/shadow/ directories, as
+       well as the $BUGZILLA_HOME/localconfig file. The localconfig file
+       stores your "bugs" user password, which would be terrible to have
+       in the hands of a criminal. Also some files under
+       $BUGZILLA_HOME/data/ store sensitive information, and
+       $BUGZILLA_HOME/shadow/ stores bug information for faster
+       retrieval. If you fail to secure these directories and this file,
+       you will expose bug information to those who may not be allowed to
+       see it.
+       On Apache, you can use .htaccess files to protect access to these
+       directories, as outlined in Bug 57161 for the localconfig file,
+       and Bug 65572 for adequate protection in your data/ and shadow/
+       directories.
+       Note the instructions which follow are Apache-specific. If you use
+       IIS, Netscape, or other non-Apache web servers, please consult
+       your system documentation for how to secure these files from being
+       transmitted to curious users.
+       Place the following text into a file named ".htaccess", readable
+       by your web server, in your $BUGZILLA_HOME/data directory.
+             <Files comments>
+             allow from all
+             </Files>
+             deny from all
+
+       Place the following text into a file named ".htaccess", readable
+       by your web server, in your $BUGZILLA_HOME/ directory.
+             <Files localconfig>
+             deny from all
+             </Files>
+             allow from all
+
+       Place the following text into a file named ".htaccess", readable
+       by your web server, in your $BUGZILLA_HOME/shadow directory.
+             deny from all
+     _________________________________________________________________
+
+Chapter 4. Using Bugzilla
+
+
+
+   What, Why, How, & What's in it for me?
+     _________________________________________________________________
+
+4.1. What is Bugzilla?
+
+   Bugzilla is one example of a class of programs called "Defect Tracking
+   Systems", or, more commonly, "Bug-Tracking Systems". Defect Tracking
+   Systems allow individual or groups of developers to keep track of
+   outstanding bugs in their product effectively. Bugzilla was originally
+   written by Terry Weissman in a programming language called "TCL", to
+   replace a crappy bug-tracking database used internally for Netscape
+   Communications. Terry later ported Bugzilla to Perl from TCL, and in
+   Perl it remains to this day. Most commercial defect-tracking software
+   vendors at the time charged enormous licensing fees, and Bugzilla
+   quickly became a favorite of the open-source crowd (with its genesis
+   in the open-source browser project, Mozilla). It is now the de-facto
+   standard defect-tracking system against which all others are measured.
+
+   Bugzilla has matured immensely, and now boasts many advanced features.
+   These include:
+
+     * integrated, product-based granular security schema
+     * inter-bug dependencies and dependency graphing
+     * advanced reporting capabilities
+     * a robust, stable RDBMS back-end
+     * extensive configurability
+     * a very well-understood and well-thought-out natural bug resolution
+       protocol
+     * email, XML, and HTTP APIs
+     * available integration with automated software configuration
+       management systems, including Perforce and CVS.
+     * too many more features to list
+
+   Despite its current robustness and popularity, however, Bugzilla faces
+   some near-term challenges, such as reliance on a single database, a
+   lack of abstraction of the user interface and program logic, verbose
+   email bug notifications, a powerful but daunting query interface,
+   little reporting configurability, problems with extremely large
+   queries, some unsupportable bug resolution options, no
+   internationalization, and dependence on some nonstandard libraries.
+
+   Some recent headway has been made on the query front, however. If you
+   are using the latest version of Bugzilla, you should see a "simple
+   search" form on the default front page of your Bugzilla install. Type
+   in two or three search terms and you should pull up some relevant
+   information. This is also available as "queryhelp.cgi".
+
+   Despite these small problems, Bugzilla is very hard to beat. It is
+   under very active development to address the current issues, and a
+   long-awaited overhaul in the form of Bugzilla 3.0 is expected sometime
+   later this year.
+     _________________________________________________________________
+
+4.2. Why Should We Use Bugzilla?
+
+
+
+   No, Who's on first...
+
+   For many years, defect-tracking software has remained principally the
+   domain of large software development houses. Even then, most shops
+   never bothered with bug-tracking software, and instead simply relied
+   on shared lists and email to monitor the status of defects. This
+   procedure is error-prone and tends to cause those bugs judged least
+   significant by developers to be dropped or ignored
+
+   These days, many companies are finding that integrated defect-tracking
+   systems reduce downtime, increase productivity, and raise customer
+   satisfaction with their systems. Along with full disclosure, an open
+   bug-tracker allows manufacturers to keep in touch with their clients
+   and resellers, to communicate about problems effectively throughout
+   the data management chain. Many corporations have also discovered that
+   defect-tracking helps reduce costs by providing IT support
+   accountability, telephone support knowledge bases, and a common,
+   well-understood system for accounting for unusual system or software
+   issues.
+
+   But why should you use Bugzilla?
+
+   Bugzilla is very adaptable to various situations. Known uses currently
+   include IT support queues, Systems Administration deployment
+   management, chip design and development problem tracking (both
+   pre-and-post fabrication), and software and hardware bug tracking for
+   luminaries such as Redhat, Loki software, Linux-Mandrake, and VA
+   Systems. Combined with systems such as CVS, Bonsai, or Perforce SCM,
+   Bugzilla provides a powerful, easy-to-use solution to configuration
+   management and replication problems
+
+   Bugzilla can dramatically increase the productivity and accountability
+   of individual employees by providing a documented workflow and
+   positive feedback for good performance. How many times do you wake up
+   in the morning, remembering that you were supposed to do *something*
+   today, but you just can't quite remember? Put it in Bugzilla, and you
+   have a record of it from which you can extrapolate milestones, predict
+   product versions for integration, and by using Bugzilla's e-mail
+   integration features be able to follow the discussion trail that led
+   to critical decisions.
+
+   Ultimately, Bugzilla puts the power in your hands to improve your
+   value to your employer or business while providing a usable framework
+   for your natural attention to detail and knowledge store to flourish.
+     _________________________________________________________________
+
+4.3. How do I use Bugzilla?
+
+
+
+   Hey! I'm Woody! Howdy, Howdy, Howdy!
+
+   Bugzilla is a large, complex system. Describing how to use it requires
+   some time. If you are only interested in installing or administering a
+   Bugzilla installation, please consult the Installing and Administering
+   Bugzilla portions of this Guide. This section is principally aimed
+   towards developing end-user mastery of Bugzilla, so you may fully
+   enjoy the benefits afforded by using this reliable open-source
+   bug-tracking software.
+
+   Throughout this portion of the Guide, we will refer to user account
+   options available at the Bugzilla test installation,
+   landfill.tequilarista.org.
+
+     Note: Some people have run into difficulties completing this
+     tutorial. If you run into problems, please check the updated,
+     online documentation available at
+     http://www.trilobyte.net/barnsons. If you're still stumped, please
+     subscribe to the newsgroup and provide details of exactly what's
+     stumping you! If enough people complain, I'll have to fix it in the
+     next version of this Guide. You can subscribe to the newsgroup at
+     news://news.mozilla.org/netscape.public.mozilla.webtools
+
+   Although Landfill serves as a great introduction to Bugzilla, it does
+   not offer all the options you would have as a user on your own
+   installation of Bugzilla, nor can it do more than serve as a general
+   introduction to Bugzilla. Additionally, Landfill often runs
+   cutting-edge versions of Bugzilla for testing, so some things may work
+   slightly differently than mentioned here.
+     _________________________________________________________________
+
+4.3.1. Create a Bugzilla Account
+
+   First thing's first! If you want to use Bugzilla, first you need to
+   create an account. Consult with the administrator responsible for your
+   installation of Bugzilla for the URL you should use to access it. If
+   you're test-driving the end-user Bugzilla experience, use this URL:
+   http://landfill.tequilarista.org/mozilla/bugzilla/
+
+    1. Click the "Open a new Bugzilla account" link.
+    2. Enter your "E-mail address" and "Real Name" (or whatever name you
+       want to call yourself) in the spaces provided, then select the
+       "Create Account" button.
+    3. Within 5-10 minutes, you should receive an email to the address
+       you provided above, which contains your login name (generally the
+       same as the email address), and a password you can use to access
+       your account. This password is randomly generated, and should be
+       changed at your nearest opportunity (we'll go into how to do it
+       later).
+    4. Click the "Log In" link in the yellow area at the bottom of the
+       page in your browser, then enter your "E-mail address" and
+       "Password" you just received into the spaces provided, and select
+       "Login".
+
+     Note: If you ever forget your password, you can come back to this
+     page, enter your "E-mail address", then select the "E-mail me a
+     password" button to have your password mailed to you again so that
+     you can login.
+
+       Caution
+   Many modern browsers include an "Auto-Complete" or "Form Fill" feature
+   to remember the user names and passwords you type in at many sites.
+   Unfortunately, sometimes they attempt to "guess" what you will put in
+   as your password, and guess wrong. If you notice a text box is already
+   filled out, please overwrite the contents of the text box so you can
+   be sure to input the correct information.
+
+   Congratulations! If you followed these directions, you now are the
+   proud owner of a user account on landfill.tequilarista.org (Landfill)
+   or your local Bugzilla install. You should now see in your browser a
+   page called the "Bugzilla Query Page". It may look daunting, but with
+   this Guide to walk you through it, you will master it in no time.
+     _________________________________________________________________
+
+4.3.2. The Bugzilla Query Page
+
+   The Bugzilla Query Page is the heart and soul of Bugzilla. It is the
+   master interface where you can find any bug report, comment, or patch
+   currently in the Bugzilla system. We'll go into how to create your own
+   bug report later on.
+
+   There are efforts underway to simplify query usage. If you have a
+   local installation of Bugzilla 2.12 or higher, you should have
+   "quicksearch.html" available to use and simplify your searches. There
+   is also, or shortly will be, a helper for the query interface, called
+   "queryhelp.cgi". Landfill tends to run the latest code, so these two
+   utilities should be available there for your perusal.
+
+   At this point, please visit the main Bugzilla site,
+   bugzilla.mozilla.org, to see a more fleshed-out query page.
+
+   The first thing you need to notice about the Bugzilla Query Page is
+   that nearly every box you see on your screen has a hyperlink nearby,
+   explaining what it is or what it does. Near the upper-left-hand corner
+   of your browser window you should see the word "Status" underlined.
+   Select it.
+
+   Notice the page that popped up? Every underlined word you see on your
+   screen is a hyperlink that will take you to context-sensitive help.
+   Click around for a while, and learn what everything here does. To
+   return to the query interface after pulling up a help page, use the
+   "Back" button in your browser.
+
+   I'm sure that after checking out the online help, you are now an
+   Expert on the Bugzilla Query Page. If, however, you feel you haven't
+   mastered it yet, let me walk you through making a few successful
+   queries to find out what there are in the Bugzilla bug-tracking system
+   itself.
+
+    1. Ensure you are back on the "Bugzilla Query Page" Do nothing in the
+       boxes marked "Status", "Resolution", "Platform", "OpSys",
+       "Priority", or "Severity". The default query for "Status" is to
+       find all bugs that are NEW, ASSIGNED, or REOPENED, which is what
+       we want. If you don't select anything in the other 5 scrollboxes
+       there, then you are saying that "any of these are OK"; we're not
+       locking ourselves into only finding bugs on the "DEC" Platform, or
+       "Windows 95" OpSys (Operating System). You're smart, I think you
+       have it figured out.
+       Basically, selecting anything on the query page narrows your
+       search down. Leaving stuff unselected, or text boxes unfilled,
+       broadens your search!
+    2. You see the box immediately below the top six boxes that contains
+       an "Email" text box, with the words "matching as", a drop-down
+       selection box, then some checkboxes with "Assigned To" checked by
+       default? This allows you to filter your search down based upon
+       email address. Let's put my email address in there, and see what
+       happens.
+       Type "barnboy@trilobyte.net" in the top Email text box.
+    3. Let's narrow the search some more. Scroll down until you find the
+       box with the word "Program" over the top of it. This is where we
+       can narrow our search down to only specific products (software
+       programs or product lines) in our Bugzilla database. Please notice
+       the box is a scrollbox. Using the down arrow on the scrollbox,
+       scroll down until you can see an entry called "Webtools". Select
+       this entry.
+    4. Did you notice that some of the boxes to the right changed when
+       you selected "Webtools"? Every Program (or Product) has different
+       Versions, Components, and Target Milestones associated with it. A
+       "Version" is the number of a software program.
+       Example 4-1. Some Famous Software Versions
+       Do you remember the hype in 1995 when Microsoft Windows 95(r) was
+       released? It may have been several years ago, but Microsoft(tm)
+       spent over $300 Million advertising this new Version of their
+       software. Three years later, they released Microsoft Windows
+       98(r), another new version, to great fanfare, and then in 2000
+       quietly released Microsoft Windows ME(Millenium Edition)(r).
+       Software "Versions" help a manufacturer differentiate their
+       current product from their previous products. Most do not identify
+       their products by the year they were released. Instead, the
+       "original" version of their software will often be numbered "1.0",
+       with small bug-fix releases on subsequent tenths of a digit. In
+       most cases, it's not a decimal number; for instance, often 1.9 is
+       an older version of the software than 1.11, but is a newer version
+       than 1.1.1.
+       In general, a "Version" in Bugzilla should refer to released
+       products, not products that have not yet been released to the
+       public. Forthcoming products are what the Target Milestone field
+       is for.
+       A "Component" is a piece of a Product. It may be a standalone
+       program, or some other logical division of a Product or Program.
+       Normally, a Component has a single Owner, who is responsible for
+       overseeing efforts to improve that Component.
+       Example 4-2. Mozilla Webtools Components
+       Mozilla's "Webtools" Product is composed of several pieces
+       (Components):
+
+       Bonsai, a tool to show recent changes to Mozilla
+       Bugzilla, a defect-tracking tool
+   Build, a tool to automatically compile source code into
+   machine-readable form
+       Despot, a program that controls access to the other Webtools
+   LXR, a utility that automatically marks up text files to make them
+   more readable
+       MozBot, a "robot" that announces changes to Mozilla in Chat
+       TestManager, a tool to help find bugs in Mozilla
+       Tinderbox, which displays reports from Build
+       A different person is responsible for each of these Components.
+       Tara Hernandez keeps the "Bugzilla" component up-to-date.
+       A "Milestone", or "Target Milestone" is a often a planned future
+       "Version" of a product. In many cases, though, Milestones simply
+       represent significant dates for a developer. Having certain
+       features in your Product is frequently tied to revenue (money) the
+       developer will receive if the features work by the time she
+       reaches the Target Milestone. Target Milestones are a great tool
+       to organize your time. If someone will pay you $100,000 for
+       incorporating certain features by a certain date, those features
+       by that Milestone date become a very high priority. Milestones
+       tend to be highly malleable creatures, though, that appear to be
+       in reach but are out of reach by the time the important day
+       arrives.
+       The Bugzilla Project has set up Milestones for future Bugzilla
+       versions 2.14, 2.16, 2.18, 3.0, etc. However, a Target Milestone
+       can just as easily be a specific date, code name, or weird
+       alphanumeric combination, like "M19".
+    5. OK, now let's select the "Bugzilla" component from its scrollbox.
+    6. Skip down the page a bit -- do you see the "submit query" button?
+       Select it, and let's run this query!
+    7. Congratulations! You've completed your first Query, and have
+       before you the Bug List of the author of this Guide, Matthew P.
+       Barnson (barnboy@trilobyte.net). If I'm doing well, you'll have a
+       cryptic "Zarro Boogs Found" message on your screen. It is just a
+       happy hacker's way of saying "Zero Bugs Found". However, I am
+       fairly certain I will always have some bugs assigned to me that
+       aren't done yet, so you won't often see that message!
+
+   I encourage you to click the bug numbers in the left-hand column and
+   examine my bugs. Also notice that if you click the underlined links
+   near the top of this page, they do not take you to context-sensitive
+   help here, but instead sort the columns of bugs on the screen! When
+   you need to sort your bugs by priority, severity, or the people they
+   are assigned to, this is a tremendous timesaver.
+
+   A couple more interesting things about the Bug List page:
+
+   Change Columns: by selecting this link, you can show all kinds of
+   information in the Bug List
+   Change several bugs at once: If you have sufficient rights to change
+   all the bugs shown in the Bug List, you can mass-modify them. This is
+   a big time-saver.
+   Send mail to bug owners: If you have many related bugs, you can
+   request an update from every person who owns the bugs in the Bug List
+   asking them the status.
+   Edit this query: If you didn't get exactly the results you were
+   looking for, you can return to the Query page through this link and
+   make small revisions to the query you just made so you get more
+   accurate results.
+
+     Note: There are many more options to the Bugzilla Query Page and
+     the Bug List than I have shown you. But this should be enough for
+     you to learn to get around. I encourage you to check out the
+     Bugzilla Home Page to learn about the Anatomy and Life Cycle of a
+     Bug before continuing.
+     _________________________________________________________________
+
+4.3.3. Creating and Managing Bug Reports
+
+
+
+   And all this time, I thought we were taking bugs out...
+     _________________________________________________________________
+
+4.3.3.1. Writing a Great Bug Report
+
+   Before we plunge into writing your first bug report, I encourage you
+   to read Mozilla.org's Bug Writing Guidelines. While some of the advice
+   is Mozilla-specific, the basic principles of reporting Reproducible,
+   Specific bugs, isolating the Product you are using, the Version of the
+   Product, the Component which failed, the Hardware Platform, and
+   Operating System you were using at the time of the failure go a long
+   way toward ensuring accurate, responsible fixes for the bug that bit
+   you.
+
+   While you are at it, why not learn how to find previously reported
+   bugs? Mozilla.org has published a great tutorial on finding duplicate
+   bugs, available at
+   http://www.mozilla.org/quality/help/beginning-duplicate-finding.html.
+
+   I realize this was a lot to read. However, understanding the mentality
+   of writing great bug reports will help us on the next part!
+
+    1. Go back to http://landfill.tequilarista.org/mozilla/bugzilla/ in
+       your browser.
+    2. Select the Enter a new bug report link.
+    3. Select a product.
+    4. Now you should be at the "Enter Bug" form. The "reporter" should
+       have been automatically filled out for you (or else Bugzilla
+       prompted you to Log In again -- you did keep the email with your
+       username and password, didn't you?).
+    5. Select a Component in the scrollbox.
+    6. Bugzilla should have made reasonable guesses, based upon your
+       browser, for the "Platform" and "OS" drop-down boxes. If those are
+       wrong, change them -- if you're on an SGI box running IRIX, we
+       want to know!
+    7. Fill in the "Assigned To" box with the email address you provided
+       earlier. This way you don't end up sending copies of your bug to
+       lots of other people, since it's just a test bug.
+    8. Leave the "CC" text box blank. Fill in the "URL" box with
+       "http://www.mozilla.org".
+    9. Enter "The Bugzilla Guide" in the Summary text box, and place any
+       comments you have on this tutorial, or the Guide in general, into
+       the Description box.
+
+   Voila! Select "Commit" and send in your bug report! Next we'll look at
+   resolving bugs.
+     _________________________________________________________________
+
+4.3.3.2. Managing your Bug Reports
+
+   OK, you should have a link to the bug you just created near the top of
+   your page. It should say "Bug XXXX posted", with a link to the right
+   saying "Back to BUG# XXXX". Select this link.
+
+    1. Scroll down a bit on the subsequent page, until you see the
+       "Resolve bug, changing resolution to (dropdown box). Normally, you
+       would "Accept bug (change status to ASSIGNED)", fix it, and then
+       resolve. But in this case, we're going to short-circuit the
+       process because this wasn't a real bug. Change the dropdown next
+       to "Resolve Bug" to "INVALID", make sure the radio button is
+       marked next to "Resolve Bug", then click "Commit".
+    2. Hey! It said it couldn't take the change in a big red box! That's
+       right, you must specify a Comment in order to make this change.
+       Select the "Back" button in your browser, add a Comment, then try
+       Resolving the bug with INVALID status again. This time it should
+       work.
+
+   You have now learned the basics of Bugzilla navigation, entering a
+   bug, and bug maintenance. I encourage you to explore these features,
+   and see what you can do with them! We'll spend no more time on
+   individual Bugs or Queries from this point on, so you are on your own
+   there.
+
+   But I'll give a few last hints!
+
+   There is a CLUE on the Query page that will teach you more how to use
+   the form.
+
+   If you click the hyperlink on the Component box of the Query page, you
+   will be presented a form that will describe what all the components
+   are.
+
+   Possibly the most powerful feature of the Query page is the Boolean
+   Chart section. It's a bit confusing to use the first time, but can
+   provide unparalleled flexibility in your queries, allowing you to
+   build extremely powerful requests.
+
+   Finally, you can build some nifty Reports using the "Bug Reports" link
+   near the bottom of the query page, and also available via the
+   "Reports" link at the footer of each page.
+     _________________________________________________________________
+
+4.4. What's in it for me?
+
+
+
+   Indiana, it feels like we walking on fortune cookies!
+
+   These ain't fortune cookies, kid...
+
+   Customized User Preferences offer tremendous versatility to your
+   individual Bugzilla experience. Let's plunge into what you can do! The
+   first step is to click the "Edit prefs" link at the footer of each
+   page once you have logged in to Landfill.
+     _________________________________________________________________
+
+4.4.1. Account Settings
+
+   On this page, you can change your basic Account Settings, including
+   your password and full name. For security reasons, in order to change
+   anything on this page you must type your current password into the
+   "Old Password" field. If you wish to change your password, type the
+   new password you want into the "New Password" field and again into the
+   "Re-enter new password" field to ensure you typed your new password
+   correctly. Select the "Submit" button and you're done!
+     _________________________________________________________________
+
+4.4.2. Email Settings
+
+4.4.2.1. Email Notification
+
+     Note: The email notification settings described below have been
+     obsoleted in Bugzilla 2.12, and this section will be replaced with
+     a comprehensive description of the amazing array of new options at
+     your disposal. However, in the meantime, throw this chunk out the
+     window and go crazy with goofing around with different notification
+     options.
+
+   Ahh, here you can reduce or increase the amount of email sent you from
+   Bugzilla! In the drop-down "Notify me of changes to", select one of
+
+   All qualifying bugs: sends you every change to every bug where your
+   name is somewhere on it, regardless of who changed it.
+   Only those bugs which I am listed in the CC line: prevents you from
+   receiving mail for which you are the reporter,' owner, or QA contact.
+   If you are on the CC list, presumably someone had a good reason for
+   you to get the email.
+   All qulifying bugs except those which I change: This is the default,
+   and a sensible setting. If someone else changes your bugs, you will
+   get emailed, but if you change bugs yourself you will receive no
+   notification of the change.
+     _________________________________________________________________
+
+4.4.2.2. New Email Technology
+
+     Note: This option may not be available in all Bugzilla
+     installations, depending upon the preferences of the systems
+     administrator responsible for the setup of your Bugzilla. However,
+     if you really want this functionality, ask her to "enable
+     newemailtech in Params" and "make it the default for all new
+     users", referring her to the Administration section of this Guide.
+
+   Disregard the warnings about "experimental and bleeding edge"; the
+   code to handle email in a cleaner manner than that historically used
+   for Bugzilla is quite robust and well-tested now.
+
+   I recommend you enable the option, "Click here to sign up (and risk
+   any bugs)". Your email-box will thank you for it. The fundamental
+   shift in "newemailtech" is away from standard UNIX "diff" output,
+   which is quite ugly, to a prettier, better laid-out email.
+     _________________________________________________________________
+
+4.4.2.3. "Watching" Users
+
+     Note: This option may not be available in all Bugzilla
+     installations, depending upon the preferences of the systems
+     administrator responsible for the setup of your Bugzilla. However,
+     if you really want this functionality, ask her to "enable watchers
+     in Params".
+
+   By entering user email names into the "Users to watch" text entry box,
+   delineated by commas, you can watch bugs of other users. This powerful
+   functionality enables seamless transitions as developers change
+   projects, managers wish to get in touch with the issues faced by their
+   direct reports, or users go on vacation. If any of these three
+   situations apply to you, you will undoubtedly find this feature quite
+   convenient.
+     _________________________________________________________________
+
+4.4.3. Page Footer
+
+     Note: By default, this page is quite barren. However, go explore
+     the Query Page some more; you will find that you can store numerous
+     queries on the server, so if you regularly run a particular query
+     it is just a drop-down menu away. On this page of Preferences, if
+     you have many stored queries you can elect to have them always
+     one-click away!
+
+   If you have many stored queries on the server, here you will find
+   individual drop-downs for each stored query. Each drop-down gives you
+   the option of that query appearing on the footer of every page in
+   Bugzilla! This gives you powerful one-click access to any complex
+   searches you may set up, and is an excellent way to impress your
+   boss...
+
+     Tip: By default, the "My Bugs" link appears at the bottom of each
+     page. However, this query gives you both the bugs you have
+     reported, as well as those you are assigned. One of the most common
+     uses for this page is to remove the "My Bugs" link, replacing it
+     with two other queries, commonly called "My Bug Reports" and "My
+     Bugs" (but only referencing bugs assigned to you). This allows you
+     to distinguish those bugs you have reported from those you are
+     assigned. I commonly set up complex Boolean queries in the Query
+     page and link them to my footer in this page. When they are
+     significantly complex, a one-click reference can save hours of
+     work.
+     _________________________________________________________________
+
+4.4.4. Permissions
+
+   This is a purely informative page which outlines your current
+   permissions on this installation of Bugzilla. If you have permissions
+   to grant certain permissions to other users, the "other users" link
+   appears on this page as well as the footer. For more information
+   regarding user administration, please consult the Administration
+   section of this Guide.
+     _________________________________________________________________
+
+4.5. Using Bugzilla-Conclusion
+
+   Thank you for reading through this portion of the Bugzilla Guide. I
+   anticipate it may not yet meet the needs of all readers. If you have
+   additional comments or corrections to make, please submit your
+   contributions to the mozilla-webtools mailing list/newsgroup. The
+   mailing list is mirrored to the netscape.public.mozilla.webtools
+   newsgroup, and the newsgroup is mirrored to
+   mozilla-webtools@mozilla.org
+     _________________________________________________________________
+
+Chapter 5. Integrating Bugzilla with Third-Party Tools
+
+5.1. Bonsai
+
+   We need Bonsai integration information.
+     _________________________________________________________________
+
+5.2. CVS
+
+   We need CVS integration information
+     _________________________________________________________________
+
+5.3. Perforce SCM
+
+   Richard Brooksby created a Perforce integration tool for Bugzilla and
+   TeamTrack. You can find the main project page at
+   http://www.ravenbrook.com/project/p4dti. "p4dti" is now an officially
+   supported product from Perforce, and you can find the "Perforce Public
+   Depot" p4dti page at
+   http://public.perforce.com/public/perforce/p4dti/index.html.
+
+   Integration of Perforce with Bugzilla, once patches are applied, is
+   fairly seamless. However, p4dti is a patch against the Bugzilla 2.10
+   release, not the current 2.12 release. I anticipate patches for 2.12
+   will be out shortly. Check the project page regularly for updates, or
+   take the given patches and patch it manually. p4dti is designed to
+   support multiple defect trackers, and maintains its own documentation
+   for it. Please consult the pages linked above for further information.
+
+   Right now, there is no way to synchronize the Bug ID and the Perforce
+   Transaction Number, or to change the Bug ID to read (PRODUCT).bugID
+   unless you hack it in. Additionally, if you have synchronization
+   problems, the easiest way to avoid them is to only put the bug
+   information, comments, etc. into Bugzilla, and not into the Perforce
+   change records. They will link anyway; merely reference the bug ID
+   fixed in your change description, and put a comment into Bugzilla
+   giving the change ID that fixed the Bugzilla bug. It's a process
+   issue, not a technology question.
+     _________________________________________________________________
+
+5.4. Tinderbox
+
+   We need Tinderbox integration information
+     _________________________________________________________________
+
+Chapter 6. The Future of Bugzilla
+
+   Bugzilla's Future.  Much of this is the present, now.
+     _________________________________________________________________
+
+6.1. Reducing Spam
+
+   Those who use Bugzilla frequently are probably used to notification sp
+   am
+   - unwanted or unnecessary notifications.  A number of proposals have
+   been put forward to attempt to reduce this.
+   1. Reduce CC Spam
+   Some of you probably know me as that guy who CCs on heaps and heaps of
+   bugs.  Just as you get a lot of CC changes from me, so do I get a lot
+   from others.  Why should CC changes send out email notifications?
+   It's not necessarily the best idea to just remove the CC spam, there a
+   re
+   other issues too, like the difficulty of adding to large CC fields.
+   For these reasons and more, an RFE for a per user "BCC" facility exist
+   s
+   that people could use to silently and privately track bugs, in a simil
+   ar
+   way to voting today, but applying to an unlimited number of bugs.  See
+   "http://bugzilla.mozilla.org/show_bug.cgi?id=7345".
+   2. Bulk Changes
+   You know the drill - a large milestone change, a component movement,
+   whatever, and lots of notifications are generated.  If there's enough
+   maybe you'll just go delete, delete, delete, whoops, there goes anothe
+   r
+   notification that wasn't from the bulk change you missed.
+   Shouldn't bulk changes send out one notification?  A proposal for this
+   is at "http://bugzilla.mozilla.org/show_bug.cgi?id=26943".
+   3. Configurable Notification Criteria
+   It would be good if you could choose what you want to receive.  There
+   are two parts to this.
+   (a) Choose a selection of bugs you're interested in.  This would be
+   similar to CC except you let the set be computed from selection criter
+   ia
+   rather than limited to the bugs your name is on.  There is currently a
+   limited version of this in the bugzilla preferences, ie "all qualifyin
+   g
+   bugs"/"all qualifying bugs except the ones I change"/"only those bugs
+   which I am listed on the cc line".
+   (b) Choose what changes will trigger a notification for the bugs you a
+   re
+   watching.  With this, you could choose whether you want to receive cc,
+   dependency and keyword changes, for example.
+   Both of these proposals live at
+   "http://bugzilla.mozilla.org/show_bug.cgi?id=14137".
+   Note that they also live at
+   "http://bugzilla.mozilla.org/show_bug.cgi?id=17464", and the change
+   has been checked in.  This is fixed with Bugzilla 2.12 and is no longe
+   r
+   an issue.  Woo-Hoo!
+     _________________________________________________________________
+
+6.2. Better Searching
+
+   Current searching tools in Bugzilla include the querying mechanism,
+   special summary reports and dependency trees.  This message is about n
+   ew
+   facilities.
+   1. General Summary Reports
+   For some time now it has been apparent to me that the query bug list
+   leaves a little to be desired in its linear nature.  There is a need t
+   o
+   have categorised subsets, and counts of each category.  If you don't
+   believe me, how about these facilities already in place or which peopl
+   e
+   have asked for:
+   Most Doomed Reports - Categorised On Assignee, Shows and Counts Number
+   of Bugs For Each Assignee
+   Bug #15806 (Most Voted For Bugs) - Categorised On Product, Shows Bugs
+   Voters Most Want Fixed
+   Bug #9789 (BugAThon Tracking Page) - Categorised On Developer (Subset)
+   ,
+   Counts Number of Bugs
+   Bug #9409 and #9411 - The desire to be able to report on more subsets.
+   Hopefully you can see the gist of what is desired here.  It's a genera
+   l
+   reporting mechanism.
+   This mechanism lets you choose the subset of bugs to operate on (like
+   query), let's you categorise them, possibly along with subcategories a
+   nd
+   counts the number of bugs within each category.  It might or might not
+   show the actual bugs themselves, and it might limit the number of bugs
+   within a category, or categories to report on.
+   I'm further sure that many applications of this mechanism would only b
+   e
+   recognised once it was implemented.
+   The general summary reports bug is at
+   "http://bugzilla.mozilla.org/show_bug.cgi?id=12282".
+   2. Related Bugs
+   It would be nice to have a field where you could enter other bugs
+   related to the current bug - it would be handy for navigation and
+   possibly even finding duplicates.  See
+   "http://bugzilla.mozilla.org/show_bug.cgi?id=12286".
+   3. Column Specification Support
+   Currently query seems to get what columns to report on from whatever t
+   he
+   user last used.  This doesn't work well for "prepackaged queries", whe
+   re
+   you followed a link.  You can probably add a column by specifying a so
+   rt
+   column, but this is difficult and suboptimal.
+   Furthermore, I find that when I want to add a column to a query, it's
+   usually a one off and I would prefer it to go away for the next query.
+
+   Hence, it would be nice to specify the columns that appear on the quer
+   y
+   (and general summary report) pages.  The default query mechanism shoul
+   d
+   be able to let you specify your default columns.
+   This proposal lives at
+   "http://bugzilla.mozilla.org/show_bug.cgi?id=12284".
+     _________________________________________________________________
+
+6.3. Description Flags and Tracking Bugs
+
+   Since I last posted on this issue, we now have "keywords" that solve
+   many of the issues of description and status whiteboard keywords.  We
+   have seen a migration towards keywords, but there is still further to
+   go.
+   Description ( + Status Whiteboard ) Keywords
+   --------------------------------------------
+   Some description keywords remain.  I'd like to hear what reasons, othe
+   r
+   than time, there are for these staying as they are.  I'm suspecting ma
+   ny
+   are not really being used.  Hopefully we can totally remove these
+   eventually.
+   Tracking Bugs
+   -------------
+   When I suggested keywords, I did so to get rid of tracking bugs too,
+   though we've had less success on that front.
+   There are many disadvantages to tracking bugs.
+   - They can pollute bugs counts, and you must make sure you exclude
+   them.  I believe the meta keyword might be used for this purpose.
+   - They have an assignee but there is nothing to fix, and that person c
+   an
+   get whined at by Bugzilla.
+   - It would be better to craft your own "dependency tree" rather than
+   rely on a fixed hierachy in the bug system.
+   - In creating a nice little hierachy, many bugs duplicate information
+   that should be available in other ways, eg
+   "http://bugzilla.mozilla.org/show_bug.cgi?id=12833" which is
+   about beta 1 networking issues.  These could fall behind the actual
+   data.  What tracking bugs are good for, ad hoc lists, is what keywords
+   are better for.
+   - An automatically generated dependency structure between one "trackin
+   g
+   bug" and another would be better than a manual one, since it gives exa
+   ct
+   rather than manually set up classifications.
+   Probably the only feature preventing tracking bugs being replaced is t
+   he
+   dependency tree.  The quintessential tracking bug seems to be bug #722
+   9
+   "chofmann's watch list", which probably has about a couple of hundred
+   bugs at various levels, which allows a nice visualisation.
+   Before keywords can replace tracking bugs better visualisation is goin
+   g
+   to be required.  General summary reports and dependency forests of a b
+   ug
+   list ("http://bugzilla.mozilla.org/show_bug.cgi?id=12992") could both
+   help, but neither solves the problem totally.  Perhaps keywords within
+   keywords would help here.  In any case, I'm still thinking about this
+   one.
+   Some tracking bugs could definitely be turned into keywords immediatel
+   y
+   though, and I'll point the finger at
+   "http://bugzilla.mozilla.org/show_bug.cgi?id=7954" here since that's
+   what came to mind first.
+     _________________________________________________________________
+
+6.4. Bug Issues
+
+   1. Inline Bug Changes
+   Why do I see so many "moving to M5" and "reassigning to blahblah"
+   messages, and in other circumstances none are entered?  Why aren't the
+   se
+   automatically generated?  A comment should be only necessary when ther
+   e
+   is something to add, and if I'm not interested in this sort of
+   information, I should be able to hide it.
+   At the moment we're in a hybrid world where we don't get everything, b
+   ut
+   we can't get rid of the bug change "messages" either.  Furthermore,
+   "View Bug Activity" requires me to manually cross reference events on
+   another page, rather than being able to visually see the chronological
+   order.  Shouldn't I be able to see all the information on one page?
+   A proposal to allow bugs to be shown either way is at
+   "http://bugzilla.mozilla.org/show_bug.cgi?id=11368".
+   2.  Hard Wrapping Comments
+   One thing that annoys me is the fact that comments are "hard wrapped"
+   to
+   a certain column width.  This is a mistake Internet Mail and News has
+   made, unlike every word processor in existence, and as a consequence,
+   Usenet suffers to this day from bad software.  Why has Bugzilla repeat
+   ed
+   the problem?
+   Hard wrapping to a certain column width is open to abuse (see old
+   Mozilla browsers that didn't wrap properly, resulting in many ugly bug
+   reports we have to read to this day), and furthermore doesn't expand t
+   o
+   fill greater screen sizes.  I'm also under the impression the current
+   hard wrap uses a non-standard HTML facility.  See
+   "http://bugzilla.mozilla.org/show_bug.cgi?id=11901".
+   3. REMIND and LATER Are Evil
+   I really hate REMIND and LATER.  Not because they mean something
+   won't be implemented, but because they aren't the best solutions.
+   Why are they bad?  Well, basically because they are not resolved, yet
+   they are marked as such.  Hence queries have to be well crafted to
+   include them.
+   LATER, according to Bugzilla, means it won't be done this release.
+   There is a better mechanism of doing this, that is assigning to
+   nobody@mozilla.org and making the milestone blank.  It's more likely t
+   o
+   appear in a casual query, and it doesn't resolve the bug.
+   REMIND, according to Bugzilla, means it might still be implemented thi
+   s
+   release.  Well, why not just move it to a later milestone then?  You'r
+   e
+   a lot less likely to forget it.  If it's really needed, a keyword woul
+   d
+   be better.
+   Some people can't use blank milestones to mean an untargetted mileston
+   e,
+   since they use this to assess new bugs that have no target.  Hence, it
+   would be nice to distinguish between bugs that have not yet been
+   considered, and those that really are not assigned to any milestone in
+   the future (assumedly beyond).
+   All this is covered at
+   "http://bugzilla.mozilla.org/show_bug.cgi?id=13534".
+   4. Create An Enhancement Field
+   Currently enhancement is an option in severity.  This means that
+   important enhancements (like for example, POP3 support) are not proper
+   ly
+   distinguished as such, because they need a proper severity.  This
+   dilutes the meaning of enhancement.
+   If enhancement was separated, we could properly see what was an
+   enhancement.  See "http://bugzilla.mozilla.org/show_bug.cgi?id=9412".
+    I
+   see keywords like [RFE] and [FEATURE] that seem to be compensating for
+   this problem.
+     _________________________________________________________________
+
+6.5. Database Integrity
+
+   Bugzilla could be more proactive in detecting suboptimal situations an
+   d
+   prevent them or whine about them.
+   1. Bugzilla Crime #1: Marking A Bug Fixed With Unresolved Dependencies
+   It can't be marked fixed with unresolved dependencies.  Either mark it
+   INVALID (tracking bugs), fix the dependencies at the same time, or
+   resolve the blockers.
+   See "http://bugzilla.mozilla.org/show_bug.cgi?id=24496".
+   2. Keyword Restrictions
+   Some keywords should only apply in certain circumstances, eg beta1 =>
+   Milestone <
+   M14, css1 => Component = Style System are possibilities.  See
+   "http://bugzilla.mozilla.org/show_bug.cgi?id=26940".
+   3. Whine About Old Votes
+   Old votes can just sit on resolved bugs.  This is problematic with
+   duplicates especially.  Automatic transferral/removal is not
+   appropriate since bugs can be reopened, but a whining solution might
+   work.  See "http://bugzilla.mozilla.org/show_bug.cgi?id=27553".
+   4. Whine And Warn About Milestone Mismatches
+   Here's a fun one.  Bug X (M17) depends on Bug Y (M15).  Bug Y gets mov
+   ed
+   out to M19.  The notification to the assignee of Bug X gets ignored (o
+   f
+   course) and Bug X is now due to be fixed before one of its blockers.
+   Warnings about this when it is detected as well as whining about it in
+   email would help bring these issues to the attention of people sooner.
+   Note that this would be less of a problem if we didn't have so many
+   tracking bugs since they aren't updated that often and often have this
+   problem.
+   See "http://bugzilla.mozilla.org/show_bug.cgi?id=16743".
+     _________________________________________________________________
+
+6.6. Bugzilla 3.0
+
+   One day, Bugzilla 3.0 will have lots of cool stuff.
+     _________________________________________________________________
+
+Appendix A. The Bugzilla FAQ
+
+   1. General Questions
+
+        A.1.1. Where can I find information about Bugzilla?
+        A.1.2. What license is Bugzilla distributed under?
+        A.1.3. How do I get commercial support for Bugzilla?
+        A.1.4. What major companies or projects are currently using
+                Bugzilla for bug-tracking?
+
+        A.1.5. Who maintains Bugzilla?
+        A.1.6. How does Bugzilla stack up against other bug-tracking
+                databases?
+
+        A.1.7. How do I change my user name in Bugzilla?
+        A.1.8. Why doesn't Bugzilla offer this or that feature or
+                compatability with this other tracking software?
+
+        A.1.9. Why MySQL? I'm interested in seeing Bugzilla run on
+                Oracle/Sybase/Msql/PostgreSQL/MSSQL?
+
+        A.1.10. Why do the scripts say "/usr/bonsaitools/bin/perl"
+                instead of "/usr/bin/perl" or something else?
+
+   2. Red Hat Bugzilla
+
+        A.2.1. What about Red Hat Bugzilla?
+        A.2.2. What are the primary benefits of Red Hat Bugzilla?
+        A.2.3. What's the current status of Red Hat Bugzilla?
+
+   3. Loki Bugzilla (AKA Fenris)
+
+        A.3.1. What about Loki Bugzilla?
+        A.3.2. Who maintains Fenris (Loki Bugzilla) now?
+        A.3.3.
+
+   4. Pointy-Haired-Boss Questions
+
+        A.4.1. Is Bugzilla web-based or do you have to have specific
+                software or specific operating system on your machine?
+
+        A.4.2. Has anyone you know of already done any Bugzilla
+                integration with Perforce (SCM software)?
+
+        A.4.3. Does Bugzilla allow the user to track multiple projects?
+        A.4.4. If I am on many projects, and search for all bugs assigned
+                to me, will Bugzilla list them for me and allow me to
+                sort by project, severity etc?
+
+        A.4.5. Does Bugzilla allow attachments (text, screenshots, urls
+                etc)? If yes, are there any that are NOT allowed?
+
+        A.4.6. Does Bugzilla allow us to define our own priorities and
+                levels? Do we have complete freedom to change the labels
+                of fields and format of them, and the choice of
+                acceptable values?
+
+        A.4.7. Does Bugzilla provide any reporting features, metrics,
+                graphs, etc? You know, the type of stuff that management
+                likes to see. :)
+
+        A.4.8. Is there email notification and if so, what do you see
+                when you get an email? Do you see bug number and title or
+                is it only the number?
+
+        A.4.9. Can email notification be set up to send to multiple
+                people, some on the To List, CC List, BCC List etc?
+
+        A.4.10. If there is email notification, do users have to have any
+                particular type of email application?
+
+        A.4.11. If I just wanted to track certain bugs, as they go
+                through life, can I set it up to alert me via email
+                whenever that bug changes, whether it be owner, status or
+                description etc.?
+
+        A.4.12. Does Bugzilla allow data to be imported and exported? If
+                I had outsiders write up a bug report using a MS Word bug
+                template, could that template be imported into "matching"
+                fields? If I wanted to take the results of a query and
+                export that data to MS Excel, could I do that?
+
+        A.4.13. Does Bugzilla allow fields to be added, changed or
+                deleted? If I want to customize the bug submission form
+                to meet our needs, can I do that using our terminology?
+
+        A.4.14. Has anyone converted Bugzilla to another language to be
+                used in other countries? Is it localizable?
+
+        A.4.15. Can a user create and save reports? Can they do this in
+                Word format? Excel format?
+
+        A.4.16. Can a user re-run a report with a new project, same
+                query?
+
+        A.4.17. Can a user modify an existing report and then save it
+                into another name?
+
+        A.4.18. Does Bugzilla have the ability to search by word, phrase,
+                compound search?
+
+        A.4.19. Can the admin person establish separate group and
+                individual user privileges?
+
+        A.4.20. Does Bugzilla provide record locking when there is
+                simultaneous access to the same bug? Does the second
+                person get a notice that the bug is in use or how are
+                they notified?
+
+        A.4.21. Are there any backup features provided?
+        A.4.22. Can users be on the system while a backup is in progress?
+
+        A.4.23. What type of human resources are needed to be on staff to
+                install and maintain Bugzilla? Specifically, what type of
+                skills does the person need to have? I need to find out
+                if we were to go with Bugzilla, what types of individuals
+                would we need to hire and how much would that cost vs
+                buying an "Out-of-the-Box" solution.
+
+        A.4.24. What time frame are we looking at if we decide to hire
+                people to install and maintain the Bugzilla? Is this
+                something that takes hours or weeks to install and a
+                couple of hours per week to maintain and customize or is
+                this a multi-week install process, plus a full time job
+                for 1 person, 2 people, etc?
+
+        A.4.25. Is there any licensing fee or other fees for using
+                Bugzilla? Any out-of-pocket cost other than the bodies
+                needed as identified above?
+
+   5. Bugzilla Installation
+
+        A.5.1. How do I download and install Bugzilla?
+        A.5.2. How do I install Bugzilla on Windows NT?
+        A.5.3. Is there an easy way to change the Bugzilla cookie name?
+
+   6. Bugzilla Security
+
+        A.6.1. How do I completely disable MySQL security if it's giving
+                me problems (I've followed the instructions in the
+                README!)?
+
+        A.6.2. Are there any security problems with Bugzilla?
+        A.6.3. I've implemented the security fixes mentioned in Chris
+                Yeh's security advisory of 5/10/2000 advising not to run
+                MySQL as root, and am running into problems with MySQL no
+                longer working correctly.
+
+   7. Bugzilla Email
+
+        A.7.1. I have a user who doesn't want to receive any more email
+                from Bugzilla. How do I stop it entirely for this user?
+
+        A.7.2. I'm evaluating/testing Bugzilla, and don't want it to send
+                email to anyone but me. How do I do it?
+
+        A.7.3. I want whineatnews.pl to whine at something more, or other
+                than, only new bugs. How do I do it?
+
+        A.7.4. I don't like/want to use Procmail to hand mail off to
+                bug_email.pl. What alternatives do I have?
+
+        A.7.5. How do I set up the email interface to submit/change bugs
+                via email?
+
+        A.7.6. Email takes FOREVER to reach me from bugzilla -- it's
+                extremely slow. What gives?
+
+        A.7.7. How come email never reaches me from bugzilla changes?
+
+   8. Bugzilla Database
+
+        A.8.1. I've heard Bugzilla can be used with Oracle?
+        A.8.2. Bugs are missing from queries, but exist in the database
+                (and I can pull them up by specifying the bug ID). What's
+                wrong?
+
+        A.8.3. I think my database might be corrupted, or contain invalid
+                entries. What do I do?
+
+        A.8.4. I want to manually edit some entries in my database. How?
+        A.8.5. I try to add myself as a user, but Bugzilla always tells
+                me my password is wrong.
+
+        A.8.6. I think I've set up MySQL permissions correctly, but
+                bugzilla still can't connect.
+
+        A.8.7. How do I synchronize bug information among multiple
+                different Bugzilla databases?
+
+        A.8.8. Why do I get bizarre errors when trying to submit data,
+                particularly problems with "groupset"?
+
+        A.8.9. How come even after I delete bugs, the long descriptions
+                show up?
+
+   9. Bugzilla and Win32
+
+        A.9.1. What is the easiest way to run Bugzilla on Win32
+                (Win98+/NT/2K)?
+
+        A.9.2. Is there a "Bundle::Bugzilla" equivalent for Win32?
+        A.9.3. CGI's are failing with a "something.cgi is not a valid
+                Windows NT application" error. Why?
+
+        A.9.4. Can I have some general instructions on how to make
+                Bugzilla on Win32 work?
+
+        A.9.5. I'm having trouble with the perl modules for NT not being
+                able to talk to to the database.
+
+   10. Bugzilla Usage
+
+        A.10.1. The query page is very confusing. Isn't there a simpler
+                way to query?
+
+        A.10.2. I'm confused by the behavior of the "accept" button in
+                the Show Bug form. Why doesn't it assign the bug to me
+                when I accept it?
+
+        A.10.3. I can't upload anything into the database via the "Create
+                Attachment" link. What am I doing wrong?
+
+        A.10.4. Email submissions to Bugzilla that have attachments end
+                up asking me to save it as a "cgi" file.
+
+        A.10.5. How do I change a keyword in Bugzilla, once some bugs are
+                using it?
+
+   11. Bugzilla Hacking
+
+        A.11.1. What bugs are in Bugzilla right now?
+        A.11.2. How can I change the default priority to a null value?
+                For instance, have the default priority be "---" instead
+                of "P2"?
+
+        A.11.3. What's the best way to submit patches? What guidelines
+                should I follow?
+
+1. General Questions
+
+   A.1.1. Where can I find information about Bugzilla?
+
+   You can stay up-to-date with the latest Bugzilla information at
+   http://www.mozilla.org/projects/bugzilla/
+
+   A.1.2. What license is Bugzilla distributed under?
+
+   Bugzilla is covered by the Mozilla Public License. See details at
+   http://www.mozilla.org/MPL/
+
+   A.1.3. How do I get commercial support for Bugzilla?
+
+   www.collab.net offers Bugzilla as part of their standard offering to
+   large projects. They do have some minimum fees that are pretty hefty,
+   and generally aren't interested in small projects.
+
+   There are several experienced Bugzilla hackers on the mailing
+   list/newsgroup who are willing to whore themselves out for generous
+   compensation. Try sending a message to the mailing list asking for a
+   volunteer.
+
+   A.1.4. What major companies or projects are currently using Bugzilla
+   for bug-tracking?
+
+   There are dozens of major comapanies with public Bugzilla sites to
+   track bugs in their products. A few include:
+
+   Netscape/AOL
+   Mozilla.org
+   AtHome Corporation
+   Red Hat Software
+   Loki Entertainment Software
+   SuSe Corp
+   The Horde Project
+   The Eazel Project
+   AbiSource
+   Real Time Enterprises, Inc
+   Eggheads.org
+   Strata Software
+   RockLinux
+   Creative Labs (makers of SoundBlaster)
+   The Apache Foundation
+   The Gnome Foundation
+   Linux-Mandrake
+
+   Suffice to say, there are more than enough huge projects using
+   Bugzilla that we can safely say it's extremely popular.
+
+   A.1.5. Who maintains Bugzilla?
+
+   There are many, many contributors from around the world maintaining
+   Bugzilla. The designated "Maintainer" is Tara Hernandez, with QA
+   support by Matthew Tuck. Dan Mosedale and Dawn Endico are employees of
+   Mozilla.org responsible for the installation of Bugzilla there, and
+   are very frequent code contributors. Terry Weissman originally ported
+   Bugzilla, but "these days, Terry just hangs around and heckles." The
+   rest of us are mostly transient developers; Bugzilla suits our needs,
+   and we contribute code as we have needs for updates.
+
+   A.1.6. How does Bugzilla stack up against other bug-tracking
+   databases?
+
+   A year has gone by, and I still can't find any head-to-head
+   comparisons of Bugzilla against other defect-tracking software.
+   However, from my personal experience with other bug-trackers, Bugzilla
+   offers superior performance on commodity hardware, better price
+   (free!), more developer- friendly features (such as stored queries,
+   email integration, and platform independence), improved scalability,
+   open source code, greater flexibility, and superior ease-of-use.
+
+   If you happen to be a commercial Bugzilla vendor, please step forward
+   with a rebuttal so I can include it in the FAQ. We're not in pursuit
+   of Bugzilla ueber alles; we simply love having a powerful, open-source
+   tool to get our jobs done.
+
+   A.1.7. How do I change my user name in Bugzilla?
+
+   You can't. However, the administrative account can, by simply opening
+   your user account in editusers.cgi and changing the login name.
+
+   A.1.8. Why doesn't Bugzilla offer this or that feature or
+   compatability with this other tracking software?
+
+   It may be that the support has not been built yet, or that you have
+   not yet found it. Bugzilla is making tremendous strides in usability,
+   customizability, scalability, and user interface. It is widely
+   considered the most complete and popular open-source bug-tracking
+   software in existence.
+
+   That doesn't mean it can't use improvement! You can help the project
+   along by either hacking a patch yourself that supports the
+   functionality you require, or else submitting a "Request for
+   Enhancement" (RFE) using the bug submission interface at
+   bugzilla.mozilla.org.
+
+   A.1.9. Why MySQL? I'm interested in seeing Bugzilla run on
+   Oracle/Sybase/Msql/PostgreSQL/MSSQL?
+
+   Terry Weissman answers,
+
+     You're not the only one. But I am not very interested. I'm not a
+     real SQL or database person. I just wanted to make a useful tool,
+     and build it on top of free software. So, I picked MySQL, and
+     learned SQL by staring at the MySQL manual and some code lying
+     around here, and wrote Bugzilla. I didn't know that Enum's were
+     non-standard SQL. I'm not sure if I would have cared, but I didn't
+     even know. So, to me, things are "portable" because it uses MySQL,
+     and MySQL is portable enough. I fully understand (now) that people
+     want to be portable to other databases, but that's never been a
+     real concern of mine.
+
+   Things aren't quite that grim these days, however. Terry pretty much
+   sums up much of the thinking many of us have for Bugzilla, but there
+   is light on the horizon for database-independence! Here are some
+   options:
+
+   Red Hat Bugzilla: Runs a modified Bugzilla 2.8 atop an Oracle
+   database.
+   Interzilla: A project to run Bugzilla on Interbase. No code released
+   yet, however.
+   Bugzilla 3.0: One of the primary stated goals is multiple database
+   support.
+
+   A.1.10. Why do the scripts say "/usr/bonsaitools/bin/perl" instead of
+   "/usr/bin/perl" or something else?
+
+   Mozilla.org uses /usr/bonsaitools/bin/perl. The prime rule in making
+   submissions is "don't break bugzilla.mozilla.org". If it breaks it,
+   your patch will be reverted faster than you can do a diff.
+
+   Here's Terry Weissman's comment, for some historical context:
+
+     [This was] purely my own convention. I wanted a place to put a
+     version of Perl and other tools that was strictly under my control
+     for the various webtools, and not subject to anyone else. Edit it
+     to point to whatever you like.
+
+     Note: We always recommend that, if possible, you keep the path as
+     /usr/bonsaitools/bin/perl, and simply add a /usr/bonsaitools and
+     /usr/bonsaitools/bin directory, then symlink your version of perl
+     to /usr/bonsaitools/bin/perl. This will make upgrading your
+     Bugzilla much easier in the future.
+
+     Obviously, if you do not have root access to your Bugzilla box, our
+     suggestion is irrelevant.
+
+2. Red Hat Bugzilla
+
+     Note: This section is no longer up-to-date. Please see the section
+     on "Red Hat Bugzilla" under "Variants" in The Bugzilla Guide.
+
+   A.2.1. What about Red Hat Bugzilla?
+
+   Red Hat Bugzilla is arguably more user-friendly, customizable, and
+   scalable than stock Bugzilla. Check it out at
+   http://bugzilla.redhat.com and the sources at
+   ftp://people.redhat.com/dkl/. They've set their Bugzilla up to work
+   with Oracle out of the box. Note that Redhat Bugzilla is based upon
+   the 2.8 Bugzilla tree; Bugzilla has made some tremendous advances
+   since the 2.8 release. Why not download both Bugzillas to check out
+   the differences for yourself?
+
+   Dave Lawrence, the original Red Hat Bugzilla maintainer, mentions:
+
+     Somebody needs to take the ball and run with it. I'm the only
+     maintainer and am very pressed for time.
+
+   If you, or someone you know, has the time and expertise to do the
+   integration work so main-tree Bugzilla 2.12 and higher integrates the
+   Red Hat Bugzilla Oracle modifications, please donate your time to
+   supporting the Bugzilla project.
+
+   A.2.2. What are the primary benefits of Red Hat Bugzilla?
+
+   Dave Lawrence:
+
+     For the record, we are not using any template type implementation
+     for the cosmetic changes maded to Bugzilla. It is just alot of html
+     changes in the code itself. I admit I may have gotten a little
+     carried away with it but the corporate types asked for a more
+     standardized interface to match up with other projects relating to
+     Red Hat web sites. A lot of other web based internal tools I am
+     working on also look like Bugzilla.
+
+     I do want to land the changes that I have made to Bugzilla but I
+     may have to back out a good deal and make a different version of
+     Red Hat's Bugzilla for checking in to CVS. Especially the cosmetic
+     changes because it seems they may not fit the general public. I
+     will do that as soon as I can. I also still do my regular QA
+     responsibilities along with Bugzilla so time is difficult sometimes
+     to come by.
+
+     There are also a good deal of other changes that were requested by
+     management for things like support contracts and different
+     permission groups for making bugs private. Here is a short list of
+     the major changes that have been made:
+
+    1. No enum types. All old enum types are now separate smaller tables.
+    2. No bit wise operations. Not all databases support this so they
+       were changed to a more generic way of doing this task
+    3. Bug reports can only be altered by the reporter, assignee, or a
+       privileged bugzilla user. The rest of the world can see the bug
+       but in a non-changeable format (unless the bug has been marked
+       private). They can however add comments, add and remove themselves
+       from the CC list
+    4. Different group scheme. Each group has an id number related to it.
+       There is a user_group table which contains userid to groupid
+       mappings to determine which groups each user belongs to.
+       Additionally there is a bug_group table that has bugid to groupid
+       mappings to show which groups can see a particular bug. If there
+       are no entries for a bug in this table then the bug is public.
+    5. Product groups. product_table created to only allow certain
+       products to be visible for certain groups in both bug entry and
+       query. This was particulary helpful for support contracts.
+    6. Of course many (too many) changes to Bugzilla code itself to allow
+       use with Oracle and still allow operation with Mysql if so
+       desired. Currently if you use Mysql it is set to use Mysql's old
+       permission scheme to keep breakage to a minimum. Hopefully one day
+       this will standardize on one style which may of course be
+       something completely different.
+    7. Uses Text::Template perl module for rendering of the dynamic HTML
+       pages such as enter_bug.cgi, query.cgi, bug_form.pl, and for the
+       header and footer parts of the page. This allows the html to be
+       separate from the perl code for customizing the look and feel of
+       the page to one's preference.
+    8. There are many other smaller changes. There is also a port to
+       Oracle that I have been working on as time permits but is not
+       completely finished but somewhat usable. I will merge it into our
+       standard code base when it becomes production quality.
+       Unfortunately there will have to be some conditionals in the code
+       to make it work with other than Oracle due to some differences
+       between Oracle and Mysql.
+
+     Both the Mysql and Oracle versions of our current code base are
+     available from ftp://people.redhat.com/dkl. If Terry/Tara wants I
+     can submit patch files for all of the changes I have made and he
+     can determine what is suitable for addition to the main bugzilla
+     cade base. But for me to commit changes to the actual CVS I will
+     need to back out alot of things that are not suitable for the rest
+     of the Bugzilla community. I am open to suggestions.
+
+   A.2.3. What's the current status of Red Hat Bugzilla?
+
+     Note: This information is somewhat dated; I last updated it 7 June
+     2000. Please see the "Variants" section of "The Bugzilla Guide" for
+     more up-to-date information regarding Red Hat Bugzilla.
+
+   Dave Lawrence:
+
+     I suppose the current thread warrants an update on the status of
+     Oracle and bugzilla ;) We have now been running Bugzilla 2.8 on
+     Oracle for the last two days in our production environment. I tried
+     to do as much testing as possible with it before going live which
+     is some of the reason for the long delay. I did not get enough
+     feedback as I would have liked from internal developers to help
+     weed out any bugs still left so I said "Fine, i will take it live
+     and then I will get the feedback I want :)" So it is now starting
+     to stabilize and it running quite well after working feverishly the
+     last two days fixing problems as soon as they came in from the
+     outside world. The current branch in cvs is up2date if anyone would
+     like to grab it and try it out. The oracle _setup.pl is broken
+     right now due to some last minute changes but I will update that
+     soon. Therefore you would probably need to create the database
+     tables the old fashioned way using the supplied sql creation
+     scripts located in the ./oracle directory. We have heavy
+     optimizations in the database it self thanks to the in-house DBA
+     here at Red Hat so it is running quite fast. The database itself is
+     located on a dual PII450 with 1GB ram and 14 high voltage
+     differential raided scsi drives. The tables and indexes are
+     partitioned in 4 chuncks across the raided drive which is nice
+     because when ever you need to do a full table scan, it is actually
+     starting in 4 different locations on 4 different drives
+     simultaneously. And the indexes of course are on separate drives
+     from the data so that speeds things up tremendously. When I can
+     find the time I will document all that we have done to get this
+     thing going to help others that may need it.
+
+     As Matt has mentioned it is still using out-dated code and with a
+     little help I would like to bring everything up to date for
+     eventual incorporation with the main cvs tree. Due to other duties
+     I have with the company any help with this wiould be appreciated.
+     What we are using now is what I call a best first effort. It
+     definitely can be improved on and may even need complete rewrites
+     in a lot of areas. A lot of changes may have to be made in the way
+     Bugzilla does things currently to make this transition to a more
+     generic database interface. Fortunately when making the Oracle
+     changes I made sure I didn't do anything that I would consider
+     Oracle specific and could not be easily done with other databases.
+     Alot of the sql statements need to be broken up into smaller
+     utilities that themselves would need to make decisions on what
+     database they are using but the majority of the code can be made
+     database neutral.
+
+3. Loki Bugzilla (AKA Fenris)
+
+     Note: Loki's "Fenris" Bugzilla is based upon the (now ancient)
+     Bugzilla 2.8 tree, and is no longer actively maintained. It works
+     well enough for Loki. Additionally, the major differences in Fenris
+     have now been integrated into the main source tree of Bugzilla, so
+     there's not much reason to go grab the source. I leave this section
+     of the FAQ principally for historical interest, but unless Loki has
+     further input into Bugzilla's future, it will be deprecated in
+     future versions of the Guide.
+
+   A.3.1. What about Loki Bugzilla?
+
+   Loki Games has a customized version of Bugzilla available at
+   http://fenris.lokigames.com. From that page,
+
+     You may have noticed that Fenris is a fork from Bugzilla-- our
+     patches weren't suitable for integration --and a few people have
+     expressed interest in the code. Fenris has one major improvement
+     over Bugzilla, and that is individual comments are not appended
+     onto a string blob, they are stored as a record in a separate
+     table. This allows you to, for instance, separate comments out
+     according to privilege levels in case your bug database could
+     contain sensitive information not for public eyes. We also provide
+     things like email hiding to protect user's privacy, additional
+     fields such as 'user_affected' in case someone enters someone
+     else's bug, comment editing and deletion, and more conditional
+     system variables than Bugzilla does (turn off attachments,
+     qacontact, etc.).
+
+   A.3.2. Who maintains Fenris (Loki Bugzilla) now?
+
+   Raphael Barrerro <raistlin@lokigames.com>. Michael Vance created the
+   initial fork, but no longer maintains the project.
+
+   A.3.3.
+
+4. Pointy-Haired-Boss Questions
+
+     Note: The title of this section doesn't mean you're a PHB -- it
+     just means you probably HAVE a PHB who wants to know this :)
+
+   A.4.1. Is Bugzilla web-based or do you have to have specific software
+   or specific operating system on your machine?
+
+   It is web and e-mail based. You can edit bugs by sending specially
+   formatted email to a properly configured Bugzilla, or control via the
+   web.
+
+   A.4.2. Has anyone you know of already done any Bugzilla integration
+   with Perforce (SCM software)?
+
+   Yes! You can find more information elsewhere in "The Bugzilla Guide"
+   in the "Integration with Third-Party Products" section. The section on
+   Perforce isn't very large, but as the maintainer of the Guide is
+   charged with Perforce/Bugzilla integration by his company, you can
+   expect this section to grow.
+
+   A.4.3. Does Bugzilla allow the user to track multiple projects?
+
+   Absolutely! You can track up to a "soft-limit" of around 64 individual
+   "Products", that can each be composed of as many "Components" as you
+   want. Check the Administration section of the Bugzilla Guide for more
+   information regarding setting up Products and Components.
+
+   A.4.4. If I am on many projects, and search for all bugs assigned to
+   me, will Bugzilla list them for me and allow me to sort by project,
+   severity etc?
+
+   Yes.
+
+   A.4.5. Does Bugzilla allow attachments (text, screenshots, urls etc)?
+   If yes, are there any that are NOT allowed?
+
+   Yes. There are many specific MIME-types that are pre-defined by
+   Bugzilla, but you may specify any arbitrary MIME-type you need when
+   you upload the file. Since all attachments are stored in the database,
+   however, I recommend storing large binary attachments elsewhere in the
+   web server's file system and providing a hyperlink as a comment, or in
+   the provided "URL" field in the bug report.
+
+   A.4.6. Does Bugzilla allow us to define our own priorities and levels?
+   Do we have complete freedom to change the labels of fields and format
+   of them, and the choice of acceptable values?
+
+   Yes. However, modifying some fields, notably those related to bug
+   progression states, also require adjusting the program logic to
+   compensate for the change.
+
+   A.4.7. Does Bugzilla provide any reporting features, metrics, graphs,
+   etc? You know, the type of stuff that management likes to see. :)
+
+   Yes. Look at http://bugzilla.mozilla.org/reports.cgi for basic
+   reporting facilities.
+
+   For more advanced reporting, I recommend hooking up a professional
+   reporting package, such as Crystal Reports, and use ODBC to access the
+   MySQL database. You can do a lot through the Query page of Bugzilla as
+   well, but right now Advanced Reporting is much better accomplished
+   through third-party utilities that can interface with the database
+   directly.
+
+   Advanced Reporting is a Bugzilla 3.X proposed feature.
+
+   A.4.8. Is there email notification and if so, what do you see when you
+   get an email? Do you see bug number and title or is it only the
+   number?
+
+   Email notification is user-configurable. The bug id and Topic of the
+   bug report accompany each email notification, along with a list of the
+   changes made.
+
+   A.4.9. Can email notification be set up to send to multiple people,
+   some on the To List, CC List, BCC List etc?
+
+   Yes.
+
+   A.4.10. If there is email notification, do users have to have any
+   particular type of email application?
+
+   Bugzilla email is sent in plain text, the most compatible mail format
+   on the planet.
+
+     Note: If you decide to use the bugzilla_email integration features
+     to allow Bugzilla to record responses to mail with the associated
+     bug, you may need to caution your users to set their mailer to
+     "respond to messages in the format in which they were sent". For
+     security reasons Bugzilla ignores HTML tags in comments, and if a
+     user sends HTML-based email into Bugzilla the resulting comment
+     looks downright awful.
+
+   A.4.11. If I just wanted to track certain bugs, as they go through
+   life, can I set it up to alert me via email whenever that bug changes,
+   whether it be owner, status or description etc.?
+
+   Yes. Place yourself in the "cc" field of the bug you wish to monitor.
+   Then change your "Notify me of changes to" field in the Email Settings
+   tab of the User Preferences screen in Bugzilla to the "Only those bugs
+   which I am listed on the CC line" option.
+
+   A.4.12. Does Bugzilla allow data to be imported and exported? If I had
+   outsiders write up a bug report using a MS Word bug template, could
+   that template be imported into "matching" fields? If I wanted to take
+   the results of a query and export that data to MS Excel, could I do
+   that?
+
+   Mozilla allows data export through a custom DTD in XML format. It does
+   not, however, export to specific formats other than the XML Mozilla
+   DTD. Importing the data into Excel or any other application is left as
+   an exercise for the reader.
+
+   If you create import filters to other applications from Mozilla's XML,
+   please submit your modifications for inclusion in future Bugzilla
+   distributions.
+
+   As for data import, any application can send data to Bugzilla through
+   the HTTP protocol, or through Mozilla's XML API. However, it seems
+   kind of silly to put another front-end in front of Bugzilla; it makes
+   more sense to create a simplified bug submission form in HTML. You can
+   find an excellent example at
+   http://www.mozilla.org/quality/help/bugzilla-helper.html
+
+   A.4.13. Does Bugzilla allow fields to be added, changed or deleted? If
+   I want to customize the bug submission form to meet our needs, can I
+   do that using our terminology?
+
+   Yes.
+
+   A.4.14. Has anyone converted Bugzilla to another language to be used
+   in other countries? Is it localizable?
+
+   Currently, no. Internationalization support for Perl did not exist in
+   a robust fashion until the recent release of version 5.6.0; Bugzilla
+   is, and likely will remain (until 3.X) completely non-localized.
+
+   A.4.15. Can a user create and save reports? Can they do this in Word
+   format? Excel format?
+
+   Yes. No. No.
+
+   A.4.16. Can a user re-run a report with a new project, same query?
+
+   Yes.
+
+   A.4.17. Can a user modify an existing report and then save it into
+   another name?
+
+   You can save an unlimited number of queries in Bugzilla. You are free
+   to modify them and rename them to your heart's desire.
+
+   A.4.18. Does Bugzilla have the ability to search by word, phrase,
+   compound search?
+
+   You have no idea. Bugzilla's query interface, particularly with the
+   advanced Boolean operators, is incredibly versatile.
+
+   A.4.19. Can the admin person establish separate group and individual
+   user privileges?
+
+   Yes.
+
+   A.4.20. Does Bugzilla provide record locking when there is
+   simultaneous access to the same bug? Does the second person get a
+   notice that the bug is in use or how are they notified?
+
+   Bugzilla does not lock records. It provides mid-air collision
+   detection, and offers the offending user a choice of options to deal
+   with the conflict.
+
+   A.4.21. Are there any backup features provided?
+
+   MySQL, the database back-end for Bugzilla, allows hot-backup of data.
+   You can find strategies for dealing with backup considerations at
+   http://www.mysql.com/doc/B/a/Backup.html
+
+   A.4.22. Can users be on the system while a backup is in progress?
+
+   Yes. However, commits to the database must wait until the tables are
+   unlocked. Bugzilla databases are typically very small, and backups
+   routinely take less than a minute.
+
+   A.4.23. What type of human resources are needed to be on staff to
+   install and maintain Bugzilla? Specifically, what type of skills does
+   the person need to have? I need to find out if we were to go with
+   Bugzilla, what types of individuals would we need to hire and how much
+   would that cost vs buying an "Out-of-the-Box" solution.
+
+   If Bugzilla is set up correctly from the start, continuing maintenance
+   needs are minimal and can be completed by unskilled labor. Things like
+   rotate backup tapes and check log files for the word "error".
+
+   Commercial Bug-tracking software typically costs somewhere upwards of
+   $20,000 or more for 5-10 floating licenses. Bugzilla consultation is
+   available from skilled members of the newsgroup.
+
+   As an example, as of this writing I typically charge $115 for the
+   first hour, and $89 each hour thereafter for consulting work. It takes
+   me three to five hours to make Bugzilla happy on a Development
+   installation of Linux-Mandrake.
+
+   A.4.24. What time frame are we looking at if we decide to hire people
+   to install and maintain the Bugzilla? Is this something that takes
+   hours or weeks to install and a couple of hours per week to maintain
+   and customize or is this a multi-week install process, plus a full
+   time job for 1 person, 2 people, etc?
+
+   It all depends on your level of commitment. Someone with much Bugzilla
+   experience can get you up and running in less than a day, and your
+   Bugzilla install can run untended for years. If your Bugzilla strategy
+   is critical to your business workflow, hire somebody with reasonable
+   UNIX or Perl skills to handle your process management and bug-tracking
+   maintenance & customization.
+
+   A.4.25. Is there any licensing fee or other fees for using Bugzilla?
+   Any out-of-pocket cost other than the bodies needed as identified
+   above?
+
+   No. MySQL asks, if you find their product valuable, that you purchase
+   a support contract from them that suits your needs.
+
+5. Bugzilla Installation
+
+   A.5.1. How do I download and install Bugzilla?
+
+   Check http://www.mozilla.org/projects/bugzilla/ for details. Once you
+   download it, untar it, read the README and the Bugzilla Guide.
+
+   A.5.2. How do I install Bugzilla on Windows NT?
+
+   Installation on Windows NT has its own section in "The Bugzilla
+   Guide".
+
+   A.5.3. Is there an easy way to change the Bugzilla cookie name?
+
+   At present, no.
+
+6. Bugzilla Security
+
+   A.6.1. How do I completely disable MySQL security if it's giving me
+   problems (I've followed the instructions in the README!)?
+
+   Run mysql like this: "mysqld --skip-grant-tables". Please remember
+   this makes mysql as secure as taping a $100 to the floor of a football
+   stadium bathroom for safekeeping. Please read the Security section of
+   the Administration chapter of "The Bugzilla Guide" before proceeding.
+
+   A.6.2. Are there any security problems with Bugzilla?
+
+   The Bugzilla code has not undergone a complete security audit. It is
+   recommended that you closely examine permissions on your Bugzilla
+   installation, and follow the recommended security guidelines found in
+   the README and in The Bugzilla Guide.
+
+   A.6.3. I've implemented the security fixes mentioned in Chris Yeh's
+   security advisory of 5/10/2000 advising not to run MySQL as root, and
+   am running into problems with MySQL no longer working correctly.
+
+   This is a common problem, related to running out of file descriptors.
+   Simply add "ulimit -n unlimited" to the script which starts mysqld.
+
+7. Bugzilla Email
+
+   A.7.1. I have a user who doesn't want to receive any more email from
+   Bugzilla. How do I stop it entirely for this user?
+
+   With the email changes to 2.12, the user should be able to set this in
+   user email preferences.
+
+   A.7.2. I'm evaluating/testing Bugzilla, and don't want it to send
+   email to anyone but me. How do I do it?
+
+   Edit the param for the mail text. Replace "To:" with "X-Real-To:",
+   replace "Cc:" with "X-Real-CC:", and add a "To: (myemailaddress)".
+
+   A.7.3. I want whineatnews.pl to whine at something more, or other
+   than, only new bugs. How do I do it?
+
+   Try Klaas Freitag's excellent patch for "whineatassigned"
+   functionality. You can find it at
+   http://bugzilla.mozilla.org/show_bug.cgi?id=6679. This patch is
+   against an older version of Bugzilla, so you must apply the diffs
+   manually.
+
+   A.7.4. I don't like/want to use Procmail to hand mail off to
+   bug_email.pl. What alternatives do I have?
+
+   You can call bug_email.pl directly from your aliases file, with an
+   entry like this:
+
+     bugzilla-daemon: "|/usr/local/bin/bugzilla/contrib/bug_email.pl"
+
+   However, this is fairly nasty and subject to problems; you also need
+   to set up your smrsh (sendmail restricted shell) to allow it. In a
+   pinch, though, it can work.
+
+   A.7.5. How do I set up the email interface to submit/change bugs via
+   email?
+
+   You can find an updated README.mailif file in the contrib/ directory
+   of your Bugzilla distribution that walks you through the setup.
+
+   A.7.6. Email takes FOREVER to reach me from bugzilla -- it's extremely
+   slow. What gives?
+
+   If you are using an alternate Mail Transport Agent (MTA other than
+   sendmail), make sure the options given in the "processmail" script for
+   all instances of "sendmail" are correct for your MTA. If you are using
+   Sendmail, you may wish to delete the "-ODeliveryMode=deferred" option
+   in the "processmail" script for every invocation of "sendmail". (Be
+   sure and leave the "-t" option, though!)
+
+   A better alternative is to change the "-O" option to
+   "-ODeliveryMode=background". This prevents Sendmail from hanging your
+   Bugzilla Perl processes if the domain to which it must send mail is
+   unavailable.
+
+   This is now a configurable parameter called "sendmailnow", available
+   from editparams.cgi.
+
+   A.7.7. How come email never reaches me from bugzilla changes?
+
+   Double-check that you have not turned off email in your user
+   preferences. Confirm that Bugzilla is able to send email by visiting
+   the "Log In" link of your Bugzilla installation and clicking the
+   "Email me a password" button after entering your email address.
+
+   If you never receive mail from Bugzilla, chances you do not have
+   sendmail in "/usr/lib/sendmail". Ensure sendmail lives in, or is
+   symlinked to, "/usr/lib/sendmail".
+
+8. Bugzilla Database
+
+   A.8.1. I've heard Bugzilla can be used with Oracle?
+
+   Red Hat Bugzilla, mentioned above, works with Oracle. The current
+   version from Mozilla.org does not have this capability. Unfortunately,
+   though you will sacrifice a lot of the really great features available
+   in Bugzilla 2.10 and 2.12 if you go with the 2.8-based Redhat version.
+
+   A.8.2. Bugs are missing from queries, but exist in the database (and I
+   can pull them up by specifying the bug ID). What's wrong?
+
+   You've almost certainly enabled the "shadow database", but for some
+   reason it hasn't been updated for all your bugs. This is the database
+   against which queries are run, so that really complex or slow queries
+   won't lock up portions of the database for other users. You can turn
+   off the shadow database in editparams.cgi. If you wish to continue
+   using the shadow database, then as your "bugs" user run
+   "./syncshadowdb -syncall" from the command line in the bugzilla
+   installation directory to recreate your shadow database. After it
+   finishes, be sure to check the params and make sure that
+   "queryagainstshadowdb" is still turned on. The syncshadowdb program
+   turns it off if it was on, and is supposed to turn it back on when
+   completed; that way, if it crashes in the middle of recreating the
+   database, it will stay off forever until someone turns it back on by
+   hand. Apparently, it doesn't always do that yet.
+
+   A.8.3. I think my database might be corrupted, or contain invalid
+   entries. What do I do?
+
+   Run the "sanity check" utility (./sanitycheck.cgi in the bugzilla_home
+   directory) to see! If it all comes back, you're OK. If it doesn't come
+   back OK (i.e. any red letters), there are certain things Bugzilla can
+   recover from and certain things it can't. If it can't auto-recover, I
+   hope you're familiar with mysqladmin commands or have installed
+   another way to manage your database...
+
+   A.8.4. I want to manually edit some entries in my database. How?
+
+   There is no facility in Bugzilla itself to do this. It's also
+   generally not a smart thing to do if you don't know exactly what
+   you're doing. However, if you understand SQL you can use the
+   mysqladmin utility to manually insert, delete, and modify table
+   information. Personally, I use "phpMyAdmin". You have to compile a PHP
+   module with MySQL support to make it work, but it's very clean and
+   easy to use.
+
+   A.8.5. I try to add myself as a user, but Bugzilla always tells me my
+   password is wrong.
+
+   Certain version of MySQL (notably, 3.23.29 and 3.23.30) accidentally
+   disabled the "crypt()" function. This prevented MySQL from storing
+   encrypted passwords. Upgrade to the "3.23 stable" version of MySQL and
+   you should be good to go.
+
+   A.8.6. I think I've set up MySQL permissions correctly, but bugzilla
+   still can't connect.
+
+   Try running MySQL from its binary: "mysqld --skip-grant-tables". This
+   will allow you to completely rule out grant tables as the cause of
+   your frustration. However, I do not recommend you run it this way on a
+   regular basis, unless you really want your web site defaced and your
+   machine cracked.
+
+   A.8.7. How do I synchronize bug information among multiple different
+   Bugzilla databases?
+
+   Well, you can synchronize or you can move bugs. Synchronization will
+   only work one way -- you can create a read-only copy of the database
+   at one site, and have it regularly updated at intervals from the main
+   database.
+
+   MySQL has some synchronization features builtin to the latest
+   releases. It would be great if someone looked into the possibilities
+   there and provided a report to the newsgroup on how to effectively
+   synchronize two Bugzilla installations.
+
+   If you simply need to transfer bugs from one Bugzilla to another,
+   checkout the "move.pl" script in the Bugzilla distribution.
+
+   A.8.8. Why do I get bizarre errors when trying to submit data,
+   particularly problems with "groupset"?
+
+   If you're sure your MySQL parameters are correct, you might want turn
+   "strictvaluechecks" OFF in editparams.cgi. If you have "usebugsentry"
+   set "On", you also cannot submit a bug as readable by more than one
+   group with "strictvaluechecks" ON.
+
+   A.8.9. How come even after I delete bugs, the long descriptions show
+   up?
+
+   Delete everything from $BUZILLA_HOME/shadow. Bugzilla creates shadow
+   files there, with each filename corresponding to a bug number. Also be
+   sure to run syncshadowdb to make sure, if you are using a shadow
+   database, that the shadow database is current.
+
+9. Bugzilla and Win32
+
+   A.9.1. What is the easiest way to run Bugzilla on Win32
+   (Win98+/NT/2K)?
+
+   Remove Windows. Install Linux. Install Bugzilla. The boss will never
+   know the difference.
+
+   A.9.2. Is there a "Bundle::Bugzilla" equivalent for Win32?
+
+   Not currently. Bundle::Bugzilla enormously simplifies Bugzilla
+   installation on UNIX systems. If someone can volunteer to create a
+   suitable PPM bundle for Win32, it would be appreciated.
+
+   A.9.3. CGI's are failing with a "something.cgi is not a valid Windows
+   NT application" error. Why?
+
+   Depending on what Web server you are using, you will have to configure
+   the Web server to treat *.cgi files as CGI scripts. In IIS, you do
+   this by adding *.cgi to the App Mappings with the <path>\perl.exe %s
+   %s as the executable.
+
+   Microsoft has some advice on this matter, as well:
+
+     "Set application mappings. In the ISM, map the extension for the
+     script file(s) to the executable for the script interpreter. For
+     example, you might map the extension .py to Python.exe, the
+     executable for the Python script interpreter. Note For the
+     ActiveState Perl script interpreter, the extension .pl is
+     associated with PerlIS.dll by default. If you want to change the
+     association of .pl to perl.exe, you need to change the application
+     mapping. In the mapping, you must add two percent (%) characters to
+     the end of the pathname for perl.exe, as shown in this example:
+     c:\perl\bin\perl.exe %s %s"
+
+   A.9.4. Can I have some general instructions on how to make Bugzilla on
+   Win32 work?
+
+   The following couple entries are deprecated in favor of the Windows
+   installation instructions available in the "Administration" portion of
+   "The Bugzilla Guide". However, they are provided here for historical
+   interest and insight.
+
+     1. #!C:/perl/bin/perl had to be added to every perl file.
+     2. Converted to Net::SMTP to handle mail messages instead of
+        /usr/bin/sendmail.
+     3. The crypt function isn't available on Windows NT (at least none t
+   hat I
+        am aware), so I made encrypted passwords = plaintext passwords.
+     4. The system call to diff had to be changed to the Cygwin diff.
+     5. This was just to get a demo running under NT, it seems to be work
+   ing
+        good, and I have inserted almost 100 bugs from another bug tracki
+   ng
+        system. Since this work was done just to get an in-house demo, I
+   am NOT
+        planning on making a patch for submission to Bugzilla. If you wou
+   ld
+        like a zip file, let me know.
+   Q: Hmm, couldn't figure it out from the general instructions above.  H
+   ow
+   about step-by-step?
+   A: Sure! Here ya go!
+     1. Install IIS 4.0 from the NT Option Pack #4.
+     2. Download and install Active Perl.
+     3. Install the Windows GNU tools from Cygwin. Make sure to add the b
+   in
+        directory to your system path. (Everyone should have these, wheth
+   er
+        they decide to use Bugzilla or not. :-) )
+     4. Download relevant packages from ActiveState at
+        http://www.activestate.com/packages/zips/. + DBD-Mysql.zip
+     5. Extract each zip file with WinZip, and install each ppd file usin
+   g the
+        notation: ppm install <module>.ppd
+     6. Install Mysql.  *Note: If you move the default install from c:\my
+   sql,
+        you must add the appropriate startup parameters to the NT service
+   . (ex.
+        -b e:\\programs\\mysql)
+     7. Download any Mysql client. http://www.mysql.com/download_win.html
+     8. Setup MySql. (These are the commands that I used.)
+             I. Cleanup default database settings.
+              C:\mysql\bin\mysql -u root mysql
+              mysql> DELETE FROM user WHERE Host='localhost' AND User='';
+              mysql> quit
+             C:\mysql\bin\mysqladmin reload
+             II. Set password for root.
+              C:\mysql\bin\mysql -u root mysql
+              mysql> UPDATE user SET Password=PASSWORD('new_password')
+              WHERE user='root';
+              mysql> FLUSH PRIVILEGES;
+              mysql> quit
+              C:\mysql\bin\mysqladmin -u root reload
+             III. Create bugs user.
+              C:\mysql\bin\mysql -u root -p
+              mysql> insert into user (host,user,password)
+             values('localhost','bugs','');
+              mysql> quit
+              C:\mysql\bin\mysqladmin -u root reload
+             IV. Create the bugs database.
+              C:\mysql\bin\mysql -u root -p
+              mysql> create database bugs;
+             V. Give the bugs user access to the bugs database.
+              mysql> insert into db
+             (host,db,user,select_priv,insert_priv,update_priv,delete_pri
+   v,create_priv,drop_priv)
+             values('localhost','bugs','bugs','Y','Y','Y','Y','Y','N')
+              mysql> quit
+              C:\mysql\bin\mysqladmin -u root reload
+     9. Run the table scripts to setup the bugs database.
+    10. Change CGI.pm to use the following regular expression because of
+        differing backslashes in NT versus UNIX.
+           o $0 =~ m:[^\\]*$:;
+    11. Had to make the crypt password = plain text password in the datab
+   ase.
+        (Thanks to Andrew Lahser" <andrew_lahser@merck.com>" on this one.
+   ) The
+        files that I changed were:
+           o globals.pl
+           o CGI.pl
+           o alternately, you can try commenting all references to 'crypt
+   '
+             string and replace them with similar lines but without encry
+   pt()
+             or crypr() functions insida all files.
+    12. Replaced sendmail with Windmail. Basically, you have to come up w
+   ith a
+        sendmail substitute for NT. Someone said that they used a Perl mo
+   dule
+        (Net::SMTP), but I was trying to save time and do as little Perl
+   coding
+        as possible.
+    13. Added "perl" to the beginning of all Perl system calls that use a
+    perl
+        script as an argument and renamed processmail to processmail.pl.
+    14. In processmail.pl, I added binmode(HANDLE) before all read() call
+   s. I'm
+        not sure about this one, but the read() under NT wasn't counting
+   the
+        EOLs without the binary read."
+
+   A.9.5. I'm having trouble with the perl modules for NT not being able
+   to talk to to the database.
+
+   Your modules may be outdated or inaccurate. Try:
+
+    1. Hitting http://www.activestate.com/ActivePerl
+    2. Download ActivePerl
+    3. Go to your prompt
+    4. Type 'ppm'
+    5. PPM> install DBI DBD-mysql GD
+
+   I reckon TimeDate and Data::Dumper come with the activeperl. You can
+   check the ActiveState site for packages for installation through PPM.
+   http://www.activestate.com/Packages/
+
+10. Bugzilla Usage
+
+   A.10.1. The query page is very confusing. Isn't there a simpler way to
+   query?
+
+   We are developing in that direction. You can follow progress on this
+   at http://bugzilla.mozilla.org/show_bug.cgi?id=16775. Some
+   functionality is available in Bugzilla 2.12, and is available as
+   "quicksearch.html"
+
+   A.10.2. I'm confused by the behavior of the "accept" button in the
+   Show Bug form. Why doesn't it assign the bug to me when I accept it?
+
+   The current behavior is acceptable to bugzilla.mozilla.org and most
+   users. I personally don't like it. You have your choice of patches to
+   change this behavior, however.
+
+   Add a "and accept bug" radio button
+   "Accept" button automatically assigns to you
+
+   Note that these patches are somewhat dated. You will need to do the
+   find and replace manually to apply them. They are very small, though.
+   It is easy.
+
+   A.10.3. I can't upload anything into the database via the "Create
+   Attachment" link. What am I doing wrong?
+
+   The most likely cause is a very old browser or a browser that is
+   incompatible with file upload via POST. Download the latest Netscape,
+   Microsoft, or Mozilla browser to handle uploads correctly.
+
+   A.10.4. Email submissions to Bugzilla that have attachments end up
+   asking me to save it as a "cgi" file.
+
+   Yup. Just rename it once you download it, or save it under a different
+   filename. This will not be fixed anytime too soon, because it would
+   cripple some other functionality.
+
+   A.10.5. How do I change a keyword in Bugzilla, once some bugs are
+   using it?
+
+   In the Bugzilla administrator UI, edit the keyword and it will let you
+   replace the old keyword name with a new one. This will cause a problem
+   with the keyword cache. Run sanitycheck.cgi to fix it.
+
+11. Bugzilla Hacking
+
+   A.11.1. What bugs are in Bugzilla right now?
+
+   Try this link to view current bugs or requests for enhancement for
+   Bugzilla.
+
+   You can view bugs marked for 2.14 release here. This list includes
+   bugs for the 2.14 release that have already been fixed and checked
+   into CVS. Please consult the Bugzilla Project Page for details on how
+   to check current sources out of CVS so you can have these bug fixes
+   early!
+
+   A.11.2. How can I change the default priority to a null value? For
+   instance, have the default priority be "---" instead of "P2"?
+
+   This is well-documented here:
+   http://bugzilla.mozilla.org/show_bug.cgi?id=49862. Ultimately, it's as
+   easy as adding the "---" priority field to your localconfig file in
+   the appropriate area, re-running checksetup.pl, and then changing the
+   default priority in your browser using "editparams.cgi". Hmm, now that
+   I think about it, that is kind of a klunky way to handle it, but for
+   now it's what we have! Although the bug has been closed "resolved
+   wontfix", there may be a better way to handle this...
+
+   A.11.3. What's the best way to submit patches? What guidelines should
+   I follow?
+
+    1. Enter a bug into bugzilla.mozilla.org for the "Webtools" product,
+       "Bugzilla" component.
+    2. Upload your patch as a unified DIFF (having used "diff -u" against
+       the current sources checked out of CVS), or new source file by
+       clicking "Create a new attachment" link on the bug page you've
+       just created, and include any descriptions of database changes you
+       may make, into the bug ID you submitted in step #1. Be sure and
+       click the "Patch" radio button to indicate the text you are
+       sending is a patch!
+    3. Announce your patch and the associated URL
+       (http://bugzilla.mozilla.org/show_bug.cgi?id=XXXX) for discussion
+       in the newsgroup (netscape.public.mozilla.webtools). You'll get a
+       really good, fairly immediate reaction to the implications of your
+       patch, which will also give us an idea how well-received the
+       change would be.
+    4. If it passes muster with minimal modification, the person to whom
+       the bug is assigned in Bugzilla is responsible for seeing the
+       patch is checked into CVS.
+    5. Bask in the glory of the fact that you helped write the most
+       successful open-source bug-tracking software on the planet :)
+     _________________________________________________________________
+
+Appendix B. Software Download Links
+
+   All of these sites are current as of April, 2001. Hopefully they'll
+   stay current for a while.
+
+   Apache Web Server: http://www.apache.org Optional web server for
+   Bugzilla, but recommended because of broad user base and support.
+
+   Bugzilla: http://www.mozilla.org/projects/bugzilla/
+
+   MySQL: http://www.mysql.org/
+
+   Perl: http://www.perl.org/
+
+   CPAN: http://www.cpan.org/
+
+   DBI Perl module:
+   ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/DBI/
+
+   Data::Dumper module:
+   ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/Data/
+
+   MySQL related Perl modules:
+   ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/Mysql/
+
+   TimeDate Perl module collection:
+   ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/Date/
+
+   GD Perl module: ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/GD/
+   Alternately, you should be able to find the latest version of GD at
+   http://www.boutell.com/gd/
+
+   Chart::Base module:
+   ftp://ftp.cpan.org/pub/perl/CPAN/modules/by-module/Chart/
+
+   LinuxDoc Software: http://www.linuxdoc.org/ (for documentation
+   maintenance)
+     _________________________________________________________________
+
+Appendix C. The Bugzilla Database
+
+     Note: This document really needs to be updated with more fleshed
+     out information about primary keys, interrelationships, and maybe
+     some nifty tables to document dependencies. Any takers?
+     _________________________________________________________________
+
+C.1. Database Schema Chart
+
+   Database Relationships
+
+   Bugzilla database relationships chart
+     _________________________________________________________________
+
+C.2. MySQL Bugzilla Database Introduction
+
+   Contributor(s):  Matthew P. Barnson (mbarnson@excitehome.net)
+   Last update: May 16, 2000
+   Changes:
+   Version 1.0: Initial public release (May 16, 2000)
+   Maintainer:  Matthew P. Barnson (mbarnson@excitehome.net)
+   ===
+   Table Of Contents
+   ===
+   FOREWORD
+   INTRODUCTION
+   THE BASICS
+   THE TABLES
+   THE DETAILS
+   ===
+   FOREWORD
+   ===
+     This information comes straight from my life.  I was forced to learn
+    how
+   Bugzilla organizes database because of nitpicky requests from users fo
+   r tiny
+   changes in wording, rather than having people re-educate themselves or
+   figure out how to work our procedures around the tool.  It sucks, but
+   it can
+   and will happen to you, so learn how the schema works and deal with it
+    when it
+   comes.
+     I'm sorry this version is plain text.  I can whip this info out a lo
+   t faster
+   if I'm not concerned about complex formatting.  I'll get it into sgml
+   for easy
+   portability as time permits.
+     The Bugzilla Database Schema has a home!  In addition to availabilit
+   y via CVS
+   and released versions 2.12 and higher of Bugzilla, you can find the la
+   test &
+   greatest version of the Bugzilla Database Schema at
+   http://www.trilobyte.net/barnsons/. This is a living document; please
+   be sure
+   you are up-to-date with the latest version before mirroring.
+     The Bugzilla Database Schema is designed to provide vital informatio
+   n
+   regarding the structure of the MySQL database.  Where appropriate, thi
+   s
+   document will refer to URLs rather than including documents in their e
+   ntirety
+   to ensure completeness even should this paper become out of date.
+     This document is not maintained by Netscape or Netscape employees, s
+   o please
+   do not contact them regarding errors or omissions contained herein. Pl
+   ease
+   direct all questions, comments, updates, flames, etc. to Matthew P. Ba
+   rnson
+   mbarnson@excitehome.net) (barnboy or barnhome on irc.mozilla.org in
+   #mozwebtools).
+     I'm sure I've made some glaring errors or omissions in this paper --
+    please
+   email me corrections or post corrections to the
+   netscape.public.mozilla.webtools newsgroup.
+   ===
+   INTRODUCTION
+   ===
+     So, here you are with your brand-new installation of Bugzilla.  You'
+   ve got
+   MySQL set up, Apache working right, Perl DBI and DBD talking to the da
+   tabase
+   flawlessly.  Maybe you've even entered a few test bugs to make sure em
+   ail's
+   working; people seem to be notified of new bugs and changes, and you c
+   an
+   enter and edit bugs to your heart's content.  Perhaps you've gone thro
+   ugh the
+   trouble of setting up a gateway for people to submit bugs to your data
+   base via
+   email, have had a few people test it, and received rave reviews from y
+   our beta
+   testers.
+     What's the next thing you do?  Outline a training strategy for your
+   development team, of course, and bring them up to speed on the new too
+   l you've
+   labored over for hours.
+     Your first training session starts off very well!  You have a captiv
+   e
+   audience which seems enraptured by the efficiency embodied in this thi
+   ng called
+   "Bugzilla".  You are caught up describing the nifty features, how peop
+   le can
+   save favorite queries in the database, set them up as headers and foot
+   ers on
+   their pages, customize their layouts, generate reports, track status w
+   ith
+   greater efficiency than ever before, leap tall buildings with a single
+    bound
+   and rescue Jane from the clutches of Certain Death!
+     But Certain Death speaks up -- a tiny voice, from the dark corners o
+   f the
+   conference room.  "I have a concern," the voice hisses from the darkne
+   ss,
+   "about the use of the word 'verified'.
+     The room, previously filled with happy chatter, lapses into reverent
+   ial
+   silence as Certain Death (better known as the Vice President of Softwa
+   re
+   Engineering) continues.  "You see, for two years we've used the word '
+   verified'
+   to indicate that a developer or quality assurance engineer has confirm
+   ed that,
+   in fact, a bug is valid. I don't want to lose two years of training to
+    a
+   new software product.  You need to change the bug status of 'verified'
+    to
+   'approved' as soon as possible. To avoid confusion, of course."
+     Oh no!  Terror strikes your heart, as you find yourself mumbling "ye
+   s, yes, I
+   don't think that would be a problem," You review the changes with Cert
+   ain
+   Death, and continue to jabber on, "no, it's not too big a change. I me
+   an, we
+   have the source code, right? You know, 'Use the Source, Luke' and all
+   that...
+   no problem," All the while you quiver inside like a beached jellyfish
+   bubbling,
+   burbling, and boiling on a hot Jamaican sand dune...
+     Thus begins your adventure into the heart of Bugzilla.  You've been
+   forced
+   to learn about non-portable enum() fields, varchar columns, and tinyin
+   t
+   definitions. The Adventure Awaits You!
+   ===
+   The Basics
+   ===
+     If you were like me, at this point you're totally clueless about the
+   internals of MySQL, and if it weren't for this executive order from th
+   e Vice
+   President you couldn't care less about the difference between a "bigin
+   t" and a
+   "tinyint" entry in MySQL.  I'd refer you first to the MySQL documentat
+   ion,
+   available at http://www.mysql.com/doc.html, but that's mostly a confus
+   ing
+   morass of high-level database jargon.  Here are the basics you need to
+    know
+   about the database to proceed:
+   1.  To connect to your database, type "mysql -u root" at the command p
+   rompt as
+   any user. If this works without asking you for a password, SHAME ON YO
+   U!  You
+   should have locked your security down like the README told you to.  Yo
+   u can
+   find details on locking down your database in the Bugzilla FAQ in this
+   directory (under "Security"), or more robust security generalities in
+   the
+   MySQL searchable documentation at
+   http://www.mysql.com/php/manual.php3?section=Privilege_system .
+   2.  You should now be at a prompt that looks like this:
+   mysql>
+   At the prompt, if "bugs" is the name of your Bugzilla database, type:
+   mysql> use bugs;
+   (don't forget the ";" at the end of each line, or you'll be kicking yo
+   urself
+   all the way through this documentation)
+     Young Grasshopper, you are now ready for the unveiling of the Bugzil
+   la
+   database, in the next section...
+   ===
+   THE TABLES
+   ===
+     Imagine your MySQL database as a series of spreadsheets, and you won
+   't be too
+   far off.  If you use this command:
+   mysql> show tables from bugs;
+   you'll be able to see all the "spreadsheets" (tables) in your database
+   .  Cool,
+   huh?  It's kinda' like a filesystem, only much faster and more robust.
+     Come
+   on, I'll show you more!
+     From the command issued above, you should now have some output that
+   looks
+   like this:
+   +-------------------+
+   | Tables in bugs    |
+   +-------------------+
+   | attachments       |
+   | bugs              |
+   | bugs_activity     |
+   | cc                |
+   | components        |
+   | dependencies      |
+   | fielddefs         |
+   | groups            |
+   | keyworddefs       |
+   | keywords          |
+   | logincookies      |
+   | longdescs         |
+   | milestones        |
+   | namedqueries      |
+   | products          |
+   | profiles          |
+   | profiles_activity |
+   | shadowlog         |
+   | versions          |
+   | votes             |
+   | watch             |
+   +-------------------+
+             If it doesn't look quite the same, that probably means it's
+   time to
+   update this documentation :)
+     Here's an overview of what each table does.  Most columns in each ta
+   ble have
+   descriptive names that make it fairly trivial to figure out their jobs
+   .
+   attachments: This table stores all attachments to bugs.  It tends to b
+   e your
+   largest table, yet also generally has the fewest entries because file
+   attachments are so (relatively) large.
+   bugs:  This is the core of your system.  The bugs table stores most of
+    the
+   current information about a bug, with the exception of the info stored
+    in the
+   other tables.
+   bugs_activity:  This stores information regarding what changes are mad
+   e to bugs
+   when -- a history file.
+   cc:  This tiny table simply stores all the CC information for any bug
+   which has
+   any entries in the CC field of the bug.  Note that, like most other ta
+   bles in
+   Bugzilla, it does not refer to users by their user names, but by their
+    unique
+   userid, stored as a primary key in the profiles table.
+   components: This stores the programs and components (or products and
+   components, in newer Bugzilla parlance) for Bugzilla.  Curiously, the
+   "program"
+   (product) field is the full name of the product, rather than some othe
+   r unique
+   identifier, like bug_id and user_id are elsewhere in the database.
+   dependencies: Stores data about those cool dependency trees.
+   fielddefs:  A nifty table that defines other tables.  For instance, wh
+   en you
+   submit a form that changes the value of "AssignedTo" this table allows
+   translation to the actual field name "assigned_to" for entry into MySQ
+   L.
+   groups:  defines bitmasks for groups.  A bitmask is a number that can
+   uniquely
+   identify group memberships.  For instance, say the group that is allow
+   ed to
+   tweak parameters is assigned a value of "1", the group that is allowed
+    to edit
+   users is assigned a "2", and the group that is allowed to create new g
+   roups is
+   assigned the bitmask of "4".  By uniquely combining the group bitmasks
+    (much
+   like the chmod command in UNIX,) you can identify a user is allowed to
+    tweak
+   parameters and create groups, but not edit users, by giving him a bitm
+   ask of
+   "5", or a user allowed to edit users and create groups, but not tweak
+   parameters, by giving him a bitmask of "6" Simple, huh?
+     If this makes no sense to you, try this at the mysql prompt:
+   mysql> select * from groups;
+     You'll see the list, it makes much more sense that way.
+   keyworddefs:  Definitions of keywords to be used
+   keywords: Unlike what you'd think, this table holds which keywords are
+   associated with which bug id's.
+   logincookies: This stores every login cookie ever assigned to you for
+   every
+   machine you've ever logged into Bugzilla from.  Curiously, it never do
+   es any
+   housecleaning -- I see cookies in this file I've not used for months.
+    However,
+   since Bugzilla never expires your cookie (for convenience' sake), it m
+   akes
+   sense.
+   longdescs:  The meat of bugzilla -- here is where all user comments ar
+   e stored!
+   You've only got 2^24 bytes per comment (it's a mediumtext field), so s
+   peak
+   sparingly -- that's only the amount of space the Old Testament from th
+   e Bible
+   would take (uncompressed, 16 megabytes).  Each comment is keyed to the
+   bug_id to which it's attached, so the order is necessarily chronologic
+   al, for
+   comments are played back in the order in which they are received.
+   milestones:  Interesting that milestones are associated with a specifi
+   c product
+   in this table, but Bugzilla does not yet support differing milestones
+   by
+   product through the standard configuration interfaces.
+   namedqueries:  This is where everybody stores their "custom queries".
+    Very
+   cool feature; it beats the tar out of having to bookmark each cool que
+   ry you
+   construct.
+   products:  What products you have, whether new bug entries are allowed
+    for the
+   product, what milestone you're working toward on that product, votes,
+   etc.  It
+   will be nice when the components table supports these same features, s
+   o you
+   could close a particular component for bug entry without having to clo
+   se an
+   entire product...
+   profiles:  Ahh, so you were wondering where your precious user informa
+   tion was
+   stored?  Here it is!  With the passwords in plain text for all to see!
+    (but
+   sshh... don't tell your users!)
+   profiles_activity:  Need to know who did what when to who's profile?
+   This'll
+   tell you, it's a pretty complete history.
+   shadowlog:  I could be mistaken here, but I believe this table tells y
+   ou when
+   your shadow database is updated and what commands were used to update
+   it.  We
+   don't use a shadow database at our site yet, so it's pretty empty for
+   us.
+   versions:  Version information for every product
+   votes:  Who voted for what when
+   watch:  Who (according to userid) is watching who's bugs (according to
+    their
+   userid).
+   ===
+   THE DETAILS
+   ===
+     Ahh, so you're wondering just what to do with the information above?
+     At the
+   mysql prompt, you can view any information about the columns in a tabl
+   e with
+   this command (where "table" is the name of the table you wish to view)
+   :
+   mysql> show columns from table;
+     You can also view all the data in a table with this command:
+   mysql> select * from table;
+     -- note: this is a very bad idea to do on, for instance, the "bugs"
+   table if
+   you have 50,000 bugs.  You'll be sitting there a while until you ctrl-
+   c or
+   50,000 bugs play across your screen.
+     You can limit the display from above a little with the command, wher
+   e
+   "column" is the name of the column for which you wish to restrict info
+   rmation:
+   mysql> select * from table where (column = "some info");
+     -- or the reverse of this
+   mysql> select * from table where (column != "some info");
+     Let's take our example from the introduction, and assume you need to
+    change
+   the word "verified" to "approved" in the resolution field.  We know fr
+   om the
+   above information that the resolution is likely to be stored in the "b
+   ugs"
+   table. Note we'll need to change a little perl code as well as this da
+   tabase
+   change, but I won't plunge into that in this document. Let's verify th
+   e
+   information is stored in the "bugs" table:
+   mysql> show columns from bugs
+     (exceedingly long output truncated here)
+   | bug_status| enum('UNCONFIRMED','NEW','ASSIGNED','REOPENED','RESOLVED
+   ','VERIFIED','CLOSED')||MUL | UNCONFIRMED||
+     Sorry about that long line.  We see from this that the "bug status"
+   column is
+   an "enum field", which is a MySQL peculiarity where a string type fiel
+   d can
+   only have certain types of entries.  While I think this is very cool,
+   it's not
+   standard SQL.  Anyway, we need to add the possible enum field entry
+   'APPROVED' by altering the "bugs" table.
+   mysql> ALTER table bugs CHANGE bug_status bug_status
+       -> enum("UNCONFIRMED", "NEW", "ASSIGNED", "REOPENED", "RESOLVED",
+       -> "VERIFIED", "APPROVED", "CLOSED") not null;
+       (note we can take three lines or more -- whatever you put in befor
+   e the
+   semicolon is evaluated as a single expression)
+   Now if you do this:
+   mysql> show columns from bugs;
+     you'll see that the bug_status field has an extra "APPROVED" enum th
+   at's
+   available!  Cool thing, too, is that this is reflected on your query p
+   age as
+   well -- you can query by the new status.  But how's it fit into the ex
+   isting
+   scheme of things?
+     Looks like you need to go back and look for instances of the word "v
+   erified"
+   in the perl code for Bugzilla -- wherever you find "verified", change
+   it to
+   "approved" and you're in business (make sure that's a case-insensitive
+    search).
+   Although you can query by the enum field, you can't give something a s
+   tatus
+   of "APPROVED" until you make the perl changes.   Note that this change
+    I
+   mentioned can also be done by editing checksetup.pl, which automates a
+    lot of
+   this.  But you need to know this stuff anyway, right?
+     I hope this database tutorial has been useful for you.  If you have
+   comments
+   to add, questions, concerns, etc. please direct them to
+   mbarnson@excitehome.net.  Please direct flames to /dev/null :)  Have a
+    nice
+   day!
+   ===
+   LINKS
+   ===
+   Great MySQL tutorial site:
+   http://www.devshed.com/Server_Side/MySQL/
+     _________________________________________________________________
+
+C.3. MySQL Permissions & Grant Tables
+
+     Note: The following portion of documentation comes from my answer
+     to an old discussion of Keystone, a cool product that does
+     trouble-ticket tracking for IT departments. I wrote this post to
+     the Keystone support group regarding MySQL grant table permissions,
+     and how to use them effectively. It is badly in need of updating,
+     as I believe MySQL has added a field or two to the grant tables
+     since this time, but it serves as a decent introduction and
+     troubleshooting document for grant table issues. I used Keynote to
+     track my troubles until I discovered Bugzilla, which gave me a
+     whole new set of troubles to work on : )
+
+   From matt_barnson@singletrac.com Wed Jul  7 09:00:07 1999
+   Date: Mon, 1 Mar 1999 21:37:04 -0700
+   From: Matthew Barnson matt_barnson@singletrac.com
+   To: keystone-users@homeport.org
+   Subject: [keystone-users] Grant Tables FAQ
+       [The following text is in the "iso-8859-1" character set]
+       [Your display is set for the "US-ASCII" character set]
+       [Some characters may be displayed incorrectly]
+   Maybe we can include this rambling message in the Keystone FAQ?  It ge
+   ts
+   asked a lot, and the only option current listed in the FAQ is
+   "--skip-grant-tables".
+   Really, you can't go wrong by reading section 6 of the MySQL manual, a
+   t
+   http://www.mysql.com/Manual/manual.html.  I am sure their description
+   is
+   better than mine.
+   MySQL runs fine without permissions set up correctly if you run the my
+   sql
+   daemon with the "--skip-grant-tables" option.  Running this way denies
+   access to nobody.  Unfortunately, unless you've got yourself firewalle
+   d it
+   also opens the potential for abuse if someone knows you're running it.
+   Additionally, the default permissions for MySQL allow anyone at localh
+   ost
+   access to the database if the database name begins with "test_" or is
+   named
+   "test" (i.e. "test_keystone").  You can change the name of your databa
+   se in
+   the keystone.conf file ($sys_dbname).  This is the way I am doing it f
+   or
+   some of my databases, and it works fine.
+   The methods described below assume you're running MySQL on the same bo
+   x as
+   your webserver, and that you don't mind if your $sys_dbuser for Keysto
+   ne has
+   superuser access.  See near the bottom of this message for a descripti
+   on of
+   what each field does.
+   Method #1:
+   1.  cd /var/lib
+   #location where you'll want to run /usr/bin/mysql_install_db shell
+   script from to get it to work.
+   2.  ln -s mysql data
+   # soft links the "mysql" directory to "data", which is what
+   mysql_install_db expects.  Alternately, you can edit mysql_install_db
+   and
+   change all the "./data" references to "./mysql".
+   3.  Edit /usr/bin/mysql_install_db with your favorite text editor (vi,
+   emacs, jot, pico, etc.)
+   A)  Copy the "INSERT INTO db VALUES
+   ('%','test\_%','','Y','Y','Y','Y','Y','Y');" and paste it immediately
+   after
+   itself.  Chage the 'test\_%' value to 'keystone', or the value of
+   $sys_dbname in keystone.conf.
+   B)  If you are running your keystone database with any user, you'll ne
+   ed to
+   copy the "INSERT INTO user VALUES
+   ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');" line
+    after
+   itself and change 'root' to the name of the keystone database user
+   ($sys_dbuser) in keystone.conf.
+   # adds entries to the script to create grant tables for specific
+   hosts and users.  The user you set up has super-user access ($sys_dbus
+   er) --
+   you may or may not want this.  The layout of mysql_install_db is reall
+   y very
+   uncomplicated.
+   4.  /usr/bin/mysqladmin shutdown
+   # ya gotta shut it down before you can reinstall the grant tables!
+   5.  rm -i /var/lib/mysql/mysql/*.IS?' and answer 'Y' to the deletion
+   questions.
+   # nuke your current grant tables.  This WILL NOT delete any other
+   databases than your grant tables.
+   6.  /usr/bin/mysql_install_db
+   # run the script you just edited to install your new grant tables.
+   7.  mysqladmin -u root password (new_password)
+   # change the root MySQL password, or else anyone on localhost can
+   login to MySQL as root and make changes.  You can skip this step if yo
+   u want
+   keystone to connect as root with no password.
+   8.  mysqladmin -u (webserver_user_name) password (new_password)
+   # change the password of the $sys_dbuser.  Note that you will need
+   to change the password in the keystone.conf file as well in $sys_dbpas
+   swd,
+   and if your permissions are set up incorrectly anybody can type the UR
+   L to
+   your keystone.conf file and get the password.  Not that this will help
+    them
+   much if your permissions are set to @localhost.
+   Method #2:  easier, but a pain reproducing if you have to delete your
+   grant
+   tables.  This is the "recommended" method for altering grant tables in
+   MySQL.  I don't use it because I like the other way :)
+   shell> mysql --user=root keystone
+   mysql> GRANT
+   SELECT,INSERT,UPDATE,DELETE,INDEX,ALTER,CREATE,DROP,RELOAD,SHUTDOWN,PR
+   OCESS,
+   FILE,
+              ON keystone.*
+              TO <$sys_dbuser name>@localhost
+              IDENTIFIED BY '(password)'
+        WITH GRANT OPTION;
+   OR
+   mysql> GRANT ALL PRIVELEGES
+   ON keystone.*
+   TO <$sys_dbuser name>@localhost
+   IDENTIFIED BY '(password)'
+   WITH GRANT OPTION;
+   # this grants the required permissions to the keystone ($sys_dbuser)
+   account defined in keystone.conf.  However, if you are runnning many
+   different MySQL-based apps, as we are, it's generally better to edit t
+   he
+   mysql_install_db script to be able to quickly reproduce your permissio
+   ns
+   structure again.  Note that the FILE privelege and WITH GRANT OPTION m
+   ay not
+   be in your best interest to include.
+   GRANT TABLE FIELDS EXPLANATION:
+   Quick syntax summary:  "%" in MySQL is a wildcard.  I.E., if you are
+   defining your DB table and in the 'host' field and enter '%', that mea
+   ns
+   that any host can access that database.  Of course, that host must als
+   o have
+   a valid db user in order to do anything useful.  'db'=name of database
+   .  In
+   our case, it should be "keystone".  "user" should be your "$sys_dbuser
+   "
+   defined in keystone.conf.  Note that you CANNOT add or change a passwo
+   rd by
+   using the "INSERT INTO db (X)" command -- you must change it with the
+   mysql
+   -u command as defined above.  Passwords are stored encrypted in the My
+   SQL
+   database, and if you try to enter it directly into the table they will
+    not
+   match.
+   TABLE:  USER.  Everything after "password" is a privelege granted (Y/N
+   ).
+   This table controls individual user global access rights.
+   'host','user','password','select','insert','update','delete','index','
+   alter'
+   ,'create','drop','grant','reload','shutdown','process','file'
+   TABLE:  DB.  This controls access of USERS to databases.
+   'host','db','user','select','insert','update','delete','index','alter'
+   ,'crea
+   te','drop','grant'
+   TABLE:  HOST.  This controls which HOSTS are allowed what global acces
+   s
+   rights.  Note that the HOST table, USER table, and DB table are very c
+   losely
+   connected -- if an authorized USER attempts an SQL request from an
+   unauthorized HOST, she's denied.  If a request from an authorized HOST
+    is
+   not an authorized USER, it is denied.  If a globally authorized USER d
+   oes
+   not have rights to a certain DB, she's denied.  Get the picture?
+   'host','db','select','insert','update','delete','index','alter','creat
+   e','dr
+   op','grant'
+   You should now have a working knowledge of MySQL grant tables.  If the
+   re is
+   anything I've left out of this answer that you feel is pertinent, or i
+   f my
+   instructions don't work for you, please let me know and I'll re-post t
+   his
+   letter again, corrected.  I threw it together one night out of exasper
+   ation
+   for all the newbies who don't know squat about MySQL yet, so it is alm
+   ost
+   guaranteed to have errors.
+   Once again, you can't go wrong by reading section 6 of the MySQL manua
+   l.  It
+   is more detailed than I!
+   http://www.mysql.com/Manual/manual.html.
+   ----------------------------------------------------------------------
+   ------
+   10/12/2000
+   Matthew sent in some mail with updated contact information:
+   NEW CONTACT INFORMATION:
+                           ------------------------
+                           Matthew P. Barnson
+                           Manager, Systems Administration
+                           Excite@Home Business Applications
+                           mbarnson@excitehome.net
+                           (801)234-8300
+     _________________________________________________________________
+
+C.4. Cleaning up after mucking with Bugzilla
+
+   Contributed by Eric Hanson:
+   There are several things, and one trick.  There is a small tiny piece
+   of
+   documentation I saw once that said something very important.
+   1)  After pretty much any manual working of the Mysql db, you must
+   delete a file in the bugzilla directory: data/versioncache
+   Versioncache basically is a way to speed up bugzilla (from what I
+   understand).  It stores a lot of commonly used information.  However,
+   this file is refreshed every so often (I can't remember the time
+   interval though).  So eventually all changes do propogate out, so you
+   may see stuff suddenly working.
+   2)  Assuming that failed, you will also have to check something with t
+   he
+   checksetup.pl file.  It actually is run twice.  The first time it
+   creates the file: localconfig.  You can modify localconfig, (or not if
+   you are doing bug_status stuff) or you should delete localconfig and
+   rerun your modified checksetup.pl.  Since I don't actually see anythin
+   g
+   in localconfig pertaining to bug_status, this point is mainly a FYI.
+     _________________________________________________________________
+
+Chapter 7. Bugzilla Variants
+
+     Note: I know there are more variants than just RedHat Bugzilla out
+     there. Please help me get information about them, their project
+     status, and benefits there might be in using them or in using their
+     code in main-tree Bugzilla.
+     _________________________________________________________________
+
+7.1. Red Hat Bugzilla
+
+   Red Hat Bugzilla is probably the most popular Bugzilla variant, aside
+   from Mozilla Bugzilla, on the planet. One of the major benefits of Red
+   Hat Bugzilla is the ability to work with Oracle as a database, as well
+   as MySQL. Here's what Dave Lawrence had to say about the status of Red
+   Hat Bugzilla,
+
+       Hello. I apologize that I am getting back to you so late. It has
+     been difficult to keep
+     up with email this past week. I have checked out your updated docum
+     entation and I will
+     have to say very good work. A few notes and additions as follows.
+     (ed: from the FAQ)
+     >For the record, we are not using any template type implementation
+     for the cosmetic changes
+     >maded to Bugzilla. It is just alot of html changes in the code its
+     elf. I admit I may have
+     >gotten a little carried away with it but the corporate types asked
+      for a more standardized
+     >interface to match up with other projects relating to Red Hat web
+     sites. A lot of other web
+     >based internal tools I am working on also look like Bugzilla.
+     This should probably be changed since we are now in fact using Text
+     ::Template for most
+     of the html rendering. You actually state this later in your number
+     ed list.
+     Also number 6 contradicts number 8 where number 6 would be the most
+      up to date status
+     on the Oracle port.
+     Additional Information:
+     -----------------------------
+     1. Comments are now stored in varchar fields of 4k in size each. If
+      the comment is more
+     than 4k it is broken up into chunks and given a sort number so each
+      comment can be re
+     assembled in the correct order. This was done because originally I
+     was storing the comments
+     in a long datatype which unfortunately cannot be indexed or joined
+     with another table. This
+     cause the search of text within the long description to be disabled
+      for a long time. That
+     is now working and is nto showing any noticeble performance hit tha
+     t I can tell.
+     2. Work is being started on internationalizing the Bugzilla source
+     we have to allow our
+     Japanese customers to enter bug reports into a single bugzilla syst
+     em. This will probably
+     be done by using the nvarchar data types supported by Oracle which
+     allows storage of
+     double byte characters and also the use of the Accept-Language in t
+     he http header for
+     detection by Bugilla of which language to render.
+     3. Of course even more cosmetic changes. It is difficult to keep up
+      with the ever
+     changing faces of www.redhat.com.
+     4. Some convenience enhancements in the administration utilities. A
+     nd more integration
+     with other internal/external Red Hat web sites.
+     I hope this information may prove helpful for your documentation. P
+     lease contact
+     me if you have any more question or I can do anything else.
+     Regards
+     _________________________________________________________________
+
+Appendix D. Useful Patches and Utilities for Bugzilla
+
+D.1. The setperl.csh Utility
+
+   You can use the "setperl.csh" utility to quickly and easily change the
+   path to perl on all your Bugzilla files. This is a C-shell script; if
+   you do not have "csh" or "tcsh" in the search path on your system, it
+   will not work!
+    1. Download the "setperl.csh" utility to your Bugzilla directory and
+       make it executable.
+         a. bash# cd /your/path/to/bugzilla
+         b. bash# wget -O setperl.csh
+            'http://bugzilla.mozilla.org/showattachment.cgi?attach_id=107
+            95'
+         c. bash# chmod u+x setperl.csh
+    2. Prepare (and fix) Bugzilla file permissions.
+         a. bash# chmod u+w *
+         b. bash# chmod u+x duplicates.cgi
+         c. bash# chmod a-x bug_status.html
+    3. Run the script:
+       bash# ./setperl.csh /your/path/to/perl
+       Example D-1. Using Setperl to set your perl path
+       bash# ./setperl.csh /usr/bin/perl
+     _________________________________________________________________
+
+D.2. Command-line Bugzilla Queries
+
+   Users can query Bugzilla from the command line using this suite of
+   utilities.
+
+   The query.conf file contains the mapping from options to field names
+   and comparison types. Quoted option names are "grepped" for, so it
+   should be easy to edit this file. Comments (#) have no effect; you
+   must make sure these lines do not contain any quoted "option"
+
+   buglist is a shell script which submits a Bugzilla query and writes
+   the resulting HTML page to stdout. It supports both short options,
+   (such as "-Afoo" or "-Rbar") and long options (such as
+   "--assignedto=foo" or "--reporter=bar"). If the first character of an
+   option is not "-", it is treated as if it were prefixed with
+   "--default=".
+
+   The columlist is taken from the COLUMNLIST environment variable. This
+   is equivalent to the "Change Columns" option when you list bugs in
+   buglist.cgi. If you have already used Bugzilla, use grep COLUMLIST
+   ~/.netscape/cookies to see your current COLUMNLIST setting.
+
+   bugs is a simple shell script which calls buglist and extracts the bug
+   numbers from the output. Adding the prefix
+   "http://bugzilla.mozilla.org/buglist.cgi?bug_id=" turns the bug list
+   into a working link if any bugs are found. Counting bugs is easy. Pipe
+   the results through sed -e 's/,/ /g' | wc | awk '{printf $2 "\n"}'
+
+   Akkana says she has good results piping buglist output through w3m -T
+   text/html -dump
+    1. Download three files:
+         a. bash$ wget -O query.conf
+            'http://bugzilla.mozilla.org/showattachment.cgi?attach_id=261
+            57'
+         b. bash$ wget -O buglist
+            'http://bugzilla.mozilla.org/showattachment.cgi?attach_id=269
+            44'
+         c. bash# wget -O bugs
+            'http://bugzilla.mozilla.org/showattachment.cgi?attach_id=262
+            15'
+    2. Make your utilities executable: bash$ chmod u+x buglist bugs
+     _________________________________________________________________
+
+D.3. The Quicksearch Utility
+
+   Quicksearch is a new, experimental feature of the 2.12 release. It
+   consist of two Javascript files, "quicksearch.js" and
+   "localconfig.js", and two documentation files, "quicksearch.html" and
+   "quicksearchhack.html"
+
+   The index.html page has been updated to include the QuickSearch text
+   box.
+
+   To take full advantage of the query power, the Bugzilla maintainer
+   must edit "localconfig.js" according to the value sets used in the
+   local installation.
+
+   Currently, keywords must be hard-coded in localconfig.js. If they are
+   not, keywords are not automatically recognized. This means, if
+   localconfig.js is left unconfigured, that searching for a bug with the
+   "foo" keyword will only find bugs with "foo" in the summary, status
+   whiteboard, product or component name, but not those with the keyword
+   "foo".
+
+   Workarounds for Bugzilla users:
+
+   search for '!foo' (this will find only bugs with the keyword "foo"
+   search 'foo,!foo' (equivalent to 'foo OR keyword:foo')
+
+   When this tool is ported from client-side JavaScript to server-side
+   Perl, the requirement for hard-coding keywords can be fixed. This bug
+   has details.
+     _________________________________________________________________
+
+Appendix E. GNU Free Documentation License
+
+   Version 1.1, March 2000
+
+     Copyright (C) 2000 Free Software Foundation, Inc. 59 Temple Place,
+     Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy
+     and distribute verbatim copies of this license document, but
+     changing it is not allowed.
+     _________________________________________________________________
+
+0. PREAMBLE
+
+   The purpose of this License is to make a manual, textbook, or other
+   written document "free" in the sense of freedom: to assure everyone
+   the effective freedom to copy and redistribute it, with or without
+   modifying it, either commercially or noncommercially. Secondarily,
+   this License preserves for the author and publisher a way to get
+   credit for their work, while not being considered responsible for
+   modifications made by others.
+
+   This License is a kind of "copyleft", which means that derivative
+   works of the document must themselves be free in the same sense. It
+   complements the GNU General Public License, which is a copyleft
+   license designed for free software.
+
+   We have designed this License in order to use it for manuals for free
+   software, because free software needs free documentation: a free
+   program should come with manuals providing the same freedoms that the
+   software does. But this License is not limited to software manuals; it
+   can be used for any textual work, regardless of subject matter or
+   whether it is published as a printed book. We recommend this License
+   principally for works whose purpose is instruction or reference.
+     _________________________________________________________________
+
+1. APPLICABILITY AND DEFINITIONS
+
+   This License applies to any manual or other work that contains a
+   notice placed by the copyright holder saying it can be distributed
+   under the terms of this License. The "Document", below, refers to any
+   such manual or work. Any member of the public is a licensee, and is
+   addressed as "you".
+
+   A "Modified Version" of the Document means any work containing the
+   Document or a portion of it, either copied verbatim, or with
+   modifications and/or translated into another language.
+
+   A "Secondary Section" is a named appendix or a front-matter section of
+   the Document that deals exclusively with the relationship of the
+   publishers or authors of the Document to the Document's overall
+   subject (or to related matters) and contains nothing that could fall
+   directly within that overall subject. (For example, if the Document is
+   in part a textbook of mathematics, a Secondary Section may not explain
+   any mathematics.) The relationship could be a matter of historical
+   connection with the subject or with related matters, or of legal,
+   commercial, philosophical, ethical or political position regarding
+   them.
+
+   The "Invariant Sections" are certain Secondary Sections whose titles
+   are designated, as being those of Invariant Sections, in the notice
+   that says that the Document is released under this License.
+
+   The "Cover Texts" are certain short passages of text that are listed,
+   as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+   the Document is released under this License.
+
+   A "Transparent" copy of the Document means a machine-readable copy,
+   represented in a format whose specification is available to the
+   general public, whose contents can be viewed and edited directly and
+   straightforwardly with generic text editors or (for images composed of
+   pixels) generic paint programs or (for drawings) some widely available
+   drawing editor, and that is suitable for input to text formatters or
+   for automatic translation to a variety of formats suitable for input
+   to text formatters. A copy made in an otherwise Transparent file
+   format whose markup has been designed to thwart or discourage
+   subsequent modification by readers is not Transparent. A copy that is
+   not "Transparent" is called "Opaque".
+
+   Examples of suitable formats for Transparent copies include plain
+   ASCII without markup, Texinfo input format, LaTeX input format, SGML
+   or XML using a publicly available DTD, and standard-conforming simple
+   HTML designed for human modification. Opaque formats include
+   PostScript, PDF, proprietary formats that can be read and edited only
+   by proprietary word processors, SGML or XML for which the DTD and/or
+   processing tools are not generally available, and the
+   machine-generated HTML produced by some word processors for output
+   purposes only.
+
+   The "Title Page" means, for a printed book, the title page itself,
+   plus such following pages as are needed to hold, legibly, the material
+   this License requires to appear in the title page. For works in
+   formats which do not have any title page as such, "Title Page" means
+   the text near the most prominent appearance of the work's title,
+   preceding the beginning of the body of the text.
+     _________________________________________________________________
+
+2. VERBATIM COPYING
+
+   You may copy and distribute the Document in any medium, either
+   commercially or noncommercially, provided that this License, the
+   copyright notices, and the license notice saying this License applies
+   to the Document are reproduced in all copies, and that you add no
+   other conditions whatsoever to those of this License. You may not use
+   technical measures to obstruct or control the reading or further
+   copying of the copies you make or distribute. However, you may accept
+   compensation in exchange for copies. If you distribute a large enough
+   number of copies you must also follow the conditions in section 3.
+
+   You may also lend copies, under the same conditions stated above, and
+   you may publicly display copies.
+     _________________________________________________________________
+
+3. COPYING IN QUANTITY
+
+   If you publish printed copies of the Document numbering more than 100,
+   and the Document's license notice requires Cover Texts, you must
+   enclose the copies in covers that carry, clearly and legibly, all
+   these Cover Texts: Front-Cover Texts on the front cover, and
+   Back-Cover Texts on the back cover. Both covers must also clearly and
+   legibly identify you as the publisher of these copies. The front cover
+   must present the full title with all words of the title equally
+   prominent and visible. You may add other material on the covers in
+   addition. Copying with changes limited to the covers, as long as they
+   preserve the title of the Document and satisfy these conditions, can
+   be treated as verbatim copying in other respects.
+
+   If the required texts for either cover are too voluminous to fit
+   legibly, you should put the first ones listed (as many as fit
+   reasonably) on the actual cover, and continue the rest onto adjacent
+   pages.
+
+   If you publish or distribute Opaque copies of the Document numbering
+   more than 100, you must either include a machine-readable Transparent
+   copy along with each Opaque copy, or state in or with each Opaque copy
+   a publicly-accessible computer-network location containing a complete
+   Transparent copy of the Document, free of added material, which the
+   general network-using public has access to download anonymously at no
+   charge using public-standard network protocols. If you use the latter
+   option, you must take reasonably prudent steps, when you begin
+   distribution of Opaque copies in quantity, to ensure that this
+   Transparent copy will remain thus accessible at the stated location
+   until at least one year after the last time you distribute an Opaque
+   copy (directly or through your agents or retailers) of that edition to
+   the public.
+
+   It is requested, but not required, that you contact the authors of the
+   Document well before redistributing any large number of copies, to
+   give them a chance to provide you with an updated version of the
+   Document.
+     _________________________________________________________________
+
+4. MODIFICATIONS
+
+   You may copy and distribute a Modified Version of the Document under
+   the conditions of sections 2 and 3 above, provided that you release
+   the Modified Version under precisely this License, with the Modified
+   Version filling the role of the Document, thus licensing distribution
+   and modification of the Modified Version to whoever possesses a copy
+   of it. In addition, you must do these things in the Modified Version:
+
+    A. Use in the Title Page (and on the covers, if any) a title distinct
+       from that of the Document, and from those of previous versions
+       (which should, if there were any, be listed in the History section
+       of the Document). You may use the same title as a previous version
+       if the original publisher of that version gives permission.
+    B. List on the Title Page, as authors, one or more persons or
+       entities responsible for authorship of the modifications in the
+       Modified Version, together with at least five of the principal
+       authors of the Document (all of its principal authors, if it has
+       less than five).
+    C. State on the Title page the name of the publisher of the Modified
+       Version, as the publisher.
+    D. Preserve all the copyright notices of the Document.
+    E. Add an appropriate copyright notice for your modifications
+       adjacent to the other copyright notices.
+    F. Include, immediately after the copyright notices, a license notice
+       giving the public permission to use the Modified Version under the
+       terms of this License, in the form shown in the Addendum below.
+    G. Preserve in that license notice the full lists of Invariant
+       Sections and required Cover Texts given in the Document's license
+       notice.
+    H. Include an unaltered copy of this License.
+    I. Preserve the section entitled "History", and its title, and add to
+       it an item stating at least the title, year, new authors, and
+       publisher of the Modified Version as given on the Title Page. If
+       there is no section entitled "History" in the Document, create one
+       stating the title, year, authors, and publisher of the Document as
+       given on its Title Page, then add an item describing the Modified
+       Version as stated in the previous sentence.
+    J. Preserve the network location, if any, given in the Document for
+       public access to a Transparent copy of the Document, and likewise
+       the network locations given in the Document for previous versions
+       it was based on. These may be placed in the "History" section. You
+       may omit a network location for a work that was published at least
+       four years before the Document itself, or if the original
+       publisher of the version it refers to gives permission.
+    K. In any section entitled "Acknowledgements" or "Dedications",
+       preserve the section's title, and preserve in the section all the
+       substance and tone of each of the contributor acknowledgements
+       and/or dedications given therein.
+    L. Preserve all the Invariant Sections of the Document, unaltered in
+       their text and in their titles. Section numbers or the equivalent
+       are not considered part of the section titles.
+    M. Delete any section entitled "Endorsements". Such a section may not
+       be included in the Modified Version.
+    N. Do not retitle any existing section as "Endorsements" or to
+       conflict in title with any Invariant Section.
+
+   If the Modified Version includes new front-matter sections or
+   appendices that qualify as Secondary Sections and contain no material
+   copied from the Document, you may at your option designate some or all
+   of these sections as invariant. To do this, add their titles to the
+   list of Invariant Sections in the Modified Version's license notice.
+   These titles must be distinct from any other section titles.
+
+   You may add a section entitled "Endorsements", provided it contains
+   nothing but endorsements of your Modified Version by various
+   parties--for example, statements of peer review or that the text has
+   been approved by an organization as the authoritative definition of a
+   standard.
+
+   You may add a passage of up to five words as a Front-Cover Text, and a
+   passage of up to 25 words as a Back-Cover Text, to the end of the list
+   of Cover Texts in the Modified Version. Only one passage of
+   Front-Cover Text and one of Back-Cover Text may be added by (or
+   through arrangements made by) any one entity. If the Document already
+   includes a cover text for the same cover, previously added by you or
+   by arrangement made by the same entity you are acting on behalf of,
+   you may not add another; but you may replace the old one, on explicit
+   permission from the previous publisher that added the old one.
+
+   The author(s) and publisher(s) of the Document do not by this License
+   give permission to use their names for publicity for or to assert or
+   imply endorsement of any Modified Version.
+     _________________________________________________________________
+
+5. COMBINING DOCUMENTS
+
+   You may combine the Document with other documents released under this
+   License, under the terms defined in section 4 above for modified
+   versions, provided that you include in the combination all of the
+   Invariant Sections of all of the original documents, unmodified, and
+   list them all as Invariant Sections of your combined work in its
+   license notice.
+
+   The combined work need only contain one copy of this License, and
+   multiple identical Invariant Sections may be replaced with a single
+   copy. If there are multiple Invariant Sections with the same name but
+   different contents, make the title of each such section unique by
+   adding at the end of it, in parentheses, the name of the original
+   author or publisher of that section if known, or else a unique number.
+   Make the same adjustment to the section titles in the list of
+   Invariant Sections in the license notice of the combined work.
+
+   In the combination, you must combine any sections entitled "History"
+   in the various original documents, forming one section entitled
+   "History"; likewise combine any sections entitled "Acknowledgements",
+   and any sections entitled "Dedications". You must delete all sections
+   entitled "Endorsements."
+     _________________________________________________________________
+
+6. COLLECTIONS OF DOCUMENTS
+
+   You may make a collection consisting of the Document and other
+   documents released under this License, and replace the individual
+   copies of this License in the various documents with a single copy
+   that is included in the collection, provided that you follow the rules
+   of this License for verbatim copying of each of the documents in all
+   other respects.
+
+   You may extract a single document from such a collection, and
+   distribute it individually under this License, provided you insert a
+   copy of this License into the extracted document, and follow this
+   License in all other respects regarding verbatim copying of that
+   document.
+     _________________________________________________________________
+
+7. AGGREGATION WITH INDEPENDENT WORKS
+
+   A compilation of the Document or its derivatives with other separate
+   and independent documents or works, in or on a volume of a storage or
+   distribution medium, does not as a whole count as a Modified Version
+   of the Document, provided no compilation copyright is claimed for the
+   compilation. Such a compilation is called an "aggregate", and this
+   License does not apply to the other self-contained works thus compiled
+   with the Document, on account of their being thus compiled, if they
+   are not themselves derivative works of the Document.
+
+   If the Cover Text requirement of section 3 is applicable to these
+   copies of the Document, then if the Document is less than one quarter
+   of the entire aggregate, the Document's Cover Texts may be placed on
+   covers that surround only the Document within the aggregate. Otherwise
+   they must appear on covers around the whole aggregate.
+     _________________________________________________________________
+
+8. TRANSLATION
+
+   Translation is considered a kind of modification, so you may
+   distribute translations of the Document under the terms of section 4.
+   Replacing Invariant Sections with translations requires special
+   permission from their copyright holders, but you may include
+   translations of some or all Invariant Sections in addition to the
+   original versions of these Invariant Sections. You may include a
+   translation of this License provided that you also include the
+   original English version of this License. In case of a disagreement
+   between the translation and the original English version of this
+   License, the original English version will prevail.
+     _________________________________________________________________
+
+9. TERMINATION
+
+   You may not copy, modify, sublicense, or distribute the Document
+   except as expressly provided for under this License. Any other attempt
+   to copy, modify, sublicense or distribute the Document is void, and
+   will automatically terminate your rights under this License. However,
+   parties who have received copies, or rights, from you under this
+   License will not have their licenses terminated so long as such
+   parties remain in full compliance.
+     _________________________________________________________________
+
+10. FUTURE REVISIONS OF THIS LICENSE
+
+   The Free Software Foundation may publish new, revised versions of the
+   GNU Free Documentation License from time to time. Such new versions
+   will be similar in spirit to the present version, but may differ in
+   detail to address new problems or concerns. See
+   http://www.gnu.org/copyleft/.
+
+   Each version of the License is given a distinguishing version number.
+   If the Document specifies that a particular numbered version of this
+   License "or any later version" applies to it, you have the option of
+   following the terms and conditions either of that specified version or
+   of any later version that has been published (not as a draft) by the
+   Free Software Foundation. If the Document does not specify a version
+   number of this License, you may choose any version ever published (not
+   as a draft) by the Free Software Foundation.
+     _________________________________________________________________
+
+How to use this License for your documents
+
+   To use this License in a document you have written, include a copy of
+   the License in the document and put the following copyright and
+   license notices just after the title page:
+
+     Copyright (c) YEAR YOUR NAME. Permission is granted to copy,
+     distribute and/or modify this document under the terms of the GNU
+     Free Documentation License, Version 1.1 or any later version
+     published by the Free Software Foundation; with the Invariant
+     Sections being LIST THEIR TITLES, with the Front-Cover Texts being
+     LIST, and with the Back-Cover Texts being LIST. A copy of the
+     license is included in the section entitled "GNU Free Documentation
+     License".
+
+   If you have no Invariant Sections, write "with no Invariant Sections"
+   instead of saying which ones are invariant. If you have no Front-Cover
+   Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts
+   being LIST"; likewise for Back-Cover Texts.
+
+   If your document contains nontrivial examples of program code, we
+   recommend releasing these examples in parallel under your choice of
+   free software license, such as the GNU General Public License, to
+   permit their use in free software.
+
+Glossary
+
+A
+
+   There are no entries for A
+
+B
+
+   Bug
+          A "Bug" in Bugzilla refers to an issue entered into the
+          database which has an associated number, assignments, comments,
+          etc. Many also refer to a "Ticket" or "Issue"; in this context,
+          they are synonymous.
+
+   Bug Number
+          Each Bugzilla Bug is assigned a number that uniquely identifies
+          that Bug. The Bug associated with a Bug Number can be pulled up
+          via a query, or easily from the very front page by typing the
+          number in the "Find" box.
+
+   Bug Life Cycle
+          A Bug has stages through which it must pass before becoming a
+          "closed bug", including acceptance, resolution, and
+          verification. The "Bug Life Cycle" is moderately flexible
+          according to the needs of the organization using it, though.
+
+I
+
+   Infinite Loop
+          See: Recursion
+
+P
+
+   Product
+          A Product is a broad category of types of bugs. In general,
+          there are several Components to a Product. A Product also
+          defines a default Group (used for Bug Security) for all bugs
+          entered into components beneath it.
+
+          Example 1. A Sample Product
+
+          A company sells a software product called "X". They also
+          maintain some older software called "Y", and have a secret
+          project "Z". An effective use of Products might be to create
+          Products "X", "Y", and "Z", each with Components "User
+          Interface", "Database", and "Business Logic". They might also
+          change group permissions so that only those people who are
+          members of Group "Z" can see components and bugs under Product
+          "Z".
+
+Q
+
+   Q/A
+          "Q/A" is short for "Quality Assurance". In most large software
+          development organizations, there is a team devoted to ensuring
+          the product meets minimum standards before shipping. This team
+          will also generally want to track the progress of bugs over
+          their life cycle, thus the need for the "Q/A Contact" field in
+          a Bug.
+
+R
+
+   Recursion
+          See: Infinite Loop
+
+Z
+
+   Zarro Boogs Found
+          This is the cryptic response sent by Bugzilla when a query
+          returned no results. It is just a goofy way of saying "Zero
+          Bugs Found".
diff --git a/docs/txt/CVS/Entries b/docs/txt/CVS/Entries
new file mode 100644
index 000000000..f189f5ea8
--- /dev/null
+++ b/docs/txt/CVS/Entries
@@ -0,0 +1,2 @@
+/Bugzilla-Guide.txt/1.3/Wed Apr 25 07:38:24 2001//
+D
diff --git a/docs/txt/CVS/Repository b/docs/txt/CVS/Repository
new file mode 100644
index 000000000..0b622689d
--- /dev/null
+++ b/docs/txt/CVS/Repository
@@ -0,0 +1 @@
+mozilla/webtools/bugzilla/docs/txt
diff --git a/docs/txt/CVS/Root b/docs/txt/CVS/Root
new file mode 100644
index 000000000..cdb6f4a07
--- /dev/null
+++ b/docs/txt/CVS/Root
@@ -0,0 +1 @@
+:pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot
diff --git a/doeditparams.cgi b/doeditparams.cgi
index d37bb042a..148946fef 100755
--- a/doeditparams.cgi
+++ b/doeditparams.cgi
@@ -51,7 +51,8 @@ foreach my $i (@::param_list) {
     if (exists $::FORM{"reset-$i"}) {
         $::FORM{$i} = $::param_default{$i};
     }
-    $::FORM{$i} =~ s/\r\n/\n/;     # Get rid of windows-style line endings.
+    $::FORM{$i} =~ s/\r\n/\n/g;   # Get rid of windows-style line endings.
+    $::FORM{$i} =~ s/^\n$//;      # assume single linefeed is an empty string
     if ($::FORM{$i} ne Param($i)) {
         if (defined $::param_checker{$i}) {
             my $ref = $::param_checker{$i};
@@ -64,6 +65,8 @@ foreach my $i (@::param_list) {
             }
         }
         print "Changed $i.<br>\n";
+#      print "Old: '" . url_quote(Param($i)) . "'<BR>\n";
+#      print "New: '" . url_quote($::FORM{$i}) . "'<BR>\n";
         $::param{$i} = $::FORM{$i}
     }
 }
@@ -73,7 +76,7 @@ WriteParams();
 
 unlink "data/versioncache";
 print "<PRE>";
-system("./syncshadowdb -v");
+system("./syncshadowdb", "-v");
 print "</PRE>";
 
 print "OK, done.<p>\n";
diff --git a/doeditvotes.cgi b/doeditvotes.cgi
index 3902f9118..7b830595a 100755
--- a/doeditvotes.cgi
+++ b/doeditvotes.cgi
@@ -34,8 +34,8 @@ GetVersionTable();
 
 my $who = DBNameToIdAndCheck($::COOKIE{'Bugzilla_login'});
 
-if ($who ne $::FORM{'who'}) {
-    PutHeader("Wrong login.");
+if ( (! defined $who) || (!$who) ) {
+    PutHeader("Bad login.");
     print "The login info got confused.  If you want to adjust the votes\n";
     print "for <tt>$::COOKIE{'Bugzilla_login'}</tt>, then please\n";
     print "<a href=showvotes.cgi?user=$who>click here</a>.<hr>\n";
diff --git a/duplicates.cgi b/duplicates.cgi
new file mode 100644
index 000000000..9eeff20fd
--- /dev/null
+++ b/duplicates.cgi
@@ -0,0 +1,242 @@
+#!/usr/bonsaitools/bin/perl -w
+# -*- Mode: perl; indent-tabs-mode: nil -*-
+#
+# The contents of this file are subject to the Mozilla Public
+# License Version 1.1 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS
+# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+# implied. See the License for the specific language governing
+# rights and limitations under the License.
+#
+# The Original Code is the Bugzilla Bug Tracking System.
+#
+# The Initial Developer of the Original Code is Netscape Communications
+# Corporation. Portions created by Netscape are
+# Copyright (C) 1998 Netscape Communications Corporation. All
+# Rights Reserved.
+#
+# Contributor(s): Gervase Markham <gerv@gerv.net>
+#
+# Generates mostfreq list from data collected by collectstats.pl.
+
+
+use diagnostics;
+use strict;
+use CGI "param";
+use AnyDBM_File;
+require "globals.pl";
+require "CGI.pl";
+
+ConnectToDatabase(1);
+GetVersionTable();
+
+my %dbmcount;
+my %count;
+my $dobefore = 0;
+my $before = "";
+my %before;
+
+# Get params from URL
+
+my $changedsince = 7;     # default one week
+my $maxrows = 100;        # arbitrary limit on max number of rows
+my $sortby = "dup_count"; # default to sorting by dup count
+
+if (defined(param("sortby")))
+{
+  $sortby = param("sortby");
+}
+
+# Check for changedsince param, and see if it's a positive integer
+if (defined(param("changedsince")) && param("changedsince") =~ /^\d{1,4}$/) 
+{
+  $changedsince = param("changedsince");
+}
+
+# check for max rows param, and see if it's a positive integer
+if (defined(param("maxrows")) && param("maxrows") =~ /^\d{1,4}$/)
+{
+  $maxrows = param("maxrows");
+}
+
+# Start the page
+print "Content-type: text/html\n";
+print "\n";
+PutHeader("Most Frequently Reported Bugs");
+
+# Open today's record of dupes
+my $today = &days_ago(0);
+
+if (<data/duplicates/dupes$today*>)
+{
+  dbmopen(%dbmcount, "data/duplicates/dupes$today", 0644) || 
+                            &die_politely("Can't open today's dupes file: $!");
+}
+else
+{
+  # Try yesterday's, then (in case today's hasn't been created yet)
+  $today = &days_ago(1);
+  if (<data/duplicates/dupes$today*>)
+  {
+    dbmopen(%dbmcount, "data/duplicates/dupes$today", 0644) || 
+                        &die_politely("Can't open yesterday's dupes file: $!");
+  }
+  else
+  {
+    &die_politely("There are no duplicate statistics for today or yesterday.");
+  }
+}
+
+# Copy hash (so we don't mess up the on-disk file when we remove entries)
+%count = %dbmcount;
+my $key;
+my $value;
+my $threshold = Param("mostfreqthreshold");
+
+# Remove all those dupes under the threshold (for performance reasons)
+while (($key, $value) = each %count)
+{
+  if ($value < $threshold)
+  {
+    delete $count{$key};
+  } 
+}
+
+# Try and open the database from "changedsince" days ago
+$before = &days_ago($changedsince);    
+
+if (<data/duplicates/dupes$before*>) 
+{
+  dbmopen(%before, "data/duplicates/dupes$before", 0644) && ($dobefore = 1);
+}
+
+print Param("mostfreqhtml");
+
+print "
+<table BORDER>
+<tr BGCOLOR=\"#CCCCCC\">
+
+<td><center><b>
+<a href=\"duplicates.cgi?sortby=bug_no&maxrows=$maxrows&changedsince=$changedsince\">Bug #</a>
+</b></center></td>
+<td><center><b>
+<a href=\"duplicates.cgi?sortby=dup_count&maxrows=$maxrows&changedsince=$changedsince\">Dupe<br>Count</a>
+</b></center></td>\n";
+
+my %delta;
+
+if ($dobefore) 
+{
+  print "<td><center><b>
+  <a href=\"duplicates.cgi?sortby=delta&maxrows=$maxrows&changedsince=$changedsince\">Change in
+  last<br>$changedsince day(s)</a></b></center></td>";
+
+  # Calculate the deltas if we are doing a "before"
+  foreach (keys(%count))
+  {
+    $delta{$_} = $count{$_} - $before{$_};
+  }
+}
+
+print "
+<td><center><b>Component</b></center></td>
+<td><center><b>Severity</b></center></td>
+<td><center><b>Op Sys</b></center></td>
+<td><center><b>Target<br>Milestone</b></center></td>
+<td><center><b>Summary</b></center></td>
+</tr>\n\n";
+
+# Sort, if required
+my @sortedcount;
+
+if    ($sortby eq "delta")
+{
+  @sortedcount = sort by_delta keys(%count);
+}
+elsif ($sortby eq "bug_no")
+{
+  @sortedcount = sort by_bug_no keys(%count);
+}
+elsif ($sortby eq "dup_count")
+{
+  @sortedcount = sort by_dup_count keys(%count);
+}
+
+my $i = 0;
+
+foreach (@sortedcount)
+{
+  my $id = $_;
+  SendSQL("SELECT component, bug_severity, op_sys, target_milestone, short_desc, groupset " .
+                 " FROM bugs WHERE bug_id = $id");
+  my ($component, $severity, $op_sys, $milestone, $summary, $groupset) = FetchSQLData();
+        next unless $groupset == 0;
+        $summary = html_quote($summary);
+  print "<tr>";
+  print '<td><center><A HREF="show_bug.cgi?id=' . $id . '">';
+  print $id . "</A></center></td>";
+  print "<td><center>$count{$id}</center></td>";
+  if ($dobefore) 
+  {
+    print "<td><center>$delta{$id}</center></td>";
+  }
+  print "<td>$component</td>\n    ";
+  print "<td><center>$severity</center></td>";
+  print "<td><center>$op_sys</center></td>";
+  print "<td><center>$milestone</center></td>";
+  print "<td>$summary</td>";
+  print "</tr>\n";
+  
+  $i++;
+  if ($i == $maxrows)
+  {
+    last;
+  }
+}
+
+print "</table><br><br>";
+PutFooter();
+
+
+sub by_bug_no 
+{
+  return ($a <=> $b);
+}
+
+sub by_dup_count 
+{
+  return -($count{$a} <=> $count{$b});
+}
+
+sub by_delta 
+{
+  return -($delta{$a} <=> $delta{$b});
+}
+
+sub days_ago 
+{
+  my ($dom, $mon, $year) = (localtime(time - ($_[0]*24*60*60)))[3, 4, 5];
+  return sprintf "%04d-%02d-%02d", 1900 + $year, ++$mon, $dom;
+}
+
+sub die_politely {
+  my $msg = shift;
+
+  print <<FIN;
+<p>
+<table border=1 cellpadding=10>
+<tr>
+<td align=center>
+<font color=blue>$msg</font>
+</td>
+</tr>
+</table>
+<p>
+FIN
+    
+  PutFooter();
+  exit;
+}
diff --git a/editcomponents.cgi b/editcomponents.cgi
index d9ff666c4..dcca05bba 100755
--- a/editcomponents.cgi
+++ b/editcomponents.cgi
@@ -116,7 +116,10 @@ sub CheckComponent ($$)
 
 sub EmitFormElements ($$$$$)
 {
-    my ($product, $component, $initialowner, $initialqacontact, $description) = @_;
+    my ($product, $component, $initialownerid, $initialqacontactid, $description) = @_;
+
+    my ($initialowner, $initialqacontact) = ($initialownerid ? DBID_to_name ($initialownerid) : '',
+                                             $initialqacontactid ? DBID_to_name ($initialqacontactid) : '');
 
     print "  <TH ALIGN=\"right\">Component:</TH>\n";
     print "  <TD><INPUT SIZE=64 MAXLENGTH=255 NAME=\"component\" VALUE=\"" .
@@ -263,7 +266,7 @@ unless ($product) {
 #
 
 unless ($action) {
-    PutHeader("Select component");
+    PutHeader("Select component of $product");
     CheckProduct($product);
 
     if ($dobugcounts) {
@@ -288,11 +291,16 @@ unless ($action) {
         if $dobugcounts;
     print "  <TH ALIGN=\"left\">Delete</TH>\n";
     print "</TR>";
-    while ( MoreSQLData() ) {
-        my ($component,$desc,$initialowner,$initialqacontact, $bugs) = FetchSQLData();
+    my @data;
+    while (MoreSQLData()) {
+        push @data, [FetchSQLData()];
+    }
+    foreach (@data) {
+        my ($component,$desc,$initialownerid,$initialqacontactid, $bugs) = @$_;
+
         $desc             ||= "<FONT COLOR=\"red\">missing</FONT>";
-        $initialowner     ||= "<FONT COLOR=\"red\">missing</FONT>";
-        $initialqacontact ||= "<FONT COLOR=\"red\">none</FONT>";
+        my $initialowner = $initialownerid ? DBID_to_name ($initialownerid) : "<FONT COLOR=\"red\">missing</FONT>";
+        my $initialqacontact = $initialqacontactid ? DBID_to_name ($initialqacontactid) : "<FONT COLOR=\"red\">missing</FONT>";
         print "<TR>\n";
         print "  <TD VALIGN=\"top\"><A HREF=\"editcomponents.cgi?product=", url_quote($product), "&component=", url_quote($component), "&action=edit\"><B>$component</B></A></TD>\n";
         print "  <TD VALIGN=\"top\">$desc</TD>\n";
@@ -330,7 +338,7 @@ $dobugcounts = 1;               # Stupid hack to force further PutTrailer()
 #
 
 if ($action eq 'add') {
-    PutHeader("Add component");
+    PutHeader("Add component of $product");
     CheckProduct($product);
 
     #print "This page lets you add a new product to bugzilla.\n";
@@ -338,7 +346,7 @@ if ($action eq 'add') {
     print "<FORM METHOD=POST ACTION=editcomponents.cgi>\n";
     print "<TABLE BORDER=0 CELLPADDING=4 CELLSPACING=0><TR>\n";
 
-    EmitFormElements($product, '', '', '', '');
+    EmitFormElements($product, '', 0, 0, '');
 
     print "</TR></TABLE>\n<HR>\n";
     print "<INPUT TYPE=SUBMIT VALUE=\"Add\">\n";
@@ -358,7 +366,7 @@ if ($action eq 'add') {
 #
 
 if ($action eq 'new') {
-    PutHeader("Adding new component");
+    PutHeader("Adding new component of $product");
     CheckProduct($product);
 
     # Cleanups and valididy checks
@@ -386,6 +394,10 @@ if ($action eq 'new') {
     }
 
     my $initialowner = trim($::FORM{initialowner} || '');
+	#
+	# Now validating to make sure it's too an existing account
+	#
+	DBNameToIdAndCheck($initialowner);
 
     if ($initialowner eq '') {
         print "You must enter an initial owner for the component '$component'. Please press\n";
@@ -393,11 +405,18 @@ if ($action eq 'new') {
         PutTrailer($localtrailer);
         exit;
     }
-    #+++
-    #DBNameToIdAndCheck($initialowner, 0);
 
-    my $initialqacontact = trim($::FORM{initialqacontact} || '');
+    my $initialownerid = DBname_to_id ($initialowner);
+    if (!$initialownerid) {
+        print "You must use an existing Bugzilla account as initial owner for the component
+'$component'. Please press\n";
+        print "<b>Back</b> and try again.\n";
+        PutTrailer($localtrailer);
+        exit;
+      }
 
+    my $initialqacontact = trim($::FORM{initialqacontact} || '');
+    my $initialqacontactid = DBname_to_id ($initialqacontact);
     if (Param('useqacontact')) {
         if ($initialqacontact eq '') {
             print "You must enter an initial QA contact for the component '$component'. Please press\n";
@@ -405,8 +424,17 @@ if ($action eq 'new') {
             PutTrailer($localtrailer);
             exit;
         }
-        #+++
-        #DBNameToIdAndCheck($initialqacontact, 0);
+
+        if (!$initialqacontactid) {
+            print "You must use an existing Bugzilla account as initial QA contact for the component '$component'. Please press\n";
+            print "<b>Back</b> and try again.\n";
+            PutTrailer($localtrailer);
+            exit;
+        }
+	#
+	# Now validating to make sure it's too an existing account
+	#
+	DBNameToIdAndCheck($initialqacontact);
     }
 
     # Add the new component
@@ -416,14 +444,18 @@ if ($action eq 'new') {
           SqlQuote($product) . "," .
           SqlQuote($component) . "," .
           SqlQuote($description) . "," .
-          SqlQuote($initialowner) . "," .
-          SqlQuote($initialqacontact) . ")");
+          SqlQuote($initialownerid) . "," .
+          SqlQuote($initialqacontactid) . ")");
 
     # Make versioncache flush
     unlink "data/versioncache";
 
     print "OK, done.<p>\n";
-    PutTrailer($localtrailer);
+    if ($product) {
+        PutTrailer("<A HREF=\"editcomponents.cgi?product=" . url_quote($product) . "\">edit</A> more components or <A HREF=\"editcomponents.cgi?product=". url_quote($product) . "&action=add\">Add</A> another component");
+    } else {
+        PutTrailer("<A HREF=\"editcomponents.cgi\">edit</A> more components or <A HREF=\"editcomponents.cgi?action=add\">Add</A> another component");
+    }
     exit;
 }
 
@@ -436,7 +468,7 @@ if ($action eq 'new') {
 #
 
 if ($action eq 'del') {
-    PutHeader("Delete component");
+    PutHeader("Delete component of $product");
     CheckComponent($product, $component);
 
     # display some data about the component
@@ -451,13 +483,14 @@ if ($action eq 'del') {
 
 
     my ($product,$pdesc,$milestoneurl,$disallownew,
-        $dummy,$component,$initialowner,$initialqacontact,$cdesc) = FetchSQLData();
+        $dummy,$component,$initialownerid,$initialqacontactid,$cdesc) = FetchSQLData();
+
+    my $initialowner = $initialownerid ? DBID_to_name ($initialownerid) : "<FONT COLOR=\"red\">missing</FONT>";
+    my $initialqacontact = $initialqacontactid ? DBID_to_name ($initialqacontactid) : "<FONT COLOR=\"red\">missing</FONT>";
 
     $pdesc            ||= "<FONT COLOR=\"red\">missing</FONT>";
     $milestoneurl     ||= "<FONT COLOR=\"red\">missing</FONT>";
     $disallownew        = $disallownew ? 'closed' : 'open';
-    $initialowner     ||= "<FONT COLOR=\"red\">missing</FONT>";
-    $initialqacontact ||= "<FONT COLOR=\"red\">missing</FONT>";
     $cdesc            ||= "<FONT COLOR=\"red\">missing</FONT>";
     
     print "<TABLE BORDER=1 CELLPADDING=4 CELLSPACING=0><TR BGCOLOR=\"#6666FF\">\n";
@@ -552,7 +585,7 @@ one.";
 #
 
 if ($action eq 'delete') {
-    PutHeader("Deleting component");
+    PutHeader("Deleting component of $product");
     CheckComponent($product,$component);
 
     # lock the tables before we start to change everything:
@@ -616,7 +649,7 @@ if ($action eq 'delete') {
 #
 
 if ($action eq 'edit') {
-    PutHeader("Edit component");
+    PutHeader("Edit component of $product");
     CheckComponent($product,$component);
 
     # get data of component
@@ -630,14 +663,17 @@ if ($action eq 'edit') {
                AND   value=" . SqlQuote($component) );
 
     my ($product,$pdesc,$milestoneurl,$disallownew,
-        $dummy,$component,$initialowner,$initialqacontact,$cdesc) = FetchSQLData();
+        $dummy,$component,$initialownerid,$initialqacontactid,$cdesc) = FetchSQLData();
+
+    my $initialowner = $initialownerid ? DBID_to_name ($initialownerid) : '';
+    my $initialqacontact = $initialqacontactid ? DBID_to_name ($initialqacontactid) : '';
 
     print "<FORM METHOD=POST ACTION=editcomponents.cgi>\n";
     print "<TABLE BORDER=0 CELLPADDING=4 CELLSPACING=0><TR>\n";
 
     #+++ display product/product description
 
-    EmitFormElements($product, $component, $initialowner, $initialqacontact, $cdesc);
+    EmitFormElements($product, $component, $initialownerid, $initialqacontactid, $cdesc);
 
     print "</TR><TR>\n";
     print "  <TH ALIGN=\"right\">Bugs:</TH>\n";
@@ -678,7 +714,7 @@ if ($action eq 'edit') {
 #
 
 if ($action eq 'update') {
-    PutHeader("Update component");
+    PutHeader("Update component of $product");
 
     my $componentold        = trim($::FORM{componentold}        || '');
     my $description         = trim($::FORM{description}         || '');
@@ -694,7 +730,7 @@ if ($action eq 'update') {
     # them, be sure to test for WHERE='$component' or WHERE='$componentold'
 
     SendSQL("LOCK TABLES bugs WRITE,
-                         components WRITE");
+                         components WRITE, profiles READ");
 
     if ($description ne $descriptionold) {
         unless ($description) {
@@ -714,14 +750,21 @@ if ($action eq 'update') {
     if ($initialowner ne $initialownerold) {
         unless ($initialowner) {
             print "Sorry, I can't delete the initial owner.";
-            PutTrailer($localtrailer);
 	    SendSQL("UNLOCK TABLES");
+            PutTrailer($localtrailer);
+            exit;
+        }
+
+        my $initialownerid = DBname_to_id($initialowner);
+        unless ($initialownerid) {
+            print "Sorry, you must use an existing Bugzilla account as initial owner.";
+            SendSQL("UNLOCK TABLES");
+            PutTrailer($localtrailer);
             exit;
         }
-        #+++
-        #DBNameToIdAndCheck($initialowner, 0);
+
         SendSQL("UPDATE components
-                 SET initialowner=" . SqlQuote($initialowner) . "
+                 SET initialowner=" . SqlQuote($initialownerid) . "
                  WHERE program=" . SqlQuote($product) . "
                    AND value=" . SqlQuote($componentold));
         print "Updated initial owner.<BR>\n";
@@ -730,14 +773,21 @@ if ($action eq 'update') {
     if (Param('useqacontact') && $initialqacontact ne $initialqacontactold) {
         unless ($initialqacontact) {
             print "Sorry, I can't delete the initial QA contact.";
-            PutTrailer($localtrailer);
 	    SendSQL("UNLOCK TABLES");
+            PutTrailer($localtrailer);
+            exit;
+        }
+
+        my $initialqacontactid = DBname_to_id($initialqacontact);
+        unless ($initialqacontactid) {
+            print "Sorry, you must use an existing Bugzilla account as initial QA contact.";
+            SendSQL("UNLOCK TABLES");
+            PutTrailer($localtrailer);
             exit;
         }
-        #+++
-        #DBNameToIdAndCheck($initialqacontact, 0);
+
         SendSQL("UPDATE components
-                 SET initialqacontact=" . SqlQuote($initialqacontact) . "
+                 SET initialqacontact=" . SqlQuote($initialqacontactid) . "
                  WHERE program=" . SqlQuote($product) . "
                    AND value=" . SqlQuote($componentold));
         print "Updated initial QA contact.<BR>\n";
diff --git a/editgroups.cgi b/editgroups.cgi
index 1f329d8ac..79d448c47 100755
--- a/editgroups.cgi
+++ b/editgroups.cgi
@@ -18,7 +18,7 @@
 # Copyright (C) 1998 Netscape Communications Corporation. All
 # Rights Reserved.
 #
-# Contributor(s): Dave Miller <dave@intrec.com>
+# Contributor(s): Dave Miller <justdave@syndicomm.com>
 
 # Code derived from editowners.cgi and editusers.cgi
 
@@ -69,7 +69,7 @@ sub ShowError ($)
 
 sub PutTrailer (@)
 {
-    my (@links) = ("<a href=index.html>Back to the Main Bugs Page</a>", @_);
+    my (@links) = ("<a href=\"./\">Back to the Main Bugs Page</a>", @_);
 
     my $count = $#links;
     my $num = 0;
@@ -258,7 +258,7 @@ if ($action eq 'new') {
     my @bitvals = ('1','2','4','8','16','32','64','128','256','512','1024',
                    '2048','4096','8192','16384','32768',
 
-                   '65535','131072','262144','524288','1048576','2097152',
+                   '65536','131072','262144','524288','1048576','2097152',
                    '4194304','8388608','16777216','33554432','67108864',
                    '134217728','268435456','536870912','1073741824',
                    '2147483648',
@@ -274,17 +274,17 @@ if ($action eq 'new') {
                    '18014398509481984','36028797018963968','72057594037927936',
                    '144115188075855872','288230376151711744',
                    '576460752303423488','1152921504606846976',
-                   '2305843009213693958','4611686018427387916');
+                   '2305843009213693952','4611686018427387904');
 
     # First the next available bit
     my $bit = "";
     foreach (@bitvals) {
-        if ($bit == "") {
+        if ($bit eq "") {
             SendSQL("SELECT bit FROM groups WHERE bit=" . SqlQuote($_));
             if (!FetchOneColumn()) { $bit = $_; }
         }
     }
-    if ($bit == "") {
+    if ($bit eq "") {
         ShowError("Sorry, you already have the maximum number of groups " .
                   "defined.<BR><BR>You must delete a group first before you " .
                   "can add any more.</B>");
@@ -349,11 +349,57 @@ if ($action eq 'del') {
     print "</tr>\n";
     print "</table>\n";
 
-    print "<H2>Confirmation</H2>\n";
-    print "<P>Do you really want to delete this group?<P>\n";
-
     print "<FORM METHOD=POST ACTION=editgroups.cgi>\n";
-    print "<INPUT TYPE=SUBMIT VALUE=\"Yes, delete\">\n";
+    my $cantdelete = 0;
+    SendSQL("SELECT login_name FROM profiles WHERE " .
+            "(groupset & $bit) OR (blessgroupset & $bit)");
+    if (!FetchOneColumn()) {} else {
+       $cantdelete = 1;
+       print "
+<B>One or more users belong to this group. You cannot delete this group while
+there are users in it.</B><BR>
+<A HREF=\"editusers.cgi?action=list&query=" .
+url_quote("(groupset & $bit) OR (blessgroupset & $bit)") . "\">Show me which users.</A> - <INPUT TYPE=CHECKBOX NAME=\"removeusers\">Remove all users from
+this group for me<P>
+";
+    }
+    SendSQL("SELECT bug_id FROM bugs WHERE (groupset & $bit)");
+    if (MoreSQLData()) {
+       $cantdelete = 1;
+       my $buglist = "0";
+       while (MoreSQLData()) {
+         my ($bug) = FetchSQLData();
+         $buglist .= "," . $bug;
+       }
+       print "
+<B>One or more bug reports are visible only to this group.
+You cannot delete this group while any bugs are using it.</B><BR>
+<A HREF=\"buglist.cgi?bug_id=$buglist\">Show me which bugs.</A> -
+<INPUT TYPE=CHECKBOX NAME=\"removebugs\">Remove all bugs from this group
+restriction for me<BR>
+<B>NOTE:</B> It's quite possible to make confidential bugs public by checking
+this box.  It is <B>strongly</B> suggested that you review the bugs in this
+group before checking the box.<P>
+";
+    }
+    SendSQL("SELECT product FROM products WHERE product=" . SqlQuote($name));
+    if (MoreSQLData()) {
+       $cantdelete = 1;
+       print "
+<B>This group is tied to the <U>$name</U> product.
+You cannot delete this group while it is tied to a product.</B><BR>
+<INPUT TYPE=CHECKBOX NAME=\"unbind\">Delete this group anyway, and make the
+<U>$name</U> product publicly visible.<BR>
+";
+    }
+
+    print "<H2>Confirmation</H2>\n";
+    print "<P>Do you really want to delete this group?\n";
+    if ($cantdelete) {
+      print "<BR><B>You must check all of the above boxes or correct the " .
+            "indicated problems first before you can proceed.</B>";
+    }
+    print "<P><INPUT TYPE=SUBMIT VALUE=\"Yes, delete\">\n";
     print "<INPUT TYPE=HIDDEN NAME=\"action\" VALUE=\"delete\">\n";
     print "<INPUT TYPE=HIDDEN NAME=\"group\" VALUE=\"$bit\">\n";
     print "</FORM>";
@@ -367,23 +413,88 @@ if ($action eq 'del') {
 #
 
 if ($action eq 'delete') {
-    PutHeader("Deleting user");
-    ShowError("This function has not been implemented yet! (Sorry)<br>" .
-              "Try again later");
-
-    print "
-Deleting a group is not as easy as it sounds:<p>
-<OL>
-<LI>All users have to be checked to ensure anyone who is a member of this group is first removed from membership.
-<LI>All bugs have to be checked to ensure no bugs are set to use this group.
-</OL>
-If the above is not done, conflicts may occur if a new group is created that uses a bit number that has already been used in the past.<p>
-Deleting a group will be implemented very shortly, stay tuned!
-I just figured most people would be more interested in adding and editing
-groups for the time being, so I would get that done first, so I could get this out here for people to use. :)<p>
-Watch <a href=\"http://bugzilla.mozilla.org/show_bug.cgi?id=25010\">Bug 25010</a> on Mozilla's bugzilla for details.
-<p>
-";
+    PutHeader("Deleting group");
+    my $bit = trim($::FORM{group} || '');
+    unless ($bit) {
+        ShowError("No group specified.<BR>" .
+                  "Click the <b>Back</b> button and try again.");
+        PutFooter();
+        exit;
+    }
+    SendSQL("SELECT name " .
+            "FROM groups " .
+            "WHERE bit = " . SqlQuote($bit));
+    my ($name) = FetchSQLData();
+
+    my $cantdelete = 0;
+    my $opblessgroupset = '9223372036854775807'; # This is all 64 bits.
+
+    SendSQL("SELECT userid FROM profiles " .
+            "WHERE (groupset & $opblessgroupset)=$opblessgroupset");
+    my @opusers = ();
+    while (MoreSQLData()) {
+      my ($userid) = FetchSQLData();
+      push @opusers, $userid; # cache a list of the users with admin powers
+    }
+    SendSQL("SELECT login_name FROM profiles WHERE " .
+            "(groupset & $bit)=$bit OR (blessgroupset & $bit)=$bit");
+    if (FetchOneColumn()) {
+      if (!defined $::FORM{'removeusers'}) {
+        $cantdelete = 1;
+      }
+    }
+    SendSQL("SELECT bug_id FROM bugs WHERE (groupset & $bit)=$bit");
+    if (FetchOneColumn()) {
+      if (!defined $::FORM{'removebugs'}) {
+        $cantdelete = 1;
+      }
+    }
+    SendSQL("SELECT product FROM products WHERE product=" . SqlQuote($name));
+    if (FetchOneColumn()) {
+      if (!defined $::FORM{'unbind'}) {
+        $cantdelete = 1;
+      }
+    }
+
+    if ($cantdelete == 1) {
+      ShowError("This group cannot be deleted because there are child " .
+          "records in the database which refer to it.  All child records " .
+          "must be removed or altered to remove the reference to this " .
+          "group before the group can be deleted.");
+      print "<A HREF=\"editgroups.cgi?action=del&group=$bit\">" .
+            "View the list of which records are affected</A><BR>";
+      PutTrailer("<a href=editgroups.cgi>Back to group list</a>");
+      exit;
+    }
+
+    SendSQL("SELECT login_name,groupset,blessgroupset FROM profiles WHERE " .
+            "(groupset & $bit) OR (blessgroupset & $bit)");
+    if (FetchOneColumn()) {
+      SendSQL("UPDATE profiles SET groupset=(groupset-$bit) " .
+              "WHERE (groupset & $bit)");
+      print "All users have been removed from group $bit.<BR>";
+      SendSQL("UPDATE profiles SET blessgroupset=(blessgroupset-$bit) " .
+              "WHERE (blessgroupset & $bit)");
+      print "All users with authority to add users to group $bit have " .
+            "had that authority removed.<BR>";
+    }
+    SendSQL("SELECT bug_id FROM bugs WHERE (groupset & $bit)");
+    if (FetchOneColumn()) {
+      SendSQL("UPDATE bugs SET groupset=(groupset-$bit) " .
+              "WHERE (groupset & $bit)");
+      print "All bugs have had group bit $bit cleared.  Any of these " .
+            "bugs that were not also in another group are now " .
+            "publicly visible.<BR>";
+    }
+    SendSQL("DELETE FROM groups WHERE bit=$bit");
+    print "<B>Group $bit has been deleted.</B><BR>";
+
+    foreach my $userid (@opusers) {
+      SendSQL("UPDATE profiles SET groupset=$opblessgroupset " .
+              "WHERE userid=$userid");
+      print "Group bits restored for " . DBID_to_name($userid) .
+            " (maintainer)<BR>\n";
+    }
 
     PutTrailer("<a href=editgroups.cgi>Back to group list</a>");
     exit;
diff --git a/editkeywords.cgi b/editkeywords.cgi
index da9ec1b1c..a58efb02c 100755
--- a/editkeywords.cgi
+++ b/editkeywords.cgi
@@ -249,7 +249,7 @@ if ($action eq 'new') {
     unlink "data/versioncache";
 
     print "OK, done.<p>\n";
-    PutTrailer($localtrailer);
+    PutTrailer("<A HREF=\"editkeywords.cgi\">edit</A> more keywords or <A HREF=\"editkeywords.cgi?action=add\">add</a> another keyword");
     exit;
 }
 
@@ -334,6 +334,7 @@ if ($action eq 'update') {
 
     print "Keyword updated.<BR>\n";
 
+    &RebuildCacheWarning;
     # Make versioncache flush
     unlink "data/versioncache";
 
@@ -382,6 +383,7 @@ to delete the <code>$name</code> keyword?
 
     print "Keyword $name deleted.\n";
 
+    &RebuildCacheWarning;
     # Make versioncache flush
     unlink "data/versioncache";
 
@@ -395,3 +397,15 @@ print "I don't have a clue what you want.<BR>\n";
 foreach ( sort keys %::FORM) {
     print "$_: $::FORM{$_}<BR>\n";
 }
+
+
+
+sub RebuildCacheWarning {
+
+    print "<BR><BR><B>You have deleted or modified a keyword. You must rebuild the keyword cache!<BR></B>";
+    print "You can rebuild the cache using sanitycheck.cgi. On very large installations of Bugzilla,<BR>";
+    print "This can take several minutes.<BR><BR><B><A HREF=sanitycheck.cgi?rebuildkeywordcache=1>Rebuild cache</HREF><BR></B>";
+
+}
+
+
diff --git a/editmilestones.cgi b/editmilestones.cgi
index fcd81ea09..57fe78830 100755
--- a/editmilestones.cgi
+++ b/editmilestones.cgi
@@ -212,7 +212,7 @@ unless ($product) {
 #
 
 unless ($action) {
-    PutHeader("Select milestone");
+    PutHeader("Select milestone for $product");
     CheckProduct($product);
 
     SendSQL("SELECT value,sortkey
@@ -255,7 +255,7 @@ unless ($action) {
 #
 
 if ($action eq 'add') {
-    PutHeader("Add milestone");
+    PutHeader("Add milestone for $product");
     CheckProduct($product);
 
     #print "This page lets you add a new milestone to a $::bugzilla_name tracked product.\n";
@@ -283,7 +283,7 @@ if ($action eq 'add') {
 #
 
 if ($action eq 'new') {
-    PutHeader("Adding new milestone");
+    PutHeader("Adding new milestone for $product");
     CheckProduct($product);
 
     # Cleanups and valididy checks
@@ -326,7 +326,7 @@ if ($action eq 'new') {
 #
 
 if ($action eq 'del') {
-    PutHeader("Delete milestone");
+    PutHeader("Delete milestone of $product");
     CheckMilestone($product, $milestone);
 
     SendSQL("SELECT count(bug_id),product,target_milestone
@@ -401,7 +401,7 @@ one.";
 #
 
 if ($action eq 'delete') {
-    PutHeader("Deleting milestone");
+    PutHeader("Deleting milestone of $product");
     CheckMilestone($product,$milestone);
 
     # lock the tables before we start to change everything:
@@ -466,7 +466,7 @@ if ($action eq 'delete') {
 #
 
 if ($action eq 'edit') {
-    PutHeader("Edit milestone");
+    PutHeader("Edit milestone of $product");
     CheckMilestone($product,$milestone);
 
     SendSQL("SELECT sortkey FROM milestones WHERE product=" .
@@ -502,7 +502,7 @@ if ($action eq 'edit') {
 #
 
 if ($action eq 'update') {
-    PutHeader("Update milestone");
+    PutHeader("Update milestone of $product");
 
     my $milestoneold = trim($::FORM{milestoneold} || '');
     my $sortkeyold = trim($::FORM{sortkeyold} || '0');
@@ -513,6 +513,13 @@ if ($action eq 'update') {
                          milestones WRITE,
                          products WRITE");
 
+    if ($sortkey != $sortkeyold) {
+        SendSQL("UPDATE milestones SET sortkey=$sortkey
+                 WHERE product=" . SqlQuote($product) . "
+                   AND value=" . SqlQuote($milestoneold));
+        unlink "data/versioncache";
+        print "Updated sortkey.<BR>\n";
+    }
     if ($milestone ne $milestoneold) {
         unless ($milestone) {
             print "Sorry, I can't delete the milestone text.";
@@ -541,13 +548,6 @@ if ($action eq 'update') {
         unlink "data/versioncache";
         print "Updated milestone.<BR>\n";
     }
-    if ($sortkey != $sortkeyold) {
-        SendSQL("UPDATE milestones SET sortkey=$sortkey
-                 WHERE product=" . SqlQuote($product) . "
-                   AND value=" . SqlQuote($milestoneold));
-        unlink "data/versioncache";
-        print "Updated sortkey.<BR>\n";
-    }
     SendSQL("UNLOCK TABLES");
 
     PutTrailer($localtrailer);
diff --git a/editproducts.cgi b/editproducts.cgi
index abbf8fde8..f5486f37b 100755
--- a/editproducts.cgi
+++ b/editproducts.cgi
@@ -378,18 +378,18 @@ if ($action eq 'new') {
         # one by one if they match.  Furthermore, I need to do it with two
         # separate loops, since opening a new SQL statement to do the update
         # seems to clobber the previous one.
-        SendSQL("SELECT login_name FROM profiles");
-        my @login_list = ();
-        my $this_login;
-        while($this_login = FetchOneColumn()) {
-            push @login_list, $this_login;
-        }
-        foreach $this_login (@login_list) {
-            if($this_login =~ /$userregexp/) {
-                SendSQL("UPDATE profiles " .
-                        "SET groupset = groupset | " . $bit . " " .
-                        "WHERE login_name = " . SqlQuote($this_login));
-            }
+
+        # Modified, 7/17/00, Joe Robins
+        # If the userregexp is left empty, then no users should be added to
+        # the bug group.  As is, it was adding all users, since they all
+        # matched the empty pattern.
+        # In addition, I've replaced the rigamarole I was going through to
+        # find matching users with a much simpler statement that lets the
+        # mySQL database do the work.
+        unless($userregexp eq "") {
+            SendSQL("UPDATE profiles ".
+                    "SET groupset = groupset | " . $bit . " " .
+                    "WHERE LOWER(login_name) REGEXP LOWER(" . SqlQuote($userregexp) . ")");
         }
     }
 
@@ -600,13 +600,13 @@ if ($action eq 'delete') {
             my $bugid = FetchOneColumn();
 
             my $query =
-                $::db->query("DELETE FROM attachments WHERE bug_id=$bugid")
+                $::db->do("DELETE FROM attachments WHERE bug_id=$bugid")
                 or die "$::db_errstr";
             $query =
-                $::db->query("DELETE FROM bugs_activity WHERE bug_id=$bugid")
+                $::db->do("DELETE FROM bugs_activity WHERE bug_id=$bugid")
                 or die "$::db_errstr";
             $query =
-                $::db->query("DELETE FROM dependencies WHERE blocked=$bugid")
+                $::db->do("DELETE FROM dependencies WHERE blocked=$bugid")
                 or die "$::db_errstr";
         }
         print "Attachments, bug activity and dependencies deleted.<BR>\n";
diff --git a/editusers.cgi b/editusers.cgi
index 1b5d396a7..3fe7ccb8b 100755
--- a/editusers.cgi
+++ b/editusers.cgi
@@ -19,7 +19,9 @@
 # Rights Reserved.
 #
 # Contributor(s): Holger Schurig <holgerschurig@nikocity.de>
-#
+#                 Dave Miller <justdave@syndicomm.com>
+#                 Joe Robins <jmrobins@tgix.com>
+#                 Dan Mosedale <dmose@mozilla.org>
 #
 # Direct any questions on this source code to
 #
@@ -37,6 +39,7 @@ require "globals.pl";
 sub sillyness {
     my $zz;
     $zz = $::userid;
+    $zz = $::superusergroupset;
 }
 
 my $editall;
@@ -94,10 +97,10 @@ sub EmitElement ($$)
 # Displays the form to edit a user parameters
 #
 
-sub EmitFormElements ($$$$$$$)
+sub EmitFormElements ($$$$$$$$)
 {
     my ($user, $password, $realname, $groupset, $blessgroupset,
-        $emailnotification, $disabledtext) = @_;
+        $emailnotification, $disabledtext, $newemailtech) = @_;
 
     print "  <TH ALIGN=\"right\">Login name:</TH>\n";
     EmitElement("user", $user);
@@ -109,23 +112,32 @@ sub EmitFormElements ($$$$$$$)
     if ($editall) {
         print "</TR><TR>\n";
         print "  <TH ALIGN=\"right\">Password:</TH>\n";
-        print "  <TD><INPUT SIZE=16 MAXLENGTH=16 NAME=\"password\" VALUE=\"$password\"></TD>\n";
-
+        if(Param('useLDAP')) {
+          print "  <TD><FONT COLOR=RED>This site is using LDAP for authentication!</FONT></TD>\n";
+        } else {
+          print "  <TD><INPUT TYPE=\"PASSWORD\" SIZE=16 MAXLENGTH=16 NAME=\"password\" VALUE=\"$password\"></TD>\n";
+        }
         print "</TR><TR>\n";
-        print "  <TH ALIGN=\"right\">Email notification:</TH>\n";
-        print qq{<TD><SELECT NAME="emailnotification">};
-        foreach my $i (["ExcludeSelfChanges", "All qualifying bugs except those which I change"],
-                       ["CConly", "Only those bugs which I am listed on the CC line"],
-                       ["All", "All qualifying bugs"]) {
-            my ($tag, $desc) = (@$i);
-            my $selectpart = "";
-            if ($tag eq $emailnotification) {
-                $selectpart = " SELECTED";
+
+        if (!$newemailtech) {
+            print "  <TH ALIGN=\"right\">Email notification:</TH>\n";
+            print qq{<TD><SELECT NAME="emailnotification">};
+            foreach my $i (["ExcludeSelfChanges", 
+                            "All qualifying bugs except those which I change"],
+                           ["CConly", 
+                           "Only those bugs which I am listed on the CC line"],
+                           ["All", "All qualifying bugs"]) {
+                my ($tag, $desc) = (@$i);
+                my $selectpart = "";
+                if ($tag eq $emailnotification) {
+                    $selectpart = " SELECTED";
+                }
+                print qq{<OPTION$selectpart VALUE="$tag">$desc\n};
             }
-            print qq{<OPTION$selectpart VALUE="$tag">$desc\n};
+            print "</SELECT></TD>\n";
+            print "</TR><TR>\n";
         }
-        print "</SELECT></TD>\n";
-        print "</TR><TR>\n";
+
         print "  <TH ALIGN=\"right\">Disable text:</TH>\n";
         print "  <TD ROWSPAN=2><TEXTAREA NAME=\"disabledtext\" ROWS=10 COLS=60>" .
             value_quote($disabledtext) . "</TEXTAREA>\n";
@@ -139,21 +151,54 @@ sub EmitFormElements ($$$$$$$)
     SendSQL("SELECT bit,name,description,bit & $groupset != 0, " .
             "       bit & $blessgroupset " .
             "FROM groups " .
-            "WHERE bit & $opblessgroupset != 0 " .
+            "WHERE bit & $opblessgroupset != 0 AND isbuggroup " .
             "ORDER BY name");
+    print "</TR><TR><TH VALIGN=TOP ALIGN=RIGHT>Group Access:</TH><TD><TABLE><TR>";
+    if (MoreSQLData()) {
+        if ($editall) {
+          print "<TD COLSPAN=3 ALIGN=LEFT><B>Can turn this bit on for other users</B></TD>\n";
+          print "</TR><TR>\n<TD ALIGN=CENTER><B>|</B></TD>\n";
+        }
+        print "<TD COLSPAN=2 ALIGN=LEFT><B>User is a member of these groups</B></TD>\n";
+    }
     while (MoreSQLData()) {
 	my ($bit,$name,$description,$checked,$blchecked) = FetchSQLData();
 	print "</TR><TR>\n";
-	print "  <TH ALIGN=\"right\">", ucfirst($name), ":</TH>\n";
+        if ($editall) {
+          $blchecked = ($blchecked) ? "CHECKED" : "";
+          print "<TD ALIGN=CENTER><INPUT TYPE=CHECKBOX NAME=\"blbit_$name\" $blchecked VALUE=\"$bit\"></TD>";
+        }
 	$checked = ($checked) ? "CHECKED" : "";
-	print "  <TD><INPUT TYPE=CHECKBOX NAME=\"bit_$name\" $checked VALUE=\"$bit\"> $description</TD>\n";
+	print "<TD ALIGN=CENTER><INPUT TYPE=CHECKBOX NAME=\"bit_$name\" $checked VALUE=\"$bit\"></TD>";
+	print "<TD><B>" . ucfirst($name) . "</B>: $description</TD>\n";
+    }
+    print "</TR></TABLE></TD>\n";
+
+    SendSQL("SELECT bit,name,description,bit & $groupset != 0, " .
+            "       bit & $blessgroupset " .
+            "FROM groups " .
+            "WHERE bit & $opblessgroupset != 0 AND !isbuggroup " .
+            "ORDER BY name");
+    print "</TR><TR><TH VALIGN=TOP ALIGN=RIGHT>Privileges:</TH><TD><TABLE><TR>";
+    if (MoreSQLData()) {
         if ($editall) {
-            print "</TR><TR>\n";
-            print "<TH></TH>";
-            $blchecked = ($blchecked) ? "CHECKED" : "";
-            print "<TD><INPUT TYPE=CHECKBOX NAME=\"blbit_$name\" $blchecked VALUE=\"$bit\"> Can turn this bit on for other users</TD>\n";
+          print "<TD COLSPAN=3 ALIGN=LEFT><B>Can turn this bit on for other users</B></TD>\n";
+          print "</TR><TR>\n<TD ALIGN=CENTER><B>|</B></TD>\n";
+        }
+        print "<TD COLSPAN=2 ALIGN=LEFT><B>User has these priveleges</B></TD>\n";
+    }
+    while (MoreSQLData()) {
+	my ($bit,$name,$description,$checked,$blchecked) = FetchSQLData();
+	print "</TR><TR>\n";
+        if ($editall) {
+          $blchecked = ($blchecked) ? "CHECKED" : "";
+          print "<TD ALIGN=CENTER><INPUT TYPE=CHECKBOX NAME=\"blbit_$name\" $blchecked VALUE=\"$bit\"></TD>";
         }
+	$checked = ($checked) ? "CHECKED" : "";
+	print "<TD ALIGN=CENTER><INPUT TYPE=CHECKBOX NAME=\"bit_$name\" $checked VALUE=\"$bit\"></TD>";
+	print "<TD><B>" . ucfirst($name) . "</B>: $description</TD>\n";
     }
+    print "</TR></TABLE></TD>\n";
 
 }
 
@@ -165,7 +210,7 @@ sub EmitFormElements ($$$$$$$)
 
 sub PutTrailer (@)
 {
-    my (@links) = ("Back to the <A HREF=\"index.html\">index</A>", @_);
+    my (@links) = ("Back to the <A HREF=\"./\">index</A>", @_);
 
     my $count = $#links;
     my $num = 0;
@@ -241,6 +286,7 @@ List users with login name matching:
 </SELECT>
 <BR>
 <INPUT TYPE=SUBMIT VALUE="Submit">
+</FORM>
 };
     PutTrailer();
     exit;
@@ -253,19 +299,27 @@ List users with login name matching:
 
 if ($action eq 'list') {
     PutHeader("Select user");
-    my $query = "SELECT login_name,realname,disabledtext " .
-        "FROM profiles WHERE login_name ";
-    if ($::FORM{'matchtype'} eq 'substr') {
-        $query .= "like";
-        $::FORM{'matchstr'} = '%' . $::FORM{'matchstr'} . '%';
-    } elsif ($::FORM{'matchtype'} eq 'regexp') {
-        $query .= "regexp";
-    } elsif ($::FORM{'matchtype'} eq 'notregexp') {
-        $query .= "not regexp";
+    my $query = "";
+    if (exists $::FORM{'matchtype'}) {
+      $query = "SELECT login_name,realname,disabledtext " .
+          "FROM profiles WHERE login_name ";
+      if ($::FORM{'matchtype'} eq 'substr') {
+          $query .= "like";
+          $::FORM{'matchstr'} = '%' . $::FORM{'matchstr'} . '%';
+      } elsif ($::FORM{'matchtype'} eq 'regexp') {
+          $query .= "regexp";
+      } elsif ($::FORM{'matchtype'} eq 'notregexp') {
+          $query .= "not regexp";
+      } else {
+          die "Unknown match type";
+      }
+      $query .= SqlQuote($::FORM{'matchstr'}) . " ORDER BY login_name";
+    } elsif (exists $::FORM{'query'}) {
+      $query = "SELECT login_name,realname,disabledtext " .
+          "FROM profiles WHERE " . $::FORM{'query'} . " ORDER BY login_name";
     } else {
-        die "Unknown match type";
+      die "Missing parameters";
     }
-    $query .= SqlQuote($::FORM{'matchstr'}) . " ORDER BY login_name";
 
     SendSQL($query);
     my $count = 0;
@@ -299,7 +353,7 @@ if ($action eq 'list') {
         }
 	print "</TR>";
     }
-    if ($editall) {
+    if ($editall && !Param('useLDAP')) {
         print "<TR>\n";
         my $span = $candelete ? 3 : 2;
         print qq{
@@ -333,10 +387,17 @@ if ($action eq 'add') {
         exit;
     }
 
+    if(Param('useLDAP')) {
+      print "This site is using LDAP for authentication.  To add a new user, ";
+      print "please contact the LDAP administrators.";
+      PutTrailer();
+      exit;
+    }
+
     print "<FORM METHOD=POST ACTION=editusers.cgi>\n";
     print "<TABLE BORDER=0 CELLPADDING=4 CELLSPACING=0><TR>\n";
 
-    EmitFormElements('', '', '', 0, 0, 'ExcludeSelfChanges', '');
+    EmitFormElements('', '', '', 0, 0, 'ExcludeSelfChanges', '', 1);
 
     print "</TR></TABLE>\n<HR>\n";
     print "<INPUT TYPE=SUBMIT VALUE=\"Add\">\n";
@@ -364,10 +425,18 @@ if ($action eq 'new') {
         exit;
     }
 
+    if(Param('useLDAP')) {
+      print "This site is using LDAP for authentication.  To add a new user, ";
+      print "please contact the LDAP administrators.";
+      PutTrailer();
+      exit;
+    }
+
     # Cleanups and valididy checks
     my $realname = trim($::FORM{realname} || '');
     my $password = trim($::FORM{password} || '');
     my $disabledtext = trim($::FORM{disabledtext} || '');
+    my $emailregexp = Param("emailregexp");
 
     unless ($user) {
         print "You must enter a name for the new user. Please press\n";
@@ -375,7 +444,7 @@ if ($action eq 'new') {
         PutTrailer($localtrailer);
         exit;
     }
-    unless ($user =~ /^[^\@]+\@[^\@]+$/) {
+    unless ($user =~ m/$emailregexp/) {
         print "The user name entered must be a valid e-mail address. Please press\n";
         print "<b>Back</b> and try again.\n";
         PutTrailer($localtrailer);
@@ -446,10 +515,11 @@ if ($action eq 'del') {
     CheckUser($user);
 
     # display some data about the user
-    SendSQL("SELECT realname, groupset, emailnotification, login_name
+    SendSQL("SELECT realname, groupset, emailnotification, newemailtech 
 	     FROM profiles
 	     WHERE login_name=" . SqlQuote($user));
-    my ($realname, $groupset, $emailnotification) = FetchSQLData();
+    my ($realname, $groupset, $emailnotification, $newemailtech) = 
+      FetchSQLData();
     $realname ||= "<FONT COLOR=\"red\">missing</FONT>";
     
     print "<TABLE BORDER=1 CELLPADDING=4 CELLSPACING=0>\n";
@@ -465,9 +535,11 @@ if ($action eq 'del') {
     print "  <TD VALIGN=\"top\">Real name:</TD>\n";
     print "  <TD VALIGN=\"top\">$realname</TD>\n";
 
-    print "</TR><TR>\n";
-    print "  <TD VALIGN=\"top\">E-Mail notification:</TD>\n";
-    print "  <TD VALIGN=\"top\">$emailnotification</TD>\n";
+    if ( !$newemailtech ) {
+        print "</TR><TR>\n";
+        print "  <TD VALIGN=\"top\">E-Mail notification:</TD>\n";
+        print "  <TD VALIGN=\"top\">$emailnotification</TD>\n";
+    }
 
     print "</TR><TR>\n";
     print "  <TD VALIGN=\"top\">Group set:</TD>\n";
@@ -478,7 +550,8 @@ if ($action eq 'del') {
     my $found = 0;
     while ( MoreSQLData() ) {
 	my ($bit,$name) = FetchSQLData();
-	if ($bit & $groupset) {
+        my $cmpr = $bit & $groupset;
+        if ($cmpr) {
 	    print "<br>\n" if $found;
 	    print ucfirst $name;
 	    $found = 1;
@@ -493,7 +566,7 @@ if ($action eq 'del') {
 
     SendSQL("SELECT program, value
 	     FROM components
-	     WHERE initialowner=" . SqlQuote($user));
+             WHERE initialowner=" . DBname_to_id($user));
     $found = 0;
     while (MoreSQLData()) {
 	if ($found) {
@@ -517,7 +590,7 @@ if ($action eq 'del') {
 
     SendSQL("SELECT program, value
 	     FROM components
-	     WHERE initialqacontact=" . SqlQuote($user));
+             WHERE initialqacontact=" . DBname_to_id($user));
     $found = 0;
     while (MoreSQLData()) {
 	if ($found) {
@@ -608,28 +681,31 @@ if ($action eq 'edit') {
 
     # get data of user
     SendSQL("SELECT password, realname, groupset, blessgroupset,
-                    emailnotification, disabledtext
+                    emailnotification, disabledtext, newemailtech
 	     FROM profiles
 	     WHERE login_name=" . SqlQuote($user));
     my ($password, $realname, $groupset, $blessgroupset, $emailnotification,
-        $disabledtext) = FetchSQLData();
+        $disabledtext, $newemailtech) = FetchSQLData();
 
     print "<FORM METHOD=POST ACTION=editusers.cgi>\n";
     print "<TABLE BORDER=0 CELLPADDING=4 CELLSPACING=0><TR>\n";
 
     EmitFormElements($user, $password, $realname, $groupset, $blessgroupset,
-                     $emailnotification, $disabledtext);
+                     $emailnotification, $disabledtext, $newemailtech);
     
     print "</TR></TABLE>\n";
 
     print "<INPUT TYPE=HIDDEN NAME=\"userold\" VALUE=\"$user\">\n";
-    if ($editall) {
+    if ($editall && !Param('useLDAP')) {
         print "<INPUT TYPE=HIDDEN NAME=\"passwordold\" VALUE=\"$password\">\n";
     }
     print "<INPUT TYPE=HIDDEN NAME=\"realnameold\" VALUE=\"$realname\">\n";
     print "<INPUT TYPE=HIDDEN NAME=\"groupsetold\" VALUE=\"$groupset\">\n";
     print "<INPUT TYPE=HIDDEN NAME=\"blessgroupsetold\" VALUE=\"$blessgroupset\">\n";
-    print "<INPUT TYPE=HIDDEN NAME=\"emailnotificationold\" VALUE=\"$emailnotification\">\n";
+    if (!$newemailtech) {
+        print "<INPUT TYPE=HIDDEN NAME=\"emailnotificationold\" " . 
+          "VALUE=\"$emailnotification\">\n";
+    }
     print "<INPUT TYPE=HIDDEN NAME=\"disabledtextold\" VALUE=\"" .
         value_quote($disabledtext) . "\">\n";
     print "<INPUT TYPE=HIDDEN NAME=\"action\" VALUE=\"update\">\n";
@@ -684,27 +760,33 @@ if ($action eq 'update') {
         SendSQL("SELECT groupset FROM profiles WHERE login_name=" .
                 SqlQuote($userold));
         $groupsetold = FetchOneColumn();
-        SendSQL("UPDATE profiles
-		 SET groupset = 
+        # Updated, 5/7/00, Joe Robins
+        # We don't want to change the groupset of a superuser.
+        if($groupsetold eq $::superusergroupset) {
+          print "Cannot change permissions of superuser.\n";
+        } else {
+           SendSQL("UPDATE profiles
+                    SET groupset =
                          groupset - (groupset & $opblessgroupset) + $groupset
-		 WHERE login_name=" . SqlQuote($userold));
-
-        # I'm paranoid that someone who I give the ability to bless people
-        # will start misusing it.  Let's log who blesses who (even though
-        # nothing actually uses this log right now).
-        my $fieldid = GetFieldID("groupset");
-        SendSQL("SELECT userid, groupset FROM profiles WHERE login_name=" .
-                SqlQuote($userold));
-        my $u;
-        ($u, $groupset) = (FetchSQLData());
-        if ($groupset ne $groupsetold) {
-            SendSQL("INSERT INTO profiles_activity " .
-                    "(userid,who,profiles_when,fieldid,oldvalue,newvalue) " .
-                    "VALUES " .
-                    "($u, $::userid, now(), $fieldid, " .
-                    " $groupsetold, $groupset)");
-        }
-	print "Updated permissions.\n";
+                    WHERE login_name=" . SqlQuote($userold));
+
+           # I'm paranoid that someone who I give the ability to bless people
+           # will start misusing it.  Let's log who blesses who (even though
+           # nothing actually uses this log right now).
+           my $fieldid = GetFieldID("groupset");
+           SendSQL("SELECT userid, groupset FROM profiles WHERE login_name=" .
+                   SqlQuote($userold));
+           my $u;
+           ($u, $groupset) = (FetchSQLData());
+           if ($groupset ne $groupsetold) {
+               SendSQL("INSERT INTO profiles_activity " .
+                       "(userid,who,profiles_when,fieldid,oldvalue,newvalue) " .
+                       "VALUES " .
+                       "($u, $::userid, now(), $fieldid, " .
+                       " $groupsetold, $groupset)");
+           }
+	   print "Updated permissions.\n";
+       }
     }
 
     if ($editall && $blessgroupset ne $blessgroupsetold) {
@@ -720,13 +802,14 @@ if ($action eq 'update') {
 		 WHERE login_name=" . SqlQuote($userold));
 	print "Updated email notification.<BR>\n";
     }
-
-    if ($editall && $password ne $passwordold) {
+    if(!Param('useLDAP')) {
+      if ($editall && $password ne $passwordold) {
         my $q = SqlQuote($password);
         SendSQL("UPDATE profiles
 		 SET password= $q, cryptpassword = ENCRYPT($q)
 		 WHERE login_name=" . SqlQuote($userold));
 	print "Updated password.<BR>\n";
+      }
     }
     if ($editall && $realname ne $realnameold) {
         SendSQL("UPDATE profiles
diff --git a/editversions.cgi b/editversions.cgi
index afc223bd8..0efbc070b 100755
--- a/editversions.cgi
+++ b/editversions.cgi
@@ -222,7 +222,7 @@ unless ($product) {
 #
 
 unless ($action) {
-    PutHeader("Select version");
+    PutHeader("Select version of $product");
     CheckProduct($product);
 
 =for me
@@ -277,7 +277,7 @@ unless ($action) {
 #
 
 if ($action eq 'add') {
-    PutHeader("Add version");
+    PutHeader("Add version of $product");
     CheckProduct($product);
 
     #print "This page lets you add a new version to a bugzilla-tracked product.\n";
@@ -348,7 +348,7 @@ if ($action eq 'new') {
 #
 
 if ($action eq 'del') {
-    PutHeader("Delete version");
+    PutHeader("Delete version of $product");
     CheckVersion($product, $version);
 
     SendSQL("SELECT count(bug_id),product,version
@@ -412,7 +412,7 @@ one.";
 #
 
 if ($action eq 'delete') {
-    PutHeader("Deleting version");
+    PutHeader("Deleting version of $product");
     CheckVersion($product,$version);
 
     # lock the tables before we start to change everything:
@@ -477,7 +477,7 @@ if ($action eq 'delete') {
 #
 
 if ($action eq 'edit') {
-    PutHeader("Edit version");
+    PutHeader("Edit version of $product");
     CheckVersion($product,$version);
 
     print "<FORM METHOD=POST ACTION=editversions.cgi>\n";
@@ -507,7 +507,7 @@ if ($action eq 'edit') {
 #
 
 if ($action eq 'update') {
-    PutHeader("Update version");
+    PutHeader("Update version of $product");
 
     my $versionold = trim($::FORM{versionold} || '');
 
diff --git a/enter_bug.cgi b/enter_bug.cgi
index 086372d23..10c328e1b 100755
--- a/enter_bug.cgi
+++ b/enter_bug.cgi
@@ -18,7 +18,7 @@
 # Netscape Communications Corporation. All Rights Reserved.
 # 
 # Contributor(s): Terry Weissman <terry@mozilla.org>
-#                 Dave Miller <dave@intrec.com>
+#                 Dave Miller <justdave@syndicomm.com>
 #                 Joe Robins <jmrobins@tgix.com>
 
 
@@ -208,11 +208,11 @@ sub pickos {
             /Mozilla.*\(.*;.*; SunOS.*\)/   && do {return "SunOS";};
             /Mozilla.*\(.*;.*; BSD\/OS.*\)/ && do {return "BSDI";};
             /Mozilla.*\(Win16.*\)/          && do {return "Windows 3.1";};
-            /Mozilla.*\(Win95.*\)/          && do {return "Windows 95";};
+            /Mozilla.*\(.*Win95.*\)/        && do {return "Windows 95";};
             /Mozilla.*\(Win98.*\)/          && do {return "Windows 98";};
             /Mozilla.*\(WinNT.*\)/          && do {return "Windows NT";};
-            /Mozilla.*\(Windows.*NT/        && do {return "Windows NT";};
             /Mozilla.*Windows NT 5.*\)/     && do {return "Windows 2000";};
+            /Mozilla.*\(Windows.*NT/        && do {return "Windows NT";};
         }
     }
     # default
@@ -237,7 +237,15 @@ my $platform_popup = make_popup('rep_platform', \@::legal_platform,
                                 pickplatform(), 0);
 my $opsys_popup = make_popup('op_sys', \@::legal_opsys, pickos(), 0);
 
-if (1 == @{$::components{$product}}) {
+if (0 == $::components{$product}) {
+	print "<H1>Permission Denied</H1>\n";
+	print "Sorry.  You need to have at least one component for this product\n";
+	print "in order to create a new bug.  Go to the \"Components\" link to create\n";
+	print "a new component\n";
+	print "<P>\n";
+	PutFooter();
+	exit;
+} elsif (1 == @{$::components{$product}}) {
     # Only one component; just pick it.
     $::FORM{'component'} = $::components{$product}->[0];
 }
@@ -337,7 +345,7 @@ if (Param('letsubmitterchoosepriority')) {
         value_quote($priority) . '">';
 }
 print "
-    <TD ALIGN=RIGHT><B><A HREF=\"bug_status.html#severity\">Severity</A>:</B></TD>
+    <TD ALIGN=RIGHT><B><A HREF=\"bug_status.html#severity\">Severity:</A></B></TD>
     <TD>$sev_popup</TD>
     <td></td>
     <td></td>
@@ -376,7 +384,7 @@ print "
   <TR>
     <TD ALIGN=RIGHT><B>URL:</B>
     <TD COLSPAN=5>
-      <INPUT NAME=bug_file_loc SIZE=60 value=\"" .
+      <INPUT NAME=bug_file_loc SIZE=60 value=\"http://" .
     value_quote(formvalue('bug_file_loc')) .
     "\"></TD>
   </TR>
diff --git a/globals.pl b/globals.pl
index a9925ade1..120fd7d9f 100644
--- a/globals.pl
+++ b/globals.pl
@@ -19,6 +19,7 @@
 #
 # Contributor(s): Terry Weissman <terry@mozilla.org>
 #                 Dan Mosedale <dmose@mozilla.org>
+#                 Jake <jake@acutex.net>
 
 # Contains some global variables and routines used throughout bugzilla.
 
@@ -54,14 +55,14 @@ sub globals_pl_sillyness {
 # here
 # 
 
-my $db_host = "localhost";
-my $db_name = "bugs";
-my $db_user = "bugs";
-my $db_pass = "";
+$::db_host = "localhost";
+$::db_name = "bugs";
+$::db_user = "bugs";
+$::db_pass = "";
 
 do 'localconfig';
 
-use Mysql;
+use DBI;
 
 use Date::Format;               # For time2str().
 use Date::Parse;               # For str2time().
@@ -69,7 +70,7 @@ use Date::Parse;               # For str2time().
 use RelationSet;
 
 # Contains the version string for the current running Bugzilla.
-$::param{'version'} = '2.10';
+$::param{'version'} = '2.12';
 
 $::dontchange = "--do_not_change--";
 $::chooseone = "--Choose_one:--";
@@ -77,16 +78,22 @@ $::defaultqueryname = "(Default query)";
 $::unconfirmedstate = "UNCONFIRMED";
 $::dbwritesallowed = 1;
 
+# Adding a global variable for the value of the superuser groupset.
+# Joe Robins, 7/5/00
+$::superusergroupset = "9223372036854775807";
+
 sub ConnectToDatabase {
     my ($useshadow) = (@_);
     if (!defined $::db) {
-        my $name = $db_name;
+        my $name = $::db_name;
         if ($useshadow && Param("shadowdb") && Param("queryagainstshadowdb")) {
             $name = Param("shadowdb");
             $::dbwritesallowed = 0;
         }
-	$::db = Mysql->Connect($db_host, $name, $db_user, $db_pass)
-            || die "Can't connect to database server.";
+	$::db = DBI->connect("DBI:mysql:host=$::db_host;database=$name", $::db_user, $::db_pass)
+	    || die "Bugzilla is currently broken. Please try again later. " . 
+      "If the problem persists, please contact " . Param("maintainer") .
+      ". The error you should quote is: " . $DBI::errstr;
     }
 }
 
@@ -104,7 +111,31 @@ sub SyncAnyPendingShadowChanges {
         $shadowchanges = 0;
     }
 }
-    
+
+
+# This is used to manipulate global state used by SendSQL(),
+# MoreSQLData() and FetchSQLData().  It provides a way to do another
+# SQL query without losing any as-yet-unfetched data from an existing
+# query.  Just push the current global state, do your new query and fetch
+# any data you need from it, then pop the current global state.
+# 
+@::SQLStateStack = ();
+
+sub PushGlobalSQLState() {
+    push @::SQLStateStack, $::currentquery;
+    push @::SQLStateStack, [ @::fetchahead ]; 
+}
+
+sub PopGlobalSQLState() {
+    die ("PopGlobalSQLState: stack underflow") if ( $#::SQLStateStack < 1 );
+    @::fetchahead = @{pop @::SQLStateStack};
+    $::currentquery = pop @::SQLStateStack;
+}
+
+sub SavedSQLStates() {
+    return ($#::SqlStateStack + 1) / 2;
+}
+
 
 my $dosqllog = (-e "data/sqllog") && (-w "data/sqllog");
 
@@ -113,13 +144,21 @@ sub SqlLog {
         my ($str) = (@_);
         open(SQLLOGFID, ">>data/sqllog") || die "Can't write to data/sqllog";
         if (flock(SQLLOGFID,2)) { # 2 is magic 'exclusive lock' const.
+
+            # if we're a subquery (ie there's pushed global state around)
+            # indent to indicate the level of subquery-hood
+            #
+            for (my $i = SavedSQLStates() ; $i > 0 ; $i--) {
+                print SQLLOGFID "\t";
+            }
+
             print SQLLOGFID time2str("%D %H:%M:%S $$", time()) . ": $str\n";
         }
         flock(SQLLOGFID,8);     # '8' is magic 'unlock' const.
         close SQLLOGFID;
     }
 }
-    
+
 sub SendSQL {
     my ($str, $dontshadow) = (@_);
     my $iswrite =  ($str =~ /^(INSERT|REPLACE|UPDATE|DELETE)/i);
@@ -130,8 +169,9 @@ sub SendSQL {
         $str =~ s/^LOCK TABLES/LOCK TABLES shadowlog WRITE, /i;
     }
     SqlLog($str);
-    $::currentquery = $::db->query($str)
-	|| die "$str: " . $::db->errmsg;
+    $::currentquery = $::db->prepare($str);
+    $::currentquery->execute
+	|| die "$str: " . $::db->errstr;
     SqlLog("Done");
     if (!$dontshadow && $iswrite && Param("shadowdb")) {
         my $q = SqlQuote($str);
@@ -152,7 +192,7 @@ sub MoreSQLData {
     if (defined @::fetchahead) {
 	return 1;
     }
-    if (@::fetchahead = $::currentquery->fetchrow()) {
+    if (@::fetchahead = $::currentquery->fetchrow_array) {
 	return 1;
     }
     return 0;
@@ -164,7 +204,7 @@ sub FetchSQLData {
 	undef @::fetchahead;
 	return @result;
     }
-    return $::currentquery->fetchrow();
+    return $::currentquery->fetchrow_array;
 }
 
 
@@ -411,10 +451,20 @@ sub GenerateVersionTable {
     @::legal_opsys = SplitEnumType($cols->{"op_sys,type"});
     @::legal_bug_status = SplitEnumType($cols->{"bug_status,type"});
     @::legal_resolution = SplitEnumType($cols->{"resolution,type"});
-    @::legal_resolution_no_dup = @::legal_resolution;
-    my $w = lsearch(\@::legal_resolution_no_dup, "DUPLICATE");
+
+    # 'settable_resolution' is the list of resolutions that may be set 
+    # directly by hand in the bug form. Start with the list of legal 
+    # resolutions and remove 'MOVED' and 'DUPLICATE' because setting 
+    # bugs to those resolutions requires a special process.
+    #
+    @::settable_resolution = @::legal_resolution;
+    my $w = lsearch(\@::settable_resolution, "DUPLICATE");
     if ($w >= 0) {
-        splice(@::legal_resolution_no_dup, $w, 1);
+        splice(@::settable_resolution, $w, 1);
+    }
+    my $z = lsearch(\@::settable_resolution, "MOVED");
+    if ($z >= 0) {
+        splice(@::settable_resolution, $z, 1);
     }
 
     my @list = sort { uc($a) cmp uc($b)} keys(%::versions);
@@ -438,9 +488,10 @@ sub GenerateVersionTable {
     @::legal_components = sort {uc($a) cmp uc($b)} keys(%carray);
     print FID GenerateCode('@::legal_components');
     foreach my $i('product', 'priority', 'severity', 'platform', 'opsys',
-                  'bug_status', 'resolution', 'resolution_no_dup') {
+                  'bug_status', 'resolution') {
         print FID GenerateCode('@::legal_' . $i);
     }
+    print FID GenerateCode('@::settable_resolution');
     print FID GenerateCode('%::proddesc');
     print FID GenerateCode('%::prodmaxvotes');
     print FID GenerateCode('$::anyvotesallowed');
@@ -471,8 +522,9 @@ sub GenerateVersionTable {
     SendSQL("SELECT id, name FROM keyworddefs ORDER BY name");
     while (MoreSQLData()) {
         my ($id, $name) = FetchSQLData();
-        $::keywordsbyname{$name} = $id;
         push(@::legal_keywords, $name);
+        $name = lc($name);
+        $::keywordsbyname{$name} = $id;
     }
     print FID GenerateCode('@::legal_keywords');
     print FID GenerateCode('%::keywordsbyname');
@@ -484,6 +536,14 @@ sub GenerateVersionTable {
 }
 
 
+sub GetKeywordIdFromName {
+    my ($name) = (@_);
+    $name = lc($name);
+    return $::keywordsbyname{$name};
+}
+
+
+
 
 # Returns the modification time of a file.
 
@@ -525,6 +585,9 @@ sub InsertNewUser {
     for (my $i=0 ; $i<8 ; $i++) {
         $password .= substr("abcdefghijklmnopqrstuvwxyz", int(rand(26)), 1);
     }
+    my $usenewemailtech = Param('newemailtech') & Param('newemailtechdefault');
+
+    PushGlobalSQLState();
     SendSQL("select bit, userregexp from groups where userregexp != ''");
     my $groupset = "0";
     while (MoreSQLData()) {
@@ -542,14 +605,17 @@ sub InsertNewUser {
             
     $username = SqlQuote($username);
     $realname = SqlQuote($realname);
-    SendSQL("insert into profiles (login_name, realname, password, cryptpassword, groupset) values ($username, $realname, '$password', encrypt('$password'), $groupset)");
+    SendSQL("insert into profiles (login_name, realname, password, cryptpassword, groupset, newemailtech) values ($username, $realname, '$password', encrypt('$password'), $groupset, $usenewemailtech)");
+    PopGlobalSQLState();
     return $password;
 }
 
 sub DBID_to_real_or_loginname {
     my ($id) = (@_);
+    PushGlobalSQLState();
     SendSQL("SELECT login_name,realname FROM profiles WHERE userid = $id");
     my ($l, $r) = FetchSQLData();
+    PopGlobalSQLState();
     if (!defined $r || $r eq "") {
         return $l;
     } else {
@@ -560,8 +626,10 @@ sub DBID_to_real_or_loginname {
 sub DBID_to_name {
     my ($id) = (@_);
     if (!defined $::cachedNameArray{$id}) {
+        PushGlobalSQLState();
         SendSQL("select login_name from profiles where userid = $id");
         my $r = FetchOneColumn();
+        PopGlobalSQLState();
         if (!defined $r || $r eq "") {
             $r = "__UNKNOWN__";
         }
@@ -572,8 +640,10 @@ sub DBID_to_name {
 
 sub DBname_to_id {
     my ($name) = (@_);
+    PushGlobalSQLState();
     SendSQL("select userid from profiles where login_name = @{[SqlQuote($name)]}");
     my $r = FetchOneColumn();
+    PopGlobalSQLState();
     if (!defined $r || $r eq "") {
         return 0;
     }
@@ -612,7 +682,7 @@ sub DBNameToIdAndCheck {
 sub quoteUrls {
     my ($knownattachments, $text) = (@_);
     return $text unless $text;
-
+    
     my $base = Param('urlbase');
 
     my $protocol = join '|',
@@ -649,17 +719,25 @@ sub quoteUrls {
         $things[$count++] = $item;
     }
     while ($text =~ s/\bbug(\s|%\#)*(\d+)/"##$count##"/ei) {
+        my $item = $&;
+        my $num = $2;
+        $item = GetBugLink($num, $item);
+        $things[$count++] = $item;
+    }
+    while ($text =~ s/\battachment(\s|%\#)*(\d+)/"##$count##"/ei) {
         my $item = $&;
         my $num = $2;
         $item = value_quote($item); # Not really necessary, since we know
                                     # there's no special chars in it.
-        $item = qq{<A HREF="show_bug.cgi?id=$num">$item</A>};
+        $item = qq{<A HREF="showattachment.cgi?attach_id=$num">$item</A>};
         $things[$count++] = $item;
     }
     while ($text =~ s/\*\*\* This bug has been marked as a duplicate of (\d+) \*\*\*/"##$count##"/ei) {
         my $item = $&;
         my $num = $1;
-        $item =~ s@\d+@<A HREF="show_bug.cgi?id=$num">$num</A>@;
+        my $bug_link;
+        $bug_link = GetBugLink($num, $num);
+        $item =~ s@\d+@$bug_link@;
         $things[$count++] = $item;
     }
     while ($text =~ s/Created an attachment \(id=(\d+)\)/"##$count##"/e) {
@@ -685,6 +763,49 @@ sub quoteUrls {
     return $text;
 }
 
+# This is a new subroutine written 12/20/00 for the purpose of processing a
+# link to a bug.  It can be called using "GetBugLink (<BugNumber>, <LinkText>);"
+# Where <BugNumber> is the number of the bug and <LinkText> is what apprears
+# between '<a>' and '</a>'.
+
+sub GetBugLink {
+    my ($bug_num, $link_text) = (@_);
+    my ($link_return) = "";
+
+    # TODO - Add caching capabilites... possibly use a global variable in the form
+    # of $buglink{$bug_num} that contains the text returned by this sub.  If that
+    # variable is defined, simply return it's value rather than running the SQL
+    # query.  This would cut down on the number of SQL calls when the same bug is
+    # referenced multiple times.
+    
+    # Make sure any unfetched data from a currently running query
+    # is saved off rather than overwritten
+    PushGlobalSQLState();
+    
+    # Get this bug's info from the SQL Database
+    SendSQL("select bugs.bug_status, resolution, short_desc, groupset
+             from bugs where bugs.bug_id = $bug_num");
+    my ($bug_stat, $bug_res, $bug_desc, $bug_grp) = (FetchSQLData());
+    
+    # Format the retrieved information into a link
+    if ($bug_stat eq "UNCONFIRMED") { $link_return .= "<i>" }
+    if ($bug_res ne "") { $link_return .= "<strike>" }
+    $bug_desc = value_quote($bug_desc);
+    $link_text = value_quote($link_text);
+    $link_return .= qq{<a href="show_bug.cgi?id=$bug_num" title="$bug_stat};
+    if ($bug_res ne "") {$link_return .= " $bug_res"}
+    if ($bug_grp == 0) { $link_return .= " - $bug_desc" }
+    $link_return .= qq{">$link_text</a>};
+    if ($bug_res ne "") { $link_return .= "</strike>" }
+    if ($bug_stat eq "UNCONFIRMED") { $link_return .= "</i>"}
+    
+    # Put back any query in progress
+    PopGlobalSQLState();
+
+    return $link_return; 
+
+}
+
 sub GetLongDescriptionAsText {
     my ($id, $start, $end) = (@_);
     my $result = "";
@@ -710,7 +831,7 @@ sub GetLongDescriptionAsText {
     while (MoreSQLData()) {
         my ($who, $when, $text) = (FetchSQLData());
         if ($count) {
-            $result .= "\n\n------- Additional Comments From $who  " .
+            $result .= "\n\n------- Additional Comments From $who".Param('emailsuffix')."  ".
                 time2str("%Y-%m-%d %H:%M", str2time($when)) . " -------\n";
         }
         $result .= $text;
@@ -751,6 +872,7 @@ sub GetLongDescriptionAsHTML {
     SendSQL($query);
     while (MoreSQLData()) {
         my ($who, $email, $when, $text) = (FetchSQLData());
+        $email .= Param('emailsuffix');
         if ($count) {
             $result .= "<BR><BR><I>------- Additional Comments From ";
               if ($who) {
@@ -878,7 +1000,11 @@ sub RemoveVotes {
     if (0 < @list) {
         foreach my $ref (@list) {
             my ($name, $count) = (@$ref);
-            if (open(SENDMAIL, "|/usr/lib/sendmail -t")) {
+            my $sendmailparm = '-ODeliveryMode=deferred';
+            if (Param('sendmailnow')) {
+               $sendmailparm = '';
+            }
+            if (open(SENDMAIL, "|/usr/lib/sendmail $sendmailparm -t")) {
                 my %substs;
                 $substs{"to"} = $name;
                 $substs{"bugid"} = $id;
diff --git a/importxml.pl b/importxml.pl
new file mode 100755
index 000000000..b4b27b1e0
--- /dev/null
+++ b/importxml.pl
@@ -0,0 +1,636 @@
+#!/usr/bonsaitools/bin/perl -w 
+# -*- Mode: perl; indent-tabs-mode: nil -*-
+#
+# The contents of this file are subject to the Mozilla Public
+# License Version 1.1 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS
+# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+# implied. See the License for the specific language governing
+# rights and limitations under the License.
+#
+# The Original Code is the Bugzilla Bug Tracking System.
+#
+# The Initial Developer of the Original Code is Netscape Communications
+# Corporation. Portions created by Netscape are
+# Copyright (C) 1998 Netscape Communications Corporation. All
+# Rights Reserved.
+#
+# Contributor(s): Dawn Endico <endico@mozilla.org>
+
+
+# This script reads in xml bug data from standard input and inserts 
+# a new bug into bugzilla. Everything before the beginning <?xml line
+# is removed so you can pipe in email messages.
+
+use diagnostics;
+use strict;
+
+#####################################################################
+#
+# This script is used import bugs from another installation of bugzilla.
+# Moving a bug on another system will send mail to an alias provided by
+# the administrator of the target installation (you). Set up an alias
+# similar to the one given below so this mail will be automatically 
+# run by this script and imported into your database.  Run 'newaliases'
+# after adding this alias to your aliases file. Make sure your sendmail
+# installation is configured to allow mail aliases to execute code. 
+#
+# bugzilla-import: "|/usr/bin/perl /opt/bugzilla/importxml.pl"
+#
+#####################################################################
+
+
+# figure out which path this script lives in. Set the current path to
+# this and add it to @INC so this will work when run as part of mail
+# alias by the mailer daemon
+my $path = $0;
+$path =~ s#(.*)/[^/]+#$1#;
+chdir $path;
+use lib ($path);
+
+use XML::Parser;
+use Data::Dumper;
+$Data::Dumper::Useqq = 1;
+
+require "CGI.pl";
+require "globals.pl";
+$::lockcount = 0;
+
+GetVersionTable();
+ConnectToDatabase();
+
+
+sub sillyness {
+    my $zz;
+    $zz = %::components;
+    $zz = %::versions;
+    $zz = %::keywordsbyname;
+    $zz = @::legal_bug_status;
+    $zz = @::legal_opsys;
+    $zz = @::legal_platform;
+    $zz = @::legal_priority;
+    $zz = @::legal_product;
+    $zz = @::legal_severity;
+    $zz = @::legal_resolution;
+    $zz = %::target_milestone;
+}
+
+sub UnQuoteXMLChars {
+    $_[0] =~ s/&amp;/&/g;
+    $_[0] =~ s/&lt;/</g;
+    $_[0] =~ s/&gt;/>/g;
+    $_[0] =~ s/&apos;/'/g;
+    $_[0] =~ s/&quot;/"/g;
+#    $_[0] =~ s/([\x80-\xFF])/&XmlUtf8Encode(ord($1))/ge;
+    return($_[0]);
+}
+
+sub MailMessage {
+  my $subject = shift @_;
+  my $message = shift @_;
+  my @recipients = @_;
+
+  my $to = join (", ", @recipients);
+  my $header = "To: $to\n";
+  my $from = Param("moved-from-address");
+  $from =~ s/@/\@/g;
+  $header.= "From: Bugzilla <$from>\n";
+  $header.= "Subject: $subject\n\n";
+
+  open(SENDMAIL,
+    "|/usr/lib/sendmail -ODeliveryMode=background -t") ||
+      die "Can't open sendmail";
+  print SENDMAIL $header . $message . "\n";
+  close SENDMAIL;
+
+  Log($subject . " sent to: $to");
+}
+
+
+sub Log {
+    my ($str) = (@_);
+    Lock();
+    open(FID, ">>data/maillog") || die "Can't write to data/maillog";
+    print FID time2str("%D %H:%M", time()) . ": $str\n";
+    close FID;
+    Unlock();
+}
+
+sub Lock {
+    if ($::lockcount <= 0) {
+        $::lockcount = 0;
+        if (!open(LOCKFID, ">>data/maillock")) {
+            mkdir "data", 0777;
+            chmod 0777, "data";
+            open(LOCKFID, ">>data/maillock") || die "Can't open lockfile.";
+        }
+        my $val = flock(LOCKFID,2);
+        if (!$val) { # '2' is magic 'exclusive lock' const.
+            print "Content-type: text/html\n\n";
+            print "Lock failed: $val\n";
+        }
+        chmod 0666, "data/maillock";
+    }
+    $::lockcount++;
+}
+
+sub Unlock {
+    $::lockcount--;
+    if ($::lockcount <= 0) {
+        flock(LOCKFID,8);       # '8' is magic 'unlock' const.
+        close LOCKFID;
+    }
+}
+
+
+my $xml;
+while (<>) {
+ $xml .= $_;
+}
+# remove everything in file before xml header (i.e. remove the mail header)
+$xml =~ s/^.+(<\?xml version.+)$/$1/s;
+
+my $parser = new XML::Parser(Style => 'Tree');
+my $tree = $parser->parse($xml);
+
+my $maintainer;
+if (defined $tree->[1][0]->{'maintainer'}) {
+  $maintainer= $tree->[1][0]->{'maintainer'}; 
+} else {
+  my $subject = "Bug import error: no maintainer";
+  my $message = "Cannot import these bugs because no maintainer for "; 
+  $message .=   "the exporting db is given.\n";
+  $message .=   "\n\nPlease re-open the original bug.\n";
+  $message .= "\n\n$xml";
+  my @to = (Param("maintainer"));
+  MailMessage ($subject, $message, @to);
+  exit;
+}
+
+my $exporter;
+if (defined $tree->[1][0]->{'exporter'}) {
+  $exporter = $tree->[1][0]->{'exporter'};
+} else {
+  my $subject = "Bug import error: no exporter";
+  my $message = "Cannot import these bugs because no exporter is given.\n";
+  $message .=   "\n\nPlease re-open the original bug.\n";
+  $message .= "\n\n$xml";
+  my @to = (Param("maintainer"), $maintainer);
+  MailMessage ($subject, $message, @to);
+  exit;
+}
+
+
+unless ( Param("move-enabled") ) {
+  my $subject = "Error: bug importing is disabled here";
+  my $message = "Cannot import these bugs because importing is disabled\n";
+  $message .= "at this site. For more info, contact ";
+  $message .=  Param("maintainer") . ".\n";
+  my @to = (Param("maintainer"), $maintainer, $exporter);
+  MailMessage ($subject, $message, @to);
+  exit;
+}
+
+my $exporterid = DBname_to_id($exporter);
+if ( ! $exporterid ) {
+  my $subject = "Bug import error: invalid exporter";
+  my $message = "The user <$tree->[1][0]->{'exporter'}> who tried to move\n";
+  $message .= "bugs here does not have an account in this database.\n";
+  $message .= "\n\nPlease re-open the original bug.\n";
+  $message .= "\n\n$xml";
+  my @to = (Param("maintainer"), $maintainer, $exporter);
+  MailMessage ($subject, $message, @to);
+  exit;
+}
+
+my $urlbase;
+if (defined $tree->[1][0]->{'urlbase'}) {
+  $urlbase= $tree->[1][0]->{'urlbase'}; 
+} else {
+  my $subject = "Bug import error: invalid exporting database";
+  my $message = "Cannot import these bugs because the name of the exporting db was not given.\n";
+  $message .= "\n\nPlease re-open the original bug.\n";
+  $message .= "\n\n$xml";
+  my @to = (Param("maintainer"), $maintainer, $exporter);
+  MailMessage ($subject, $message, @to);
+  exit;
+}
+  
+
+my $bugqty = ($#{@{$tree}->[1]} +1 -3) / 4;
+my $log = "Imported $bugqty bug(s) from $urlbase,\n  sent by $exporter.\n\n";
+for (my $k=1 ; $k <= $bugqty ; $k++) {
+  my $cur = $k*4;
+
+  if (defined $tree->[1][$cur][0]->{'error'}) {
+    $log .= "\nError in bug $tree->[1][$cur][4][2]\@$urlbase:";
+    $log .= " $tree->[1][$cur][0]->{'error'}\n";
+    if ($tree->[1][$cur][0]->{'error'} =~ /NotFound/) {
+      $log .= "$exporter tried to move bug $tree->[1][$cur][4][2] here";
+      $log .= " but $urlbase reports that this bug does not exist.\n"; 
+    } elsif ( $tree->[1][$cur][0]->{'error'} =~ /NotPermitted/) {
+      $log .= "$exporter tried to move bug $tree->[1][$cur][4][2] here";
+      $log .= " but $urlbase reports that $exporter does not have access";
+      $log .= " to that bug.\n";
+    }
+    next;
+  }
+
+  my %multiple_fields;
+  foreach my $field (qw (dependson cc long_desc blocks)) {
+    $multiple_fields{$field} = "x"; 
+  }
+  my %all_fields;
+  foreach my $field (qw (dependson product bug_status priority cc version 
+      bug_id rep_platform short_desc assigned_to bug_file_loc resolution
+      delta_ts component reporter urlbase target_milestone bug_severity 
+      creation_ts qa_contact keywords status_whiteboard op_sys blocks)) {
+    $all_fields{$field} = "x"; 
+  }
+ 
+ 
+  my %bug_fields;
+  my $err = "";
+  for (my $i=3 ; $i < $#{@{$tree}->[1][$cur]} ; $i=$i+4) {
+    if (defined $multiple_fields{$tree->[1][$cur][$i]}) {
+      if (defined $bug_fields{$tree->[1][$cur][$i]}) {
+        $bug_fields{$tree->[1][$cur][$i]} .= " " .  $tree->[1][$cur][$i+1][2];
+      } else {
+        $bug_fields{$tree->[1][$cur][$i]} = $tree->[1][$cur][$i+1][2];
+      }
+    } elsif (defined $all_fields{$tree->[1][$cur][$i]}) {
+      $bug_fields{$tree->[1][$cur][$i]} = $tree->[1][$cur][$i+1][2];
+    } else {
+      $err .= "---\n";
+      $err .= "Unknown bug field \"$tree->[1][$cur][$i]\"";
+      $err .= " encountered while moving bug\n";
+      $err .= "<$tree->[1][$cur][$i]>";
+      if (defined $tree->[1][$cur][$i+1][3]) {
+        $err .= "\n";
+        for (my $j=3 ; $j < $#{@{$tree}->[1][$cur][$i+1]} ; $j=$j+4) {
+          $err .= "  <". $tree->[1][$cur][$i+1][$j] . ">";
+          $err .= " $tree->[1][$cur][$i+1][$j+1][2] ";
+          $err .= "</". $tree->[1][$cur][$i+1][$j] . ">\n";
+        }
+      } else {
+        $err .= " $tree->[1][$cur][$i+1][2] ";
+      }
+      $err .= "</$tree->[1][$cur][$i]>\n";
+    }
+  }
+
+  my @long_descs;
+  for (my $i=3 ; $i < $#{@{$tree}->[1][$cur]} ; $i=$i+4) {
+    if ($tree->[1][$cur][$i] =~ /long_desc/) {
+      my %long_desc;
+      $long_desc{'who'} = $tree->[1][$cur][$i+1][4][2];
+      $long_desc{'bug_when'} = $tree->[1][$cur][$i+1][8][2];
+      $long_desc{'thetext'} = $tree->[1][$cur][$i+1][12][2];
+      push @long_descs, \%long_desc;
+    }
+  }
+
+  # instead of giving each comment its own item in the longdescs
+  # table like it should have, lets cat them all into one big
+  # comment otherwise we would have to lie often about who
+  # authored the comment since commenters in one bugzilla probably
+  # don't have accounts in the other one.
+  sub by_date {my @a; my @b; $a->{'bug_when'} cmp $b->{'bug_when'}; }
+  my @sorted_descs = sort by_date @long_descs;
+  my $long_description = "";
+  for (my $z=0 ; $z <= $#sorted_descs ; $z++) {
+    unless ( $z==0 ) {
+      $long_description .= "\n\n\n------- Additional Comments From ";
+      $long_description .= "$sorted_descs[$z]->{'who'} "; 
+      $long_description .= "$sorted_descs[$z]->{'bug_when'}"; 
+      $long_description .= " ----\n\n";
+    }
+    $long_description .=  UnQuoteXMLChars($sorted_descs[$z]->{'thetext'});
+    $long_description .=  "\n";
+  }
+
+  my $comments;
+
+  $comments .= "\n\n------- Bug moved to this database by $exporter "; 
+  $comments .= time2str("%Y-%m-%d %H:%M", time);
+  $comments .= " -------\n\n";
+  $comments .= "This bug previously known as bug $bug_fields{'bug_id'} at ";
+  $comments .= $urlbase . "\n";
+  $comments .= $urlbase . "show_bug.cgi?";
+  $comments .= "id=" . $bug_fields{'bug_id'} . "\n";
+  $comments .= "Originally filed under the $bug_fields{'product'} ";
+  $comments .= "product and $bug_fields{'component'} component.\n";
+  if (defined $bug_fields{'dependson'}) {
+    $comments .= "Bug depends on bug(s) $bug_fields{'dependson'}.\n";
+  }
+  if (defined $bug_fields{'blocks'}) {
+  $comments .= "Bug blocks bug(s) $bug_fields{'blocks'}.\n";
+  }
+
+  my @query = ();
+  my @values = ();
+  foreach my $field ( qw(creation_ts delta_ts status_whiteboard) ) {
+      if ( (defined $bug_fields{$field}) && ($bug_fields{$field}) ){
+        push (@query, "$field");
+        push (@values, SqlQuote($bug_fields{$field}));
+      }
+  }
+
+  if ( (defined $bug_fields{'bug_file_loc'}) && ($bug_fields{'bug_file_loc'}) ){
+      push (@query, "bug_file_loc");
+      push (@values, SqlQuote(UnQuoteXMLChars($bug_fields{'bug_file_loc'})));
+      }
+
+  if ( (defined $bug_fields{'short_desc'}) && ($bug_fields{'short_desc'}) ){
+      push (@query, "short_desc");
+      push (@values, SqlQuote(UnQuoteXMLChars($bug_fields{'short_desc'})) );
+      }
+
+
+  my $prod;
+  my $comp;
+  my $default_prod = Param("moved-default-product");
+  my $default_comp = Param("moved-default-component");
+  if ( (defined ($bug_fields{'product'})) &&
+       (defined ($bug_fields{'component'})) ) {
+     $prod = $bug_fields{'product'};
+     $comp = $bug_fields{'component'};
+  } else {
+     $prod = $default_prod;
+     $comp = $default_comp;
+  }
+
+  my @product;
+  my @component;
+  if ((@product = grep /^$prod$/i, @::legal_product) &&
+      (@component = grep /^$comp$/i, @{$::components{$product[0]}}) ) {
+    push (@query, "product");
+    push (@values, SqlQuote($product[0]) );
+    push (@query, "component");
+    push (@values, SqlQuote($component[0]) );
+  } elsif ((@product = grep /^$default_prod$/i, @::legal_product) &&
+      (@component = grep /^$default_comp$/i, @{$::components{$product[0]}}) ) {
+    push (@query, "product");
+    push (@values, SqlQuote($product[0]) );
+    push (@query, "component");
+    push (@values, SqlQuote($component[0]) );
+  } else {
+    my $subject = "Bug import error: invalid default product or component";
+    my $message = "Cannot import these bugs because an invalid default ";
+    $message .= "product and/or component was defined for the target db.\n";
+    $message .= Param("maintainer") . " needs to fix the definitions of ";
+    $message .= "moved-default-product and moved-default-component.\n";
+    $message .= "\n\nPlease re-open the original bug.\n";
+    $message .= "\n\n$xml";
+    my @to = (Param("maintainer"), $maintainer, $exporter);
+    MailMessage ($subject, $message, @to);
+    exit;
+  }
+
+  if (defined  ($::versions{$product[0]} ) &&
+     (my @version = grep /^$bug_fields{'version'}$/i, 
+                         @{$::versions{$product[0]}}) ){
+    push (@values, SqlQuote($version[0]) );
+    push (@query, "version");
+  } else {
+    push (@query, "version");
+    push (@values, SqlQuote(@{$::versions{$product[0]}}->[0]));
+    $err .= "Unknown version $bug_fields{'version'} in product $product[0]. ";
+    $err .= "Setting version to \"@{$::versions{$product[0]}}->[0]\".\n";
+  }
+
+  if (defined ($bug_fields{'priority'}) &&
+       (my @priority = grep /^$bug_fields{'priority'}$/i, @::legal_priority) ){
+    push (@values, SqlQuote($priority[0]) );
+    push (@query, "priority");
+  } else {
+    push (@values, SqlQuote("P3"));
+    push (@query, "priority");
+    $err .= "Unknown priority ";
+    $err .= (defined $bug_fields{'priority'})?$bug_fields{'priority'}:"unknown";
+    $err .= ". Setting to default priority \"P3\".\n";
+  }
+
+  if (defined ($bug_fields{'rep_platform'}) &&
+       (my @platform = grep /^$bug_fields{'rep_platform'}$/i, @::legal_platform) ){
+    push (@values, SqlQuote($platform[0]) );
+    push (@query, "rep_platform");
+  } else {
+    push (@values, SqlQuote("Other") );
+    push (@query, "rep_platform");
+    $err .= "Unknown platform ";
+    $err .= (defined $bug_fields{'rep_platform'})?
+                     $bug_fields{'rep_platform'}:"unknown";
+    $err .= ". Setting to default platform \"Other\".\n";
+  }
+
+  if (defined ($bug_fields{'op_sys'}) &&
+     (my @opsys = grep /^$bug_fields{'op_sys'}$/i, @::legal_opsys) ){
+    push (@values, SqlQuote($opsys[0]) );
+    push (@query, "op_sys");
+  } else {
+    push (@values, SqlQuote("other"));
+    push (@query, "op_sys");
+    $err .= "Unknown operating system ";
+    $err .= (defined $bug_fields{'op_sys'})?$bug_fields{'op_sys'}:"unknown";
+    $err .= ". Setting to default OS \"other\".\n";
+  }
+
+  if (Param("usetargetmilestone")) {
+    if (defined  ($::target_milestone{$product[0]} ) &&
+       (my @tm = grep /^$bug_fields{'target_milestone'}$/i, 
+                       @{$::target_milestone{$product[0]}}) ){
+      push (@values, SqlQuote($tm[0]) );
+      push (@query, "target_milestone");
+    } else {
+      SendSQL("SELECT defaultmilestone FROM products " .
+              "WHERE product = " . SqlQuote($product[0]));
+      my $tm = FetchOneColumn();
+      push (@values, SqlQuote($tm));
+      push (@query, "target_milestone");
+      $err .= "Unknown milestone \"";
+      $err .= (defined $bug_fields{'target_milestone'})?
+              $bug_fields{'target_milestone'}:"unknown";
+      $err .= "\" in product \"$product[0]\".\n";
+      $err .= "   Setting to default milestone for this product, ";
+      $err .= "\'" . $tm . "\'\n";
+    }
+  }
+
+  if (defined ($bug_fields{'bug_severity'}) &&
+       (my @severity= grep /^$bug_fields{'bug_severity'}$/i, 
+                           @::legal_severity) ){
+    push (@values, SqlQuote($severity[0]) );
+    push (@query, "bug_severity");
+  } else {
+    push (@values, SqlQuote("normal"));
+    push (@query, "bug_severity");
+    $err .= "Unknown severity ";
+    $err .= (defined $bug_fields{'bug_severity'})?
+                     $bug_fields{'bug_severity'}:"unknown";
+    $err .= ". Setting to default severity \"normal\".\n";
+  }
+
+  my $reporterid = DBname_to_id($bug_fields{'reporter'});
+  if ( ($bug_fields{'reporter'}) && ( $reporterid ) ) {
+    push (@values, SqlQuote($reporterid));
+    push (@query, "reporter");
+  } else {
+    push (@values, SqlQuote($exporterid));
+    push (@query, "reporter");
+    $err .= "The original reporter of this bug does not have\n";
+    $err .= "   an account here. Reassigning to the person who moved\n";
+    $err .= "   it here, $exporter.\n";
+    if ( $bug_fields{'reporter'} ) {
+      $err .= "   Previous reporter was $bug_fields{'reporter'}.\n";
+    } else {
+      $err .= "   Previous reporter is unknown.\n";
+    }
+  }
+
+  my $changed_owner = 0;
+  if ( ($bug_fields{'assigned_to'}) && 
+       ( DBname_to_id($bug_fields{'assigned_to'})) ) {
+    push (@values, SqlQuote(DBname_to_id($bug_fields{'assigned_to'})));
+    push (@query, "assigned_to");
+  } else {
+    push (@values, SqlQuote($exporterid) );
+    push (@query, "assigned_to");
+    $changed_owner = 1;
+    $err .= "The original owner of this bug does not have\n";
+    $err .= "   an account here. Reassigning to the person who moved\n";
+    $err .= "   it here, $exporter.\n";
+    if ( $bug_fields{'assigned_to'} ) {
+      $err .= "   Previous owner was $bug_fields{'assigned_to'}.\n";
+    } else {
+      $err .= "   Previous owner is unknown.\n";
+    }
+  }
+
+  my @resolution;
+  if (defined ($bug_fields{'resolution'}) &&
+       (@resolution= grep /^$bug_fields{'resolution'}$/i, @::legal_resolution) ){
+    push (@values, SqlQuote($resolution[0]) );
+    push (@query, "resolution");
+  } elsif ( (defined $bug_fields{'resolution'}) && (!$resolution[0]) ){
+    $err .= "Unknown resolution \"$bug_fields{'resolution'}\".\n";
+  }
+
+  # if the bug's owner changed, mark the bug NEW, unless a valid 
+  # resolution is set, which indicates that the bug should be closed.
+  #
+  if ( ($changed_owner) && (!$resolution[0]) ) {
+    push (@values, SqlQuote("NEW"));
+    push (@query, "bug_status");
+    $err .= "Bug assigned to new owner, setting status to \"NEW\".\n";
+    $err .= "   Previous status was \"";
+    $err .= (defined $bug_fields{'bug_status'})?
+                     $bug_fields{'bug_status'}:"unknown";
+    $err .= "\".\n";
+  } elsif ( (defined ($bug_fields{'resolution'})) && (!$resolution[0]) ){
+    #if the resolution was illegal then set status to NEW
+    push (@values, SqlQuote("NEW"));
+    push (@query, "bug_status");
+    $err .= "Resolution was invalid. Setting status to \"NEW\".\n";
+    $err .= "   Previous status was \"";
+    $err .= (defined $bug_fields{'bug_status'})?
+                     $bug_fields{'bug_status'}:"unknown";
+    $err .= "\".\n";
+  } elsif (defined ($bug_fields{'bug_status'}) &&
+       (my @status = grep /^$bug_fields{'bug_status'}$/i, @::legal_bug_status) ){
+    #if a bug status was set then use it, if its legal
+    push (@values, SqlQuote($status[0]));
+    push (@query, "bug_status");
+  } else {
+    # if all else fails, make the bug new
+    push (@values, SqlQuote("NEW"));
+    push (@query, "bug_status");
+    $err .= "Unknown status ";
+    $err .= (defined $bug_fields{'bug_status'})?
+                     $bug_fields{'bug_status'}:"unknown";
+    $err .= ". Setting to default status \"NEW\".\n";
+  }
+
+  if (Param("useqacontact")) {
+    my $qa_contact;
+    if ( (defined $bug_fields{'qa_contact'}) &&
+         ($qa_contact  = DBname_to_id($bug_fields{'qa_contact'})) ){
+      push (@values, SqlQuote($qa_contact));
+      push (@query, "qa_contact");
+    } else {
+      SendSQL("select initialqacontact from components where program=" .
+              SqlQuote($product[0]) .
+              " and value=" . SqlQuote($component[0]) );
+      $qa_contact = FetchOneColumn();
+      push (@values, SqlQuote(DBname_to_id($qa_contact)) );
+      push (@query, "qa_contact");
+      $err .= "Setting qa contact to the default for this product.\n";
+      $err .= "   This bug either had no qa contact or an invalid one.\n";
+    }
+  }
+
+
+  my $query  = "INSERT INTO bugs (\n" 
+               . join (",\n", @query)
+               . "\n) VALUES (\n"
+               . join (",\n", @values)
+               . "\n)\n";
+  SendSQL($query);
+  SendSQL("select LAST_INSERT_ID()");
+  my $id = FetchOneColumn();
+
+  if (defined $bug_fields{'cc'}) {
+    foreach my $person (split(/[ ,]/, $bug_fields{'cc'})) {
+      my $uid;
+      if ( ($person ne "") && ($uid = DBname_to_id($person)) ) {
+        SendSQL("insert into cc (bug_id, who) values ($id, " . SqlQuote($uid) .")");
+      }
+    }
+  }
+
+  if (defined ($bug_fields{'keywords'})) {
+    my %keywordseen;
+    foreach my $keyword (split(/[\s,]+/, $bug_fields{'keywords'})) {
+      if ($keyword eq '') {
+        next;
+      }
+      my $i = $::keywordsbyname{$keyword};
+      if (!$i) {
+        $err .= "Skipping unknown keyword: $keyword.\n";
+        next;
+      }
+      if (!$keywordseen{$i}) {
+        SendSQL("INSERT INTO keywords (bug_id, keywordid) VALUES ($id, $i)");
+        $keywordseen{$i} = 1;
+      }
+    }
+  }
+
+  $long_description .= "\n" . $comments;
+  if ($err) {
+    $long_description .= "\n$err\n";
+  }
+
+  SendSQL("INSERT INTO longdescs (bug_id, who, bug_when, thetext) VALUES " .
+    "($id, $exporterid, now(), " . SqlQuote($long_description) . ")");
+
+  $log .= "Bug $urlbase/show_bug.cgi?id=$bug_fields{'bug_id'} ";
+  $log .= "imported as bug $id.\n";
+  $log .= Param("urlbase") . "/show_bug.cgi?id=$id\n\n";
+  if ($err) {
+    $log .= "The following problems were encountered creating bug $id.\n";
+    $log .= "You may have to set certain fields in the new bug by hand.\n\n";
+    $log .= $err;
+    $log .= "\n\n\n";
+  }
+
+  system("./processmail", $id, $exporter);
+}
+
+my $subject = "$bugqty bug(s) successfully moved from $urlbase to " 
+               . Param("urlbase") ;
+my @to = ($exporter);
+MailMessage ($subject, $log, @to);
diff --git a/index.html b/index.html
index 566a1053b..3a1a76ff6 100644
--- a/index.html
+++ b/index.html
@@ -76,11 +76,23 @@ But it all boils down to a choice of:
 <a href="createaccount.cgi">Open a new Bugzilla account</a><br>
 <a href="relogin.cgi">Forget the currently stored login</a><br>
 <a href="userprefs.cgi">Change password or user preferences</a><br>
-<FORM METHOD=GET ACTION="show_bug.cgi">
-<INPUT TYPE=SUBMIT VALUE="Find"> bug # <INPUT NAME=id SIZE=6></FORM>
-<SCRIPT LANGUAGE="JavaScript">
-document.forms[0].id.focus()
-</SCRIPT>
+<p>
+<script language="JavaScript" src="localconfig.js"></script>
+<script language="JavaScript" src="quicksearch.js"></script>
+
+<form name="f" action="show_bug.cgi" method="get"
+      onsubmit="QuickSearch(); return false;"> 
+  Enter a bug # or some search terms:<br>
+  <input type="text" name="id">
+  <input type="submit" value="Show">
+  <a href="quicksearch.html">[Help]</a>
+</form>
+
+<script>
+<!--
+document.forms['f'].id.focus();
+//-->
+</script>
 
 </BODY>
 </HTML>
diff --git a/localconfig.js b/localconfig.js
new file mode 100644
index 000000000..7cb01eb74
--- /dev/null
+++ b/localconfig.js
@@ -0,0 +1,75 @@
+//
+// This file contains the installation specific values for QuickSearch.
+// See quicksearch.js for more details.
+//
+
+// the global bugzilla url
+
+var bugzilla = "";
+//var bugzilla = "http://bugzilla.mozilla.org/";
+
+// Status and Resolution
+// =====================
+
+var statuses_open     = new Array("UNCONFIRMED","NEW","ASSIGNED","REOPENED");
+var statuses_resolved = new Array("RESOLVED","VERIFIED","CLOSED");
+var resolutions       = new Array("FIXED","INVALID","WONTFIX","LATER",
+                                  "REMIND","DUPLICATE","WORKSFORME","MOVED");
+
+// Keywords
+// ========
+//
+// Enumerate all your keywords here. This is necessary to avoid 
+// "foo is not a legal keyword" errors. This makes it possible
+// to include the keywords field in the search by default.
+
+var keywords = new Array(
+// "foo", "bar", "baz"
+);
+
+// Platforms
+// =========
+//
+// A list of words <w> (substrings of platform values) 
+// that will automatically be translated to "platform:<w>" 
+// E.g. if "mac" is defined as a platform, then searching 
+// for it will find all bugs with platform="Macintosh", 
+// but no other bugs with e.g. "mac" in the summary.
+
+var platforms = new Array(
+"pc","sun","macintosh","mac" //shortcut added
+//,"dec","hp","sgi" 
+//,"all"   //this is a legal value for OpSys, too :(
+//,"other" 
+);
+
+// Severities
+// ==========
+//
+// A list of words <w> (substrings of severity values)
+// that will automatically be translated to "severity:<w>"
+// E.g with this default set of severities, searching for
+// "blo,cri,maj" will find all severe bugs.
+
+var severities = new Array("blo","cri","maj","nor","min","tri","enh");
+
+// Products and Components
+// =======================
+//
+// It is not necessary to list all products and components here.
+// Instead, you can define a "blacklist" for some commonly used 
+// words or word fragments that occur in a product or component name
+// but should _not_ trigger product/component search.
+
+var product_exceptions = new Array(
+"row"   // [Browser]
+        //   ^^^
+,"new"  // [MailNews]
+        //      ^^^
+);
+
+var component_exceptions = new Array(
+"hang"  // [mozilla.org] Bugzilla: Component/Keyword Changes
+        //                                            ^^^^
+);
+
diff --git a/long_list.cgi b/long_list.cgi
index e095c59ec..5623a4e12 100755
--- a/long_list.cgi
+++ b/long_list.cgi
@@ -36,7 +36,10 @@ sub sillyness {
     $zz = %::FORM;
 }
 
-print "Content-type: text/html\n\n";
+print "Content-type: text/html\n";
+#Changing attachment to inline to resolve 46897
+#zach@zachlipton.com
+print "Content-disposition: inline; filename=bugzilla_bug_list.html\n\n";
 PutHeader ("Full Text Bug Listing");
 
 ConnectToDatabase();
diff --git a/move.pl b/move.pl
new file mode 100755
index 000000000..aed6649a4
--- /dev/null
+++ b/move.pl
@@ -0,0 +1,156 @@
+#!/usr/bonsaitools/bin/perl -w
+# -*- Mode: perl; indent-tabs-mode: nil -*-
+#
+# The contents of this file are subject to the Mozilla Public
+# License Version 1.1 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS
+# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+# implied. See the License for the specific language governing
+# rights and limitations under the License.
+#
+# The Original Code is the Bugzilla Bug Tracking System.
+#
+# The Initial Developer of the Original Code is Netscape Communications
+# Corporation. Portions created by Netscape are
+# Copyright (C) 1998 Netscape Communications Corporation. All
+# Rights Reserved.
+#
+# Contributor(s): Dawn Endico    <endico@mozilla.org>
+#                 Terry Weissman <terry@mozilla.org>
+
+use diagnostics;
+use strict;
+use Bug;
+require "CGI.pl";
+$::lockcount = 0;
+
+unless ( Param("move-enabled") ) {
+  print "\n<P>Sorry. Bug moving is not enabled here. ";
+  print "If you need to move a bug, contact " . Param("maintainer");
+  exit;
+}
+
+ConnectToDatabase();
+
+sub Log {
+    my ($str) = (@_);
+    Lock();
+    open(FID, ">>data/maillog") || die "Can't write to data/maillog";
+    print FID time2str("%D %H:%M", time()) . ": $str\n";
+    close FID;
+    Unlock();
+}
+
+sub Lock {
+    if ($::lockcount <= 0) {
+        $::lockcount = 0;
+        if (!open(LOCKFID, ">>data/maillock")) {
+            mkdir "data", 0777;
+            chmod 0777, "data";
+            open(LOCKFID, ">>data/maillock") || die "Can't open lockfile.";
+        }
+        my $val = flock(LOCKFID,2);
+        if (!$val) { # '2' is magic 'exclusive lock' const.
+            print "Content-type: text/html\n\n";
+            print "Lock failed: $val\n";
+        }
+        chmod 0666, "data/maillock";
+    }
+    $::lockcount++;
+}
+
+sub Unlock {
+    $::lockcount--;
+    if ($::lockcount <= 0) {
+        flock(LOCKFID,8);       # '8' is magic 'unlock' const.
+        close LOCKFID;
+    }
+}
+
+if ( !defined $::FORM{'buglist'} ) {
+  print "Content-type: text/html\n\n";
+  PutHeader("Move Bugs");
+  print "Move bugs either from the bug display page or perform a ";
+  print "<A HREF=\"query.cgi\">query</A> and change several bugs at once.\n";
+  print "If you don't see the move button, then you either aren't ";
+  print "logged in or aren't permitted to.";
+  PutFooter();
+  exit;
+}
+
+confirm_login();
+my $exporter = $::COOKIE{"Bugzilla_login"};
+my $movers = Param("movers");
+$movers =~ s/\w?,\w?/|/g;
+$movers =~ s/@/\@/g;
+unless ($exporter =~ /($movers)/) {
+  print "Content-type: text/html\n\n";
+  PutHeader("Move Bugs");
+  print "<P>You do not have permission to move bugs<P>\n";
+  PutFooter();
+  exit;
+}
+
+my $xml = "";
+$xml .= Bug::XML_Header( Param("urlbase"), $::param{'version'}, 
+                         Param("maintainer"), $exporter );
+print "<P>\n";
+foreach my $id (split(/:/, $::FORM{'buglist'})) {
+  my $bug = new Bug($id, $::userid);
+  $xml .= $bug->emitXML;
+  if (!$bug->error) {
+    my $exporterid = DBNameToIdAndCheck($exporter);
+
+    my $fieldid = GetFieldID("bug_status");
+    my $cur_status= $bug->bug_status;
+    SendSQL("INSERT INTO bugs_activity " .
+            "(bug_id,who,bug_when,fieldid,oldvalue,newvalue) VALUES " .
+            "($id,$exporterid,now(),$fieldid,'$cur_status','RESOLVED')");
+    my $fieldid = GetFieldID("resolution");
+    my $cur_res= $bug->resolution;
+    SendSQL("INSERT INTO bugs_activity " .
+            "(bug_id,who,bug_when,fieldid,oldvalue,newvalue) VALUES " .
+            "($id,$exporterid,now(),$fieldid,'$cur_res','MOVED')");
+
+    SendSQL("UPDATE bugs SET bug_status =\"RESOLVED\" where bug_id=\"$id\"");
+    SendSQL("UPDATE bugs SET resolution =\"MOVED\" where bug_id=\"$id\"");
+
+    my $comment = "Bug moved to " . Param("move-to-url") . ".\n\n";
+    $comment .= "If the move succeeded, $exporter will recieve a mail\n";
+    $comment .= "containing the number of the new bug in the other database.\n";
+    $comment .= "If all went well,  please mark this bug verified, and paste\n";
+    $comment .= "in a link to the new bug. Otherwise, reopen this bug.\n";
+    SendSQL("INSERT INTO longdescs (bug_id, who, bug_when, thetext) VALUES " .
+        "($id,  $exporterid, now(), " . SqlQuote($comment) . ")");
+
+    print "<P>Bug $id moved to " . Param("move-to-url") . ".<BR>\n";
+    system("./processmail", $id, $exporter);
+  }
+}
+print "<P>\n";
+$xml .= Bug::XML_Footer;
+
+my $buglist = $::FORM{'buglist'};
+$buglist =~ s/:/,/g;
+my $host = Param("urlbase");
+$host =~ s#http://([^/]+)/.*#$1#;
+my $to = Param("move-to-address");
+$to =~ s/@/\@/;
+my $msg = "To: $to\n";
+my $from = Param("moved-from-address");
+$from =~ s/@/\@/;
+$msg .= "From: Bugzilla <" . $from . ">\n";
+$msg .= "Subject: Moving bug(s) $buglist\n\n";
+$msg .= $xml . "\n";
+
+open(SENDMAIL,
+  "|/usr/lib/sendmail -ODeliveryMode=background -t") ||
+    die "Can't open sendmail";
+print SENDMAIL $msg;
+close SENDMAIL;
+
+my $logstr = "XML: bugs $buglist sent to $to";
+Log($logstr);
diff --git a/new_comment.cgi b/new_comment.cgi
index e034f3587..d504c0597 100755
--- a/new_comment.cgi
+++ b/new_comment.cgi
@@ -42,6 +42,13 @@ if ( (!defined $c) || ($c eq '') ) {
 	print "<H2> Hit back, and try again...</H2>";
     exit 0;
 }
+if ($c =~ m/</) {
+	print "Content-type: text/html\n\n";
+	print "<CENTER><H1>For security reasons, support for tags";
+	print " has been turned off in quips.\n</H1>\n";
+	print "<H2> Hit back, and try again...</H2></CENTER>\n";
+    exit 0;
+}
 
 open(COMMENTS, ">>data/comments");
 print COMMENTS $FORM{"comment"} . "\n";
diff --git a/notargetmilestone.html b/notargetmilestone.html
index 22bbdcf9c..c2f697abb 100644
--- a/notargetmilestone.html
+++ b/notargetmilestone.html
@@ -1,5 +1,5 @@
 <html> <head>
-<title>No target milestones.</title>
+<title>No target milestones</title>
 </head>
 
 <body>
diff --git a/post_bug.cgi b/post_bug.cgi
index 5695e5f0c..90ca32f52 100755
--- a/post_bug.cgi
+++ b/post_bug.cgi
@@ -92,16 +92,15 @@ if (!defined $::FORM{'short_desc'} || trim($::FORM{'short_desc'}) eq "") {
     PuntTryAgain("You must enter a summary for this bug.");
 }
 
-my $forceAssignedOK = 0;
 if ($::FORM{'assigned_to'} eq "") {
     SendSQL("select initialowner from components where program=" .
             SqlQuote($::FORM{'product'}) .
             " and value=" . SqlQuote($::FORM{'component'}));
     $::FORM{'assigned_to'} = FetchOneColumn();
-    $forceAssignedOK = 1;
+} else {
+    $::FORM{'assigned_to'} = DBNameToIdAndCheck($::FORM{'assigned_to'});
 }
 
-$::FORM{'assigned_to'} = DBNameToIdAndCheck($::FORM{'assigned_to'}, $forceAssignedOK);
 $::FORM{'reporter'} = DBNameToIdAndCheck($::FORM{'reporter'});
 
 
@@ -115,8 +114,8 @@ if (Param("useqacontact")) {
             SqlQuote($::FORM{'product'}) .
             " and value=" . SqlQuote($::FORM{'component'}));
     my $qacontact = FetchOneColumn();
-    if (defined $qacontact && $qacontact ne "") {
-        $::FORM{'qa_contact'} = DBNameToIdAndCheck($qacontact, 1);
+    if (defined $qacontact && $qacontact != 0) {
+        $::FORM{'qa_contact'} = $qacontact;
         push(@bug_fields, "qa_contact");
     }
 }
@@ -178,13 +177,30 @@ VALUES (
 ";
 
 foreach my $field (@used_fields) {
-    $query .= SqlQuote($::FORM{$field}) . ",\n";
+# fix for 42609. if there is a http:// only in bug_file_loc, strip
+# it out and send an empty value. 
+    if ($field eq 'bug_file_loc') {
+       if ($::FORM{$field} eq 'http://') {
+           $::FORM{$field} = "";
+           $query .= SqlQuote($::FORM{$field}) . ",\n";
+           next;
+       } 
+       else {
+          $query .= SqlQuote($::FORM{$field}) . ",\n";
+       }
+    }
+    else {
+       $query .= SqlQuote($::FORM{$field}) . ",\n";
+    }
 }
 
 my $comment = $::FORM{'comment'};
 $comment =~ s/\r\n/\n/g;     # Get rid of windows-style line endings.
 $comment =~ s/\r/\n/g;       # Get rid of mac-style line endings.
 $comment = trim($comment);
+# If comment is all whitespace, it'll be null at this point.  That's
+# OK except for the fact that it causes e-mail to be suppressed.
+$comment = $comment ? $comment : " ";
 
 $query .= "now(), 0";
 
@@ -229,7 +245,7 @@ foreach my $person (keys %ccids) {
 }
 
 print "<TABLE BORDER=1><TD><H2>Bug $id posted</H2>\n";
-system("./processmail $id $::COOKIE{'Bugzilla_login'}");
+system("./processmail", $id, $::COOKIE{'Bugzilla_login'});
 print "<TD><A HREF=\"show_bug.cgi?id=$id\">Back To BUG# $id</A></TABLE>\n";
 
 print "<BR><A HREF=\"createattachment.cgi?id=$id\">Attach a file to this bug</a>\n";
diff --git a/process_bug.cgi b/process_bug.cgi
index 22dff72e9..dded85dbb 100755
--- a/process_bug.cgi
+++ b/process_bug.cgi
@@ -20,6 +20,7 @@
 #
 # Contributor(s): Terry Weissman <terry@mozilla.org>
 #                 Dan Mosedale <dmose@mozilla.org>
+#                 Dave Miller <justdave@syndicomm.com>
 
 use diagnostics;
 use strict;
@@ -35,7 +36,7 @@ use RelationSet;
 use vars %::versions,
     %::components,
     %::COOKIE,
-    %::keywordsbyname,
+    %::MFORM,
     %::legal_keywords,
     %::legal_opsys,
     %::legal_platform,
@@ -45,6 +46,8 @@ use vars %::versions,
 
 my $whoid = confirm_login();
 
+my $requiremilestone = 0;
+
 print "Content-type: text/html\n\n";
 
 PutHeader ("Bug processed");
@@ -155,6 +158,9 @@ sub CheckCanChangeField {
     if ($f =~ /^longdesc/) {
         return 1;
     }
+    if ($f eq "resolution") { # always OK this.  if they really can't,
+        return 1;             # it'll flag it when "status" is checked.
+    }
     if ($UserInEditGroupSet < 0) {
         $UserInEditGroupSet = UserInGroup("editbugs");
     }
@@ -166,6 +172,12 @@ sub CheckCanChangeField {
                 "WHERE bug_id = $bugid");
         ($reporterid, $ownerid, $qacontactid) = (FetchSQLData());
     }
+    # Let reporter change bug status, even if they can't edit bugs.
+    # If reporter can't re-open their bug they will just file a duplicate.
+    # While we're at it, let them close their own bugs as well.
+    if ( ($f eq "bug_status") && ($whoid eq $reporterid) ) {
+        return 1;
+    }
     if ($f eq "bug_status" && $newvalue ne $::unconfirmedstate &&
         IsOpenedState($newvalue)) {
 
@@ -246,6 +258,18 @@ if (defined $::FORM{'id'}) {
     }
 }
 
+my $action  = '';
+if (defined $::FORM{action}) {
+  $action  = trim($::FORM{action});
+}
+if ($action eq Param("move-button-text")) {
+  $::FORM{'buglist'} = join (":", @idlist);
+  do "move.pl" || die "Error executing move.cgi: $!";
+  PutFooter();
+  exit;
+}
+
+
 if (!defined $::FORM{'who'}) {
     $::FORM{'who'} = $::COOKIE{'Bugzilla_login'};
 }
@@ -377,16 +401,27 @@ ConnectToDatabase();
 my $formCcSet = new RelationSet;
 my $origCcSet = new RelationSet;
 my $origCcString;
+my $removedCcString = "";
+my $duplicate = 0;
 
 # We make sure to check out the CC list before we actually start touching any
 # bugs.  mergeFromString() ultimately searches the database using a quoted
 # form of the data it gets from $::FORM{'cc'}, so anything bogus from a 
 # security standpoint should trigger an abort there.
 #
-if (defined $::FORM{'cc'} && defined $::FORM{'id'}) {
+if (defined $::FORM{'newcc'} && defined $::FORM{'id'}) {
     $origCcSet->mergeFromDB("select who from cc where bug_id = $::FORM{'id'}");
+    $formCcSet->mergeFromDB("select who from cc where bug_id = $::FORM{'id'}");
     $origCcString = $origCcSet->toString();  # cache a copy of the string vers
-    $formCcSet->mergeFromString($::FORM{'cc'});
+    if ((exists $::FORM{'removecc'}) && (exists $::FORM{'cc'})) {
+
+      # save off the folks removed from the CC list so they can be given to 
+      # the processmaill command line so they can be sent mail about it.
+      #
+      $removedCcString = join (',', @{$::MFORM{'cc'}});
+      $formCcSet->removeItemsInArray(@{$::MFORM{'cc'}});
+    }
+    $formCcSet->mergeFromString($::FORM{'newcc'});
 }
 
 if ( Param('strictvaluechecks') ) {
@@ -404,6 +439,11 @@ SWITCH: for ($::FORM{'knob'}) {
     /^accept$/ && CheckonComment( "accept" ) && do {
         DoConfirm();
         ChangeStatus('ASSIGNED');
+        if (Param("musthavemilestoneonaccept")) {
+            if (Param("usetargetmilestone")) {
+                $requiremilestone = 1;
+            }
+        }
         last SWITCH;
     };
     /^clearresolution$/ && CheckonComment( "clearresolution" ) && do {
@@ -450,8 +490,8 @@ SWITCH: for ($::FORM{'knob'}) {
         SendSQL("select initialowner from components where program=" .
                 SqlQuote($::FORM{'product'}) . " and value=" .
                 SqlQuote($::FORM{'component'}));
-        my $newname = FetchOneColumn();
-        my $newid = DBNameToIdAndCheck($newname, 1);
+        my $newid = FetchOneColumn();
+        my $newname = DBID_to_name($newid);
         DoComma();
         $::query .= "assigned_to = $newid";
         if (Param("useqacontact")) {
@@ -459,17 +499,20 @@ SWITCH: for ($::FORM{'knob'}) {
                     SqlQuote($::FORM{'product'}) .
                     " and value=" . SqlQuote($::FORM{'component'}));
             my $qacontact = FetchOneColumn();
-            if (defined $qacontact && $qacontact ne "") {
-                my $newqa = DBNameToIdAndCheck($qacontact, 1);
+            if (defined $qacontact && $qacontact != 0) {
                 DoComma();
-                $::query .= "qa_contact = $newqa";
+                $::query .= "qa_contact = $qacontact";
             }
         }
         last SWITCH;
     };   
     /^reopen$/  && CheckonComment( "reopen" ) && do {
+		SendSQL("SELECT resolution FROM bugs WHERE bug_id = $::FORM{'id'}");
         ChangeStatus('REOPENED');
         ChangeResolution('');
+		if (FetchOneColumn() eq 'DUPLICATE') {
+			SendSQL("DELETE FROM duplicates WHERE dupe = $::FORM{'id'}");
+		}		
         last SWITCH;
     };
     /^verify$/ && CheckonComment( "verify" ) && do {
@@ -490,7 +533,7 @@ SWITCH: for ($::FORM{'knob'}) {
         SendSQL("SELECT bug_id FROM bugs WHERE bug_id = " . SqlQuote($num));
         $num = FetchOneColumn();
         if (!$num) {
-            PuntTryAgain("You must specify a bug number of which this bug " .
+            PuntTryAgain("You must specify a valid bug number of which this bug " .
                          "is a duplicate.  The bug has not been changed.")
         }
         if (!defined($::FORM{'id'}) || $num == $::FORM{'id'}) {
@@ -498,15 +541,15 @@ SWITCH: for ($::FORM{'knob'}) {
                          "make sense to mark a bug as a duplicate of " .
                          "itself, does it?");
         }
-        AppendComment($num, $::FORM{'who'}, "*** Bug $::FORM{'id'} has been marked as a duplicate of this bug. ***");
-        if ( Param('strictvaluechecks') ) {
-          CheckFormFieldDefined(\%::FORM,'comment');
+        my $checkid = trim($::FORM{'id'});
+        SendSQL("SELECT bug_id FROM bugs where bug_id = " .  SqlQuote($checkid));
+        $checkid = FetchOneColumn();
+        if (!$checkid) {
+            PuntTryAgain("The bug id $::FORM{'id'} is invalid. Please reload this bug ".
+                         "and try again.");
         }
         $::FORM{'comment'} .= "\n\n*** This bug has been marked as a duplicate of $num ***";
-
-        print "<TABLE BORDER=1><TD><H2>Notation added to bug $num</H2>\n";
-        system("./processmail $num $::FORM{'who'}");
-        print "<TD><A HREF=\"show_bug.cgi?id=$num\">Go To BUG# $num</A></TABLE>\n";
+        $duplicate = $num;
 
         last SWITCH;
     };
@@ -530,7 +573,7 @@ if ($::FORM{'keywords'}) {
         if ($keyword eq '') {
             next;
         }
-        my $i = $::keywordsbyname{$keyword};
+        my $i = GetKeywordIdFromName($keyword);
         if (!$i) {
             PuntTryAgain("Unknown keyword named <code>$keyword</code>. " .
                          "<P>The legal keyword names are " .
@@ -594,12 +637,6 @@ sub LogDependencyActivity {
     return 0;
 }
 
-delete $::FORM{'resolution'};   # Make sure we don't test the resolution
-                                # against our permissions; we've already done
-                                # that kind of testing, and this form field
-                                # is actually usually not used.
-
-
 # this loop iterates once for each bug to be processed (eg when this script
 # is called with multiple bugs selected from buglist.cgi instead of
 # show_bug.cgi).
@@ -611,16 +648,32 @@ foreach my $id (@idlist) {
     SendSQL("LOCK TABLES bugs $write, bugs_activity $write, cc $write, " .
             "profiles $write, dependencies $write, votes $write, " .
             "keywords $write, longdescs $write, fielddefs $write, " .
-            "keyworddefs READ, groups READ, attachments READ");
+            "keyworddefs READ, groups READ, attachments READ, products READ");
     my @oldvalues = SnapShotBug($id);
+    my %oldhash;
     my $i = 0;
     foreach my $col (@::log_columns) {
+        $oldhash{$col} = $oldvalues[$i];
         if (exists $::FORM{$col}) {
             CheckCanChangeField($col, $id, $oldvalues[$i], $::FORM{$col});
         }
         $i++;
     }
-
+    if ($requiremilestone) {
+        my $value = $::FORM{'target_milestone'};
+        if (!defined $value || $value eq $::dontchange) {
+            $value = $oldhash{'target_milestone'};
+        }
+        SendSQL("SELECT defaultmilestone FROM products WHERE product = " .
+                SqlQuote($oldhash{'product'}));
+        if ($value eq FetchOneColumn()) {
+            SendSQL("UNLOCK TABLES");
+            PuntTryAgain("You must determine a target milestone for bug $id " .
+                         "if you are going to accept it.  (Part of " .
+                         "accepting a bug is giving an estimate of when it " .
+                         "will be fixed.)");
+        }
+    }   
     if (defined $::FORM{'delta_ts'} && $::FORM{'delta_ts'} ne $delta_ts) {
         print "
 <H1>Mid-air collision detected!</H1>
@@ -674,6 +727,9 @@ The changes made were:
                 if ($comp ne $i) {
                     PuntTryAgain("$i is not a legal bug number");
                 }
+                if ($id eq $i) {
+                    PuntTryAgain("You can't make a bug blocked or dependent on itself.");
+                }
                 if (!exists $seen{$i}) {
                     push(@{$deps{$target}}, $i);
                     $seen{$i} = 1;
@@ -697,8 +753,27 @@ The changes made were:
                     }
                 }
             }
-                        
 
+	    if ($me eq 'dependson') {
+                my @deps   =  @{$deps{'dependson'}};
+                my @blocks =  @{$deps{'blocked'}};
+                my @union = ();
+                my @isect = ();
+                my %union = ();
+                my %isect = ();
+                foreach my $b (@deps, @blocks) { $union{$b}++ && $isect{$b}++ }
+                @union = keys %union;
+                @isect = keys %isect;
+		if (@isect > 0) {
+                    my $both;
+                    foreach my $i (@isect) {
+                       $both = $both . "#" . $i . " ";	
+                    }
+                    PuntTryAgain("Dependency loop detected!<P>" .
+                                 "This bug can't be both blocked and dependent " .
+                                 "on bug "  . $both . "!");
+                }
+            }
             my $tmp = $me;
             $me = $target;
             $target = $tmp;
@@ -760,7 +835,7 @@ The changes made were:
         AppendComment($id, $::FORM{'who'}, $::FORM{'comment'});
     }
     
-    if (defined $::FORM{'cc'} && defined $::FORM{'id'}
+    if (defined $::FORM{'newcc'} && defined $::FORM{'id'}
         && ! $origCcSet->isEqual($formCcSet) ) {
 
         # update the database to look like the form
@@ -773,7 +848,7 @@ The changes made were:
 
         my $col = GetFieldID('cc');
         my $origq = SqlQuote($origCcString);
-        my $newq = SqlQuote($::FORM{'cc'});
+        my $newq = SqlQuote($formCcSet->toString());
         SendSQL("INSERT INTO bugs_activity " . 
                 "(bug_id,who,bug_when,fieldid,oldvalue,newvalue) VALUES " . 
                 "($id,$whoid,'$timestamp',$col,$origq,$newq)");
@@ -832,13 +907,18 @@ The changes made were:
         }
     }
 
-
     # get a snapshot of the newly set values out of the database, 
     # and then generate any necessary bug activity entries by seeing 
     # what has changed since before we wrote out the new values.
     #
     my @newvalues = SnapShotBug($id);
 
+    # for passing to processmail to ensure that when someone is removed
+    # from one of these fields, they get notified of that fact (if desired)
+    #
+    my $origOwner = "";
+    my $origQaContact = "";
+
     foreach my $c (@::log_columns) {
         my $col = $c;           # We modify it, don't want to modify array
                                 # values in place.
@@ -851,13 +931,24 @@ The changes made were:
             $new = "";
         }
         if ($old ne $new) {
-            if ($col eq 'assigned_to' || $col eq 'qa_contact') {
-                $old = DBID_to_name($old) if $old != 0;
-                $new = DBID_to_name($new) if $new != 0;
-                $origCcString .= ",$old"; # make sure to send mail to people
-                                          # if they are going to no longer get
-                                          # updates about this bug.
+
+            # save off the old value for passing to processmail so the old
+            # owner can be notified
+            #
+            if ($col eq 'assigned_to') {
+                $old = ($old) ? DBID_to_name($old) : "";
+                $new = ($new) ? DBID_to_name($new) : "";
+                $origOwner = $old;
             }
+
+            # ditto for the old qa contact
+            #
+            if ($col eq 'qa_contact') {
+                $old = ($old) ? DBID_to_name($old) : "";
+                $new = ($new) ? DBID_to_name($new) : "";
+                $origQaContact = $old;
+            }
+
             if ($col eq 'product') {
                 RemoveVotes($id, 0,
                             "This bug has been moved to a different product");
@@ -873,12 +964,58 @@ The changes made were:
     
     print "<TABLE BORDER=1><TD><H2>Changes to bug $id submitted</H2>\n";
     SendSQL("unlock tables");
-    system("./processmail", "-forcecc", $origCcString, $id, $::FORM{'who'});
+
+    my @ARGLIST = ("./processmail");
+    if ( $removedCcString ne "" ) {
+        push @ARGLIST, ("-forcecc", $removedCcString);
+    }
+    if ( $origOwner ne "" ) {
+        push @ARGLIST, ("-forceowner", $origOwner);
+    }
+    if ( $origQaContact ne "") { 
+        push @ARGLIST, ( "-forceqacontact", $origQaContact);
+    }
+    push @ARGLIST, ($id, $::FORM{'who'});
+    system @ARGLIST;
+
     print "<TD><A HREF=\"show_bug.cgi?id=$id\">Back To BUG# $id</A></TABLE>\n";
 
+    if ($duplicate) {
+        # Check to see if Reporter of this bug is reporter of Dupe 
+        SendSQL("SELECT reporter FROM bugs WHERE bug_id = " . SqlQuote($::FORM{'id'}));
+        my $reporter = FetchOneColumn();
+        SendSQL("SELECT reporter FROM bugs WHERE bug_id = " . SqlQuote($duplicate) . " and reporter = $reporter");
+        my $isreporter = FetchOneColumn();
+        SendSQL("SELECT who FROM cc WHERE bug_id = " . SqlQuote($duplicate) . " and who = $reporter");
+        my $isoncc = FetchOneColumn();
+        unless ($isreporter || $isoncc) {
+            # The reporter is oblivious to the existance of the new bug... add 'em to the cc (and record activity)
+            SendSQL("SELECT who FROM cc WHERE bug_id = " . SqlQuote($duplicate));
+            my @dupecc;
+            while (MoreSQLData()) {
+                push (@dupecc, DBID_to_name(FetchOneColumn()));
+            }
+            my @newdupecc = @dupecc;
+            push (@newdupecc, DBID_to_name($reporter));
+            my $ccid = GetFieldID("cc");
+            my $whochange = DBNameToIdAndCheck($::FORM{'who'});
+            SendSQL("INSERT INTO bugs_activity (bug_id,who,bug_when,fieldid,oldvalue,newvalue) VALUES " .
+                    "('$duplicate','$whochange',now(),$ccid,'" . join (",", sort @dupecc) . "','" . join (",", sort @newdupecc) . "')"); 
+            SendSQL("INSERT INTO cc (who, bug_id) VALUES ($reporter, " . SqlQuote($duplicate) . ")");
+        }
+        AppendComment($duplicate, $::FORM{'who'}, "*** Bug $::FORM{'id'} has been marked as a duplicate of this bug. ***");
+        if ( Param('strictvaluechecks') ) {
+          CheckFormFieldDefined(\%::FORM,'comment');
+        }
+        SendSQL("INSERT INTO duplicates VALUES ($duplicate, $::FORM{'id'})");
+        print "<TABLE BORDER=1><TD><H2>Duplicate notation added to bug $duplicate</H2>\n";
+        system("./processmail", $duplicate, $::FORM{'who'});
+        print "<TD><A HREF=\"show_bug.cgi?id=$duplicate\">Go To BUG# $duplicate</A></TABLE>\n";
+    }
+
     foreach my $k (keys(%dependencychanged)) {
         print "<TABLE BORDER=1><TD><H2>Checking for dependency changes on bug $k</H2>\n";
-        system("./processmail $k $::FORM{'who'}");
+        system("./processmail", $k, $::FORM{'who'});
         print "<TD><A HREF=\"show_bug.cgi?id=$k\">Go To BUG# $k</A></TABLE>\n";
     }
 
diff --git a/processmail b/processmail
index b81398680..c4b275500 100755
--- a/processmail
+++ b/processmail
@@ -21,6 +21,8 @@
 # Contributor(s): Terry Weissman <terry@mozilla.org>,
 #                 Bryce Nesbitt <bryce-mozilla@nextbus.com>
 #                 Dan Mosedale <dmose@mozilla.org>
+#                 Alan Raetz <al_raetz@yahoo.com>
+#
 
 # To recreate the shadow database,  run "processmail regenerate" .
 
@@ -39,7 +41,17 @@ $::lockcount = 0;
 my $regenerate = 0;
 my $nametoexclude = "";
 
-my @forcecc;
+my @excludedAddresses = ();
+
+# disable email flag for offline debugging work
+my $enableSendMail = 1;
+
+my %force;
+@{$force{'QAcontact'}} = ();
+@{$force{'Owner'}} = ();
+@{$force{'Reporter'}} = ();
+@{$force{'CClist'}} = ();
+@{$force{'Voter'}} = ();
 
 sub Lock {
     if ($::lockcount <= 0) {
@@ -134,7 +146,7 @@ sub DescDependencies {
                 my ($bug_status, $resolution) = (FetchSQLData());
                 my $desc;
                 if ($bug_status eq "NEW" || $bug_status eq "ASSIGNED" ||
-                    $bug_status eq "REOPENED") {
+                    $bug_status eq "REOPENED" || $bug_status eq "UNCONFIRMED") {
                     $desc = "";
                 } else {
                     $desc = "[$resolution]";
@@ -267,7 +279,6 @@ $::bug{'long_desc'}
 }
 
 
-my $didexclude = 0;
 my %seen;
 my @sentlist;
 sub fixaddresses {
@@ -290,7 +301,7 @@ sub fixaddresses {
         }
         if ($emailnotification eq "ExcludeSelfChanges" &&
            (lc($i) eq $nametoexclude)) {
-            $didexclude = 1;
+            push @excludedAddresses, $nametoexclude;
             next;
         }
         
@@ -317,7 +328,7 @@ sub FormatTriple {
     my ($a, $b, $c) = (@_);
     $^A = "";
     my $temp = formline << 'END', $a, $b, $c;
-^>>>>>>>>>>>>>>>>>>|^<<<<<<<<<<<<<<<<<<<<<<<<<<<|^<<<<<<<<<<<<<<<<<<<<<<<<<<~~
+^>>>>>>>>>>>>>>>>>>|^<<<<<<<<<<<<<<<<<<<<<<<<<<<|^<<<<<<<<<<<<<<<<<<<<<<<<<<<~~
 END
     ; # This semicolon appeases my emacs editor macros. :-)
     return $^A;
@@ -402,7 +413,7 @@ sub NewProcessOneBug {
         my ($who, $what, $when, $old, $new) = (@$ref);
         if ($who ne $lastwho) {
             $lastwho = $who;
-            $difftext .= "\n$who changed:\n\n";
+            $difftext .= "\n$who" . Param('emailsuffix') . " changed:\n\n";
             $difftext .= FormatTriple("What    ", "Old Value", "New Value");
             $difftext .= ('-' x 76) . "\n";
         }
@@ -462,25 +473,440 @@ sub NewProcessOneBug {
 
     my $newcomments = GetLongDescriptionAsText($id, $start, $end);
 
-    my $count = 0;
-    for my $person ($values{'assigned_to'}, $values{'reporter'},
-                    split(/,/, $values{'cc'}),
-                    @voterlist,
-                    @forcecc) {
-        $count++;
+    if (Param('newemailtech')) {
+        
+        #
+        # Start of email filtering code
+        #
+        # Even if the user sending the email has not enabled #
+        # 'newEmailTech', we still want to filter the email
+        # based on other user's email preferences if the global Param 
+        # 'newemailtech' is enabled.
+        #
+        # Note: users who have not enabled newEmailTech will default
+        # to no filtering (they will get all email Bugzilla sends).
+        
+        my $count = 0;
+        
+        my @currentEmailAttributes = getEmailAttributes($newcomments,
+                                                        @diffs);
+        my (@assigned_toList,@reporterList,@qa_contactList,@ccList) = 
+          ();
+        
+        #open(LOG, ">>/tmp/maillog");
+        #print LOG "\nBug ID: $id   CurrentEmailAttributes:";
+        #print LOG join(',', @currentEmailAttributes) . "\n";
+        
+        @excludedAddresses = (); # zero out global list 
+
+        @assigned_toList = filterEmailGroup('Owner',
+                                            \@currentEmailAttributes,
+                                            $values{'assigned_to'});
+        @reporterList = filterEmailGroup('Reporter', 
+                                         \@currentEmailAttributes,
+                                         $values{'reporter'});
+        if (Param('useqacontact') && $values{'qa_contact'}) {
+            @qa_contactList = filterEmailGroup('QAcontact',
+                                               \@currentEmailAttributes,
+                                               $values{'qa_contact'});
+        } else { 
+            @qa_contactList = (); 
+        }
+
+        @ccList = filterEmailGroup('CClist', \@currentEmailAttributes,
+                                   $values{'cc'});
+
+        @voterlist = filterEmailGroup('Voter', \@currentEmailAttributes,
+                                      join(',',@voterlist));
+
+        my @emailList = (@assigned_toList, @reporterList, 
+                         @qa_contactList, @ccList, @voterlist);
+
+        # only need one entry per person
+        my @allEmail = ();
+        my %AlreadySeen = ();
+        foreach my $person (@emailList) {
+            if ( !($AlreadySeen{$person}) ) {
+                push(@allEmail,$person);
+                $AlreadySeen{$person}++;
+            }
+        }
+
+        #print LOG "\nbug $id email sent: " . join(',', @allEmail) . "\n";
+        
+        @excludedAddresses = filterExcludeList(\@excludedAddresses,
+                                               \@allEmail);
+
+        # print LOG "excluded: " . join(',',@excludedAddresses) . "\n\n";
+
+        foreach my $person ( @allEmail ) {
+            $count++;
+            if ( !defined(NewProcessOnePerson($person, $count, \@headerlist,
+                                              \%values, \%defmailhead, 
+                                              \%fielddescription, $difftext, 
+                                              $newcomments, $start, $id))) {
 
-        NewProcessOnePerson($person, $count, \@headerlist, \%values,
-                            \%defmailhead, \%fielddescription, $difftext, 
-                            $newcomments, $start, $id, 1);
+                # if a value is not returned, this means that the person
+                # was not sent mail.  add them to the excludedAddresses list.
+                # it will be filtered later for dups.
+                #
+                push @excludedAddresses, $person;
+
+            }
+        }
+
+    } else {
+        my $count = 0;
+        my @personlist = ($values{'assigned_to'}, $values{'reporter'},
+                          split(/,/, $values{'cc'}),
+                          @voterlist,
+                          $force{'CClist'});
+        if ($values{'qa_contact'}) { push @personlist, $values{'qa_contact'} }
+        for my $person (@personlist) {
+            $count++;
+
+            my $match = "^[^@, ]*@[^@, ]*\.[^@, ]*\$";
+            if ($person !~ /$match/) {
+                $person = $person . Param('emailsuffix');
+            }
+
+            if ( !defined(NewProcessOnePerson($person, $count, \@headerlist, 
+                                              \%values, \%defmailhead, 
+                                              \%fielddescription, $difftext, 
+                                              $newcomments, $start, $id))) {
+
+                # if a value is not returned, this means that the person
+                # was not sent mail.  add them to the excludedAddresses list.
+                # it will be filtered later for dups.
+                #
+                push @excludedAddresses, $person;
+            }
+        }
     }
 
     SendSQL("UPDATE bugs SET lastdiffed = '$end', delta_ts = delta_ts " .
             "WHERE bug_id = $id");
 }
 
-sub NewProcessOnePerson ($$\@\%\%\%$$$$) {
+# When one person is in different fields on one bug, they may be
+# excluded from email because of one relationship to the bug (eg
+# they're the QA contact) but included because of another (eg they
+# also reported the bug).  Inclusion takes precedence, so this
+# function looks for and removes any users from the exclude list who
+# are also on the include list.  Additionally, it removes duplicate
+# entries from the exclude list.  
+#
+# Arguments are the exclude list and the include list; the cleaned up
+# exclude list is returned.
+#
+sub filterExcludeList ($$) {
+
+    if ($#_ != 1) {
+        die ("filterExcludeList called with wrong number of args");
+    }
+
+    my ($refExcluded, $refAll) = @_;
+
+    my @excludedAddrs = @$refExcluded;
+    my @allEmail = @$refAll;
+    my @tmpList = @excludedAddrs;
+    my (@result,@uniqueResult) = ();
+    my %alreadySeen;
+
+    foreach my $excluded (@tmpList) {
+
+        push (@result,$excluded);
+        foreach my $included (@allEmail) {
+
+            # match found, so we remove the entry
+            if ($included eq $excluded) {
+                pop(@result);
+            }
+        }
+    }
+
+    # only need one entry per person
+    foreach my $person (@result) {
+        if ( !($alreadySeen{$person}) ) {
+            push(@uniqueResult,$person);
+            $alreadySeen{$person}++;
+        }
+    }
+
+    return @uniqueResult;
+}
+
+# if the Status was changed to Resolved or Verified
+#       set the Resolved flag
+#
+# else if Severity, Status OR Priority fields have any change
+#       set the Status flag
+#
+# else if Keywords has changed
+#       set the Keywords flag
+#
+# else if CC has changed
+#       set the CC flag
+#
+# if the Comments field shows an attachment
+#       set the Attachment flag
+#
+# else if Comments exist
+#       set the Comments flag
+#
+# if no flags are set and there was some other field change
+#       set the Status flag
+#
+sub getEmailAttributes ($@) {
+    
+    my ($commentField,@fieldDiffs) = @_;
+    my (@flags,@uniqueFlags,%alreadySeen) = ();
+    
+    foreach my $ref (@fieldDiffs) {
+        my ($who, $fieldName, $when, $old, $new) = (@$ref);
+        
+        #print qq{field: $fieldName $new<br>};
+        
+        # the STATUS will be flagged for Severity, Status and 
+        # Priority changes
+        #
+        if ( $fieldName eq 'Status') {
+            if ($new eq 'RESOLVED' || $new eq 'VERIFIED') {
+                push (@flags, 'Resolved');
+            }
+        }
+        elsif ( $fieldName eq 'Severity' || $fieldName eq 'Status' ||
+                $fieldName eq 'Priority' ) {
+            push (@flags, 'Status');
+        } elsif ( $fieldName eq 'Keywords') {
+            push (@flags, 'Keywords');
+        } elsif ( $fieldName eq 'CC') {
+            push (@flags, 'CC');
+        }
+
+        # These next few lines are for finding out who's been added
+        # to the Owner, QA, CC, etc. fields.  It does not effect
+        # the @flags array at all, but is run here because it does
+        # effect filtering later and we're already in the loop.
+        if ($fieldName eq 'Owner') {
+            push (@{$force{'Owner'}}, $new);
+        } elsif ($fieldName eq 'QAContact') {
+           push (@{$force{'QAContact'}}, $new);
+        } elsif ($fieldName eq 'CC') {
+            my @oldVal = split (/,/, $old);
+            my @newVal = split (/,/, $new);
+            my @added = filterExcludeList(\@newVal, \@oldVal);
+            push (@{$force{'CClist'}}, @added);
+        }
+    }
+    
+    if ( $commentField =~ /Created an attachment \(/ ) {
+        push (@flags, 'Attachments');
+    }
+    elsif ( ($commentField ne '') && !(scalar(@flags) == 1 && $flags[0] eq 'Resolved')) {
+        push (@flags, 'Comments');
+    }
+    
+    # default fallthrough for any unflagged change is 'Other'
+    if ( @flags == 0 && @fieldDiffs != 0 ) {
+        push (@flags, 'Other');
+    }
+    
+    # only need one flag per attribute type
+    foreach my $flag (@flags) {
+        if ( !($alreadySeen{$flag}) ) {
+            push(@uniqueFlags,$flag);
+            $alreadySeen{$flag}++;
+        }
+    }
+    #print "\nEmail Attributes: ", join(' ,',@uniqueFlags), "<br>\n";
+    
+    # catch-all default, just in case the above logic is faulty
+    if ( @uniqueFlags == 0) {
+        push (@uniqueFlags, 'Comments');
+    }
+    
+    return @uniqueFlags;
+}
+
+sub filterEmailGroup ($$$) {
+    
+    my ($emailGroup,$refAttributes,$emailList) = @_;
+    my @emailAttributes = @$refAttributes;
+    my @emailList = split(/,/,$emailList);
+    my @filteredList = ();
+    
+
+    # the force list for this email group needs to be checked as well
+    #
+    push @emailList, @{$force{$emailGroup}};
+
+    # Check this user for any watchers... doing this here allows them to inhert the
+    # relationship to the bug of the person they are watching (if the person they
+    # are watching is an owner, their mail is filtered as if they were the owner).
+    if (Param("supportwatchers")) {
+	my @watchers;
+	foreach my $person(@emailList) {
+	    my $personId = DBname_to_id($person);
+	    SendSQL("SELECT watcher FROM watch WHERE watched = $personId");
+	    while(MoreSQLData()) {
+	        my ($watcher) = FetchSQLData();
+	        if ($watcher) {
+	            push (@watchers, DBID_to_name($watcher));
+	        }
+	    }
+	}
+	push(@emailList, @watchers);
+    }
+
+
+    foreach my $person (@emailList) {
+        
+        my $userid;
+        my $lastCount = @filteredList;
+
+        if ( $person eq '' ) { next; }
+
+        SendSQL("SELECT userid FROM profiles WHERE login_name = " 
+                . SqlQuote($person) );
+
+        if ( !($userid = FetchSQLData()) ) {
+            push(@filteredList,$person);
+            next;
+        }
+        
+        SendSQL("SELECT emailflags, newemailtech FROM profiles WHERE " .
+                "userid = $userid" );
+        
+        my ($userFlagString, $newemailtech) = FetchSQLData();
+        
+        # people who are not using newemailtech get skipped; they will 
+        # be dealt with later by the old email tech code in 
+        # ProcessOneBug().
+        #
+        if (!defined($newemailtech) || $newemailtech == 0) {
+            next;
+        }
+
+        # If the sender doesn't want email, exclude them from list
+        
+        if (lc($person) eq $nametoexclude) {
+            
+            if ( defined ($userFlagString) && 
+                 $userFlagString =~ /ExcludeSelf\~on/ ) {
+                
+                push (@excludedAddresses,$person);
+                next;
+            }
+        }
+        
+        # if the users database entry is empty, send them all email
+        # by default (they have not accessed userprefs.cgi recently).
+        
+        if ( !defined($userFlagString) || !($userFlagString =~ /email/) ) {
+            push(@filteredList,$person);
+        }
+        else {
+
+            # the 255 param is here, because without a third param, 
+            # split will trim any trailing null fields, which causes perl 
+            # to eject lots of warnings.  any suitably large number would 
+            # do.
+                
+            my %userFlags = split(/~/, $userFlagString, 255);
+
+            # The default condition is to send each person email.
+            # If we match the email attribute with the user flag, and
+            # they do not want email, then remove them from the list.
+
+            push(@filteredList,$person);            
+
+            my $detectedOn = 0;
+            
+            foreach my $attribute (@emailAttributes) {
+
+                my $matchName = 'email' . $emailGroup . $attribute;
+                
+                # **** Kludge... quick and dirty fix for 2.12
+                #      http://bugzilla.mozilla.org/show_bug.cgi?id=73665
+                # If this pref is new (it's been added since this user
+                # last updated their filtering prefs, $userFlags{$matchName}
+                # will be undefined.  This should be considered a match
+                # so that new prefs will default to 'on'
+                if (!defined($userFlags{$matchName})) {
+                    $detectedOn = 1;
+                }
+
+                while ((my $flagName, my $flagValue) = each %userFlags) {
+                    
+                    if ($flagName !~ /$emailGroup/) { 
+                        next; 
+                    }
+
+                    if ($flagName eq $matchName){
+                        if ($flagValue eq 'on') {
+                            $detectedOn = 1;
+                        }
+                    }
+
+                } # for each userFlag
+
+            } # for each email attribute
+
+            # if the current flag hasn't been detected on at least once, 
+            # this person gets filtered from this group.
+            #
+            if (! $detectedOn) {
+                pop(@filteredList);
+            }
+
+            # check to see if the person was added to or removed from  
+            # this email group.
+            # Note: This was originally written as only removed from
+            # and was rewritten to be Added/Removed, but for simplicity
+            # sake, the name "Removeme" wasn't changed.
+            # http://bugzilla.mozilla.org/show_bug.cgi?id=71912 
+
+            if ( grep ($_ eq $person, @{$force{$emailGroup}} ) ) {
+
+                # if so, see if they want mail about that
+                #
+                if ( $userFlags{'email' . $emailGroup . 'Removeme'} eq 'on' ) {
+
+                    # we definitely want mail sent to this person, since
+                    # inclusion on a mail takes precedence over the previous
+                    # exclusion
+
+                    # have they been filtered for some other reason?
+                    #
+                    if (@filteredList == $lastCount) {
+                        
+                        # if so, put them back
+                        #
+                        push (@filteredList, $person);
+                    }
+                }
+            }
+
+        } # if $userFlagString is valid
+
+        # has the person been moved off the filtered list?
+        #
+        if (@filteredList == $lastCount ) {
+
+            # mark them as excluded
+            #
+            push (@excludedAddresses,$person);
+        } 
+            
+    } # for each person
+
+    return @filteredList;
+}
+
+sub NewProcessOnePerson ($$$$$$$$$$) {
     my ($person, $count, $hlRef, $valueRef, $dmhRef, $fdRef, $difftext, 
-        $newcomments, $start, $id, $checkWatchers) = @_;
+        $newcomments, $start, $id) = @_;
 
     my %values = %$valueRef;
     my @headerlist = @$hlRef;
@@ -497,25 +923,6 @@ sub NewProcessOnePerson ($$\@\%\%\%$$$$) {
     my ($userid, $emailnotification, $newemailtech, 
         $groupset) =  (FetchSQLData());
     
-    # check for watchers, and recurse if we find any, but tell the
-    # recursive call not to check for watchers 
-    #
-    if (Param("supportwatchers") && $checkWatchers)  {
-      my $personId = DBname_to_id($person);
-      my $watcherSet = new RelationSet();
-      $watcherSet->mergeFromDB("SELECT watcher FROM watch WHERE" .
-                               " watched = $personId");
-
-      foreach my $watcher ( $watcherSet->toArray() ) {
-        
-        NewProcessOnePerson(DBID_to_name($watcher), 
-                            $count, \@headerlist, \%values,
-                            \%defmailhead, \%fielddescription, $difftext, 
-                            $newcomments, $start, $id, 0);
-      }
-
-    }
-
     if (!$newemailtech || !Param('newemailtech')) {
       return;
     }
@@ -535,7 +942,7 @@ sub NewProcessOnePerson ($$\@\%\%\%$$$$) {
     }
     if ($emailnotification eq "ExcludeSelfChanges" &&
         lc($person) eq $nametoexclude) {
-      $didexclude = 1;
+      push @excludedAddresses, $nametoexclude;
       return;
     }
     # "$count < 3" means "this person is either assigned_to or reporter"
@@ -568,7 +975,14 @@ sub NewProcessOnePerson ($$\@\%\%\%$$$$) {
     my $isnew = ($start !~ m/[1-9]/);
     
     my %substs;
-    $substs{"neworchanged"} = $isnew ? "New" : "Changed";
+
+    $person .= Param('emailsuffix');
+# 09/13/2000 cyeh@bluemartini.com
+# If a bug is changed, don't put the word "Changed" in the subject mail
+# since if the bug didn't change, you wouldn't be getting mail
+# in the first place! see http://bugzilla.mozilla.org/show_bug.cgi?id=29820 
+# for details.
+    $substs{"neworchanged"} = $isnew ? 'New: ' : '';
     $substs{"to"} = $person;
     $substs{"cc"} = '';
     $substs{"bugid"} = $id;
@@ -582,19 +996,41 @@ sub NewProcessOnePerson ($$\@\%\%\%$$$$) {
     my $template = Param("newchangedmail");
     
     my $msg = PerformSubsts($template, \%substs);
-    open(SENDMAIL, "|/usr/lib/sendmail -ODeliveryMode=deferred -t") ||
+
+    my $sendmailparam = "-ODeliveryMode=deferred";
+    if (Param("sendmailnow")) {
+       $sendmailparam = "";
+    }
+
+    if ($enableSendMail == 1) {
+    open(SENDMAIL, "|/usr/lib/sendmail $sendmailparam -t") ||
       die "Can't open sendmail";
     
     print SENDMAIL trim($msg) . "\n";
     close SENDMAIL;
+    }
     push(@sentlist, $person);
-    
+    return 1;
 }
 
 
 sub ProcessOneBug {
   my $i = $_[0];
   NewProcessOneBug($i);
+
+  # Make sure that everyone who was excluded because of the advanced
+  # filtering options (and thus are using new email tech) has the
+  # corresponding element in %seen set.  This is so that they won't
+  # also be processed by the old email tech code, which follows.
+  #
+  # It's necessary because people who are excluded by the advanced
+  # filtering code never make it into NewProcessOnePerson(), which is
+  # where %seen would have otherwise been touched for them.
+  # 
+  foreach my $person (@excludedAddresses) {
+      $seen{$person} = 1;
+  }
+
   my $old = "shadow/$i";
   my $new = "shadow/$i.tmp.$$";
   my $diffs = "shadow/$i.diffs.$$";
@@ -622,7 +1058,8 @@ sub ProcessOneBug {
         foreach my $v (split(/,/, "$::bug{'cclist'},$::bug{'voterlist'}")) {
             push @combinedcc, $v;
         }
-        push (@combinedcc, (@forcecc));
+        push (@combinedcc, (@{$force{'CClist'}}, @{$force{'QAcontact'}}, 
+                            @{$force{'Reporter'}}, @{$force{'Owner'}}));
         my $cclist = fixaddresses("cc", \@combinedcc);
         my $logstr = "Bug $i $verb";
         if ($tolist ne "" || $cclist ne "") {
@@ -638,19 +1075,25 @@ sub ProcessOneBug {
                 $substs{"diffs"} .= $_;
             }
             close DIFFS;
-            $substs{"neworchanged"} = $verb;
+            $substs{"neworchanged"} = ($verb eq "New") ? "New: " : "";
             $substs{"summary"} = $::bug{'short_desc'};
             my $msg = PerformSubsts(Param("changedmail"), \%substs);
 
             if (!$regenerate) {
                 # Note: fixaddresses may result in a Cc: only.  This seems
                 # harmless.
+                my $sendmailparam = "-ODeliveryMode=deferred";
+                if (Param("sendmailnow")) {
+                    $sendmailparam = "";
+                }
+                if ($enableSendMail==1) {
                 open(SENDMAIL, 
-                     "|/usr/lib/sendmail -ODeliveryMode=deferred -t") ||
+                     "|/usr/lib/sendmail $sendmailparam -t") ||
                        die "Can't open sendmail";
 
                 print SENDMAIL $msg;
                 close SENDMAIL;
+                }
                 foreach my $n (split(/[, ]+/, "$tolist,$cclist")) {
                     if ($n ne "") {
                         push(@sentlist, $n);
@@ -663,11 +1106,29 @@ sub ProcessOneBug {
         unlink($diffs);
         Log($logstr);
     }
+
+    # on the off chance that there are duplicate addresses in the exclude list,
+    # we filter it for dups one more time.  They could have gotten there in 
+    # fixaddresses(), NewProcessOnePerson(), or NewProcessOneBug.
+    # 
+    @excludedAddresses = filterExcludeList(\@excludedAddresses, 
+                                           \@sentlist);
+
+    if (!$regenerate) {
     if (@sentlist) {
-        print "<B>Email sent to:</B> " . join(", ", @sentlist) . "\n";
-        if ($didexclude) {
-            print qq{<B>Excluding:</B> $nametoexclude (<a href="userprefs.cgi?bank=diffs">change your preferences</a> if you wish not to be excluded)\n};
+            print "<B>Email sent to:</B> " . join(", ", @sentlist) . "<br>\n";
+        } else {
+            print "<B>Email sent to:</B> no one<br>\n";
         }
+
+        if ( @excludedAddresses ) {
+            print "<br><B>Excluding: </B>" . join(", ", @excludedAddresses) . 
+              "\n";
+        }
+
+        print "<br><br><center>New: <a href=\"userprefs.cgi\?bank=diffs\">" .
+          "change your email preferences<\/a> if you wish to tweak the " .
+            "kinds of Bugzilla email you get.<\/center>\n";
     }
     rename($new, $old) || die "Can't rename $new to $old";
     chmod 0666, $old;
@@ -712,12 +1173,25 @@ if ($#ARGV >= 0 && $ARGV[0] eq "regenerate") {
 if ($#ARGV >= 0 && $ARGV[0] eq "-forcecc") {
     shift(@ARGV);
     foreach my $i (split(/,/, shift(@ARGV))) {
-        push(@forcecc, trim($i));
+        push(@{$force{'CClist'}}, trim($i));
     }
 }
 
+if ($#ARGV >= 0 && $ARGV[0] eq "-forceowner") {
+    shift(@ARGV);
+    @{$force{'Owner'}} = (trim(shift(@ARGV)));
+}
+
+if ($#ARGV >= 0 && $ARGV[0] eq "-forceqacontact") {
+    shift(@ARGV);
+    @{$force{'QAcontact'}} = (trim(shift(@ARGV)));
+}
+
 if (($#ARGV < 0) || ($#ARGV > 1)) {
-    print "Usage error: processmail {bugid} {nametoexclude}\nOr: processmail regenerate\n";
+    print "Usage:\n processmail {bugid} {nametoexclude} " . 
+      "[-forcecc list,of,users]\n             [-forceowner name] " .
+      "[-forceqacontact name]\nor\n processmail regenerate\nor\n" .
+      " processmail rescanall\n";
     exit;
 }
 
diff --git a/query.cgi b/query.cgi
index dedd5fb6e..0c171ce58 100755
--- a/query.cgi
+++ b/query.cgi
@@ -20,6 +20,7 @@
 #
 # Contributor(s): Terry Weissman <terry@mozilla.org>
 #                 David Gardiner <david.gardiner@unisa.edu.au>
+#                 Matthias Radestock <matthias@sorted.org>
 
 use diagnostics;
 use strict;
@@ -126,7 +127,7 @@ sub ProcessFormStuff {
                       "rep_platform", "priority", "bug_severity",
                       "product", "reporter", "op_sys",
                       "component", "version", "chfield", "chfieldfrom",
-                      "chfieldto", "chfieldvalue",
+                      "chfieldto", "chfieldvalue", "target_milestone",
                       "email1", "emailtype1", "emailreporter1",
                       "emailassigned_to1", "emailcc1", "emailqa_contact1",
                       "emaillongdesc1",
@@ -232,7 +233,7 @@ sub GenerateEmailInput {
 <tr><td>
 <table cellspacing=0 cellpadding=0>
 <tr>
-<td rowspan=2 valign=top><a href="helpemailquery.html">Email:</a>
+<td rowspan=2 valign=top><a href="queryhelp.cgi#peopleinvolved">Email:</a>
 <input name="email$id" size="30" value="$defstr">&nbsp;matching as
 } . BuildPulldown("emailtype$id",
                   [["regexp", "regexp"],
@@ -274,6 +275,52 @@ sub GenerateEmailInput {
 my $emailinput1 = GenerateEmailInput(1);
 my $emailinput2 = GenerateEmailInput(2);
 
+# if using usebuggroups, then we don't want people to see products they don't
+# have access to.  remove them from the list.
+
+@::product_list = ();
+my %component_set;
+my %version_set;
+my %milestone_set;
+foreach my $p (@::legal_product) {
+  if(Param("usebuggroups")
+     && GroupExists($p)
+     && !UserInGroup($p)) {
+    # If we're using bug groups to restrict entry on products, and
+    # this product has a bug group, and the user is not in that
+    # group, we don't want to include that product in this list.
+    next;
+  }
+  push @::product_list, $p;
+  foreach my $c (@{$::components{$p}}) {
+    $component_set{$c} = 1;
+  }
+  foreach my $v (@{$::versions{$p}}) {
+    $version_set{$v} = 1;
+  }
+  foreach my $m (@{$::target_milestone{$p}}) {
+    $milestone_set{$m} = 1;
+  }
+}
+
+@::component_list = ();
+@::version_list = ();
+@::milestone_list = ();
+foreach my $c (@::legal_components) {
+  if ($component_set{$c}) {
+    push @::component_list, $c;
+  }
+}
+foreach my $v (@::legal_versions) {
+  if ($version_set{$v}) {
+    push @::version_list, $v;
+  }
+}
+foreach my $m (@::legal_target_milestone) {
+  if ($milestone_set{$m}) {
+    push @::milestone_list, $m;
+  }
+}
 
 # javascript
     
@@ -293,20 +340,20 @@ my $m;
 my $i = 0;
 my $j = 0;
 
-foreach $c (@::legal_components) {
+foreach $c (@::component_list) {
     $jscript .= "cpts['$c'] = new Array();\n";
 }
 
-foreach $v (@::legal_versions) {
+foreach $v (@::version_list) {
     $jscript .= "vers['$v'] = new Array();\n";
 }
 
 my $tm;
-foreach $tm (@::legal_target_milestone) {
+foreach $tm (@::milestone_list) {
     $jscript .= "tms['$tm'] = new Array();\n";
 }
 
-for $p (@::legal_product) {
+for $p (@::product_list) {
     if ($::components{$p}) {
         foreach $c (@{$::components{$p}}) {
             $jscript .= "cpts['$c'][cpts['$c'].length] = '$p';\n";
@@ -327,7 +374,7 @@ for $p (@::legal_product) {
 }
 
 $i = 0;
-$jscript .= q{
+$jscript .= << 'ENDSCRIPT';
 
 // Only display versions/components valid for selected product(s)
 
@@ -341,6 +388,11 @@ function selectProduct(f) {
     var cnt = 0;
     var i;
     var j;
+
+    if (!f) {
+        return;
+    }
+
     for (i=0 ; i<f.product.length ; i++) {
         if (f.product[i].selected) {
             cnt++;
@@ -348,7 +400,7 @@ function selectProduct(f) {
     }
     var doall = (cnt == f.product.length || cnt == 0);
 
-    var csel = new Array();
+    var csel = new Object();
     for (i=0 ; i<f.component.length ; i++) {
         if (f.component[i].selected) {
             csel[f.component[i].value] = 1;
@@ -382,7 +434,7 @@ function selectProduct(f) {
         }
     }
 
-    var vsel = new Array();
+    var vsel = new Object();
     for (i=0 ; i<f.version.length ; i++) {
         if (f.version[i].selected) {
             vsel[f.version[i].value] = 1;
@@ -393,13 +445,13 @@ function selectProduct(f) {
 
     for (v in vers) {
         if (typeof(vers[v]) == 'function') continue;
-        var doit = doall;
+        doit = doall;
         for (i=0 ; !doit && i<f.product.length ; i++) {
             if (f.product[i].selected) {
-                var p = f.product[i].value;
+                p = f.product[i].value;
                 for (j in vers[v]) {
                     if (typeof(vers[v][j]) == 'function') continue;
-                    var p2 = vers[v][j];
+                    p2 = vers[v][j];
                     if (p2 == p) {
                         doit = true;
                         break;
@@ -408,7 +460,7 @@ function selectProduct(f) {
             }
         }
         if (doit) {
-            var l = f.version.length;
+            l = f.version.length;
             f.version[l] = new Option(v, v);
             if (vsel[v]) {
                 f.version[l].selected = true;
@@ -416,45 +468,54 @@ function selectProduct(f) {
         }
     }
 
-    var tmsel = new Array();
-    for (i=0 ; i<f.target_milestone.length ; i++) {
-        if (f.target_milestone[i].selected) {
-            tmsel[f.target_milestone[i].value] = 1;
+ENDSCRIPT
+if (Param("usetargetmilestone")) {
+    $jscript .= q{
+      if (f.target_milestone) {
+        var tmsel = new Object();
+        for (i=0 ; i<f.target_milestone.length ; i++) {
+            if (f.target_milestone[i].selected) {
+                tmsel[f.target_milestone[i].value] = 1;
+            }
         }
-    }
-
-    f.target_milestone.options.length = 0;
-
-    for (tm in tms) {
-        if (typeof(tms[v]) == 'function') continue;
-        var doit = doall;
-        for (i=0 ; !doit && i<f.product.length ; i++) {
-            if (f.product[i].selected) {
-                var p = f.product[i].value;
-                for (j in tms[tm]) {
-                    if (typeof(tms[tm][j]) == 'function') continue;
-                    var p2 = tms[tm][j];
-                    if (p2 == p) {
-                        doit = true;
-                        break;
+    
+        f.target_milestone.options.length = 0;
+    
+        for (tm in tms) {
+            if (typeof(tms[v]) == 'function') continue;
+            doit = doall;
+            for (i=0 ; !doit && i<f.product.length ; i++) {
+                if (f.product[i].selected) {
+                    p = f.product[i].value;
+                    for (j in tms[tm]) {
+                        if (typeof(tms[tm][j]) == 'function') continue;
+                        p2 = tms[tm][j];
+                        if (p2 == p) {
+                            doit = true;
+                            break;
+                        }
                     }
                 }
             }
-        }
-        if (doit) {
-            var l = f.target_milestone.length;
-            f.target_milestone[l] = new Option(tm, tm);
-            if (tmsel[tm]) {
-                f.target_milestone[l].selected = true;
+            if (doit) {
+                l = f.target_milestone.length;
+                f.target_milestone[l] = new Option(tm, tm);
+                if (tmsel[tm]) {
+                    f.target_milestone[l].selected = true;
+                }
             }
         }
-    }
+      }
+    };
 
 }
+
+$jscript .= << 'ENDSCRIPT';
+}
 // -->
 </script>
 
-};
+ENDSCRIPT
 
 
 
@@ -477,17 +538,19 @@ push @::legal_resolution, "---"; # Oy, what a hack.
 
 my @logfields = ("[Bug creation]", @::log_columns);
 
+print"<P>Give me a <A HREF=\"queryhelp.cgi\">clue</A> about how to use this form.<P>";
+
 print qq{
 <FORM METHOD=GET ACTION="buglist.cgi">
 
 <table>
 <tr>
-<th align=left><A HREF="bug_status.html">Status</a>:</th>
-<th align=left><A HREF="bug_status.html">Resolution</a>:</th>
-<th align=left><A HREF="bug_status.html#rep_platform">Platform</a>:</th>
-<th align=left><A HREF="bug_status.html#op_sys">OpSys</a>:</th>
-<th align=left><A HREF="bug_status.html#priority">Priority</a>:</th>
-<th align=left><A HREF="bug_status.html#severity">Severity</a>:</th>
+<th align=left><A HREF="queryhelp.cgi#status">Status</a>:</th>
+<th align=left><A HREF="queryhelp.cgi#resolution">Resolution</a>:</th>
+<th align=left><A HREF="queryhelp.cgi#platform">Platform</a>:</th>
+<th align=left><A HREF="queryhelp.cgi#opsys">OpSys</a>:</th>
+<th align=left><A HREF="queryhelp.cgi#priority">Priority</a>:</th>
+<th align=left><A HREF="queryhelp.cgi#severity">Severity</a>:</th>
 };
 
 print "
@@ -602,19 +665,19 @@ print "
 
 <td align=left valign=top>
 <SELECT NAME=\"product\" MULTIPLE SIZE=5 onChange=\"selectProduct(this.form);\">
-@{[make_options(\@::legal_product, $default{'product'}, $type{'product'})]}
+@{[make_options(\@::product_list, $default{'product'}, $type{'product'})]}
 </SELECT>
 </td>
 
 <td align=left valign=top>
 <SELECT NAME=\"version\" MULTIPLE SIZE=5>
-@{[make_options(\@::legal_versions, $default{'version'}, $type{'version'})]}
+@{[make_options(\@::version_list, $default{'version'}, $type{'version'})]}
 </SELECT>
 </td>
 
 <td align=left valign=top>
 <SELECT NAME=\"component\" MULTIPLE SIZE=5>
-@{[make_options(\@::legal_components, $default{'component'}, $type{'component'})]}
+@{[make_options(\@::component_list, $default{'component'}, $type{'component'})]}
 </SELECT>
 </td>";
 
@@ -622,7 +685,7 @@ if (Param("usetargetmilestone")) {
     print "
 <td align=left valign=top>
 <SELECT NAME=\"target_milestone\" MULTIPLE SIZE=5>
-@{[make_options(\@::legal_target_milestone, $default{'target_milestone'}, $type{'target_milestone'})]}
+@{[make_options(\@::milestone_list, $default{'target_milestone'}, $type{'target_milestone'})]}
 </SELECT>
 </td>";
 }
@@ -785,7 +848,7 @@ for ($chart=0 ; exists $::FORM{"field$chart-0-0"} ; $chart++) {
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 <INPUT TYPE="submit" VALUE="Add another boolean chart" NAME="cmd-add$n-0-0" $jsmagic>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-<NOBR><A HREF="booleanchart.html">What is this stuff?</A></NOBR>
+<NOBR><A HREF="queryhelp.cgi#advancedquerying">What is this stuff?</A></NOBR>
 };
     }
     print qq{
@@ -834,19 +897,21 @@ if (!$userid) {
 </tr></table>};
     }
 
-    print "
+    print qq{
 <INPUT TYPE=radio NAME=cmdtype VALUE=asdefault> Remember this as the default query
 <BR>
 <INPUT TYPE=radio NAME=cmdtype VALUE=asnamed> Remember this query, and name it:
 <INPUT TYPE=text NAME=newqueryname>
+<br>&nbsp;&nbsp;&nbsp;&nbsp;<INPUT TYPE="checkbox" NAME="tofooter" VALUE="1">
+    and put it in my page footer.
 <BR>
-"
+    };
 }
 
-print "
+print qq{
 <NOBR><B>Sort By:</B>
 <SELECT NAME=\"order\">
-";
+};
 
 my $deforder = "'Importance'";
 my @orders = ('Bug Number', $deforder, 'Assignee');
@@ -856,6 +921,8 @@ if ($::COOKIE{'LASTORDER'}) {
     unshift(@orders, $deforder);
 }
 
+if ($::FORM{'order'}) { $deforder = $::FORM{'order'} }
+
 my $defquerytype = $userdefaultquery ? "my" : "the";
 
 print make_options(\@orders, $deforder);
@@ -870,26 +937,29 @@ if ($userdefaultquery) {
 
 print "
 </FORM>
-<P>Give me a <A HREF=\"help.html\">clue</A> about how to use this form.
-<P>
 ";
 
+###
+### I really hate this redudancy, but if somebody for some inexplicable reason doesn't like using
+### the footer for these links, they can uncomment this section. 
+###
+
+# if (UserInGroup("tweakparams")) {
+#     print "<a href=editparams.cgi>Edit Bugzilla operating parameters</a><br>\n";
+# }
+# if (UserInGroup("editcomponents")) {
+#     print "<a href=editproducts.cgi>Edit Bugzilla products and components</a><br>\n";
+# }
+# if (UserInGroup("editkeywords")) {
+#     print "<a href=editkeywords.cgi>Edit Bugzilla keywords</a><br>\n";
+# }
+# if ($userid) {
+#     print "<a href=relogin.cgi>Log in as someone besides <b>$::COOKIE{'Bugzilla_login'}</b></a><br>\n";
+# }
+# print "<a href=userprefs.cgi>Change your password or preferences.</a><br>\n";
+# print "<a href=\"enter_bug.cgi\">Report a new bug.</a><br>\n";
+# print "<a href=\"createaccount.cgi\">Open a new Bugzilla account</a><br>\n";
+# print "<a href=\"reports.cgi\">Bug reports</a><br>\n";
 
-if (UserInGroup("tweakparams")) {
-    print "<a href=editparams.cgi>Edit Bugzilla operating parameters</a><br>\n";
-}
-if (UserInGroup("editcomponents")) {
-    print "<a href=editproducts.cgi>Edit Bugzilla products and components</a><br>\n";
-}
-if (UserInGroup("editkeywords")) {
-    print "<a href=editkeywords.cgi>Edit Bugzilla keywords</a><br>\n";
-}
-if ($userid) {
-    print "<a href=relogin.cgi>Log in as someone besides <b>$::COOKIE{'Bugzilla_login'}</b></a><br>\n";
-}
-print "<a href=userprefs.cgi>Change your password or preferences.</a><br>\n";
-print "<a href=\"enter_bug.cgi\">Create a new bug.</a><br>\n";
-print "<a href=\"createaccount.cgi\">Open a new Bugzilla account</a><br>\n";
-print "<a href=\"reports.cgi\">Bug reports</a><br>\n";
 
 PutFooter();
diff --git a/queryhelp.cgi b/queryhelp.cgi
new file mode 100755
index 000000000..b4638ca14
--- /dev/null
+++ b/queryhelp.cgi
@@ -0,0 +1,1438 @@
+#!/usr/bonsaitools/bin/perl -w
+# -*- Mode: perl; indent-tabs-mode: nil -*-
+#
+# The contents of this file are subject to the Mozilla Public
+# License Version 1.1 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS
+# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+# implied. See the License for the specific language governing
+# rights and limitations under the License.
+#
+# The Original Code is the Bugzilla Bug Tracking System.
+#
+# The Initial Developer of the Original Code is Netscape Communications
+# Corporation. Portions created by Netscape are
+# Copyright (C) 1998 Netscape Communications Corporation. All
+# Rights Reserved.
+#
+# Contributor(s):         Brian Bober <boberb@rpi.edu>
+#			  Terry Weissman <terry@mozilla.org>
+#			  Tara Hernandez <tara@tequilarista.org>
+
+use vars %::FORM;
+
+use diagnostics;
+use strict;
+
+require "CGI.pl";
+
+ConnectToDatabase();
+GetVersionTable();
+
+print "Content-type: text/html\n\n";
+
+my $product = $::FORM{'product'};
+
+PutHeader("Bugzilla Query Page Help","Help", "This page is to help you learn how to use the query form.");
+
+
+
+
+
+print qq{
+
+<br>
+
+<form action="none"> <!-- Cause NS4.x is stupid. Die NS4.x you eeeevil eeeevil program! -->
+
+<a name="top"></a>
+
+<p><center><b><font size="+2">Help Using The Bugzilla Query Form</font></b><br>January, 20 2001 - 
+<a href="mailto:netdemonz\@yahoo.com">Brian Bober (netdemon)</a>.  
+<BR><I>Further heavy mutiliations by <a href="mailto:tara\@tequilarista.org">Tara Heranandez</A>, April 20, 2001.</I></CENTER>
+
+<br><center><img width="329" height="220" src="ant.jpg" border="2" alt="Da Ant"></center>
+
+<p><br><center><h3>The Sections</h3></center>
+
+<p>The query page is broken down into the following sections:
+
+<p><a href="#bugsettings">Bug Settings</a> 
+<br><a href="#peopleinvolved">People Involved</a> 
+<br><a href="#textsearch">Text Search Options</a>
+<br><a href="#moduleoptions">Module Options</a> 
+<br><a href="#advancedquerying">Advanced Querying</a>
+<br><a href="#therest">The Bottom Of The Form</a>
+
+<p>&quot;I already know how to use <a href="http://www.mozilla.org/bugs/">Bugzilla</a>, but would like <a href="#info">information</a> about Bugzilla and the author of this document.&quot;
+<br>&quot;Ok, I am almost certain the bug I discovered isn't in Bugzilla, how do I <a href="enter_bug.cgi">submit</a> the bug?&quot; - <a href= "docs/html/Bugzilla-Guide.html#BUG_WRITING">Read the guidelines first</a>!
+
+<p><br><center><h3>Tips</h3></center>
+You don't have to fill out any field on the query page you don't need. Filling out fields will limit
+your search. On the list boxes, such as Status, you can Ctrl-Click to unselect an option. 
+Until you get better, you can use the "brute force" method where you enter a very simple query and search through 
+the long list of bugs manually. Just try not to overuse this method if you don't have to as you might be slowing down
+the search for other people if there are many people searching at the same time. Finally, I would recommend learning the Boolean Chart immediately because it is extremely 
+powerful. Also, there is a navigation bar at the <a href="#bottom">bottom</a> of 
+most Bugzilla pages, and important links at the <a href="index.html">front page</a>.
+
+
+
+<p>Back to the <a href="query.cgi">Query</a>. If you typed anything in the forms already, you might want to hit back on the
+browser. When you are all done reading, do a <a href="#samplequery">sample query</a>!
+
+};
+
+
+
+
+
+print qq{
+
+<a name="bugsettings"></a>
+
+<p><br><center><h3>Bug Settings</h3></center>
+
+<center>
+
+<table width="700" bgcolor="#00afff" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td align="center" height="200">
+<table cellspacing="0">
+<tr>
+<th align="left"><A HREF="queryhelp.cgi#status">Status</a>:</th>
+<th align="left"><A HREF="queryhelp.cgi#resolution">Resolution</a>:</th>
+<th align="left"><A HREF="queryhelp.cgi#platform">Platform</a>:</th>
+<th align="left"><A HREF="queryhelp.cgi#opsys">OpSys</a>:</th>
+<th align="left"><A HREF="queryhelp.cgi#priority">Priority</a>:</th>
+<th align="left"><A HREF="queryhelp.cgi#severity">Severity</a>:</th>
+</tr>
+<tr>
+<td align="left" valign="top">
+
+<SELECT NAME="bug_status" MULTIPLE SIZE="7">
+<OPTION VALUE="UNCONFIRMED">UNCONFIRMED<OPTION VALUE="NEW">NEW<OPTION VALUE="ASSIGNED">ASSIGNED<OPTION VALUE="REOPENED">REOPENED<OPTION VALUE="RESOLVED">RESOLVED<OPTION VALUE="VERIFIED">VERIFIED<OPTION VALUE="CLOSED">CLOSED</SELECT>
+
+</td>
+<td align="left" valign="top">
+<SELECT NAME="resolution" MULTIPLE SIZE="7">
+<OPTION VALUE="FIXED">FIXED<OPTION VALUE="INVALID">INVALID<OPTION VALUE="WONTFIX">WONTFIX<OPTION VALUE="LATER">LATER<OPTION VALUE="REMIND">REMIND<OPTION VALUE="DUPLICATE">DUPLICATE<OPTION VALUE="WORKSFORME">WORKSFORME<OPTION VALUE="MOVED">MOVED<OPTION VALUE="---">---</SELECT>
+
+</td>
+<td align="left" valign="top">
+<SELECT NAME="rep_platform" MULTIPLE SIZE="7">
+<OPTION VALUE="All">All<OPTION VALUE="DEC">DEC<OPTION VALUE="HP">HP<OPTION VALUE="Macintosh">Macintosh<OPTION VALUE="PC">PC<OPTION VALUE="SGI">SGI<OPTION VALUE="Sun">Sun<OPTION VALUE="Other">Other</SELECT>
+
+</td>
+<td align="left" valign="top">
+<SELECT NAME="op_sys" MULTIPLE SIZE="7">
+<OPTION VALUE="All">All<OPTION VALUE="Windows 3.1">Windows 3.1<OPTION VALUE="Windows 95">Windows 95<OPTION VALUE="Windows 98">Windows 98<OPTION VALUE="Windows ME">Windows ME<OPTION VALUE="Windows 2000">Windows 2000<OPTION VALUE="Windows NT">Windows NT<OPTION VALUE="Mac System 7">Mac System 7<OPTION VALUE="Mac System 7.5">Mac System 7.5<OPTION VALUE="Mac System 7.6.1">Mac System 7.6.1<OPTION VALUE="Mac System 8.0">Mac System 8.0<OPTION VALUE="Mac System 8.5">Mac System 8.5<OPTION VALUE="Mac System 8.6">Mac System 8.6<OPTION VALUE="Mac System 9.0">Mac System 9.0<OPTION VALUE="Linux">Linux<OPTION VALUE="BSDI">BSDI<OPTION VALUE="FreeBSD">FreeBSD<OPTION VALUE="NetBSD">NetBSD<OPTION VALUE="OpenBSD">OpenBSD<OPTION VALUE="AIX">AIX<OPTION VALUE="BeOS">BeOS<OPTION VALUE="HP-UX">HP-UX<OPTION VALUE="IRIX">IRIX<OPTION VALUE="Neutrino">Neutrino<OPTION VALUE="OpenVMS">OpenVMS<OPTION VALUE="OS/2">OS/2<OPTION VALUE="OSF/1">OSF/1<OPTION VALUE="Solaris">Solaris<OPTION VALUE="SunOS">SunOS<OPTION VALUE="other">other</SELECT>
+
+</td>
+<td align="left" valign="top">
+<SELECT NAME="priority" MULTIPLE SIZE="7">
+<OPTION VALUE="P1">P1<OPTION VALUE="P2">P2<OPTION VALUE="P3">P3<OPTION VALUE="P4">P4<OPTION VALUE="P5">P5</SELECT>
+
+</td>
+<td align="left" valign="top">
+<SELECT NAME="bug_severity" MULTIPLE SIZE="7">
+<OPTION VALUE="blocker">blocker<OPTION VALUE="critical">critical<OPTION VALUE="major">major<OPTION VALUE="normal">normal<OPTION VALUE="minor">minor<OPTION VALUE="trivial">trivial<OPTION VALUE="enhancement">enhancement</SELECT>
+</td>
+</tr>
+</table>
+</td>
+</tr>
+</table>
+</center>
+
+<br>
+
+The <b>status</b> and <b>resolution</b> field define and track the
+life cycle of a bug. <b>Platform</b> and <b>opsys</b> describe the system
+which the bug is on. <b>Priority</b> and <b>Severity</b> are for tracking purposes.
+
+<a name="status"></a>
+<p><b>Status</b> 
+
+<ul>
+<li><b>UNCONFIRMED</b> - Nobody has validated that this bug needs to be fixed.  Users who have the correct
+permissions may confirm this bug, changing its state to NEW. You can view 
+<a href="userprefs.cgi?bank=permissions">your permissions</a> here.
+A bug may be directly resolved and marked RESOLVED but usually a bug will 
+be confirmed by the person to whom it is assigned. Usually, an UNCOMFIRMED bug
+will be left uncomfirmed until someone has verified that the bug the reporter
+submitted actually occurrs.
+
+<li><b>NEW</b> - This bug has recently been added to the assignee's list of bugs
+and must be processed. Bugs in this state may be accepted, and
+become ASSIGNED, passed on to someone else, and remain
+NEW, or resolved and marked RESOLVED.
+
+<li><b>ASSIGNED</b> - This bug is not yet resolved, but is assigned to someone who
+thinks they can fix it. From here bugs can be given to another person and become
+NEW, or resolved and become RESOLVED.
+
+<li><b>REOPENED</b> - The bug was once resolved, but the resolution was deemed
+incorrect.  For example, a WORKSFORME bug is
+REOPENED when more information shows up and the bug is now
+reproducible.  From here bugs are either marked ASSIGNED
+or RESOLVED.
+
+<li><b>RESOLVED</b> - A resolution has been made, and it is awaiting verification by
+the QA. From here bugs are either re-opened and become REOPENED, are marked 
+VERIFIED, or are closed for good and marked CLOSED.
+
+<li><b>VERIFIED</b>- QA has looked at the bug and the resolution and agrees that the
+appropriate action has been taken.
+
+<li><b>CLOSED</b> - The bug is considered dead, the resolution is correct, and the product the bug
+has been reported against is terminated or shipped. Any zombie
+bugs who choose to walk the earth again must do so by becoming
+REOPENED.  This state is rarely ever used.
+</ul>
+
+<a name="resolution"></a>
+<p><b>Resolution</b> 
+
+<p>The <b>resolution</b> field indicates what happened to this bug.
+
+<p>No resolution yet: All bugs which are in one of the "open" states (meaning the state
+has no associated resolution) 
+have the resolution set to blank. All other bugs
+will be marked with one of the following resolutions.
+
+<ul>
+<li><b>FIXED</b> - A fix for this bug is checked into the tree and tested.
+<li><b>INVALID</b> - The problem described is not a bug 
+<li><b>WONTFIX</b> - The problem described is a bug which will never be fixed.
+<li><b>LATER</b> - The problem described is a bug which will not be fixed in this
+version of the product.
+<li><b>REMIND</b> - The problem described is a bug which will probably not be fixed in this
+version of the product, but might still be.
+<li><b>DUPLICATE</b> - The problem is a duplicate of an existing bug. Marking a bug
+duplicate requires the bug number of the duplicate and that number will be placed in the 
+bug description.
+<li><b>WORKSFORME</b> - All attempts at reproducing this bug were futile, reading the
+code produces no clues as to why this behavior would occur. If
+more information appears later, please re-assign the bug, for
+now, file it.
+</ul>
+
+<a name="platform"></a>
+<p><b>Platform</b>
+<p>The <b>platform</b> field is the hardware platform against which the bug was reported.  Legal
+platforms include but are not limited to:
+
+<ul>
+<li>All (happens on all platform; cross-platform bug)<br>
+<li>Macintosh
+<li>PC
+<li>Sun
+<li>HP
+</ul>
+<p><b>Note:</b> Selecting the option "All" does not select bugs assigned against all platforms.  It
+merely selects bugs that <b>occur</b> on all platforms.
+
+<a name="opsys"></a>
+<p><b>Operating System</b>
+<p>The <b>operating system</b> field is the operating system against which the bug was reported.  Legal
+operating systems include but are not limited to:
+
+<ul>
+<li>All (happens on all operating systems; cross-platform bug)
+<li>Windows 95
+<li>Windows 2000
+<li>Mac System 8.0
+<li>Linux
+<li>Other (Not in any of these OSes)<br>
+</ul>
+
+<p>Note that the operating system implies the platform, but not always.
+For example, Linux can run on PC and Macintosh and others.
+
+<a name="priority"></a>
+<p><b>Priority</b>
+
+<p>The <b>priority</b> field describes the importance and order in which a bug should be
+fixed.  This field is utilized by the programmers/engineers to
+prioritize their work.  The priorities are from P1 (Most important) to P5
+(Least important).
+
+<a name="severity"></a>
+<p><b>Severity</b>
+
+<p>The <b>Severity</b> field describes the impact of a bug.
+
+<ul>
+<li><b>Blocker</b> - Blocks development and/or testing work.<br>
+<li><b>Critical</b> - Crashes, loss of data, severe memory leak.<br>
+<li><b>Major</b> - Major loss of function.<br>
+<li><b>Normal</b> - This is the run of the mill bug.<br>
+<li><b>Minor</b> - Minor loss of function, or other problem where an easy workaround is present.<br>
+<li><b>Trivial</b> - Cosmetic problem like misspelled words or misaligned text.<br>
+<li><b>Enhancement</b> - Request for enhancement.<br>
+</ul>
+
+};
+
+
+
+
+
+
+
+
+
+
+
+
+print qq{
+<a name="peopleinvolved"></a>
+<p><br><center><h3>People Involved</h3></center>
+<center>
+
+
+<table width="390" bgcolor="#00afff" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td height="180" align="center">
+
+<table>
+<tr>
+<td valign="middle">Email:
+<input name="email1" size="25" value="">&nbsp;</td><td valign="top">matching as:<br>
+<SELECT NAME="emailtype1"><OPTION VALUE="regexp">regexp
+<OPTION VALUE="notregexp">not regexp
+<OPTION VALUE="substring">substring
+<OPTION VALUE="exact">exact
+</SELECT>
+</td>
+</tr>
+<tr>
+<td colspan="2" align="center">Will match any of the following selected fields:</td>
+</tr>
+<tr>
+<td colspan=2>
+<center>
+<input type="checkbox" name="emailassigned_to1" value="1">Assigned To
+<input type="checkbox" name="emailreporter1" value="1">Reporter
+
+<input type="checkbox" name="emailqa_contact1" value="1">QA Contact
+</center>
+</td>
+</tr>
+<tr>
+<td colspan=2 align="center">
+<input type="checkbox" name="emailcc1" value="1">CC
+<input type="checkbox" name="emaillongdesc1" value="1">Added comment
+</td>
+</tr>
+</table>
+
+</td>
+</tr>
+</table>
+</center>
+<br>
+
+This section has been made more complicated in order to make it more powerful. Unfortunately, 
+it is not the easiest to understand. What this section lets you do is search for bugs associated
+with a certain email address.
+
+<p>
+
+To search for bugs associated with an email address:
+
+<ul>
+  <li> Type a portion of an email address into the text field.
+  <li> Click the checkbox for the fields of the bug you expect the address will be within.
+</ul>
+
+<p>
+
+You can look for up to two different email addresses. If you specify
+both, then only bugs which match both emails will show up.  This is useful to
+find bugs that were, for example, created by Ralph and assigned to
+Fred.
+
+<p>
+
+You can also use the drop down menus to specify whether you want to
+match addresses by doing a substring match, by using <a href="http://www.mozilla.org/bugs/text-searching.html">Regular
+Expressions</a>, or by exactly matching a fully specified email address.
+
+
+};
+
+
+
+
+
+
+
+
+
+
+
+print qq{
+<a name="textsearch"></a>
+<p><br><center><h3>Text Search</h3></center>
+<center>
+
+
+
+<table width="610" bgcolor="#00afff" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td align="center" height="210" >
+
+<table>
+<tr>
+<td align="right"><a href="queryhelp.cgi#summaries">Bug summary</a>:</td>
+<td><input name="short_desc" size="30" value=""></td>
+<td><SELECT NAME="short_desc_type">
+<OPTION VALUE="substring">case-insensitive substring
+<OPTION VALUE="casesubstring">case-sensitive substring
+<OPTION VALUE="allwords">all words
+<OPTION VALUE="anywords">any words
+<OPTION VALUE="regexp">regular expression
+<OPTION VALUE="notregexp">not ( regular expression )
+</SELECT></TD>
+</tr>
+<tr>
+<td align="right"><a href="queryhelp.cgi#descriptions">A description entry</a>:</td>
+<td><input name="long_desc" size="30" value=""></td>
+<td><SELECT NAME="long_desc_type">
+<OPTION VALUE="substring">case-insensitive substring
+<OPTION VALUE="casesubstring">case-sensitive substring
+<OPTION VALUE="allwords">all words
+<OPTION VALUE="anywords">any words
+<OPTION VALUE="regexp">regular expression
+<OPTION VALUE="notregexp">not ( regular expression )
+</SELECT></TD>
+</tr>
+<tr>
+<td align="right"><a href="queryhelp.cgi#url">Associated URL</a>:</td>
+<td><input name="bug_file_loc" size="30" value=""></td>
+<td><SELECT NAME="bug_file_loc_type">
+<OPTION VALUE="substring">case-insensitive substring
+<OPTION VALUE="casesubstring">case-sensitive substring
+<OPTION VALUE="allwords">all words
+<OPTION VALUE="anywords">any words
+<OPTION VALUE="regexp">regular expression
+<OPTION VALUE="notregexp">not ( regular expression )
+</SELECT></TD>
+</tr>
+<tr>
+<td align="right"><a href="queryhelp.cgi#statuswhiteboard">Status whiteboard</a>:</td>
+<td><input name="status_whiteboard" size="30" value=""></td>
+<td><SELECT NAME="status_whiteboard_type">
+<OPTION VALUE="substring">case-insensitive substring
+<OPTION VALUE="casesubstring">case-sensitive substring
+<OPTION VALUE="allwords">all words
+<OPTION VALUE="anywords">any words
+<OPTION VALUE="regexp">regular expression
+<OPTION VALUE="notregexp">not ( regular expression )
+</SELECT></TD>
+</tr>
+
+<TR>
+<TD ALIGN="right"><A HREF="queryhelp.cgi#keywords">Keywords</A>:</TD>
+<TD><INPUT NAME="keywords" SIZE="30" VALUE=""></TD>
+<TD>
+<SELECT NAME="keywords_type"><OPTION VALUE="anywords">Any of the listed keywords set
+<OPTION VALUE="allwords">All of the listed keywords set
+<OPTION VALUE="nowords">None of the listed keywords set
+</SELECT></TD></TR>
+</table>
+</td></tr>
+</table>
+</center>
+<br>
+
+
+<p>In this section, you can enter values that are searched for in all the bugs (or whatever you
+limit the bugs to in other fields). 
+You might want to look at <a href="http://www.mozilla.org/bugs/text-searching.html">Bugzilla Text Searching</a>
+to see info on <a href="http://www.mozilla.org/bugs/text-searching.html">Regular Expressions</a> and text searching. The box next to these fields decides
+how a match will be determined.<br>
+
+<a name="summaries"></a>
+<h4>Bug summary</h4>
+<p>This lets you search the summaries. The summary is one line that attempts to sum up the bug.
+
+<a name="descriptions"></a>
+<h4>A description entry</h4>
+<p>This lets you search comments. Comments can be added by anybody. Comments are the largest
+searchable area in most bugs. If you really want to find a lot of matches, search the comments.
+<BR><B>Note:</B>Because comments can get quite extensive in bugs, doing this particular type
+of query can take a long time. 
+
+<a name="url"></a>
+<h4>Associated URL</h4>
+<p>This lets you search the url field. This contains the url of the web page the bug is
+about.
+
+<a name="statuswhiteboard"></a>
+<h4>Status Whiteboard</h4>
+<p>This lets you search the bug's status whiteboard. The status whiteboard contains general
+information that engineers add.
+};
+
+
+print qq{
+<a name="keywords"></a>
+<h4>Keywords</h4>
+<br><br>Each bug can have keywords specified. The bug reporter or a 
+user with the proper permissions can edit these keywords. The following is a list of the keywords that are
+stored on this version of Bugzilla:
+};
+
+ConnectToDatabase();
+
+my $tableheader = qq{
+<p><table border="1" cellpadding="4" cellspacing="0">
+<tr bgcolor="#6666FF">
+<th align="left">Name</th>
+<th align="left">Description</th>
+<th align="left">Bugs</th>
+</tr> 
+};
+
+print $tableheader;
+
+my $line_count = 0;
+my $max_table_size = 50;
+
+SendSQL("SELECT keyworddefs.name, keyworddefs.description, 
+                COUNT(keywords.bug_id), keywords.bug_id
+         FROM keyworddefs LEFT JOIN keywords ON keyworddefs.id=keywords.keywordid
+         GROUP BY keyworddefs.id
+         ORDER BY keyworddefs.name");
+
+while (MoreSQLData()) {
+    my ($name, $description, $bugs, $onebug) = FetchSQLData();
+    if ($bugs && $onebug) {
+        # This 'onebug' stuff is silly hackery for old versions of
+        # MySQL that seem to return a count() of 1 even if there are
+        # no matching.  So, we ask for an actual bug number.  If it
+        # can't find any bugs that match the keyword, then we set the
+        # count to be zero, ignoring what it had responded.
+        my $q = url_quote($name);
+        $bugs = qq{<A HREF="buglist.cgi?keywords=$q">$bugs</A>};
+    } else {
+        $bugs = "none";
+    }
+    if ($line_count == $max_table_size) {
+        print "</table>\n$tableheader";
+        $line_count = 0;
+    }
+    $line_count++;
+    print qq{
+<tr>
+<th>$name</th>
+<td>$description</td>
+<td align="right">$bugs</td>
+</tr>
+};
+}
+
+print "</table><p>\n";
+
+quietly_check_login();
+
+if (UserInGroup("editkeywords")) {
+    print qq{<p><a href="editkeywords.cgi">Edit keywords</a>\n};
+}
+
+
+
+
+
+
+
+
+
+
+
+
+my %default;
+my %type;
+
+print qq{
+<a name="moduleoptions"></a>
+<p><br><center><h3>Module Options</h3></center>
+
+<br>
+
+<p>Module options are where you select what program, module and version the bugs you want to 
+find describe. Selecting one or more of the programs, versions, components, or milestones will limit your search.
+
+<p><a name="product"></a>
+<h4>Products</h4> 
+
+
+<p>Although all subprojects within the Mozilla project are similiar, there are several seperate
+products being developed. Each product has its own components.
+
+};
+
+
+
+
+$line_count = 0;
+$max_table_size = 50;
+my @products;
+
+$tableheader = 	qq{ <p><table border=0><tr><td>
+	<table border="1" width="100%" cellpadding="4" cellspacing="0">
+	<tr bgcolor="#6666FF">
+	<th align="left">Product</th>
+	<th align="left">Description</th></tr> };
+
+
+print qq{
+	$tableheader
+};
+
+
+SendSQL("SELECT product,description FROM products ORDER BY product");
+	while (MoreSQLData()) {
+
+	my ($product, $productdesc) = FetchSQLData();
+	push (@products, $product);
+
+	$line_count++;
+	if ($line_count > $max_table_size) {
+			print qq{
+			</table>
+			$tableheader
+		};
+	  	$line_count=1;
+	}
+
+	print qq{ <tr><th>$product</th><td>$productdesc</td></tr> };
+
+
+}
+
+
+print qq{ 	
+
+</table></td></tr></table> };
+
+if (UserInGroup("editcomponents")) {
+    print qq{<p><a href="editproducts.cgi">Edit products</a><p>};
+}
+
+print qq{
+<p><a name="version"></a>
+<h4>Version</h4>
+
+<p>This is simply the version that the bugs you want to find are marked for. 
+Many of the bugs will be marked for another version and will have their milestones 
+entered instead (milestones explained below).
+
+};
+
+
+
+
+ 
+$line_count = 0;
+$tableheader = qq{ 
+	<p>
+	<table border="1" width="100%" cellpadding="4" cellspacing="0">
+	<tr bgcolor="#6666FF">
+	<th align="left">Component</th>
+	<th align="left">Product</th>
+	<th align="left">Description</th></tr>
+};
+
+print qq{ 	
+<p><a name="component"></a>
+<h4>Component</h4>
+<p>Each product has components, against which bugs can be filed. Components are parts of 
+the product, and are assigned to a module owner. The following lists 
+components and their associated products:
+		$tableheader
+};
+foreach $product (@products)
+{
+
+	SendSQL("SELECT value,description FROM components WHERE program=" . SqlQuote($product) . " ORDER BY value");
+
+	while (MoreSQLData()) {
+
+		my ($component, $compdesc) = FetchSQLData();
+
+		$line_count++;
+		if ($line_count > $max_table_size) {
+				print qq{
+				</table>
+				$tableheader
+			};
+			$line_count=0;
+		}
+		print qq{<tr><th>$component</th><td>$product</td><td>$compdesc</td></tr>};
+	}
+
+}
+
+print qq{</table>};
+if (UserInGroup("editcomponents")) {
+    print qq{<p><a href="editcomponents.cgi">Edit components</a><p>};
+}
+
+print qq{
+<p><a name="targetmilestone"></a>
+<h4>Milestone</h4>
+
+<p>Choosing this section lets you search through bugs that have their target milestones set to certain 
+values. Milestones are kind of like versions. They are specific tentative dates where a massive
+phasing out of bugs occur and a relatively stable release is produced. For example, Mozilla.org had milestones in the
+form of "M10" or "M18", but now are in the form of "Mozilla0.9".  Bugzilla milestones are in the form of "Bugzilla 2.12",
+"Bugzilla 2.14", etc.
+
+
+};
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+print qq{
+<a name="incexcoptions"></a>
+<p><br><center><h3>Inclusion/Exclusion Options</h3></center>
+
+<center>
+
+
+<table width="480" bgcolor="#00afff" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td align="center"  height="260" >
+<table>
+
+<tr>
+<td>
+<SELECT NAME="bugidtype">
+<OPTION VALUE="include">Only
+<OPTION VALUE="exclude" >Exclude
+</SELECT>
+bugs numbered: 
+<INPUT TYPE="text" NAME="bug_id" VALUE="" SIZE=15>
+</td>
+</tr>
+<tr>
+<td>
+Changed in the last <INPUT NAME=changedin SIZE=3 VALUE=""> days
+</td>
+</tr>
+<tr>
+<td>
+Containing at least <INPUT NAME=votes SIZE=3 VALUE=""> votes
+</td>
+</tr>
+<tr>
+<td>
+Where the field(s)
+<SELECT NAME="chfield" MULTIPLE SIZE=4>
+<OPTION VALUE="[Bug creation]">[Bug creation]<OPTION VALUE="assigned_to">assigned_to<OPTION VALUE="bug_file_loc">bug_file_loc<OPTION VALUE="bug_severity">bug_severity<OPTION VALUE="bug_status">bug_status<OPTION VALUE="component">component<OPTION VALUE="everconfirmed">everconfirmed<OPTION VALUE="groupset">groupset<OPTION VALUE="keywords">keywords<OPTION VALUE="op_sys">op_sys<OPTION VALUE="priority">priority<OPTION VALUE="product">product<OPTION VALUE="qa_contact">qa_contact<OPTION VALUE="rep_platform">rep_platform<OPTION VALUE="reporter">reporter<OPTION VALUE="resolution">resolution<OPTION VALUE="short_desc">short_desc<OPTION VALUE="status_whiteboard">status_whiteboard<OPTION VALUE="target_milestone">target_milestone<OPTION VALUE="version">version<OPTION VALUE="votes">votes
+</SELECT> changed to <INPUT NAME="chfieldvalue" SIZE="10">
+</td>
+</tr>
+<tr>
+<td colspan=2>
+During dates <INPUT NAME="chfieldfrom" SIZE="10" VALUE="">
+to <INPUT NAME="chfieldto" SIZE="10" VALUE="Now">
+</td>
+</tr>
+<tr>
+<td>
+
+</td>
+</tr>
+</table>
+
+</td>
+</tr>
+</table>
+
+</center>
+<br>
+
+<p>Inclusion/Exclusion options is a powerful section that gives you the ability to include and
+exclude bugs based on values you enter.
+
+<P><b>[Only, Exclude] bugs numbered [text] </b>
+
+<p>This lets you put in a comma-delimited list of bugs you want to have your results chosen from, or those
+of which you want to exclude. It would be nice in the future if you could type in ranges, i.e. [1-1000] for 1
+to 1000. Unfortunately, you cannot do that as of now.
+
+<p><b>Changed in the last [text] days</b>
+
+<p>Lets you specify how many days ago - at maximum - a bug could have changed state.
+
+<p><b>At least [text] votes</b>
+
+<p>With this, you can choose how many votes - at minimum - a bug has. 
+
+<p><b>Where the field(s) [fields] changed to [text]</b>
+
+<p>With this, you can specify values to search for in fields that exist in the bug If you choose 
+one or more fields, you have to fill out one of the fields to the right. It might 
+be difficult to figure out what these fields mean if you are a newbie to the query. 
+They match various fields within the bug information. Optionally, you can 
+also enter what value you want the field to have changed to if you only entered one field.
+For instance, if the bug changed who it was assigned to from jon\@netscape.com 
+to brian\@netscape.com , you could enter in
+assigned_to changed to brian\@netscape.com.
+
+<p><b>During dates [text] to [text] </b>
+
+<p>Here, you can choose what dates the fields changed. "Now" can be used as an entry. Other entries should be in
+mm/dd/yyyy or yyyy-mm-dd format.
+
+
+};
+
+
+
+
+
+
+
+
+
+
+
+
+print qq{
+<a name="advancedquerying"></a>
+<p><br><center><h3>Advanced Querying Using "Boolean Charts"</h3></center>
+
+<p>The Bugzilla query page is designed to be reasonably easy to use.
+But, with such ease of use always comes some lack of power.  The
+Advanced Querying section is designed to let you do very powerful
+queries, but it's not the easiest thing to learn (or explain).
+<br>
+<p>
+<center>
+
+<table width="780" bgcolor="#00afff" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td align="center"  height="140" >
+<table>
+<tr><td>
+<table><tr><td>&nbsp;</td><td><SELECT NAME="field0-0-0"><OPTION SELECTED VALUE="noop">---
+<OPTION VALUE="groupset">groupset
+<OPTION VALUE="bug_id">Bug #
+<OPTION VALUE="short_desc">Summary
+<OPTION VALUE="product">Product
+<OPTION VALUE="version">Version
+<OPTION VALUE="rep_platform">Platform
+<OPTION VALUE="bug_file_loc">URL
+<OPTION VALUE="op_sys">OS/Version
+<OPTION VALUE="bug_status">Status
+<OPTION VALUE="status_whiteboard">Status Whiteboard
+<OPTION VALUE="keywords">Keywords
+<OPTION VALUE="resolution">Resolution
+<OPTION VALUE="bug_severity">Severity
+<OPTION VALUE="priority">Priority
+<OPTION VALUE="component">Component
+<OPTION VALUE="assigned_to">AssignedTo
+<OPTION VALUE="reporter">ReportedBy
+<OPTION VALUE="votes">Votes
+<OPTION VALUE="qa_contact">QAContact
+<OPTION VALUE="cc">CC
+<OPTION VALUE="dependson">BugsThisDependsOn
+<OPTION VALUE="blocked">OtherBugsDependingOnThis
+<OPTION VALUE="attachments.description">Attachment description
+<OPTION VALUE="attachments.thedata">Attachment data
+<OPTION VALUE="attachments.mimetype">Attachment mime type
+<OPTION VALUE="attachments.ispatch">Attachment is patch
+<OPTION VALUE="target_milestone">Target Milestone
+<OPTION VALUE="delta_ts">Last changed date
+<OPTION VALUE="(to_days(now()) - to_days(bugs.delta_ts))">Days since bug changed
+<OPTION VALUE="longdesc">Comment
+</SELECT><SELECT NAME="type0-0-0"><OPTION SELECTED VALUE="noop">---
+<OPTION VALUE="equals">equal to
+<OPTION VALUE="notequals">not equal to
+<OPTION VALUE="casesubstring">contains (case-sensitive) substring
+<OPTION VALUE="substring">contains (case-insensitive) substring
+<OPTION VALUE="notsubstring">does not contain (case-insensitive) substring
+<OPTION VALUE="regexp">contains regexp
+<OPTION VALUE="notregexp">does not contain regexp
+<OPTION VALUE="lessthan">less than
+<OPTION VALUE="greaterthan">greater than
+<OPTION VALUE="anywords">any words
+<OPTION VALUE="allwords">all words
+<OPTION VALUE="nowords">none of the words
+<OPTION VALUE="changedbefore">changed before
+<OPTION VALUE="changedafter">changed after
+<OPTION VALUE="changedto">changed to
+<OPTION VALUE="changedby">changed by
+</SELECT><INPUT NAME="value0-0-0" VALUE=""><INPUT TYPE="button" VALUE="Or" ><INPUT TYPE="button" VALUE="And" 
+	NAME="cmd-add0-1-0"></td></tr>
+    
+		<tr><td>&nbsp;</td><td align="center">
+         &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+        <INPUT TYPE="button" VALUE="Add another boolean chart" NAME="cmd-add1-0-0">
+       
+        
+</td></tr>
+</table>
+</td></tr>
+</table>
+</td>
+</tr>
+</table>
+
+</center>
+<br>
+<p>The Advanced Query (or Boolean Chart) starts with a single "term".  A term is a
+combination of two pulldown menus and a text field.
+You choose items from the menus, specifying:
+<p>Field 1: Where to look for the search term<br>
+Field 2: How to determine what is a match<br>
+Field 3: What the search term is<br>
+<br>
+<center>
+
+<table width="790" bgcolor="#00afff" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td align="center" height="160" >
+<table>
+<tr><td>
+<table><tr><td>&nbsp;</td><td><SELECT NAME="field0-0-0"><OPTION SELECTED VALUE="noop">---
+<OPTION VALUE="groupset">groupset
+<OPTION VALUE="bug_id">Bug #
+<OPTION VALUE="short_desc">Summary
+<OPTION VALUE="product">Product
+<OPTION VALUE="version">Version
+<OPTION VALUE="rep_platform">Platform
+<OPTION VALUE="bug_file_loc">URL
+<OPTION VALUE="op_sys">OS/Version
+<OPTION VALUE="bug_status">Status
+<OPTION VALUE="status_whiteboard">Status Whiteboard
+<OPTION VALUE="keywords">Keywords
+<OPTION VALUE="resolution">Resolution
+<OPTION VALUE="bug_severity">Severity
+<OPTION VALUE="priority">Priority
+<OPTION VALUE="component">Component
+<OPTION VALUE="assigned_to">AssignedTo
+<OPTION VALUE="reporter">ReportedBy
+<OPTION VALUE="votes">Votes
+<OPTION VALUE="qa_contact">QAContact
+<OPTION VALUE="cc">CC
+<OPTION VALUE="dependson">BugsThisDependsOn
+<OPTION VALUE="blocked">OtherBugsDependingOnThis
+<OPTION VALUE="attachments.description">Attachment description
+<OPTION VALUE="attachments.thedata">Attachment data
+<OPTION VALUE="attachments.mimetype">Attachment mime type
+<OPTION VALUE="attachments.ispatch">Attachment is patch
+<OPTION VALUE="target_milestone">Target Milestone
+<OPTION VALUE="delta_ts">Last changed date
+<OPTION VALUE="(to_days(now()) - to_days(bugs.delta_ts))">Days since bug changed
+<OPTION VALUE="longdesc">Comment
+</SELECT><SELECT NAME="type0-0-0"><OPTION SELECTED VALUE="noop">---
+<OPTION VALUE="equals">equal to
+<OPTION VALUE="notequals">not equal to
+<OPTION VALUE="casesubstring">contains (case-sensitive) substring
+<OPTION VALUE="substring">contains (case-insensitive) substring
+<OPTION VALUE="notsubstring">does not contain (case-insensitive) substring
+<OPTION VALUE="regexp">contains regexp
+<OPTION VALUE="notregexp">does not contain regexp
+<OPTION VALUE="lessthan">less than
+<OPTION VALUE="greaterthan">greater than
+<OPTION VALUE="anywords">any words
+<OPTION VALUE="allwords">all words
+<OPTION VALUE="nowords">none of the words
+<OPTION VALUE="changedbefore">changed before
+<OPTION VALUE="changedafter">changed after
+<OPTION VALUE="changedto">changed to
+<OPTION VALUE="changedby">changed by
+</SELECT><INPUT NAME="value0-0-0" VALUE=""></td></tr><tr><td><b>OR</b></td><td><SELECT NAME="field0-0-1"><OPTION SELECTED VALUE="noop">---
+<OPTION VALUE="groupset">groupset
+<OPTION VALUE="bug_id">Bug #
+<OPTION VALUE="short_desc">Summary
+<OPTION VALUE="product">Product
+<OPTION VALUE="version">Version
+<OPTION VALUE="rep_platform">Platform
+<OPTION VALUE="bug_file_loc">URL
+<OPTION VALUE="op_sys">OS/Version
+<OPTION VALUE="bug_status">Status
+<OPTION VALUE="status_whiteboard">Status Whiteboard
+<OPTION VALUE="keywords">Keywords
+<OPTION VALUE="resolution">Resolution
+<OPTION VALUE="bug_severity">Severity
+<OPTION VALUE="priority">Priority
+<OPTION VALUE="component">Component
+<OPTION VALUE="assigned_to">AssignedTo
+<OPTION VALUE="reporter">ReportedBy
+<OPTION VALUE="votes">Votes
+<OPTION VALUE="qa_contact">QAContact
+<OPTION VALUE="cc">CC
+<OPTION VALUE="dependson">BugsThisDependsOn
+<OPTION VALUE="blocked">OtherBugsDependingOnThis
+<OPTION VALUE="attachments.description">Attachment description
+<OPTION VALUE="attachments.thedata">Attachment data
+<OPTION VALUE="attachments.mimetype">Attachment mime type
+<OPTION VALUE="attachments.ispatch">Attachment is patch
+<OPTION VALUE="target_milestone">Target Milestone
+<OPTION VALUE="delta_ts">Last changed date
+<OPTION VALUE="(to_days(now()) - to_days(bugs.delta_ts))">Days since bug changed
+<OPTION VALUE="longdesc">Comment
+</SELECT><SELECT NAME="type0-0-1"><OPTION SELECTED VALUE="noop">---
+<OPTION VALUE="equals">equal to
+<OPTION VALUE="notequals">not equal to
+<OPTION VALUE="casesubstring">contains (case-sensitive) substring
+<OPTION VALUE="substring">contains (case-insensitive) substring
+<OPTION VALUE="notsubstring">does not contain (case-insensitive) substring
+<OPTION VALUE="regexp">contains regexp
+<OPTION VALUE="notregexp">does not contain regexp
+<OPTION VALUE="lessthan">less than
+<OPTION VALUE="greaterthan">greater than
+<OPTION VALUE="anywords">any words
+<OPTION VALUE="allwords">all words
+<OPTION VALUE="nowords">none of the words
+<OPTION VALUE="changedbefore">changed before
+<OPTION VALUE="changedafter">changed after
+<OPTION VALUE="changedto">changed to
+<OPTION VALUE="changedby">changed by
+</SELECT><INPUT NAME="value0-0-1" VALUE=""><INPUT TYPE="button" VALUE="Or" NAME="cmd-add0-0-2" ONCLICK="document.forms[0].action='query.cgi#chart' ; document.forms[0].method='POST' ; return 1;"><INPUT TYPE="button" VALUE="And" 
+	NAME="cmd-add0-1-0" ONCLICK="document.forms[0].action='query.cgi#chart' ; document.forms[0].method='POST' ; return 1;"></td></tr>
+    
+		<tr><td>&nbsp;</td><td align="center">
+         &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+        <INPUT TYPE="button" VALUE="Add another boolean chart" NAME="cmd-add1-0-0" ONCLICK="document.forms[0].action='query.cgi#chart' ; document.forms[0].method='POST' ; return 1;">
+       
+        
+</td></tr>
+</table>
+</td></tr>
+</table>
+</td>
+</tr>
+</table>
+
+</center>
+
+<br>
+<p>The real fun starts when you click on the "Or" or "And" buttons.  If
+you push the "Or" button, then you get a second term right under
+the first one.  You can then configure that term, and the result of
+the query will be anything that matches either of the terms.
+<br>
+<p>
+<center>
+
+<table width="790" bgcolor="#00afff" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td align="center" height="180" >
+
+<table>
+<tr><td>
+
+<table><tr><td>&nbsp;</td><td><SELECT NAME="field0-0-0"><OPTION SELECTED VALUE="noop">---
+<OPTION VALUE="groupset">groupset
+<OPTION VALUE="bug_id">Bug #
+<OPTION VALUE="short_desc">Summary
+<OPTION VALUE="product">Product
+<OPTION VALUE="version">Version
+<OPTION VALUE="rep_platform">Platform
+<OPTION VALUE="bug_file_loc">URL
+<OPTION VALUE="op_sys">OS/Version
+<OPTION VALUE="bug_status">Status
+<OPTION VALUE="status_whiteboard">Status Whiteboard
+<OPTION VALUE="keywords">Keywords
+<OPTION VALUE="resolution">Resolution
+<OPTION VALUE="bug_severity">Severity
+<OPTION VALUE="priority">Priority
+<OPTION VALUE="component">Component
+<OPTION VALUE="assigned_to">AssignedTo
+<OPTION VALUE="reporter">ReportedBy
+<OPTION VALUE="votes">Votes
+<OPTION VALUE="qa_contact">QAContact
+<OPTION VALUE="cc">CC
+<OPTION VALUE="dependson">BugsThisDependsOn
+<OPTION VALUE="blocked">OtherBugsDependingOnThis
+<OPTION VALUE="attachments.description">Attachment description
+<OPTION VALUE="attachments.thedata">Attachment data
+<OPTION VALUE="attachments.mimetype">Attachment mime type
+<OPTION VALUE="attachments.ispatch">Attachment is patch
+<OPTION VALUE="target_milestone">Target Milestone
+<OPTION VALUE="delta_ts">Last changed date
+<OPTION VALUE="(to_days(now()) - to_days(bugs.delta_ts))">Days since bug changed
+<OPTION VALUE="longdesc">Comment
+</SELECT><SELECT NAME="type0-0-0"><OPTION SELECTED VALUE="noop">---
+<OPTION VALUE="equals">equal to
+<OPTION VALUE="notequals">not equal to
+<OPTION VALUE="casesubstring">contains (case-sensitive) substring
+<OPTION VALUE="substring">contains (case-insensitive) substring
+<OPTION VALUE="notsubstring">does not contain (case-insensitive) substring
+<OPTION VALUE="regexp">contains regexp
+<OPTION VALUE="notregexp">does not contain regexp
+<OPTION VALUE="lessthan">less than
+<OPTION VALUE="greaterthan">greater than
+<OPTION VALUE="anywords">any words
+<OPTION VALUE="allwords">all words
+<OPTION VALUE="nowords">none of the words
+<OPTION VALUE="changedbefore">changed before
+<OPTION VALUE="changedafter">changed after
+<OPTION VALUE="changedto">changed to
+<OPTION VALUE="changedby">changed by
+</SELECT><INPUT NAME="value0-0-0" VALUE=""><INPUT TYPE="button" VALUE="Or" NAME="cmd-add0-0-1" ONCLICK="document.forms[0].action='query.cgi#chart' ; document.forms[0].method='POST' ; return 1;"></td></tr><tr><td>&nbsp;</td><td align="center" valign="middle"><b>AND</b></td></tr><tr><td>&nbsp;</td><td><SELECT NAME="field0-1-0"><OPTION SELECTED VALUE="noop">---
+<OPTION VALUE="groupset">groupset
+<OPTION VALUE="bug_id">Bug #
+<OPTION VALUE="short_desc">Summary
+<OPTION VALUE="product">Product
+<OPTION VALUE="version">Version
+<OPTION VALUE="rep_platform">Platform
+<OPTION VALUE="bug_file_loc">URL
+<OPTION VALUE="op_sys">OS/Version
+<OPTION VALUE="bug_status">Status
+<OPTION VALUE="status_whiteboard">Status Whiteboard
+<OPTION VALUE="keywords">Keywords
+<OPTION VALUE="resolution">Resolution
+<OPTION VALUE="bug_severity">Severity
+<OPTION VALUE="priority">Priority
+<OPTION VALUE="component">Component
+<OPTION VALUE="assigned_to">AssignedTo
+<OPTION VALUE="reporter">ReportedBy
+<OPTION VALUE="votes">Votes
+<OPTION VALUE="qa_contact">QAContact
+<OPTION VALUE="cc">CC
+<OPTION VALUE="dependson">BugsThisDependsOn
+<OPTION VALUE="blocked">OtherBugsDependingOnThis
+<OPTION VALUE="attachments.description">Attachment description
+<OPTION VALUE="attachments.thedata">Attachment data
+<OPTION VALUE="attachments.mimetype">Attachment mime type
+<OPTION VALUE="attachments.ispatch">Attachment is patch
+<OPTION VALUE="target_milestone">Target Milestone
+<OPTION VALUE="delta_ts">Last changed date
+<OPTION VALUE="(to_days(now()) - to_days(bugs.delta_ts))">Days since bug changed
+<OPTION VALUE="longdesc">Comment
+</SELECT><SELECT NAME="type0-1-0"><OPTION SELECTED VALUE="noop">---
+<OPTION VALUE="equals">equal to
+<OPTION VALUE="notequals">not equal to
+<OPTION VALUE="casesubstring">contains (case-sensitive) substring
+<OPTION VALUE="substring">contains (case-insensitive) substring
+<OPTION VALUE="notsubstring">does not contain (case-insensitive) substring
+<OPTION VALUE="regexp">contains regexp
+<OPTION VALUE="notregexp">does not contain regexp
+<OPTION VALUE="lessthan">less than
+<OPTION VALUE="greaterthan">greater than
+<OPTION VALUE="anywords">any words
+<OPTION VALUE="allwords">all words
+<OPTION VALUE="nowords">none of the words
+<OPTION VALUE="changedbefore">changed before
+<OPTION VALUE="changedafter">changed after
+<OPTION VALUE="changedto">changed to
+<OPTION VALUE="changedby">changed by
+</SELECT><INPUT NAME="value0-1-0" VALUE=""><INPUT TYPE="button" VALUE="Or" NAME="cmd-add0-1-1" ONCLICK="document.forms[0].action='query.cgi#chart' ; document.forms[0].method='POST' ; return 1;"><INPUT TYPE="button" VALUE="And" 
+	NAME="cmd-add0-2-0" ONCLICK="document.forms[0].action='query.cgi#chart' ; document.forms[0].method='POST' ; return 1;"></td></tr>
+    
+		<tr><td>&nbsp;</td><td align="center">
+         &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+        <INPUT TYPE="button" VALUE="Add another boolean chart" NAME="cmd-add1-0-0" ONCLICK="document.forms[0].action='query.cgi#chart' ; document.forms[0].method='POST' ; return 1;">
+       
+        
+</td></tr>
+</table>
+</td></tr>
+</table>
+</td>
+</tr>
+</table>
+
+</center>
+<br>
+<p>You can push the "And" button, and get a new term below the
+original one - seperated by the word "AND", and now the result of 
+the query will be anything that matches both sets of terms.
+
+<p>You can keep clicking "And" and "Or", and get a page with many
+terms.  "Or" has higher precedence than "And".  You
+can think of the lines of "Or" as having parenthesis around them. 
+
+<br><p>
+<center>
+
+<table width="790" bgcolor="#00afff" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td align="center" height="170" >
+
+<table>
+<tr><td>
+<table><tr><td>&nbsp;</td><td><SELECT NAME="field0-0-0"><OPTION SELECTED VALUE="noop">---
+<OPTION VALUE="groupset">groupset
+<OPTION VALUE="bug_id">Bug #
+<OPTION VALUE="short_desc">Summary
+<OPTION VALUE="product">Product
+<OPTION VALUE="version">Version
+<OPTION VALUE="rep_platform">Platform
+<OPTION VALUE="bug_file_loc">URL
+<OPTION VALUE="op_sys">OS/Version
+<OPTION VALUE="bug_status">Status
+<OPTION VALUE="status_whiteboard">Status Whiteboard
+<OPTION VALUE="keywords">Keywords
+<OPTION VALUE="resolution">Resolution
+<OPTION VALUE="bug_severity">Severity
+<OPTION VALUE="priority">Priority
+<OPTION VALUE="component">Component
+<OPTION VALUE="assigned_to">AssignedTo
+<OPTION VALUE="reporter">ReportedBy
+<OPTION VALUE="votes">Votes
+<OPTION VALUE="qa_contact">QAContact
+<OPTION VALUE="cc">CC
+<OPTION VALUE="dependson">BugsThisDependsOn
+<OPTION VALUE="blocked">OtherBugsDependingOnThis
+<OPTION VALUE="attachments.description">Attachment description
+<OPTION VALUE="attachments.thedata">Attachment data
+<OPTION VALUE="attachments.mimetype">Attachment mime type
+<OPTION VALUE="attachments.ispatch">Attachment is patch
+<OPTION VALUE="target_milestone">Target Milestone
+<OPTION VALUE="delta_ts">Last changed date
+<OPTION VALUE="(to_days(now()) - to_days(bugs.delta_ts))">Days since bug changed
+<OPTION VALUE="longdesc">Comment
+</SELECT><SELECT NAME="type0-0-0"><OPTION SELECTED VALUE="noop">---
+<OPTION VALUE="equals">equal to
+<OPTION VALUE="notequals">not equal to
+<OPTION VALUE="casesubstring">contains (case-sensitive) substring
+<OPTION VALUE="substring">contains (case-insensitive) substring
+<OPTION VALUE="notsubstring">does not contain (case-insensitive) substring
+<OPTION VALUE="regexp">contains regexp
+<OPTION VALUE="notregexp">does not contain regexp
+<OPTION VALUE="lessthan">less than
+<OPTION VALUE="greaterthan">greater than
+<OPTION VALUE="anywords">any words
+<OPTION VALUE="allwords">all words
+<OPTION VALUE="nowords">none of the words
+<OPTION VALUE="changedbefore">changed before
+<OPTION VALUE="changedafter">changed after
+<OPTION VALUE="changedto">changed to
+<OPTION VALUE="changedby">changed by
+</SELECT><INPUT NAME="value0-0-0" VALUE=""><INPUT TYPE="button" VALUE="Or" NAME="cmd-add0-0-1" ONCLICK="document.forms[0].action='query.cgi#chart' ; document.forms[0].method='POST' ; return 1;"><INPUT TYPE="button" VALUE="And" 
+	NAME="cmd-add0-1-0" ONCLICK="document.forms[0].action='query.cgi#chart' ; document.forms[0].method='POST' ; return 1;"></td></tr>
+    
+		<tr>
+		<td colspan="2"><hr></td>
+		</tr><tr><td>&nbsp;</td><td>
+		<SELECT NAME="field1-0-0"><OPTION SELECTED VALUE="noop">---
+<OPTION VALUE="groupset">groupset
+<OPTION VALUE="bug_id">Bug #
+<OPTION VALUE="short_desc">Summary
+<OPTION VALUE="product">Product
+<OPTION VALUE="version">Version
+<OPTION VALUE="rep_platform">Platform
+<OPTION VALUE="bug_file_loc">URL
+<OPTION VALUE="op_sys">OS/Version
+<OPTION VALUE="bug_status">Status
+<OPTION VALUE="status_whiteboard">Status Whiteboard
+<OPTION VALUE="keywords">Keywords
+<OPTION VALUE="resolution">Resolution
+<OPTION VALUE="bug_severity">Severity
+<OPTION VALUE="priority">Priority
+<OPTION VALUE="component">Component
+<OPTION VALUE="assigned_to">AssignedTo
+<OPTION VALUE="reporter">ReportedBy
+<OPTION VALUE="votes">Votes
+<OPTION VALUE="qa_contact">QAContact
+<OPTION VALUE="cc">CC
+<OPTION VALUE="dependson">BugsThisDependsOn
+<OPTION VALUE="blocked">OtherBugsDependingOnThis
+<OPTION VALUE="attachments.description">Attachment description
+<OPTION VALUE="attachments.thedata">Attachment data
+<OPTION VALUE="attachments.mimetype">Attachment mime type
+<OPTION VALUE="attachments.ispatch">Attachment is patch
+<OPTION VALUE="target_milestone">Target Milestone
+<OPTION VALUE="delta_ts">Last changed date
+<OPTION VALUE="(to_days(now()) - to_days(bugs.delta_ts))">Days since bug changed
+<OPTION VALUE="longdesc">Comment
+</SELECT><SELECT NAME="type1-0-0"><OPTION SELECTED VALUE="noop">---
+<OPTION VALUE="equals">equal to
+<OPTION VALUE="notequals">not equal to
+<OPTION VALUE="casesubstring">contains (case-sensitive) substring
+<OPTION VALUE="substring">contains (case-insensitive) substring
+<OPTION VALUE="notsubstring">does not contain (case-insensitive) substring
+<OPTION VALUE="regexp">contains regexp
+<OPTION VALUE="notregexp">does not contain regexp
+<OPTION VALUE="lessthan">less than
+<OPTION VALUE="greaterthan">greater than
+<OPTION VALUE="anywords">any words
+<OPTION VALUE="allwords">all words
+<OPTION VALUE="nowords">none of the words
+<OPTION VALUE="changedbefore">changed before
+<OPTION VALUE="changedafter">changed after
+<OPTION VALUE="changedto">changed to
+<OPTION VALUE="changedby">changed by
+</SELECT><INPUT NAME="value1-0-0" VALUE=""><INPUT TYPE="button" VALUE="Or" NAME="cmd-add1-0-1" ONCLICK="document.forms[0].action='query.cgi#chart' ; document.forms[0].method='POST' ; return 1;"><INPUT TYPE="button" VALUE="And" 
+	NAME="cmd-add1-1-0" ONCLICK="document.forms[0].action='query.cgi#chart' ; document.forms[0].method='POST' ; return 1;"></td></tr>
+    
+		<tr><td>&nbsp;</td><td align="center">
+         &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+        <INPUT TYPE="button" VALUE="Add another boolean chart" NAME="cmd-add2-0-0" ONCLICK="document.forms[0].action='query.cgi#chart' ; document.forms[0].method='POST' ; return 1;">
+       
+        
+</td></tr>
+</table>
+</td></tr>
+</table>
+</td>
+</tr>
+</table>
+
+
+</center>
+<br>
+<p>The most subtle thing to notice is the "Add another boolean chart" button.
+This is almost the same thing as the "And" button.  You want to use this when
+you use one of the fields where several items can be associated
+with a single bug - including: "Comments", "CC", and all the
+"changed [something]" entries.  If you have multiple terms that
+all are about one of these fields (such as one comment), it's ambiguous whether they are
+allowed to be about different instances of that field or about only that one instance.  So,
+to let you have it both ways, they always mean the same instance,
+unless the terms appear on different charts.
+
+<p>For example: if you search for "priority changed to P5" and
+"priority changed by person\@addr", it will only find bugs where the
+given person at some time changed the priority to P5.  However, if
+what you really want is to find all bugs where the milestone was
+changed at some time by the person, and someone (possibly someone
+else) at some time changed the milestone to P5, then you would put
+the two terms in two different charts.
+};
+
+
+print qq{
+<a name="therest"></a>
+<center><h3>The Rest of the Form</h3></center>
+<center>
+
+
+<table width="650" bgcolor="#00afff" border="0" cellpadding="0" cellspacing="0">
+<tr>
+<td align="center" height="190" >
+<table cellspacing="0" cellpadding="0">
+<tr>
+<td align="left">
+<INPUT TYPE="radio" NAME="cmdtype" VALUE="editnamed"> Load the remembered query:
+<select name="namedcmd"><OPTION VALUE="Assigned to me">Assigned to me</select><br>
+<INPUT TYPE="radio" NAME="cmdtype" VALUE="runnamed"> Run the remembered query:<br>
+<INPUT TYPE="radio" NAME="cmdtype" VALUE="forgetnamed"> Forget the remembered query:<br>
+<INPUT TYPE="radio" NAME="cmdtype" VALUE="asdefault"> Remember this as the default query<br>
+<INPUT TYPE="radio" NAME="cmdtype" VALUE="asnamed"> Remember this query, and name it:
+<INPUT TYPE="text" NAME="newqueryname"><br>
+<B>Sort By:</B>
+<SELECT NAME="order">
+<OPTION VALUE="Reuse same sort as last time">Reuse same sort as last time<OPTION VALUE="Bug Number">Bug Number<OPTION VALUE="'Importance'">'Importance'<OPTION VALUE="Assignee">Assignee</SELECT>
+</td>
+</tr>
+</table>
+<table>
+<tr>
+<td>
+<INPUT TYPE="button" VALUE="Reset back to the default query">
+</td>
+<td>
+<INPUT TYPE="button" VALUE="Submit query">
+</td>
+</tr>
+</table>
+</td>
+</tr>
+</table>
+
+
+
+</center>
+<br>
+<p>So you have gotten all that down, but "What is this junk at the bottom of the form?" 
+You can remember the current query as the default query page that is pulled up whenever you are
+logged on. There is also an ability to choose how you want your results sorted. When finished, 
+click "Submit".
+};
+
+
+
+
+print qq{
+
+<a name="info"></a>
+
+<br><center><h3>About This Document</h3></center>
+
+<p>Written and adapted from some older Bugzilla documents (by Terry Weissman, Tara Hernandez and others) by <a href="mailto:netdemonz\@yahoo.com">Brian Bober</a> 
+You can talk to me on irc.mozilla.org - #mozilla, #mozwebtools, #mozillazine, I go by the name netdemon.
+
+<P>Lots of Bugzilla use documention is available through Mozilla.org and other sites:
+<br><a href="http://www.mozilla.org/quality/help/beginning-duplicate-finding.html\"> 
+How To Find Previously Reported Bugs</a><br>
+<a href="http://www.mozilla.org/bugs/">Bugzilla General Information</a><br>
+<a href="http://www.mozilla.org/quality/help/bugzilla-helper.html">Mozilla Bug Report Form</a><br>
+<a href="http://www.mozilla.org/bugs/text-searching.html">Bugzilla Text Searching</a><br>
+<a href="http://www.mozilla.org/quality/bug-writing-guidelines.html">The Bug Reporting Guidelines</a><br>
+<p>My main motive for writing this was to help the engineers by giving new Bugzilla users a way to learn how to use the Bugzilla Query form. I 
+had done a rewrite of query.cgi, so I said, "What the heck, I'll write this too".
+
+<p><br><center><h3>Why Use This?</h3></center>
+
+<p>You probably looked at the Query page and said, "This page looks too difficult. Now that 
+I think about it, I don't really need to do a query". It is important to make sure that a bug
+doesn't have a duplicate before submitting it, as is stated clearly in 
+<a href="http://www.mozilla.org/quality/bug-writing-guidelines.html">The Bug Reporting Guidelines</a>. 
+The people reading your bugs are busy and usually swamped with bugs. Therefore, you are doing everyone 
+a huge favor to search for a duplicate. 
+
+
+
+};
+
+
+
+
+
+
+
+
+print qq{
+<a name="samplequery"></a>
+<p><br><center><h3>Sample Query</h3></center>
+
+<p>Ok. <b>So lets find a bug!</b>  We'll borrow the Mozilla.org database because it's handy. 
+<BR>First, lets make a <a target="_blank" href="http://bugzilla.mozilla.org/query.cgi">
+copy</a> of the query window so you can easily switch between this document and the query.
+<p>Do the following:
+<ul>
+<li>Go to the "Status" field in and select all fields (or deselect all fields).
+<li>In Text Search options, put Autoscroll in the summary and Panning in the description entry box 
+(meaning that panning is somewhere in the comments and the bug's summary has Autoscroll in it).
+</ul>
+<p>One of the results should have been <a href="http://bugzilla.mozilla.org/show_bug.cgi?id=22775">bug 22775 - [RFE] AutoScroll/Panning support...</a>
+};
+
+print qq{
+<hr>
+
+<a name="bottom"></a>
+
+</form>
+
+};
+
+
+
+PutFooter();
diff --git a/quicksearch.html b/quicksearch.html
new file mode 100644
index 000000000..900180065
--- /dev/null
+++ b/quicksearch.html
@@ -0,0 +1,146 @@
+<html>
+<head>
+  <title>Bugzilla QuickSearch</title>
+</head>
+
+<body bgcolor="#ffffff">
+
+<small>If you are already familiar with the original 
+<a href="query.cgi">Bugzilla Query Form</a>, 
+you may prefer <a href="quicksearchhack.html">this form</a>.
+</small>
+
+<p>
+<script src="localconfig.js"></script>
+<script src="quicksearch.js"></script>
+
+<h1>Bugzilla QuickSearch</h1>
+
+Type in one or more words (or word fragments) to search for:
+
+<!-- The name of the form must be "f" (used in "quicksearch.js"). -->
+
+<form name="f" action="show_bug.cgi" method="get"
+      onsubmit="QuickSearch(); return false;">
+  <table>
+    <tr>
+      <td><input type="text" size="40" name="id"/></td>
+      <td align=left><input type="submit" value="Search"/></td>
+      <!-- <td><a href="javascript:QuickSearch_Help();">[Help]</a></td> -->
+    </tr>
+  </table>
+</form>
+
+<script>
+<!--
+document.forms['f'].id.focus();
+//-->
+</script>
+
+<p>
+<h2>Getting Started</h2>
+
+<ul>
+<li> This is <b>case-insensitive</b> search.
+     <ul>
+     <li> &nbsp;<tt>table</tt>&nbsp;, &nbsp;<tt>Table</tt>&nbsp; 
+     and &nbsp;<tt>TABLE</tt>&nbsp; are all the same.
+     </ul>
+<li> This is <b>all words as substrings</b> search.<br>
+     Therefore you should <b>use stems</b> to get better results: 
+     <ul> 
+     <li> Use <tt>localiz</tt> instead of <tt>localize</tt> or 
+     <tt>localization</tt>.
+     <li> Use <tt>bookmark</tt> instead of <tt>bookmarks</tt> or 
+     <tt>bookmarking</tt>.
+     </ul>
+</ul>
+
+<a name="features"/>
+<h2>Features</h2>
+
+<ul>
+<li> Boolean operations: ``<tt>-foo</tt>''(NOT), ``<tt>foo bar</tt>''(AND), 
+     ``<tt>foo|bar</tt>''(OR).
+     <ul>
+     <li> <b>NOT</b>: Use &nbsp;<tt><b>-</b><i>foo</i></tt>&nbsp; to exclude bugs 
+          with &nbsp;<tt><i>foo</i></tt>&nbsp; in the summary.
+     <li> <b>AND</b>: Space-separated words are treated as a conjunction.
+     <li> <b>OR</b>: Within a word, "|"-separated parts denote alternatives. 
+     <li> Besides "|", a comma can be used to separate alternatives.
+     <li> OR has higher precedence than AND; AND is the top level operation
+     </ul>
+     <i>Example:</i> &nbsp;<tt>url,location bar,field -focus</tt>&nbsp; 
+     means
+     <nobr>(<tt>url</tt> OR <tt>location</tt>) AND (<tt>bar</tt> OR <tt>field</tt>) AND (NOT <tt>focus</tt>)</nobr>
+     <p>
+<li> Use &nbsp;<tt>+foo</tt>&nbsp; to search for bugs where the <b>summary</b> contains &nbsp;<tt>foo</tt>&nbsp; as a <b>substring</b>.<br>
+     Use &nbsp;<tt>#foo</tt>&nbsp; to search for bugs where the <b>summary</b> contains the <b>word</b> &nbsp;<tt>foo</tt>&nbsp; 
+     <ul>
+     <li> &nbsp;<tt>+brow</tt>&nbsp; does not find all bugs in the &nbsp;<tt>Browser</tt>&nbsp; product
+     <li> &nbsp;<tt>#title</tt>&nbsp; does not find bugs bugs with &nbsp;<tt>titlebar</tt>&nbsp; or &nbsp;<tt>titled</tt>&nbsp; 
+     </ul>
+     Phrases with special chars (space, comma, +, -, #, ...) can be <b>quoted</b>:
+     <ul>
+     <li> &nbsp;<tt>"lock icon"</tt>&nbsp;
+     </ul>
+<p>
+<li> <b>Open vs. Resolved Bugs</b>:<br>
+     By default, only open (i.e. unresolved) bugs are shown.
+     Use &nbsp;<tt>+DUP</tt>&nbsp; as first word in your query 
+     to include duplicate bugs in your search, 
+     &nbsp;<tt>FIXED</tt>&nbsp; to search for fixed bugs only,
+     or &nbsp;<tt>ALL</tt>&nbsp; to search all bugs, 
+     regardless of status or resolution. Searching for duplicates is
+     recommended if you can't find an open bug directly.
+     <ul>
+     <li> &nbsp;<tt>+DUP,FIXED table border</tt>&nbsp;
+     <li> &nbsp;<tt>ALL mouse wheel</tt>&nbsp;
+     </ul>
+<p>
+<li> <b>Focus the Search with Products &amp; Components</b>:<br>
+     To search for bugs in product "Foo Bar" only, add 
+     &nbsp;<tt>:foo</tt>&nbsp; or &nbsp;<tt>:bar</tt>&nbsp; or both
+     to your query.
+     You can do this with any substring of a 
+     <a href="describecomponents.cgi">product or component</a> 
+     to focus the search.
+</ul>
+
+<h2>More Tips</h2>
+
+<ul>
+<li> You can also use this tool to <b>lookup</b> a bug by its number.
+     <ul>
+     <li> &nbsp;<tt>12345</tt>&nbsp;
+     </ul>
+<li> A comma-separated list of bug numbers gives you a list of these bugs.
+     <ul>
+     <li> &nbsp;<tt>12345,23456,34567</tt>&nbsp;
+     </ul>
+</ul>
+
+<p>
+By default, the following fields are searched: Summary, Keywords, Product, 
+Component, Status Whiteboard. If a word looks like a part of a URL, that field
+is included in the search, too.
+<p>
+<!--
+<small>For further details, see 
+<a href="http://bugzilla.mozilla.org/show_bug.cgi?id=61561">Bug 61561</a> and 
+<a href="http://bugzilla.mozilla.org/show_bug.cgi?id=69793">Bug 69793</a>.
+</small>
+  -->
+<hr>
+
+Use the powerful 
+<a href="query.cgi">Bugzilla Query Form</a>
+for advanced queries.
+
+</body>
+</html>
+
+
+
+
+
diff --git a/quicksearch.js b/quicksearch.js
new file mode 100644
index 000000000..e4c21868b
--- /dev/null
+++ b/quicksearch.js
@@ -0,0 +1,670 @@
+//
+// This is the main JS file for QuickSearch.
+//
+// Derived from:
+//
+//   * C. Begle's SimpleSearch tool:
+//     http://www.mozilla.org/quality/help/simplesearch.html
+//     http://www.mozilla.org/quality/help/bugreport.js 
+//
+//   * Jesse Ruderman's bugzilla search page:
+//     http://www.cs.hmc.edu/~jruderma/s/bugz.html
+//
+// Created by
+//     Andreas Franke <afranke@mathweb.org>
+
+function go_to (url) {
+  document.location.href = url;
+  //window.open(url, "other" );
+}
+
+function map(l, f) {
+    l1 = new Array();
+    for (var i=0; i<l.length; i++) {
+        l1[i] = f(l[i]);
+    }
+    return l1;
+}
+
+function isPrefix(s1, s2) {
+    return (s1.length <= s2.length) &&
+           (s1 == s2.substring(0,s1.length))
+}
+
+function member(s, l) {
+    return (l.length > 0)
+    && ((s == l[0]) || member(s, l.slice(1)));
+}
+
+function add(s, l) {
+    if (! member(s, l)) {
+        l.unshift(s);
+    }
+}
+
+function addAll(l1, l2) {
+    for (var i=0; i<l1.length; i++) {
+        add(l1[i],l2);
+    }        
+}
+
+function isSubset (l1, l2) {
+    return (l1.length == 0)
+    || (member(l1[0],l2) && subset(l1.slice(1),l2));
+}
+
+// fields
+
+var f1 = new Array();
+var f2 = new Array();
+
+function add_mapping(from,to) {
+    f1[f1.length] = from;
+    f2[f2.length] = to;
+}
+
+// Status, Resolution, Platform, OS, Priority, Severity
+add_mapping("status",             "bug_status");
+add_mapping("resolution",         "resolution");  // no change
+add_mapping("platform",           "rep_platform");
+add_mapping("os",                 "op_sys");
+add_mapping("opsys",              "op_sys");
+add_mapping("priority",           "priority");    // no change
+add_mapping("pri",                "priority");
+add_mapping("severity",           "bug_severity");
+add_mapping("sev",                "bug_severity");
+// People: AssignedTo, Reporter, QA Contact, CC, Added comment (?)
+add_mapping("owner",              "assigned_to");
+add_mapping("assignee",           "assigned_to");
+add_mapping("assignedto",         "assigned_to");
+add_mapping("reporter",           "reporter");    // no change
+add_mapping("rep",                "reporter");
+add_mapping("qa",                 "qa_contact"); 
+add_mapping("qacontact",          "qa_contact");
+add_mapping("cc",                 "cc");          // no change
+// Product, Version, Component, Target Milestone
+add_mapping("product",            "product");     // no change
+add_mapping("prod",               "product");
+add_mapping("version",            "version");     // no change
+add_mapping("ver",                "version");
+add_mapping("component",          "component");   // no change
+add_mapping("comp",               "component");
+add_mapping("milestone",          "target_milestone");
+add_mapping("target",             "target_milestone");
+add_mapping("targetmilestone",    "target_milestone");
+// Summary, Description, URL, Status whiteboard, Keywords
+add_mapping("summary",            "short_desc");
+add_mapping("shortdesc",          "short_desc");
+add_mapping("desc",               "longdesc");
+add_mapping("description",        "longdesc");
+//add_mapping("comment",          "longdesc");    // ???
+          // reserve "comment" for "added comment" email search?
+add_mapping("longdesc",           "longdesc");
+add_mapping("url",                "bug_file_loc");
+add_mapping("whiteboard",         "status_whiteboard");
+add_mapping("statuswhiteboard",   "status_whiteboard");
+add_mapping("sw",                 "status_whiteboard");
+add_mapping("keywords",           "keywords");    // no change
+add_mapping("kw",                 "keywords");
+// Attachments
+add_mapping("attachment",         "attachments.description");
+add_mapping("attachmentdesc",     "attachments.description");
+add_mapping("attachdesc",         "attachments.description");
+add_mapping("attachmentdata",     "attachments.thedata");
+add_mapping("attachdata",         "attachments.thedata");
+add_mapping("attachmentmimetype", "attachments.mimetype");
+add_mapping("attachmimetype",     "attachments.mimetype");
+
+// disabled because of bug 30823:
+// "BugsThisDependsOn"       --> "dependson"
+// "OtherBugsDependingOnThis"--> "blocked"
+//add_mapping("dependson",        "dependson"); 
+//add_mapping("blocked",          "blocked");
+
+// Substring search doesn't make much sense for the following fields: 
+// "Attachment is patch"    --> "attachments.ispatch"
+// "Last changed date"      --> "delta_ts"
+// "Days since bug changed" --> "(to_days(now()) - to_days(bugs.delta_ts))"
+//"groupset"
+//"everconfirmed"
+//"bug","bugid","bugno"     --> "bug_id"
+// "votes"                  --> "votes"
+//     "votes>5", "votes>=5", "votes=>5" works now, see below
+//     "votes:5" is interpreted as "votes>=5"
+
+function findIndex(array,value) {
+    for (var i=0; i<array.length; i++)
+        if (array[i] == value) return i;
+    return -1;
+}
+
+function mapField(fieldname) {
+    var i = findIndex(f1,fieldname);
+    if (i >= 0) return f2[i];
+    return undefined;
+} 
+
+// `keywords' is defined externally
+ 
+function is_keyword(s) {
+    return member(s, keywords);
+}
+
+// `platforms' is defined externally
+
+function is_platform(str) {
+    return member (str.toLowerCase(),platforms);
+}
+
+// `severities' is defined externally
+
+function is_severity(str) {
+    return member(str.toLowerCase(),severities);
+}
+
+// `product_exceptions' is defined externally
+
+function match_product(str) {
+    s = str.toLowerCase();
+    return (s.length > 2) && (! member(s,product_exceptions));
+}
+
+// `component_exceptions are defined externally
+
+function match_component(str) {
+    s = str.toLowerCase();
+    return (s.length > 2) && (! member(s,component_exceptions));
+}
+
+var status_and_resolution = ""; // for pretty debug output only; these vars
+var charts = "";                // always hold the data from the last query
+
+// derived from http://www.mozilla.org/quality/help/bugreport.js
+
+function make_chart(expr, field, type, value) {
+    charts += "<tr>" +
+              "<td><tt>" + expr + "</tt></td>" + 
+              "<td><tt>" + field + "</tt></td>" + 
+              "<td><tt>" + type + "</tt></td>" + 
+              "<td><tt>" + value + "</tt></td>" +
+              "</tr>";
+    return "&field" + expr + "=" + field +
+           "&type"  + expr + "=" + type  +
+           "&value" + expr + "=" + escape(value).replace(/[+]/g,"%2B");
+}
+
+// returns true if at least one of comparelist had the prefix, false otherwise
+function addPrefixMatches(prefix, comparelist, resultlist) {
+    var foundMatch = false;
+    for (var i=0; i<comparelist.length; i++) {
+        if (isPrefix(prefix,comparelist[i])) {
+            foundMatch = true;
+            add(comparelist[i],resultlist);
+        }
+    }
+    return foundMatch;
+}
+
+function prefixesNotFoundError(prefixes,statusValues,resolutionValues) {
+    var txt;
+    if (prefixes.length == 1) {
+        txt = "is not a prefix ";
+    } else {
+        txt = "are not prefixes ";
+    }
+    alert(prefixes + "\n" + txt + 
+          "of one of these status or resolution values:\n" +
+          statusValues + "\n" + resolutionValues + "\n");
+}
+
+function make_query_URL(url, input, searchLong) {
+
+    status_and_resolution = "";
+    charts = "";
+
+    var searchURL = url; //bugzilla + "buglist.cgi";
+    var abort = false;
+    
+    // escape everything between quotes: "foo bar" --> "foo%20bar"
+    var parts = input.split('"');
+    if ((parts.length % 2) != 1) {
+        alert('Unterminated quote');
+        abort = true;
+        return undefined;      
+    }
+    for (var i=1; i<parts.length; i+=2) {
+        parts[i] = escape(parts[i]);
+    }
+    var input2 = parts.join('"');
+
+    // abort if there are still brackets
+    if (input2.match(/[(]|[\)]/)) {
+        alert('Brackets (...) are not supported.\n' + 
+              'Use quotes "..." for values that contain special characters.');
+        abort = true;
+        return undefined;
+    }
+
+    // translate " AND "," OR "," NOT " to space,comma,dash
+    input2 = input2.replace(/[\s]+AND[\s]+/g," ");
+    input2 = input2.replace(/[\s]+OR[\s]+/g,"|");
+    input2 = input2.replace(/[\s]+NOT[\s]+/g," -");
+
+    // now split into words at space positions
+    var word = input2.split(/[\s]+/);
+
+    // determine bug_status and resolution 
+    // the first word may contain relevant info
+
+    // `statuses_open' and `statuses_resolved' are defined externally
+    var statusOpen     = statuses_open;
+    var statusResolved = statuses_resolved;
+    var statusAll      = statusOpen.concat(statusResolved);
+
+    // `resolutions' is defined externally
+    var bug_status = statusOpen.slice().reverse(); //reverse is just cosmetic
+    var resolution = new Array();
+
+    // This function matches the given prefixes against the given statuses and
+    // resolutions. Matched statuses are added to bug_status, matched 
+    // resolutions are added to resolution. Returns true iff some matches 
+    // were found for at least one of the given prefixes.
+    function matchPrefixes(prefixes,statuses,resolutions) {
+        var failedPrefixes = new Array();
+        var foundMatch = false;
+        for (var j=0; j<prefixes.length; j++) {
+            var ok1 = addPrefixMatches(prefixes[j],statuses,bug_status);
+            var ok2 = addPrefixMatches(prefixes[j],resolutions,resolution);
+            if ((! ok1) && (! ok2)) {
+                add(prefixes[j],failedPrefixes);
+            } else {
+                foundMatch = true;
+            }
+        }
+        //report an error if some (but not all) prefixes didn't match anything
+        if (foundMatch && (failedPrefixes.length > 0)) {
+            prefixesNotFoundError(failedPrefixes,statuses,resolutions);
+            abort = true;
+        }
+        return foundMatch;
+    }
+    
+    if (word[0] == "ALL") {
+        // special case: search for bugs regardless of status
+        addAll(statusResolved,bug_status);
+        word.shift();
+    } else if (word[0] == "OPEN") {
+        // special case: search for open bugs only
+        word.shift();
+    } else if (word[0].match("^[+][A-Z]+(,[A-Z]+)*$")) {
+        // e.g. +DUP,FIX 
+        w0 = word.shift();
+        prefixes = w0.substring(1).split(",");
+        if (! matchPrefixes(prefixes,statusResolved,resolutions)) {
+            word.unshift(w0);
+        }
+    } else if (word[0].match("^[A-Z]+(,[A-Z]+)*$")) {
+        // e.g. NEW,ASSI,REOP,FIX
+        bug_status = new Array(); // reset
+        w0 = word.shift();        
+        prefixes = w0.split(",");
+        if (! matchPrefixes(prefixes,statusAll,resolutions)) {
+            word.unshift(w0);
+            bug_status = statusOpen.reverse(); //reset to default bug_status
+        }
+    } else {
+        // default case: 
+        // search for unresolved bugs only
+        // uncomment this to include duplicate bugs in the search
+        // add("DUPLICATE",resolution);
+    }
+    if (resolution.length > 0) {
+        resolution = resolution.reverse();
+        resolution.unshift("---");
+        addAll(statusResolved,bug_status);
+    }
+    bug_status = bug_status.reverse();
+    bug_status = map(bug_status,escape);
+    searchURL += "?bug_status=" +  bug_status.join("&bug_status=");
+    status_and_resolution += 'Status: <tt>'+bug_status+'</tt>';
+
+    if (resolution.length > 0) {
+        resolution = map(resolution,escape);
+        searchURL += "&resolution=" + resolution.join("&resolution=");
+        status_and_resolution += '<br>'+'Resolution: <tt>'+resolution+'</tt>';
+    }
+                              
+    // end of bug_status & resolution stuff
+
+    var chart = 0;
+    var and   = 0;
+    var or    = 0;
+
+    var negation = false;
+
+    function negate_comparison_type(type) {
+        switch(type) {
+            case "substring": return "notsubstring";
+            case "anywords":  return "nowords";
+            case "regexp":    return "notregexp";
+            default:
+                // e.g. "greaterthan" 
+                alert("Can't negate comparison type: `" + type + "'");
+                abort = true;
+        }
+    }
+
+    function add_chart(field,type,value) {
+        // undo escaping for value: '"foo%20bar"' --> 'foo bar'
+        var parts = value.split('"');
+        if ((parts.length % 2) != 1) {
+            alert('Internal error: unescaping failure');
+            abort = true;
+        }
+        for (var i=1; i<parts.length; i+=2) {
+            parts[i] = unescape(parts[i]);
+        }
+        var value2 = parts.join('');
+
+        // negate type if negation is set
+        var type2 = type;
+        if (negation) {
+            type2 = negate_comparison_type(type2);
+        }
+        searchURL += make_chart(chart+"-"+and+"-"+or,field,type2,value2);
+        or++;
+        if (negation) {
+            and++;
+            or=0;
+        }
+    }
+
+    for (var i=0; i<word.length; i++, chart++) {
+
+        w = word[i];
+        
+        negation = false;
+        if (w[0] == "-") {
+            negation = true;
+            w = w.substring(1);
+        }
+
+        switch (w[0]) {
+            case "+":
+                alternative = w.substring(1).split(/[|,]/);
+                for (var j=0; j<alternative.length; j++)
+                    add_chart("short_desc","substring",alternative[j]);
+                break;
+            case "#":
+                alternative = w.substring(1).replace(/[|,]/g," ");
+                add_chart("short_desc","anywords",alternative);
+                if (searchLong)
+                    add_chart("longdesc","anywords",alternative);
+                break;
+            case ":":
+                alternative = w.substring(1).split(",");
+                for ( var j=0; j<alternative.length; j++) {
+                    add_chart("product","substring",alternative[j]);
+                    add_chart("component","substring",alternative[j]);
+                }
+                break;
+            case "@":
+                alternative = w.substring(1).split(",");
+                for ( var j=0; j<alternative.length; j++)
+                    add_chart("assigned_to","substring",alternative[j]);
+                break;
+            case "[":
+                add_chart("short_desc","substring",w);
+                add_chart("status_whiteboard","substring",w);
+                break;
+            case "!":
+                add_chart("keywords","anywords",w.substring(1));
+                break;
+            default:
+                alternative=w.split("|");
+                for (var j=0; j<alternative.length; j++) {
+
+                    w=alternative[j];
+
+                    // votes:xx ("at least xx votes")
+                    if (w.match("^votes[:][0-9]+$")) {
+                        n = w.split(/[:]/)[1];
+                        add_chart("votes","greaterthan",String(n-1));
+                        continue;
+                    }
+                    // generic field1,field2,field3:value1,value2 notation
+                    if (w.match("^[^:]+[:][^:\/][^:]*$")) {
+                        parts = w.split(":");
+                        fields = parts[0].split(/[,]+/);
+                        values = parts[1].split(/[,]+/);
+                        for (var k=0; k<fields.length; k++) {
+                            field = mapField(fields[k]);
+                            if (field == undefined) {
+                                alert("`"+fields[k]+"'"+
+                                      " is not a valid field name.");
+                                abort = true;
+                                return undefined;
+                            } else {
+                                 for (var l=0; l<values.length; l++) {
+                                     add_chart(field,"substring",values[l]);
+                                 }
+                            }  
+                        }
+                        continue;
+                    }
+                    comma_separated_words=w.split(/[,]+/);
+                    for (var k=0; k<comma_separated_words.length; k++) {
+                        w=comma_separated_words[k];
+
+                        // platform
+                        if (is_platform(w)) {
+                            add_chart("rep_platform","substring",w);
+                            continue;
+                        }
+                        // priority
+                        if (w.match("^[pP][1-5](,[pP]?[1-5])*$")) {
+                            expr = "["+w.replace(/[p,]/g,"")+"]";
+                            add_chart("priority","regexp",expr);
+                            continue;
+                        }
+                        if (w.match("^[pP][1-5]-[1-5]$")) {
+                            expr = "["+w.substring(1)+"]";
+                            add_chart("priority","regexp",expr);
+                            continue;
+                        }
+                        // severity
+                        if (is_severity(w)) {
+                            add_chart("bug_severity","substring",w);
+                            continue;
+                        }
+                        // votes>xx
+                        if (w.match("^votes>[0-9]+$")) {
+                            n = w.split(">")[1];
+                            add_chart("votes","greaterthan",n);
+                            continue;
+                        }
+                        // votes>=xx, votes=>xx
+                        if (w.match("^votes(>=|=>)[0-9]+$")) {
+                            separator = w.match("^votes(>=|=>)[0-9]+$")[1];
+                            n = w.split(separator)[1];
+                            add_chart("votes","greaterthan",String(n-1));
+                            continue;
+                        }
+                        // really default case
+                        if (match_product(w)) {
+                            add_chart("product","substring",w);
+                        }
+                        if (match_component(w)) {
+                            add_chart("component","substring",w);
+                        }
+                        if (is_keyword(w)) {
+                            add_chart("keywords","substring",w);
+                            if (w.length > 2) {
+                                add_chart("short_desc","substring",w);
+                                add_chart("status_whiteboard","substring",w);
+                            }
+                        } else {
+                            add_chart("short_desc","substring",w);
+                            add_chart("status_whiteboard","substring",w);
+                        }
+                        if (searchLong)
+                            add_chart("longdesc","substring",w);
+                 
+                        // URL field (for IP addrs, host.names, scheme://urls)
+                        if (w.match(/[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+/)
+                           || w.match(/^[A-Za-z]+([.][A-Za-z]+)+/)
+                           || w.match(/[:][\/][\/]/)
+                           || w.match(/localhost/)
+                           || w.match(/mailto[:]?/)
+                           // || w.match(/[A-Za-z]+[:][0-9]+/) //host:port
+                           )
+                            add_chart("bug_file_loc","substring",w);
+                    }
+                }
+        }
+        and = 0;
+        or = 0;
+    }
+
+    //searchURL += "&cmdtype=doit";
+
+    if (abort == false) {
+        return searchURL;
+    } else {
+        return undefined;
+    }
+}
+
+function unique_id () {
+    return (new Date()).getTime();
+}
+
+function ShowURL(mode) {
+    var input = document.f.id.value;
+    var searchURL = make_query_URL(bugzilla+"buglist.cgi", input, false);
+    if (searchURL != undefined) {
+        var pieces = searchURL.replace(/[\?]/g,"\n?").replace(/[\&]/g,"\n&");
+        if (mode == "alert") {
+            alert(pieces);
+        } else {
+            var table = "<table border=1>" + 
+                          "<thead>" + 
+                            "<tr>" + 
+                              "<th>Chart-And-Or</th>" + 
+                              "<th>Field</th>" + 
+                              "<th>Type</th>" + 
+                              "<th>Value</th>" + 
+                            "</tr>" + 
+                          "</thead>" + 
+                          "<tbody>" + charts + "</tbody>" +
+                        "</table>";
+            var html = '<html>' + 
+                         '<head>' + 
+                           '<title>' + input + '</title>' +
+                         '</head>' +
+                         '<body>' + 
+                           '<a href="' + searchURL + '">' +
+                             'Submit Query' +
+                           '</a>' +
+                           '<p>' + status_and_resolution + 
+                           '<p>' + table + 
+                           '<pre>' +
+                             pieces.replace(/[\n]/g,"<br>") +
+                           '</pre>' +  
+                         '</body>' +
+                       '</html>';
+            var w = window.open("","preview_"+unique_id());
+            w.document.write(html);
+            w.document.close();
+        }
+    }
+}
+
+//
+// new interface: 
+// searchLong is a boolean now (not a checkbox/radiobutton)
+//
+function Search(url, input, searchLong) {
+    var inputstring = new String(input);
+    var word = inputstring.split(/[\s]+/);
+  
+    // Check for empty input
+    if ( word.length == 1 && word[0] == "" )
+        return;
+    
+    // Check for potential Bugzilla-busting intensive queries
+    if ((searchLong!=false) && word.length > 4) {  
+        var message = "Searching Descriptions for more than four words " +
+                      "will take a very long time indeed. Please choose " +
+                      "no more than four keywords for your query.";
+        alert(message);
+        return;
+    }
+    var searchURL = make_query_URL(url, inputstring, searchLong);
+    if (searchURL != undefined) {
+        go_to(searchURL);
+         //window.open(searchURL, "other" );
+    } else {
+        return;
+    }
+}
+
+//
+// original interface, untested
+//
+//function SearchForBugs (input, searchRadio) {
+//    if (searchRadio[0].checked) {
+//        return Search(bugzilla + "buglist.cgi", input, false);
+//    } else {
+//        return Search(bugzilla + "buglist.cgi", input, true);
+//    }
+//}
+
+// derived from http://www.cs.hmc.edu/~jruderma/s/bugz.html
+
+// QuickSearch combines lookup-by-bug-number and search
+// in a single textbox. It's name must be document.f.id .
+//
+// type nothing:
+//    --> go to bugzilla front page
+// type a number:
+//    --> go to that bug number
+// type several numbers, separated by commas:
+//    --> go to a buglist of just those bug numbers
+// type anything else:
+//    --> search summary, product, component, keywords, status whiteboard
+//        (and URL if it's an IP address, a host.name, or an absolute://URL)
+
+function QuickSearch ()
+{
+    var input = document.f.id.value;
+
+    if (input == "") 
+    {
+        //once this _is_ on http://bugzilla.mozilla.org, it should just return;
+        go_to(bugzilla);
+    } 
+    else if (input.match(/^[0-9, ]*$/)) 
+    {
+        if (input.indexOf(",") == -1) {
+            // only _one_ bug number --> show_bug
+            go_to(bugzilla+"show_bug.cgi?id="+escape(input));
+        } else {
+            // comma-separated bug numbers --> buglist
+            go_to(bugzilla+"buglist.cgi?bug_id="+escape(input)
+                  + "&bugidtype=include&order=bugs.bug_id");
+        }
+    }
+    else
+    {
+        Search(bugzilla+"buglist.cgi",input,false);
+    }
+    return;
+}
+
+function LoadQuery() {
+    var input = document.f.id.value;
+    Search(bugzilla+"query.cgi",input,false);
+    return;
+}
+
diff --git a/quicksearchhack.html b/quicksearchhack.html
new file mode 100644
index 000000000..7d788f626
--- /dev/null
+++ b/quicksearchhack.html
@@ -0,0 +1,352 @@
+<html>
+<head>
+  <title>Bugzilla QuickSearch (for Hackers)</title>
+</head>
+
+<body bgcolor="#ffffff">
+
+<script src="localconfig.js"></script>
+<script src="quicksearch.js"></script>
+
+<h1>Bugzilla QuickSearch (for Hackers)</h1>
+
+Type in one or more words (or word fragments) to search for:
+
+<!-- The name of the form must be "f" (used in "quicksearch.js"). -->
+
+<form name="f" action="show_bug.cgi" method="get"
+      onsubmit="QuickSearch(); return false;">
+  <table>
+    <tr>
+      <td><input type="text" size="40" name="id"/></td>
+      <td align=left><input type="submit" name="run"  value="Search"/></td>
+      <td align=left><input type="button" name="load" value="Load Query"
+                      onclick="LoadQuery();" />
+      </td>
+    </tr>
+  </table>
+</form>
+
+<script>
+<!--
+document.forms['f'].id.focus();
+//-->
+</script>
+
+<p>
+This is a case-insensitive ``all words as substrings'' search;
+words are separated by spaces. 
+By default, the following fields are relevant: Summary, Keywords, 
+Product, Component, Status Whiteboard. If a word looks like a part of a
+URL, that field is included in the search, too.
+<p>
+The generic format for a ``word'' is
+&nbsp;<tt>field1,...,fieldN:value1,...,valueM</tt>&nbsp;.
+A bug qualifies if at least one of the values occurs as a substring in 
+at least one of the fields. 
+For example, &nbsp;<tt>owner,reporter,qa:ibm,sun</tt>&nbsp;
+will give you bugs where the owner, reporter, or qa contact 
+has an email address that contains 
+&nbsp;<tt>ibm</tt>&nbsp; or &nbsp;<tt>sun</tt>&nbsp;.
+If only &nbsp;<tt>value1,...,valueM</tt>&nbsp; is given,
+the prefix (roughly) defaults to &nbsp;<tt>summary,keywords,product,component,statuswhiteboard:</tt>&nbsp; as noted above.
+You can use &nbsp;<tt>-<i>word</i></tt>&nbsp; to express the logical negation
+of &nbsp;<tt><i>word</i></tt>.&nbsp;
+<p>
+Here is a complete listing of available fields (the Shortcut column is just 
+for access speed):
+<p>
+
+<table border=1>
+<thead>
+<tr>
+  <td><b>Searched by default</b></td>
+  <td><b>Shortcut</b></td>
+  <td><b>Field Name</b></td>
+  <td><b>Aliases</b></td>
+  <td><b>Description</b></td>
+</tr>
+</thead>
+
+<!-- Status, Resolution, Platform, OS, Priority, Severity -->
+
+<tr>
+  <td>&nbsp;</td>
+  <td rowspan=2><tt><nobr>UNCO,NEW,...,CLOS,</nobr><br><nobr>FIX,DUP,...</nobr> <i><nobr>(as first word)</nobr></i></tt></td>
+  <td><tt>status</tt></td>
+  <td>&nbsp;</td>
+  <td><a href="bug_status.html">Status</a> 
+      <i>("bug_status")</i>
+  </td>
+</tr>
+<tr>
+  <td>&nbsp;</td>
+  <td><tt>resolution</tt></td>
+  <td>&nbsp;</td>
+  <td><a href="bug_status.html">Resolution</a></td>
+</tr>
+<tr>
+  <td>&nbsp;</td>
+  <td><i>as-is</i></td>
+  <td><tt>platform</tt></td>
+  <td>&nbsp;</td>
+  <td><a href="bug_status.html#rep_platform">Platform</a> <i>("rep_platform")</i></td>
+</tr>
+<tr>
+  <td>&nbsp;</td>
+  <td>&nbsp;</td>
+  <td><tt>os</tt></td>
+  <td><tt>opsys</tt></td>
+  <td><a href="bug_status.html#op_sys">OS</a> <i>("op_sys")</i></td>
+</tr>
+<tr>
+  <td>&nbsp;</td>
+  <td><tt>p1,p2</tt> <i>or</i> <tt>p1-2</tt></td>
+  <td><tt>priority</tt></td>
+  <td><tt>pri</tt></td>
+  <td><a href="bug_status.html#priority">Priority</a></td>
+</tr>
+<tr>
+  <td>&nbsp;</td>
+  <td><tt>blo,cri,...,enh</tt></td>
+  <td><tt>severity</tt></td>
+  <td><tt>sev</tt></td>
+  <td><a href="bug_status.html#severity">Severity</a> <i>("bug_severity")</i></td>
+</tr>
+
+<!-- People: AssignedTo, Reporter, QA Contact, CC, Added comment -->
+<!-- Added comment is missing!!!! -->
+
+<tr>
+  <td>&nbsp;</td>
+  <td><b>@</b><i>owner</i></td>
+  <td><tt>assignedto</tt></td>
+  <td><tt>assignee, owner</tt></td>
+  <td><a href="bug_status.html#assigned_to">Assignee</a> <i>("assigned_to")</i></td>
+</tr>
+<tr>
+  <td>&nbsp;</td>
+  <td>&nbsp;</td>
+  <td><tt>reporter</tt></td>
+  <td><tt>rep</tt></td>
+  <td>Reporter (email)</td>
+</tr>
+<tr>
+  <td>&nbsp;</td>
+  <td>&nbsp;</td>
+  <td><tt>qa</tt></td>
+  <td><tt>qacontact</tt></td>
+  <td>QA Contact (email) <i>("qa_contact")</i></td>
+</tr>
+<tr>
+  <td>&nbsp;</td>
+  <td>&nbsp;</td>
+  <td><tt>cc</tt></td>
+  <td>&nbsp;</td>
+  <td>CC (email)</td>
+</tr>
+
+<!-- Product, Version, Component, Target Milestone -->
+
+<tr>
+  <td><i>yes</i></td>
+  <td rowspan=2><b>:</b><i>area</i></td>
+  <td><tt>product</tt></td>
+  <td><tt>prod</tt></td>
+  <td>Product (enum)</td>
+</tr>
+<tr>
+  <td><i>yes</i></td>
+  <td><tt>component</tt></td>
+  <td><tt>comp</tt></td>
+  <td><a href="describecomponents.cgi">Component</a></td>
+</tr>
+<tr>
+  <td>&nbsp;</td>
+  <td>&nbsp;</td>
+  <td><tt>version</tt></td>
+  <td><tt>ver</tt></td>
+  <td>Version (enum)</td>
+</tr>
+<tr>
+  <td>&nbsp;</td>
+  <td>&nbsp;</td>
+  <td><tt>milestone</tt></td>
+  <td><tt>target, targetmilestone</tt></td>
+  <td>Target Milestone <i>("target_milestone")</i></td>
+</tr>
+
+<!-- Summary, Description, URL, Status whiteboard, Keywords -->
+
+<tr>
+  <td><i>yes</i></td>
+  <td>&nbsp;</td>
+  <td><tt>summary</tt></td>
+  <td><tt>shortdesc</tt></td>
+  <td>Bug Summary (short text)<i>("short_desc")</i></td>
+</tr>
+<tr>
+  <td>&nbsp;</td>
+  <td>&nbsp;</td>
+  <td><tt>description</tt></td>
+  <td><tt>desc, longdesc<!--, comment--></tt></td>
+  <!-- reserve "comment" for "added comment" email search?! -->
+  <td>Bug Description / Comments (long text)</td>
+</tr>
+<tr>
+  <td><i>depends</i></td>
+  <td>&nbsp;</td>
+  <td><tt>url</tt></td>
+  <td>&nbsp;</td>
+  <td>URL <i>("bug_file_loc")</i></td>
+</tr>
+<tr>
+  <td><i>yes</i></td>
+  <td>&nbsp;</td>
+  <td><tt>statuswhiteboard</tt></td>
+  <td><tt>sw, whiteboard</tt></td>
+  <td>Status Whiteboard <i>("status_whiteboard")</i></td>
+</tr>
+<tr>
+  <td><i>yes</i></td>
+  <td><b>!</b><i>keyword</i></td>
+  <td><tt>keywords</tt></td>
+  <td><tt>kw</tt></td>
+  <td><a href="describekeywords.cgi">Keywords</a></td>
+</tr>
+
+<!-- Attachments -->
+
+<tr>
+  <td>&nbsp;</td>
+  <td>&nbsp;</td>
+  <td><tt>attachmentdesc</tt></td>
+  <td><tt>attachdesc</tt></td>
+  <td>Attachment Description <i>("attachments.description")</i></td>
+</tr>
+<tr>
+  <td>&nbsp;</td>
+  <td>&nbsp;</td>
+  <td><tt>attachmentdata</tt></td>
+  <td><tt>attachdata</tt></td>
+  <td>Attachment Data <i>("attachments.thedata")</i></td>
+</tr>
+<tr>
+  <td>&nbsp;</td>
+  <td>&nbsp;</td>
+  <td><tt>attachmentmimetype</tt></td>
+  <td><tt>attachmimetype</tt></td>
+  <td>Attachment mime-type <i>("attachments.mimetype")</i></td>
+</tr>
+
+</table>
+
+<p>
+Examples for some useful abbreviations:
+<p>
+<table border=1>
+<thead>
+<tr>
+  <td><b>Syntax</b></td>
+  <td><b>Semantics and Examples</b></td>
+</tr>
+</thead>
+
+<!--
+<tr>
+  <td><i>STAT</i> <i>(as first word)</i></td>
+  <td><b>status,resolution:</b><i>STAT</i></td>
+</tr>
+<tr>
+  <td></td>
+  <td></td>
+</tr>
+<tr>
+  <td><tt>ALL</tt> <i>(as first word)</i></td>
+  <td><i>include all resolved bugs in your query</i></td>
+</tr>
+<tr>
+  <td><tt>+DUP,FIXED</tt> <i>(as first word)</i></td>
+  <td><i>include DUPLICATE and FIXED bugs in your search</i></td>
+</tr>
+-->
+
+<tr>
+  <td><b>:</b><i>area</i></td>
+  <td><b>product,component:</b><i>area</i></td>
+</tr>
+<!--
+<tr>
+  <td><tt>:browser</tt></td>
+  <td><i>bugs in the Browser product</i></td>
+</tr>
+ <td><tt>:mail</tt></td>
+  <td><i>bugs in the MailNews product</td>
+</tr>
+<tr>
+  <td><tt>:xbl</tt></td>
+  <td><i>bugs in the XBL component</i></td>
+</tr>
+  -->
+<tr>
+  <td><i>sev</i></td>
+  <td><b>severity:</b><i>sev</i></td>
+</tr>
+<tr>
+  <td><tt>blo,cri,maj</tt></td>
+  <td><i>severe bugs</td>
+</tr>
+<tr>
+  <td><tt>enh</tt></td>
+  <td><i>enhancement requests</i></td>
+</tr>
+<tr>
+  <td><b>p</b><i>level</i></td>
+  <td><b>priority:</b><i>level</i></td>
+</tr>
+<tr>
+  <td><tt>p1<tt></td>
+  <td><i>very high-priority bugs</i></td>
+</tr>
+<tr>
+  <td><tt>p1-2</tt></td>
+  <td><i>high-priority bugs</td>
+</tr>
+<tr>
+  <td><b>@</b><i>owner</i></td>
+  <td><b>assignedto:</b><i>owner</i></td>
+</tr>
+<!--
+<tr>
+  <td><tt>@nobody</tt></td>
+  <td><i>ownerless bugs</i></td>
+</tr>
+<tr>
+  <td><tt>@mozilla.org</tt></td>
+  <td><i>bugs assigned to mozilla.org members</i></td>
+</tr>
+  -->
+<tr>
+  <td><b>!</b><i>keyword</i></td>
+  <td><b>keywords:</b><i>keyword</i></td>
+</tr>
+<!--
+<tr>
+  <td><tt>!crash</tt></td>
+  <td><i>crasher bugs</i></td>
+</tr>
+<tr>
+  <td><tt>!helpwanted</tt></td>
+  <td><i>bugs waiting for your help</i></td>
+</tr>
+  -->
+</table>
+
+<p>
+More information can be found in the
+<a href="quicksearch.html#features">&quot;Features&quot;</a> section 
+on the <a href="quicksearch.html">introductory page</a>.
+
+</body>
+</html>
+
diff --git a/reports.cgi b/reports.cgi
index be21d0d6c..8fefd50ac 100755
--- a/reports.cgi
+++ b/reports.cgi
@@ -25,19 +25,34 @@
 #    Added -All- report, change "nobanner" to "banner" (it is strange to have a
 #    list with 2 positive and 1 negative choice), default links on, add show
 #    sql comment.
+# Joe Robins <jmrobins@tgix.com>,
+#    If using the usebuggroups parameter, users shouldn't be able to see
+#    reports for products they don't have access to.
+# Gervase Markham <gerv@gerv.net> and Adam Spiers <adam@spiers.net>
+#    Added ability to chart any combination of resolutions/statuses.
+#    Derive the choice of resolutions/statuses from the -All- data file
+#    Removed hardcoded order of resolutions/statuses when reading from
+#    daily stats file, so now works independently of collectstats.pl
+#    version
+#    Added image caching by date and datasets
 
 use diagnostics;
 use strict;
-use GD;
+
+eval "use GD";
+my $use_gd = $@ ? 0 : 1;
 eval "use Chart::Lines";
+$use_gd = 0 if $@;
 
 require "CGI.pl";
-require "globals.pl";
+use vars qw(%FORM); # globals from CGI.pl
 
-use vars @::legal_product;
+require "globals.pl";
+use vars qw(@legal_product); # globals from er, globals.pl
 
 my $dir = "data/mining";
-my $week = 60 * 60 * 24 * 7;
+my $graph_dir = "graphs";
+
 my @status = qw (NEW ASSIGNED REOPENED);
 my %bugsperperson;
 
@@ -45,84 +60,115 @@ my %bugsperperson;
 # functions differently than the value passed in
 
 my %reports = 
-	( 
-	"most_doomed" => \&most_doomed,
-	"most_doomed_for_milestone" => \&most_doomed_for_milestone,
-	"most_recently_doomed" => \&most_recently_doomed,
-	"show_chart" => \&show_chart,
-	);
-
-print "Content-type: text/html\n\n";
-
-# If we're here for the first time, give a banner.  Else respect the banner flag.
-if ( (!defined $::FORM{'product'}) || ($::FORM{'banner'})  )
-        {
-        PutHeader ("Bug Reports")
-        }
-else
-        {
-	print("<html><head><title>Bug Reports</title></head><body bgcolor=\"#FFFFFF\">");
-        }
-
+    ( 
+    "most_doomed" => \&most_doomed,
+    "most_doomed_for_milestone" => \&most_doomed_for_milestone,
+    "most_recently_doomed" => \&most_recently_doomed,
+    "show_chart" => \&show_chart,
+    );
+
+# If we're using bug groups for products, we should apply those restrictions
+# to viewing reports, as well.  Time to check the login in that case.
 ConnectToDatabase(1);
+quietly_check_login();
+
+print "Content-type: text/html\n";
+
+# Changing attachment to inline to resolve 46897 - zach@zachlipton.com
+print "Content-disposition: inline; filename=bugzilla_report.html\n\n";
+
+# If we're here for the first time, give a banner. Else respect the banner flag.
+if ( (!defined $FORM{'product'}) || ($FORM{'banner'})  ) {
+    PutHeader ("Bug Reports")
+}
+else {
+    print("<html><head><title>Bug Reports</title></head><body bgcolor=\"#FFFFFF\">");
+}
+
 GetVersionTable();
 
+# If the usebuggroups parameter is set, we don't want to list all products.
+# We only want those products that the user has permissions for.
 my @myproducts;
-push( @myproducts, "-All-", @::legal_product );
-
-$::FORM{'output'} = $::FORM{'output'} || "most_doomed"; # a reasonable default
-
-if (! defined $::FORM{'product'})
-	{
-	&choose_product;
-	}
-else
-	{
-	# we want to be careful about what subroutines 
-	# can be called from outside. modify %reports
-	# accordingly when a new report type is added
-
-	if (! exists $reports{$::FORM{'output'}})
-		{
-		$::FORM{'output'} = "most_doomed"; # a reasonable default
-		}
-	
-	my $f = $reports{$::FORM{'output'}};
-
-	if (! defined $f)
-		{
-		print "start over, your form data was all messed up.<p>\n";
-		foreach (keys %::FORM)
-			{
-			print "<font color=blue>$_</font> : " . 
-				($::FORM{$_} ? $::FORM{$_} : "undef") . "<br>\n";
-			}
-                PutFooter() if $::FORM{banner};
-		exit;
-		}
-
-	&{$f};
-	}
+if(Param("usebuggroups")) {
+    push( @myproducts, "-All-");
+    foreach my $this_product (@legal_product) {
+        if(GroupExists($this_product) && !UserInGroup($this_product)) {
+            next;
+        } else {
+            push( @myproducts, $this_product )
+        }
+    }
+} else {
+    push( @myproducts, "-All-", @legal_product );
+}
+
+$FORM{'output'} ||= "most_doomed"; # a reasonable default
+
+if (! defined $FORM{'product'}) {
+    &choose_product;
+}
+else {
+    # If usebuggroups is on, we don't want people to be able to view
+    # reports for products they don't have permissions for...
+    if(Param("usebuggroups") &&
+       GroupExists($FORM{'product'}) &&
+       !UserInGroup($FORM{'product'}))
+    {
+        print "<H1>Permission denied.</H1>\n";
+        print "Sorry; you do not have the permissions necessary to view\n";
+        print "reports for this product.\n";
+        print "<P>\n";
+        PutFooter();
+        exit;
+    }
+          
+    # we want to be careful about what subroutines 
+    # can be called from outside. modify %reports
+    # accordingly when a new report type is added
+
+    if (! exists $reports{$FORM{'output'}}) {
+        $FORM{'output'} = "most_doomed"; # a reasonable default
+    }
+    
+    my $f = $reports{$FORM{'output'}};
+
+    if (! defined $f) {
+        print "start over, your form data was all messed up.<p>\n";
+        foreach (keys %::FORM) {
+            print "<font color=blue>$_</font> : " . 
+                ($FORM{$_} ? $FORM{$_} : "undef") . "<br>\n";
+        }
+        PutFooter() if $FORM{banner};
+        exit;
+    }
+
+    &{$f};
+}
 
 print <<FIN;
 <p>
 FIN
 
-PutFooter() if $::FORM{banner};
+PutFooter() if $FORM{banner};
 
 
 ##################################
 # user came in with no form data #
 ##################################
 
-sub choose_product
-	{
-	my $product_popup = make_options (\@myproducts, $myproducts[0]);
-	my $charts = defined $Chart::Lines::VERSION && -d $dir ? "<option value=\"show_chart\">Bug Charts" : "";
-	# get rid of warning:
-	$Chart::Lines::VERSION = $Chart::Lines::VERSION;
-
-	print <<FIN;
+sub choose_product {
+    my $product_popup = make_options (\@myproducts, $myproducts[0]);
+  
+    my $datafile = daily_stats_filename('-All-');
+
+    # Can we do bug charts?  
+         my $do_charts = ($use_gd && -d $dir && -d $graph_dir &&
+                              open(DATA, "$dir/$datafile"));
+ 
+     my $charts = $do_charts ? "<option value=\"show_chart\">Bug Charts" : "";
+ 
+    print <<FIN;
 <center>
 <h1>Welcome to the Bugzilla Query Kitchen</h1>
 <form method=get action=reports.cgi>
@@ -141,25 +187,63 @@ $product_popup
 <select name="output">
 <option value="most_doomed">Bug Counts
 FIN
-        if (Param('usetargetmilestone')) {
-            print "<option value=\"most_doomed_for_milestone\">Most Doomed";
-            }
-        print "<option value=\"most_recently_doomed\">Most Recently Doomed";
-	print <<FIN;
+    if (Param('usetargetmilestone')) {
+        print "<option value=\"most_doomed_for_milestone\">Most Doomed";
+    }
+    print "<option value=\"most_recently_doomed\">Most Recently Doomed";
+    print <<FIN;
 $charts
 </select>
+</tr>
+FIN
+
+  if ($do_charts) {
+      print <<FIN;
+      <tr>
+      <td align=center><b>Chart datasets:</b></td>
+      <td align=center>
+      <select name="datasets" multiple size=5>
+FIN
+
+      my @datasets = ();
+
+      while (<DATA>) {
+          if (/^# fields?: (.+)\s*$/) {
+              @datasets = grep ! /date/i, (split /\|/, $1);
+              last;
+          }
+      }
+
+      close(DATA);
+
+      my %default_sel = map { $_ => 1 }
+                            qw/UNCONFIRMED NEW ASSIGNED REOPENED/;
+      foreach my $dataset (@datasets) {
+          my $sel = $default_sel{$dataset} ? ' selected' : '';
+          print qq{<option value="$dataset:"$sel>$dataset</option>\n};
+      }
+
+      print <<FIN;
+      </select>
+      </td>
+      </tr>
+FIN
+  }
+
+print <<FIN;
 <tr>
 <td align=center><b>Switches:</b></td>
 <td align=left>
 <input type=checkbox name=links checked value=1>&nbsp;Links to Bugs<br>
 <input type=checkbox name=banner checked value=1>&nbsp;Banner<br>
 FIN
-	if (Param('usequip')) {
-	    print "<input type=checkbox name=quip value=1>&nbsp;Quip<br>";
-	} else {
-            print "<input type=hidden name=quip value=0>";
-        }
-	print <<FIN;
+  
+    if (Param('usequip')) {
+        print "<input type=checkbox name=quip value=1>&nbsp;Quip<br>";
+    } else {
+        print "<input type=hidden name=quip value=0>";
+    }
+    print <<FIN;
 </td>
 </tr>
 <tr>
@@ -173,30 +257,29 @@ FIN
 FIN
 #Add this above to get a control for showing the SQL query:
 #<input type=checkbox name=showsql value=1>&nbsp;Show SQL<br>
-        PutFooter();
-	}
+    PutFooter();
+}
 
-sub most_doomed
-	{
-	my $when = localtime (time);
+sub most_doomed {
+    my $when = localtime (time);
 
-	print <<FIN;
+    print <<FIN;
 <center>
 <h1>
-Bug Report for $::FORM{'product'}
+Bug Report for $FORM{'product'}
 </h1>
 $when<p>
 FIN
 
 # Build up $query string
-	my $query;
-	$query = <<FIN;
+    my $query;
+    $query = <<FIN;
 select 
-	bugs.bug_id, bugs.assigned_to, bugs.bug_severity,
-	bugs.bug_status, bugs.product, 
-	assign.login_name,
-	report.login_name,
-	unix_timestamp(date_format(bugs.creation_ts, '%Y-%m-%d %h:%m:%s'))
+    bugs.bug_id, bugs.assigned_to, bugs.bug_severity,
+    bugs.bug_status, bugs.product, 
+    assign.login_name,
+    report.login_name,
+    unix_timestamp(date_format(bugs.creation_ts, '%Y-%m-%d %h:%m:%s'))
 
 from   bugs,
        profiles assign,
@@ -206,78 +289,75 @@ where  bugs.assigned_to = assign.userid
 and    bugs.reporter = report.userid
 FIN
 
-	if( $::FORM{'product'} ne "-All-" ) {
-		$query .= "and    bugs.product=".SqlQuote($::FORM{'product'});
-	}
-
-	$query .= <<FIN;
-and 	 
-	( 
-	bugs.bug_status = 'NEW' or 
-	bugs.bug_status = 'ASSIGNED' or 
-	bugs.bug_status = 'REOPENED'
-	)
+    if ($FORM{'product'} ne "-All-" ) {
+        $query .= "and    bugs.product=".SqlQuote($FORM{'product'});
+    }
+
+    $query .= <<FIN;
+and      
+    ( 
+    bugs.bug_status = 'NEW' or 
+    bugs.bug_status = 'ASSIGNED' or 
+    bugs.bug_status = 'REOPENED'
+    )
 FIN
 # End build up $query string
 
-	print "<font color=purple><tt>$query</tt></font><p>\n" 
-		unless (! exists $::FORM{'showsql'});
-
-	SendSQL ($query);
-	
-	my $c = 0;
-
-	my $quip = "Summary";
-	my $bugs_count = 0;
-	my $bugs_new_this_week = 0;
-	my $bugs_reopened = 0;
-	my %bugs_owners;
-	my %bugs_summary;
-	my %bugs_status;
-	my %bugs_totals;
-	my %bugs_lookup;
-
-	#############################
-	# suck contents of database # 
-	#############################
-
-	while (my ($bid, $a, $sev, $st, $prod, $who, $rep, $ts) = FetchSQLData())
-		{
-		next if (exists $bugs_lookup{$bid});
-		
-		$bugs_lookup{$bid} ++;
-		$bugs_owners{$who} ++;
-		$bugs_new_this_week ++ if (time - $ts <= $week);
-		$bugs_status{$st} ++;
-		$bugs_count ++;
-		
-		push @{$bugs_summary{$who}{$st}}, $bid;
-		
-		$bugs_totals{$who}{$st} ++;
-		}
-
-	if ($::FORM{'quip'})
-		{
-		if (open (COMMENTS, "<data/comments")) 
-			{
-    	my @cdata;
-			while (<COMMENTS>) 
-				{
-				push @cdata, $_;
-				}
-			close COMMENTS;
-			$quip = "<i>" . $cdata[int(rand($#cdata + 1))] . "</i>";
-			}
-		} 
-
-	#########################
-	# start painting report #
-	#########################
-
-        $bugs_status{'NEW'}      ||= '0';
-        $bugs_status{'ASSIGNED'} ||= '0';
-        $bugs_status{'REOPENED'} ||= '0';
-	print <<FIN;
+    print "<font color=purple><tt>$query</tt></font><p>\n" 
+        unless (! exists $FORM{'showsql'});
+
+    SendSQL ($query);
+    
+    my $c = 0;
+
+    my $quip = "Summary";
+    my $bugs_count = 0;
+    my $bugs_new_this_week = 0;
+    my $bugs_reopened = 0;
+    my %bugs_owners;
+    my %bugs_summary;
+    my %bugs_status;
+    my %bugs_totals;
+    my %bugs_lookup;
+
+    #############################
+    # suck contents of database # 
+    #############################
+
+    my $week = 60 * 60 * 24 * 7;
+    while (my ($bid, $a, $sev, $st, $prod, $who, $rep, $ts) = FetchSQLData()) {
+        next if (exists $bugs_lookup{$bid});
+        
+        $bugs_lookup{$bid} ++;
+        $bugs_owners{$who} ++;
+        $bugs_new_this_week ++ if (time - $ts <= $week);
+        $bugs_status{$st} ++;
+        $bugs_count ++;
+        
+        push @{$bugs_summary{$who}{$st}}, $bid;
+        
+        $bugs_totals{$who}{$st} ++;
+    }
+
+    if ($FORM{'quip'}) {
+        if (open (COMMENTS, "<data/comments")) {
+            my @cdata;
+            while (<COMMENTS>) {
+                push @cdata, $_;
+            }
+            close COMMENTS;
+            $quip = "<i>" . $cdata[int(rand($#cdata + 1))] . "</i>";
+        }
+    } 
+
+    #########################
+    # start painting report #
+    #########################
+
+    $bugs_status{'NEW'}      ||= '0';
+    $bugs_status{'ASSIGNED'} ||= '0';
+    $bugs_status{'REOPENED'} ||= '0';
+    print <<FIN;
 <h1>$quip</h1>
 <table border=1 cellpadding=5>
 <tr>
@@ -309,14 +389,13 @@ FIN
 <p>
 FIN
 
-	if ($bugs_count == 0)
-		{
-		print "No bugs found!\n";
-                PutFooter() if $::FORM{banner};
-		exit;
-		}
-	
-	print <<FIN;
+    if ($bugs_count == 0) {
+        print "No bugs found!\n";
+                PutFooter() if $FORM{banner};
+        exit;
+    }
+    
+    print <<FIN;
 <h1>Bug Count by Engineer</h1>
 <table border=3 cellpadding=5>
 <tr>
@@ -328,39 +407,37 @@ FIN
 </tr>
 FIN
 
-	foreach my $who (sort keys %bugs_summary)
-		{
-		my $bugz = 0;
-	 	print <<FIN;
+    foreach my $who (sort keys %bugs_summary) {
+        my $bugz = 0;
+        print <<FIN;
 <tr>
 <td align=left><tt>$who</tt></td>
 FIN
-		
-		foreach my $st (@status)
-			{
-			$bugs_totals{$who}{$st} += 0;
-			print <<FIN;
+        
+        foreach my $st (@status) {
+            $bugs_totals{$who}{$st} += 0;
+            print <<FIN;
 <td align=center>$bugs_totals{$who}{$st}
 FIN
-			$bugz += $#{$bugs_summary{$who}{$st}} + 1;
-			}
-		
-		print <<FIN;
+            $bugz += $#{$bugs_summary{$who}{$st}} + 1;
+        }
+        
+        print <<FIN;
 <td align=center>$bugz</td>
 </tr>
 FIN
-		}
-	
-	print <<FIN;
+    }
+    
+    print <<FIN;
 </table>
 <p>
 FIN
 
-	###############################
-	# individual bugs by engineer #
-	###############################
+    ###############################
+    # individual bugs by engineer #
+    ###############################
 
-	print <<FIN;
+    print <<FIN;
 <h1>Individual Bugs by Engineer</h1>
 <table border=1 cellpadding=5>
 <tr>
@@ -371,412 +448,462 @@ FIN
 </tr>
 FIN
 
-	foreach my $who (sort keys %bugs_summary)
-		{
-		print <<FIN;
+    foreach my $who (sort keys %bugs_summary) {
+        print <<FIN;
 <tr>
 <td align=left><tt>$who</tt></td>
 FIN
 
-		foreach my $st (@status)
-			{
-			my @l;
-
-			foreach (sort { $a <=> $b } @{$bugs_summary{$who}{$st}})
-				{
-				if ($::FORM{'links'})
-					{
-					push @l, "<a href=\"show_bug.cgi?id=$_\">$_</a>\n"; 
-					}
-				else
-					{
-					push @l, $_;
-					}
-				}
-				
-			my $bugz = join ' ', @l;
-			$bugz = "&nbsp;" unless ($bugz);
-			
-			print <<FIN
+        foreach my $st (@status) {
+            my @l;
+
+            foreach (sort { $a <=> $b } @{$bugs_summary{$who}{$st}}) {
+                if ($FORM{'links'}) {
+                    push @l, "<a href=\"show_bug.cgi?id=$_\">$_</a>\n"; 
+                }
+                else {
+                    push @l, $_;
+                }
+            }
+                
+            my $bugz = join ' ', @l;
+            $bugz = "&nbsp;" unless ($bugz);
+            
+            print <<FIN
 <td align=left>$bugz</td>
 FIN
-			}
+        }
 
-		print <<FIN;
+        print <<FIN;
 </tr>
 FIN
-		}
+    }
 
-	print <<FIN;
+    print <<FIN;
 </table>
 <p>
 FIN
-	}
-
-sub is_legal_product
-	{
-	my $product = shift;
-	return grep { $_ eq $product} @myproducts;
-	}
-
-sub show_chart
-	{
-  my $when = localtime (time);
+}
+
+sub is_legal_product {
+    my $product = shift;
+    return grep { $_ eq $product} @myproducts;
+}
+
+sub daily_stats_filename {
+    my ($prodname) = @_;
+    $prodname =~ s/\//-/gs;
+    return $prodname;
+}
+
+sub show_chart {
+	# if we don't have the graphic mouldes don't even try to go
+	# here. Should probably return some decent error message.
+	return unless $use_gd;
+
+    if (! is_legal_product ($FORM{'product'})) {
+        &die_politely ("Unknown product: $FORM{'product'}");
+    }
 
-	if (! is_legal_product ($::FORM{'product'}))
-		{
-		&die_politely ("Unknown product: $::FORM{'product'}");
-		}
+    if (! $FORM{datasets}) {
+        die_politely("You didn't select any datasets to plot");
+    }
 
   print <<FIN;
 <center>
 FIN
-	
-	my @dates;
-	my @open; my @assigned; my @reopened;
-
-        my $prodname = $::FORM{'product'};
-
-        $prodname =~ s/\//-/gs;
-
-	my $testimg = Chart::Lines->new(2,2);
-	my $x = '$testimg->gif()';
-	eval $x;
-	my $type = ($@ =~ /Can't locate object method/) ? "png" : "gif";
-
-        my $file = join '/', $dir, $prodname;
-	my $image = "$file.$type";
-	my $url_image = $dir . "/" . url_quote($prodname) . ".$type";
-
-	if (! open FILE, $file)
-		{
-		&die_politely ("The tool which gathers bug counts has not been run yet.");
-		}
-	
-	while (<FILE>)
-		{
-		chomp;
-		next if ($_ =~ /^#/ or ! $_);
-		my ($date, $open, $assigned, $reopened) = split /\|/, $_;
-		my ($yy, $mm, $dd) = $date =~ /^\d{2}(\d{2})(\d{2})(\d{2})$/;
-
-		push @dates, "$mm/$dd/$yy";
-		push @open, $open;
-		push @assigned, $assigned;
-		push @reopened, $reopened;
-		}
-	
-	close FILE;
-
-	if ($#dates < 1)
-		{
-		&die_politely ("We don't have enough data points to make a graph (yet)");
-		}
-	
-	my $img = Chart::Lines->new (800, 600);
-	my @labels = qw (New Assigned Reopened);
-	my @when;
-	my $i = 0;
-	my @data;
-
-	push @data, \@dates;
-	push @data, \@open;
-	push @data, \@assigned;
-	push @data, \@reopened;
 
-    my $MAXTICKS = 20;      # Try not to show any more x ticks than this.
-    my $skip = 1;
-    if (@dates > $MAXTICKS) {
-        $skip = int((@dates + $MAXTICKS - 1) / $MAXTICKS);
-    }
-
-	my %settings =
-		(
-		"title" => "Bug Charts for $::FORM{'product'}",
-		"x_label" => "Dates",
-		"y_label" => "Bug Count",
-		"legend_labels" => \@labels,
-        "skip_x_ticks" => $skip,
-		);
-	
-	$img->set (%settings);
-	
-	open IMAGE, ">$image" or die "$image: $!";
-	$img->$type (*IMAGE, \@data);
-	close IMAGE;
-
-	print <<FIN;
+    my $type = chart_image_type();
+    my $data_file = daily_stats_filename($FORM{product});
+    my $image_file = chart_image_name($data_file, $type);
+    my $url_image = "$graph_dir/" . url_quote($image_file);
+
+    if (! -e "$graph_dir/$image_file") {
+        generate_chart("$dir/$data_file", "$graph_dir/$image_file", $type);
+    }
+    
+    print <<FIN;
 <img src="$url_image">
 <br clear=left>
 <br>
 FIN
-	}
+}
+
+sub chart_image_type {
+    # what chart type should we be generating?
+    my $testimg = Chart::Lines->new(2,2);
+    my $type = $testimg->can('gif') ? "gif" : "png";
+
+    undef $testimg;
+    return $type;
+}
+
+sub chart_image_name {
+    my ($data_file, $type) = @_;
+
+    my $id = datasets_id($FORM{datasets});
+    my $doy = day_of_year();
+
+    return "${data_file}_${id}.$type";
+}
+
+# Cache charts by generating a unique filename based on what they
+# show. Charts should be deleted by collectstats.pl nightly.
+sub datasets_id {
+	# Current method is very long filenames...	
+	my $longname = "";
+    foreach (@_) {
+	  $longname .= $_;
+	} 	
+    return $longname;
+}
+
+sub day_of_year {
+    my ($mday, $month, $year) = (localtime())[3 .. 5];
+    $month += 1;
+    $year += 1900;
+    my $date = sprintf "%02d%02d%04d", $mday, $month, $year;
+}
+
+sub generate_chart {
+    my ($data_file, $image_file, $type) = @_;
+    
+    if (! open FILE, $data_file) {
+        &die_politely ("The tool which gathers bug counts has not been run yet.");
+    }
 
-sub die_politely
-	{
-	my $msg = shift;
+    my @fields;
+    my @labels = qw(DATE);
+    my %datasets = map { $_ => 1 } split /:/, $FORM{datasets};
+
+    my %data = ();
+    while (<FILE>) {
+        chomp;
+        next unless $_;
+        if (/^#/) {
+            if (/^# fields?: (.*)\s*$/) {
+                @fields = split /\||\r/, $1;
+                &die_politely("`# fields: ' line didn't start with DATE, but with $fields[0]")
+                  unless $fields[0] =~ /date/i;
+                push @labels, grep($datasets{$_}, @fields);
+            }
+            next;
+        }
 
-	print <<FIN;
+        &die_politely("`# fields: ' line was not found before start of data")
+          unless @fields;
+        
+        my @line = split /\|/;
+        my $date = $line[0];
+        my ($yy, $mm, $dd) = $date =~ /^\d{2}(\d{2})(\d{2})(\d{2})$/;
+        push @{$data{DATE}}, "$mm/$dd/$yy";
+        
+        for my $i (1 .. $#fields) {
+            my $field = $fields[$i];
+            if (! defined $line[$i] or $line[$i] eq '') {
+                # no data point given, don't plot (this will probably
+                # generate loads of Chart::Base warnings, but that's not
+                # our fault.)
+                push @{$data{$field}}, undef;
+            }
+            else {
+                push @{$data{$field}}, $line[$i];
+            }
+        }
+    }
+    
+    shift @labels;
+
+    close FILE;
+
+    if (! @{$data{DATE}}) {
+        &die_politely ("We don't have enough data points to make a graph (yet)");
+    }
+    
+    my $img = Chart::Lines->new (800, 600);
+    my $i = 0;
+
+    my $MAXTICKS = 20;      # Try not to show any more x ticks than this.
+    my $skip = 1;
+    if (@{$data{DATE}} > $MAXTICKS) {
+        $skip = int((@{$data{DATE}} + $MAXTICKS - 1) / $MAXTICKS);
+    }
+
+    my %settings =
+        (
+         "title" => "Status Counts for $FORM{'product'}",
+         "x_label" => "Dates",
+         "y_label" => "Bug Counts",
+         "legend_labels" => \@labels,
+         "skip_x_ticks" => $skip,
+         "y_grid_lines" => "true",
+         "grey_background" => "false",
+         "colors" => {
+                      # default dataset colours are too alike
+                      dataset4 => [0, 0, 0], # black
+                     },
+        );
+    
+    $img->set (%settings);
+    $img->$type($image_file, [ @data{('DATE', @labels)} ]);
+}
+
+sub die_politely {
+    my $msg = shift;
+
+    print <<FIN;
 <p>
 <table border=1 cellpadding=10>
 <tr>
 <td align=center>
 <font color=blue>Sorry, but ...</font>
 <p>
-There is no graph available for <b>$::FORM{'product'}</b><p>
+There is no graph available for <b>$FORM{'product'}</b><p>
 
-<font size=-1>
 $msg
 <p>
-</font>
 </td>
 </tr>
 </table>
 <p>
 FIN
-	
-	PutFooter() if $::FORM{banner};
-	exit;
-	}
+    
+    PutFooter() if $FORM{banner};
+    exit;
+}
 
 sub bybugs {
    $bugsperperson{$a} <=> $bugsperperson{$b}
-   }
+}
+
+sub most_doomed_for_milestone {
+    my $when = localtime (time);
+    my $ms = "M" . Param("curmilestone");
+    my $quip = "Summary";
+
+    print "<center>\n<h1>";
+    if( $FORM{'product'} ne "-All-" ) {
+        SendSQL("SELECT defaultmilestone FROM products WHERE product = " .
+                SqlQuote($FORM{'product'}));
+        $ms = FetchOneColumn();
+        print "Most Doomed for $ms ($FORM{'product'})";
+    } else {
+        print "Most Doomed for $ms";
+    }
+    print "</h1>\n$when<p>\n";
 
-sub most_doomed_for_milestone
-	{
-	my $when = localtime (time);
-        my $ms = "M" . Param("curmilestone");
-        my $quip = "Summary";
+    #########################
+    # start painting report #
+    #########################
 
-	print "<center>\n<h1>";
-        if( $::FORM{'product'} ne "-All-" ) {
-            print "Most Doomed for $ms ($::FORM{'product'})";
-        } else {
-            print "Most Doomed for $ms";
+    if ($FORM{'quip'}) {
+        if (open (COMMENTS, "<data/comments")) {
+            my @cdata;
+            while (<COMMENTS>) {
+                push @cdata, $_;
             }
-        print "</h1>\n$when<p>\n";
-
-	#########################
-	# start painting report #
-	#########################
-
-	if ($::FORM{'quip'})
-                {
-                if (open (COMMENTS, "<data/comments"))
-                        {
-                        my @cdata;
-                        while (<COMMENTS>)
-                                {
-                                push @cdata, $_;
-                                }
-                        close COMMENTS;
-                        $quip = "<i>" . $cdata[int(rand($#cdata + 1))] . "</i>";                        }
-                }
-
-
-        # Build up $query string
-	my $query;
-	$query = "select distinct assigned_to from bugs where target_milestone=\"$ms\"";
-	if( $::FORM{'product'} ne "-All-" ) {
-		$query .= "and    bugs.product=".SqlQuote($::FORM{'product'});
-	}
-	$query .= <<FIN;
-and 	 
-	( 
-	bugs.bug_status = 'NEW' or 
-	bugs.bug_status = 'ASSIGNED' or 
-	bugs.bug_status = 'REOPENED'
-	)
+            close COMMENTS;
+            $quip = "<i>" . $cdata[int(rand($#cdata + 1))] . "</i>";
+        }
+    }
+    
+    # Build up $query string
+    my $query;
+    $query = "select distinct assigned_to from bugs where target_milestone=\"$ms\"";
+    if ($FORM{'product'} ne "-All-" ) {
+        $query .= "and    bugs.product=".SqlQuote($FORM{'product'});
+    }
+    $query .= <<FIN;
+and      
+    ( 
+    bugs.bug_status = 'NEW' or 
+    bugs.bug_status = 'ASSIGNED' or 
+    bugs.bug_status = 'REOPENED'
+    )
 FIN
 # End build up $query string
 
-        SendSQL ($query);
-        my @people = ();
-        while (my ($person) = FetchSQLData())
-            {
-            push @people, $person;
-            }
+    SendSQL ($query);
+    my @people = ();
+    while (my ($person) = FetchSQLData()) {
+        push @people, $person;
+    }
 
-        #############################
-        # suck contents of database # 
-        #############################
-        my $person = "";
-        my $bugtotal = 0;
-        foreach $person (@people)
-                {
-                my $query = "select count(bug_id) from bugs,profiles where target_milestone=\"$ms\" and userid=assigned_to and userid=\"$person\"";
-	        if( $::FORM{'product'} ne "-All-" ) {
-                    $query .= "and    bugs.product=".SqlQuote($::FORM{'product'});
-                    }
-	        $query .= <<FIN;
-and 	 
-	( 
-	bugs.bug_status = 'NEW' or 
-	bugs.bug_status = 'ASSIGNED' or 
-	bugs.bug_status = 'REOPENED'
-	)
+    #############################
+    # suck contents of database # 
+    #############################
+    my $person = "";
+    my $bugtotal = 0;
+    foreach $person (@people) {
+        my $query = "select count(bug_id) from bugs,profiles where target_milestone=\"$ms\" and userid=assigned_to and userid=\"$person\"";
+        if( $FORM{'product'} ne "-All-" ) {
+            $query .= "and    bugs.product=".SqlQuote($FORM{'product'});
+        }
+        $query .= <<FIN;
+and      
+    ( 
+    bugs.bug_status = 'NEW' or 
+    bugs.bug_status = 'ASSIGNED' or 
+    bugs.bug_status = 'REOPENED'
+    )
 FIN
-                SendSQL ($query);
-	        my $bugcount = FetchSQLData();
-                $bugsperperson{$person} = $bugcount;
-                $bugtotal += $bugcount;
-                }
+        SendSQL ($query);
+        my $bugcount = FetchSQLData();
+        $bugsperperson{$person} = $bugcount;
+        $bugtotal += $bugcount;
+    }
 
-#       sort people by the number of bugs they have assigned to this milestone
-        @people = sort bybugs @people;
-        my $totalpeople = @people;
+#   sort people by the number of bugs they have assigned to this milestone
+    @people = sort bybugs @people;
+    my $totalpeople = @people;
                 
-        print "<TABLE>\n";
-        print "<TR><TD COLSPAN=2>\n";
-        print "$totalpeople engineers have $bugtotal $ms bugs and features.\n";
-        print "</TD></TR>\n";
-
-        while (@people)
-                {
-                $person = pop @people;
-                print "<TR><TD>\n";
-                SendSQL("select login_name from profiles where userid=$person");
-                my $login_name= FetchSQLData();
-                print("<A HREF=\"buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&target_milestone=$ms&assigned_to=$login_name\">\n");
-                print("$bugsperperson{$person}  bugs and features");
-                print("</A>");
-                print(" for \n");
-                print("<A HREF=\"mailto:$login_name\">");
-                print("$login_name");
-                print("</A>\n");
-                print("</TD><TD>\n");
-
-                $person = pop @people;
-                if ($person) {
-                    SendSQL("select login_name from profiles where userid=$person");
-                    my $login_name= FetchSQLData();
-                    print("<A HREF=\"buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&target_milestone=$ms&assigned_to=$login_name\">\n");
-                    print("$bugsperperson{$person}  bugs and features");
-                    print("</A>");
-                    print(" for \n");
-                    print("<A HREF=\"mailto:$login_name\">");
-                    print("$login_name");
-                    print("</A>\n");
-                    print("</TD></TR>\n\n");
-                    }
-                }
-        print "</TABLE>\n";
-
+    print "<TABLE>\n";
+    print "<TR><TD COLSPAN=2>\n";
+    print "$totalpeople engineers have $bugtotal $ms bugs and features.\n";
+    print "</TD></TR>\n";
+
+    while (@people) {
+        $person = pop @people;
+        print "<TR><TD>\n";
+        SendSQL("select login_name from profiles where userid=$person");
+        my $login_name= FetchSQLData();
+        print("<A HREF=\"buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&target_milestone=$ms&assigned_to=$login_name");
+        if ($FORM{'product'} ne "-All-" ) {
+            print "&product=" . url_quote($FORM{'product'});
         }
+        print("\">\n");
+        print("$bugsperperson{$person}  bugs and features");
+        print("</A>");
+        print(" for \n");
+        print("<A HREF=\"mailto:$login_name\">");
+        print("$login_name");
+        print("</A>\n");
+        print("</TD><TD>\n");
+
+        $person = pop @people;
+        if ($person) {
+            SendSQL("select login_name from profiles where userid=$person");
+            my $login_name= FetchSQLData();
+            print("<A HREF=\"buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&target_milestone=$ms&assigned_to=$login_name\">\n");
+            print("$bugsperperson{$person}  bugs and features");
+            print("</A>");
+            print(" for \n");
+            print("<A HREF=\"mailto:$login_name\">");
+            print("$login_name");
+            print("</A>\n");
+            print("</TD></TR>\n\n");
+        }
+    }
+    print "</TABLE>\n";
+}
+
+
+sub most_recently_doomed {
+    my $when = localtime (time);
+    my $ms = "M" . Param("curmilestone");
+    my $quip = "Summary";
+                                                     
+    print "<center>\n<h1>";
+    if( $FORM{'product'} ne "-All-" ) {
+        SendSQL("SELECT defaultmilestone FROM products WHERE product = " .
+                SqlQuote($FORM{'product'}));
+        $ms = FetchOneColumn();
+        print "Most Recently Doomed ($FORM{'product'})";
+    } else {
+        print "Most Recently Doomed";
+    }
+    print "</h1>\n$when<p>\n";
 
+    #########################
+    # start painting report #
+    #########################
 
-
-sub most_recently_doomed
-	{
-	my $when = localtime (time);
-        my $ms = "M" . Param("curmilestone");
-        my $quip = "Summary";
-
-	print "<center>\n<h1>";
-        if( $::FORM{'product'} ne "-All-" ) {
-            print "Most Recently Doomed ($::FORM{'product'})";
-        } else {
-            print "Most Recently Doomed";
+    if ($FORM{'quip'}) {
+        if (open (COMMENTS, "<data/comments")) {
+            my @cdata;
+            while (<COMMENTS>) {
+                push @cdata, $_;
             }
-        print "</h1>\n$when<p>\n";
-
-	#########################
-	# start painting report #
-	#########################
-
-	if ($::FORM{'quip'})
-                {
-                if (open (COMMENTS, "<data/comments"))
-                        {
-                        my @cdata;
-                        while (<COMMENTS>)
-                                {
-                                push @cdata, $_;
-                                }
-                        close COMMENTS;
-                        $quip = "<i>" . $cdata[int(rand($#cdata + 1))] . "</i>";                        }
-                }
+            close COMMENTS;
+            $quip = "<i>" . $cdata[int(rand($#cdata + 1))] . "</i>";
+        }
+    }
 
 
-        # Build up $query string
-	my $query;
-        $query = "select distinct assigned_to from bugs where bugs.bug_status='NEW' and target_milestone='' and bug_severity!='enhancement' and status_whiteboard='' and (product='Browser' or product='MailNews')";
-	if( $::FORM{'product'} ne "-All-" ) {
-		$query .= "and    bugs.product=".SqlQuote($::FORM{'product'});
-	}
+    # Build up $query string
+    my $query = "select distinct assigned_to from bugs where bugs.bug_status='NEW' and target_milestone='' and bug_severity!='enhancement' and status_whiteboard='' and (product='Browser' or product='MailNews')";
+    if ($FORM{'product'} ne "-All-" ) {
+        $query .= "and    bugs.product=".SqlQuote($FORM{'product'});
+    }
 
 # End build up $query string
 
-        SendSQL ($query);
-        my @people = ();
-        while (my ($person) = FetchSQLData())
-            {
-            push @people, $person;
-            }
+    SendSQL ($query);
+    my @people = ();
+    while (my ($person) = FetchSQLData()) {
+        push @people, $person;
+    }
 
-        #############################
-        # suck contents of database # 
-        #############################
-        my $person = "";
-        my $bugtotal = 0;
-        foreach $person (@people)
-                {
-                my $query = "select count(bug_id) from bugs,profiles where bugs.bug_status='NEW' and userid=assigned_to and userid='$person' and target_milestone='' and bug_severity!='enhancement' and status_whiteboard='' and (product='Browser' or product='MailNews')";
-	        if( $::FORM{'product'} ne "-All-" ) {
-                    $query .= "and    bugs.product='$::FORM{'product'}'";
-                    }
-                SendSQL ($query);
-	        my $bugcount = FetchSQLData();
-                $bugsperperson{$person} = $bugcount;
-                $bugtotal += $bugcount;
-                }
+    #############################
+    # suck contents of database # 
+    #############################
+    my $person = "";
+    my $bugtotal = 0;
+    foreach $person (@people) {
+        my $query = "select count(bug_id) from bugs,profiles where bugs.bug_status='NEW' and userid=assigned_to and userid='$person' and target_milestone='' and bug_severity!='enhancement' and status_whiteboard='' and (product='Browser' or product='MailNews')";
+        if( $FORM{'product'} ne "-All-" ) {
+            $query .= "and    bugs.product='$FORM{'product'}'";
+        }
+        SendSQL ($query);
+        my $bugcount = FetchSQLData();
+        $bugsperperson{$person} = $bugcount;
+        $bugtotal += $bugcount;
+    }
 
-#       sort people by the number of bugs they have assigned to this milestone
-        @people = sort bybugs @people;
-        my $totalpeople = @people;
-        
-        if ($totalpeople > 20) {
-            splice @people, 0, $totalpeople-20;
-            }
+#   sort people by the number of bugs they have assigned to this milestone
+    @people = sort bybugs @people;
+    my $totalpeople = @people;
+    
+    if ($totalpeople > 20) {
+        splice @people, 0, $totalpeople-20;
+    }
                 
-        print "<TABLE>\n";
-        print "<TR><TD COLSPAN=2>\n";
-        print "$totalpeople engineers have $bugtotal untouched new bugs.\n";
-        if ($totalpeople > 20) {
-            print "These are the 20 most doomed.";
-            }
-        print "</TD></TR>\n";
-
-        while (@people)
-                {
-                $person = pop @people;
-                print "<TR><TD>\n";
-                SendSQL("select login_name from profiles where userid=$person");
-                my $login_name= FetchSQLData();
-                print("<A HREF=\"buglist.cgi?bug_status=NEW&email1=$login_name&emailtype1=substring&emailassigned_to1=1&product=Browser&product=MailNews&target_milestone=---&status_whiteboard=.&status_whiteboard_type=notregexp&bug_severity=blocker&bug_severity=critical&bug_severity=major&bug_severity=normal&bug_severity=minor&bug_severity=trivial\">\n"); 
-                print("$bugsperperson{$person}  bugs");
-                print("</A>");
-                print(" for \n");
-                print("<A HREF=\"mailto:$login_name\">");
-                print("$login_name");
-                print("</A>\n");
-                print("</TD><TD>\n");
-
-                $person = pop @people;
-                if ($person) {
-                    SendSQL("select login_name from profiles where userid=$person");
-                    my $login_name= FetchSQLData();
-                    print("<A HREF=\"buglist.cgi?bug_status=NEW&email1=$login_name&emailtype1=substring&emailassigned_to1=1&product=Browser&product=MailNews&target_milestone=---&status_whiteboard=.&status_whiteboard_type=notregexp&bug_severity=blocker&bug_severity=critical&bug_severity=major&bug_severity=normal&bug_severity=minor&bug_severity=trivial\">\n"); 
-                    print("$bugsperperson{$person}  bugs");
-                    print("</A>");
-                    print(" for \n");
-                    print("<A HREF=\"mailto:$login_name\">");
-                    print("$login_name");
-                    print("</A>\n");
-                    print("</TD></TR>\n\n");
-                    }
-                }
-        print "</TABLE>\n";
-
+    print "<TABLE>\n";
+    print "<TR><TD COLSPAN=2>\n";
+    print "$totalpeople engineers have $bugtotal untouched new bugs.\n";
+    if ($totalpeople > 20) {
+        print "These are the 20 most doomed.";
+    }
+    print "</TD></TR>\n";
+
+    while (@people) {
+        $person = pop @people;
+        print "<TR><TD>\n";
+        SendSQL("select login_name from profiles where userid=$person");
+        my $login_name= FetchSQLData();
+        print("<A HREF=\"buglist.cgi?bug_status=NEW&email1=$login_name&emailtype1=substring&emailassigned_to1=1&product=Browser&product=MailNews&target_milestone=---&status_whiteboard=.&status_whiteboard_type=notregexp&bug_severity=blocker&bug_severity=critical&bug_severity=major&bug_severity=normal&bug_severity=minor&bug_severity=trivial\">\n"); 
+        print("$bugsperperson{$person}  bugs");
+        print("</A>");
+        print(" for \n");
+        print("<A HREF=\"mailto:$login_name\">");
+        print("$login_name");
+        print("</A>\n");
+        print("</TD><TD>\n");
+
+        $person = pop @people;
+        if ($person) {
+            SendSQL("select login_name from profiles where userid=$person");
+            my $login_name= FetchSQLData();
+            print("<A HREF=\"buglist.cgi?bug_status=NEW&email1=$login_name&emailtype1=substring&emailassigned_to1=1&product=Browser&product=MailNews&target_milestone=---&status_whiteboard=.&status_whiteboard_type=notregexp&bug_severity=blocker&bug_severity=critical&bug_severity=major&bug_severity=normal&bug_severity=minor&bug_severity=trivial\">\n"); 
+            print("$bugsperperson{$person}  bugs");
+            print("</A>");
+            print(" for \n");
+            print("<A HREF=\"mailto:$login_name\">");
+            print("$login_name");
+            print("</A>\n");
+            print("</TD></TR>\n\n");
         }
+    }
+    print "</TABLE>\n";
+
+}
diff --git a/robots.txt b/robots.txt
new file mode 100644
index 000000000..c364fe62e
--- /dev/null
+++ b/robots.txt
@@ -0,0 +1,3 @@
+User-agent: *
+Allow: /index.html
+Disallow: /
diff --git a/sanitycheck.cgi b/sanitycheck.cgi
index ee6d5e188..2da7fde2f 100755
--- a/sanitycheck.cgi
+++ b/sanitycheck.cgi
@@ -31,6 +31,7 @@ print "Content-type: text/html\n";
 print "\n";
 
 ConnectToDatabase();
+SendSQL("set SQL_BIG_TABLES=1");
 
 my $offervotecacherebuild = 0;
 
@@ -66,18 +67,27 @@ sub CrossCheck {
     }
     while (@_) {
         my $ref = shift @_;
-        my $t2 = shift @$ref;
-        my $f2 = shift @$ref;
-        my %exceptions;
-        foreach my $v (@$ref) {
-            $exceptions{$v} = 1;
-        }
+        my ($t2, $f2, $key2, $exceptions) = @$ref;
+
+        $exceptions ||= [];
+        my %exceptions = map { $_ => 1 } @$exceptions;
+
         Status("... from $t2.$f2");
-        SendSQL("SELECT DISTINCT $f2 FROM $t2");
+        
+        SendSQL("SELECT DISTINCT $f2" . ($key2 ? ", $key2" : '') ." FROM $t2");
         while (MoreSQLData()) {
-            my $value = FetchOneColumn();
+            my ($value, $key) = FetchSQLData();
             if (!$valid{$value} && !$exceptions{$value}) {
-                Alert("Bad value $value found in $t2.$f2");
+                my $alert = "Bad value $value found in $t2.$f2";
+                if ($key2) {
+                    if ($key2 eq 'bug_id') {
+                        $alert .= qq{ (<a href="show_bug.cgi?id=$key">bug $key</a>)};
+                    }
+                    else {
+                        $alert .= " ($key2 == '$key')";
+                    }
+                }
+                Alert($alert);
             }
         }
     }
@@ -128,16 +138,17 @@ CrossCheck("bugs", "bug_id",
            ["keywords", "bug_id"]);
 
 CrossCheck("profiles", "userid",
-           ["bugs", "reporter"],
-           ["bugs", "assigned_to"],
-           ["bugs", "qa_contact", 0],
-           ["attachments", "submitter_id"],
-           ["bugs_activity", "who"],
-           ["cc", "who"],
-           ["votes", "who"],
-           ["longdescs", "who"],
-           ["namedqueries", "userid"]);
-
+           ["bugs", "reporter", "bug_id"],
+           ["bugs", "assigned_to", "bug_id"],
+           ["bugs", "qa_contact", "bug_id", ["0"]],
+           ["attachments", "submitter_id", "bug_id"],
+           ["bugs_activity", "who", "bug_id"],
+           ["cc", "who", "bug_id"],
+           ["votes", "who", "bug_id"],
+           ["longdescs", "who", "bug_id"],
+           ["namedqueries", "userid"],
+           ["components", "initialowner", "value"],
+           ["components", "initialqacontact", "value", ["0"]]);
 
 Status("Checking passwords");
 SendSQL("SELECT COUNT(*) FROM profiles WHERE cryptpassword != ENCRYPT(password, left(cryptpassword, 2))");
@@ -188,7 +199,7 @@ while (@row = FetchSQLData()) {
 
 foreach my $ref (@checklist) {
     my ($product, $version) = (@$ref);
-    SendSQL("select count(*) from versions where program = '$product' and value = '$version'");
+    SendSQL("select count(*) from versions where program = " . SqlQuote($product) . " and value = " . SqlQuote($version));
     if (FetchOneColumn() != 1) {
         Alert("Bug(s) found with invalid product/version: $product/$version");
     }
@@ -206,7 +217,7 @@ while (@row = FetchSQLData()) {
 
 foreach my $ref (@checklist) {
     my ($product, $milestone) = (@$ref);
-    SendSQL("SELECT count(*) FROM milestones WHERE product = '$product' AND value = '$milestone'");
+    SendSQL("SELECT count(*) FROM milestones WHERE product = " . SqlQuote($product) . " AND value = " . SqlQuote($milestone));
     if(FetchOneColumn() != 1) {
         Alert("Bug(s) found with invalud product/milestone: $product/$milestone");
     }
@@ -225,9 +236,11 @@ while (@row = FetchSQLData()) {
 
 foreach my $ref (@checklist) {
     my ($product, $component) = (@$ref);
-    SendSQL("select count(*) from components where program = '$product' and value = '$component'");
+    SendSQL("select count(*) from components where program = " . SqlQuote($product) . " and value = " . SqlQuote($component));
     if (FetchOneColumn() != 1) {
-        Alert("Bug(s) found with invalid product/component: $product/$component");
+        my $link = "buglist.cgi?product=" . url_quote($product) .
+            "&component=" . url_quote($component);
+        Alert(qq{Bug(s) found with invalid product/component: $product/$component (<a href="$link">bug list</a>)});
     }
 }
 
@@ -235,9 +248,9 @@ foreach my $ref (@checklist) {
 Status("Checking profile logins");
 
 my $emailregexp = Param("emailregexp");
-
+$emailregexp =~ s/'/\\'/g;
 SendSQL("SELECT userid, login_name FROM profiles " .
-        "WHERE login_name NOT REGEXP " . SqlQuote($emailregexp));
+        "WHERE login_name NOT REGEXP '" . $emailregexp . "'");
 
 
 while (my ($id,$email) = (FetchSQLData())) {
diff --git a/show_bug.cgi b/show_bug.cgi
index 149182ae8..83baa42b5 100755
--- a/show_bug.cgi
+++ b/show_bug.cgi
@@ -47,11 +47,17 @@ if (!defined $::FORM{'id'} || $::FORM{'id'} !~ /^\s*\d+\s*$/) {
 
 GetVersionTable();
 
-PutHeader("Bugzilla bug $::FORM{'id'}", "Bugzilla Bug", $::FORM{'id'});
+SendSQL("select short_desc, groupset from bugs where bug_id = $::FORM{'id'}");
+my ($summary, $groupset) = FetchSQLData();
+if( $summary && $groupset == 0) {
+    $summary = html_quote($summary);
+    PutHeader("Bug $::FORM{'id'} - $summary", "Bugzilla Bug $::FORM{'id'}", $summary );
+}else {
+    PutHeader("Bugzilla bug $::FORM{'id'}", "Bugzilla Bug", $::FORM{'id'});
+}
 navigation_header();
 
 print "<HR>\n";
 
 $! = 0;
 do "bug_form.pl" || die "Error doing bug_form.pl: $!";
-
diff --git a/showvotes.cgi b/showvotes.cgi
index 894baafbb..8e7dc0d4d 100755
--- a/showvotes.cgi
+++ b/showvotes.cgi
@@ -19,6 +19,7 @@
 # Rights Reserved.
 #
 # Contributor(s): Terry Weissman <terry@mozilla.org>
+#                 Stephan Niemz  <st.n@gmx.net>
 
 use diagnostics;
 use strict;
@@ -59,7 +60,7 @@ if (defined $::FORM{'bug_id'}) {
     PutHeader("Show votes", "Show votes", $name);
     print qq{<form action="doeditvotes.cgi">\n};
     print "<table><tr><td></td><th>Bug \#</th><th>Summary</th><th>Votes</th></tr>\n";
-    SendSQL("lock tables bugs read, votes write");
+    SendSQL("lock tables bugs read, products read, votes write");
     if (defined($::FORM{'voteon'})) {
         # Oh, boy, what a hack.  Make sure there is an entry for this bug
         # in the vote table, just so that things display right.
@@ -71,12 +72,21 @@ if (defined $::FORM{'bug_id'}) {
     }
     my $canedit = (defined $::COOKIE{'Bugzilla_login'} &&
                    $::COOKIE{'Bugzilla_login'} eq $name);
+    my %maxvotesperbug;
+    if( $canedit ) {
+        SendSQL("SELECT products.product, products.maxvotesperbug FROM products");
+        while (MoreSQLData()) {
+            my ($prod, $max) = (FetchSQLData());
+            $maxvotesperbug{$prod}= $max;
+        }
+    }
     foreach my $product (sort(keys(%::prodmaxvotes))) {
         if ($::prodmaxvotes{$product} <= 0) {
             next;
         }
         my $qprod = value_quote($product);
         SendSQL("select votes.bug_id, votes.count, bugs.short_desc, bugs.bug_status from votes, bugs where votes.who = $who and votes.bug_id = bugs.bug_id and bugs.product = " . SqlQuote($product) . "order by votes.bug_id");
+        next if !MoreSQLData(); # don't show products without any votes
         my $sum = 0;
         print "<tr><th>$product</th></tr>";
         while (MoreSQLData()) {
@@ -90,14 +100,21 @@ if (defined $::FORM{'bug_id'}) {
             $summary = html_quote($summary);
             $sum += $count;
             if ($canedit) {
-                $count = "<input name=$id value=$count size=5>";
+                my $min = $maxvotesperbug{$product}; # minimum of these two
+                $min = $::prodmaxvotes{$product} if $::prodmaxvotes{$product} < $min;
+                if( $min < 2 ) { # checkbox
+                    my $checked = $count ? ' checked' : '';
+                    $count = qq{<input type="checkbox" name="$id" value="1"$checked>};
+                }else { # normal input
+                    $count = qq{<input name="$id" value="$count" size="5">};
+                }
             }
             print qq{
 <tr>
 <td></td>
-<td><a href="showvotes.cgi?bug_id=$id">$id</a></td>
-<td><a href="show_bug.cgi?id=$id">$strike$summary$endstrike</a></td>
-<td align=right>$count</td>
+<td>$strike<a href="showvotes.cgi?bug_id=$id">$id</a>$endstrike</td>
+<td><a href="show_bug.cgi?id=$id">$summary</a></td>
+<td align="right">$count</td>
 </tr>
 };
         }
@@ -109,15 +126,14 @@ if (defined $::FORM{'bug_id'}) {
     if ($canedit) {
         print qq{<input type=submit value="Submit">\n};
         print "<br>To change your votes, type in new numbers (using zero to\n";
-        print "mean no votes), and then click <b>Submit</b>.\n";
+        print "mean no votes) or change the checkbox, and then click <b>Submit</b>.\n";
     }
     print "<input type=hidden name=who value=$who>";
     print "</form>\n";
     SendSQL("delete from votes where count <= 0");
     SendSQL("unlock tables");
 }
-    
+
 print qq{<a href="votehelp.html">Help!  I don't understand this voting stuff</a>};
 
 PutFooter();
-    
diff --git a/syncshadowdb b/syncshadowdb
index f5c431266..94e492044 100755
--- a/syncshadowdb
+++ b/syncshadowdb
@@ -86,8 +86,12 @@ $::param{'queryagainstshadowdb'} = 1; # Force us to be able to use the
 
 ConnectToDatabase(1);
 
-Verbose("Aquiring lock.");
-SendSQL("SELECT GET_LOCK('synclock', 1)");
+Verbose("Acquiring lock");
+if ( $syncall == 1) {
+    SendSQL("SELECT GET_LOCK('synclock', 2700)");
+} else {
+    SendSQL("SELECT GET_LOCK('synclock', 1)");
+}
 if (!FetchOneColumn()) {
     Verbose("Couldn't get the lock to do the shadow database syncing.");
     exit;
@@ -195,7 +199,7 @@ $::dbwritesallowed = 1;
 # the shadowdb.  Note that this is carefully coded to ignore errors; we want
 # to keep going even on older mysqld's that don't have the
 # SQL_LOW_PRIORITY_UPDATES option.
-$::db->query("SET OPTION SQL_LOW_PRIORITY_UPDATES = 1"); 
+$::db->do("SET OPTION SQL_LOW_PRIORITY_UPDATES = 1"); 
 
 while (1) {
     SendSQL("SELECT id, command FROM $shadowtable WHERE reflected = 0 " .
diff --git a/userprefs.cgi b/userprefs.cgi
index dd739beb8..e2fcbf0db 100755
--- a/userprefs.cgi
+++ b/userprefs.cgi
@@ -15,6 +15,9 @@
 #
 # Contributor(s): Terry Weissman <terry@mozilla.org>
 #                 Dan Mosedale <dmose@mozilla.org>
+#                 Alan Raetz <al_raetz@yahoo.com>
+#                 David Miller <justdave@syndicomm.com>
+#
 
 use diagnostics;
 use strict;
@@ -33,6 +36,76 @@ sub sillyness {
 
 my $userid;
 
+my $showNewEmailTech;
+
+# Note the use of arrays instead of hashes: we want the items
+# displayed in the same order as they appear in the array.
+
+my @emailGroups = (
+        'Owner',        'the Bug Owner',
+        'Reporter',     'the Reporter',
+        'QAcontact',    'the QA contact',
+        'CClist',       'on the CC list',
+        'Voter',        'a Voter'
+        );
+
+my @emailFlags = (
+        'Removeme',     'When I\'m added to or removed from this capacity',
+        'Comments',     'New Comments',
+        'Attachments',  'New Attachments',
+        'Status',       'Priority, status, severity, and milestone changes',
+        'Resolved',     'When the bug is resolved or verified',
+        'Keywords',     'Keywords field changes',
+        'CC',           'CC field changes',
+        'Other',        'Any field not mentioned above changes'
+        );
+
+my $defaultEmailFlagString =
+
+        'emailOwnerRemoveme~'        . 'on~' .
+        'emailOwnerComments~'        . 'on~' .
+        'emailOwnerAttachments~'     . 'on~' .
+        'emailOwnerStatus~'          . 'on~' .
+        'emailOwnerResolved~'        . 'on~' .
+        'emailOwnerKeywords~'        . 'on~' .
+        'emailOwnerCC~'              . 'on~' .
+        'emailOwnerOther~'           . 'on~' .
+
+        'emailReporterRemoveme~'     . 'on~' .
+        'emailReporterComments~'     . 'on~' .
+        'emailReporterAttachments~'  . 'on~' .
+        'emailReporterStatus~'       . 'on~' .
+        'emailReporterResolved~'     . 'on~' .
+        'emailReporterKeywords~'     . 'on~' .
+        'emailReporterCC~'           . 'on~' .
+        'emailReporterOther~'        . 'on~' .
+
+        'emailQAcontactRemoveme~'    . 'on~' .
+        'emailQAcontactComments~'    . 'on~' .
+        'emailQAcontactAttachments~' . 'on~' .
+        'emailQAcontactStatus~'      . 'on~' .
+        'emailQAcontactResolved~'    . 'on~' .
+        'emailQAcontactKeywords~'    . 'on~' .
+        'emailQAcontactCC~'          . 'on~' .
+        'emailQAcontactOther~'       . 'on~' .
+
+        'emailCClistRemoveme~'       . 'on~' .
+        'emailCClistComments~'       . 'on~' .
+        'emailCClistAttachments~'    . 'on~' .
+        'emailCClistStatus~'         . 'on~' .
+        'emailCClistResolved~'       . 'on~' .
+        'emailCClistKeywords~'       . 'on~' .
+        'emailCClistCC~'             . 'on~' .
+        'emailCClistOther~'          . 'on~' .
+
+        'emailVoterRemoveme~'        . 'on~' .
+        'emailVoterComments~'        . 'on~' .
+        'emailVoterAttachemnts~'     . 'on~' .
+        'emailVoterStatus~'          . 'on~' .
+        'emailVoterResolved~'        . 'on~' .
+        'emailVoterKeywords~'        . 'on~' .
+        'emailVoterCC~'              . 'on~' .
+        'emailVoterOther~'           . 'on' ;
 
 sub EmitEntry {
     my ($description, $entry) = (@_);
@@ -93,24 +166,56 @@ sub SaveAccount {
             " WHERE userid = $userid");
 }
 
+#
+# Set email flags in database based on the parameter string.
+#
+sub setEmailFlags ($) {
+
+    my $emailFlagString = $_[0];
+
+    SendSQL("UPDATE profiles SET emailflags = " .
+            SqlQuote($emailFlagString) . " WHERE userid = $userid");
+}
+
 
+sub ShowEmailOptions () {
 
-sub ShowDiffs {
     SendSQL("SELECT emailnotification, newemailtech FROM profiles " .
             "WHERE userid = $userid");
-    my ($emailnotification, $newemailtech) = (FetchSQLData());
+    my ($emailnotification, $dbNewEmailTech) = (FetchSQLData());
+
+    # Override the database value with the current form value
+    # if the disable/enable button has been pressed.
+    if ( defined $::FORM{'newEmailTech'} ) {
+
+        # If the user has clicked on 'Disable New Email Tech',
+        # clear out their email flag preferences.
+        if ($dbNewEmailTech == 1) {
+            setEmailFlags('');
+        }
+
+        $showNewEmailTech = $::FORM{'newEmailTech'};
+    } else {
+        $showNewEmailTech = $dbNewEmailTech;
+    }
+
+    #print "<BR>database newemailtech = $showNewEmailTech<br>";
+
     my $qacontactpart = "";
     if (Param('useqacontact')) {
         $qacontactpart = ", the current QA Contact";
     }
-    print qq{
+
+    if ($showNewEmailTech==0) {
+    print <<"--endquote--";
+<TABLE>
 <TR><TD COLSPAN="2">
 Bugzilla will send out email notification of changed bugs to 
-the current owner, the submitter of the bug$qacontactpart, and anyone on the
+the current owner, the Reporter of the bug$qacontactpart, and anyone on the
 CC list.  However, you can suppress some of those email notifications.
 On which of these bugs would you like email notification of changes?
 </TD></TR>
-};
+--endquote--
     my $entry =
         BuildPulldown("emailnotification", 
                       [["ExcludeSelfChanges",
@@ -120,65 +225,276 @@ On which of these bugs would you like email notification of changes?
                        ["All",
                         "All qualifying bugs"]],
                        $emailnotification);
-    EmitEntry("Notify me of changes to", $entry);
+        EmitEntry("Notify me of changes to", $entry);
+    print "</TABLE>";
+    }
 
     if (Param("newemailtech")) {
-        my $checkedpart = $newemailtech ? "CHECKED" : "";
         print qq{
 <TR><TD COLSPAN="2"><HR></TD></TR>
-<TR><TD COLSPAN="2"><FONT COLOR="red">New!</FONT>
-Bugzilla has a new email 
-notification scheme.  It is <b>experimental and bleeding edge</b> and will 
-hopefully evolve into a brave new happy world where all the spam and ugliness
-of the old notifications will go away.  If you wish to sign up for this (and 
-risk any bugs), check here.
-</TD></TR>
-};
-        EmitEntry("Check here to sign up (and risk any bugs)",
-                  qq{<INPUT TYPE="checkbox" NAME="newemailtech" $checkedpart>New email tech});
+<TR><TD COLSPAN="2"><FONT COLOR="red">Updated!</FONT>
+Bugzilla's new standard email notification scheme allows for the use of 
+features such as watching other users and selecting which bug changes you get 
+mail about.  Although it's still possible to use the old notification scheme, 
+this isn't recommended, because the old scheme is no longer
+supported and will be going away in an upcoming version of Bugzilla.
+<FONT COLOR="red">Note that after clicking the link below, you must still click
+on the <B>Submit Changes</B> button in order for your email tech change to be saved.</FONT>
+</TD></TR>};
+
+        if ($showNewEmailTech == 1) {
+            print qq{
+                <tr><td colspan=2><center>
+                <A HREF="userprefs.cgi?bank=diffs&amp;newEmailTech=0">Disable New Email Tech</A>
+                </center></td></tr>};
+        } else {
+            print qq{<tr><td colspan=2><center><A HREF="userprefs.cgi?bank=diffs&amp;newEmailTech=1">Enable New Email Tech</A></center></td></tr>};
     }
 
-    if (Param("supportwatchers")) {
+        if (Param("supportwatchers") && $showNewEmailTech == 1) {
+
       my $watcheduserSet = new RelationSet;
       $watcheduserSet->mergeFromDB("SELECT watched FROM watch WHERE" .
                                     " watcher=$userid");
       my $watchedusers = $watcheduserSet->toString();
 
       print qq{
-<TR><TD COLSPAN="2"><HR></TD></TR>
-<TR><TD COLSPAN="2"><FONT COLOR="red">New!</FONT>
-If you want to help cover for someone when they're on vacation, or if 
+<TR><TD COLSPAN="4"><HR></TD></TR>
+<TR><TD COLSPAN="4">
+<FONT COLOR="red">New Email Tech Feature: </FONT>If you want to help cover for someone when they're on vacation, or if
 you need to do the QA related to all of their bugs, you can tell bugzilla
 to send mail related to their bugs to you also.  List the email addresses
 of any users you wish to watch here, separated by commas.
-<FONT COLOR="red">Note that you MUST have the above "New email tech" 
-button selected in order to use this feature.</FONT>
-</TD></TR>
-};
+</TD></TR>};
+
       EmitEntry("Users to watch",
               qq{<INPUT SIZE=35 NAME="watchedusers" VALUE="$watchedusers">});
+        }
+
+        print qq{<TR><TD COLSPAN="2"><HR></TD></TR>};
 
+        if ($showNewEmailTech == 1) {
+            showAdvancedEmailFilterOptions();
+        }
     }
 
+print qq {
+<TABLE CELLSPACING="0" CELLPADDING="10" BORDER=0 WIDTH="100%">
+<TR><TD>};
+
 }
 
-sub SaveDiffs {
-    my $newemailtech = 0;
-    if (exists $::FORM{'newemailtech'}) {
-        $newemailtech = 1;
+sub showAdvancedEmailFilterOptions () {
+
+    my $flags;
+    my $notify;
+    my %userEmailFlags = ();
+
+    print qq{
+        <TR><TD COLSPAN="2"><center>
+        <font size=+1>Advanced Email Filtering Options</font>
+        </center>
+        </TD></TR><tr><td colspan="2">
+        <p>
+        <center><FONT COLOR="red">New Email Tech Feature:</FONT>
+        Filter email notifications for <b>modified</b>
+        bugs (does not effect new bug email notices).
+        </center></td></tr></table>
+       <hr width=800 align=center>
+    };
+
+    SendSQL("SELECT emailflags, emailnotification FROM profiles WHERE " .
+            "userid = $userid");
+
+    ($flags, $notify) = FetchSQLData();
+
+    # if the emailflags haven't been set before, that means that this user 
+    # hasn't been to (the email pane of?) userprefs.cgi since the change to 
+    # use emailflags.  create a default flagset for them, mostly based on
+    # static defaults, but setting ExcludeSelf based on the old 
+    # emailnotification column.
+    #
+    if ( !$flags ) {
+
+        if ( !$notify ) { 
+            confess("neither \$flags nor \$notify was set");
+        }
+
+        my $notifyString;
+        if ( $notify eq 'ExcludeSelfChanges' ) {
+            $notifyString = "ExcludeSelf~on~";
+        } else {
+            $notifyString = "ExcludeSelf~~";
+        }
+
+        $flags = $notifyString . $defaultEmailFlagString;
+        setEmailFlags($flags);
     }
-    SendSQL("UPDATE profiles " .
-            "SET emailnotification = " . SqlQuote($::FORM{'emailnotification'})
-            . ", newemailtech = $newemailtech WHERE userid = $userid");
 
-    # deal with any watchers
+    # the 255 param is here, because without a third param, split will
+    # trim any trailing null fields, which causes perl to eject lots of
+    # warnings.  any suitably large number would do.
     #
+    %userEmailFlags = split(/~/ , $flags, 255);
+
+    showExcludeSelf(\%userEmailFlags);
+
+    # print STDERR "$flags\n";
+
+    print qq{
+                <hr width=800 align=left>
+                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                  <b>Field/recipient specific options:</b><br><br>
+              };
+
+
+    my @tmpGroups = @emailGroups;
+    while ((my $groupName,my $groupText) = splice(@tmpGroups,0,2) ) {
+        printEmailPrefGroup($groupName,$groupText,\%userEmailFlags);
+    }
+
+}
+
+sub showExcludeSelf (\%) {
+
+     my %CurrentFlags = %{$_[0]};
+     
+     my $excludeSelf = " ";
+
+     while ( my ($key,$value) = each (%CurrentFlags) ) {
+
+     # print qq{flag name: $key    value: $value<br>};
+
+        if ( $key eq 'ExcludeSelf' ) {
+
+                if ( $value eq 'on' ) {
+
+                        $excludeSelf = "CHECKED";
+                        }
+                }
+        }
+
+        print qq {
+                <table><tr><td colspan=2>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                <b>Global options:</b></tr>
+                <tr><td width=150></td><td>
+                Do not email me bugs that I change
+             <input type="checkbox" name="ExcludeSelf" VALUE="on" $excludeSelf>
+                <br>
+                </td>
+                </tr>
+                </table>
+                };
+
+}
+
+sub printEmailPrefGroup ($$\%) {
+
+    my ($groupName,$textName,$refCurrentFlags) = @_[0,1,2];
+    my @tmpFlags = @emailFlags;
+
+    print qq {<table cellspacing=0 cellpadding=6> };
+    print qq {<tr><td colspan=2> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                When I\'m $textName, email me:</td></tr> };
+
+    while ((my $flagName,my $flagText) = splice(@tmpFlags,0,2)) {
+
+        printEmailOption($groupName . $flagName, $flagText, $refCurrentFlags);
+    }
+    print qq { </table> };
+    print qq { <hr WIDTH=320 ALIGN=left> };
+}
+
+sub printEmailOption ($$\%) {
+
+    my $value= '';
+
+    my ($optionName,$description,$refCurrentFlags) = @_[0,1,2];
+
+    #print qq{ email$optionName: $$refCurrentFlags{"email$optionName"} <br>};
+
+    # if the db value is 'on', then mark that checkbox
+    if ($$refCurrentFlags{"email$optionName"} eq 'on'){
+        $value = 'CHECKED';
+    }
+
+    # **** Kludge ... also mark on if the value in $$refCurrentFlags in undef
+    if (!defined($$refCurrentFlags{"email$optionName"})) {
+        $value = 'CHECKED';
+    }
+
+    print qq{
+        <tr><td width=320></td>
+        <td><input type="checkbox" name="email$optionName" VALUE="on" $value>
+        $description</td>
+        </tr>
+    };
+}
+
+sub SaveEmailOptions () {
+
+    # I don't understand: global variables and %FORM variables are
+    # not preserved between ShowEmailOptions() and SaveEmailOptions()
+    # The form value here is from a hidden variable just before the SUBMIT.
+
+    my $useNewEmailTech = $::FORM{'savedEmailTech'};
+    my $updateString;
+
+    if ($useNewEmailTech == 0) {
+
+        # we force the NEW email filter entry to allow all email
+        # (empty string defaults to allowing all email).
+        $updateString = '';
+
+    } else {
+        if ( defined $::FORM{'ExcludeSelf'}) {
+            $updateString .= 'ExcludeSelf~on';
+        } else {
+            $updateString .= 'ExcludeSelf~';
+        }
+        my @tmpGroups = @emailGroups;
+
+        while ((my $groupName,my $groupText) = splice(@tmpGroups,0,2) ) {
+
+            my @tmpFlags = @emailFlags;
+
+            while ((my $flagName,my $flagText) = splice(@tmpFlags,0,2) ) {
+
+                my $entry = 'email' . $groupName . $flagName;
+                my $entryValue;
+
+                if (!defined $::FORM{$entry} ) {
+                    $entryValue = "";
+                } else {
+                    $entryValue = $::FORM{$entry};
+                }
+
+                $updateString .= '~' . $entry . '~' . $entryValue;
+            }
+        }
+
+        # we force the OLD email tech flag to allow all email
+        $::FORM{'emailnotification'} = "All";
+    }
+        
+    #open(FID,">updateString");
+    #print qq{UPDATE STRING: $updateString <br>};
+    #close(FID);
+
+    SendSQL("UPDATE profiles SET emailnotification = "
+            . SqlQuote($::FORM{'emailnotification'})
+            . ", newemailtech = $useNewEmailTech "
+            . "WHERE userid = $userid" );
+
+    SendSQL("UPDATE profiles SET emailflags = " .
+            SqlQuote($updateString) . " WHERE userid = $userid");
+
     if (Param("supportwatchers") ) {
 
         if (exists $::FORM{'watchedusers'}) {
 
             Error ('You must have "New email tech" set to watch someone')
-                if ( $::FORM{'watchedusers'} ne "" && $newemailtech == 0);
+                if ( $::FORM{'watchedusers'} ne "" && $useNewEmailTech == 0);
 
             # Just in case.  Note that this much locking is actually overkill:
             # we don't really care if anyone reads the watch table.  So 
@@ -246,7 +562,7 @@ sub ShowFooter {
     print qq{<INPUT TYPE=HIDDEN NAME="numqueries" VALUE="$count">\n};
     if (!$count) {
         print qq{
-<TR><TD COLSPAN="2">
+<TR><TD COLSPAN="4">                            
 If you go create remembered queries in the <A HREF="query.cgi">query page</A>,
 you can then come to this page and choose to have some of them appear in the 
 footer of each Bugzilla page.
@@ -329,7 +645,7 @@ print "Content-type: text/html\n\n";
 
 GetVersionTable();
 
-PutHeader("Preferences", "Preferences", $::COOKIE{'Bugzilla_login'});
+PutHeader("User Preferences", "User Preferences", $::COOKIE{'Bugzilla_login'});
 
 #  foreach my $k (sort(keys(%::FORM))) {
 #      print "<pre>" . value_quote($k) . ": " . value_quote($::FORM{$k}) . "\n</pre>";
@@ -341,7 +657,7 @@ my @banklist = (
                 ["account", "Account settings",
                  \&ShowAccount, \&SaveAccount],
                 ["diffs", "Email settings",
-                 \&ShowDiffs, \&SaveDiffs],
+                                 \&ShowEmailOptions, \&SaveEmailOptions],
                 ["footer", "Page footer",
                  \&ShowFooter, \&SaveFooter],
                 ["permissions", "Permissions",
@@ -396,19 +712,27 @@ if (defined $bankdescription) {
         &$savefunc;
         print "Your changes have been saved.";
     }
-    print qq{
-<H3>$bankdescription</H3>
-<FORM METHOD="POST">
-<TABLE>
-};
+    print qq{<H3>$bankdescription</H3><FORM METHOD="POST"><TABLE>};
+
+    # execute subroutine from @banklist based on bank selected.
     &$showfunc;
-    print qq{
-</TABLE>
-<INPUT TYPE="hidden" NAME="dosave" VALUE="1">
-<INPUT TYPE="hidden" NAME="bank" VALUE="$bank">
-};
+
+    print qq{</TABLE><INPUT TYPE="hidden" NAME="dosave" VALUE="1">};
+    print qq{<INPUT TYPE="hidden" NAME="savedEmailTech" VALUE="};
+
+    # default this to 0 if it's not already set
+    #
+    if (defined $showNewEmailTech) {
+        print qq{$showNewEmailTech">};
+    } else {
+        print qq{0">};
+    }
+    print qq{<INPUT TYPE="hidden" NAME="bank" VALUE="$bank"> };
+
     if ($savefunc) {
-        print qq{<INPUT TYPE="submit" VALUE="Submit">\n};
+              print qq{<table><tr><td width=150></td><td>
+                        <INPUT TYPE="submit" VALUE="Submit Changes">
+                        </td></tr></table> };
     }
     print qq{</FORM>\n};
 } else {
diff --git a/votehelp.html b/votehelp.html
index 2759262bd..8f95c0169 100644
--- a/votehelp.html
+++ b/votehelp.html
@@ -33,9 +33,10 @@ fixed.
 
 <p>
 
-You may vote for the same bug more than one time.  But remember, you
-only have so many votes to use in total!  So, you can either vote a
-little for many bugs, or vote a lot for a few bugs.
+Depending on how the administrator has configured the relevant
+product, you may be able to vote for the same bug more than one time.
+But remember, you only have so many votes to use in total!  So, you
+can either vote a little for many bugs, or vote a lot for a few bugs.
 
 <p>
 
diff --git a/xml.cgi b/xml.cgi
new file mode 100755
index 000000000..51093890e
--- /dev/null
+++ b/xml.cgi
@@ -0,0 +1,58 @@
+#!/usr/bonsaitools/bin/perl -w
+# -*- Mode: perl; indent-tabs-mode: nil -*-
+#
+# The contents of this file are subject to the Mozilla Public
+# License Version 1.1 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS
+# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+# implied. See the License for the specific language governing
+# rights and limitations under the License.
+#
+# The Original Code is the Bugzilla Bug Tracking System.
+#
+# The Initial Developer of the Original Code is Netscape Communications
+# Corporation. Portions created by Netscape are
+# Copyright (C) 1998 Netscape Communications Corporation. All
+# Rights Reserved.
+#
+# Contributor(s): Dawn Endico    <endico@mozilla.org>
+#                 Terry Weissman <terry@mozilla.org>
+
+use diagnostics;
+use strict;
+use Bug;
+require "CGI.pl";
+
+if (!defined $::FORM{'id'} || $::FORM{'id'} !~ /^\s*\d+(,\d+)*\s*$/) {
+  print "Content-type: text/html\n\n";
+  PutHeader("Display as XML");
+  print "<FORM METHOD=GET ACTION=\"xml.cgi\">\n";
+  print "Display bugs as XML by entering a list of bug numbers here:\n";
+  print "<INPUT NAME=id>\n";
+  print "<INPUT TYPE=\"submit\" VALUE=\"Display as XML\"><br>\n";
+  print "  (e.g. 1000,1001,1002)\n";
+  print "</FORM>\n";
+  PutFooter();
+  exit;
+}
+
+quietly_check_login();
+my $exporter;
+if (defined $::COOKIE{"Bugzilla_login"}) {
+  $exporter = $::COOKIE{"Bugzilla_login"};
+}
+
+my @ids = split ( /,/, $::FORM{'id'} );
+
+print "Content-type: text/plain\n\n";
+print Bug::XML_Header( Param("urlbase"), $::param{'version'}, 
+                        Param("maintainer"), $exporter );
+foreach my $id (@ids) {
+  my $bug = new Bug($id, $::userid);
+  print $bug->emitXML;
+}
+
+print Bug::XML_Footer;
-- 
GitLab