doc/
[gpgme.git] / gpgme / ChangeLog
1 2002-02-27  Marcus Brinkmann  <marcus@g10code.de>
2
3         * rungpg.h (_gpgme_gpg_op_keylist_ext): New prototype.
4         * rungpg.c (_gpgme_gpg_op_keylist_ext): New function.
5         * engine-gpgsm.h (_gpgme_gpgsm_op_keylist_ext): New prototype.
6         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist_ext): New function.
7         * engine.h (_gpgme_engine_op_keylist_ext): New prototype.
8         * engine.c (_gpgme_engine_op_keylist_ext): New function.
9         * keylist.c (gpgme_op_keylist_ext_start): New function.
10
11 2002-02-27  Marcus Brinkmann  <marcus@g10code.de>
12
13         * gpgme.h: Add new error code GPGME_Invalid_Recipient.
14         * encrypt.c (struct encrypt_result_s): New member invalid_recipients,
15         rename no_recipients to no_valid_recipients.
16         (_gpgme_encrypt_status_handler): Include error for invalid
17         recipients.
18         * engine-gpgsm.c (gpgsm_set_recipients): Change type of first
19         argument to GpgsmObject.  Use that to report back the status about
20         the recipients.
21
22 2002-02-26  Marcus Brinkmann  <marcus@g10code.de>
23
24         * verify.c (_gpgme_verify_status_handler): Fix the last change.
25
26 2002-02-25  Marcus Brinkmann  <marcus@g10code.de>
27
28         * engine.c (_gpgme_engine_op_encrypt_sign): New function.
29         * engine.h (_gpgme_engine_op_encrypt_sign): New prototype.
30         * rungpg.c (_gpgme_append_gpg_args_from_signers): New function.
31         (_gpgme_gpg_op_sign): Use that new function.
32         (_gpgme_gpg_op_encrypt_sign): New function.
33         * rungpg.h (_gpgme_gpg_op_encrypt_sign): New prototype. 
34         * gpgme.h (gpgme_op_encrypt_sign_start): New prototype.
35         (gpgme_op_encrypt_sign): Likewise.
36         * Makefile.am (libgpgme_la_SOURCES): Add encrypt-sign.c.
37         * ops.h (_gpgme_encrypt_status_handler): Add prototype.
38         (_gpgme_sign_status_handler): Add prototype.
39         * sign.c (sign_status_handler): Rename to ...
40         (_gpgme_sign_status_handler): ... this and make non-static.
41         * encrypt.c (encrypt_status_handler): Rename to ...
42         (_gpgme_encrypt_status_handler): ... this and make non-static.
43         * encrypt.c (gpgme_op_encrypt_start): Use new status handler name.
44         * sign.c (gpgme_op_sign_start): Likewise.
45         
46 2002-02-25  Marcus Brinkmann  <marcus@g10code.de>
47
48         * verify.c (_gpgme_verify_status_handler): Parse the args line to
49         see if the problem is due to a missing key, and report that back
50         to the user.
51
52 2002-02-25  Marcus Brinkmann  <marcus@g10code.de>
53
54         * context.h (struct gpgme_context_s): New member include_certs.
55         * gpgme.h (gpgme_set_include_certs): Add prototype.
56         (gpgme_get_include_certs): Likewise.
57         * gpgme.c (gpgme_set_include_certs): New function.
58         (gpgme_get_include_certs): Likewise.
59         (gpgme_new): Set include_certs to 1 (the default).
60         * engine.c (_gpgme_engine_op_sign): Accept new argument include_certs,
61         and pass it to _gpgme_gpgsm_op_sign.
62         * engine.h (_gpgme_engine_op_sign): Likewise for prototype.
63         * engine-gpgsm.c (_gpgme_gpgsm_op_sign): Accept new argument
64         include_certs and handle it.
65         * engine-gpgsm.h (_gpgme_gpgsm_start): Add new argument include_certs.
66         * sign.c (gpgme_op_sign_start): Add new argument to
67         _gpgme_engine_op_sign call.
68
69 2002-02-14  Werner Koch  <wk@gnupg.org>
70
71         * keylist.c (gpgme_op_keylist_start): Do not use a verbose listing.
72
73 2002-02-13  Werner Koch  <wk@gnupg.org>
74
75         * vasprintf.c, fopencookie.c: Add replacement functions.
76         * util.h: Add prototypes for them.
77
78 2002-02-09  Marcus Brinkmann  <marcus@g10code.de>
79
80         * engine-gpgsm.c (gpgsm_assuan_simple_command): Return 0 if we
81         reach the end of the function.
82
83 2002-02-09  Marcus Brinkmann  <marcus@g10code.de>
84
85         * genkey.c (gpgme_op_genkey_start): Fix logic in validity check.
86         (gpgme_op_genkey_start): Skip newlines after opening tag.
87
88         * engine-gpgsm.c (_gpgme_gpgsm_start): Remove cruft.
89
90 2002-02-08  Marcus Brinkmann  <marcus@g10code.de>
91
92         * genkey.c (gpgme_op_genkey_start): Allow PUBKEY and SECKEY to be
93         set, and pass them down to the crypto engine.
94         * engine-gpgsm.h (_gpgme_gpgsm_start): New arguments PUBKEY and SECKEY.
95         * engine.h: Likewise.
96         * rungpg.h (_gpgme_gpg_spawn): Likewise.
97         * engine.c (_gpgme_engine_op_genkey): Likewise.  Use those
98         arguments.
99         * rungpg.c (_gpgme_gpg_op_genkey): Likewise.  Complain if those
100         arguments are set.
101         * engine-gpgsm.c (_gpgme_gpgsm_op_genkey): Likewise.  Implement
102         function.
103
104         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist): Beautify comment.
105
106 2002-02-06  Marcus Brinkmann  <marcus@g10code.de>
107
108         * rungpg.c (_gpgme_gpg_op_keylist): Remove handling of keylist
109         mode (for now).
110
111 2002-02-06  Marcus Brinkmann  <marcus@g10code.de>
112
113         * wait.c (gpgme_wait): Add new argument STATUS, in which the
114         status of the returned context is returned.
115         (_gpgme_wait_on_condition): Rework the function a bit, to make it
116         aware of cancelled processes, and to allow to use gpgme_wait with
117         CTX being NULL (as documented in the source).
118         (struct proc_s): New member REPORTED.
119         * gpgme.h: Fix prototype.
120         * verify.c (gpgme_op_verify): Fix use of gpgme_wait.
121         * sign.c (gpgme_op_sign): Likewise.
122         * import.c (gpgme_op_import): Likewise.
123         * genkey.c (gpgme_op_genkey): Likewise.
124         * export.c (gpgme_op_export): Likewise.
125         * encrypt.c (gpgme_op_encrypt): Likewise.
126         * delete.c (gpgme_op_delete): Likewise.
127         * decrypt-verify.c (gpgme_op_decrypt_verify): Likewise.
128
129 2002-02-06  Marcus Brinkmann  <marcus@g10code.de>
130
131         * gpgme.c (gpgme_set_keylist_mode): Possibly return an error
132         value.
133         (gpgme_get_keylist_mode): New function.
134         (gpgme_new): Set the default for keylist_mode member of CTX.
135
136         * gpgme.h (gpgme_set_keylist_mode): Fix prototype.
137         (gpgme_get_keylist_mode): New prototype.
138         (GPGME_KEYLIST_MODE_LOCAL): New macro.
139         (GPGME_KEYLIST_MODE_EXTERN): Likewise..
140
141 2002-02-02  Marcus Brinkmann  <marcus@g10code.de>
142
143         This patch has gotten a bit large... mmh.  The main thing that
144         happens here is that error values are now not determined in the
145         operation function after gpgme_wait completed, but in the status
146         handler when EOF is received.  It should always be the case that
147         either an error is flagged or EOF is received, so that after a
148         gpgme_wait you should never have the situation that no error is
149         flagged and EOF is not received.  One problem is that the engine
150         status handlers don't have access to the context, a horrible
151         kludge works around this for now.  All errors that happen during a
152         pending operation should be catched and reported in ctx->error,
153         including out-of-core and cancellation.  This rounds up neatly a
154         couple of loose ends, and makes it possible to pass up any errors
155         in the communication with the backend as well.  As a bonus, there
156         will be a function to access gpgme->wait, so that the operations
157         can truly be implemented with their _start function.
158
159         * engine-gpgsm.c (gpgsm_status_handler): Horrible kludge to report
160         error back to the context.
161         * rungpg.c (gpg_status_handler): Same horrible kludge applied here.
162
163         * engine-gpgsm.c (gpgsm_assuan_simple_command): Add error checking.
164
165         * wait.c (_gpgme_wait_on_condition): If canceled, set CTX->error
166         to a value indication that.
167
168         * verify.c (add_notation): Set error, not out_of_core.
169         (finish_sig): Likewise.
170         (gpgme_op_verify_start): Don't clear out_of_core.
171         (_gpgme_verify_status_handler): At EOF, clean up the notation data.
172         (gpgme_op_verify): And don't do it here.
173
174         * trustlist.c (trustlist_status_handler): Check error, not out_of_core.
175         (gpgme_op_trustlist_start): Don't clear out_of_core.
176         (gpgme_op_trustlist_next): Check error, not out_of_core.
177         (gpgme_op_trustlist_end): Likewise.
178
179         * ops.h (test_and_allocate_result): New macro.
180         (_gpgme_passphrase_result): Remove prototype.
181         * delete.c (gpgme_op_delete): Return error from context.
182         (delete_status_handler): Use macro test_and_allocate_result.
183         Perform error checking at EOF.
184         (gpgme_op_delete_start): Release result.
185         * passphrase.c (_gpgme_passphrase_status_handler): Use macro
186         test_and_allocate_result, and perform error checking here.
187         (_gpgme_passphrase_result): Function removed.
188         * sign.c (gpgme_op_sign_start): Do not set out_of_core to zero.
189         (gpgme_op_sign): Just return the error value from the context.
190         (sign_status_handler): Only progress if no error is set yet.  If
191         we process an EOF, set the resulting error value (if any).
192         * decrypt.c (_gpgme_decrypt_result): Function removed.
193         (create_result_struct): Function removed.
194         (_gpgme_decrypt_status_handler): Use macro test_and_allocate_result,
195         caclulate error on EOF, do not progress with errors.
196         (_gpgme_decrypt_start): Do not set out_of_core to zero.
197         (gpgme_op_decrypt): Just return the error value from the context.
198         * encrypt.c (encrypt_status_handler): Perform the error checking
199         here.
200         (gpgme_op_encrypt_start): Do not clear out_of_core.
201         * export.c (export_status_handler): Return if error is set in context.
202         (gpgme_op_export_start): Release result.
203         (gpgme_op_export): Return error from context.
204         * decrypt-verify.c (gpgme_op_decrypt_verify): Return the error in
205         the context.
206         * genkey.c (genkey_status_handler): Use macro
207         test_and_allocate_result.  Perform error checking at EOF.
208         (gpgme_op_genkey): Just return the error from context.
209         * import.c (gpgme_op_import): Return the error from context.
210         (import_status_handler): Use macro test_and_allocate_result.
211         * keylist.c (gpgme_op_keylist_start): Do not clear out_of_core.
212         (gpgme_op_keylist_next): Return error of context.
213         (keylist_colon_handler): Set error instead out_of_code.
214         (finish_key): Likewise.
215
216         * context.h: Remove member out_of_core, add member error.
217         * gpgme.c (_gpgme_release_result): Clear error flag.
218
219         * engine.h (_gpgme_engine_get_error): New prototype.
220         * engine.c (_gpgme_engine_get_error): New function.
221         * engine-gpgsm.c (_gpgme_gpgsm_get_error): New function.
222
223         * engine-gpgsm.c (map_assuan_error): New function.
224         (gpgsm_assuan_simple_command): Change return type to GpgmeError,
225         use the new function to map error values.
226         (gpgsm_set_fd): Change return type tp GpgmeError.
227         (_gpgme_gpgsm_op_decrypt): Change type of ERR to GpgmeError.
228         (gpgsm_set_recipients): Likewise.  Change type of return value
229         equivalently.  Adjust error values.
230         (_gpgme_gpgsm_op_import): Likewise.
231         (_gpgme_gpgsm_op_sign): Likewise.
232         (struct gpgsm_object_s): New member error.
233         (gpgsm_status_handler): Set error if error occurs.  Determine
234         error number from ERR line received.  If assuan_read_line fails,
235         terminate the connection.
236
237 2002-02-01  Marcus Brinkmann  <marcus@g10code.de>
238
239         * Makefile.am (MOSTLYCLEANFILES): New variable.
240
241 2002-02-01  Marcus Brinkmann  <marcus@g10code.de>
242
243         * engine-gpgsm.c (gpgsm_status_handler): At error, terminate the
244         connection to the server.
245
246 2002-01-31  Marcus Brinkmann  <marcus@g10code.de>
247
248         * rungpg.h: Add STATUS_KEY_CREATED.
249
250         * progress.c: New file.
251         * Makefile.am (libgpgme_la_SOURCES): Add progress.c.
252
253         * genkey.c (genkey_status_handler): Use
254         _gpgme_progress_status_handler.  Add check for status.
255         (struct genkey_result_s): New structure.
256         (_gpgme_release_genkey_result): New function.
257         (gpgme_op_genkey): Check for error.
258         * gpgme.c (_gpgme_release_result): Call
259         _gpgme_release_genkey_result.
260         * ops.h (_gpgme_release_genkey_result): Add prototype.
261         * types.h (GenKeyResult): New type.
262         * context.h (gpgme_context_s): Add GenKeyResult to member result.
263
264 2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
265
266         * gpgme.c (_gpgme_release_result): Call
267         _gpgme_release_delete_result.
268         * ops.h (_gpgme_release_delete_result): Add prototype.
269         * types.h (DeleteResult): New type.
270         * context.h (gpgme_context_s): Add DeleteResult to member result.
271
272         * delete.c (enum delete_problem): New type.
273         (struct delete_result_s): New structure.
274         (_gpgme_release_delete_result): New function.
275         (delete_status_handler): Implement more status codes.
276         (gpgme_op_delete): Return error on failure.
277
278         * import.c (MAX_IMPORTED_FIELDS): Bump up to 14.
279
280 2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
281
282         * import.c (struct import_result_s): New structure.
283         (_gpgme_release_import_result): New function.
284         (append_xml_impinfo): Likewise.
285         (import_status_handler): Implement.
286         * gpgme.c (_gpgme_release_result): Add call to
287         _gpgme_release_import_result.
288         * ops.h (_gpgme_release_import_result): Add prototype.
289         * types.h (ImportResult): New type.
290         * context.h (gpgme_context_s): Add ImportResult to member result.
291
292         * encrypt.c (gpgme_op_encrypt): Code clean up.
293
294 2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
295
296         * gpgme.h: Add lots of comment and fix the formatting.  Add
297         gpgme_trustlist_end prototype.
298
299 2002-01-29  Marcus Brinkmann  <marcus@g10code.de>
300
301         * gpgme.h: Add new type GpgmeIdleFunc.  Change type of
302         gpgme_register_idle to return and accept this type.
303         * wait.c (gpgme_register_idle): Fix type.
304         Save and return old value of idle_function.
305
306 2002-01-29  Werner Koch  <wk@gnupg.org>
307
308         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist): Implement secret only mode.
309
310         * keylist.c (keylist_colon_handler): Add support for the new "crs"
311         record type.
312
313 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
314
315         * engine-gpgsm.c (_gpgme_gpgsm_release): Call assuan_disconnect,
316         not assuan_pipe_disconnect.
317
318         * Makefile.am (libgpgme_la_LIBADD): Change to link assuan and
319         jnlib (needed by assuan) statically into libgpgme.  Linking a
320         static library into a shared library this way is not portable.
321
322 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
323
324         * gpgme.h (GpgmePassphraseCb): Change type of R_HD from void* to
325         void**.
326
327 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
328
329         * data.c (gpgme_data_new_from_filepart): Change type of LENGTH
330         from off_t to size_t.
331         * gpgme.h: Likewise.
332
333 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
334
335         * wait.c (_gpgme_wait_on_condition): If the process finished,
336         reset the pending flag.  Also if the operation was cancelled.
337
338         (struct proc_s): Rename READY to DONE.
339         (wait_item_s): Likewise.
340         (set_process_ready): Rename to ...
341         (set_process_done): ... this.
342         (_gpgme_remove_proc_from_wait_queue): Call set_process_done
343         instead set_process_ready.
344         (_gpgme_wait_on_condition): Likewise.
345         (do_select): Rename READY to DONE.
346
347         * verify.c (gpgme_op_verify): Do not set pending to zero here.
348         * sign.c (gpgme_op_sign): Likewise.
349         * import.c (gpgme_op_import): Likewise.
350         * genkey.c (gpgme_op_genkey): Likewise.
351         * export.c (gpgme_op_export): Likewise.
352         * encrypt.c (gpgme_op_encrypt): Likewise.
353         * delete.c (gpgme_op_delete): Likewise.
354         * decrypt-verify.c (gpgme_op_decrypt_verify): Likewise.
355         * decrypt.c (gpgme_op_decrypt): Likewise.
356
357 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
358
359         * export.c: Cleanup.
360
361 2002-01-15  Marcus Brinkmann  <marcus@g10code.de>
362
363         * trustlist.c: Various source clean ups.
364         (my_isdigit): Removed.
365         (gpgme_op_trustlist_end): New function.
366
367 2002-01-13  Marcus Brinkmann  <marcus@g10code.de>
368
369         * gpgme.c: Various source clean ups, like renaming C to CTX where
370         appropriate.
371         (gpgme_new): Clear R_CTX before starting the work.
372         (my_isdigit): Removed.
373         (my_isxdigit): Likewise.
374
375         * data.c: Various source clean ups.
376         (gpgme_data_new_from_mem): Check BUFFER after clearing R_DH.
377         (gpgme_data_new_with_read_cb): Similar for READ_CB.
378         (gpgme_data_new_from_file): Loop over fread while EINTR.
379         (gpgme_data_new_from_filepart): Rediddled a bit.  Allow LENGTH to
380         be zero.  Loop over fread while EINTR.
381
382         (my_isdigit): Removed.
383         (my_isxdigit): Likewise.
384
385 2001-12-21  Marcus Brinkmann  <marcus@g10code.de>
386
387         * engine-gpgsm.c (_gpgme_gpgsm_new): Replace General_Error with
388         Pipe_Error where appropriate.
389
390 2001-12-19  Marcus Brinkmann  <marcus@g10code.de>
391
392         * engine.c: Include `string.h'.  Reported by Stéphane Corthésy.
393
394         * version.c (get_engine_info): Remove prototype.
395
396 2001-12-19  Marcus Brinkmann  <marcus@g10code.de>
397
398         * engine-gpgsm.c (_gpgme_gpgsm_new): New variable CHILD_FDS.
399         Fill it with the servers fds, and pass it to assuan_pipe_connect.
400
401 2001-12-18  Marcus Brinkmann  <marcus@g10code.de>
402
403         * keylist.c (gpgme_op_keylist_end): New function.
404         * gpgme.h (gpgme_op_keylist_end): New prototype.
405
406         * engine.h (gpgme_engine_check_version): Move prototype to ...
407         * gpgme.h (gpgme_engine_check_version): ... here.
408
409         * genkey.c (gpgme_op_genkey_start): Remove unused variable.
410
411 2001-12-18  Marcus Brinkmann  <marcus@g10code.de>
412
413         * version.c (gpgme_get_engine_info): Reimplemented.
414         (gpgme_check_engine): Reimplemented.
415         (_gpgme_compare_versions): Return NULL if MY_VERSION is NULL.
416
417         * engine.c: Include `io.h'.
418         (gpgme_engine_get_info): New function.
419         * engine.h (gpgme_engine_check_version, _gpgme_engine_get_info):
420         Add prototype.
421
422 2001-12-18  Marcus Brinkmann  <marcus@g10code.de>
423
424         * rungpg.c (struct reap_s, reap_list, reap_list_lock): Moved to ...
425         * engine.c (struct reap_s, reap_list, reap_list_lock): ... here.
426         Include `time.h', `sys/types.h', `assert.h', and `sema.h'.
427
428         * rungpg.c (_gpgme_engine_add_child_to_reap_list): New function.
429         (do_reaping, _gpgme_gpg_housecleaning): Moved to ...
430         * engine.c (do_reaping, _gpgme_engine_housecleaning): ... here.
431         * rungpg.c (_gpgme_gpg_release): Replace code that is now in its
432         own function by call to _gpgme_engine_add_child_to_reap_list().
433
434         * wait.c: Include `engine.h'.
435         (run_idle): Call _gpgme_engine_housecleaning(), not
436         _gpgme_gpg_housecleaning().
437         
438 2001-12-18  Marcus Brinkmann  <marcus@g10code.de>
439
440         * key.c (_gpgme_key_append_name): Append, not prepend, the uid.
441         Initialize the next field of the uid structure.
442         (gpgme_key_get_as_xml): Do not list last uid first.
443
444 2001-12-17  Marcus Brinkmann  <marcus@g10code.de>
445
446         * engine-gpgsm.c (_gpgme_gpgsm_set_colon_line_handler): New
447         function [!ENABLE_GPGSM].
448
449 2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
450
451         * engine-gpgsm.c (_gpgme_gpgsm_op_verify): Put TEXT into
452         message_data, not SIG.
453         (_gpgme_gpgsm_op_sign): Use `--detached', not `--detach'.
454
455         * sign.c (sign_status_handler): Call
456         _gpgme_passphrase_status_handler early.
457
458 2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
459
460         * engine-gpgsm.c: Revert last change.
461
462 2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
463
464         * engine-gpgsm.c (gpgsm_status_handler): Freeze the output file
465         handler when ending this operation, otherwise the wait function
466         will sit on it.
467
468 2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
469
470         * engine-gpgsm.c (struct gpgsm_object_s): New member colon.attic.
471         (_gpgme_gpgsm_new): Initialize some more members.
472         (_gpgme_gpgsm_release): Free the colon line handler's attic line.
473         (gpgsm_status_handler): Rework the inline-data processing.
474
475 2001-12-13  Marcus Brinkmann  <marcus@g10code.de>
476
477         * rungpg.c (_gpgme_gpg_spawn): Do not add the fds to the child
478         list that are not dup'ed, for those the close-on-exec flag is set
479         now.
480         * version.c (_gpgme_get_program_version): Remove first entry in
481         CFD, as the close-on-exec flag is now set for this fd.
482
483 2001-12-13  Marcus Brinkmann  <marcus@g10code.de>
484
485         * engine-gpgsm.c (_gpgme_gpgsm_op_encrypt): Do not add `armor'
486         option to `ENCRYPT'.
487         * engine-gpgsm.c (gpgsm_set_recipients): Free LINE when returning
488         successfully.
489
490 2001-12-13  Marcus Brinkmann  <marcus@g10code.de>
491
492         * engine-gpgsm.c (close_notify_handler): New function.
493         (_gpgme_gpgsm_new): Manage the file descriptors a
494         bit differently.  Do not set close-on-exec flags.
495         (_gpgme_gpgsm_op_decrypt): Do not set message_fd
496         to -1, this is done by the close handler.
497         (_gpgme_gpgsm_op_encrypt): Likewise.
498         (_gpgme_gpgsm_op_import): Likewise (also for output_fd).
499         (_gpgme_gpgsm_op_keylist): Likewise (also for input_fd and output_fd).
500         (_gpgme_gpgsm_op_sign): Likewise.
501         (_gpgme_gpgsm_op_verify): Likewise, but for output_fd.
502
503         * posix-io.c (_gpgme_io_pipe): Set the close-on-exec flag for the
504         non-inherited file descriptor index of the pipe.
505
506 2001-12-13  Werner Koch  <wk@gnupg.org>
507
508         * engine-gpgsm.c (_gpgme_gpgsm_set_colon_line_handler): New.
509         (gpgsm_status_handler): Pass datalines to a colon handler
510         * engine.c (_gpgme_engine_set_colon_line_handler): Set the colon
511         handler for gpgsm.
512
513         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist): Allow NULL for
514         pattern.
515         (gpgsm_assuan_simple_command): Removed underscore from
516         assuan_write_line.
517         (_gpgme_gpgsm_start): Ditto.
518         (gpgsm_assuan_simple_command): Replaced interal Assuan read
519         function by the new assuan_read_line.  Removed the use of the
520         internal header.
521         (gpgsm_status_handler): Ditto. Use the new assuan_pending_line.
522         (_gpgme_gpgsm_start): Use the documented way to get an fd from
523         assuan.
524
525         * keylist.c (keylist_colon_handler): Handle "crt" records
526         * key.h (gpgme_key_s): Add an x509 flag.
527         * key.c (parse_x509_user_id): New.
528         (_gpgme_key_append_name): Handle x.509 names.
529
530 2001-12-05  Marcus Brinkmann  <marcus@g10code.de>
531
532         * engine-gpgsm.c (gpgsm_status_handler): Make it work with current
533         version of assuan.
534
535 2001-12-05  Marcus Brinkmann  <marcus@g10code.de>
536
537         * engine-gpgsm.c (gpgsm_set_fd): Accept one more argument OPT.
538         (_gpgme_gpgsm_op_encrypt): Pass armor argument to gpgsm_set_fd for
539         output descriptor.
540         (_gpgme_gpgsm_op_sign): Likewise.
541
542 2001-12-05  Marcus Brinkmann  <marcus@g10code.de>
543
544         * keylist.c (gpgme_op_keylist_next): Set pending to 0 if EOF
545         occurs.
546
547 2001-11-26  Marcus Brinkmann  <marcus@g10code.de>
548
549         * engine-gpgsm.c (_gpgme_gpgsm_op_sign): Fix stupid typo.
550
551 2001-11-24  Marcus Brinkmann  <marcus@g10code.de>
552
553         * engine-gpgsm.c (gpgsm_status_handler): Don't break if bsearch fails.
554         Deal with assuan read line returning more than one line (for now).
555
556 2001-11-23  Marcus Brinkmann  <marcus@g10code.de>
557
558         * engine-gpgsm.c (_gpgme_gpgsm_op_sign): Implement it according to
559         the current protocol definition.
560
561 2001-11-23  Marcus Brinkmann  <marcus@g10code.de>
562
563         * engine-gpgsm.c (_gpgme_gpgsm_new): Set CLOEXEC flag for parent
564         ends of the pipe.
565
566 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
567
568         * engine-gpgsm.c: Include stdlib.h and string.h.  Also include,
569         for now, rungpg.h and status-table.h.
570         (gpgsm_status_handler): Implement more of the status handler.
571
572 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
573
574         * engine.c (_gpgme_engine_op_decrypt): Implement CMS case.
575         (_gpgme_engine_op_delete): Likewise.
576         (_gpgme_engine_op_encrypt): Likewise.
577         (_gpgme_engine_op_export): Likewise.
578         (_gpgme_engine_op_genkey): Likewise.
579         (_gpgme_engine_op_keylist): Likewise.
580         (_gpgme_engine_op_sign): Likewise.
581         (_gpgme_engine_op_trustlist): Likewise.
582
583         * engine-gpgsm.c (_gpgme_gpgsm_op_encrypt): New function.
584         (gpgsm_assuan_simple_command): Likewise.
585         (gpgsm_set_recipients): Likewise.
586         (gpgsm_set_fd): Reimplement using gpgsm_assuan_simple_command.
587         (_gpgme_gpgsm_op_delete): New function.
588         (_gpgme_gpgsm_op_export): Likewise.
589         (_gpgme_gpgsm_op_genkey): Likewise.
590         (_gpgme_gpgsm_op_sign): Likewise.
591         (_gpgme_gpgsm_op_keylist): Likewise.
592         (_gpgme_gpgsm_op_trustlist): Likewise.
593         (_gpgme_gpgsm_release): Release command.
594         (_gpgme_gpgsm_op_decrypt): Allocate command.
595         (_gpgme_gpgsm_op_import): Likewise.
596         (gpgsm_status_handler): Also treat `ERR' strings as EOF.
597
598 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
599
600         * gpgme.h (gpgme_set_protocol): New prototype.
601
602 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
603
604         * engine-gpgsm.c (_gpgme_gpgsm_op_decrypt): New function.
605         (_gpgme_gpgsm_op_import): Likewise.
606
607 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
608
609         * engine-gpgsm.c: Shuffle around header inclusion a bit, to still
610         keep them seperate.
611         (_gpgme_set_status_handler) [!ENABLE_GPGSM]: New function.
612
613 2001-11-22  Werner Koch  <wk@gnupg.org>
614
615         * engine-gpgsm.c: Include more headers so that NULL and mk_error
616         is defined even with an undefined GPGSM_PATH.
617
618 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
619
620         * rungpg.c (gpg_inbound_handler, write_mem_data, write_cb_data,
621         gpg_outbound_handler): Moved to ...
622         * data.c (_gpgme_data_inbound_handler, write_mem_data,
623         write_cb_data, _gpgme_data_outbound_handler): ... here.  Make the
624         _gpgme_* ones non-static.
625         * data.c: Include io.h.
626
627         * ops.h (_gpgme_data_inbound_handler): New prototype.
628         (_gpgme_data_outbound_handler): Likewise.
629         (_gpgme_gpg_spawn): Use these new functions.
630
631         * engine-gpgsm.h (_gpgme_gpgsm_op_decrypt, _gpgme_gpgsm_op_delete,
632         _gpgme_gpgsm_op_encrypt, _gpgme_gpgsm_op_export,
633         _gpgme_gpgsm_op_genkey, _gpgme_gpgsm_op_import,
634         _gpgme_gpgsm_op_keylist, _gpgme_gpgsm_op_sign,
635         _gpgme_gpgsm_op_trustlist, _gpgme_gpgsm_op_verify,
636         _gpgme_gpgsm_start, _gpgme_gpgsm_set_status_handler): New prototype.
637         Include <rungpg.h> for status handler function.
638
639         * engine-gpgsm.c (struct gpgsm_object_s): New members input_fd,
640         input_data, output_fd, output_data, message_fd, message_data, command
641         and status.
642         (_gpgme_gpgsm_new): Open input, output and message pipes before
643         connecting to the client.  Close server's ends afterwards.
644         (_gpgme_gpgsm_release): Close open file descriptors.  Remove
645         server process from wait queue.
646         (_gpgme_gpgsm_op_verify, _gpgme_gpgsm_start,
647         _gpgme_gpgsm_set_status_handler, gpgms_status_handler): New function.
648         
649         * engine.c (_gpgme_engine_start): Implement for GPGME_PROTOCOL_CMS.
650         (_gpgme_engine_set_status_handler): Likewise.
651         (_gpgme_engine_op_verify): Likewise.
652
653 2001-11-21  Marcus Brinkmann  <marcus@g10code.de>
654
655         * context.h: Do not include rungpg.h, but engine.h.
656         (struct gpgme_context_s): Replace member gpg with engine.
657         * gpgme.c (gpgme_release): Release engine, not gpg.
658
659         * recipient.c (_gpgme_append_gpg_args_from_recifgpients): Function
660         moved ...
661         * rungpg.c (_gpgme_append_gpg_args_from_recipients): ... here.
662         Make static, change order of arguments, and return an error value.
663         * ops.h (_gpgme_append_gpg_args_from_recipients): Removed prototype.
664
665         * rungpg.h (_gpgme_gpg_op_verify): Add prototype.
666         (_gpgme_gpg_op_encrypt): Likewise.
667         (_gpgme_gpg_op_decrypt): Likewise.
668         (_gpgme_gpg_op_delete): Likewise.
669         (_gpgme_gpg_op_export): Likewise.
670         (_gpgme_gpg_op_genkey): Likewise.
671         (_gpgme_gpg_op_import): Likewise.
672         (_gpgme_gpg_op_keylist): Likewise.
673         (_gpgme_gpg_op_sign): Likewise.
674         (_gpgme_gpg_op_trustlist): Likewise.
675         * rungpg.c (_gpgme_gpg_op_verify): New function.
676         (_gpgme_gpg_op_encrypt): Likewise.
677         (_gpgme_gpg_op_decrypt): Likewise.
678         (_gpgme_gpg_op_delete): Likewise.
679         (_gpgme_gpg_op_export): Likewise.
680         (_gpgme_gpg_op_genkey): Likewise.
681         (_gpgme_gpg_op_import): Likewise.
682         (_gpgme_gpg_op_keylist): Likewise.
683         (_gpgme_gpg_op_sign): Likewise.
684         (_gpgme_gpg_op_trustlist): Likewise.
685
686         * engine.h (_gpgme_engine_set_status_handler): Add prototype.
687         (_gpgme_engine_set_command_handler): Likewise.
688         (_gpgme_engine_set_colon_line_handler): Likewise.
689         (_gpgme_engine_op_decrypt): Likewise.
690         (_gpgme_engine_op_delete): Likewise.
691         (_gpgme_engine_op_encrypt): Likewise.
692         (_gpgme_engine_op_export): Likewise.
693         (_gpgme_engine_op_genkey): Likewise.
694         (_gpgme_engine_op_import): Likewise.
695         (_gpgme_engine_op_keylist): Likewise.
696         (_gpgme_engine_op_sign): Likewise.
697         (_gpgme_engine_op_trustlist): Likewise.
698         (_gpgme_engine_op_verify): Likewise.
699         (_gpgme_engine_start): Likewise.
700         * engine.c (_gpgme_engine_set_status_handler): New function.
701         (_gpgme_engine_set_command_handler): Likewise.
702         (_gpgme_engine_set_colon_line_handler): Likewise.
703         (_gpgme_engine_op_decrypt): Likewise.
704         (_gpgme_engine_op_delete): Likewise.
705         (_gpgme_engine_op_encrypt): Likewise.
706         (_gpgme_engine_op_export): Likewise.
707         (_gpgme_engine_op_genkey): Likewise.
708         (_gpgme_engine_op_import): Likewise.
709         (_gpgme_engine_op_keylist): Likewise.
710         (_gpgme_engine_op_sign): Likewise.
711         (_gpgme_engine_op_trustlist): Likewise.
712         (_gpgme_engine_op_verify): Likewise.
713         (_gpgme_engine_start): Likewise.
714
715         * verify.c (gpgme_op_verify_start): Reimplement in terms of above
716         functions.
717         * encrypt.c (gpgme_op_encrypt_start): Likewise.
718         * decrypt.c (_gpgme_decrypt_start): Likewise.
719         * passphrase.c (_gpgme_passphrase_start): Likewise.
720         * keylist.c (gpgme_op_keylist_start): Likewise.
721
722 2001-11-20  Marcus Brinkmann  <marcus@g10code.de>
723
724         * types.h: Add types EngineObject and GpgsmObject.
725
726         * Makefile.am (libgpgme_la_SOURCES): Add engine-gpgsm.h,
727         engine-gpgsm.c, engine.h and engine.c.
728         * engine.h: New file.
729         * engine.c: Likewise.
730         * engine-gpgsm.h: Likewise.
731         * engine-gpgsm.c: Likewise.
732         
733         * rungpg.c (_gpgme_gpg_get_version): New function.
734         (_gpgme_gpg_check_version): Likewise.
735         * rungpg.h: Add prototypes for _gpgme_gpg_get_version and
736         _gpgme_gpg_check_version.
737
738         * version.c (compare_versions): Rename to ...
739         (_gpgme_compare_versions): ... this.  Make non-static.
740         (gpgme_check_version): Use _gpgme_compare_versions rather than
741         compare_versions.
742         (gpgme_check_engine): Likewise.
743         * ops.h (_gpgme_get_program_version): Add prototype.
744
745 2001-11-20  Marcus Brinkmann  <marcus@g10code.de>
746
747         * Makefile.am (libgpgme_la_INCLUDES): Remove obsolete directive.
748         (AM_CPPFLAGS): New directive [BUILD_ASSUAN].
749         (libgpgme_la_LIBADD): Likewise.
750
751 2001-11-20  Marcus Brinkmann  <marcus@g10code.de>
752
753         * version.c: Remove global variables lineno and
754         tmp_engine_version.
755         (version_handler): Removed.
756         (_gpgme_get_program_version): New function.
757         (get_engine_info): Don't use context and version_handler,
758         but _gpgme_get_program_version.
759         * ops.h (_gpgme_get_program_version): Add prototype for
760         _gpgme_get_program_version (we expect to use it elsewhere soon).
761
762 2001-11-18  Marcus Brinkmann  <marcus@g10code.de>
763
764         * version.c (get_engine_info): If GnuPG is not available, return
765         an error message.
766         * posix-util.c (_gpgme_get_gpg_path): Allow GPG_PATH to be
767         undefined.
768         (_gpgme_get_gpgsm_path): New function.
769         * w32-util.c (find_program_in_registry): New static function.
770         (_gpgme_get_gpg_path): Allow GPG_PATH to be undefined.  Rework
771         to use find_program_in_registry.
772         (_gpgme_get_gpgsm_path): New function.
773         (util.h): Prototype _gpgme_get_gpgsm_path).
774         * rungpg.c (_gpgme_gpg_spawn): Verify that _gpgme_get_gpg_path()
775         returns non-null.
776
777 2001-11-16  Marcus Brinkmann  <marcus@g10code.de>
778
779         * decrypt-verify.c: New file.
780         * Makefile.am (libgpgme_la_SOURCES): Add decrypt-verify.c.
781         * types.h: Add decrypt-verify types.
782         * ops.h: Likewise.
783         * context.h: Add result type for decrypt-verify.
784         * gpgme.h: Add decrypt-verify prototypes.
785
786         * decrypt.c (decrypt_status_handler): Renamed to ...
787         (_gpgme_decrypt_status_handler): ... this.  Make non-static.
788         (_gpgme_decrypt_start): New function, derived from
789         gpgme_op_decrypt_start.
790         (gpgme_op_decrypt_start): Reimplement in terms of
791         _gpgme_decrypt_start.
792         (_gpgme_decrypt_result): New function to retrieve error value.
793         (gpgme_op_decrypt): Use _gpgme_decrypt_result.
794         * ops.h: Add prototypes for new functions.
795
796         * verify.c (verify_status_handler): Renamed to ...
797         (_gpgme_verify_status_handler): ... this.  Make non-static.
798         (gpgme_op_verify_start): Use new function name.
799         (intersect_stati): Renamed to ...
800         (_gpgme_intersect_stati): ... this.  Make non-static.
801         (gpgme_op_verify): Use new name.
802         * ops.h: Add prototypes for new functions.
803
804 2001-11-16  Marcus Brinkmann  <marcus@g10code.de>
805
806         * passphrase.c: New file.
807         * Makefile.am (libgpgme_la_SOURCES): Add passphrase.c.
808         * ops.h (_gpgme_passphrase_result): Add prototypes from
809         passphrase.c.
810         * types.h: Likewise.
811         * context.h: Add member passphrase to result.
812         * gpgme.c (_gpgme_release_result): Release passphrase member.
813
814         * decrypt.c: Some formatting and variable name changes (like
815         CTX instead C).
816         (struct decrypt_result_s): Remove members now found in
817         passphrase result.
818         (_gpgme_release_decrypt_result): Don't release removed members.
819         (decrypt_status_handler): Call _gpgme_passphrase_status_handler,
820         and don't handle the cases catched there.
821         (command_handler): Removed.
822         (gpgme_op_decrypt_start): Don't set command handler, but invoke
823         _gpgme_passphrase_start which does it.
824         (gpgme_op_decrypt): Invoke _gpgme_passphrase_result and drop the
825         cases covered by it.
826
827         * sign.c Some formatting and variable name changes (like
828         CTX instead C).
829         (struct sign_result_s): Remove members now found in
830         passphrase result.
831         (_gpgme_release_sign_result): Don't release removed members.
832         (sign_status_handler): Call _gpgme_passphrase_status_handler,
833         and don't handle the cases catched there.
834         (command_handler): Removed.
835         (gpgme_op_sign_start): Don't set command handler, but invoke
836         _gpgme_passphrase_start which does it.
837         (gpgme_op_sign): Invoke _gpgme_passphrase_result and drop the
838         cases covered by it.
839
840 2001-11-15  Marcus Brinkmann  <marcus@g10code.de>
841
842         * decrypt.c (command_handler): Fix last change.
843
844 2001-11-15  Marcus Brinkmann  <marcus@g10code.de>
845
846         * verify.c (_gpgme_release_verify_result): Rename RES to RESULT.
847         Rename R2 to NEXT_RESULT.
848         (intersect_stati): Rename RES to RESULT.
849         (gpgme_get_sig_status): Likewise.  Do not check return_type, but
850         the member verify of result.
851         (gpgme_get_sig_key): Likewise.
852
853         * sign.c (_gpgme_release_sign_result): Rename RES to RESULT.  If
854         RESULT is zero, return.
855         (sign_status_handler, command_handler): Do not check return_type,
856         but the member sign of result.
857         (gpgme_op_sign): Likewise.  Drop assertion.
858
859         * encrypt.c (_gpgme_release_encrypt_result): Rename RES to RESULT.
860         If RESULT is zero, return.
861         (encrypt_status_handler): Do not check return_type, but the member
862         encrypt of result.
863         (gpgme_op_encrypt): Likewise.  Drop assertion.
864
865         * decrypt.c (_gpgme_release_decrypt_result): Rename RES to RESULT.
866         (create_result_struct): Do not set result_type.
867         (command_handler, decrypt_status_handler): Do not check
868         return_type, but the member decrypt of result.
869         (gpgme_op_decrypt): Likewise.  Drop assertion.
870
871         * context.h (enum ResultType): Removed.
872         (struct gpgme_context_s): Remove member result_type.
873         (struct result): Replaces union result.
874         * gpgme.c: Include string.h.
875         (_gpgme_release_result): Release all members of c->result, which
876         is now a struct.  Zero out all members of the struct afterwards.
877
878 2001-11-11  Marcus Brinkmann  <marcus@g10code.de>
879
880         * rungpg.c (_gpgme_gpg_release): Release GPG->cmd.cb_data.
881         Release all members of the list GPG->arglist.
882         Reported by Michael Schmidt <mschmidt@cs.uni-sb.de>.
883
884 2001-11-02  Marcus Brinkmann  <marcus@g10code.de>
885
886         * rungpg.c (pipemode_copy): Change type of NBYTES to size_t.
887
888         * key.c: Include string.h.
889         * data.c: Likewise.
890         * recipient.c: Likewise.
891
892 2001-10-29  Marcus Brinkmann  <marcus@g10code.de>
893
894         * context.h: New member signers_len.
895         * signers.c (gpgme_signers_clear): Require that signers are
896         non-NULL with assertion.  Use signers_len to determine how much
897         keys to release.  Add documentation.
898         (gpgme_signers_add): Use signers_len to determine if the buffer is
899         large enough.  Use xtryrealloc rather than xtrymalloc and copying.
900         Add documentation.
901         (gpgme_signers_enum): Use signers_len to determine if key is
902         available.  Add documentation.
903
904 2001-10-22  Marcus Brinkmann  <marcus@g10code.de>
905
906         * data.c (_gpgme_data_append): Check if LENGTH is smaller than
907         ALLOC_CHUNK, not DH->length.
908
909 2001-10-17  Marcus Brinkmann  <marcus@g10code.de>
910
911         * gpgme.c (gpgme_set_protocol): Fix last change.
912
913 2001-10-15  Werner Koch  <wk@gnupg.org>
914
915         * gpgme.h (GpgmeProtocol): New.
916         * gpgme.c (gpgme_set_protocol): New.
917
918 2001-09-26  Werner Koch  <wk@gnupg.org>
919
920         * gpgme.c (gpgme_set_passphrase_cb): Ignore a NULL context.
921         (gpgme_set_progress_cb): Ditto. Suggested by Mark Mutz.
922
923 2001-09-17  Werner Koch  <wk@gnupg.org>
924
925         * keylist.c (finish_key): Shortcut for no tmp_key.  Changed all
926         callers to use this function without a check for tmp_key.
927         
928         * keylist.c (gpgme_op_keylist_next): Reset the key_cond after
929         emptying the queue.  Bug reported by Stéphane Corthésy.
930
931 2001-09-12  Werner Koch  <wk@gnupg.org>
932
933         * data.c (gpgme_data_rewind): Allow rewind for callbacks.
934
935 2001-09-07  Werner Koch  <wk@gnupg.org>
936
937         * rungpg.h: Add NO_RECP.
938         * encrypt.c (encrypt_status_handler): Take on No_RECP.
939         (gpgme_op_encrypt): Better error return.
940
941         * verify.c (verify_status_handler): Take on NODATA.
942
943 2001-09-03  Werner Koch  <wk@gnupg.org>
944
945         * rungpg.h: Added STATUS_INV_RECP.
946         * gpgme.c (_gpgme_release_result): Add support for new
947         EncryptResult object.
948         * encrypt.c (append_xml_encinfo): New.
949         (encrypt_status_handler): Add some status parsing.
950         (_gpgme_release_encrypt_result): New.
951
952 2001-08-29  Werner Koch  <wk@gnupg.org>
953
954         * recipient.c (gpgme_recipients_release): Free the list.  By Timo.
955
956         * keylist.c (keylist_colon_handler): Do a finish key if we receive
957         an EOF here.  This is probably the reason for a lot of bugs
958         related to keylisting.  It is so obvious.  Kudos to Enno Cramer
959         for pointing that out. 
960
961 2001-08-28  Werner Koch  <wk@gnupg.org>
962
963         * gpgme.c, gpgme.h (gpgme_get_op_info): New.
964         (_gpgme_set_op_info): New. 
965         (_gpgme_release_result): Reset the op_info here.
966         * sign.c (append_xml_siginfo): New.
967         (sign_status_handler): Store the sig create information.
968
969 2001-07-31  Werner Koch  <wk@gnupg.org>
970
971         * encrypt.c (gpgme_op_encrypt): Hack to detect no valid recipients.
972
973 2001-07-30  Werner Koch  <wk@gnupg.org>
974
975         * gpgme.c (gpgme_get_armor,gpgme_get_textmode): New.
976
977         * rungpg.c (build_argv): Disable armor comments
978         * w32-io.c (build_commandline): Need to add quotes here
979
980 2001-07-24  Werner Koch  <wk@gnupg.org>
981
982         * data.c (gpgme_data_read): Add a a way to return the available bytes.
983
984 2001-07-23  Werner Koch  <wk@gnupg.org>
985
986         * util.c: Removed stpcpy() because we use the version from jnlib.
987
988 2001-07-19  Werner Koch  <wk@gnupg.org>
989
990         * mkstatus: Define the collating sequence for sort.
991
992 2001-06-26  Werner Koch  <wk@gnupg.org>
993
994         * rungpg.h: Add STATUS_UNEXPECTED as suggested by Timo.
995
996 2001-06-15  Werner Koch  <wk@gnupg.org>
997
998         * keylist.c (set_userid_flags): Fixed the assigned values. Kudos
999         to Timo for pointing this out.
1000
1001 2001-06-01  Werner Koch  <wk@gnupg.org>
1002
1003         * debug.c (_gpgme_debug_begin): Fixed a /tmp race.  Noted by
1004         Johannes Poehlmann.
1005
1006 2001-05-28  Werner Koch  <wk@gnupg.org>
1007
1008         * version.c (gpgme_check_engine): Stop version number parsing at
1009         the opening angle and not the closing one.  By Tommy Reynolds.
1010
1011 2001-05-01  José Carlos García Sogo <jose@jaimedelamo.eu.org>
1012
1013         * encrypt.c (gpgme_op_encrypt_start): Deleted the assert ( !c->gpg )
1014         line, because it gave an error if another operation had been made 
1015         before using the same context.
1016         
1017         * decrypt.c (gpgme_op_decrypt_start): The same as above. Also added 
1018         one line to release the gpg object in the context (if any).
1019         
1020 2001-04-26  Werner Koch  <wk@gnupg.org>
1021
1022         * key.c, key.h (_gpgme_key_cache_init): New.
1023         (_gpgme_key_cache_add): New.
1024         (_gpgme_key_cache_get): New.
1025         * version.c (do_subsystem_inits): Init the cache.
1026         * keylist.c (finish_key): Put key into the cache
1027         * verify.c (gpgme_get_sig_key): First look into the cache.
1028
1029 2001-04-19  Werner Koch  <wk@gnupg.org>
1030
1031         * keylist.c (parse_timestamp): Adjusted for the changed
1032         --fixed-list-mode of gpg 1.0.4h.
1033
1034 2001-04-05  Werner Koch  <wk@gnupg.org>
1035
1036         * verify.c (gpgme_op_verify_start): Enabled pipemode for detached sigs.
1037
1038 2001-04-04  Werner Koch  <wk@gnupg.org>
1039
1040         * w32-io.c (_gpgme_io_select): Don't select on the writer if there
1041         are still bytes pending.  Timo found this not easy to track down
1042         race condition. 
1043
1044 2001-04-02  Werner Koch  <wk@gnupg.org>
1045
1046         * gpgme.h: Add GPGME_ATTR_KEY_{EXPIRED,DISABLED}.
1047         * key.c (gpgme_key_get_ulong_attr): And return those attribs.
1048
1049         * verify.c (gpgme_get_sig_key): Set keyliosting mode depending on 
1050         the mode set in the current context.  Suggested by Timo.
1051
1052         * key.c (gpgme_key_get_ulong_attr): Return can_certify and not
1053         can_encrypt. By Timo.
1054
1055 2001-03-30  Werner Koch  <wk@gnupg.org>
1056
1057         * debug.c (debug_init): Allow to specify a debug file.
1058         (_gpgme_debug_level): New.
1059
1060         * posix-io.c (_gpgme_io_read, _gpgme_io_write): Print output.
1061         (_gpgme_io_select): Debug only with level > 2.
1062
1063 2001-03-15  Werner Koch  <wk@gnupg.org>
1064
1065         * rungpg.c: Included time.h.
1066
1067         * key.h: New keyflags for capabilities.
1068         * keylist.c (set_mainkey_capability, set_subkey_capability): New.
1069         (keylist_colon_handler): Parse them.
1070         * gpgme.h: New attribute values for capabilties.
1071         * key.c (gpgme_key_get_string_attr): Return them.
1072         (capabilities_to_string): New.
1073         (gpgme_key_get_ulong_attr): Return the global caps.
1074
1075 2001-03-14  Werner Koch  <wk@gnupg.org>
1076
1077         * w32-io.c (destroy_reader,destroy_writer): Fixed syntax error. 
1078         Thanks to Jan Oliver Wagner.
1079
1080 2001-03-13  Werner Koch  <wk@gnupg.org>
1081
1082         * context.h: Add invalid and revoke flags to user_id structure.
1083         * keylist.c (gpgme_op_keylist_start): Use --fixed-list-mode.
1084         (keylist_colon_handler): Adjust for that.
1085         (set_userid_flags): New. 
1086         (set_mainkey_trust_info): Handle new key invalid flag
1087         (set_subkey_trust_info): Ditto.
1088         * gpgme.h: Add new attributes for key and user ID flags.
1089         * key.c (_gpgme_key_append_name): Init these flags
1090         (gpgme_key_get_as_xml): Print them.
1091         (one_uid_as_xml): New helper for above.
1092         (gpgme_key_get_string_attr, gpgme_key_get_ulong_attr):
1093         Return the new attributes.  Enhanced, so that subkey information
1094         can be returned now.
1095
1096 2001-02-28  Werner Koch  <wk@gnupg.org>
1097
1098         * w32-io.c (destroy_reader): Set stop_me flag.
1099         (writer,create_writer,destroy_writer,find_writer,kill_writer): New.
1100         (_gpgme_io_write): Use a writer thread to avaoid blocking.
1101         (_gpgme_io_close): Cleanup a writer thread
1102         (_gpgme_io_select): Repalce tthe faked wait on writing by a real
1103         waiting which is now possible due to the use of a writer thread.
1104
1105 2001-02-20  Werner Koch  <wk@gnupg.org>
1106
1107         * w32-io.c (destroy_reader,kill_reader): New. 
1108         (create_reader, reader): Add a new event to stop the thread.
1109         (_gpgme_io_close): Kill the reader thread.
1110
1111         * posix-io.c (_gpgme_io_select): Handle frozen fds here. 
1112         * 32-io.c (_gpgme_io_select): Ditto. Removed a bunch of unused code.
1113
1114         * wait.c: Reworked the whole thing.
1115         * rungpg.c (_gpgme_gpg_new): Init pid to -1.
1116         (_gpgme_gpg_release): Remove the process from the wait queue.
1117
1118 2001-02-19  Werner Koch  <wk@gnupg.org>
1119
1120         * w32-io.c (_gpgme_io_set_close_notify): New.
1121         (_gpgme_io_close): Do the notification.
1122
1123         * posix-io.c (_gpgme_io_select): Use a 1 sec timeout and not 200
1124         microseconds.
1125
1126         * wait.c (remove_process): Don't close the fd here.
1127         (do_select): Set the fd to -1 and remove the is_closed flag everywhere.
1128         (_gpgme_wait_on_condition): Remove the assert on the queue and
1129         break out if we could not find the queue.  The whole thing should
1130         be reworked.
1131
1132         * posix-io.c (_gpgme_io_set_close_notify): New.
1133         (_gpgme_io_close): Do the notification.
1134
1135         * rungpg.c (close_notify_handler): New. 
1136         (_gpgme_gpg_new): Register a callback for the fd.
1137         (_gpgme_gpg_set_colon_line_handler): Ditto.
1138         (build_argv): Ditto
1139
1140 2001-02-13  Werner Koch  <wk@gnupg.org>
1141
1142         * rungpg.c (struct reap_s): Replaced pid_t by int.
1143
1144         * types.h: Add ulong typedef.
1145
1146         * rungpg.c (do_reaping,_gpgme_gpg_housecleaning): New.
1147         (_gpgme_gpg_release): Reap children.
1148         * io.h, posix-io.c (_gpgme_io_kill): New.
1149         * w32-io.c (_gpgme_io_kill): New (dummy).
1150
1151         * keylist.c (gpgme_op_keylist_start): Cancel a pending request.
1152
1153         * posix-io.c (_gpgme_io_read): Add some debug output. 
1154         (_gpgme_io_write): Ditto.
1155         (_gpgme_io_select): Increased the timeout.
1156
1157 2001-02-12  Werner Koch  <wk@gnupg.org>
1158
1159         Enhanced the signature verification, so that it can how handle
1160         more than one signature and is able to return more information on 
1161         the signatures.
1162         * verify.c (gpgme_get_sig_key): New.
1163         (gpgme_get_sig_status): New.
1164
1165         * gpgme.h: Add stdio.h. 
1166         (GpgmeSigStat): New status DIFF.
1167
1168 2001-02-01  Werner Koch  <wk@gnupg.org>
1169
1170         * w32-io.c (set_synchronize): Add EVENT_MODIFY_STATE.  Add Debug
1171         code to all Set/ResetEvent().
1172
1173         * rungpg.c (read_status): Check for end of stream only if we have
1174         an r.  By Timo.
1175
1176 2001-01-31  Werner Koch  <wk@gnupg.org>
1177
1178         * wait.c (_gpgme_wait_on_condition): Removed all exit code processing.
1179         (propagate_term_results,clear_active_fds): Removed.
1180         (count_active_fds): Renamed to .. 
1181         (count_active_and_thawed_fds): .. this and count only thawed fds. 
1182
1183         * rungpg.c (gpg_colon_line_handler): Return colon.eof and not
1184         status.eof ;-)
1185
1186 2001-01-30  Werner Koch  <wk@gnupg.org>
1187
1188         * w32-io.c (_gpgme_io_spawn): Use the supplied path arg.
1189
1190         * version.c (get_engine_info): Return better error information.
1191
1192         * posix-util.c, w32-util.c: New.
1193         (_gpgme_get_gpg_path): New, suggested by Jan-Oliver.
1194         * rungpg.c (_gpgme_gpg_spawn): Use new function to get GPG's path.
1195
1196         * signers.c (gpgme_signers_add): Ooops, one should test code and
1197         not just write it; the newarr was not assigned.  Thanks to José
1198         for pointing this out.  Hmmm, still not tested, why shoudl a coder
1199         test his fix :-)
1200
1201         * w32-io.c: Does now use reader threads, so that we can use
1202         WaitForMultipleObjects. 
1203         * sema.h, posix-sema.c, w32-sema.c: Support for Critcial sections.
1204         Does currently only work for W32.
1205
1206         * debug.c, util.h : New. Changed all fprintfs to use this new
1207         set of debugging functions.
1208
1209 2001-01-23  Werner Koch  <wk@gnupg.org>
1210
1211         * data.c (_gpgme_data_release_and_return_string): Fixed string
1212         termination.
1213
1214 2001-01-22  Werner Koch  <wk@gnupg.org>
1215
1216         * delete.c: New.
1217
1218         * signers.c: New.
1219         * key.c (gpgme_key_ref, gpgme_key_unref): New.
1220         * sign.c (gpgme_op_sign_start): Allow the use of other keys.
1221
1222         * version.c (gpgme_get_engine_info,gpgme_check_engine): New.
1223         * rungpg.c (_gpgme_gpg_set_simple_line_handler): New.
1224
1225 2001-01-05  Werner Koch  <wk@gnupg.org>
1226
1227         * data.c (gpgme_data_rewind): Allow to rewind data_type_none.
1228
1229
1230  Copyright 2001, 2002 g10 Code GmbH
1231
1232  This file is free software; as a special exception the author gives
1233  unlimited permission to copy and/or distribute it, with or without
1234  modifications, as long as this notice is preserved.
1235
1236  This file is distributed in the hope that it will be useful, but
1237  WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
1238  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1239