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