Post release updates
[gnupg.git] / keyserver / ChangeLog
index 0a0ab1a..14d5f62 100644 (file)
@@ -1,5 +1,571 @@
+2009-08-26  Werner Koch  <wk@g10code.com>
+
+       * gpgkeys_hkp.c: Include util.h.
+       (send_key): Use strconcat to build KEY.
+       (appendable_path): New.
+       (get_name): Use strconcat to build REQUEST.
+       (search_key): Ditto.
+
+       * ksutil.c: Include util.h.
+       (parse_ks_options): Use make_filename_try for the ca-cert-file arg.
+
+2009-07-06  David Shaw  <dshaw@jabberwocky.com>
+
+       * gpgkeys_hkp.c (main, srv_replace): Minor tweaks to use the
+       DNS-SD names ("pgpkey-http" and "pgpkey-https") in SRV lookups
+       instead of "hkp" and "hkps".
+
+2009-06-24  Werner Koch  <wk@g10code.com>
+
+       * gpgkeys_ldap.c (send_key): Do not deep free a NULL modlist.
+       Reported by Fabian Keil.
+
+2009-05-28  David Shaw  <dshaw@jabberwocky.com>
+
+       From 1.4:
+
+       * curl-shim.c (curl_slist_append, curl_slist_free_all): New.
+       Simple wrappers around strlist_t to emulate the curl way of doing
+       string lists.
+       (curl_easy_setopt): Handle the curl HTTPHEADER option.
+
+       * gpgkeys_curl.c, gpgkeys_hkp.c (main): Avoid caches to get the
+       most recent copy of the key.  This is bug #1061.
+
+2009-05-27  David Shaw  <dshaw@jabberwocky.com>
+
+       From 1.4:
+
+       * gpgkeys_hkp.c (srv_replace): New function to transform a SRV
+       hostname to a real hostname.
+       (main): Call it from here for the HAVE_LIBCURL case (without
+       libcurl is handled via the curl-shim).
+
+       * curl-shim.h, curl-shim.c (curl_easy_setopt, curl_easy_perform):
+       Add a CURLOPT_SRVTAG_GPG_HACK (passed through the the http
+       engine).
+
+2009-05-10  David Shaw  <dshaw@jabberwocky.com>
+
+       From 1.4:
+
+       * gpgkeys_hkp.c (send_key, get_key, get_name, search_key, main):
+       Add support for SSLized HKP.
+
+       * curl-shim.h (curl_version): No need to provide a version for
+       curl-shim as it always matches the GnuPG version.
+
+       * gpgkeys_curl.c, gpgkeys_hkp.c (main): Show which version of curl
+       we're using as part of --version.
+
+       * gpgkeys_curl.c, gpgkeys_finger.c, gpgkeys_hkp.c,
+       gpgkeys_ldap.c (show_help): Document --version.
+
+2009-05-04  David Shaw  <dshaw@jabberwocky.com>
+
+       * gpgkeys_mailto.in: Set 'mail-from' as a keyserver-option, rather
+       than the ugly ?from= syntax.
+
+2009-01-22  Werner Koch  <wk@g10code.com>
+
+       * Makefile.am (gpg2keys_curl_LDADD, gpg2keys_hkp_LDADD): Add all
+       standard libs.
+
+2008-10-20  Werner Koch  <wk@g10code.com>
+
+       * curl-shim.c (curl_global_init): Mark usused arg.
+       (curl_version_info): Ditto.
+
+2008-08-29  Werner Koch  <wk@g10code.com>
+
+       * gpgkeys_kdns.c: Changed copyright notice to the FSF.
+
+2008-04-21  Werner Koch  <wk@g10code.com>
+
+       * ksutil.c (w32_init_sockets) [HAVE_W32_SYSTEM]: New.
+       * curl-shim.c (curl_easy_init) [HAVE_W32_SYSTEM]: Call it.
+       * gpgkeys_finger.c: s/_WIN32/HAVE_W32_SYSTEM/.
+       (init_sockets): Remove.
+       (connect_server) [HAVE_W32_SYSTEM]: Call new function.  
+
+2008-04-14  David Shaw  <dshaw@jabberwocky.com>
+
+       * gpgkeys_curl.c (main), gpgkeys_hkp.c (main): Make sure all
+       libcurl number options are passed as long.
+
+       * curl-shim.c (curl_easy_setopt): Minor tweak to match the real
+       curl better - libcurl uses 'long', not 'unsigned int'.
+
+2008-04-07  Werner Koch  <wk@g10code.com>
+
+       * gpgkeys_kdns.c: New.
+       * Makefile.am: Support kdns. 
+
+       * no-libgcrypt.c (gcry_strdup): Fix.  It was not used.
+
+2008-03-25  Werner Koch  <wk@g10code.com>
+
+       * gpgkeys_ldap.c (build_attrs): Take care of char defaulting to
+       unsigned when using hextobyte.
+
+2007-10-25  David Shaw  <dshaw@jabberwocky.com>  (wk)
+
+       From 1.4 (July):
+       
+       * gpgkeys_ldap.c (main): Fix bug in setting up whether to verify
+       peer SSL cert.  This used to work with older OpenLDAP, but is now
+       more strictly handled.
+
+       * gpgkeys_ldap.c (search_key, main): Fix bug where searching for
+       foo bar (no quotes) on the command line resulted in searching for
+       "foo\2Abar" due to LDAP quoting.  The proper search is "foo*bar".
+
+2007-06-11  Werner Koch  <wk@g10code.com>
+
+       * gpgkeys_hkp.c (send_key): Rename eof to r_eof as some Windows
+       header defines such a symbol.
+       (main): Likewise.
+
+2007-06-06  Werner Koch  <wk@g10code.com>
+
+       * gpgkeys_ldap.c (send_key, send_key_keyserver): Rename eof to
+       r_eof as some Windows file has such a symbol.
+       (main): Likewise.
+
+2007-05-07  Werner Koch  <wk@g10code.com>
+
+       * Makefile.am (gpg2keys_ldap_LDADD): Add GPG_ERROR_LIBS.
+
+2007-05-04  Werner Koch  <wk@g10code.com>
+
+       * gpgkeys_test.in: Rename to ..
+       * gpg2keys_test.in: .. this.
+       * gpgkeys_mailto.in: Rename to ..
+       * gpg2keys_mailto.in: .. this
+       * Makefile.am: Likewise
+
+2007-03-13  David Shaw  <dshaw@jabberwocky.com>
+
+       From STABLE-BRANCH-1-4
+
+       * gpgkeys_curl.c (main): Use curl_version_info to verify that the
+       protocol we're about to use is actually available.
+
+       * curl-shim.h, curl-shim.c (curl_free): Make into a macro.
+       (curl_version_info): New.  Only advertises "http" for our shim, of
+       course.
+
+2007-03-09  David Shaw  <dshaw@jabberwocky.com>
+
+       From STABLE-BRANCH-1-4
+
+       * gpgkeys_ldap.c (send_key): Missing a free().
+
+       * curl-shim.c (curl_easy_perform): Some debugging items that may
+       be handy.
+
+2006-12-03  David Shaw  <dshaw@jabberwocky.com>
+
+       * gpgkeys_hkp.c (search_key): HKP keyservers like the 0x to be
+       present when searching by keyID.
+
+2006-11-22  Werner Koch  <wk@g10code.com>
+
+       * Makefile.am (gpg2keys_ldap_LDADD): Add jnlib.  This is needed
+       for some replacement functions.
+
+2006-11-21  Werner Koch  <wk@g10code.com>
+
+       * curl-shim.c (curl_easy_perform): Made BUFLEN and MAXLNE a size_t.
+
+2006-11-05  David Shaw  <dshaw@jabberwocky.com>
+
+       * gpgkeys_hkp.c (curl_mrindex_writer): Revert previous change.
+       Key-not-found still has a HTML response.
+
+2006-10-24  Marcus Brinkmann  <marcus@g10code.de>
+
+       * Makefile.am (gpg2keys_ldap_CPPFLAGS): Rename second instance to ...
+       (gpg2keys_finger_CPPFLAGS): ... this.
+
+2006-10-20  Werner Koch  <wk@g10code.com>
+
+       * Makefile.am: Reporder macros for better readability.
+       (gpg2keys_finger_LDADD): Add GPG_ERROR_LIBS.
+
+2006-10-19  David Shaw  <dshaw@jabberwocky.com>
+
+       * gpgkeys_hkp.c (curl_mrindex_writer): Print a warning if we see
+       HTML coming back from a MR hkp query.
+
+2006-10-17  Werner Koch  <wk@g10code.com>
+
+       * Makefile.am: Removed W32LIBS as they are included in NETLIBS.
+       Removed PTH_LIBS.
+
+2006-09-26  Werner Koch  <wk@g10code.com>
+
+       * curl-shim.c: Adjusted for changes in http.c.
+       (curl_easy_perform): Changed LINE from unsigned char* to char*.
+
+       * Makefile.am (gpg2keys_curl_LDADD, gpg2keys_hkp_LDADD)
+       [FAKE_CURL]: Need to link against common_libs and pth.
+
+       * curl-shim.h, curl-shim.c: Removed license exception as not
+       needed here.
+
+2006-09-22  Werner Koch  <wk@g10code.com>
+
+       * gpgkeys_curl.c, gpgkeys_hkp.c, gpgkeys_ldap.c, curl-shim.c:
+       * curl-shim.h, ksutil.c, ksutil.h: Add special license exception
+       for OpenSSL.  This helps to avoid license conflicts if OpenLDAP or
+       cURL is linked against OpenSSL and we would thus indirectly link
+       to OpenSSL.  This is considered a bug fix and forgives all
+       possible violations, pertaining to this issue, possibly occured in
+       the past.
+       
+       * no-libgcrypt.c: Changed license to a simple all permissive one.
+
+       * Makefile.am (gpg2keys_ldap_LDADD): For license reasons do not
+       link against common_libs.
+       (gpg2keys_curl_LDADD, gpg2keys_hkp_LDADD): Ditto.
+       * ksutil.c (ks_hextobyte, ks_toupper, ks_strcasecmp): New.
+       Identical to the ascii_foo versions from jnlib.
+       * gpgkeys_ldap.c: Include assert.h.
+       (main): Replace BUG by assert.
+       (build_attrs): Use ks_hextobyte and ks_strcasecmp.
+
+       * gpgkeys_finger.c (get_key): Resolved signed/unisgned char
+       mismatch.
+
+2006-09-19  Werner Koch  <wk@g10code.com>
+       
+       * no-libgcrypt.c: New. Taken from ../tools.
+       * Makefile.am: Add no-libgcrypt to all sources.
+
+2006-09-06  Marcus Brinkmann  <marcus@g10code.de>
+
+       * Makefile.am (AM_CFLAGS): Add $(GPG_ERROR_CFLAGS).
+
+2006-08-16  Werner Koch  <wk@g10code.com>
+
+       * Makefile.am: Renamed all binaries to gpg2keys_*.
+       (gpg2keys_ldap_CPPFLAGS): Add AM_CPPFLAGS.
+
+2006-08-15  Werner Koch  <wk@g10code.com>
+
+       * Makefile.am: Adjusted to the gnupg2 framework.
+
+2006-08-14  Werner Koch  <wk@g10code.com>
+
+       * curl-shil.c, curl-shim.h: Changed to make use of the new http.c
+       API.
+
+       * curl-shim.c (curl_easy_perform): Add missing http_close to the
+       POST case.
+
+2006-07-24  David Shaw  <dshaw@jabberwocky.com>  (wk)
+
+       * curl-shim.c (curl_easy_perform): Minor cleanup of proxy code.
+
+       * gpgkeys_hkp.c (send_key)
+       * gpgkeys_ldap.c (send_key, send_key_keyserver): Fix string
+       matching problem when the ascii armored form of the key happens to
+       match "KEY" at the beginning of the line.
+
+2006-04-26  David Shaw  <dshaw@jabberwocky.com>
+
+       * gpgkeys_http.c, gpgkeys_oldhkp.c: Removed.
+
+       * Makefile.am: Don't build gpgkeys_http or gpgkeys_(old)hkp any
+       longer as this is done via curl or fake-curl.
+
+       * ksutil.h, ksutil.c, gpgkeys_hkp.c, gpgkeys_curl.c: Minor
+       #include tweaks as FAKE_CURL is no longer meaningful.
+
+2006-04-10  David Shaw  <dshaw@jabberwocky.com>
+
+       * gpgkeys_ldap.c (ldap_quote, get_name, search_key): LDAP-quote
+       directly into place rather than mallocing temporary buffers.
+
+       * gpgkeys_ldap.c (get_name): Build strings with strcat rather than
+       using sprintf which is harder to read and modify.
+
+       * ksutil.h, ksutil.c (classify_ks_search): Add
+       KS_SEARCH_KEYID_SHORT and KS_SEARCH_KEYID_LONG to search for a key
+       ID.
+
+       * gpgkeys_ldap.c (search_key): Use it here to flip from pgpUserID
+       searches to pgpKeyID or pgpCertID.
+
+2006-03-27  David Shaw  <dshaw@jabberwocky.com>
+
+       * gpgkeys_ldap.c: #define LDAP_DEPRECATED for newer OpenLDAPs so
+       they use the regular old API that is compatible with other LDAP
+       libraries.
+
+2006-03-03  David Shaw  <dshaw@jabberwocky.com>
+
+       * gpgkeys_ldap.c (main): Fix build problem with non-OpenLDAP LDAP
+       libraries that have TLS.
+
+2006-02-23  David Shaw  <dshaw@jabberwocky.com>
+
+       * ksutil.c (init_ks_options): Default include-revoked and
+       include-subkeys to on, as gpg isn't doing this any longer.
+
+2006-02-22  David Shaw  <dshaw@jabberwocky.com>
+
+       * gpgkeys_hkp.c (get_name): A GETNAME query turns exact=on to cut
+       down on odd matches.
+
+2006-02-21  David Shaw  <dshaw@jabberwocky.com>
+
+       * gpgkeys_ldap.c (make_one_attr, build_attrs, send_key): Don't
+       allow duplicate attributes as OpenLDAP is now enforcing this.
+
+       * gpgkeys_ldap.c (main): Add binddn and bindpw so users can pass
+       credentials to a remote LDAP server.
+
+       * curl-shim.h, curl-shim.c (curl_easy_init, curl_easy_setopt,
+       curl_easy_perform): Mingw has 'stderr' as a macro?
+
+       * curl-shim.h, curl-shim.c (curl_easy_init, curl_easy_setopt,
+       curl_easy_perform): Add CURLOPT_VERBOSE and CURLOPT_STDERR for
+       easier debugging.
+
+2006-01-16  David Shaw  <dshaw@jabberwocky.com>
+
+       * gpgkeys_hkp.c (send_key): Do not escape the '=' in the HTTP POST
+       when uploading a key.
+
+2005-12-23  David Shaw  <dshaw@jabberwocky.com>
+
+       * ksutil.h, ksutil.c (parse_ks_options): New keyserver command
+       "getname".
+
+       * gpgkeys_hkp.c (main, get_name), gpgkeys_ldap.c (main, get_name):
+       Use it here to do direct name (rather than key ID) fetches.
+
+2005-12-19  David Shaw  <dshaw@jabberwocky.com>
+
+       * ksutil.h, ksutil.c (curl_armor_writer, curl_writer,
+       curl_writer_finalize): New functionality to handle binary format
+       keys by armoring them for input to GPG.
+
+       * gpgkeys_curl.c (get_key), gpgkeys_hkp.c (get_key): Call it here.
+
+2005-12-07  David Shaw  <dshaw@jabberwocky.com>
+
+       * gpgkeys_finger.c (get_key), gpgkeys_curl.c (get_key): Better
+       language for the key-not-found error.
+
+       * ksutil.c (curl_err_to_gpg_err): Add CURLE_OK and
+       CURLE_COULDNT_CONNECT.
+
+       * gpgkeys_curl.c (get_key): Give key-not-found error if no data is
+       found (or file itself is not found) during a fetch.
+
+2005-12-06  David Shaw  <dshaw@jabberwocky.com>
+
+       * curl-shim.c (curl_easy_perform): Fix build warning (code before
+       declaration).
+
+2005-11-02  David Shaw  <dshaw@jabberwocky.com>
+
+       * gpgkeys_hkp.c (search_key): Fix warning with typecast (though
+       curl should really have defined that char * as const).
+
+2005-08-25  David Shaw  <dshaw@jabberwocky.com>
+
+       * ksutil.h, ksutil.c (parse_ks_options): Remove exact-name and
+       exact-email.
+       (classify_ks_search): Mimic the gpg search modes instead with *,
+       =, <, and @.
+
+       * gpgkeys_ldap.c (search_key), gpgkeys_hkp.c (search_key): Call
+       them here.  Suggested by Jason Harris.
+
+2005-08-18  David Shaw  <dshaw@jabberwocky.com>
+
+       * ksutil.h, ksutil.c (parse_ks_options): New keyserver-option
+       exact-name.  The last of exact-name and exact-email overrides the
+       earlier.
+
+       * gpgkeys_ldap.c (search_key), gpgkeys_hkp.c (search_key): Use it
+       here to do a name-only search.
+
+       * gpgkeys_ldap.c (ldap_quote): \-quote a string for LDAP.
+
+       * gpgkeys_ldap.c (search_key): Use it here to escape reserved
+       characters in searches.
+
+2005-08-17  David Shaw  <dshaw@jabberwocky.com>
+
+       * ksutil.h, ksutil.c (parse_ks_options): New keyserver-option
+       exact-email.
+
+       * gpgkeys_ldap.c (search_key), gpgkeys_hkp.c (search_key): Use it
+       here to do an email-only search.
+
+2005-08-08  David Shaw  <dshaw@jabberwocky.com>
+
+       * Makefile.am: Include LDAP_CPPFLAGS when building LDAP.
+
+2005-08-03  David Shaw  <dshaw@jabberwocky.com>
+
+       * gpgkeys_hkp.c (main), gpgkeys_curl.c (main), curl-shim.h: Show
+       version of curl (or curl-shim) when debug is set.
+
+2005-07-20  David Shaw  <dshaw@jabberwocky.com>
+
+       * gpgkeys_curl.c (get_key, main): Don't try and be smart about
+       what protocols we handle.  Directly pass them to curl or fake-curl
+       and see if an error comes back.
+
+       * curl-shim.h, curl-shim.c (handle_error), ksutil.c
+       (curl_err_to_gpg_err): Add support for CURLE_UNSUPPORTED_PROTOCOL
+       in fake curl.
+
+       * Makefile.am: Don't need -DFAKE_CURL any longer since it's in
+       config.h.
+
+2005-06-23  David Shaw  <dshaw@jabberwocky.com>
+
+       * gpgkeys_mailto.in, gpgkeys_test.in: Use @VERSION@ so version
+       string stays up to date.
+
+       * gpgkeys_http.c: Don't need to define HTTP_PROXY_ENV here since
+       it's in ksutil.h.
+
+       * gpgkeys_curl.c (get_key, main), gpgkeys_hkp.c (main): Pass AUTH
+       values to curl or curl-shim.
+
+       * curl-shim.c (curl_easy_perform), gpgkeys_curl.c (main),
+       gpgkeys_hkp.c (main): Use curl-style proxy semantics.
+
+       * curl-shim.h, curl-shim.c (curl_easy_setopt, curl_easy_perform):
+       Add CURLOPT_USERPWD option for HTTP auth.
+
+       * gpgkeys_http.c (get_key), gpgkeys_oldhkp (send_key, get_key,
+       search_key): No longer need to pass a proxyauth.
+
+       * gpgkeys_http.c (get_key): Pass auth outside of the URL.
+
+2005-06-21  David Shaw  <dshaw@jabberwocky.com>
+
+       * gpgkeys_http.c (get_key), gpgkeys_oldhkp.c (send_key, get_key,
+       search_key): Fix http_open/http_open_document calls to pass NULL
+       for auth and proxyauth since these programs pass them in the URL.
+
+2005-06-20  David Shaw  <dshaw@jabberwocky.com>
+
+       * gpgkeys_hkp.c (append_path, send_key, get_key, search_key,
+       main), gpgkeys_oldhkp.c (main): Properly handle double slashes in
+       paths.
+
+2005-06-05  David Shaw  <dshaw@jabberwocky.com>
+
+       * ksutil.c (init_ks_options, parse_ks_options): Provide a default
+       "/" path unless overridden by the config.  Allow config to specify
+       items multiple times and take the last specified item.
+
+2005-06-04  David Shaw  <dshaw@jabberwocky.com>
+
+       * gpgkeys_hkp.c, gpgkeys_oldhkp.c: Add support for HKP servers
+       that aren't at the root path.  Suggested by Jack Bates.
+
+2005-06-01  David Shaw  <dshaw@jabberwocky.com>
+
+       * ksutil.c [HAVE_DOSISH_SYSTEM]: Fix warnings on mingw32.  Noted
+       by Joe Vender.
+
+2005-05-04  David Shaw  <dshaw@jabberwocky.com>
+
+       * ksutil.h, ksutil.c: #ifdef so we can build without libcurl or
+       fake-curl.
+
+2005-05-03  David Shaw  <dshaw@jabberwocky.com>
+
+       * gpgkeys_http.c: Need GET defined.
+
+2005-05-01  David Shaw  <dshaw@jabberwocky.com>
+
+       * gpgkeys_hkp.c, gpgkeys_oldhkp.c, ksutil.h: Some minor cleanup
+       and comments as to the size of MAX_LINE and MAX_URL.
+
+2005-04-16  David Shaw  <dshaw@jabberwocky.com>
+
+       * gpgkeys_hkp.c: New hkp handler that uses curl or curl-shim.
+
+       * Makefile.am: Build new gpgkeys_hkp.
+
+       * curl-shim.c (curl_easy_perform): Cleanup.
+
+       * ksutil.h, ksutil.c (curl_writer), gpgkeys_curl.c (get_key): Pass
+       a context to curl_writer so we can support multiple fetches in a
+       single session.
+
+       * curl-shim.h, curl-shim.c (handle_error, curl_easy_setopt,
+       curl_easy_perform): Add POST functionality to the curl shim.
+
+       * curl-shim.h, curl-shim.c (curl_escape, curl_free): Emulate
+       curl_escape and curl_free.
+
+       * gpgkeys_curl.c (main): If the http-proxy option is given without
+       any arguments, try to get the proxy from the environment.
+
+       * ksutil.h, ksutil.c (curl_err_to_gpg_err, curl_writer): Copy from
+       gpgkeys_curl.c.
+
+       * gpgkeys_oldhkp.c: Copy from gpgkeys_hkp.c.
+
+2005-03-22  David Shaw  <dshaw@jabberwocky.com>
+
+       * gpgkeys_ldap.c, ksutil.h, ksutil.c (print_nocr): Moved from
+       gpgkeys_ldap.c.  Print a string, but strip out any CRs.
+
+       * gpgkeys_finger.c (get_key), gpgkeys_hkp.c (get_key),
+       gpgkeys_http.c (get_key): Use it here when outputting key material
+       to canonicalize line endings.
+
+2005-03-19  David Shaw  <dshaw@jabberwocky.com>
+
+       * gpgkeys_ldap.c (main): Fix three wrong calls to fail_all().
+       Noted by Stefan Bellon.
+
+2005-03-17  David Shaw  <dshaw@jabberwocky.com>
+
+       * ksutil.c (parse_ks_options): Handle verbose=nnn.
+
+       * Makefile.am: Calculate GNUPG_LIBEXECDIR directly.  Do not
+       redefine $libexecdir.
+
+       * gpgkeys_curl.c, gpgkeys_finger.c, gpgkeys_ldap.c: Start using
+       parse_ks_options and remove a lot of common code.
+
+       * ksutil.h, ksutil.c (parse_ks_options): Parse OPAQUE, and default
+       debug with no arguments to 1.
+
+2005-03-16  David Shaw  <dshaw@jabberwocky.com>
+
+       * gpgkeys_ldap.c: Include lber.h if configure determines we need
+       it.
+
+       * ksutil.h, ksutil.c (ks_action_to_string): New.
+       (free_ks_options): Only free if options exist.
+
+       * ksutil.h, ksutil.c (init_ks_options, free_ks_options,
+       parse_ks_options): Pull a lot of duplicated code into a single
+       options parser for all keyserver helpers.
+
 2005-02-11  David Shaw  <dshaw@jabberwocky.com>
 
+       * curl-shim.c (curl_easy_perform): Fix compile warning.
+
+       * curl-shim.h, gpgkeys_curl.c (main), gpgkeys_ldap.c (main): Add
+       ca-cert-file option, to pass in the SSL cert.
+
        * curl-shim.h, curl-shim.c: New.  This is code to fake the curl
        API in terms of the current HTTP iobuf API.
 
        gpgkeys_mailto (email keyserver helper)
 
 
- Copyright 1998, 1999, 2000, 2001, 2002, 2003,
-          2004 Free Software Foundation, Inc.
+ Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+          2007 Free Software Foundation, Inc.
 
  This file is free software; as a special exception the author gives
  unlimited permission to copy and/or distribute it, with or without