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