change back skey to unsigned and cast instead
[gnupg.git] / keyserver / ChangeLog
1 2004-08-27  Stefan Bellon  <sbellon@sbellon.de>
2
3         * gpgkeys_hkp.c (search_key): Fix the prior faulty fix by
4         introducing a cast but leaving skey unsigned.
5
6         * gpgkeys_hkp.c (search_key): Change type of variable skey from
7         unsigned char* to char* to fix type incompatibility.
8
9 2004-08-23  David Shaw  <dshaw@jabberwocky.com>
10
11         * gpgkeys_ldap.c (get_key, search_key), gpgkeys_hkp.c (get_key,
12         search_key), gpgkeys_http.c (get_key): Do not give informational
13         logs since this is now done inside gpg.
14
15         * gpgkeys_hkp.c (dehtmlize): Understand the quote character
16         (i.e. "&quot;") in HTML responses.
17         (search_key): Search key must be unsigned for url encoder to work
18         properly for 8-bit values.
19
20         * gpgkeys_ldap.c (get_key): Factor out informational display into
21         new function build_info().
22
23         * gpgkeys_ldap.c (build_attrs): Properly terminate user ID strings
24         that got shrunk due to encoding.
25
26 2004-08-22  David Shaw  <dshaw@jabberwocky.com>
27
28         * gpgkeys_ldap.c (find_basekeyspacedn): Use LDAP_SCOPE_BASE along
29         with a full DN rather than LDAP_SCOPE_ONELEVEL plus a filter to
30         find the pgpServerInfo object.  Some LDAP setups don't like the
31         search.
32         (main): Stop binding to the server since it seems no server really
33         requires it, and some require it not be there.
34
35 2004-07-29  David Shaw  <dshaw@jabberwocky.com>
36
37         * gpgkeys_ldap.c (main): Add "debug" option.  This is only really
38         useful with OpenLDAP, but it's practically vital to debug SSL and
39         TLS setups.  Add "basedn" option.  This allows users to override
40         the autodetection for base DN.  SSL overrides TLS, so TLS will not
41         be started on SSL connections (starting an already started car).
42
43 2004-07-28  David Shaw  <dshaw@jabberwocky.com>
44
45         * gpgkeys_ldap.c (build_attrs): Add "pgpKeySize" and "pgpSubKeyID"
46         attributes so we can do subkey searches.
47
48         * gpgkeys_ldap.c (main): Under certain error conditions, we might
49         try and unbind twice.  Don't.
50
51         * gpgkeys_ldap.c (join_two_modlists): New.
52         (send_key): Use new function so we can try a modify operation
53         first, and fail over to an add if that fails.  Add cannot cope
54         with the NULLs at the head of the modify request, so we jump into
55         the list in the middle.
56
57 2004-07-27  David Shaw  <dshaw@jabberwocky.com>
58
59         * gpgkeys_ldap.c (main): Don't try and error out before making a
60         ldaps connection to the NAI keyserver since we cannot tell if it
61         is a NAI keyserver until we connect.  Fail if we cannot find a
62         base keyspace DN.  Fix a false success message for TLS being
63         enabled.
64
65 2004-07-20  Werner Koch  <wk@gnupg.org>
66
67         * gpgkeys_ldap.c [_WIN32]: Include Windows specific header files.
68         Suggested by Brian Gladman.
69
70 2004-05-26  David Shaw  <dshaw@jabberwocky.com>
71
72         * gpgkeys_http.c: General polish and removal of leftover stuff
73         from gpgkeys_hkp.c.
74
75 2004-05-21  David Shaw  <dshaw@jabberwocky.com>
76
77         * gpgkeys_http.c (get_key): Cosmetic fix - make sure that URLs
78         with no path use a path of "/".
79
80         * gpgkeys_ldap.c (ldap2epochtime): We can always rely on timegm()
81         being available now, since it's a replacement function.
82
83 2004-05-20  David Shaw  <dshaw@jabberwocky.com>
84
85         * gpgkeys_http.c: New program to do a simple HTTP file fetch using
86         the keyserver interface.
87
88         * Makefile.am: Build it.
89
90 2004-02-28  David Shaw  <dshaw@jabberwocky.com>
91
92         * Makefile.am: Don't split LDADD across two lines since some make
93         programs can't handle blank lines after a \ continuation.  Noted
94         by Christoph Moench-Tegeder.
95
96 2004-02-25  David Shaw  <dshaw@jabberwocky.com>
97
98         * gpgkeys_ldap.c (send_key): List pgpCertID as one of the deleted
99         attributes.  This guarantees that if something goes wrong, we
100         won't be able to complete the transaction, thus leaving any key
101         already existing on the server intact.
102
103 2004-02-23  David Shaw  <dshaw@jabberwocky.com>
104
105         * gpgkeys_ldap.c (delete_one_attr): Removed.
106         (make_one_attr): Delete functionality added.  Optional deduping
107         functionality added (currently only used for pgpSignerID).
108         (build_attrs): Translate sig entries into pgpSignerID.  Properly
109         build the timestamp for pgpKeyCreateTime and pgpKeyExpireTime.
110
111 2004-02-22  David Shaw  <dshaw@jabberwocky.com>
112
113         * gpgkeys_ldap.c (delete_one_attr): New function to replace
114         attributes with NULL (a "delete" that works even for nonexistant
115         attributes).
116         (send_key): Use it here to remove attributes so a modify operation
117         starts with a clean playing field.  Bias sends to modify before
118         add, since (I suspect) people update their existing keys more
119         often than they make and send new keys to the server.
120
121 2004-02-21  David Shaw  <dshaw@jabberwocky.com>
122
123         * gpgkeys_ldap.c (epoch2ldaptime): New.  Converse of
124         ldap2epochtime.
125         (make_one_attr): New. Build a modification list in memory to send
126         to the LDAP server.
127         (build_attrs): New. Parse INFO lines sent over by gpg.
128         (free_mod_values): New.  Unwinds a modification list.
129         (send_key_keyserver): Renamed from old send_key().
130         (send_key): New function to send a key to a LDAP server.
131         (main): Use send_key() for real LDAP servers, send_key_keyserver()
132         otherwise.
133
134 2004-02-20  David Shaw  <dshaw@jabberwocky.com>
135
136         * gpgkeys_ldap.c: Replacement prototypes for setenv and unsetenv.
137         (search_key): Catch a SIZELIMIT_EXCEEDED error and show the user
138         whatever the server did give us.
139         (find_basekeyspacedn): There is no guarantee that namingContexts
140         will be readable.
141
142         * Makefile.am: Link gpgkeys_ldap with libutil.a to get the
143         replacement functions (and eventually translations, etc).
144
145 2004-02-19  David Shaw  <dshaw@jabberwocky.com>
146
147         * gpgkeys_ldap.c (ldap2epochtime): LDAP timestamps are UTC, so do
148         not correct for timezones.
149         (main): Find the basekeyspacedn before we try to start TLS, so we
150         can give a better error message when a user tries to use TLS with
151         a LDAP keyserver.
152
153         * Makefile.am: Add automake conditionals to symlink gpgkeys_ldaps
154         to gpgkeys_ldap when needed.
155
156         * gpgkeys_ldap.c (main): Add support for LDAPS and TLS
157         connections.  These are only useful and usable when talking to
158         real LDAP keyservers.  Add new "tls" option to tune TLS use from
159         off, to try quietly, to try loudly, or to require TLS.
160
161         * gpgkeys_ldap.c (find_basekeyspacedn): New function to figure out
162         what kind of LDAP server we're talking to (either real LDAP or the
163         LDAP keyserver), and return the baseKeySpaceDN to find keys under.
164         (main): Call it from here, and remove the old code that only
165         handled the LDAP keyserver.
166
167 2004-02-18  David Shaw  <dshaw@jabberwocky.com>
168
169         * gpgkeys_ldap.c (ldap_to_gpg_err): Make sure that
170         LDAP_OPT_ERROR_NUMBER is defined before we use it.
171
172         * gpgkeys_mailto.in: Fix VERSION number.
173
174 2004-01-13  Werner Koch  <wk@gnupg.org>
175
176         * gpgkeys_hkp.c (send_key): Add a content type.
177
178 2004-01-11  David Shaw  <dshaw@jabberwocky.com>
179
180         * gpgkeys_hkp.c (search_key): Catch a mangled input file (useful
181         if something other than GnuPG is calling the program).
182         (main): Avoid possible pre-string write.  Noted by Christian
183         Biere.
184
185         * gpgkeys_ldap.c (main): Avoid possible pre-string write.
186
187 2003-12-28  David Shaw  <dshaw@jabberwocky.com>
188
189         * gpgkeys_hkp.c (send_key, get_key, main): Work with new HTTP code
190         that passes the proxy in from the outside.  If the command file
191         sends a proxy, use it.  If it sends "http-proxy" with no
192         arguments, use $http_proxy from the environment.  Suggested by
193         Christian Biere.
194
195 2003-12-28  Stefan Bellon  <sbellon@sbellon.de>
196
197         * gpgkeys_hkp.c, gpgkeys_ldap.c [__riscos__]: Removal of
198         unnecessary #ifdef __riscos__ sections.
199
200 2003-11-27  Werner Koch  <wk@gnupg.org>
201
202         * gpgkeys_hkp.c (get_key): Fixed invalid use of fprintf without
203         format string.
204
205 2003-10-25  Werner Koch  <wk@gnupg.org>
206
207         * Makefile.am (gpgkeys_hkp_LDADD): Replaced INTLLIBS by LIBINTL.
208
209 2003-07-10  David Shaw  <dshaw@jabberwocky.com>
210
211         * Makefile.am: Use W32LIBS where appropriate.
212
213 2003-05-30  David Shaw  <dshaw@jabberwocky.com>
214
215         * gpgkeys_hkp.c, gpgkeys_ldap.c: #include <getopt.h> if it is
216         available.  Also include extern references for optarg and optind
217         since there is no guarantee that any header file will include
218         them.  Standards?  We don't need no stinkin' standards.
219
220         * Makefile.am: Use @GETOPT@ to pull in libiberty on those
221         platforms that need it.
222
223 2003-04-08  David Shaw  <dshaw@jabberwocky.com>
224
225         * gpgkeys_hkp.c (dehtmlize, parse_hkp_index): Fix memory
226         corruption bug on some platforms.
227
228 2003-03-11  David Shaw  <dshaw@jabberwocky.com>
229
230         * gpgkeys_hkp.c (get_key): Properly handle CRLF line endings in
231         the armored key.
232         (main): Accept "try-dns-srv" option.
233
234         * Makefile.am: Use @CAPLIBS@ to link in -lcap if we are using
235         capabilities.  Use @SRVLIBS@ to link in the resolver if we are
236         using DNS SRV.
237
238 2003-02-11  David Shaw  <dshaw@jabberwocky.com>
239
240         * Makefile.am: Use a local copy of libexecdir along with @PACKAGE@
241         so it can be easily overridden at make time.
242
243 2003-01-29  David Shaw  <dshaw@jabberwocky.com>
244
245         * gpgkeys_mailto.in: Fix regexp to work properly if the "keyid" is
246         not a keyid, but rather a text string from the user ID.
247
248 2003-01-06  David Shaw  <dshaw@jabberwocky.com>
249
250         * gpgkeys_hkp.c (get_key): Use options=mr when getting a key so
251         keyserver doesn't attach the HTML header which we will just have
252         to discard.
253
254 2002-11-17  David Shaw  <dshaw@jabberwocky.com>
255
256         * gpgkeys_ldap.c (main), gpgkeys_hkp.c (main): Use new keyserver
257         protocol version.
258
259 2002-11-14  David Shaw  <dshaw@jabberwocky.com>
260
261         * gpgkeys_ldap.c (get_key): The deduping code requires
262         "pgpcertid", but that was not available when running without
263         verbose on.  Noted by Stefan.
264
265 2002-11-10  David Shaw  <dshaw@jabberwocky.com>
266
267         * gpgkeys_ldap.c (get_key): Fix typo in deduping code.
268
269 2002-11-05  David Shaw  <dshaw@jabberwocky.com>
270
271         * gpgkeys_ldap.c (key_in_keylist, add_key_to_keylist,
272         free_keylist, get_key, search_key): The LDAP keyserver doesn't
273         remove duplicates, so remove them locally.  Do not include the key
274         modification time in the search response.
275
276 2002-11-04  David Shaw  <dshaw@jabberwocky.com>
277
278         * gpgkeys_hkp.c (send_key), gpgkeys_ldap.c (send_key): Properly
279         handle an input file that does not include any key data at all.
280
281 2002-10-24  David Shaw  <dshaw@jabberwocky.com>
282
283         * gpgkeys_hkp.c (main), gpgkeys_ldap.c (main): Add -V flag to
284         output protocol and program version.
285
286 2002-10-21  David Shaw  <dshaw@jabberwocky.com>
287
288         * Makefile.am: Anything linking with libutil.a needs INTLLIBS as
289         well on platforms where INTLLIBS is set.
290
291 2002-10-14  David Shaw  <dshaw@jabberwocky.com>
292
293         * gpgkeys_hkp.c (write_quoted): Use %-encoding instead of
294         \-encoding.
295         (parse_hkp_index): Use new keyserver key listing format, and add
296         support for disabled keys via include-disabled.
297
298         * gpgkeys_ldap.c (get_key): Don't print keysize unless it's >0.
299         (printquoted): Use %-encoding instead of \-encoding.
300         (search_key): Use new keyserver key listing format.
301
302 2002-10-08  David Shaw  <dshaw@jabberwocky.com>
303
304         * gpgkeys_ldap.c (search_key, main): Make sure LDAP values are
305         freed in case of error.
306
307         * gpgkeys_ldap.c (fail_all): New function to unwind a keylist and
308         error each item.
309         (main): Call fail_all from here, as needed.  Also add a NO_MEMORY
310         error in an appropriate place and fix error return code.
311         (ldap_err_to_gpg_err): Add KEYSERVER_UNREACHABLE.
312
313         * gpgkeys_hkp.c (fail_all): New function to unwind a keylist and
314         error each item.
315         (main): Call fail_all from here.  Also add a NO_MEMORY error in an
316         appropriate place.
317         (get_key): Use new UNREACHABLE error for network errors.
318
319 2002-09-26  Werner Koch  <wk@gnupg.org>
320
321         * gpgkeys_ldap.c (send_key): Removed non-constant initializers.
322
323 2002-09-24  David Shaw  <dshaw@jabberwocky.com>
324
325         * gpgkeys_ldap.c (ldap_err_to_gpg_err, ldap_to_gpg_err, send_key,
326         get_key, search_key, main): Some minor error reporting
327         enhancements for use with GPA (show reasons for KEY FAILED).
328
329         * gpgkeys_hkp.c (send_key, get_key, search_key, main): Some minor
330         error reporting enhancements for use with GPA (show reasons for
331         KEY FAILED).
332
333 2002-09-20  Werner Koch  <wk@gnupg.org>
334
335         * gpgkeys_hkp.c (handle_old_hkp_index): s/input/inp/ to avoid
336         shadowing warning.
337
338 2002-09-19  David Shaw  <dshaw@jabberwocky.com>
339
340         * gpgkeys_hkp.c (get_key, handle_old_hkp_index, search_key):
341         Properly handle line truncation.
342
343 2002-09-16  David Shaw  <dshaw@jabberwocky.com>
344
345         * gpgkeys_mailto.in: Add quasi-RFC-2368 mailto:email@addr?from=
346         syntax so people can set their own email address to respond to.
347
348         * gpgkeys_hkp.c (get_key): Properly respond with KEY FAILED (to
349         gpg) and "key not found" (to user) on failure.
350
351 2002-09-13  David Shaw  <dshaw@jabberwocky.com>
352
353         * gpgkeys_hkp.c: (search_key, handle_old_hkp_index): Try and
354         request a machine-readable key index.  If the server supports
355         this, pass it through.  If the server does not support it, parse
356         the "index" page.
357
358 2002-09-12  Stefan Bellon  <sbellon@sbellon.de>
359
360         * gpgkeys_hkp.c: Tidied up RISC OS initializations.
361
362 2002-09-12  David Shaw  <dshaw@jabberwocky.com>
363
364         * gpgkeys_hkp.c (main): Remove warning - this is no longer
365         experimental code.
366
367 2002-09-09  Werner Koch  <wk@gnupg.org>
368
369         * gpgkeys_hkp.c (send_key, get_key, search_key): Check return
370         value of malloc.
371         (dehtmlize): Use ascii_tolower to protect against weird locales.
372         Cast the argument for isspace for the sake of broken HP/UXes.
373         (search_key): Check return value of realloc.
374
375 2002-09-09  David Shaw  <dshaw@jabberwocky.com>
376
377         * gpgkeys_ldap.c (get_key): Some compilers (RISC OS, HPUX c89)
378         don't like using variables as array initializers.
379
380         * gpgkeys_hkp.c (send_key): Use CRLF in headers.
381
382 2002-08-28  David Shaw  <dshaw@jabberwocky.com>
383
384         * gpgkeys_hkp.c (parse_hkp_index): Use same types on all
385         platforms.  This was probably leftover from earlier code where the
386         typing mattered.
387
388         * gpgkeys_hkp.c: Overall cleanup from iobuf conversion.  Be
389         consistent in m_alloc and malloc usage.  Remove include-disabled
390         (meaningless on HKP).  RISC OS tweak.
391
392 2002-08-27  David Shaw  <dshaw@jabberwocky.com>
393
394         * gpgkeys_hkp.c, Makefile.am: Convert over to using iobufs.
395
396         * gpgkeys_hkp.c (http_get, http_post): Use CRLF for line endings.
397
398         * gpgkeys_hkp.c: Include util.h on RISC OS as per Stefan.  Include
399         a replacement for hstrerror() for those platforms (such as RISC
400         OS) that don't have it.
401
402 2002-08-26  David Shaw  <dshaw@jabberwocky.com>
403
404         * Makefile.am: May as well include gpgkeys_hkp.c in the
405         distribution now.  It works well enough without proxies, and isn't
406         built by default.  It would be good to get some test experience
407         with it.
408
409         * gpgkeys_hkp.c (main): Don't warn about include-subkeys - it
410         isn't unsupported, it's actually non-meaningful in the context of
411         HKP (yet).
412
413         * gpgkeys_hkp.c (parse_hkp_index, dehtmlize): Move HTML
414         functionality into new "dehtmlize" function.  Remove HTML before
415         trying to parse each line from the keyserver.  If the keyserver
416         provides key type information in the listing, use it.  (Copy over
417         from g10/hkp.c).
418
419 2002-08-19  David Shaw  <dshaw@jabberwocky.com>
420
421         * gpgkeys_hkp.c (get_key, parse_hkp_index): Bring over latest code
422         from g10/hkp.c.
423
424         * gpgkeys_ldap.c (get_key): Fix cosmetic URL display problem
425         (extra ":" at the end).
426
427 2002-08-03  Stefan Bellon  <sbellon@sbellon.de>
428
429         * gpgkeys_ldap.c: Tidied up RISC OS initializations.
430
431 2002-07-25  David Shaw  <dshaw@jabberwocky.com>
432
433         * gpgkeys_hkp.c: "Warning" -> "WARNING"
434
435 2002-07-24  David Shaw  <dshaw@jabberwocky.com>
436
437         * Makefile.am: Install keyserver helpers in @GNUPG_LIBEXECDIR@
438
439 2002-07-15  David Shaw  <dshaw@jabberwocky.com>
440
441         * gpgkeys_ldap.c (send_key, get_key, main): Consult the server
442         version string to determine whether to use pgpKey or pgpKeyV2.
443
444 2002-07-09  David Shaw  <dshaw@jabberwocky.com>
445
446         * gpgkeys_mailto.in: Use new OPAQUE tag for non net-path URIs.
447         Fail more elegantly if there is no email address to send to.  Show
448         the GnuPG version in the message body.
449
450 2002-07-04  David Shaw  <dshaw@jabberwocky.com>
451
452         * gpgkeys_ldap.c (get_key), gpgkeys_hkp.c (get_key): Display
453         keyserver URI as a URI, but only if verbose.
454
455 2002-07-01  David Shaw  <dshaw@jabberwocky.com>
456
457         * gpgkeys_hkp.c (parse_hkp_index): Error if the keyserver returns
458         an unparseable HKP response.
459
460         * gpgkeys_hkp.c (main): Warn on honor-http-proxy,
461         broken-http-proxy, and include-subkeys (not supported yet).
462
463         * gpgkeys_ldap.c (main), gpgkeys_hkp.c (http_connect, main): Fix
464         some shadowing warnings.
465
466 2002-06-11  David Shaw  <dshaw@jabberwocky.com>
467
468         * Makefile.am: Don't hard-code the LDAP libraries - get them from
469         LDAPLIBS via configure.  Also, gpgkeys_hkp is a program, not a
470         script.
471
472 2002-06-10  David Shaw  <dshaw@jabberwocky.com>
473
474         * gpgkeys_ldap.c (include_subkeys): Default "include-subkeys" to
475         off, since GnuPG now defaults it to on.
476
477 2002-06-06  David Shaw  <dshaw@jabberwocky.com>
478
479         * gpgkeys_hkp.c (parse_hkp_index): Type tweaks.
480
481         * gpgkeys_hkp.c (main): Add experimental code warning.
482
483 2002-06-05  David Shaw  <dshaw@jabberwocky.com>
484
485         * Makefile.am, gpgkeys_hkp.c (new): Experimental HKP keyserver
486         interface.
487
488 2002-05-08  David Shaw  <dshaw@jabberwocky.com>
489
490         * gpgkeys_ldap.c: Include <lber.h> if we absolutely must.  This
491         helps when compiling against a very old OpenLDAP.
492
493 2002-04-29  David Shaw  <dshaw@jabberwocky.com>
494
495         * gpgkeys_mailto.in: Properly handle key requests in full
496         fingerprint form.
497
498 2002-03-29  David Shaw  <dshaw@jabberwocky.com>
499
500         * gpgkeys_ldap.c (printquoted): Quote backslashes within keyserver
501         search responses.
502
503 2002-02-25  David Shaw  <dshaw@jabberwocky.com>
504
505         * gpgkeys_ldap (get_key): LDAP keyservers do not support v3
506         fingerprints, so error out if someone tries.  Actually, they don't
507         support any fingerprints, but at least we can calculate a keyid
508         from a v4 fingerprint.
509
510 2002-02-23  David Shaw  <dshaw@jabberwocky.com>
511
512         * gpgkeys_ldap: Clarify the notion of a partial failure.  This is
513         possible if more than one key is being handled in a batch, and one
514         fails while the other succeeds.  Note that a search that comes up
515         with no results is not a failure - that is a valid response of "no
516         answer".
517
518         * gpgkeys_ldap.c (get_key): Allow GnuPG to send us full v4
519         fingerprints, long key ids, or short key ids while fetching.
520         Since the LDAP server doesn't actually handle fingerprints, chop
521         them down to long key ids for actual use.
522
523         * gpgkeys_ldap.c (main, get_key): When searching for a keyid,
524         search for subkeys as well as primary keys.  This is mostly
525         significant when automatically fetching the key based on the id in
526         a header (i.e. "signature made by....").  "no-include-subkeys"
527         disables.
528
529 2002-02-14  David Shaw  <dshaw@jabberwocky.com>
530
531         * gpgkeys_ldap.c: Fix compiler warning.
532
533         * gpgkeys_ldap.c: Be much more robust with mangled input files.
534
535 2001-12-28  David Shaw  <dshaw@jabberwocky.com>
536
537         * gpgkeys_mailto.in: Use the new OUTOFBAND indicator so gpg knows
538         not to try and import anything.  Also turn on perl -w for
539         warnings.
540
541         * gpgkeys_ldap.c (main): If we're using temp files (rather than
542         stdin/stdout), make sure the file is closed when we're done.
543
544 2001-12-20  David Shaw  <dshaw@jabberwocky.com>
545
546         * Properly free the LDAP response when we're done with it.
547
548         * Now that we handle multiple keys, we must remove duplicates as
549         the LDAP keyserver returns keys with multiple user IDs multiple
550         times.
551
552         * Properly handle multiple keys with the same key ID (it's really
553         rare, so fetch "0xDEADBEEF" to test this).
554
555 2001-12-17  David Shaw  <dshaw@jabberwocky.com>
556
557         * gpgkeys_ldap.c, gpgkeys_mailto.in: Fix GNU capitalization
558         issues.  Prefix log messages with "gpgkeys" to clarify which
559         program is generating them.
560
561 2001-12-14  David Shaw  <dshaw@jabberwocky.com>
562
563         * gpgkeys_ldap.c (search_key): Use unsigned int rather than uint
564         for portability.
565
566 2001-12-04  David Shaw  <dshaw@jabberwocky.com>
567
568         * Initial version of gpgkeys_ldap (LDAP keyserver helper) and
569         gpgkeys_mailto (email keyserver helper)
570
571
572  Copyright 1998, 1999, 2000, 2001, 2002, 2003,
573            2004 Free Software Foundation, Inc.
574
575  This file is free software; as a special exception the author gives
576  unlimited permission to copy and/or distribute it, with or without
577  modifications, as long as this notice is preserved.
578
579  This file is distributed in the hope that it will be useful, but
580  WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
581  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.