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