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