2001-12-13 Marcus Brinkmann <marcus@g10code.de>
[gpgme.git] / gpgme / ChangeLog
1 2001-12-13  Marcus Brinkmann  <marcus@g10code.de>
2
3         * rungpg.c (_gpgme_gpg_spawn): Do not add the fds to the child
4         list that are not dup'ed, for those the close-on-exec flag is set
5         now.
6         * version.c (_gpgme_get_program_version): Remove first entry in
7         CFD, as the close-on-exec flag is now set for this fd.
8
9 2001-12-13  Marcus Brinkmann  <marcus@g10code.de>
10
11         * engine-gpgsm.c (_gpgme_gpgsm_op_encrypt): Do not add `armor'
12         option to `ENCRYPT'.
13         * engine-gpgsm.c (gpgsm_set_recipients): Free LINE when returning
14         successfully.
15
16 2001-12-13  Marcus Brinkmann  <marcus@g10code.de>
17
18         * engine-gpgsm.c (close_notify_handler): New function.
19         (_gpgme_gpgsm_new): Manage the file descriptors a
20         bit differently.  Do not set close-on-exec flags.
21         (_gpgme_gpgsm_op_decrypt): Do not set message_fd
22         to -1, this is done by the close handler.
23         (_gpgme_gpgsm_op_encrypt): Likewise.
24         (_gpgme_gpgsm_op_import): Likewise (also for output_fd).
25         (_gpgme_gpgsm_op_keylist): Likewise (also for input_fd and output_fd).
26         (_gpgme_gpgsm_op_sign): Likewise.
27         (_gpgme_gpgsm_op_verify): Likewise, but for output_fd.
28
29         * posix-io.c (_gpgme_io_pipe): Set the close-on-exec flag for the
30         non-inherited file descriptor index of the pipe.
31
32 2001-12-13  Werner Koch  <wk@gnupg.org>
33
34         * engine-gpgsm.c (_gpgme_gpgsm_set_colon_line_handler): New.
35         (gpgsm_status_handler): Pass datalines to a colon handler
36         * engine.c (_gpgme_engine_set_colon_line_handler): Set the colon
37         handler for gpgsm.
38
39         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist): Allow NULL for
40         pattern.
41         (gpgsm_assuan_simple_command): Removed underscore from
42         assuan_write_line.
43         (_gpgme_gpgsm_start): Ditto.
44         (gpgsm_assuan_simple_command): Replaced interal Assuan read
45         function by the new assuan_read_line.  Removed the use of the
46         internal header.
47         (gpgsm_status_handler): Ditto. Use the new assuan_pending_line.
48         (_gpgme_gpgsm_start): Use the documented way to get an fd from
49         assuan.
50
51         * keylist.c (keylist_colon_handler): Handle "crt" records
52         * key.h (gpgme_key_s): Add an x509 flag.
53         * key.c (parse_x509_user_id): New.
54         (_gpgme_key_append_name): Handle x.509 names.
55
56 2001-12-05  Marcus Brinkmann  <marcus@g10code.de>
57
58         * engine-gpgsm.c (gpgsm_status_handler): Make it work with current
59         version of assuan.
60
61 2001-12-05  Marcus Brinkmann  <marcus@g10code.de>
62
63         * engine-gpgsm.c (gpgsm_set_fd): Accept one more argument OPT.
64         (_gpgme_gpgsm_op_encrypt): Pass armor argument to gpgsm_set_fd for
65         output descriptor.
66         (_gpgme_gpgsm_op_sign): Likewise.
67
68 2001-12-05  Marcus Brinkmann  <marcus@g10code.de>
69
70         * keylist.c (gpgme_op_keylist_next): Set pending to 0 if EOF
71         occurs.
72
73 2001-11-26  Marcus Brinkmann  <marcus@g10code.de>
74
75         * engine-gpgsm.c (_gpgme_gpgsm_op_sign): Fix stupid typo.
76
77 2001-11-24  Marcus Brinkmann  <marcus@g10code.de>
78
79         * engine-gpgsm.c (gpgsm_status_handler): Don't break if bsearch fails.
80         Deal with assuan read line returning more than one line (for now).
81
82 2001-11-23  Marcus Brinkmann  <marcus@g10code.de>
83
84         * engine-gpgsm.c (_gpgme_gpgsm_op_sign): Implement it according to
85         the current protocol definition.
86
87 2001-11-23  Marcus Brinkmann  <marcus@g10code.de>
88
89         * engine-gpgsm.c (_gpgme_gpgsm_new): Set CLOEXEC flag for parent
90         ends of the pipe.
91
92 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
93
94         * engine-gpgsm.c: Include stdlib.h and string.h.  Also include,
95         for now, rungpg.h and status-table.h.
96         (gpgsm_status_handler): Implement more of the status handler.
97
98 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
99
100         * engine.c (_gpgme_engine_op_decrypt): Implement CMS case.
101         (_gpgme_engine_op_delete): Likewise.
102         (_gpgme_engine_op_encrypt): Likewise.
103         (_gpgme_engine_op_export): Likewise.
104         (_gpgme_engine_op_genkey): Likewise.
105         (_gpgme_engine_op_keylist): Likewise.
106         (_gpgme_engine_op_sign): Likewise.
107         (_gpgme_engine_op_trustlist): Likewise.
108
109         * engine-gpgsm.c (_gpgme_gpgsm_op_encrypt): New function.
110         (gpgsm_assuan_simple_command): Likewise.
111         (gpgsm_set_recipients): Likewise.
112         (gpgsm_set_fd): Reimplement using gpgsm_assuan_simple_command.
113         (_gpgme_gpgsm_op_delete): New function.
114         (_gpgme_gpgsm_op_export): Likewise.
115         (_gpgme_gpgsm_op_genkey): Likewise.
116         (_gpgme_gpgsm_op_sign): Likewise.
117         (_gpgme_gpgsm_op_keylist): Likewise.
118         (_gpgme_gpgsm_op_trustlist): Likewise.
119         (_gpgme_gpgsm_release): Release command.
120         (_gpgme_gpgsm_op_decrypt): Allocate command.
121         (_gpgme_gpgsm_op_import): Likewise.
122         (gpgsm_status_handler): Also treat `ERR' strings as EOF.
123
124 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
125
126         * gpgme.h (gpgme_set_protocol): New prototype.
127
128 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
129
130         * engine-gpgsm.c (_gpgme_gpgsm_op_decrypt): New function.
131         (_gpgme_gpgsm_op_import): Likewise.
132
133 2001-11-22  Marcus Brinkmann  <marcus@gnu.org>
134
135         * engine-gpgsm.c: Shuffle around header inclusion a bit, to still
136         keep them seperate.
137         (_gpgme_set_status_handler) [!ENABLE_GPGSM]: New function.
138
139 2001-11-22  Werner Koch  <wk@gnupg.org>
140
141         * engine-gpgsm.c: Include more headers so that NULL and mk_error
142         is defined even with an undefined GPGSM_PATH.
143
144 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
145
146         * rungpg.c (gpg_inbound_handler, write_mem_data, write_cb_data,
147         gpg_outbound_handler): Moved to ...
148         * data.c (_gpgme_data_inbound_handler, write_mem_data,
149         write_cb_data, _gpgme_data_outbound_handler): ... here.  Make the
150         _gpgme_* ones non-static.
151         * data.c: Include io.h.
152
153         * ops.h (_gpgme_data_inbound_handler): New prototype.
154         (_gpgme_data_outbound_handler): Likewise.
155         (_gpgme_gpg_spawn): Use these new functions.
156
157         * engine-gpgsm.h (_gpgme_gpgsm_op_decrypt, _gpgme_gpgsm_op_delete,
158         _gpgme_gpgsm_op_encrypt, _gpgme_gpgsm_op_export,
159         _gpgme_gpgsm_op_genkey, _gpgme_gpgsm_op_import,
160         _gpgme_gpgsm_op_keylist, _gpgme_gpgsm_op_sign,
161         _gpgme_gpgsm_op_trustlist, _gpgme_gpgsm_op_verify,
162         _gpgme_gpgsm_start, _gpgme_gpgsm_set_status_handler): New prototype.
163         Include <rungpg.h> for status handler function.
164
165         * engine-gpgsm.c (struct gpgsm_object_s): New members input_fd,
166         input_data, output_fd, output_data, message_fd, message_data, command
167         and status.
168         (_gpgme_gpgsm_new): Open input, output and message pipes before
169         connecting to the client.  Close server's ends afterwards.
170         (_gpgme_gpgsm_release): Close open file descriptors.  Remove
171         server process from wait queue.
172         (_gpgme_gpgsm_op_verify, _gpgme_gpgsm_start,
173         _gpgme_gpgsm_set_status_handler, gpgms_status_handler): New function.
174         
175         * engine.c (_gpgme_engine_start): Implement for GPGME_PROTOCOL_CMS.
176         (_gpgme_engine_set_status_handler): Likewise.
177         (_gpgme_engine_op_verify): Likewise.
178
179 2001-11-21  Marcus Brinkmann  <marcus@g10code.de>
180
181         * context.h: Do not include rungpg.h, but engine.h.
182         (struct gpgme_context_s): Replace member gpg with engine.
183         * gpgme.c (gpgme_release): Release engine, not gpg.
184
185         * recipient.c (_gpgme_append_gpg_args_from_recifgpients): Function
186         moved ...
187         * rungpg.c (_gpgme_append_gpg_args_from_recipients): ... here.
188         Make static, change order of arguments, and return an error value.
189         * ops.h (_gpgme_append_gpg_args_from_recipients): Removed prototype.
190
191         * rungpg.h (_gpgme_gpg_op_verify): Add prototype.
192         (_gpgme_gpg_op_encrypt): Likewise.
193         (_gpgme_gpg_op_decrypt): Likewise.
194         (_gpgme_gpg_op_delete): Likewise.
195         (_gpgme_gpg_op_export): Likewise.
196         (_gpgme_gpg_op_genkey): Likewise.
197         (_gpgme_gpg_op_import): Likewise.
198         (_gpgme_gpg_op_keylist): Likewise.
199         (_gpgme_gpg_op_sign): Likewise.
200         (_gpgme_gpg_op_trustlist): Likewise.
201         * rungpg.c (_gpgme_gpg_op_verify): New function.
202         (_gpgme_gpg_op_encrypt): Likewise.
203         (_gpgme_gpg_op_decrypt): Likewise.
204         (_gpgme_gpg_op_delete): Likewise.
205         (_gpgme_gpg_op_export): Likewise.
206         (_gpgme_gpg_op_genkey): Likewise.
207         (_gpgme_gpg_op_import): Likewise.
208         (_gpgme_gpg_op_keylist): Likewise.
209         (_gpgme_gpg_op_sign): Likewise.
210         (_gpgme_gpg_op_trustlist): Likewise.
211
212         * engine.h (_gpgme_engine_set_status_handler): Add prototype.
213         (_gpgme_engine_set_command_handler): Likewise.
214         (_gpgme_engine_set_colon_line_handler): Likewise.
215         (_gpgme_engine_op_decrypt): Likewise.
216         (_gpgme_engine_op_delete): Likewise.
217         (_gpgme_engine_op_encrypt): Likewise.
218         (_gpgme_engine_op_export): Likewise.
219         (_gpgme_engine_op_genkey): Likewise.
220         (_gpgme_engine_op_import): Likewise.
221         (_gpgme_engine_op_keylist): Likewise.
222         (_gpgme_engine_op_sign): Likewise.
223         (_gpgme_engine_op_trustlist): Likewise.
224         (_gpgme_engine_op_verify): Likewise.
225         (_gpgme_engine_start): Likewise.
226         * engine.c (_gpgme_engine_set_status_handler): New function.
227         (_gpgme_engine_set_command_handler): Likewise.
228         (_gpgme_engine_set_colon_line_handler): Likewise.
229         (_gpgme_engine_op_decrypt): Likewise.
230         (_gpgme_engine_op_delete): Likewise.
231         (_gpgme_engine_op_encrypt): Likewise.
232         (_gpgme_engine_op_export): Likewise.
233         (_gpgme_engine_op_genkey): Likewise.
234         (_gpgme_engine_op_import): Likewise.
235         (_gpgme_engine_op_keylist): Likewise.
236         (_gpgme_engine_op_sign): Likewise.
237         (_gpgme_engine_op_trustlist): Likewise.
238         (_gpgme_engine_op_verify): Likewise.
239         (_gpgme_engine_start): Likewise.
240
241         * verify.c (gpgme_op_verify_start): Reimplement in terms of above
242         functions.
243         * encrypt.c (gpgme_op_encrypt_start): Likewise.
244         * decrypt.c (_gpgme_decrypt_start): Likewise.
245         * passphrase.c (_gpgme_passphrase_start): Likewise.
246         * keylist.c (gpgme_op_keylist_start): Likewise.
247
248 2001-11-20  Marcus Brinkmann  <marcus@g10code.de>
249
250         * types.h: Add types EngineObject and GpgsmObject.
251
252         * Makefile.am (libgpgme_la_SOURCES): Add engine-gpgsm.h,
253         engine-gpgsm.c, engine.h and engine.c.
254         * engine.h: New file.
255         * engine.c: Likewise.
256         * engine-gpgsm.h: Likewise.
257         * engine-gpgsm.c: Likewise.
258         
259         * rungpg.c (_gpgme_gpg_get_version): New function.
260         (_gpgme_gpg_check_version): Likewise.
261         * rungpg.h: Add prototypes for _gpgme_gpg_get_version and
262         _gpgme_gpg_check_version.
263
264         * version.c (compare_versions): Rename to ...
265         (_gpgme_compare_versions): ... this.  Make non-static.
266         (gpgme_check_version): Use _gpgme_compare_versions rather than
267         compare_versions.
268         (gpgme_check_engine): Likewise.
269         * ops.h (_gpgme_get_program_version): Add prototype.
270
271 2001-11-20  Marcus Brinkmann  <marcus@g10code.de>
272
273         * Makefile.am (libgpgme_la_INCLUDES): Remove obsolete directive.
274         (AM_CPPFLAGS): New directive [BUILD_ASSUAN].
275         (libgpgme_la_LIBADD): Likewise.
276
277 2001-11-20  Marcus Brinkmann  <marcus@g10code.de>
278
279         * version.c: Remove global variables lineno and
280         tmp_engine_version.
281         (version_handler): Removed.
282         (_gpgme_get_program_version): New function.
283         (get_engine_info): Don't use context and version_handler,
284         but _gpgme_get_program_version.
285         * ops.h (_gpgme_get_program_version): Add prototype for
286         _gpgme_get_program_version (we expect to use it elsewhere soon).
287
288 2001-11-18  Marcus Brinkmann  <marcus@g10code.de>
289
290         * version.c (get_engine_info): If GnuPG is not available, return
291         an error message.
292         * posix-util.c (_gpgme_get_gpg_path): Allow GPG_PATH to be
293         undefined.
294         (_gpgme_get_gpgsm_path): New function.
295         * w32-util.c (find_program_in_registry): New static function.
296         (_gpgme_get_gpg_path): Allow GPG_PATH to be undefined.  Rework
297         to use find_program_in_registry.
298         (_gpgme_get_gpgsm_path): New function.
299         (util.h): Prototype _gpgme_get_gpgsm_path).
300         * rungpg.c (_gpgme_gpg_spawn): Verify that _gpgme_get_gpg_path()
301         returns non-null.
302
303 2001-11-16  Marcus Brinkmann  <marcus@g10code.de>
304
305         * decrypt-verify.c: New file.
306         * Makefile.am (libgpgme_la_SOURCES): Add decrypt-verify.c.
307         * types.h: Add decrypt-verify types.
308         * ops.h: Likewise.
309         * context.h: Add result type for decrypt-verify.
310         * gpgme.h: Add decrypt-verify prototypes.
311
312         * decrypt.c (decrypt_status_handler): Renamed to ...
313         (_gpgme_decrypt_status_handler): ... this.  Make non-static.
314         (_gpgme_decrypt_start): New function, derived from
315         gpgme_op_decrypt_start.
316         (gpgme_op_decrypt_start): Reimplement in terms of
317         _gpgme_decrypt_start.
318         (_gpgme_decrypt_result): New function to retrieve error value.
319         (gpgme_op_decrypt): Use _gpgme_decrypt_result.
320         * ops.h: Add prototypes for new functions.
321
322         * verify.c (verify_status_handler): Renamed to ...
323         (_gpgme_verify_status_handler): ... this.  Make non-static.
324         (gpgme_op_verify_start): Use new function name.
325         (intersect_stati): Renamed to ...
326         (_gpgme_intersect_stati): ... this.  Make non-static.
327         (gpgme_op_verify): Use new name.
328         * ops.h: Add prototypes for new functions.
329
330 2001-11-16  Marcus Brinkmann  <marcus@g10code.de>
331
332         * passphrase.c: New file.
333         * Makefile.am (libgpgme_la_SOURCES): Add passphrase.c.
334         * ops.h (_gpgme_passphrase_result): Add prototypes from
335         passphrase.c.
336         * types.h: Likewise.
337         * context.h: Add member passphrase to result.
338         * gpgme.c (_gpgme_release_result): Release passphrase member.
339
340         * decrypt.c: Some formatting and variable name changes (like
341         CTX instead C).
342         (struct decrypt_result_s): Remove members now found in
343         passphrase result.
344         (_gpgme_release_decrypt_result): Don't release removed members.
345         (decrypt_status_handler): Call _gpgme_passphrase_status_handler,
346         and don't handle the cases catched there.
347         (command_handler): Removed.
348         (gpgme_op_decrypt_start): Don't set command handler, but invoke
349         _gpgme_passphrase_start which does it.
350         (gpgme_op_decrypt): Invoke _gpgme_passphrase_result and drop the
351         cases covered by it.
352
353         * sign.c Some formatting and variable name changes (like
354         CTX instead C).
355         (struct sign_result_s): Remove members now found in
356         passphrase result.
357         (_gpgme_release_sign_result): Don't release removed members.
358         (sign_status_handler): Call _gpgme_passphrase_status_handler,
359         and don't handle the cases catched there.
360         (command_handler): Removed.
361         (gpgme_op_sign_start): Don't set command handler, but invoke
362         _gpgme_passphrase_start which does it.
363         (gpgme_op_sign): Invoke _gpgme_passphrase_result and drop the
364         cases covered by it.
365
366 2001-11-15  Marcus Brinkmann  <marcus@g10code.de>
367
368         * decrypt.c (command_handler): Fix last change.
369
370 2001-11-15  Marcus Brinkmann  <marcus@g10code.de>
371
372         * verify.c (_gpgme_release_verify_result): Rename RES to RESULT.
373         Rename R2 to NEXT_RESULT.
374         (intersect_stati): Rename RES to RESULT.
375         (gpgme_get_sig_status): Likewise.  Do not check return_type, but
376         the member verify of result.
377         (gpgme_get_sig_key): Likewise.
378
379         * sign.c (_gpgme_release_sign_result): Rename RES to RESULT.  If
380         RESULT is zero, return.
381         (sign_status_handler, command_handler): Do not check return_type,
382         but the member sign of result.
383         (gpgme_op_sign): Likewise.  Drop assertion.
384
385         * encrypt.c (_gpgme_release_encrypt_result): Rename RES to RESULT.
386         If RESULT is zero, return.
387         (encrypt_status_handler): Do not check return_type, but the member
388         encrypt of result.
389         (gpgme_op_encrypt): Likewise.  Drop assertion.
390
391         * decrypt.c (_gpgme_release_decrypt_result): Rename RES to RESULT.
392         (create_result_struct): Do not set result_type.
393         (command_handler, decrypt_status_handler): Do not check
394         return_type, but the member decrypt of result.
395         (gpgme_op_decrypt): Likewise.  Drop assertion.
396
397         * context.h (enum ResultType): Removed.
398         (struct gpgme_context_s): Remove member result_type.
399         (struct result): Replaces union result.
400         * gpgme.c: Include string.h.
401         (_gpgme_release_result): Release all members of c->result, which
402         is now a struct.  Zero out all members of the struct afterwards.
403
404 2001-11-11  Marcus Brinkmann  <marcus@g10code.de>
405
406         * rungpg.c (_gpgme_gpg_release): Release GPG->cmd.cb_data.
407         Release all members of the list GPG->arglist.
408         Reported by Michael Schmidt <mschmidt@cs.uni-sb.de>.
409
410 2001-11-02  Marcus Brinkmann  <marcus@g10code.de>
411
412         * rungpg.c (pipemode_copy): Change type of NBYTES to size_t.
413
414         * key.c: Include string.h.
415         * data.c: Likewise.
416         * recipient.c: Likewise.
417
418 2001-10-29  Marcus Brinkmann  <marcus@g10code.de>
419
420         * context.h: New member signers_len.
421         * signers.c (gpgme_signers_clear): Require that signers are
422         non-NULL with assertion.  Use signers_len to determine how much
423         keys to release.  Add documentation.
424         (gpgme_signers_add): Use signers_len to determine if the buffer is
425         large enough.  Use xtryrealloc rather than xtrymalloc and copying.
426         Add documentation.
427         (gpgme_signers_enum): Use signers_len to determine if key is
428         available.  Add documentation.
429
430 2001-10-22  Marcus Brinkmann  <marcus@g10code.de>
431
432         * data.c (_gpgme_data_append): Check if LENGTH is smaller than
433         ALLOC_CHUNK, not DH->length.
434
435 2001-10-17  Marcus Brinkmann  <marcus@g10code.de>
436
437         * gpgme.c (gpgme_set_protocol): Fix last change.
438
439 2001-10-15  Werner Koch  <wk@gnupg.org>
440
441         * gpgme.h (GpgmeProtocol): New.
442         * gpgme.c (gpgme_set_protocol): New.
443
444 2001-09-26  Werner Koch  <wk@gnupg.org>
445
446         * gpgme.c (gpgme_set_passphrase_cb): Ignore a NULL context.
447         (gpgme_set_progress_cb): Ditto. Suggested by Mark Mutz.
448
449 2001-09-17  Werner Koch  <wk@gnupg.org>
450
451         * keylist.c (finish_key): Shortcut for no tmp_key.  Changed all
452         callers to use this function without a check for tmp_key.
453         
454         * keylist.c (gpgme_op_keylist_next): Reset the key_cond after
455         emptying the queue.  Bug reported by Stéphane Corthésy.
456
457 2001-09-12  Werner Koch  <wk@gnupg.org>
458
459         * data.c (gpgme_data_rewind): Allow rewind for callbacks.
460
461 2001-09-07  Werner Koch  <wk@gnupg.org>
462
463         * rungpg.h: Add NO_RECP.
464         * encrypt.c (encrypt_status_handler): Take on No_RECP.
465         (gpgme_op_encrypt): Better error return.
466
467         * verify.c (verify_status_handler): Take on NODATA.
468
469 2001-09-03  Werner Koch  <wk@gnupg.org>
470
471         * rungpg.h: Added STATUS_INV_RECP.
472         * gpgme.c (_gpgme_release_result): Add support for new
473         EncryptResult object.
474         * encrypt.c (append_xml_encinfo): New.
475         (encrypt_status_handler): Add some status parsing.
476         (_gpgme_release_encrypt_result): New.
477
478 2001-08-29  Werner Koch  <wk@gnupg.org>
479
480         * recipient.c (gpgme_recipients_release): Free the list.  By Timo.
481
482         * keylist.c (keylist_colon_handler): Do a finish key if we receive
483         an EOF here.  This is probably the reason for a lot of bugs
484         related to keylisting.  It is so obvious.  Kudos to Enno Cramer
485         for pointing that out. 
486
487 2001-08-28  Werner Koch  <wk@gnupg.org>
488
489         * gpgme.c, gpgme.h (gpgme_get_op_info): New.
490         (_gpgme_set_op_info): New. 
491         (_gpgme_release_result): Reset the op_info here.
492         * sign.c (append_xml_siginfo): New.
493         (sign_status_handler): Store the sig create information.
494
495 2001-07-31  Werner Koch  <wk@gnupg.org>
496
497         * encrypt.c (gpgme_op_encrypt): Hack to detect no valid recipients.
498
499 2001-07-30  Werner Koch  <wk@gnupg.org>
500
501         * gpgme.c (gpgme_get_armor,gpgme_get_textmode): New.
502
503         * rungpg.c (build_argv): Disable armor comments
504         * w32-io.c (build_commandline): Need to add quotes here
505
506 2001-07-24  Werner Koch  <wk@gnupg.org>
507
508         * data.c (gpgme_data_read): Add a a way to return the available bytes.
509
510 2001-07-23  Werner Koch  <wk@gnupg.org>
511
512         * util.c: Removed stpcpy() because we use the version from jnlib.
513
514 2001-07-19  Werner Koch  <wk@gnupg.org>
515
516         * mkstatus: Define the collating sequence for sort.
517
518 2001-06-26  Werner Koch  <wk@gnupg.org>
519
520         * rungpg.h: Add STATUS_UNEXPECTED as suggested by Timo.
521
522 2001-06-15  Werner Koch  <wk@gnupg.org>
523
524         * keylist.c (set_userid_flags): Fixed the assigned values. Kudos
525         to Timo for pointing this out.
526
527 2001-06-01  Werner Koch  <wk@gnupg.org>
528
529         * debug.c (_gpgme_debug_begin): Fixed a /tmp race.  Noted by
530         Johannes Poehlmann.
531
532 2001-05-28  Werner Koch  <wk@gnupg.org>
533
534         * version.c (gpgme_check_engine): Stop version number parsing at
535         the opening angle and not the closing one.  By Tommy Reynolds.
536
537 2001-05-01  José Carlos García Sogo <jose@jaimedelamo.eu.org>
538
539         * encrypt.c (gpgme_op_encrypt_start): Deleted the assert ( !c->gpg )
540         line, because it gave an error if another operation had been made 
541         before using the same context.
542         
543         * decrypt.c (gpgme_op_decrypt_start): The same as above. Also added 
544         one line to release the gpg object in the context (if any).
545         
546 2001-04-26  Werner Koch  <wk@gnupg.org>
547
548         * key.c, key.h (_gpgme_key_cache_init): New.
549         (_gpgme_key_cache_add): New.
550         (_gpgme_key_cache_get): New.
551         * version.c (do_subsystem_inits): Init the cache.
552         * keylist.c (finish_key): Put key into the cache
553         * verify.c (gpgme_get_sig_key): First look into the cache.
554
555 2001-04-19  Werner Koch  <wk@gnupg.org>
556
557         * keylist.c (parse_timestamp): Adjusted for the changed
558         --fixed-list-mode of gpg 1.0.4h.
559
560 2001-04-05  Werner Koch  <wk@gnupg.org>
561
562         * verify.c (gpgme_op_verify_start): Enabled pipemode for detached sigs.
563
564 2001-04-04  Werner Koch  <wk@gnupg.org>
565
566         * w32-io.c (_gpgme_io_select): Don't select on the writer if there
567         are still bytes pending.  Timo found this not easy to track down
568         race condition. 
569
570 2001-04-02  Werner Koch  <wk@gnupg.org>
571
572         * gpgme.h: Add GPGME_ATTR_KEY_{EXPIRED,DISABLED}.
573         * key.c (gpgme_key_get_ulong_attr): And return those attribs.
574
575         * verify.c (gpgme_get_sig_key): Set keyliosting mode depending on 
576         the mode set in the current context.  Suggested by Timo.
577
578         * key.c (gpgme_key_get_ulong_attr): Return can_certify and not
579         can_encrypt. By Timo.
580
581 2001-03-30  Werner Koch  <wk@gnupg.org>
582
583         * debug.c (debug_init): Allow to specify a debug file.
584         (_gpgme_debug_level): New.
585
586         * posix-io.c (_gpgme_io_read, _gpgme_io_write): Print output.
587         (_gpgme_io_select): Debug only with level > 2.
588
589 2001-03-15  Werner Koch  <wk@gnupg.org>
590
591         * rungpg.c: Included time.h.
592
593         * key.h: New keyflags for capabilities.
594         * keylist.c (set_mainkey_capability, set_subkey_capability): New.
595         (keylist_colon_handler): Parse them.
596         * gpgme.h: New attribute values for capabilties.
597         * key.c (gpgme_key_get_string_attr): Return them.
598         (capabilities_to_string): New.
599         (gpgme_key_get_ulong_attr): Return the global caps.
600
601 2001-03-14  Werner Koch  <wk@gnupg.org>
602
603         * w32-io.c (destroy_reader,destroy_writer): Fixed syntax error. 
604         Thanks to Jan Oliver Wagner.
605
606 2001-03-13  Werner Koch  <wk@gnupg.org>
607
608         * context.h: Add invalid and revoke flags to user_id structure.
609         * keylist.c (gpgme_op_keylist_start): Use --fixed-list-mode.
610         (keylist_colon_handler): Adjust for that.
611         (set_userid_flags): New. 
612         (set_mainkey_trust_info): Handle new key invalid flag
613         (set_subkey_trust_info): Ditto.
614         * gpgme.h: Add new attributes for key and user ID flags.
615         * key.c (_gpgme_key_append_name): Init these flags
616         (gpgme_key_get_as_xml): Print them.
617         (one_uid_as_xml): New helper for above.
618         (gpgme_key_get_string_attr, gpgme_key_get_ulong_attr):
619         Return the new attributes.  Enhanced, so that subkey information
620         can be returned now.
621
622 2001-02-28  Werner Koch  <wk@gnupg.org>
623
624         * w32-io.c (destroy_reader): Set stop_me flag.
625         (writer,create_writer,destroy_writer,find_writer,kill_writer): New.
626         (_gpgme_io_write): Use a writer thread to avaoid blocking.
627         (_gpgme_io_close): Cleanup a writer thread
628         (_gpgme_io_select): Repalce tthe faked wait on writing by a real
629         waiting which is now possible due to the use of a writer thread.
630
631 2001-02-20  Werner Koch  <wk@gnupg.org>
632
633         * w32-io.c (destroy_reader,kill_reader): New. 
634         (create_reader, reader): Add a new event to stop the thread.
635         (_gpgme_io_close): Kill the reader thread.
636
637         * posix-io.c (_gpgme_io_select): Handle frozen fds here. 
638         * 32-io.c (_gpgme_io_select): Ditto. Removed a bunch of unused code.
639
640         * wait.c: Reworked the whole thing.
641         * rungpg.c (_gpgme_gpg_new): Init pid to -1.
642         (_gpgme_gpg_release): Remove the process from the wait queue.
643
644 2001-02-19  Werner Koch  <wk@gnupg.org>
645
646         * w32-io.c (_gpgme_io_set_close_notify): New.
647         (_gpgme_io_close): Do the notification.
648
649         * posix-io.c (_gpgme_io_select): Use a 1 sec timeout and not 200
650         microseconds.
651
652         * wait.c (remove_process): Don't close the fd here.
653         (do_select): Set the fd to -1 and remove the is_closed flag everywhere.
654         (_gpgme_wait_on_condition): Remove the assert on the queue and
655         break out if we could not find the queue.  The whole thing should
656         be reworked.
657
658         * posix-io.c (_gpgme_io_set_close_notify): New.
659         (_gpgme_io_close): Do the notification.
660
661         * rungpg.c (close_notify_handler): New. 
662         (_gpgme_gpg_new): Register a callback for the fd.
663         (_gpgme_gpg_set_colon_line_handler): Ditto.
664         (build_argv): Ditto
665
666 2001-02-13  Werner Koch  <wk@gnupg.org>
667
668         * rungpg.c (struct reap_s): Replaced pid_t by int.
669
670         * types.h: Add ulong typedef.
671
672         * rungpg.c (do_reaping,_gpgme_gpg_housecleaning): New.
673         (_gpgme_gpg_release): Reap children.
674         * io.h, posix-io.c (_gpgme_io_kill): New.
675         * w32-io.c (_gpgme_io_kill): New (dummy).
676
677         * keylist.c (gpgme_op_keylist_start): Cancel a pending request.
678
679         * posix-io.c (_gpgme_io_read): Add some debug output. 
680         (_gpgme_io_write): Ditto.
681         (_gpgme_io_select): Increased the timeout.
682
683 2001-02-12  Werner Koch  <wk@gnupg.org>
684
685         Enhanced the signature verification, so that it can how handle
686         more than one signature and is able to return more information on 
687         the signatures.
688         * verify.c (gpgme_get_sig_key): New.
689         (gpgme_get_sig_status): New.
690
691         * gpgme.h: Add stdio.h. 
692         (GpgmeSigStat): New status DIFF.
693
694 2001-02-01  Werner Koch  <wk@gnupg.org>
695
696         * w32-io.c (set_synchronize): Add EVENT_MODIFY_STATE.  Add Debug
697         code to all Set/ResetEvent().
698
699         * rungpg.c (read_status): Check for end of stream only if we have
700         an r.  By Timo.
701
702 2001-01-31  Werner Koch  <wk@gnupg.org>
703
704         * wait.c (_gpgme_wait_on_condition): Removed all exit code processing.
705         (propagate_term_results,clear_active_fds): Removed.
706         (count_active_fds): Renamed to .. 
707         (count_active_and_thawed_fds): .. this and count only thawed fds. 
708
709         * rungpg.c (gpg_colon_line_handler): Return colon.eof and not
710         status.eof ;-)
711
712 2001-01-30  Werner Koch  <wk@gnupg.org>
713
714         * w32-io.c (_gpgme_io_spawn): Use the supplied path arg.
715
716         * version.c (get_engine_info): Return better error information.
717
718         * posix-util.c, w32-util.c: New.
719         (_gpgme_get_gpg_path): New, suggested by Jan-Oliver.
720         * rungpg.c (_gpgme_gpg_spawn): Use new function to get GPG's path.
721
722         * signers.c (gpgme_signers_add): Ooops, one should test code and
723         not just write it; the newarr was not assigned.  Thanks to José
724         for pointing this out.  Hmmm, still not tested, why shoudl a coder
725         test his fix :-)
726
727         * w32-io.c: Does now use reader threads, so that we can use
728         WaitForMultipleObjects. 
729         * sema.h, posix-sema.c, w32-sema.c: Support for Critcial sections.
730         Does currently only work for W32.
731
732         * debug.c, util.h : New. Changed all fprintfs to use this new
733         set of debugging functions.
734
735 2001-01-23  Werner Koch  <wk@gnupg.org>
736
737         * data.c (_gpgme_data_release_and_return_string): Fixed string
738         termination.
739
740 2001-01-22  Werner Koch  <wk@gnupg.org>
741
742         * delete.c: New.
743
744         * signers.c: New.
745         * key.c (gpgme_key_ref, gpgme_key_unref): New.
746         * sign.c (gpgme_op_sign_start): Allow the use of other keys.
747
748         * version.c (gpgme_get_engine_info,gpgme_check_engine): New.
749         * rungpg.c (_gpgme_gpg_set_simple_line_handler): New.
750
751 2001-01-05  Werner Koch  <wk@gnupg.org>
752
753         * data.c (gpgme_data_rewind): Allow to rewind data_type_none.
754
755
756  Copyright 2001 g10 Code GmbH
757
758  This file is free software; as a special exception the author gives
759  unlimited permission to copy and/or distribute it, with or without
760  modifications, as long as this notice is preserved.
761
762  This file is distributed in the hope that it will be useful, but
763  WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
764  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
765