2001-12-12  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* gnatsweb.pl: Set VERSION to 3.99.3.  This is beta 3.

2001-12-04  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* gnatsweb.pl (sendpr, validate_email_field, init_prefs): Rename
	  'email_addr' to 'email' in the global cookie.

2001-12-02  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* gnatsweb.pl (submitquery, display_query_results): Use ASCII
	  octal \037 (unit separator) as field separator in the query
	  output format string, instead of '|', which would make Gnatsweb
	  mess up the query results display when a field contained a '|'.

2001-11-30  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* gnatsweb.pl (display_query_results): Removed definition of
	  $myurl -- it was never used.

	* gnatsweb.pl: Implement redirect after 'Store query':
	- (display_query_results): Add return_url hidden field to form.
	- (store_query): Add redirect code, notify user that redirect is
	  about to happen.

2001-11-29  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* gnatsweb.pl: Implement redirect after 'Create':
	- (sendpr): Add hidden field 'return_url' to form.
	- (submitnewpr): Defer call to page_start_html until we know
	  whether we need a customized HTML head.  Create global cookie
	  here, not in main.  Add code to issue refresh header and call
	  page_start_html with extra arguments for the HTML head section
	  for the MSIE workaround.  Add a line to the result page saying
	  that the user will be redirected automatically.
	- (get_pr_url): Do not include pr=xxx in URL when $pr is 0.
	- (page_start_html): Add passed arguments (if any) to the call to
	  start_html.  Use URL containing return_url parameter in the
	  CREATE link in the button bar.
	- (main): Remove call to print_header in the 'submit' case.  We do
	  this inside the submitnewpr subroutine now.
	- (submitedit): Do the refresh in the same way as in submitnewpr -
	  the old method emitted bad HTML.
	- (delete_stored_query): Ditto.

	* gnatsweb.pl (sendpr, edit): Fix syntax error that prevented
	  table cell and row end tags from being printed.

2001-11-21  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* CUSTOMIZING.vars, TROUBLESHOOTING, INSTALL, gnatsweb.html,
	  gnatsweb.pl: Changes to reflect that GNATS development has moved
	  to Savannah.

	* gnatsweb.pl: Add 'use Text::Tabs'.
	- (view): Expand tabs to spaces, replace back-to-back occurrences
	  of spaces with "&nbsp;" and a space.  This makes browsers render
	  indented code correctly.  Thanks to Brad Garcia.

2001-11-19  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* gnatsweb.pl: A bit of cleanup, based on suggestions from Dirk
	  Bergstrom:
	- (init_fieldinfo): Add 'separators' and 'default_sep' hash
	  elements for multienum fields.
	- (parse_multienum, unparse_multienum): Use them.
	- (multiselect_menu): New subroutine.  Returns a
	  multiselect menu.
	- (edit, sendpr): Use it.
	- (query_page): Use // around regexp.
	- (unparse_multienum): Use join instead of foreach loop.

2001-11-03  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* gnatsweb.pl: Initial check-in of multienum support code.
	- (parse_multienum): Parse a legally separated MultiEnum string by
	  splitting on the multienum separators and returning the result
	  as an array ref.
	- (unparse_multienum): Collect multienum form values in a single
	  string, values separated by the first character in the multienum
	  separator string for that field.
	- (submitnewpr, submitedit): Use unparse_multienum on MultiEnum
	  field values from the form.
	- (edit): Use parse_multienum to pre-fill MultiEnum fields in the
	  form with the old values.  We use a multiselect scrolling list.
	- (query_page, advanced_query_page): Support queries on MultiEnum
	  fields.  We use a multiselect scrolling list.	
	- (sendpr): Support entry of values for MultiEnum fields using a
	  multiselect scrolling list.
	
	* gnatsweb.pl (delete_stored_query): Use refresh, not redirect,
	  since that confuses Netscape.  Add workaround for MSIE's
	  non-handling of refresh headers.

	* gnatsweb.pl (login_page): Tweak print statement to avoid user
	  strict-related warning.

2001-11-01  Dirk Bergstrom  <dirk@juniper.net>

	* gnatsweb.pl (one_line_form, view): Change form submission from
	POST to GET.  Postdata expires from cache after some time (i
	believe it's browser-dependent), and this can cause loss of data
	in the following scenario: user clicks the create button on the
	main page, spends half an hour entering PR data, hits submit, and
	there's an error; user hits "back", but is told that the create
	form is postdata, and it has expired.  all the data they entered
	is lost, and much frustration ensues.  this can also happen with
	editing and query submission.
	(edit): Increment number of hardcoded fields in $field_number to
	account for the addition of return_url.  This needs to be done
	whenever a non-dynamic field is added to the top of the edit or
	view pages.

2001-10-30  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* gnatsweb.pl (get_mailto_link): Remove special handling
	  of Internet Explorer browser -- not all MSIE users use Outlook.
	  Furthermore, newer versions of Outlook do not need the special
	  quoting.
	- (get_mailto_link): Put Synopsis, as well as category and PR
	  number in the Subject field of the mailto link.

2001-10-23  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* gnatsweb.pl ($site_banner_text): Say 'GNU Gnatsweb'.

2001-10-21  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* TROUBLESHOOTING: New document.

	* INSTALL: Update, expand, correct. Mention troubleshooting
	  document.

	* gnatsweb.pl (advanced_query_page): Use cellspacing=0.

	* gnatsweb.pl (sendpr): Change name of form from editPrForm to
	  sendPrForm.

2001-10-20  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* gnatsweb.pl (get_viewpr_url): Properly escape the 'view
	  audit-trail' command.

==========  Gnatsweb 4.0 beta 2 released ===============================

2001-10-17  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* $VERSION set to 3.99.2.  This is Gnatsweb 4.0 beta 2.
	
	* Gnatsweb is finally under the GPL.  All significant files,
	  copyright notices and licensing conditions have been added to
	  all code files and the README file.
	- COPYING: New file containing the GPL.
	- BETA: New file.
	

2001-10-17  Dirk Bergstrom  <dirk@juniper.net>

	* gnatsweb.pl (parse_submitters): Populate %submitter_complete
	with the human-readable value from the submitters file.
	(popup_or_scrolling_menu): Use %submitter_complete to provide
	labels for Submitter-Id field.
	(main_page): Display current database in change database dropdown.
	(formstart): Workaround for an exceedingly dumb netscape bug, in
	which the back arrow is broken after submitting a new PR or an
	edited PR.
	(form_start, multipart_form_start): Wrapper functions for
	formstart().
	(send_pr, edit): Use multipart_form_start().
	(init_prefs): Added code to save email_addr in the global cookie.
	This value is used to populate the email field in the create PR
	screen.  This functionality disappeared somewhere after 1.59.

2001-10-15  Yngve Svendsen  <yngves@gnu.org>

	* INSTALL: Change the treatment of access control to take into
	  account the new 'listdb' level.

	* CUSTOMIZE.vars: Document the $include_audit_trail variable.

2001-10-12  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* Makefile: Silence the test target a bit.

	* test.pl: Get rid of noise generated when the test script is
	  unable to connect to the GNATS database.  Add a note on how to
	  troubleshoot connection problems.

	* gnatsweb.pl: Strengthen warning about setting config variables
	  in the site file, not in the main script.

2001-10-11  Yngve Svendsen  <yngves@gnu.org>

        * gnatsweb.pl (split_csl): New subroutine. Splits comma-separated
	  e-mail addresses in such a way that commas in quotes aren't
	  considered separators.  Thanks to Arno Unkrig.
          (fix_email_addrs): Use it.
          (interested_parties): Likewise.

	* gnatsweb.html: Document the Display Current Date checkbox in the
	  query pages.

	* gnatsweb.pl (query_page, advanced_query_page): Add checkbox
	  controlling whether to display the current date on the results
	  page. Default is on.
	- (display_query_results): Display current date below number of
	  matches if the "Display current date" checkbox on the query page
	  is checked.

	* gnatsweb.pl: New config variable $include_audit_trail which
	  controls whether the Audit-Trail will be shown by default in the
	  View PR screen.
	  (main_page, get_viewpr_url): Use it.

	* gnatsweb.pl (popup_or_scrolling_menu): Use both username and
	  full name in the Responsible dialog. 
	- (parse_responsible): New responsible_complete hash.  Contains
	  both username and full name.

2001-09-21  Dirk Bergstrom  <dirk@juniper.net>

	* gnatsweb.pl (main_page): add a '$q->' to a CGI.pm call that i
	missed on 2001-09-6.

2001-09-12  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* gnatsweb.pl: Various very minor changes to get rid of strict
	  warnings.

	* gnatsweb-site-example.pl: Fix problems with 'open' and 'not
	  closed' examples by switching to custom query format instead of
	  sql2.

	* CUSTOMIZE.cb, CUSTOMIZE.vars: Update in accordance with the
	  changes below.  Make layout a smidgen clearer.

	* gnatsweb.pl: Change $gnats_info_top to point to a page on
	  sources which contains links to documentation for multiple
	  versions of GNATS.

	* gnatsweb.pl (login_page): Add a callback which allows printing
	  of a welcome message on the login page.
	- gnatsweb-site-example.pl: Use it.

2001-09-11  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* gnatsweb.pl: Change $VERSION to 3.99. We're in beta now.

	* INSTALL: Include notes for upgraders.

	* gnatsweb-site-example.pl: Fix problems with query results table
	  header row when using the 'open' and 'not closed' buttons.

	* gnatsweb.html: Fairly minor changes to reflect the way GNATS and
	  Gnatsweb 4 work.

	* Makefile: Add new files to the OTHER_FILES macro.  Rewrite
	  install target to back up old installations and to preserve the
	  gnatsweb-site.pl file if already installed.  Remove references
	  to gnatsweb-site-sente.pl.

2001-09-10  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* gnatsweb-site-sente.pl: Gone -- it was getting a bit long in the
	  tooth and 2.x-specific.

	* gnatsweb-site-example.html: Fleshed out a bit.

	* CUSTOMIZE.cb: Callback documentation finished.

	* gnatsweb.pl (sendpr): Removed get_default_value callback hook.

2001-09-09  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* gnatsweb.pl (main): Support cmd callbacks.

	* CUSTOMIZE, CUSTOMIZE.vars: New documentation on how to customize
	  Gnatsweb.

	* gnatsweb.pl: $global_cookie_expires was being defined twice.

	* Makefile (tarball, default, no-debug-statements): Misc. fixes.

	* gnatsweb.pl: $VERSION now global, so that we can use it in the
	  Makefile.

	* gnatsweb.pl (client_init): Trap attempts to use a nonexisting
	$site_gnats_host.

	* README, TODO: Update for Gnatsweb 4.
	- INSTALL: Largely rewritten for Gnatsweb 4
	- gnatsweb-site.pl: Minimal local configuration file.
	- Makefile: Install gnatsweb-site.pl, not gnatsweb-site-sente.pl

2001-09-08  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* gnatsweb.pl (page_start_html): Reenable the button bar on the
	  main page -- turns out users who are accustomed to it use it
	  almost exclusively.

2001-09-07  Dirk Bergstrom  <dbergstr@crawler.juniper.net>

	* gnatsweb.pl (get_mailto_link): rewritten to properly html-escape
	the followup mailto: link contents.

	* gnatsweb.pl (help_page): Changed bare calls to p() & a() to
	$q->p() style calls.  Missed these yesterday.

2001-09-06  Dirk Bergstrom  <dbergstr@crawler.juniper.net>

	* gnatsweb.pl: Use CGI qw/-nosticky/; This prevents CGI.pm from
	appending a bunch of .cgifields to every self_url().  AFAIK, we're
	not using CGI.pm's sticky field features, so we can do w/o the
	overhead and the unreasonably long URLs it produces.

	* gnatsweb.pl: Changed bare calls to CGI.pm routines to qualified
	calls (ie. submit(foo... becomes $q->submit(foo... ).  This allows
	us to stop importing the :standard and :netscape extensions to
	CGI.pm.  Doing so should improve the startup time and decrease
	memory footprint.

	* gnatsweb.pl: Refresh headers choke on semicolon-separated
	query-strings, so we change semicolons to ampersands in the URL
	everywhere we use refresh.

	* gnatsweb.pl (view, edit, submitedit, download_attachment): Added
	code to strip non-digit characters from $pr.  Gnatsd sometimes
	accepts category/number, and sometimes does the Wrong Thing, and I
	thought it best to remove the possibility of problems.

	* gnatsweb.pl (camouflage, set_pref): Removed camouflage()ing of
	'user', since the first time I used this version of gnatsweb, it
	became convinced that my username was 'ag`tavqw'.  This migration
	problem far outweighs the meager benefits of masking the username
	in the cookie.  camouflage()ing the password will still cause
	migration problems for sites that have used a previous incarnation
	of gnatsweb, but it might be worth it...

	* gnatsweb.pl (page_start_html): Don't show logout button if
	$site_gnatsweb_server_auth is set.  Don't show button bar on main
	page.  Changed all the html tags to lowercase, for
	standards-compliance.

	* gnatsweb.pl (datemenu, edit): Removed datemenu(), and the one
	(unreachable) reference to it.  It was unused, and probably
	justifiably so, given the robust date parsing abilities in gnatsd.

	* gnatsweb.pl (display_query_results): Strip empty params out of
	$url for the "View for bookmarking" link.

	* gnatsweb.pl (store_query): Strip empty params out of
	$query_string before building cookie, to help keep it under the 4K
	limit.  Check (approx) length of cookie, error if it looks like
	it's going to be over 4K.

	* gnatsweb.pl (get_mailto_link): Added a new config parameter,
	%site_pr_submission_address.  If set for the current database,
	get_mailto_link() adds a mailto: link ("submit followup via
	email") that goes to the local PR submission address and the PR's
	Reply-To address.  The subject is set so that the message gets
	tacked on to the PR's audit trail.

2001-09-02  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* test.pl: Remove parse/unparse tests.  These would be very hard
	  to get to work with GNATS 4's customized fields.

2001-08-23  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* gnatsweb.pl ($VERSION): Change to 3.98.

	* gnatsweb.pl (submitedit): Corrected a typo that prevented
	  free-text search against specific fields from working.  Thanks
	  to Paul-Andre Panon for spotting this.

2001-08-20  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* gnatsweb.pl (edit): Add the attribute wrap=hard to
	  Reason-Changed textareas.  Causes input in these fields to be
	  added to the Audit-Trail prewrapped at $textwidth.

2001-08-19  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* gnatsweb.pl (parse_categories): No longer exclude 'pending' from
	  the category search list. This restriction made little sense.

	* gnatsweb.pl: Move the initial declaraion of $GNATS_VERS from the
	  sub initialize to the outermost block so that main_page can
	  access it.
	- (main_page): Print both the Gnatsweb and GNATS version numbers
	  in the main page footer.

	* gnatsweb.pl ($use_temp_db_prefs_cookie): New variable.  If this
	  is set, the db_prefs cookie is set without an expiry date,
	  generating a browser-stored cookie limited to the current
	  session.  This improves security.
	- (cmd_login): Set cookie expiry only if $use_temp_db_prefs_cookie
	  is false.

        * gnatsweb.pl (camouflage): New subroutine. If passed a scalar,
          camouflages it by XORing it with 19 and reversing the string.
          If passed a hash reference with keys "user" and "password", it
          camouflages the values of these keys using the same algorithm.
        - (uncamouflage): The camouflage algorithm is symmetric, so we
          just call it from here.
        - (cmd_login): Use camouflage to hide username and password in
          login cookies.  Will only provide a certain measure of security
          against the most casual and amateurish of prying eyes.
	- (set_pref): Use uncamouflage to retrieve username and password.

2001-08-18  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* gnatsweb.pl (submitquery): Make issuing of the client command
	  EXPR conditional.  Certain slightly unusual queries
	  would result in the client command EXPR being sent with no
	  parameter, generating a gnatsd error.

	* gnatsweb.pl (query_page): Avoid use strict-related warning if
	  $global_prefs{'columns'} was undefined.

	* gnatsweb.pl (print_stored_queries): Filter out stored queries
	  for other databases than the current one.  Change due to
	  Paul-Andre Panon.

2001-08-17  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* test.pl: Change query commands to work with gnatsd v4 syntax.
	  Testing now runs, but fails on parse/unparse.  May need a rewrite.

2001-08-16  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* gnatsweb.pl: Make the $suppress_main variable global - it has to
	  be in order to make gnatsweb.pl callable from the test.pl
	  script.

2001-08-12  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* gnatsweb.pl (login_page): Prevent the word "Password" from being
	  printed twice.

2001-08-08  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* gnatsweb.pl: ($VERSION): Change to 3.97 -- we're nearly
	  4.0 feature-complete now.

	* gnatsweb.pl: Replace the Login Again functionality with a Log
	  Out function:
	- Replace all occurences of "login again" with "logout".
	- (main_page): Change the "Login Again" label to "Log Out / Change
	  Database".
	- (cmd_logout): New subroutine. Clears the db_prefs cookie and
	  redirects the user to the login page.
	- (main): Call cmd_logout instead of going directly to login_page.

	* gnatsweb.pl: Add a navigation bar just below the page banner:
	- $site_button_background and $site_button_foreground. New
	  variables initialized to black and white resp.
	- (page_start_html): Rewrite to display button bar and generally
	  clean up the code, with clearer style declarations.
	- (login_page): Call page_start_html with an additional parameter
	  set to '1'. Prevents the button bar from being displayed on this
	  page.

2001-08-07  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* gnatsweb.pl (download_attachment): Fix a syntax error which
	prevented attachment downloading from working properly.

	* Cleanup to get rid of strict warnings:
	gnatsweb.pl: Change initial definition of
	$no_create_without_access from undef to ''.
	- (submitedit, main, mark_urls, display_query_results, unparsepr):
	  Add some || '' constructs. Fixes a bunch of 'uninitialized
	  value' warnings.
	- (param2field): Correctly translate 'PR' to 'Number'.  Remove
	  warn statement as it makes little sense with GNATS 4
	  configurable fields.
	
2001-07-26  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* gnatsweb.pl (display_query_results): Use cellspacing 0 and
	  cellpadding 1. Makes table a tad more readable.

	* gnatsweb.pl (page_start_html): Redesign the banner. Different
	typeface, different size. This is done so that we no longer need
	to keep separate styles based on browser and platform - things
	will look fairly similar across the board.
	- Also, we now print user and access level info in the banner
	itself, along with the database name.
	- (page_heading): Stop printing user and access level info in the
	heading (it now appears in the banner). We now print the page
	heading inside a simple <H1>, instead of in a table. This makes
	for cleaner HTML and less space between heading and page content.
	- Remove the third parameter in calls to page_heading. This used
	to control whether to print user and access info in the page
	heading.

2001-07-18  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* gnatsweb.pl (view, edit): Removed the check for non-digit
	characters introduced below. It is no longer needed since we now
	treat CODE_NO_PRS_MATCHED as an error.

	* gnatsweb.pl (store_query): Add checking of query name before we
	attempt to store it. According to
	http://home.netscape.com/newsref/std/cookie_spec.html, cookie
	names must not contain commas, semicolons or spaces, and they must
	not be blank.

	* gnatsweb.pl: New variables $print_header_done,
	$page_start_html_done and $page_heading_done to be used to
	ensure that we don't print headers, headings and banners twice.
	(print_header, page_start_html, page_heading): Use these
	variables.
	- All direct calls to CGI.pm's header function replaced by calls
	  to print_header.
	- (gerror): Rewritten to output headers, heading and banner.
	- (get_reply): We now treat the return code CODE_NO_PRS_MATCHED as
	  an error. Otherwise, users would be able to edit nonexistent
	  PRs. This has the unfortunate side-effect of outputting an error
	  when there are no matches to a query, but I consider that a
	  small price to pay. Tweaked error code formatting.
	- (popup_or_scrolling_menu): Inserted missing '!' in if statement.
	- (edit): Switched order of page_heading and readpr.

2001-07-16  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* gnatsweb.pl (page_heading): Use -nowrap=>'1' instead of plain
	  nowrap to avoid silly CGI.pm messages in the error_log.

	* gnatsweb.pl (error_page): New subroutine which replaces the
	local err_sub routine used in submitedit. We want all error
	reporting to be done through this subroutine, since it gives us
	a consistent look.

	* gnatsweb.pl (popup_or_scrolling_menu): Check if $string is
	defined by using 'if defined' instead of a numeric comparison.

	* gnatsweb.pl (advanced_query_page): Add a line below 'Closed
	After' and 'Closed Before' reminding users to uncheck 'Ignore
	Closed'. Added a little bit of vertical	space between tables.
	Ported from 2.x branch.

	* gnatsweb.pl (view, edit): Add a check for non-digit characters
	in PR numbers. If such characters are found, an appropriate error
	message is issued. gnatsd will actually accept PR numbers on the
	format string/xxxx, where xxxx is a number,  and return the
	appropriate PR. However, when edits are submitted to such a PR, a
	new PR with the "number" 'string/xxxx' would be created, with the
	same category as the original PR. This is a workaround for that
	problem. Ported from 2.x branch.

	* gnatsweb.pl: (page_heading): Set the width of the table
	containing the page heading and database, username and access
	level to 100%. Opera would display a too narrow table when the
	width wasn't explicitly set.

	* gnatsweb.pl (main): Add an explicit link to the automatic
        redirection page. Fix due to Mark Kuchel. Ported from 2.x branch.

	* gnatsweb.pl (login_page_javascript): Use correct <SCRIPT
        LANGUAGE>.

	* gnatsweb.pl (submitquery): If there's a query name, include it
	in the page heading. Ported from 2.x branch.

	* gnatsweb.pl (store_query): Gnatsweb will no longer allow you to
	store a query if this would result in more than 20 cookies.
	Otherwise random cookies get dropped and things start acting
	weird. 20 is a magical number as defined in
	http://home.netscape.com/newsref/std/cookie_spec.html. Ported from
	2.x branch.

	* gnatsweb-pl (display_query_results): Added a 'View for
	bookmarking' link, which reloads the same query so that you can
	bookmark it in your browser. Ported from 2.x branch.
	
	* gnatsweb.pl (submitedit): Modifying the CC list (X-GNATS-Notify
	header) was not working if X-GNATS-Notify existed but was empty.
	Problem turned out to be a couple of extraneous spaces in the
	field substitution regexps.

	* gnatsweb.pl: Change the example value of $site_mail_domain from
	@juniper.net to something nonexistent.

	* Implement redirects after edits (ported from 2.x branch): 
	
	gnatsweb.pl (get_pr_url): New subroutine. Returns a URL which
	will take one to the specified $pr and with a specified $cmd.
	(get_editpr_url, get_viewpr_url): Rewrite to use get_pr_url.
	(get_script_name): New subroutine. Same as script_name(), but
	includes 'database=xxx' parameter.
	(view, edit): Pass hidden variable return_url.
	(submitedit): New local subroutine err_sub. Makes it easier to
	postpone calling print_header. Rewrite all error messages in
	submitedit to use this routine.
	(submitedit): After submitting edits, users are now redirected
	back to the page where they were before the edit.
	(display_query_results): Change to use get_viewpr_url and
	get_editpr_url so that we get the return_url parameter as part of
	the URL.
	(print_header): New subroutine. Print HTTP header unless it's been
	printed already.
	(main): Don't call header() before calling submitedit(). Let
	submitedit itself take care of printing the headers it needs.

2001-07-15  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* test.pl: Don't use 'diff -u' during 'make test'; not everyone
	has GNU diff. Ported from 2.x branch.

        * gnatsweb.pl (decode_attachment): Fix a problem where attachments
	containing a double newline in the body would be truncated
	during decoding. Fix due to Omar Rashad.
	
	* gnatsweb.pl (parsepr): Strip leading space characters from each
	line of the attachments. Fixes attachment handling, which has
	been broken almost since GNATS 4.0 development started.

	* gnatsweb.pl (download_attachment): Insert a conditional to send
        the header based on HTTP_USER_AGENT. MS Internet Explorer 5.5
        would attempt to save downloaded attachments under the same name
        as the Gnatsweb script file, typically gnatsweb.pl. This is
        because MSIE handles the HTTP header "Content-Disposition:
        attachment" wrongly. It needs "file" instead of "attachment".

	* gnatsweb.pl (submitedit): Check whether fields that are
	specified in dbconfig as requiring a 'Reason Changed' have the
	reason specified.

2001-07-08  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* $VERSION increased to 3.96.

2001-07-08  Dirk Bergstrom  <dirk@juniper.net>

	* gnatsweb.pl: now runs with "use strict;". while combing though
	the code to properly declare and scope variables, i found several
	flags and routines that were unused; they were removed.  some
	routines were massaged to accomodate lexical scoping:
	- the sortby_field(_num) subs were inlined.
	- can_do_mime is wrapped in a do{} block to capture the cached value.
	- $default was removed from date_menu.

	* gnatsweb.pl: configuration switches gathered together at the top
	of the file, keeping all the hardcoded global values in one place.
 
	* gnatsweb.pl (popup_or_scrolling_menu): category
	dropdown/scrolling list now includes descriptions.  the
	descriptions from the categories file are now displayed, instead
	of just the (sometimes cryptic) codes.
 
	* gnatsweb.pl: uses warn() to write errors to the server logfile
	whenever an error is generated, a message is emitted to STDERR,
	containing a diagnostic message, the username, the database, and a
	stacktrace.
 
	* gnatsweb.pl (send_pr, edit): the create and edit PR pages now
	keep track of field number, so that javascript hooks can be
	applied.  forms are also named.  gnats field names customarily
	include dashes, and javascript names cannot include dashes, so it
	was impossible to write a javascript routine that could examine or
	change a field value.  to get around this, the code keeps track of
	the field number (starting at zero), and passes this value to the
	cb() callback.  this way, the callback can generate javascript on
	the fly, for things like client-side validitity checking.
 
	* gnatsweb.pl (send_pr, edit): field descriptions are printed in
	the create and edit pages (and optionally on the view PR page,
	though that tends to look overly cluttered), using the field
	descriptions from the dbconfig file.  this necessitated setting
	the column width of the left column to 20%, so that the
	descriptions would wrap.

	* gnatsweb.pl (view): tidied up logic for
	   [edit] or [view audit-trail] or send email to interested parties
	so that the last 'or' doesn't show up when users w/o edit access
	are viewing the audit trail.
	
	* gnatsweb.pl (page_start_html): database name now displayed in
	header.
 
	* gnatsweb.pl (mark_urls): replaced with a more rigorous
	version. now does email addresses, and turns references to PRs
	into view_pr_urls.  this is used on just about every field in
	the view-pr page, and on many fields in the query-results
	page.
 
	* gnatsweb.pl (client_exit): improved handling of errors and
	exceptions from gnatsd.  $suppress_client_exit is now actually
	honored, so that submitedit() and initialize() can recover
	gracefully from problems.  this is particularly important in
	submitedit() -- if we shut down the connection to gnatsd on an
	edit error, the lock on the PR will not be properly cleared.  this
	fixes a problem with stale PR lockfiles.
  
	* gnatsweb.pl (submitquery): dates are returned from queries as
	ISO-8601-like dates (yyyy-mm-dd hh:mm:ss tz), using the query
	format %{%Y-%m-%d %H:%M:%S %Z}D.  This makes sorting query results
	by date actually work.
  
	* gnatsweb.pl (submitquery): empty parameters are stripped from
	the query-string on the query-results page.  in a gnats db with
	many fields, the query-string will become very long, filled up
	with ...&field_name=&other_field=&third_field=&....  this is a
	problem, since IE5 truncates query-strings at ~2048 characters.

	* gnatsweb.pl (advanced_query_page): applied yngve's fix of v2.33
	to the advanced query page.
	
	* gnatsweb.pl: added explicit return statements to several subs
	for readability.
 
	* gnatsweb.pl (param2field): now looks thru @fieldnames for a
	matching field.  the old, algorithmic, behavior would fail on
	fields with multiple consecutive capitalized letters (ie: ID-Num
	would come back as Id-Num) and fields containing underscores
	(ie: Project_Number would come back as Project-Number).  if there
	is no matching gnats fieldname, it falls back to the old behavior.
 
	* gnatsweb.pl ($sn): global variable $sn renamed $script_name for
	clarity.
 
	* gnatsweb.pl: Responsible field always displayed as a mailto:
	link
 
	* gnatsweb.pl (send_html): removed the die() on file open failure.
	it seemed better to simply return, and let the caller decide what
	to do, especially since help_page already had error handling coded
	in...
 
	* gnatsweb.pl (can_edit, can_create): now use the access levels
	defined in gnatsd.h
 
	* gnatsweb.pl: added $no_create_without_access flag.  useful
	primarily for web-only sites which wish to limit PR creation to
	users with a minimum access level.  allows for view-without-create
	access.
 
	* gnatsweb.pl: gnatsd/gnatsweb can be set up for web-only access.
	if you want to set up a more tightly secured installation, you can
	allow only localhost connections to gnatsd, restrict logins to the
	host, and require all users to go thru gnatsweb.  this option
	assumes that the web server is doing authentication, and that the
	REMOTE_USER environment variable is correctly set.  with this
	switch set, the "login again" button is replaced by a "change
	database" button.

	* gnatsweb.pl (change_database): added to support web-only access
 
	* gnatsweb.pl: gnatsweb can be set up to ignore the gnats
	password.  the gnats network mode is quite cavalier about
	passwords, and some sites may elect not to use gnats passwords.
	if so, there's no point in gnatsweb asking for them.  if this
	switch is set, the "login again" page does not prompt for a
	password.
 
	* gnatsweb.pl (parse_config): removed this sub, since it is
	unused, and the %config hash is unused.  i have no clue why it's
	here -- it may be a relic from gnats 3.113, which, iirc, has a
	"config" file...
 
	* gnatsweb.pl ($site_mailer): removed, as it was unused
 
	* gnatsweb.pl (submitedit): removed $ok flag, since it was
	superfluous.  the "last LOCKED;" statements in the error handling
	blocks serve the same purpose
 
	* gnatsweb.pl (%db_pref): changed db_pref hash element 'email' to
	'email_addr'.  otherwise, whatever value user entered into the
	"Reporter's Email" field on the "Create PR" page would get stuck
	as their email address (because set_pref overrides %cvals{'foo'}
	with $q->param('foo')...)
 
	* gnatsweb.pl (initialize): substantially rewritten.  the old
	version issued a CHDB first, then attempted to set the user name
	(and thus get access) with USER.  this could lead to a deadlock
	situation where the user was "in" a database they didn't have
	access to, and thus login_page() couldn't display a list of
	databases so the user could change to one they *did* have access
	to.  access level defaulted to 'edit'.  the new version starts off
	by caching the results of DBLS, so that any failures down the line
	won't leave us in a deadlock.  then it does a CHDB, using the
	three-argument form (db-name, user-name, password), which will
	fail if the user does not have access to the selected database.
	from the response to the CHDB command, it extracts the
	access-level the user is granted in that database, and sets the
	global $access_level variable
	(access_level defaults to view, instead of edit).  finally, if the
	access_level is less than view (ie, submit, none or deny), the
	user is given the login page.
 
	* gnatsweb.pl (main, cmd_login): moved login code from command
	switch in main() to it's own sub.  this makes main() much cleaner.
	since i added a bunch of code to the login, it seemed best to move
	it to it's own sub.  cmd_login() also does some sanity-checking on
	the user name -- i discovered that users were entering PR numbers
	in the login field, because they were so used to just typing away
	in the first field they saw...
 
	* gnatsweb.pl (login_page): now displays an optional message,
	given as second parameter, useful for passing authentication
	errors to the user. only displays the necessary fields, depending
	on $site_gnats_browser_auth and $site_no_gnats_passwords.
 
	* gnatsweb.pl: debug flags allow for browser viewing of
	communications with gnatsd.  if the $site_allow_remote_debug flag
	is set, setting the 'debug' param will allow you to see the
	conversation between gnatsweb and gnatsd.  setting it to 'cmd'
	will show just gnatsweb's commands, 'reply' will show just
	gnatsd's replies, and 'all' will show both.  this is useful mostly
	for developers and gnats admins.  unfortunately, there's no good
	way to limit use of debug params to users with admin privileges,
	since much of what you might want to snoop happens *before* access
	level is determined.
 
	* gnatsweb.pl (hidden_debug): added to forms to preserve state of
	debug params.  this allows debugging during queries and
	create/edit submits.
 
	* gnatsweb.pl (main_page): now exit()s when finished.  so that we
	can call it from the big switch in main() when users try to do
	something they aren't allowed to do.
 
	* gnatsweb.pl (main): if access level is less than 'edit', users
	cannot submit edits to PRs.  previously, users w/o edit privileges
	did not see the "edit" button on the main page, but gnatsweb did
	not explicitly prevent them from submitting an edit
	(ie, with a manually created form).  this loophole is now closed.

	* gnatsweb.pl (main): $gnatsweb_site_file is read and eval'd,
	rather than pulled in using do(), to facilitate using strict
	(using do(), the included file is not in the including file's
	lexical scope).  errors generate a warn()ing to the server log as
	well as a die (which will go to the browser, via
	CGI::Carp::FatalsToBrowser).
	
	* gnatsweb-site-sente.pl: configuration switches from gnatsweb.pl
	duplicated at the top of the file, since this is the recommended
	place for them...

	* gnatsweb-site-sente.pl (site_callback): cleaned up the if
	blocks, removed unsupported callbacks.  added documentation for
	the suported callbacks.

2001-06-26  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* gnatsweb.pl (help_page): Fix a serious security hole where an
	attacker would be able to read any file on the system or run any
	command to which the web server process user had access to by
	submitting a rogue help_file parameter in the URL.  help_file is
	now hardcoded to 'gnatsweb.html'.

2001-04-05  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* gnatsweb.pl (query_page): Shift 'number' out of the array of
	selectable column names (@fieldnames) to prevent user from
	selecting it. That would cause the 'number' column to be
	repeated twice, since NUMBER_FIELD is explicitly added to the
	search format in submitquery. The best solution would be to
	remove the explicit addition, but that messes up column sorting.
	However, since the only drawback of the current fix is that we
	force the inclusion of PR numbers in the query results listing,
	this doesn't seem to matter much.
	
        * gnatsweb.pl (help_page): If present, return the gnatsweb.html
	document installed with Gnatsweb, stripped with send_html, as
	help text. Ported from Gnatsweb 2.x branch.

	* gnatsweb.pl (send_html): New subroutine that strips off
	everything outside <BODY> and </BODY> in an HTML document and
	returns the contents. Ported from Gnatsweb 2.x branch.

        * gnatsweb.html: Clean up HTML, fix spelling, remove some <I>'s
	and <B>'s that made the text less readable. Some slight
	rephrasing in order to clarify things.

2001-04-04  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* gnatsweb.pl (display_query_results): Use the provided 'nonempty'
	routine to pad empty cells with &nbsp;'s instead of the if used in
	the last checkin. This only takes care of the cases where the empty
	cells are not at the end of a row.  

	* gnatsweb.pl (display_query_results): When there are one or more
	empty cells at the end of a query result row, the remaining cells
	are padded with &nbsp;'s.

2001-03-29  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* gnatsweb.pl (display_query_results): Add an if clause in order to 
        print an &nbsp; if a field is empty. This is needed because most
	browsers won't render the border of an empty field.

	* gnatsweb.pl: Make output more amenable to CSS stylesheet formatting. 
        Add paragraph tags and enclose stuff that doesn't belong inside 
        paragraphs in DIV tags. Use heading tags instead of font size tags for 
        headings. Also correct some rather bad HTML problems with missing 
        endtags for paragraph and table tags all over the place. These caused 
        Netscape Navigator to refuse to use stylesheet styling in query results 
        table cells. This should also improve browser rendering performance.
	Improved HTML source code formatting by adding lots of \n's

	* gnatsweb.pl (main_page): Remove Matt's and Kenneth's e-mail
	addresses. They do not seem to be valid anymore.

	* gnatsweb.pl (main_page): Collect the two query buttons on one
	line in order to conserve vertical space.

2001-03-24  Gerald Pfeifer  <pfeifer@dbai.tuwien.ac.at>

	* gnatsweb.pl (login_page_javascript): Use correct <SCRIPT LANGUAGE>.
	Fix the Javascript code and improve the warning messages if cookies
	are not enabled.

2001-03-22  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* gnatsweb.pl (display_query_results): Apply escapeHTML to
	$fieldcontents before printing.

2001-03-21  Gerald Pfeifer  <pfeifer@dbai.tuwien.ac.at>

	* gnatsweb.pl ($VERSION): Bump to 3.95.

2001-03-21  Yngve Svendsen  <yngve.svendsen@clustra.com>

	* gnatsweb.pl: New configuration variable $site_stylesheet.
	(page_start_html): Use it.

2001-03-11  Tommi Virtanen  <tv@debian.org>

	* gnatsweb.pl (decode_attachment): Editing bugs with attached files 
	used to bomb out trying to chomp a constant string.

2000-02-08  Tom Tromey  <tromey@cygnus.com>

	Turn URLs in PR text into real URLs:
	* cgi-bin/gnatsweb.pl (mark_urls): New function.
	(view): Use it.
	(edit): Likewise.

2001-02-03  Mark Kuchel <mark@kuchel.net>
            Gerald Pfeifer  <pfeifer@dbai.tuwien.ac.at>

	* gnatsweb.pl (login_page_javascript): Properly warn about cookies
	being required, both if Javascript is enabled and if it is disabled.

2001-01-22  Mark Kuchel <mark@kuchel.net>

	* gnatsweb.pl (main): Generate proper cookie paths.

2001-01-11  Gerald Pfeifer  <pfeifer@dbai.tuwien.ac.at>
	
	* gnatsweb.pl (help_page): Simplify the welcome text and make it
	more generic.
	
2000-12-29  Mark Kuchel <mark@kuchel.net>
            Gerald Pfeifer  <pfeifer@dbai.tuwien.ac.at>

	* gnatsweb.pl (main): Add an explicit link to the automatic
	redirection page.

==========  Starting immediately, we have to use GNU ChangeLogs =====

==========  gnatsweb 2.6 released ===================================

1999-11-30  Kenneth H. Cox  <kenstir@abraham.senteinc.com>

	* Enhancement: If user does not have cookies enabled, they now get
	a warning on the Login page.  Previously, you would have to submit
	the login page before you got the warning, then you would have to
	go back and resubmit the page.  A little JavaScript goes a long
	way.

1999-11-27  Kenneth H. Cox  <kenstir@abraham.senteinc.com>

	* Enhancement: If DEFAULT_RELEASE is set in the gnats config file,
	then it is now used as the default value in new PR's.
	Patch by Brian Cameron <Brian.Cameron@Eng.Sun.COM>.

	* Bug fix: In "send email" link, include GNATS_ADDR.
	Patch by Jason Molenda <jsm@cygnus.com>.

	* Enhancement: Reversed the default sort, so that new PR's appear
	before older ones.  Added some more debug prints.
	Patch by Tim Riker <TimR@CalderaSystems.com>.

1999-11-18  Kenneth H. Cox  <kenstir@abraham.senteinc.com>

	* New features: Now the site_callback can
	- supply default values for various things until they are
	specified and stored in the user's cookies: Reporter's
	email...(more coming?).  This facilitates that first PR for new
	people.
	- print new buttons at top+bottome of main page.
	- print stuff at the top of individual fields on the sendpr and
	editpr pages.

	See gnatsweb-site-sente.pl for	examples.

	* Bug fix: The default list of columns displayed for a query was
	empty; now it isn't.  You can still get the empty list if you
	explicitly turn off all columns.

==========  gnatsweb 2.6 beta2 released ===================================

1999-11-17  Kenneth H. Cox  <kenstir@abraham.senteinc.com>

	* New feature: Now all links and forms contain the database param,
	so that you can keep multiple databases open in multiple browser
	windows.

==========  gnatsweb 2.6 beta released ===================================

1999-11-14  Kenneth H. Cox  <kenstir@abraham.senteinc.com>

	* New feature? Cookies are now stored with path=/.  I don't know
	if this'll help IE users or not; I actually did it to share
	cookies between my test web and my main web.  You should still be
	able to get to your stored queries, and even delete them.

	* New feature: If you follow a URL such as
	http://www.x.com/cgi-bin/gnatsweb.pl?cmd=view&database=main&pr=1269
	and you are forced to login, then after logging in you will be
	redirected to the requested age.  I tried doing this with a
	redirect but that didn't work; had to use a somewhat ugly
	zero-delay refresh.  If you can figure that out I'd be grateful.

	* New feature: Split cookies into a global cookie (column
	preference and email addr) and a db-specific cookie.  That way you
	don't have to keep typing in different passwords if you change
	db's.

	* Code reorg: Cleaned up the main proc especially w.r.t. the
	cookie-setting stuff.  Now all of the preference settings happen
	at once, and there is only one 'switch' over all of the commands.
	However, if you don't have cookies enabled I probably broke the
	detection of this error.

1999-11-13  Kenneth H. Cox  <kenstir@abraham.senteinc.com>

	* New feature: Added a button to delete stored queries.
	Patch by Robert Lupton the Good <rhl@astro.princeton.edu>.

	* Bug fix (get_mailto_link): MSIE users need special handling in
	the mailto: link.
	Patch by <ralph_pursifull@am.exch.hp.com>.

==========  gnatsweb 2.5 released ===================================

1999-10-16  Kenneth H. Cox  <kenstir@abraham.senteinc.com>

	* Bug fix: Attachment file names are now stripped of any path
	elements, so that the browser doesn't prompt you to save,
	e.g. c:\windows\system.ini

	* New feature: In the Query Results page, there is now an edit
	link next to the view link, if you have edit priviledges.

1999-10-13  Kenneth H. Cox  <kenstir@abraham.senteinc.com>

	* New feature: If you have an "unknown" category, then gnatsweb
	will use it as the default, and issue an error if somebody tries
	to submit a PR with Category=unknown.
	Patch by Robert Lupton the Good <rhl@astro.princeton.edu>.

1999-10-01  Kenneth H. Cox  <kenstir@abraham.senteinc.com>

	* Bug fix: When parsing a PR with a description field containing
	From:, gnatsweb would erroneously save that as the originator's
	email address.
	Patch by Elgin Lee <ehl@terisa.com>.

1999-09-28  Kenneth H. Cox  <kenstir@abraham.senteinc.com>

	* Bug fix: For release-based gnats, "target" should have been
	"quarter".

1999-09-24  Ken Cox  <kenstir@special-sauce.senteinc.com>

	* Bug fix (main): Gnatsweb was not handling failed logins
	correctly.  Thanks to Robert Abatecola <robert@tsgus.com>
	for the fix.

==========  gnatsweb 2.5 beta2 ======================================

1999-09-23  Kenneth H. Cox  <kenstir@abraham.senteinc.com>

	* Bug fix: An extra blank attachment was getting added during
	edit.  Now it isn't.

	* New feature: Can now delete file attachments.

	* Enhancement: gnatsweb-site.pl can now set $site_post_max.
	If this is set, and a post exceeds this limit, then gnatsweb will
	fail with an error.  This prevents somebody from swamping your
	server by attaching a huge file.

	* Enhancement: Now sets cookie only when the cookie values
	change.  This makes it much less annoying for people who have
	cookie prompting turned on.
	Patch by Ronald J. Kimball <rkimball@vgi.com> and
	Robert Abatecola <robert@tsgus.com>.

1999-09-20  Kenneth H. Cox  <kenstir@abraham.senteinc.com>

	* New feature: gnatsweb-site.pl can now override basic color
	selections without using the complicated site_callback method.  I
	do this so that I can tell visually when I'm running a test
	version of gnatsweb and when I'm running the production version.
	See $site_background, $site_banner_foreground,
	$site_banner_background.

==========  gnatsweb 2.5 beta ======================================

1999-09-19

	* New feature: Experimental support for file
	attachments in the Unformatted field.  Use MIME::Base64 package
	because it makes life easy.  Looked at but did not use MIME-tools
	for creating and parsing the attachments, because it required that
	too many packages be installed (it contains 21 packages and it
	requires 5 more).  For this to work you need CGI.pm-2.56 and
	any version of MIME::Base64.

	This I consider this support experimental because
            - it's tested, but not all that thoroughly
            - it requires you to get new perl packages
              CGI.pm-2.56
              MIME::Base64
            - there is as yet no way to delete file attachments
            - uploading a big file can cause the appearance that gnatsweb
	      is hung.  I think a workaround is to set $CGI::POST_MAX
	      but I haven't tried it.

	* Enhancement: Added 'send email' link to edit page.  Used to be
	present only on view page.

	* Enhancement: Added submit + reset buttons to top of
	Create PR form.

	* Enhancement (test.pl): Die if loading gnatsweb.pl or
	gnatsweb-site has errors.
	Patch from Ronald J. Kimball <rkimball@vgi.com>

	* Enhancement (validate_email_field): Used regexp donated by
	rkimball@vgi.com to allow @ in email addresses only if it's
	followed by what looks more or less like a domain name.

	* Bug fix (submit_stored_query): Must use full (not relative) URL
	in redirect, to work around bug interacting with Netscape
	Enterprise Server 3.5.1.
	Patch from Elgin Lee <ehl@terisa.com>.

	* Bug fix (initialize): Keyword query should have been 'kywd' not
	'keyw'.
	Patch from Elgin Lee <ehl@terisa.com>.

	* Bug fix (sendpr): Removed "CC" capability, as it was causing too
	much confusion.  That field would only send a copy of the initial
	PR, but wouldn't put you on the X-Gnats-Notify list; everyone here
	thought it would. Now there are only "Reporter's email" and "CC
	these people on PR status email".  Also, the latter list gets a
	copy of the initial PR.  Hopefully that will clear up the
	confusion.

	* Bug fix (sendpr): The X-Gnats-Notify field was not handling
	lists of email addresses properly.  Now it is.
	Patch from James Lin <james@jeditech.com>.

	* Bug fix (submitedit): Really fixed the following bug:
	When sending mail, use email address in
	responsible file as From, if present.
	Reported by Jason Molenda <jsm@cygnus.com>.
	Thanks, Carl Lindberg for pointing this out.

==========  gnatsweb 2.4 released ======================================

1999-07-27  Kenneth H. Cox  <kenstir@abraham.senteinc.com>

	* Enhancement?:  Added HTML help (gnatsweb.html) provided by Matt.
	As yet, there is no way to get to this help file from within
	gnatsweb.  A patch to do this would be appreciated.  Note that to
	keep installation drop-dead simple, this HTML help should be
	served up by gnatsweb itself, not installed in a separate file
	(which for an Apache server would need to be installed into a
	separate directory).

	* Requested enhancement: Use version number (not revision number)
	on main page.

	* Bug fix (get_reply): Gnatsweb was mangling some gnatsd error
	messages so as to make them ungrammatical.
	Reported by Jason Molenda <jsm@cygnus.com>.

	* Bug fix (submitedit): When sending mail, use email address in
	responsible file as From, if present.
	Reported by Jason Molenda <jsm@cygnus.com>.

1999-06-25  Kenneth H. Cox  <kenstir@abraham.senteinc.com>

	* Requested enhancement:
	(sendpr): Description text area is larger (8 lines) Environment is
	smaller (2 lines).

	* Bug fixes:
	(display_query_results): Carl Lindberg fixed a bug in the results
	display when using apache + mod_perl.
	(validate_email_field):  Carl Lindberg made a change to allow
	non-qualified email addresses.

	* Speed enhancement:
	Removed 'use POSIX' since it's not needed.

1999-06-13  Kenneth H. Cox  <kenstir@abraham.senteinc.com>

	* New feature:
	The "send email to interested parties" link now includes in the
	body of the message the URL which you can use to view the PR in
	question.

	* Bug fix:
	The "send email to interested parties" link is now properly URL
	encoded.

1999-05-30  Kenneth H. Cox  <kenstir@abraham.senteinc.com>

	* Bug fix:
	X-gnatsweb-version header was being thrown away by GNATS.  Changed
	to `X-Send-Pr-Version: gnatsweb-$VERSION' so that it wouldn't be.
	Reported by rickm.

1999-05-13  Kenneth H. Cox  <kenstir@abraham.senteinc.com>

	* Bug fix:
	Replaced font() with $q->font() for old CGI.pm's.

==========  gnatsweb 2.3 released ======================================

1999-05-08  Ken Cox  <kenstir@special-sauce.senteinc.com>

	* Requested enhancement: Reporter's email address is now shown on
	the view and edit pages.

	* Bug fixes:
	(initialize): Fixed bug reported by Thomas A Peterson
	<tap@htc.honeywell.com>:  If a user has logged in, then somebody
	changes their gnatsd password, then gnatsweb got stuck; it would
	try the old password without presenting the login screen.  Now for
	the 'chdb' and 'user' commands, failure takes you to the login
	screen.
	(main): Use 'warn' to report compilation errors in
	'gnats-site.pl'.  Previously these errors were not being reported
	anywhere.
	(everywhere): Use '$q->escapeHTML' instead of 'CGI::escapeHTML',
	as the latter was not working for folks with old CGI.pm's.

	* Audit-Trail feature (submitedit): Since no conclusion was
	reached on the gnats mailing list re: the redesigned Audit-Trail
	format and how to change all of the programs to support it, I
	implemented a gnatsweb-only feature.  In the site_callback you can
	set a field's AUDITINCLUDE flag; if the flag is set then changes
	in that field are recorded in the Audit-Trail.  Multitext fields
	are indented when their old/new values are printed.  By default,
	the only fields which have the AUDITINCLUDE flag set are
	Responsible and State.

1999-04-25  Ken Cox  <kenstir@special-sauce.senteinc.com>

	* Bug fixes:
	(interested_parties): Fixed notify problems reported by someone.
	Since MLPR is not working as expected, do the work in this sub.
	(trim_responsible): Fixed bug reported by Matt.  Don't lowercase
	the Responsible name address, don't confuse Responsible with email
	addresses.

	* View PR page: Display a mailto link for sending email to all
	interested parties.

1999-04-21  Ken Cox  <kenstir@special-sauce.senteinc.com>

	* PR Notify lists: Now editors can add themselves to the list of
	people who get notified when a PR changes state, by changing
	"X-GNATS-Notify".  This is also available when creating a new PR.

	* New PR validation: submitnewpr() now performs more error
	checking on a new PR before mailing it.

	* Bug fixes:
	test.pl: Fixed tests so that they don't fail for lines beginning
	with '.'.  RickM #22.
	(initialize): Removed 'pending' from category list.
	(submitedit): No longer gives an error if it trims old-style
	'Responsible: kenstir (Ken Cox)' to 'Responsible: kenstir'.
	(praddr): Patch from Carl to support blank responsible field.

1999-04-17  Ken Cox  <kenstir@special-sauce.senteinc.com>

	* Better test harness: Does query, then uses those PR's for
	parsepr/unparsepr test.

	* In email notifications, include database name in URL.

==========  gnatsweb 2.2 released ======================================

1999-04-17  Kenneth H. Cox  <kenstir@abraham.senteinc.com>

	* site_callback: New reason 'initialize', lets the site_callback
	muck with the global data structures if desired.
	Suggested by Carl_Lindberg@BLaCKSMITH.com.

	* Advanced Query page:
	- Added reset button.  RickM #8.
	- Sort category, submitter_id, responsible lists.  RickM #5.
	- Reordered date queries on Advanced Query page, as requested by
	RickM #6.
	- Added GNATS_RELEASE_BASED date queries.

	* Create PR page: Submitter-Id and Originator are now visible;
	Submitter-Id is treated as an enumerated field.  Both are
	remembered via the cookie.

	* Misc fixes:
	- New PR no longer escapes leading '.' characters.  RickM #23.
	- No more blank cells in query results table.
	- Check 2 common places for sendmail, before bombing
	out with a helpful message.  Fixes reports of gnatsweb install
	trouble on solaris.
	- Can now display and sort by Confidential, Release, Submitter-Id.
	RickM bug #3, #10.

	* Use scrolling_list instead of checkbox_group on query page.  Was
	beginning to have too many unaligned checkboxes.

	* New $site_release_based var controls display of fields added by
	compiling gnats with -DGNATS_RELEASE_BASED
	Incorporates spirit of patches by Paul Traina <pst@juniper.net>.

1999-04-14  Kenneth H. Cox  <kenstir@abraham.senteinc.com>

	* gnatsweb.pl: Replaced CGI function calls with method
	invocations, e.g. Tr() with $q->Tr().  This is more in keeping
	with mg's style, and clears up problems which Martin Apel
	<apel@tecmath.de> had using perl 5.004_04.

1999-04-13  Kenneth H. Cox  <kenstir@abraham.senteinc.com>

	* gnatsweb.pl (view): Only print 'edit' button on View page if
	user can edit.  RickM bug #1.

1999-04-12  Kenneth H. Cox  <kenstir@abraham.senteinc.com>

	* gnatsweb.pl (submitedit): Don't complain if you can't get the
	email address of the old Responsible; it may have been invalid, or
	they may have left the company.
	Reported by Carl_Lindberg@BLaCKSMITH.com.
	(edit): When editing a PR, trim Responsible field as if it were an
	email address  Carl reports that his PR's from gnats 3.2 look this
	way.
	(sendpr, edit): Shift 'all' off of @responsible and @state.
	Reported by Carl.

==========  gnatsweb 2.1 released ======================================

* Fixed Advanced Query page: multi-selection listboxes weren't working;
was querying for "|kenstir".  Patch suggested by
Carl_Lindberg@BLaCKSMITH.com.

* site_callback() extended.  Now called for additional reasons:
        page_footer --   can print extra stuff near the bottom of the
                         page, e.g. to add buttons on the view page
        page_end_html -- can extend the absolute end of the page
Requested by Carl_Lindberg@BLaCKSMITH.com.

* --- INCOMPATIBILE CHANGES to site_callback() ---
  - When the $reason is 'page_heading', the argument list is different.
    See gnatsweb-site-sente.pl for example.  Changed for consistency.
  - No need for reason 'view_postlude'; can be done with 'page_footer'.

Changes in 2.0:

* Stored queries.

* Query results can be sorted by clicking on a column heading.

* Advanced query page for access to full power of gnats.

* Integrated with Matt Gerassimoff's "gnats.pl" for gnatsd hipness.
