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