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