7c8c0ba728b64ed1dbe62809dd63e6d057365bf7
[gnupg.git] / common / ChangeLog
1 2006-09-04  Werner Koch  <wk@g10code.com>
2
3         * http.c (http_get_header): New.
4         (capitalize_header_name, store_header): New.
5         (parse_response): Store headers away.
6         * http.h: New flag HTTP_FLAG_NEED_HEADER.
7
8 2006-08-21  Werner Koch  <wk@g10code.com>
9
10         * Makefile.am (libcommon_a_SOURCES): Added keyserver.h
11
12         * openpgpdefs.h: New.  Stripped from ..g10/packet.h.
13
14 2006-08-16  Werner Koch  <wk@g10code.com>
15
16         * keyserver.h: Moved from ../include to here.
17
18         * http.c: Include srv.h.
19
20         * srv.c, srv.h: New. Taken from GnuPG 1.4
21
22 2006-08-14  Werner Koch  <wk@g10code.com>
23
24         * http.h (struct http_context_s): Moved to implementation.
25         * http.c (http_open): Changed call to return a context.
26         (http_open_document): Ditto.
27         (http_get_read_ptr, http_get_read_ptr, http_get_status_code): New.
28         (do_parse_uri): Replaced strlwr by straight code to ease
29         standalone use of this file.
30         (http_wait_response): Removed arg STATUS_CODE as it is available
31         through an accessor function. Adjusted caller.
32         (http_escape_string): New.
33
34         * estream.c (es_read_line): Renamed to ..
35         (doreadline): .. this.  Changed all callers.
36         (es_read_line): New.  This is theusual limited getline variabnt as
37         used at several places.  Here taken and adjusted from xreadline.c
38         (es_free): New.
39
40 2006-08-11  Werner Koch  <wk@g10code.com>
41
42         * http.c: Major internal changes to optionallly support GNUTLS and
43         ESTREAM.
44         (http_open): Move initialization of the stream ...
45         (send_request): .. here.
46         (http_register_tls_callback): New.
47
48         * estream.c (es_writen): Try to seek only is a seek function has
49         been registered.
50
51 2006-08-09  Werner Koch  <wk@g10code.com>
52
53         * http.c, http.h: New.  Taken from gnupg 1.4.5, merged with
54         changes done for the Dirmngr project (by g10 Code) and cleaned up
55         some stuff.
56         (make_header_line): New. Change all caller to make user of the new
57         * Makefile.am (libcommon_a_SOURCES): Added http.c and http.h.
58
59 2006-05-23  Werner Koch  <wk@g10code.com>
60
61         * gettime.c (isotimestamp): New.
62
63         * ttyio.c (tty_get_ttyname): Posixly correct usage of ctermid.
64
65         * dns-cert.c: New.  Taken from 1.4.3's util/cert.c.
66         * dns-cert.h: New.
67
68 2006-05-22  Werner Koch  <wk@g10code.com>
69
70         * pka.c: New. Taked from 1.4.3.
71         * pka.h: New.
72         * Makefile.am: Added pka.
73
74 2006-05-19  Werner Koch  <wk@g10code.com>
75
76         * yesno.c (answer_is_yes_no_default, answer_is_yes_no_quit):
77         Updated from 1.4.3.
78         (answer_is_okay_cancel): new.  From 1.4.3.
79
80         * miscellaneous.c (match_multistr): New.  Taken from 1.4.3.
81
82         * ttyio.c (tty_enable_completion, tty_disable_completion): New
83         dummy functions.
84         * ttyio.h: Add prototypes and stubs.
85
86 2006-04-19  Werner Koch  <wk@g10code.com>
87
88         * iobuf.c (iobuf_get_fd): New.  Taken from 1.4.3.
89         (iobuf_is_pipe_filename): New.
90         (pop_filter): Made static.
91         (iobuf_skip_rest): New.  Orginal patch by Florian
92         Weimer.  Added new argument PARTIAL.
93         (block_filter): Remove the old gpg indeterminate length mode.
94         (block_filter): Properly handle a partial body stream
95         that ends with a 5-byte length that happens to be zero.
96         (iobuf_set_block_mode, iobuf_in_block_mode): Removed as
97         superfluous.
98         (iobuf_get_filelength): New arg OVERFLOW.
99         (iobuf_get_filelength) [W32]: Use GetFileSizeEx if available
100         * miscellaneous.c (is_file_compressed): Take care of OVERFLOW.
101
102 2006-04-18  Werner Koch  <wk@g10code.com>
103
104         * homedir.c (w32_shgetfolderpath): New.  Taken from gpg 1.4.3.
105         (default_homedir): Use it.
106
107 2005-10-08  Marcus Brinkmann  <marcus@g10code.de>
108
109         * signal.c (get_signal_name): Check value of HAVE_DECL_SYS_SIGLIST
110         instead of just if it is defined.
111
112 2005-09-28  Marcus Brinkmann  <marcus@g10code.de>
113
114         * Makefile.am (AM_CFLAGS): Add $(LIBASSUAN_CFLAGS).
115
116 2005-07-04  Marcus Brinkmann  <marcus@g10code.de>
117
118         * simple-pwquery.h (simple_pwclear): New prototype.
119         * simple-pwquery.c (simple_pwclear): New function.
120
121 2005-06-15  Werner Koch  <wk@g10code.com>
122
123         * miscellaneous.c (make_printable_string): Made P a void*.
124
125         * sexputil.c (keygrip_from_canon_sexp, cmp_simple_canon_sexp):
126         Fixed signed/unsigned pointer mismatch.
127         (make_simple_sexp_from_hexstr): Ditto.  This is all too ugly; I
128         wonder why gcc-4's default is to warn about them and forcing us to
129         use cast the warning away.
130         * iobuf.c (block_filter): Ditto.
131         (iobuf_flush): Ditto.
132         (iobuf_read_line): Ditto.
133         (iobuf_read): Make BUFFER a void *.
134         (iobuf_write): Make BUFFER a const void *.
135         * ttyio.c (tty_print_utf8_string2): Ditto.
136         * estream.c (estream_cookie_mem): Make MEMORY unsigned char*.
137         (es_write): Make BUFFER a void *.
138         (es_writen): Ditto.
139         (es_func_fd_read, es_func_fd_write, es_func_mem_read) 
140         (es_func_mem_write): Ditto.
141         (es_read, es_readn): Ditto.
142         (es_func_mem_write): Made MEMORY_NEW an unsigned char *.
143         * estream.h (es_cookie_read_function_t)
144         (es_cookie_write_function_t): Changed buffer arg to void*.
145
146 2005-06-03  Werner Koch  <wk@g10code.com>
147
148         * estream.c: Use HAVE_CONFIG_H and not USE_CONFIG_H!
149         (es_func_fd_read, es_func_fd_write): Protect against EINTR.
150         
151 2005-06-01  Werner Koch  <wk@g10code.com>
152
153         * Makefile.am (AM_CPPFLAGS): Added.
154
155         * util.h: Add some includes for gnulib.
156         (ttyname, isascii): Define them inline.
157         * fseeko.c, ftello.c: Removed.
158         * strsep.c, mkdtemp.c: Removed.
159         * ttyname.c, isascii.c: Removed.
160
161 2005-05-31  Werner Koch  <wk@g10code.com>
162
163         * dynload.h: s/__inline__/inline/.
164
165 2005-05-13  Werner Koch  <wk@g10code.com>
166
167         * signal.c (got_fatal_signal): Print the signal number if we can't
168         get a name for it.
169         (get_signal_name): Return NULL if no name is available. Fixed
170         conditional for sys_siglist to the correct one.
171
172 2005-04-17  Werner Koch  <wk@g10code.com>
173
174         * sexputil.c (cmp_simple_canon_sexp): New.
175         (make_simple_sexp_from_hexstr): New.
176
177 2005-04-07  Werner Koch  <wk@g10code.com>
178
179         * sexputil.c: New.
180
181 2005-04-11  Marcus Brinkmann  <marcus@g10code.de>
182
183         * simple-pwquery.c (simple_pwquery): Use spwq_secure_free.
184
185 2005-03-03  Werner Koch  <wk@g10code.com>
186
187         * Makefile.am (AM_CFLAGS): Added PTH_CFLAGS.  Noted by Kazu Yamamoto.
188
189 2005-02-25  Werner Koch  <wk@g10code.com>
190
191         * xasprintf.c (xtryasprintf): New.
192
193 2005-01-26  Moritz Schulte  <moritz@g10code.com>
194
195         * Makefile.am (libcommon_a_SOURCES): New source files: estream.c,
196         estream.h.
197         * estream.c, estream.h: New files.
198
199 2005-01-03  Werner Koch  <wk@g10code.com>
200
201         * asshelp.c (send_pinentry_environment): Fixed changed from
202         2004-12-18; cut+paste error for lc-messages.
203
204 2004-12-21  Werner Koch  <wk@g10code.com>
205
206         * simple-pwquery.c (agent_open) [W32]: Implement for W32.
207         (readline) [W32]: Use recv instead of read.
208         (writen) [W32]: Use send instead of write.
209         (my_stpcpy): Define a stpcpy replacement so that this file
210         continues to be self-contained.
211         (agent_send_all_options) [W32]: Don't call ttyname.
212
213 2004-12-21  Marcus Brinkmann  <marcus@g10code.de>
214
215         * simple-pwquery.h (simple_query): Add prototype.
216         * simple-pwquery.c (simple_query): New function.
217
218 2004-12-21  Werner Koch  <wk@g10code.com>
219
220         * signal.c (got_fatal_signal, got_usr_signal)
221         (got_fatal_signal) [DOSISH]: Don't build.
222         * simple-gettext.c: Include sysutils.h 
223
224         * homedir.c: New. Use CSIDL_APPDATA for W32 as the default home
225         directory.
226         * Makefile.am (libcommon_a_SOURCES): Add it.
227         (EXTRA_DIST): Removed mkerror and mkerrtok.
228
229 2004-12-20  Werner Koch  <wk@g10code.com>
230
231         * sysutils.h [W32]: Define sleep.
232         * util.h: Add prototype for mkdtemp.
233
234         * membuf.c (put_membuf): Wipe out buffer after a failed realloc.
235
236 2004-12-19  Werner Koch  <wk@g10code.com>
237
238         * maperror.c (map_assuan_err_with_source): Oops, args were swapped.
239
240 2004-12-18  Werner Koch  <wk@g10code.com>
241
242         * maperror.c (map_assuan_err): Renamed to ..
243         (map_assuan_err_with_source): .. this and add arg SOURCE.c
244         * asshelp.c (send_pinentry_environment, send_one_option): Add arg
245         ERRSOURCE.
246
247 2004-12-15  Werner Koch  <wk@g10code.com>
248
249         * sysutils.h [W32]: Prototypes for registry functions.
250         * w32reg.c: Include sysutils.h
251
252         * simple-pwquery.c [W32]: Dummy code to allow a build.
253
254         * exechelp.c [W32]: Implemented for W32 .
255
256         * ttyname.c: New.
257
258         * asshelp.c (send_one_option): New.
259         (send_pinentry_environment): Cleaned up and made sure that empty
260         values are not send.
261
262 2004-12-07  Werner Koch  <wk@g10code.com>
263
264         * asshelp.c (send_pinentry_environment) [W32]: Do not use ttyname.
265
266 2004-12-06  Werner Koch  <wk@g10code.com>
267
268         * exechelp.h, exechelp.c: New.  Based on code from ../sm/import.c.
269
270 2004-12-03  Werner Koch  <wk@g10code.com>
271
272         * strsep.c: Fixed copyright comments.
273
274 2004-11-26  Werner Koch  <wk@g10code.com>
275
276         * simple-gettext.c: New taken from gnupg 1.3.x
277
278         * simple-pwquery.c [_WIN32]: Include winsock2.h.
279         (agent_open): Disable it until we have our AF_UNIX implementation
280         ready.
281         * fseeko.c, ftello.c: Include sys/types for the sake of W32.
282
283 2004-11-23  Werner Koch  <wk@g10code.com>
284
285         * b64enc.c: Include stdio.h and string.h
286
287 2004-08-18  Werner Koch  <wk@g10code.de>
288
289         * simple-pwquery.c (simple_pwquery): Handle gpg-error style return
290         code for canceled.
291
292 2004-07-20  Werner Koch  <wk@g10code.de>
293
294         * maperror.c: Removed header ksba.h.  Not required anymore.
295
296 2004-06-14  Werner Koch  <wk@gnupg.org>
297
298         * xreadline.c: New.  Based on the iobuf_read_line function.
299
300 2004-05-12  Werner Koch  <wk@gnupg.org>
301
302         * util.h (xtrycalloc_secure,xtrymalloc_secure): New.
303
304 2004-05-11  Werner Koch  <wk@gnupg.org>
305
306         * sysutils.c (disable_core_dumps): Only set the current limit.
307         (enable_core_dumps): New.
308
309 2004-04-13  Werner Koch  <wk@gnupg.org>
310
311         * simple-pwquery.c (copy_and_escape): Relaxed quoting.
312
313 2004-04-05  Werner Koch  <wk@gnupg.org>
314
315         * errors.h (STATUS_NEWSIG): New.
316
317 2004-03-11  Werner Koch  <wk@gnupg.org>
318
319         * dynload.h [__MINGW32__]: Define RTLD_LAZY.
320
321 2004-03-09  Werner Koch  <wk@gnupg.org>
322
323         * maperror.c (map_assuan_err): Map the Locale_Problem item.
324
325 2004-03-03  Werner Koch  <wk@gnupg.org>
326
327         * asshelp.c, asshelp.h: New.
328         (send_pinentry_environment): New. Code taken from ../sm/call-agent.c.
329
330 2004-02-19  Werner Koch  <wk@gnupg.org>
331
332         * simple-pwquery.c (agent_open): Don't mangle INFOSTR.
333
334 2004-02-17  Werner Koch  <wk@gnupg.org>
335
336         * simple-pwquery.c (agent_open): Ignore an empty GPG_AGENT_INFO.
337
338         * errors.h: Added STATUS_IMPORT_OK.
339
340 2004-02-10  Werner Koch  <wk@gnupg.org>
341
342         * b64enc.c: New.  Based on code from ../sm/base64.c.
343
344 2004-01-30  Marcus Brinkmann  <marcus@g10code.de>
345
346         * Makefile.am (libcommon_a_SOURCES): Add xasprintf.c.
347         * miscellaneous.c (xasprintf): Moved to ...
348         * xasprintf (xasprintf): ... here.  New file.
349         This allows to use xasprintf without sucking in gpg-error.
350
351 2004-01-27  Werner Koch  <wk@gnupg.org>
352
353         * sexp-parse.h: New; moved from../agent.
354
355         * util.h (xtoi_4): New.
356
357 2003-12-23  Werner Koch  <wk@gnupg.org>
358
359         * maperror.c (map_assuan_err): Prepared for a new error code.
360
361 2003-12-17  Werner Koch  <wk@gnupg.org>
362
363         * gettime.c (asctimestamp): Add a note on a non-avoidable gcc warning.
364
365         * util.h [!HAVE_VASPRINTF]: Add printf format attribute to the
366         replacement function.
367
368         * miscellaneous.c (xasprintf): New.
369
370 2003-11-14  Werner Koch  <wk@gnupg.org>
371
372         * mkdtemp.c (mkdtemp): Use gcry_create_nonce.
373
374         * cryptmiss.c: Removed.
375
376 2003-11-13  Werner Koch  <wk@gnupg.org>
377
378         * util.h (vasprintf): Also fixed the prototype.
379
380         * vasprintf.c (vasprintf): ARGS should not be a pointer.  Fixed
381         segv on Solaris.  Reported by Andrew J. Schorr.
382
383 2003-11-12  Werner Koch  <wk@gnupg.org>
384
385         * maperror.c (map_ksba_err, map_gcry_err, map_kbx_err): Removed.
386
387 2003-10-31  Werner Koch  <wk@gnupg.org>
388
389         * util.h (gnupg_isotime_t): New.
390         (gnupg_copy_time): New.
391
392         * gettime.c (gnupg_get_isotime): New.
393
394 2003-09-23  Werner Koch  <wk@gnupg.org>
395
396         * iobuf.c (check_special_filename): Replaced is isdigit by digitp
397         to avoid passing negative values and potential locale problems.
398         Problem noted by Christian Biere.
399
400         * util.h (ascii_isspace): New.
401
402 2003-09-18  Werner Koch  <wk@gnupg.org>
403
404         * ttyio.c (tty_fprintf): New.
405         (tty_print_string, tty_print_utf8_string2)
406         (tty_print_utf8_string): Made P argument const byte*.
407
408 2003-08-20  Marcus Brinkmann  <marcus@g10code.de>
409
410         * maperror.c (map_ksba_err): Map -1.  Use gpg_err_make to set
411         the error source.
412
413 2003-08-14  Timo Schulz  <twoaday@freakmail.de>
414
415         * dynload.h. New. W32 wrapper around the dynload mechanism.
416         
417 2003-07-15  Werner Koch  <wk@gnupg.org>
418
419         * simple-pwquery.c, simple-pwquery.h:  New; moved from ../agent.  
420         * Makefile.am (libsimple_pwquery_a_LIBADD): New.
421
422 2003-06-25  Werner Koch  <wk@gnupg.org>
423
424         * maperror.c (map_to_assuan_status): Directly map 0 to 0.
425
426 2003-06-17  Werner Koch  <wk@gnupg.org>
427
428         * gettime.c (scan_isodatestr,add_days_to_timestamp,strtimevalue)
429         (strtimestamp,asctimestamp): New.  Code taken from gnupg 1.3.2
430         mischelp.c.
431
432         * yesno.c: New.  Code taken from gnupg 1.3.2 mischelp.c
433
434         * miscellaneous.c: New.
435
436         * util.h: Include utf8conf.h
437
438 2003-06-16  Werner Koch  <wk@gnupg.org>
439
440         * gettime.c (make_timestamp): New.
441
442         * ttyio.c: New. Taken from gnupg 1.2.
443         * ttyio.h: Move from ../include.
444
445 2003-06-13  Werner Koch  <wk@gnupg.org>
446
447         * util.h (seterr): Removed macro.
448         (xmalloc_secure,xcalloc_secure): New.
449
450 2003-06-11  Werner Koch  <wk@gnupg.org>
451
452         * iobuf.c (iobuf_writebyte,iobuf_write): Return error code from
453         iobuf_flush.
454         (iobuf_writestr): Ditto.
455
456 2003-06-10  Werner Koch  <wk@gnupg.org>
457
458         * iobuf.c, iobuf.h: New. Taken from current gnupg 1.3 CVS.  Run
459         indent on it and adjusted error handling to libgpg-error style.
460         Replaced IOBUF by iobuf_t. Renamed malloc functions.
461
462 2003-06-04  Werner Koch  <wk@gnupg.org>
463
464         * errors.h: Removed all error codes.  We keep the status codes for
465         now.
466         * Makefile.am: Do not create errors.c anymore; remove it from the
467         sources.
468
469         * maperror.c: Don't include error.h.  Change all error codes to
470         libgpg-error style.
471         (map_assuan_err): Changed to new Assuan error code convention.
472         (map_to_assuan_status): Likewise.
473         (map_gcry_err,map_kbx_err): Not needed.  For now dummy functions.
474
475         * membuf.c, membuf.h: New.  Code taken from ../sm/call-agent.h.
476         * Makefile.am: Added above.
477
478 2003-04-29  Werner Koch  <wk@gnupg.org>
479
480         * util.h (fopencokokie): Removed prototype and struct.
481
482         * fopencookie.c: Removed.
483
484         * maperror.c: Use system assuan.h
485
486 2002-10-31  Neal H. Walfield  <neal@g10code.de>
487
488         * isascii.c: New file.
489         * putc_unlocked.c: Likewise.
490
491 2002-10-28  Neal H. Walfield  <neal@g10code.de>
492
493         * signal.c (caught_fatal_sig): Remove superfluous zero
494         initializer.
495         (caught_sigusr1): Likewise.
496
497 2002-09-04  Neal H. Walfield  <neal@g10code.de>
498
499         * vasprintf.c (vasprintf) [va_copy]: Use va_copy.
500         [!va_copy && __va_copy]: Use __va_copy.
501         [!va_copy && !__va_copy]: Only now fall back to using memcpy.
502
503 2002-08-21  Werner Koch  <wk@gnupg.org>
504
505         * errors.h: Added STATUS_IMPORT_PROBLEM.
506
507 2002-08-20  Werner Koch  <wk@gnupg.org>
508
509         * vasprintf.c: Hack to handle NULL for %s.
510
511 2002-08-09  Werner Koch  <wk@gnupg.org>
512
513         * signal.c: New. Taken from GnuPG 1.1.91.
514
515 2002-07-23  Werner Koch  <wk@gnupg.org>
516
517         * util.h (_IO_cookie_io_functions_t): Fixed typo.  Noted by
518         Richard Lefebvre.
519
520 2002-07-22  Werner Koch  <wk@gnupg.org>
521
522         * fseeko.c, ftello.c: New.
523
524 2002-06-28  Werner Koch  <wk@gnupg.org>
525
526         * maperror.c (map_to_assuan_status): Map more errorcodes to Bad
527         Certificate.
528
529 2002-06-26  Werner Koch  <wk@gnupg.org>
530
531         * maperror.c (map_to_assuan_status): Map EOF to No_Data_Available.
532
533 2002-06-10  Werner Koch  <wk@gnupg.org>
534
535         * errors.h (gnupg_error_token): Add new prototype.
536         (STATUS_ERROR): New.
537
538         * mkerrtok: New.
539         * Makefile.am: Use it to create the new error token function.
540
541 2002-06-04  Werner Koch  <wk@gnupg.org>
542
543         * maperror.c (map_to_assuan_status): Map Bad_CA_Certificate.
544
545 2002-05-23  Werner Koch  <wk@gnupg.org>
546
547         * no-pth.c, Makefile.am: Removed.
548
549 2002-05-22  Werner Koch  <wk@gnupg.org>
550
551         * mkdtemp.c: Replaced byte by unsigned char because it is no longer
552         defined in gcrypt.h.
553
554 2002-05-21  Werner Koch  <wk@gnupg.org>
555
556         * maperror.c (map_gcry_err): Add libgcrypt's new S-expression errors.
557         (map_ksba_err): Add a few mappings.
558
559 2002-05-14  Werner Koch  <wk@gnupg.org>
560
561         * gettime.c: New.
562
563 2002-05-03  Werner Koch  <wk@gnupg.org>
564
565         * errors.h: Added STARUS_EXPSIG and STATUS_EXPKEYSIG.
566
567 2002-04-15  Werner Koch  <wk@gnupg.org>
568
569         * cryptmiss.c: New.
570
571 2002-02-14  Werner Koch  <wk@gnupg.org>
572
573         * maperror.c: Add more assuan<->gnupg mappings.
574
575 2002-02-12  Werner Koch  <wk@gnupg.org>
576
577         * fopencookie.c: Dummy function.
578
579         * vasprintf.c: New.  Taken from binutils-2.9.1 and dropped all non
580         ANSI-C stuff.  Merged with asprintf version.
581
582         * no-pth.c: New.
583
584 2002-01-23  Werner Koch  <wk@gnupg.org>
585
586         * mkdtemp.c: Copied from gnupg-1.0.6c and changed to use libgcrypt.
587
588 2002-01-19  Werner Koch  <wk@gnupg.org>
589
590         * sysutils.c: New.  This is the misc.c file from gnupg 1.0.6 with
591         the OpenPGP stuff removed.
592         * sysutils.h: New.
593         
594 2002-01-15  Werner Koch  <wk@gnupg.org>
595
596         * maperror.c: Add mapping for Not_Trusted. 
597
598 2002-01-11  Werner Koch  <wk@gnupg.org>
599
600         * maperror.c (map_assuan_err): Codes for CRL
601
602 2002-01-08  Werner Koch  <wk@gnupg.org>
603
604         * util.h (spacep): New.
605
606 2002-01-02  Werner Koch  <wk@gnupg.org>
607
608         * maperror.c (map_to_assuan_status): New.  Merged from ../agent
609         and ../sm.
610
611 2001-12-20  Werner Koch  <wk@gnupg.org>
612
613         * maperror.c (map_gcry_err): Add some mappings.
614
615 2001-12-18  Werner Koch  <wk@gnupg.org>
616
617         * Makefile.am (AM_CPPFLAGS): Include flags for gcrypt and ksba
618
619 2001-12-14  Werner Koch  <wk@gnupg.org>
620
621         * util.h (digitp, hexdigitp): New ctype like macros.
622         (atoi_1,atoi_2,atoi_4,xtoi_1,xtoi_2): New.
623         
624         
625  Copyright 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
626
627  This file is free software; as a special exception the author gives
628  unlimited permission to copy and/or distribute it, with or without
629  modifications, as long as this notice is preserved.
630
631  This file is distributed in the hope that it will be useful, but
632  WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
633  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
634                 
635