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