(check_and_store): Do not update the stats for hidden
[gnupg.git] / sm / ChangeLog
1 2004-04-30  Werner Koch  <wk@gnupg.org>
2
3         * import.c (check_and_store): Do not update the stats for hidden
4         imports of issuer certs.
5
6 2004-04-28  Werner Koch  <wk@gnupg.org>
7
8         * gpgsm.c: New command --keydb-clear-some-cert-flags.
9         * keydb.c (keydb_clear_some_cert_flags): New.
10         (keydb_update_keyblock, keydb_set_flags): Change error code
11         CONFLICT to NOT_LOCKED.
12
13 2004-04-26  Werner Koch  <wk@gnupg.org>
14
15         * gpgsm.c (main) <gpgconf>: Do not use /dev/null as default config
16         filename.
17
18         * call-agent.c (gpgsm_agent_pksign, gpgsm_agent_pkdecrypt) 
19         (gpgsm_agent_genkey, gpgsm_agent_istrusted) 
20         (gpgsm_agent_marktrusted, gpgsm_agent_havekey) 
21         (gpgsm_agent_passwd): Add new arg CTRL and changed all callers.
22         (start_agent): New arg CTRL.  Send progress item when starting a
23         new agent.
24         * sign.c (gpgsm_get_default_cert, get_default_signer): New arg
25         CTRL to be passed down to the agent function.
26         * decrypt.c (prepare_decryption): Ditto.
27         * certreqgen.c (proc_parameters, read_parameters): Ditto.
28         * certcheck.c (gpgsm_create_cms_signature): Ditto.
29
30 2004-04-23  Werner Koch  <wk@gnupg.org>
31
32         * keydb.c (keydb_add_resource): Try to compress the file on init.
33
34         * keylist.c (oidtranstbl): New.  OIDs collected from several sources.
35         (print_name_raw, print_names_raw, list_cert_raw): New.
36         (gpgsm_list_keys): Check the dump mode and pass it down as
37         necessary.
38
39 2004-04-22  Werner Koch  <wk@gnupg.org>
40
41         * gpgsm.c (main): New commands --dump-keys, --dump-external-keys,
42         --dump-secret-keys.
43
44 2004-04-13  Werner Koch  <wk@gnupg.org>
45
46         * misc.c (setup_pinentry_env): New.
47         * import.c (popen_protect_tool): Call it.
48         * export.c (popen_protect_tool): Call it.
49
50 2004-04-08  Werner Koch  <wk@gnupg.org>
51
52         * decrypt.c (gpgsm_decrypt): Return GPG_ERR_NO_DATA if it is not a 
53         encrypted message.
54
55 2004-04-07  Werner Koch  <wk@gnupg.org>
56
57         * gpgsm.c: New option --force-crl-refresh.
58         * call-dirmngr.c (gpgsm_dirmngr_isvalid): Pass option to dirmngr.
59
60 2004-04-05  Werner Koch  <wk@gnupg.org>
61
62         * server.c (get_status_string): Add STATUS_NEWSIG.
63         * verify.c (gpgsm_verify): Print STATUS_NEWSIG for each signature.
64
65         * certchain.c (gpgsm_validate_chain) <gpgsm_cert_use_cer_p>: Do
66         not just warn if a cert is not suitable; bail out immediately.
67
68 2004-04-01  Werner Koch  <wk@gnupg.org>
69
70         * call-dirmngr.c (isvalid_status_cb): New.
71         (unhexify_fpr): New. Taken from ../g10/call-agent.c
72         (gpgsm_dirmngr_isvalid): Add new arg CTRL, changed caller to pass
73         it thru.  Detect need to check the respondert cert and do that.
74         * certchain.c (gpgsm_validate_chain): Add new arg FLAGS.  Changed
75         all callers.
76
77 2004-03-24  Werner Koch  <wk@gnupg.org>
78
79         * sign.c (gpgsm_sign): Include a short list of capabilities.
80
81 2004-03-17  Werner Koch  <wk@gnupg.org>
82
83         * gpgsm.c (main) <gpgconf>: Fixed default value quoting.
84
85 2004-03-16  Werner Koch  <wk@gnupg.org>
86
87         * gpgsm.c (main): Implemented --gpgconf-list.
88
89 2004-03-15  Werner Koch  <wk@gnupg.org>
90
91         * keylist.c (list_cert_colon): Hack to set the expired flag.
92
93 2004-03-09  Werner Koch  <wk@gnupg.org>
94
95         * gpgsm.c (main): Correctly intitialze USE_OCSP flag.
96
97         * keydb.c (keydb_delete): s/GPG_ERR_CONFLICT/GPG_ERR_NOT_LOCKED/
98
99 2004-03-04  Werner Koch  <wk@gnupg.org>
100
101         * call-dirmngr.c (gpgsm_dirmngr_isvalid): New arg ISSUER_CERT.
102
103         * certchain.c (is_cert_still_valid): New.  Code moved from ...
104         (gpgsm_validate_chain): ... here because we now need to check at
105         two places and at a later stage, so that we can pass the issuer
106         cert down to the dirmngr.
107
108 2004-03-03  Werner Koch  <wk@gnupg.org>
109
110         * call-agent.c (start_agent): Replaced pinentry setup code by a
111         call to a new common function.
112
113         * certdump.c (gpgsm_format_keydesc): Make sure the string is
114         returned as utf-8.
115
116         * export.c (gpgsm_export): Make sure that we don't export more
117         than one certificate.
118
119 2004-03-02  Werner Koch  <wk@gnupg.org>
120
121         * export.c (create_duptable, destroy_duptable)
122         (insert_duptable): New.
123         (gpgsm_export): Avoid duplicates.
124
125 2004-02-26  Werner Koch  <wk@gnupg.org>
126
127         * certchain.c (compare_certs): New.
128         (gpgsm_validate_chain): Fixed infinite certificate checks after
129         bad signatures.
130
131 2004-02-24  Werner Koch  <wk@gnupg.org>
132
133         * keylist.c (list_cert_colon): Print the fingerprint as the
134         cert-id for root certificates.
135
136 2004-02-21  Werner Koch  <wk@gnupg.org>
137
138         * keylist.c (list_internal_keys): Return error codes.
139         (list_external_keys, gpgsm_list_keys): Ditto.
140         * server.c (do_listkeys): Ditto.
141
142         * gpgsm.c (main): Display a key description for --passwd.
143         * call-agent.c (gpgsm_agent_passwd): New arg DESC.
144
145 2004-02-20  Werner Koch  <wk@gnupg.org>
146
147         * gpgsm.c (main): New option --debug-ignore-expiration.
148         * certchain.c (gpgsm_validate_chain): Use it here.
149
150         * certlist.c (cert_usage_p): Apply extKeyUsage.
151
152 2004-02-19  Werner Koch  <wk@gnupg.org>
153
154         * export.c (export_p12, popen_protect_tool)
155         (gpgsm_p12_export): New.
156         * gpgsm.c (main): New command --export-secret-key-p12. 
157
158 2004-02-18  Werner Koch  <wk@gnupg.org>
159
160         * gpgsm.c (set_debug): Set the new --debug-level flags.
161         (main): New option --gpgconf-list.  
162         (main): Do not setup -u and -r keys when not required.
163         (main): Setup the used character set.
164
165         * keydb.c (keydb_add_resource): Print a hint to start the
166         gpg-agent.
167
168 2004-02-17  Werner Koch  <wk@gnupg.org>
169
170         * gpgsm.c: Fixed value parsing for --with-validation.
171         * call-agent.c (start_agent): Ignore an empty GPG_AGENT_INFO.
172         * call-dirmngr.c (start_dirmngr): Likewise for DIRMNGR_INFO.
173
174         * gpgsm.c: New option --with-md5-fingerprint.
175         * keylist.c (list_cert_std): Print MD5 fpr.
176
177         * gpgsm.c: New options --with-validation.
178         * server.c (option_handler): New option "with-validation".
179         * keylist.c (list_cert_std, list_internal_keys): New args CTRL and
180         WITH_VALIDATION. Changed callers to set it.
181         (list_external_cb, list_external_keys): Pass CTRL to the callback.
182         (list_cert_colon): Add arg CTRL.  Check validation if requested.
183         * certchain.c (unknown_criticals, allowed_ca, check_cert_policy) 
184         (gpgsm_validate_chain): New args LISTMODE and FP.
185         (do_list): New helper for info output.
186         (find_up): New arg FIND_NEXT.
187         (gpgsm_validate_chain): After a bad signature try again with other
188         CA certificates.
189
190         * import.c (print_imported_status): New arg NEW_CERT. Print
191         additional STATUS_IMPORT_OK becuase that is what gpgme expects.
192         (check_and_store): Always call above function after import.
193         * server.c (get_status_string): Added STATUS_IMPORT_OK.
194
195 2004-02-13  Werner Koch  <wk@gnupg.org>
196
197         * certcheck.c (gpgsm_create_cms_signature): Format a description
198         for use by the pinentry.
199         * decrypt.c (gpgsm_decrypt): Ditto. Free HEXKEYGRIP.
200         * certdump.c (format_name_cookie, format_name_writer) 
201         (gpgsm_format_name): New.
202         (gpgsm_format_serial): New.
203         (gpgsm_format_keydesc): New.
204         * call-agent.c (gpgsm_agent_pksign): New arg DESC.
205         (gpgsm_agent_pkdecrypt): Ditto.
206
207         * encrypt.c (init_dek): Check for too weak algorithms.
208
209         * import.c (parse_p12, popen_protect_tool): New.
210
211         * base64.c (gpgsm_create_reader): New arg ALLOW_MULTI_PEM.
212         Changed all callers.
213         (base64_reader_cb): Handle it here.
214         (gpgsm_reader_eof_seen): New.
215         (base64_reader_cb): Set a flag for EOF.
216         (simple_reader_cb): Ditto.
217
218 2004-02-12  Werner Koch  <wk@gnupg.org>
219
220         * gpgsm.h, gpgsm.c: New option --protect-tool-program.
221         * gpgsm.c (run_protect_tool): Use it.
222
223 2004-02-11  Werner Koch  <wk@gnupg.org>
224
225         * Makefile.am (AM_CPPFLAGS): Pass directory constants via -D; this
226         will allow to override directory names at make time.
227
228 2004-02-02  Werner Koch  <wk@gnupg.org>
229
230         * import.c (check_and_store): Import certificates even with
231         missing issuer's cert.  Fixed an "depending on the verbose
232         setting" bug.
233
234         * certchain.c (gpgsm_validate_chain): Mark revoked certs in the
235         keybox.
236
237         * keylist.c (list_cert_colon): New arg VALIDITY; use it to print a
238         revoked flag.
239         (list_internal_keys): Retrieve validity flag.
240         (list_external_cb): Pass 0 as validity flag.
241         * keydb.c (keydb_get_flags, keydb_set_flags): New.
242         (keydb_set_cert_flags): New.
243         (lock_all): Return a proper error code.
244         (keydb_lock): New.
245         (keydb_delete): Don't lock but check that it has been locked.
246         (keydb_update_keyblock): Ditto.
247         * delete.c (delete_one): Take a lock.
248
249 2004-01-30  Werner Koch  <wk@gnupg.org>
250
251         * certchain.c (check_cert_policy): Fixed read error checking.
252         (check_cert_policy): With no critical policies issue only a
253         warning if the policy file does not exists.
254
255         * sign.c (add_certificate_list): Decrement N for the first cert.
256
257 2004-01-29  Werner Koch  <wk@gnupg.org>
258
259         * certdump.c (parse_dn_part): Map common OIDs to human readable
260         labels.  Make sure that a value won't get truncated if it includes
261         a Nul.
262
263 2004-01-28  Werner Koch  <wk@gnupg.org>
264
265         * certchain.c (gpgsm_validate_chain): Changed the message printed
266         for an untrusted root certificate.
267
268 2004-01-27  Werner Koch  <wk@gnupg.org>
269
270         * certdump.c (parse_dn_part): Pretty print the nameDistinguisher OID.
271         (print_dn_part): Do not delimit multiple RDN by " + ".  Handle
272         multi-valued RDNs in a special way, i.e. in the order specified by
273         the certificate.
274         (print_dn_parts): Simplified. 
275
276 2004-01-16  Werner Koch  <wk@gnupg.org>
277
278         * sign.c (gpgsm_sign): Print an error message on all failures.
279         * decrypt.c (gpgsm_decrypt): Ditto.
280
281 2003-12-17  Werner Koch  <wk@gnupg.org>
282
283         * server.c (gpgsm_server): Add arg DEFAULT_RECPLIST.
284         (cmd_encrypt): Add all enrypt-to marked certs to the list.
285         * encrypt.c (gpgsm_encrypt): Check that real recipients are
286         available.
287         * gpgsm.c (main): Make the --encrypt-to and --no-encrypt-to
288         options work.  Pass the list of recients to gpgsm_server.
289         * gpgsm.h (certlist_s): Add field IS_ENCRYPT_TO.
290         (opt): Add NO_ENCRYPT_TO.
291         * certlist.c (gpgsm_add_to_certlist): New arg IS_ENCRYPT_TO.
292         Changed all callers and ignore duplicate entries.
293         (is_cert_in_certlist): New.
294         (gpgsm_add_cert_to_certlist): New.
295
296         * certdump.c (gpgsm_print_serial): Cleaned up cast use in strtoul.
297         (gpgsm_dump_serial): Ditto.
298
299         * decrypt.c (gpgsm_decrypt): Replaced ERR by RC.
300
301 2003-12-16  Werner Koch  <wk@gnupg.org>
302
303         * gpgsm.c (main): Set the prefixes for assuan logging.
304
305         * sign.c (gpgsm_sign): Add validation checks for the default
306         certificate.
307
308         * gpgsm.c: Add -k as alias for --list-keys and -K for
309         --list-secret-keys.
310
311 2003-12-15  Werner Koch  <wk@gnupg.org>
312
313         * encrypt.c (init_dek): Use gry_create_nonce for the IV; there is
314         not need for real strong random here and it even better protect
315         the random bits used for the key.
316
317 2003-12-01  Werner Koch  <wk@gnupg.org>
318
319         * gpgsm.c, gpgsm.h: New options --{enable,disable}-ocsp.
320         (gpgsm_init_default_ctrl): Set USE_OCSP to the default value.
321         * certchain.c (gpgsm_validate_chain): Handle USE_OCSP.
322         * call-dirmngr.c (gpgsm_dirmngr_isvalid): Add arg USE_OCSP and
323         proceed accordingly.
324
325 2003-11-19  Werner Koch  <wk@gnupg.org>
326
327         * verify.c (gpgsm_verify): Use "0" instead of an empty string for
328         the VALIDSIG status.
329
330 2003-11-18  Werner Koch  <wk@gnupg.org>
331
332         * verify.c (gpgsm_verify): Fixed for changes API of gcry_md_info.
333
334         * certchain.c (unknown_criticals): Fixed an error code test.
335
336 2003-11-12  Werner Koch  <wk@gnupg.org>
337
338         Adjusted for API changes in Libksba.
339
340 2003-10-31  Werner Koch  <wk@gnupg.org>
341
342         * certchain.c (gpgsm_validate_chain): Changed to use ksba_isotime_t.
343         * verify.c (strtimestamp_r, gpgsm_verify): Ditto.
344         * sign.c (gpgsm_sign): Ditto.
345         * keylist.c (print_time, list_cert_std, list_cert_colon): Ditto.
346         * certdump.c (gpgsm_print_time, gpgsm_dump_time, gpgsm_dump_cert):
347         Ditto.
348
349 2003-10-25  Werner Koch  <wk@gnupg.org>
350
351         * certreqgen.c (read_parameters): Fixed faulty of !spacep().
352
353 2003-08-20  Marcus Brinkmann  <marcus@g10code.de>
354
355         * encrypt.c (encode_session_key): Allocate enough space.  Cast key
356         byte to unsigned char to prevent sign extension.
357         (encrypt_dek): Check return value before error.
358
359 2003-08-14  Timo Schulz  <twoaday@freakmail.de>
360
361         * encrypt.c (encode_session_key): Use new Libgcrypt interface.
362         
363 2003-07-31  Werner Koch  <wk@gnupg.org>
364
365         * Makefile.am (gpgsm_LDADD): Added INTLLIBS.
366
367 2003-07-29  Werner Koch  <wk@gnupg.org>
368
369         * gpgsm.c (main): Add secmem features and set the random seed file.
370         (gpgsm_exit): Update the random seed file and enable debug output.
371
372 2003-07-27  Werner Koch  <wk@gnupg.org>
373
374         Adjusted for gcry_mpi_print and gcry_mpi_scan API change.
375
376 2003-06-24  Werner Koch  <wk@gnupg.org>
377
378         * server.c (gpgsm_status_with_err_code): New.
379         * verify.c (gpgsm_verify): Use it here instead of the old
380         tokenizing version.
381
382         * verify.c (strtimestamp): Renamed to strtimestamp_r
383
384         Adjusted for changes in the libgcrypt API. Some more fixes for the
385         libgpg-error stuff.  
386
387 2003-06-04  Werner Koch  <wk@gnupg.org>
388
389         * call-agent.c (init_membuf,put_membuf,get_membuf): Removed.
390         Include new membuf header and changed used type.
391
392         Renamed error codes from INVALID to INV and removed _ERROR suffixes.
393
394 2003-06-03  Werner Koch  <wk@gnupg.org>
395
396         Changed all error codes in all files to the new libgpg-error scheme.
397
398         * gpgsm.h: Include gpg-error.h .
399         * Makefile.am: Link with libgpg-error.
400
401 2003-04-29  Werner Koch  <wk@gnupg.org>
402
403         * Makefile.am: Use libassuan.  Don't override LDFLAGS anymore.
404         * server.c (register_commands): Adjust for new Assuan semantics.
405
406 2002-12-03  Werner Koch  <wk@gnupg.org>
407
408         * call-agent.c (gpgsm_agent_passwd): New.
409         * gpgsm.c (main): New command --passwd and --call-protect-tool
410         (run_protect_tool): New.
411
412 2002-11-25  Werner Koch  <wk@gnupg.org>
413
414         * verify.c (gpgsm_verify): Handle content-type attribute. 
415
416 2002-11-13  Werner Koch  <wk@gnupg.org>
417
418         * call-agent.c (start_agent): Try to use $GPG_TTY instead of
419         ttyname.  Changed ttyname to test stdin becuase it can be assumed
420         that output redirection is more common that input redirection.
421
422 2002-11-12  Werner Koch  <wk@gnupg.org>
423
424         * gpgsm.c: New command --call-dirmngr. 
425         * call-dirmngr.c (gpgsm_dirmngr_run_command)
426         (run_command_inq_cb,run_command_cb)
427         (run_command_status_cb): New.
428
429 2002-11-11  Werner Koch  <wk@gnupg.org>
430
431         * certcheck.c (gpgsm_check_cms_signature): Don't double free
432         s_sig but free s_pkey at leave.
433
434 2002-11-10  Werner Koch  <wk@gnupg.org>
435
436         * gpgsm.c: Removed duplicate --list-secret-key entry.
437
438 2002-09-19  Werner Koch  <wk@gnupg.org>
439
440         * certcheck.c (gpgsm_check_cert_sig): Add cert hash debugging.
441
442         * certchain.c (find_up): Print info when the cert was not found 
443         by the autorithyKeyIdentifier.
444
445 2002-09-03  Werner Koch  <wk@gnupg.org>
446
447         * gpgsm.c (main): Disable the internal libgcrypt locking.
448
449 2002-08-21  Werner Koch  <wk@gnupg.org>
450
451         * import.c (print_imported_summary): Cleaned up.  Print new
452         not_imported value.
453         (check_and_store): Update non_imported counter.
454         (print_import_problem): New.
455         (check_and_store): Print error status message.
456         * server.c (get_status_string): Added STATUS_IMPORT_PROBLEM.
457
458 2002-08-20  Werner Koch  <wk@gnupg.org>
459
460         * gpgsm.c (main): Use the log file only in server mode.
461
462         * import.c (print_imported_summary): New.
463         (check_and_store): Update the counters, take new argument.
464         (import_one): Factored out core of gpgsm_import.
465         (gpgsm_import): Print counters.
466         (gpgsm_import_files): New.
467         * gpgsm.c (main): Use the new function for import.
468
469 2002-08-19  Werner Koch  <wk@gnupg.org>
470
471         * decrypt.c (gpgsm_decrypt): Return a better error status token.
472         * verify.c (gpgsm_verify): Don't error on messages with no signing
473         time or no message digest.  This is only the case for messages
474         without any signed attributes.
475
476 2002-08-16  Werner Koch  <wk@gnupg.org>
477
478         * certpath.c: Renamed to ..
479         * certchain.c: this. Renamed all all other usages of "path" in the
480         context of certificates to "chain".
481
482         * call-agent.c (learn_cb): Special treatment when the issuer
483         certificate is missing.
484
485 2002-08-10  Werner Koch  <wk@gnupg.org>
486
487         * Makefile.am (INCLUDES): Add definition for localedir.
488
489         * keylist.c (list_cert_colon): Print the short fingerprint in the
490         key ID field.
491         * fingerprint.c (gpgsm_get_short_fingerprint): New.
492         * verify.c (gpgsm_verify): Print more verbose info for a good
493         signature.
494
495 2002-08-09  Werner Koch  <wk@gnupg.org>
496
497         * decrypt.c (prepare_decryption): Hack to detected already
498         unpkcsedone keys.
499
500         * gpgsm.c (emergency_cleanup): New.
501         (main): Initialize the signal handler.
502
503         * sign.c (gpgsm_sign): Reset the hash context for subsequent
504         signers and release it at the end.
505
506 2002-08-05  Werner Koch  <wk@gnupg.org>
507
508         * server.c (cmd_signer): New command "SIGNER"
509         (register_commands): Register it.
510         (cmd_sign): Pass the signer list to gpgsm_sign.
511         * certlist.c (gpgsm_add_to_certlist): Add SECRET argument, check
512         for secret key if set and changed all callers.
513         * sign.c (gpgsm_sign): New argument SIGNERLIST and implemt
514         multiple signers.
515         * gpgsm.c (main): Support more than one -u.
516         
517         * server.c (cmd_recipient): Return reason code 1 for No_Public_Key
518         which is actually what gets returned from add_to_certlist.
519         
520 2002-07-26  Werner Koch  <wk@gnupg.org>
521
522         * certcheck.c (gpgsm_check_cert_sig): Implement proper cleanup.
523         (gpgsm_check_cms_signature): Ditto.
524
525 2002-07-22  Werner Koch  <wk@gnupg.org>
526
527         * keydb.c (keydb_add_resource): Register a lock file.
528         (lock_all, unlock_all): Implemented.
529
530         * delete.c: New.
531         * gpgsm.c: Made --delete-key work.
532         * server.c (cmd_delkeys): New.
533         (register_commands): New command DELKEYS.
534
535         * decrypt.c (gpgsm_decrypt): Print a convenience note when RC2 is
536         used and a STATUS_ERROR with the algorithm oid.
537
538 2002-07-03  Werner Koch  <wk@gnupg.org>
539
540         * server.c (gpgsm_status2): Insert a blank between all optional
541         arguments when using assuan.
542         * server.c (cmd_recipient): No more need for extra blank in constants.
543         * import.c (print_imported_status): Ditto.
544         * gpgsm.c (main): Ditto.
545
546 2002-07-02  Werner Koch  <wk@gnupg.org>
547
548         * verify.c (gpgsm_verify): Extend the STATUS_BADSIG line with
549         the fingerprint.
550
551         * certpath.c (check_cert_policy): Don't use log_error to print a
552         warning.
553
554         * keydb.c (keydb_store_cert): Add optional ar EXISTED and changed
555         all callers.
556         * call-agent.c (learn_cb): Print info message only for real imports.
557
558         * import.c (gpgsm_import): Moved duplicated code to ...
559         (check_and_store): new function.  Added magic to import the entire
560         chain. Print status only for real imports and moved printing code
561         to ..
562         (print_imported_status): New.
563
564         * call-dirmngr.c (gpgsm_dirmngr_isvalid): print status of dirmngr
565         call in very verbose mode.
566
567         * gpgsm.c (main): Use the same error codes for STATUS_INV_RECP as
568         with the server mode.
569
570 2002-06-29  Werner Koch  <wk@gnupg.org>
571
572         * gpgsm.c: New option --auto-issuer-key-retrieve.
573         * certpath.c (find_up): Try to retrieve an issuer key from an
574         external source and from the ephemeral key DB.
575         (find_up_store_certs_cb): New.
576
577         * keydb.c (keydb_set_ephemeral): Does now return the old
578         state.  Call the backend only when required.
579
580         * call-dirmngr.c (start_dirmngr): Use GNUPG_DEFAULT_DIRMNGR.
581         (lookup_status_cb): Issue status only when CTRL is not NULL.
582         (gpgsm_dirmngr_lookup): Document that CTRL is optional.
583
584         * call-agent.c (start_agent): Use GNUPG_DEFAULT_AGENT.
585
586 2002-06-28  Werner Koch  <wk@gnupg.org>
587
588         * server.c (cmd_recipient): Add more reason codes.
589
590 2002-06-27  Werner Koch  <wk@gnupg.org>
591
592         * certpath.c (gpgsm_basic_cert_check): Use
593         --debug-no-path-validation to also bypass this basic check.
594
595         * gpgsm.c (main): Use GNUPG_DEFAULT_HOMEDIR constant.
596
597         * call-agent.c (start_agent): Create and pass the list of FD to
598         keep in the child to assuan.
599         * call-dirmngr.c (start_dirmngr): Ditto.
600
601 2002-06-26  Werner Koch  <wk@gnupg.org>
602
603         * import.c (gpgsm_import): Print an STATUS_IMPORTED.
604
605         * gpgsm.c: --debug-no-path-validation does not take an argument.
606
607 2002-06-25  Werner Koch  <wk@gnupg.org>
608
609         * certdump.c (print_dn_part): Always print a leading slash,
610         removed NEED_DELIM arg and changed caller.
611
612         * export.c (gpgsm_export): Print LFs to FP and not stdout.
613         (print_short_info): Ditto.  Make use of gpgsm_print_name.
614
615         * server.c (cmd_export): Use output-fd instead of data lines; this
616         was actually the specified way.
617
618 2002-06-24  Werner Koch  <wk@gnupg.org>
619
620         * gpgsm.c: Removed duped help entry for --list-keys.
621         
622         * gpgsm.c, gpgsm.h: New option --debug-no-path-validation.
623
624         * certpath.c (gpgsm_validate_path): Use it here instead of the
625         debug flag hack.
626
627         * certpath.c (check_cert_policy): Return No_Policy_Match if the
628         policy file could not be opened.
629
630 2002-06-20  Werner Koch  <wk@gnupg.org>
631
632         * certlist.c (gpgsm_add_to_certlist): Fixed locating of a
633         certificate with the required key usage.
634
635         * gpgsm.c (main): Fixed a segv when using --outfile without an
636         argument.
637
638         * keylist.c (print_capabilities): Also check for non-repudiation
639         and data encipherment.
640         * certlist.c (cert_usage_p): Test for signing and encryption was
641         swapped.  Add a case for certification usage, handle
642         non-repudiation and data encipherment.
643         (gpgsm_cert_use_cert_p): New.
644         (gpgsm_add_to_certlist): Added a CTRL argument and changed all
645         callers to pass it.
646         * certpath.c (gpgsm_validate_path): Use it here to print a status
647         message. Added a CTRL argument and changed all callers to pass it.
648         * decrypt.c (gpgsm_decrypt): Print a status message for wrong key
649         usage.
650         * verify.c (gpgsm_verify): Ditto.
651         * keydb.c (classify_user_id): Allow a colon delimited fingerprint.
652
653 2002-06-19  Werner Koch  <wk@gnupg.org>
654
655         * call-agent.c (learn_cb): Use log_info instead of log_error on
656         successful import.
657
658         * keydb.c (keydb_set_ephemeral): New.
659         (keydb_store_cert): New are ephemeral, changed all callers.
660         * keylist.c (list_external_cb): Store cert as ephemeral.
661         * export.c (gpgsm_export): Kludge to export epehmeral certificates.
662
663         * gpgsm.c (main): New command --list-external-keys.
664         
665 2002-06-17  Werner Koch  <wk@gnupg.org>
666
667         * certreqgen.c (read_parameters): Improved error handling.
668         (gpgsm_genkey): Print error message.
669
670 2002-06-13  Werner Koch  <wk@gnupg.org>
671
672         * gpgsm.c (main): New option --log-file.
673
674 2002-06-12  Werner Koch  <wk@gnupg.org>
675
676         * call-dirmngr.c (lookup_status_cb): New.
677         (gpgsm_dirmngr_lookup): Use the status CB.  Add new arg CTRL and
678         changed caller to pass it.
679
680         * gpgsm.c (open_fwrite): New.
681         (main): Allow --output for --verify.
682
683         * sign.c (hash_and_copy_data): New.
684         (gpgsm_sign): Implemented normal (non-detached) signatures.
685         * gpgsm.c (main): Ditto.
686         
687         * certpath.c (gpgsm_validate_path): Special error handling for
688         no policy match.
689
690 2002-06-10  Werner Koch  <wk@gnupg.org>
691
692         * server.c (get_status_string): Add STATUS_ERROR.
693
694         * certpath.c (gpgsm_validate_path): Tweaked the error checking to 
695         return error codes in a more sensitive way.
696         * verify.c (gpgsm_verify): Send status TRUST_NEVER also for a bad
697         CA certificate and when the certificate has been revoked.  Issue
698         TRUST_FULLY even when the cert has expired.  Append an error token
699         to these status lines.  Issue the new generic error status when a
700         cert was not found and when leaving the function.
701
702 2002-06-04  Werner Koch  <wk@gnupg.org>
703
704         * gpgsm.c (main): New command --list-sigs
705         * keylist.c (list_cert_std): New.  Use it whenever colon mode is
706         not used.
707         (list_cert_chain): New.
708
709 2002-05-31  Werner Koch  <wk@gnupg.org>
710
711         * gpgsm.c (main): Don't print the "go ahead" message for an
712         invalid command.
713
714 2002-05-23  Werner Koch  <wk@gnupg.org>
715
716         * import.c (gpgsm_import): Add error messages.
717
718 2002-05-21  Werner Koch  <wk@gnupg.org>
719
720         * keylist.c (list_internal_keys): Renamed from gpgsm_list_keys.
721         (list_external_keys): New.
722         (gpgsm_list_keys): Dispatcher for above.
723         * call-dirmngr.c (lookup_cb,pattern_from_strlist)
724         (gpgsm_dirmngr_lookup): New.
725         * server.c (option_handler): Handle new option --list-mode.
726         (do_listkeys): Handle options and actually use the mode argument.
727         (get_status_string): New code TRUNCATED.
728
729         * import.c (gpgsm_import): Try to identify the type of input and
730         handle certs-only messages.
731
732 2002-05-14  Werner Koch  <wk@gnupg.org>
733
734         * gpgsm.c: New option --faked-system-time
735         * sign.c (gpgsm_sign): And use it here.
736         * certpath.c (gpgsm_validate_path): Ditto.
737
738 2002-05-03  Werner Koch  <wk@gnupg.org>
739
740         * certpath.c (gpgsm_validate_path): Added EXPTIME arg and changed
741         all callers.
742         * verify.c (gpgsm_verify): Tweaked usage of log_debug and
743         log_error.  Return EXPSIG status and add expiretime to VALIDSIG.
744
745 2002-04-26  Werner Koch  <wk@gnupg.org>
746
747         * gpgsm.h (DBG_AGENT,DBG_AGENT_VALUE): Replaced by DBG_ASSUAN_*.
748         Changed all users.
749
750         * call-agent.c (start_agent): Be more silent without -v.
751         * call-dirmngr.c (start_dirmngr): Ditto.
752
753 2002-04-25  Werner Koch  <wk@gnupg.org>
754
755         * call-agent.c (start_agent): Make copies of old locales and check
756         for setlocale.
757
758 2002-04-25  Marcus Brinkmann  <marcus@g10code.de>
759
760         * call-agent.c (start_agent): Fix error handling logic so the
761         locale is always correctly reset.
762
763 2002-04-25  Marcus Brinkmann  <marcus@g10code.de>
764
765         * server.c (option_handler): Accept display, ttyname, ttytype,
766         lc_ctype and lc_messages options.
767         * gpgsm.c (main): Allocate memory for these options.
768         * gpgsm.h (struct opt): Make corresponding members non-const.
769
770 2002-04-24  Marcus Brinkmann  <marcus@g10code.de>
771
772         * gpgsm.h (struct opt): New members display, ttyname, ttytype,
773         lc_ctype, lc_messages.
774         * gpgsm.c (enum cmd_and_opt_values): New members oDisplay,
775         oTTYname, oTTYtype, oLCctype, oLCmessages.
776         (opts): New entries for these options.
777         (main): Handle these new options.
778         * call-agent.c (start_agent): Set the various display and tty
779         parameter after resetting.
780
781 2002-04-18  Werner Koch  <wk@gnupg.org>
782
783         * certreqgen.c (gpgsm_genkey): Write status output on success.
784
785 2002-04-15  Werner Koch  <wk@gnupg.org>
786
787         * gpgsm.c (main): Check ksba version.
788
789         * certpath.c (find_up): New to use the authorithKeyIdentifier.
790         Use it in all other functions to locate the signing cert..
791
792 2002-04-11  Werner Koch  <wk@gnupg.org>
793
794         * certlist.c (cert_usable_p): New.
795         (gpgsm_cert_use_sign_p,gpgsm_cert_use_encrypt_p): New.
796         (gpgsm_cert_use_verify_p,gpgsm_cert_use_decrypt_p): New.
797         (gpgsm_add_to_certlist): Check the key usage.
798         * sign.c (gpgsm_sign): Ditto.
799         * verify.c (gpgsm_verify): Print a message wehn an unsuitable
800         certificate was used.
801         * decrypt.c (gpgsm_decrypt): Ditto
802         * keylist.c (print_capabilities): Determine values from the cert.
803
804 2002-03-28  Werner Koch  <wk@gnupg.org>
805
806         * keylist.c (list_cert_colon): Fixed listing of crt record; the
807         issuer is not at the right place.  Print a chainingID.
808         * certpath.c (gpgsm_walk_cert_chain): Be a bit more silent on
809         common errors.
810
811 2002-03-21  Werner Koch  <wk@gnupg.org>
812
813         * export.c: New.
814         * gpgsm.c: Add command --export.
815         * server.c (cmd_export): New.
816         
817 2002-03-13  Werner Koch  <wk@gnupg.org>
818
819         * decrypt.c (gpgsm_decrypt): Allow multiple recipients.
820
821 2002-03-12  Werner Koch  <wk@gnupg.org>
822
823         * certpath.c (check_cert_policy): Print the policy list.
824
825         * verify.c (gpgsm_verify): Detect certs-only message.
826
827 2002-03-11  Werner Koch  <wk@gnupg.org>
828
829         * import.c (gpgsm_import): Print a notice about imported certificates
830         when in verbose mode.
831
832         * gpgsm.c (main): Print INV_RECP status.
833         * server.c (cmd_recipient): Ditto.
834
835         * server.c (gpgsm_status2): New.  Allows for a list of strings.
836         (gpgsm_status): Divert to gpgsm_status2.
837
838         * encrypt.c (gpgsm_encrypt): Don't use a default key when no
839         recipients are given.  Print a NO_RECP status.
840
841 2002-03-06  Werner Koch  <wk@gnupg.org>
842
843         * server.c (cmd_listkeys, cmd_listsecretkeys): Divert to
844         (do_listkeys): new.  Add pattern parsing.
845
846         * keylist.c (gpgsm_list_keys): Handle selection pattern.
847
848         * gpgsm.c: New command --learn-card
849         * call-agent.c (learn_cb,gpgsm_agent_learn): New.
850
851         * gpgsm.c (main): Print error messages for non-implemented commands.
852
853         * base64.c (base64_reader_cb): Use case insensitive compare of the
854         Content-Type string to detect plain base-64.
855
856 2002-03-05  Werner Koch  <wk@gnupg.org>
857
858         * gpgsm.c, gpgsm.h: Add local_user.
859         * sign.c (gpgsm_get_default_cert): New.
860         (get_default_signer): Use the new function if local_user is not
861         set otherwise used that value.
862         * encrypt.c (get_default_recipient): Removed.
863         (gpgsm_encrypt): Use gpgsm_get_default_cert.
864
865         * verify.c (gpgsm_verify): Better error text for a bad signature
866         found by comparing the hashs.
867
868 2002-02-27  Werner Koch  <wk@gnupg.org>
869
870         * call-dirmngr.c, call-agent.c: Add 2 more arguments to all uses
871         of assuan_transact.
872
873 2002-02-25  Werner Koch  <wk@gnupg.org>
874
875         * server.c (option_handler): Allow to use -2 for "send all certs
876         except the root cert".
877         * sign.c (add_certificate_list): Implement it here.
878         * certpath.c (gpgsm_is_root_cert): New.
879
880 2002-02-19  Werner Koch  <wk@gnupg.org>
881
882         * certpath.c (check_cert_policy): New.
883         (gpgsm_validate_path): And call it from here.
884         * gpgsm.c (main): New options --policy-file,
885         --disable-policy-checks and --enable-policy-checks.
886         * gpgsm.h (opt): Added policy_file, no_policy_checks.
887
888 2002-02-18  Werner Koch  <wk@gnupg.org>
889
890         * certpath.c (gpgsm_validate_path): Ask the agent to add the
891         certificate into the trusted list.
892         * call-agent.c (gpgsm_agent_marktrusted): New.
893
894 2002-02-07  Werner Koch  <wk@gnupg.org>
895
896         * certlist.c (gpgsm_add_to_certlist): Check that the specified
897         name identifies a certificate unambiguously.
898         (gpgsm_find_cert): Ditto.
899
900         * server.c (cmd_listkeys): Check that the data stream is available.
901         (cmd_listsecretkeys): Ditto.
902         (has_option): New.
903         (cmd_sign): Fix ambiguousity in option recognition.
904
905         * gpgsm.c (main): Enable --logger-fd.
906
907         * encrypt.c (gpgsm_encrypt): Increased buffer size for better
908         performance.
909
910         * call-agent.c (gpgsm_agent_pksign): Check the S-Exp received from
911         the agent.
912
913         * keylist.c (list_cert_colon): Filter out control characters.
914
915 2002-02-06  Werner Koch  <wk@gnupg.org>
916
917         * decrypt.c (gpgsm_decrypt): Bail out after an decryption error.
918
919         * server.c (reset_notify): Close input and output FDs.
920         (cmd_encrypt,cmd_decrypt,cmd_verify,cmd_sign.cmd_import)
921         (cmd_genkey): Close the FDs and release the recipient list even in
922         the error case.
923
924 2002-02-01  Marcus Brinkmann  <marcus@g10code.de>
925
926         * sign.c (gpgsm_sign): Do not release certificate twice.
927
928 2002-01-29  Werner Koch  <wk@gnupg.org>
929
930         * call-agent.c (gpgsm_agent_havekey): New.
931         * keylist.c (list_cert_colon): New arg HAVE_SECRET, print "crs"
932         when we know that the secret key is available.
933         (gpgsm_list_keys): New arg MODE, check whether a secret key is
934         available.  Changed all callers.
935         * gpgsm.c (main): New command --list-secret-keys.
936         * server.c (cmd_listsecretkeys): New.
937         (cmd_listkeys): Return secret keys with "crs" record.
938
939 2002-01-28  Werner Koch  <wk@gnupg.org>
940
941         * certreqgen.c (create_request): Store the email address in the req.
942
943 2002-01-25  Werner Koch  <wk@gnupg.org>
944
945         * gpgsm.c (main): Disable core dumps.
946
947         * sign.c (add_certificate_list): New.
948         (gpgsm_sign): Add the certificates to the CMS object.
949         * certpath.c (gpgsm_walk_cert_chain): New.
950         * gpgsm.h (server_control_s): Add included_certs.
951         * gpgsm.c: Add option --include-certs.
952         (gpgsm_init_default_ctrl): New.
953         (main): Call it.
954         * server.c (gpgsm_server): Ditto.
955         (option_handler): Support --include-certs.
956
957 2002-01-23  Werner Koch  <wk@gnupg.org>
958
959         * certpath.c (gpgsm_validate_path): Print the DN of a missing issuer.
960         * certdump.c (gpgsm_dump_string): New.
961         (print_dn): Replaced by above.
962
963 2002-01-22  Werner Koch  <wk@gnupg.org>
964
965         * certpath.c (unknown_criticals): New.
966         (allowed_ca): New.
967         (gpgsm_validate_path): Check validity, CA attribute, path length
968         and unknown critical extensions.
969
970 2002-01-21  Werner Koch  <wk@gnupg.org>
971
972         * gpgsm.c: Add option --enable-crl-checks.
973
974         * call-agent.c (start_agent): Implemented socket based access.
975         * call-dirmngr.c (start_dirmngr): Ditto.
976
977 2002-01-20  Werner Koch  <wk@gnupg.org>
978
979         * server.c (option_handler): New.
980         (gpgsm_server): Register it with assuan.
981
982 2002-01-19  Werner Koch  <wk@gnupg.org>
983
984         * server.c (gpgsm_server): Use assuan_deinit_server and setup
985         assuan logging if enabled.
986         * call-agent.c (inq_ciphertext_cb): Don't show the session key in
987         an Assuan log file.
988
989         * gpgsm.c (my_strusage): Take bugreport address from configure.ac
990
991 2002-01-15  Werner Koch  <wk@gnupg.org>
992
993         * import.c (gpgsm_import): Just do a basic cert check before
994         storing it.
995         * certpath.c (gpgsm_basic_cert_check): New.
996
997         * keydb.c (keydb_store_cert): New.
998         * import.c (store_cert): Removed and change all caller to use
999         the new function.
1000         * verify.c (store_cert): Ditto.
1001
1002         * certlist.c (gpgsm_add_to_certlist): Validate the path
1003
1004         * certpath.c (gpgsm_validate_path): Check the trust list.
1005         * call-agent.c (gpgsm_agent_istrusted): New.
1006
1007 2002-01-14  Werner Koch  <wk@gnupg.org>
1008
1009         * call-dirmngr.c (inq_certificate): Changed for new interface semantic.
1010         * certlist.c (gpgsm_find_cert): New.
1011
1012 2002-01-13  Werner Koch  <wk@gnupg.org>
1013
1014         * fingerprint.c (gpgsm_get_certid): Print the serial and not the
1015         hash after the dot.
1016
1017 2002-01-11  Werner Koch  <wk@gnupg.org>
1018
1019         * call-dirmngr.c: New.
1020         * certpath.c (gpgsm_validate_path): Check the CRL here.
1021         * fingerprint.c (gpgsm_get_certid): New.
1022         * gpgsm.c: New options --dirmngr-program and --disable-crl-checks.
1023
1024 2002-01-10  Werner Koch  <wk@gnupg.org>
1025
1026         * base64.c (gpgsm_create_writer): Allow to set the object name
1027
1028 2002-01-08  Werner Koch  <wk@gnupg.org>
1029
1030         * keydb.c (spacep): Removed because it is now in util.c
1031
1032         * server.c (cmd_genkey): New.
1033         * certreqgen.c: New.  The parameter handling code has been taken
1034         from gnupg/g10/keygen.c version 1.0.6.
1035         * call-agent.c (gpgsm_agent_genkey): New.
1036
1037 2002-01-02  Werner Koch  <wk@gnupg.org>
1038
1039         * server.c (rc_to_assuan_status): Removed and changed all callers
1040         to use map_to_assuan_status.
1041
1042 2001-12-20  Werner Koch  <wk@gnupg.org>
1043
1044         * verify.c (gpgsm_verify): Implemented non-detached signature
1045         verification.  Add OUT_FP arg, initialize a writer and changed all
1046         callers.
1047         * server.c (cmd_verify): Pass an out_fp if one has been set.
1048
1049         * base64.c (base64_reader_cb): Try to detect an S/MIME body part.
1050
1051         * certdump.c (print_sexp): Renamed to gpgsm_dump_serial, made
1052         global.
1053         (print_time): Renamed to gpgsm_dump_time, made global.
1054         (gpgsm_dump_serial): Take a real S-Expression as argument and
1055         print the first item.
1056         * keylist.c (list_cert_colon): Ditto.
1057         * keydb.c (keydb_search_issuer_sn): Ditto.
1058         * decrypt.c (print_integer_sexp): Removed and made callers 
1059         use gpgsm_dump_serial.
1060         * verify.c (print_time): Removed, made callers use gpgsm_dump_time.
1061         
1062 2001-12-19  Marcus Brinkmann  <marcus@g10code.de>
1063
1064         * call-agent.c (start_agent): Add new argument to assuan_pipe_connect.
1065
1066 2001-12-18  Werner Koch  <wk@gnupg.org>
1067
1068         * verify.c (print_integer_sexp): Renamed from print_integer and
1069         print the serial number according to the S-Exp rules.
1070         * decrypt.c (print_integer_sexp): Ditto.
1071
1072 2001-12-17  Werner Koch  <wk@gnupg.org>
1073
1074         * keylist.c (list_cert_colon): Changed for new return value of
1075         get_serial.
1076         * keydb.c (keydb_search_issuer_sn): Ditto.
1077         * certcheck.c (gpgsm_check_cert_sig): Likewise for other S-Exp
1078         returingin functions.
1079         * fingerprint.c (gpgsm_get_keygrip): Ditto.
1080         * encrypt.c (encrypt_dek): Ditto
1081         * certcheck.c (gpgsm_check_cms_signature): Ditto
1082         * decrypt.c (prepare_decryption): Ditto.
1083         * call-agent.c (gpgsm_agent_pkdecrypt): Removed arg ciphertextlen,
1084         use KsbaSexp type and calculate the length.
1085
1086         * certdump.c (print_sexp): Remaned from print_integer, changed caller.
1087
1088         * Makefile.am: Use the LIBGCRYPT and LIBKSBA variables.
1089
1090         * fingerprint.c (gpgsm_get_keygrip): Use the new
1091         gcry_pk_get_keygrip to calculate the grip - note the algorithm and
1092         therefore the grip values changed.
1093
1094 2001-12-15  Werner Koch  <wk@gnupg.org>
1095
1096         * certcheck.c (gpgsm_check_cms_signature): Removed the faked-key
1097         kludge.
1098         (gpgsm_create_cms_signature): Removed the commented fake key
1099         code.  This makes the function pretty simple.
1100
1101         * gpgsm.c (main): Renamed the default key database to "keyring.kbx".
1102
1103         * decrypt.c (gpgsm_decrypt): Write STATUS_DECRYPTION_*.
1104         * sign.c (gpgsm_sign): Write a STATUS_SIG_CREATED.
1105
1106 2001-12-14  Werner Koch  <wk@gnupg.org>
1107
1108         * keylist.c (list_cert_colon): Kludge to show an email address
1109         encoded in the subject's DN.
1110
1111         * verify.c (gpgsm_verify): Add hash debug helpers
1112         * sign.c (gpgsm_sign): Ditto.
1113
1114         * base64.c (base64_reader_cb): Reset the linelen when we need to
1115         skip the line and adjusted test; I somehow forgot about DeMorgan.
1116
1117         * server.c (cmd_encrypt,cmd_decrypt,cmd_sign,cmd_verify) 
1118         (cmd_import): Close the FDs on success.
1119         (close_message_fd): New.
1120         (input_notify): Setting autodetect_encoding to 0 after initializing
1121         it to 0 is pretty pointless.  Easy to fix.
1122
1123         * gpgsm.c (main): New option --debug-wait n, so that it is
1124         possible to attach gdb when used in server mode.
1125
1126         * sign.c (get_default_signer): Use keydb_classify_name here.
1127
1128 2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
1129
1130         * call-agent.c (LINELENGTH): Removed.
1131         (gpgsm_agent_pksign): Use ASSUAN_LINELENGTH, not LINELENGTH.
1132         (gpgsm_agent_pkdecrypt): Likewise.
1133
1134 2001-12-13  Werner Koch  <wk@gnupg.org>
1135
1136         * keylist.c (list_cert_colon): Print alternative names of subject
1137         and a few other values.
1138
1139 2001-12-12  Werner Koch  <wk@gnupg.org>
1140
1141         * gpgsm.c (main): New options --assume-{armor,base64,binary}. 
1142         * base64.c (base64_reader_cb): Fixed non-autodetection mode.
1143
1144 2001-12-04  Werner Koch  <wk@gnupg.org>
1145
1146         * call-agent.c (read_from_agent): Check for inquire responses.
1147         (request_reply): Handle them using a new callback arg, changed all
1148         callers.
1149         (gpgsm_agent_pkdecrypt): New.
1150
1151 2001-11-27  Werner Koch  <wk@gnupg.org>
1152
1153         * base64.c: New.  Changed all other functions to use this instead
1154         of direct creation of ksba_reader/writer.
1155         * gpgsm.c (main): Set ctrl.auto_encoding unless --no-armor is used.
1156
1157 2001-11-26  Werner Koch  <wk@gnupg.org>
1158
1159         * gpgsm.c: New option --agent-program
1160         * call-agent.c (start_agent): Allow to override the default path
1161         to the agent.
1162
1163         * keydb.c (keydb_add_resource): Create keybox
1164
1165         * keylist.c (gpgsm_list_keys): Fixed non-server keylisting.
1166
1167         * server.c (rc_to_assuan_status): New.  Use it for all commands.
1168
1169         
1170  Copyright 2001, 2002, 2003 Free Software Foundation, Inc.
1171
1172  This file is free software; as a special exception the author gives
1173  unlimited permission to copy and/or distribute it, with or without
1174  modifications, as long as this notice is preserved.
1175
1176  This file is distributed in the hope that it will be useful, but
1177  WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
1178  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.