b896650a48a93d85c988e7565fa8a951ca584567
[gpgme.git] / gpgme / ChangeLog
1 2002-06-21  Marcus Brinkmann  <marcus@g10code.de>
2
3         * engine-gpgsm.c (gpgsm_assuan_simple_command): Return ERR.
4         (parse_status): New function.
5         (gpgsm_status_handler): Use parse_status.
6         (gpgsm_assuan_simple_command): Accept new arguments STATUS_FNC and
7         STATUS_FNC_VALUE and process status messages.
8         (gpgsm_set_recipients): Pass new arugments to gpgsm_assuan_simple_command.
9         (gpgsm_set_fd): Likewise.
10         (_gpgme_gpgsm_op_keylist): Likewise.
11         (_gpgme_gpgsm_op_keylist_ext): Likewise.
12         (_gpgme_gpgsm_op_sign): Likewise.
13
14 2002-06-21  Marcus Brinkmann  <marcus@g10code.de>
15
16         * wait.c (_gpgme_remove_io_cb): Unlock FDT->lock.
17
18 2002-06-20  Werner Koch  <wk@gnupg.org>
19
20         * rungpg.c (build_argv): Ignore GPG_AGENT_INFO if set but empty.
21
22         * verify.c (calc_sig_summary): Set bad policy for wrong key usage.
23         (skip_token): New.
24         (_gpgme_verify_status_handler): Watch out for wrong key usage.
25         (gpgme_get_sig_string_attr): Hack to return info on the key
26         usage.  Does now make use of the former RESERVED argument which
27         has been renamed to WHATIDX.
28         (gpgme_get_sig_ulong_attr): Renamed RESERVED to WHATIDX.
29
30 2002-06-14  Marcus Brinkmann  <marcus@g10code.de>
31
32         * wait.c (do_select): Return -1 on error, and 0 if nothing to run.
33         (_gpgme_wait_one): Only set HANG to zero if do_select returned an
34         error, or there are no more file descriptors to wait on.
35         (_gpgme_wait_on_condition): Ignore return value from do_select for
36         now.
37
38 2002-06-13  Werner Koch  <wk@gnupg.org>
39
40         * verify.c (gpgme_op_verify): Make sure that we never access an
41         unitialized result structure.
42
43 2002-06-12  Werner Koch  <wk@gnupg.org>
44
45         * keylist.c (struct keylist_result_s): New.
46         (_gpgme_release_keylist_result): Release it here 
47         (keylist_status_handler): Handle truncated.
48         (append_xml_keylistinfo): New.
49         * gpgme.c (_gpgme_release_result): and use it here.
50         * types.h: Declare the new type here.
51         * context.h (struct gpgme_context_s): Use it here.
52
53 2002-06-11  Marcus Brinkmann  <marcus@g10code.de>
54
55         * engine-gpgsm.c (_gpgme_gpgsm_release): Close status_cb.fd.
56         (_gpgme_gpgsm_new): Duplicate status file descriptor, so we can
57         use our own close notification mechanism without interfering with
58         assuan.
59
60 2002-06-11  Werner Koch  <wk@gnupg.org>
61
62         * gpgme.h: Add GPGME_ATTR_SIG_SUMMARY and the GPGME_SIGSUM_
63         constants.
64         * verify.c (calc_sig_summary): New.
65         (gpgme_get_sig_ulong_attr): And use it here.
66
67 2002-06-10  Werner Koch  <wk@gnupg.org>
68
69         * rungpg.h: Add new status codes TRUNCATED and ERROR.
70         * verify.c (is_token, copy_token): New.
71         (_gpgme_verify_status_handler): Use copy_token, handle the new
72         ERROR status and store the errorcode used withgpgsm and trust
73         status codes.
74         * gpgme.h: New attribute ERRTOK.
75         * key.c (gpgme_key_get_string_attr): Add dummy case for it.
76         (gpgme_get_sig_string_attr): Use it here to return the last error.
77
78 2002-06-10  Marcus Brinkmann  <marcus@g10code.de>
79
80         * engine-gpgsm.c (_gpgme_gpgsm_start): Move the code that sets the
81         close notification for the status fd to ...
82         (_gpgme_gpgsm_new): ... here.
83         * wait.h: Include "sema.h".  Remove prototypes of
84         _gpgme_remove_proc_from_wait_queue and
85         _gpgme_register_pipe_handler.  Add prototypes of
86         _gpgme_fd_table_init, _gpgme_fd_table_deinit, _gpgme_fd_table_put,
87         _gpgme_add_io_cb, _gpgme_remove_io_cb, _gpgme_wait_event_cb and
88         _gpgme_wait_one..
89         * wait.c: Remove global variables PROC_QUEUE, PROC_QUEUE_LOCK,
90         FD_TABLE_SIZE, FD_TABLE, FD_TABLE_LOCK.  New global variables
91         FDT_GLOBAL, CTX_DONE_LIST, CTX_DONE_LIST_SIZE,
92         CTX_DONE_LIST_LENGTH and CTX_DONE_LIST_LOCK.  Remove struct
93         proc_s.  Replace struct wait_item_s.
94         (_gpgme_fd_table_init): New function.
95         (_gpgme_fd_table_deinit): Likewise.
96         (_gpgme_fd_table_put): Likewise.
97         (set_process_done): Remove function.
98         (do_select): Take argument FDT.  Use that to decide which fds to
99         select on.
100         (_gpgme_remove_proc_from_wait_queue): Remove function.
101         (_gpgme_wait_event_cb): New function.
102         (_gpgme_wait_one): Likewise.
103         (_gpgme_register_pipe_hanldler): Remove function.
104         (_gpgme_add_io_cb): New function.
105         (_gpgme_remove_io_cb): Likewise.
106         (_gpgme_freeze_fd): Remove function.
107         (_gpgme_thaw_fd): Remove function.
108         * rungpg.c (struct fd_data_map_s): Add new member TAG.
109         (struct gpg_object_s): Likewise for STATUS and COLON.  Add member
110         IDX to CMD.  Add new member IO_CBS.
111         (close_notify_handler): New variables POSSIBLY_DONE and NOT_DONE.
112         For each I/O callback, check if it should be unregistered.  If all
113         callbacks have been unregistered, trigger GPGME_EVENT_DONE.
114         Remove member RUNNING.
115         (_gpgme_gpg_new): Initialize new members.
116         (_gpgme_gpg_release): Check PID not RUNNING.  Don't call
117         _gpgme_remove_proc_from_wait_queue.  Close GPG->CMD.FD if set.
118         (build_argv): Store away the index instead the file descriptor for
119         CMD.
120         (_gpgme_gpg_add_io_cb): New function.
121         (_gpgme_gpg_spawn): Use _gpgme_gpg_add_io_cb to register IO
122         callbacks.
123         (gpg_status_handler): Change return type to void, remove PID
124         argument, close filedescriptor if EOF or error occurs.
125         (read_status): Use _gpgme_gpg_add_io_cb instead _gpgme_thaw_fd.
126         Use IO_CBS->remove instead _gpgme_freeze_fd.
127         (gpg_colon_line_handler): Change return type to void, remove PID
128         argument, close filedescriptor if EOF or error occurs.
129         (command_cb): Use IO_CBS->remove instead _gpgme_freeze_fd.
130         (_gpgme_gpg_set_io_cbs): New function.
131         * rungpg.h (_gpgme_gpg_set_io_cbs): Prototype for
132         _gpgme_gpg_set_io_cbs.
133         * gpgme.h (GpgmeIOCb): New type.
134         (GpgmeRegisterIOCb): Likewise.
135         (GpgmeRemoveIOCb): Likewise.
136         (GpgmeEventIO): Likewise.
137         (GpgmeEventIOCb): Likewise.
138         (struct GpgmeIOCbs): New structure to hold I/O callbacks.
139         (gpgme_set_op_io_cbs): New prototype.
140         (gpgme_get_op_io_cbs): Likewise.
141         * ops.h: New prototype for _gpgme_op_event_cb.  Remove prototypes
142         for _gpgme_freeze_fd and _gpgme_thaw_fd.  Remove PID argument from
143         _gpgme_data_inbound_handler and _gpgme_data_outbound_handler
144         prototype.  Add prototype for _gpgme_op_reset.
145         Add synchronous argument to _gpgme_decrypt_start prototype.
146         * io.h: Beautification.
147         * gpgme.c: Include "wait.h".
148         (gpgme_new): Initialize FDT.
149         (gpgme_set_io_cbs): New function.
150         (gpgme_get_io_cbs): Likewise.
151         (_gpgme_op_event_cb): Likewise.
152         * data.c (_gpgme_data_inbound_handler): Change return type to
153         void.  Drop PID argument.  Close FD on error and EOF.
154         (write_mem_data): Don't close FD here ...
155         (write_cb_data): ... or here ...
156         (_gpgme_data_outbound_handler): ... but here.  Change return type
157         to void.  Drop PID argument.
158         * context.h: Include "wait.h".
159         (struct gpgme_context_s): New members FDT and IO_CBS.
160         * op-support.c: New file.
161         * Makefile.am (libgpgme_la_SOURCES): Add op-support.c.
162         * ops.h: Add prototype for _gpgme_op_reset().
163         * decrypt.c (_gpgme_decrypt_start): New argument SYNCHRONOUS.  Use
164         _gpgme_op_reset.
165         (gpgme_op_decrypt_start): Add synchronous argument.
166         (gpgme_op_decrypt): Likewise.  Use _gpgme_wait_one instead
167         gpgme_wait.
168         * delete.c (gpgme_op_delete_start): Rename to ...
169         (_gpgme_op_delete_start): ... this.  New argument SYNCHRONOUS.
170         Use _gpgme_op_reset.  Make function static.
171         (gpgme_op_delete_start): Just a wrapper around
172         _gpgme_op_delete_start now.
173         (gpgme_op_delete): Add synchronous argument.  Use _gpgme_wait_one
174         instead gpgme_wait.
175         * encrypt.c: Include "wait.h".
176         (ggpgme_op_encrypt_start): Rename to ...
177         (_gpgme_op_encrypt_start): ... this.  New argument SYNCHRONOUS.
178         Use _gpgme_op_reset.  Make function static.
179         (gpgme_op_encrypt_start): Just a wrapper around
180         _gpgme_op_encrypt_start now.
181         (gpgme_op_encrypt): Add synchronous argument.  Use _gpgme_wait_one
182         instead gpgme_wait.
183         * encrypt_sign.c (gpgme_op_encrypt_sign_start): Rename to ...
184         (_gpgme_op_encrypt_sign_start): ... this.  New argument
185         SYNCHRONOUS.  Use _gpgme_op_reset.  Make function static.
186         (gpgme_op_encrypt_sign_start): Just a wrapper around
187         _gpgme_op_encrypt_sign_start now.
188         (gpgme_op_encrypt_sign): Add synchronous argument.  Use
189         _gpgme_wait_one instead gpgme_wait.
190         * export.c (gpgme_op_export_start): Rename to ...
191         (_gpgme_op_export_start): ... this.  New argument SYNCHRONOUS.
192         Use _gpgme_op_reset.  Make function static.
193         (gpgme_op_export_start): Just a wrapper around
194         _gpgme_op_export_start now.
195         (gpgme_op_export): Add synchronous argument.  Use _gpgme_wait_one
196         instead gpgme_wait.
197         * genkey.c (gpgme_op_genkey_start): Rename to ...
198         (_gpgme_op_genkey_start): ... this.  New argument SYNCHRONOUS.
199         Use _gpgme_op_reset.  Make function static.
200         (gpgme_op_genkey_start): Just a wrapper around
201         _gpgme_op_genkey_start now.
202         (gpgme_op_genkey): Add synchronous argument.  Use _gpgme_wait_one
203         instead gpgme_wait.
204         * import.c (gpgme_op_import_start): Rename to ...
205         (_gpgme_op_import_start): ... this.  New argument SYNCHRONOUS.
206         Use _gpgme_op_reset.  Make function static.
207         (gpgme_op_import_start): Just a wrapper around
208         _gpgme_op_import_start now.
209         (gpgme_op_import): Add synchronous argument.  Use _gpgme_wait_one
210         instead gpgme_wait.
211         * keylist.c (gpgme_op_keylist_start): Use _gpgme_op_reset.
212         (gpgme_op_keylist_ext_start): Likewise.
213         * sign.c (gpgme_op_sign_start): Rename to ...
214         (_gpgme_op_sign_start): ... this.  New argument SYNCHRONOUS.  Use
215         _gpgme_op_reset.  Make function static.
216         (gpgme_op_sign_start): Just a wrapper around _gpgme_op_sign_start
217         now.
218         (gpgme_op_sign): Add synchronous argument.  Use _gpgme_wait_one
219         instead gpgme_wait.
220         * trustlist.c (gpgme_op_trustlist_start): Use _gpgme_op_reset.
221         * verify.c (gpgme_op_verify_start): Rename to ...
222         (_gpgme_op_verify_start): ... this.  New argument SYNCHRONOUS.
223         Use _gpgme_op_reset.  Make function static.
224         (gpgme_op_verify_start): Just a wrapper around
225         _gpgme_op_verify_start now.
226         (gpgme_op_verify): Add synchronous argument.  Use _gpgme_wait_one
227         instead gpgme_wait.
228         * engine-gpgsm.c (iocb_data_t): New type.
229         (struct gpgsm_object_s): New member status_cb.  Replace input_fd
230         and input_data with input_cb.  Replace output_fd and output_data
231         with output_cb.  Replace message_fd and message_data with
232         message_cb.  New member io_cbs.
233         (_gpgme_gpgsm_new): Initialize all new members (and drop the old
234         ones).
235         (close_notify_handler): New variable POSSIBLY_DONE.  For each I/O
236         callback, check if it should be unregistered.  If all callbacks
237         have been unregistered, trigger GPGME_EVENT_DONE.
238         (_gpgme_gpgsm_release): Remove variable PID.  Use new variable
239         names to close the file descriptors.
240         (_gpgme_gpgsm_op_decrypt): Use new variable names,
241         (_gpgme_gpgsm_op_encrypt): Likewise.
242         (_gpgme_gpgsm_op_genkey): Likewise.
243         (_gpgme_gpgsm_op_import): Likewise.
244         (_gpgme_gpgsm_op_keylist): Likewise.
245         (_gpgme_gpgsm_op_keylist_ext): Likewise.
246         (_gpgme_gpgsm_op_sign): Likewise.
247         (_gpgme_gpgsm_op_verify): Likewise.
248         (gpgsm_status_handler): Drop argument PID.  Change return type to
249         void.  Close status pipe before returning because of EOF or error.
250         (_gpgme_gpgsm_add_io_cb): New function.
251         (_gpgme_gpgsm_start): Use _gpgme_gpgsm_add_io_cb to register
252         callback function.
253         (_gpgme_gpgsm_set_io_cbs): New function.
254         * engine-gpgsm.h: New prototype for _gpgme_gpgsm_set_io_cbs.
255         * engine.c (_gpgme_engine_set_io_cbs): New function.
256         * engine.h: New prototype for _gpgme_engine_set_io_cbs.
257
258 2002-06-04  Marcus Brinkmann  <marcus@g10code.de>
259
260         * Makefile.am (libgpgme_la_SOURCES): Remove mutex.h.
261
262 2002-06-03  Marcus Brinkmann  <marcus@g10code.de>
263
264         * key.c: Include <ctype.h>.
265         (_gpgme_key_append_name): Skip one more char when
266         processing escaped char.  Submitted by Marc Mutz <mutz@kde.org>.
267         Handle hexadecimal encodings.  Also reported by Marc.  Thanks!
268
269 2002-06-02  Marcus Brinkmann  <marcus@g10code.de>
270
271         * ath.h: Enable the _gpgme_ prefix.  Fix all those prefix macros.
272         * posix-sema.c: Use that prefix here.
273         * posix-io.c: Include "ath.h".
274         (_gpgme_io_read): Use _gpgme_ath_read instead read.
275         (_gpgme_io_write): Use _gpgme_ath_write instead write.
276         (_gpgme_io_waitpid): Use _gpgme_ath_waitpid instead waitpid.
277         (_gpgme_io_select): Use _gpgme_ath_select instead select.
278
279 2002-06-02  Marcus Brinkmann  <marcus@g10code.de>
280
281         * Makefile.am (ath_components): New variable.
282         (ath_components_pthread): Likewise.
283         (ath_components_pth): Likewise.
284         (system_components): Add ath_componentes.
285
286         * ath.h: New file.
287         * ath.c: Likewise.
288         * ath-pthread.c: Likewise.
289         * ath-pth.c: Likewise.
290         * posix-sema.c (_gpgme_sema_cs_enter): Rework to use the ATH
291         interface.
292         * mutex.h: Remove file.
293
294 2002-05-30  Werner Koch  <wk@gnupg.org>
295
296         * key.c (gpgme_key_get_string_attr): Return NULL when asking for
297         an issuer with IDX > 0.  We don't support altIssuerNames for now.
298
299 2002-05-22  Werner Koch  <wk@gnupg.org>
300
301         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist_ext): Aehmm, added
302         missing variable definition.  Oohh - Marcus was faster.
303
304 2002-05-22  Marcus Brinkmann  <marcus@gnu.org>
305
306         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist_ext): Fix last change.
307
308 2002-05-21  Werner Koch  <wk@gnupg.org>
309
310         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist)
311         (_gpgme_gpgsm_op_keylist_ext):  Pass the keylist mode to gpgsm.
312
313 2002-05-10  Werner Koch  <wk@gnupg.org>
314
315         * key.h (gpgme_key_s): Add OTRUST.
316         * keylist.c (set_ownertrust): New.
317         (keylist_colon_handler): Get the ownertrust value
318         * key.c (gpgme_key_get_string_attr,gpgme_key_get_ulong_attr):
319         Return that value.
320
321 2002-05-08  Marcus Brinkmann  <marcus@g10code.de>
322
323         * w32-util.c: New static variable GET_PATH_LOCK.
324         (_gpgme_get_gpg_path): Remove superfluous NULL initializer.
325         Take lock while determining path.
326         (_gpgme_get_gpgsm_path): Likewise.
327         * version.c (do_subsystem_inits): Set DONE to 1 after
328         initialization.
329         (gpgme_get_engine_info): New variable ENGINE_INFO_LOCK.  Take lock
330         while determining engine info.
331         * rungpg.c (_gpgme_gpg_get_version): New variable
332         GPG_VERSION_LOCK.  Take the lock while determining the program
333         version.
334         * posix-io.c: Include "sema.h".
335         (_gpgme_io_spawn): New variable FIXED_SIGNALS_LOCK.  Take the lock
336         while fixing the signals.
337         (_gpgme_io_select): Make READFDS and WRITEFDS non-static.
338         * key.c: Include "sema.h".  New globals KEY_CACHE_LOCK and
339         KEY_REF_LOCK.
340         (capabilities_to_string): Make STRINGS very const.
341         (_gpgme_key_cache_add): Lock the key cache.
342         (_gpgme_key_cache_get): Likewise.
343         (gpgme_key_ref, gpgme_key_release): Lock the key_ref_lock.
344         * import.c (append_xml_impinfo): Make IMPORTED_FIELDS and
345         IMPORT_RES_FIELDS very const.  Make FIELD and FIELD_NAME a litle
346         const.
347         * engine.c (_gpgme_engine_get_info): New variable
348         ENGINE_INFO_LOCK.  Take lock while determining engine info.
349         * engine-gpgsm.c: Include "sema.h".
350         (_gpgme_gpgsm_get_version): New variable GPGSM_VERSION_LOCK.  Take
351         lock while getting program version.
352
353 2002-05-08  Marcus Brinkmann  <marcus@g10code.de>
354
355         * debug.h: New file.
356         * Makefile.am (libgpgme_la_SOURCES): Add debug.h.
357         * util.h: Removed all prototypes and declarations related to
358         debugging.  Include "debug.h".
359
360         * debug.c (debug_level): Comment variable and remove superfluous
361         zero initializer.
362         (errfp): Likewise.
363         (_gpgme_debug_enabled): Function removed.
364         (struct debug_control_s): Definition removed.
365         (_gpgme_debug_level): Function removed.
366         (_gpgme_debug_begin): Rewritten to use vasprintf.  Accept a
367         pritnf-style format specification and a variable number of
368         arguments.
369         (_gpgme_debug_add): Rewritten using vasprintf.  Expect that format
370         starts out with "%s" for simplicity.
371         (_gpgme_debug_end): Rewritten using vasprintf.  Do not accept a
372         TEXT argument anymore.
373
374         * posix-io.c (_gpgme_io_select): Use new level argument for
375         DEBUG_BEGIN instead explicit if construct.
376
377         * debug.c (debug_init): Remove superfluous zero initializer,
378         remove volatile flag of INITIALIZED.  Do not use the
379         double-checked locking algorithm, it is fundamentally flawed and
380         will empty your fridge (on a more serious note, despite the
381         volatile flag it doesn't give you the guarantee you would expect,
382         for example on a DEC Alpha or an SMP machine.  The volatile only
383         serializes accesses to the volatile variable, but not to the other
384         variables).
385
386 2002-05-03  Werner Koch  <wk@gnupg.org>
387
388         * engine-gpgsm.c (_gpgme_gpgsm_new): Redirect any gpgsm error
389         output to /dev/null.
390
391         * verify.c (gpgme_get_sig_key): Set the protocol of the listctx.
392         * gpgme.c (gpgme_get_protocol): New.
393
394         * data.c (gpgme_data_write): Changed type of BUFFER to void*.
395         (gpgme_data_read): Ditto.
396
397         * verify.c (_gpgme_verify_status_handler): Handle TRUST_* status
398         lines so that a claim can be made without looking up the key.
399         (gpgme_get_sig_string_attr): New. 
400         (gpgme_get_sig_ulong_attr): New.
401
402         * gpgme.h (GpgmeAttr): Added GPGME_ATTR_SIG_STATUS.
403
404         * rungpg.h: Add new status codes from gpg 1.0.7 and formatted the
405         list to align with the status.h file from gnupg.
406
407         * gpgme.h (GpgmeSigStat): Add _GOOD_EXP and _GOOD_EXPKEY.
408         * verify.c (_gpgme_verify_status_handler, finish_sig): Handle
409         these new status codes.  Store the expiration time 
410
411 2002-04-27  Werner Koch  <wk@gnupg.org>
412
413         * gpgme.h (GpgmeData_Encoding): New.
414         * data.c (gpgme_data_get_encoding,gpgme_data_set_encoding): New.
415         * engine-gpgsm.c (map_input_enc): New. Use it in all local
416         functions where the INPUT command gets send.
417
418 2002-04-27  Marcus Brinkmann  <marcus@g10code.de>
419
420         * engine-gpgsm.c (_gpgme_gpgsm_op_verify): Close the output
421         descriptor only when we don't need it anymore.  Close the message
422         descriptor if we don't need it.
423
424 2002-04-26  Werner Koch  <wk@gnupg.org>
425
426         * Makefile.am (libgpgme_la_LIBADD): Use libtool libraries.
427
428 2002-04-25  Marcus Brinkmann  <marcus@g10code.de>
429
430         * rungpg.c (_gpgme_gpg_release): Call gpgme_data_release on
431         GPG->cmd.cb_data, not xfree.
432
433 2002-04-25  Marcus Brinkmann  <marcus@g10code.de>
434
435         * engine-gpgsm.c (_gpgme_gpgsm_new): Set the display, ttyname,
436         ttytype, lc_ctype and lc_messages options in the server.
437
438 2002-04-24  Marcus Brinkmann  <marcus@g10code.de>
439
440         * engine-gpgsm.c (map_assuan_error): Add new error codes.
441
442 2002-04-23  Werner Koch  <wk@gnupg.org>
443
444         * key.c (gpgme_key_get_ulong_attr): Swapped use of can_encrypt and
445         can_certify to return the requested values.
446
447 2002-04-23  Marcus Brinkmann  <marcus@g10code.de>
448
449         * gpgme.c (gpgme_get_progress_cb): Allow either return parameter
450         to be NULL.
451         (gpgme_get_passphrase_cb): Likewise.
452
453 2002-04-22  Marcus Brinkmann  <marcus@g10code.de>
454
455         * gpgme.c (gpgme_get_passphrase_cb): New function.
456         (gpgme_get_progress_cb): New function.
457         * gpgme.h: Add new prototypes for gpgme_get_passphrase_cb and
458         gpgme_get_progress_cb.
459
460 2002-03-28  Werner Koch  <wk@gnupg.org>
461
462         * gpgme.h (GpgmeAttr): Add values for issuer and chaining.
463         * key.h (gpgme_key_s): Add issuer and chaining elements for X509.
464         * keylist.c (keylist_colon_handler): Store them.
465         * key.c (gpgme_key_release): Free them.
466         (gpgme_key_get_as_xml,gpgme_key_get_string_attr): Print them.
467
468 2002-03-26  Werner Koch  <wk@gnupg.org>
469
470         * Makefile.am (libgpgme_la_SOURCES): Add mutex.h
471
472 2002-03-21  Werner Koch  <wk@gnupg.org>
473
474         * util.h [!HAVE_FOPENCOOKIE]: Make sure off_t and ssize_t are
475         defined.
476
477 2002-03-18  Marcus Brinkmann  <marcus@g10code.de>
478
479         * Makefile.am (system_components): New variable, set depending on
480         HAVE_DOSISH_SYSTEM.
481         (libgpgme_la_SOURCES): Use system_components.  Remove `syshdr.h'.
482         * syshdr.h: File removed.
483
484         * posix-io.c: Remove !HAVE_DOSISH_SYSTEM safeguard.  Clean up source.
485         * posix-sema.c: Likewise.
486         * posix-util.c: Likewise.
487
488         * w32-io.c: Remove HAVE_DOSISH_SYSTEM safeguard.
489         * w32-sema.c: Likewise.
490         * w32-util.c: Likewise.
491
492         * posix-io.c: Include `unistd.h', do not include `syshdr.h'.
493         * posix-sema.c: Likewise.
494         * w32-io.c: Include `io.h', do not include `syshdr.h'
495         * w32-sema.c: Likewise.
496         * w32-util.c: Likewise.
497         * data.c: Do not include `syshdr.h'.
498         * wait.c: Likewise.
499         * wait.h: Code cleanup.
500
501         * mutex.h: New file.
502         * posix-sema.c: Implement.
503
504 2002-03-08  Werner Koch  <wk@gnupg.org>
505
506         * util.h [!HAVE_FOPENCOOKIE]: Fixed type.  Thanks to Frank Heckenbach.
507
508 2002-03-07  Werner Koch  <wk@gnupg.org>
509
510         * gpgme.h (gpgme_op_keylist_ext_start): Add prototype.
511
512 2002-03-06  Marcus Brinkmann  <marcus@g10code.de>
513
514         * encrypt.c (_gpgme_encrypt_sym_status_handler): New function.
515         (gpgme_op_encrypt_start): New variable SYMMETRIC, set it if RECP
516         is null, and if it is set, use _gpgme_encrypt_sym_status_handler
517         as status handler and run _gpgme_passphrase_start.
518         * rungpg.c (_gpgme_gpg_op_encrypt): If RECP is zero, do symmetric
519         encryption.
520         * engine-gpgsm.c (_gpgme_gpgsm_op_encrypt): If RECP is zero,
521         return error value.
522
523         * rungpg.c (_gpgme_gpg_op_verify): Add "--" argument.
524
525 2002-03-03  Marcus Brinkmann  <marcus@g10code.de>
526
527         * passphrase.c (_gpgme_passphrase_status_handler): Also set the
528         error No_Passphrase if only a bad passphrase was provided.
529
530 2002-03-03  Marcus Brinkmann  <marcus@g10code.de>
531
532         * rungpg.c (_gpgme_gpg_op_verify): If TEXT is of mode
533         GPGME_DATA_MODE_IN, construct a command line that stores the
534         plaintext in TEXT.
535         * verify.c (gpgme_op_verify_start): Accept TEXT being
536         uninitialized, and in this case interpret SIG as a normal or
537         cleartext signature and TEXT as a return data object.
538         * engine-gpgsm.c (_gpgme_gpgsm_op_verify): Likewise.
539
540 2002-03-03  Marcus Brinkmann  <marcus@g10code.de>
541
542         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist_ext) [!ENABLE_GPGSM]:
543         Add stub function.
544
545 2002-02-28  Werner Koch  <wk@gnupg.org>
546
547         * key.h (subkey_s): New member expires_at.
548         * keylist.c (keylist_colon_handler): Set it here
549         * key.c (gpgme_key_get_as_xml,gpgme_key_get_ulong_attr): Return it.
550
551 2002-02-27  Marcus Brinkmann  <marcus@g10code.de>
552
553         * rungpg.h (_gpgme_gpg_op_keylist_ext): New prototype.
554         * rungpg.c (_gpgme_gpg_op_keylist_ext): New function.
555         * engine-gpgsm.h (_gpgme_gpgsm_op_keylist_ext): New prototype.
556         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist_ext): New function.
557         * engine.h (_gpgme_engine_op_keylist_ext): New prototype.
558         * engine.c (_gpgme_engine_op_keylist_ext): New function.
559         * keylist.c (gpgme_op_keylist_ext_start): New function.
560
561 2002-02-27  Marcus Brinkmann  <marcus@g10code.de>
562
563         * gpgme.h: Add new error code GPGME_Invalid_Recipient.
564         * encrypt.c (struct encrypt_result_s): New member invalid_recipients,
565         rename no_recipients to no_valid_recipients.
566         (_gpgme_encrypt_status_handler): Include error for invalid
567         recipients.
568         * engine-gpgsm.c (gpgsm_set_recipients): Change type of first
569         argument to GpgsmObject.  Use that to report back the status about
570         the recipients.
571
572 2002-02-26  Marcus Brinkmann  <marcus@g10code.de>
573
574         * verify.c (_gpgme_verify_status_handler): Fix the last change.
575
576 2002-02-25  Marcus Brinkmann  <marcus@g10code.de>
577
578         * engine.c (_gpgme_engine_op_encrypt_sign): New function.
579         * engine.h (_gpgme_engine_op_encrypt_sign): New prototype.
580         * rungpg.c (_gpgme_append_gpg_args_from_signers): New function.
581         (_gpgme_gpg_op_sign): Use that new function.
582         (_gpgme_gpg_op_encrypt_sign): New function.
583         * rungpg.h (_gpgme_gpg_op_encrypt_sign): New prototype. 
584         * gpgme.h (gpgme_op_encrypt_sign_start): New prototype.
585         (gpgme_op_encrypt_sign): Likewise.
586         * Makefile.am (libgpgme_la_SOURCES): Add encrypt-sign.c.
587         * ops.h (_gpgme_encrypt_status_handler): Add prototype.
588         (_gpgme_sign_status_handler): Add prototype.
589         * sign.c (sign_status_handler): Rename to ...
590         (_gpgme_sign_status_handler): ... this and make non-static.
591         * encrypt.c (encrypt_status_handler): Rename to ...
592         (_gpgme_encrypt_status_handler): ... this and make non-static.
593         * encrypt.c (gpgme_op_encrypt_start): Use new status handler name.
594         * sign.c (gpgme_op_sign_start): Likewise.
595         
596 2002-02-25  Marcus Brinkmann  <marcus@g10code.de>
597
598         * verify.c (_gpgme_verify_status_handler): Parse the args line to
599         see if the problem is due to a missing key, and report that back
600         to the user.
601
602 2002-02-25  Marcus Brinkmann  <marcus@g10code.de>
603
604         * context.h (struct gpgme_context_s): New member include_certs.
605         * gpgme.h (gpgme_set_include_certs): Add prototype.
606         (gpgme_get_include_certs): Likewise.
607         * gpgme.c (gpgme_set_include_certs): New function.
608         (gpgme_get_include_certs): Likewise.
609         (gpgme_new): Set include_certs to 1 (the default).
610         * engine.c (_gpgme_engine_op_sign): Accept new argument include_certs,
611         and pass it to _gpgme_gpgsm_op_sign.
612         * engine.h (_gpgme_engine_op_sign): Likewise for prototype.
613         * engine-gpgsm.c (_gpgme_gpgsm_op_sign): Accept new argument
614         include_certs and handle it.
615         * engine-gpgsm.h (_gpgme_gpgsm_start): Add new argument include_certs.
616         * sign.c (gpgme_op_sign_start): Add new argument to
617         _gpgme_engine_op_sign call.
618
619 2002-02-14  Werner Koch  <wk@gnupg.org>
620
621         * keylist.c (gpgme_op_keylist_start): Do not use a verbose listing.
622
623 2002-02-13  Werner Koch  <wk@gnupg.org>
624
625         * vasprintf.c, fopencookie.c: Add replacement functions.
626         * util.h: Add prototypes for them.
627
628 2002-02-09  Marcus Brinkmann  <marcus@g10code.de>
629
630         * engine-gpgsm.c (gpgsm_assuan_simple_command): Return 0 if we
631         reach the end of the function.
632
633 2002-02-09  Marcus Brinkmann  <marcus@g10code.de>
634
635         * genkey.c (gpgme_op_genkey_start): Fix logic in validity check.
636         (gpgme_op_genkey_start): Skip newlines after opening tag.
637
638         * engine-gpgsm.c (_gpgme_gpgsm_start): Remove cruft.
639
640 2002-02-08  Marcus Brinkmann  <marcus@g10code.de>
641
642         * genkey.c (gpgme_op_genkey_start): Allow PUBKEY and SECKEY to be
643         set, and pass them down to the crypto engine.
644         * engine-gpgsm.h (_gpgme_gpgsm_start): New arguments PUBKEY and SECKEY.
645         * engine.h: Likewise.
646         * rungpg.h (_gpgme_gpg_spawn): Likewise.
647         * engine.c (_gpgme_engine_op_genkey): Likewise.  Use those
648         arguments.
649         * rungpg.c (_gpgme_gpg_op_genkey): Likewise.  Complain if those
650         arguments are set.
651         * engine-gpgsm.c (_gpgme_gpgsm_op_genkey): Likewise.  Implement
652         function.
653
654         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist): Beautify comment.
655
656 2002-02-06  Marcus Brinkmann  <marcus@g10code.de>
657
658         * rungpg.c (_gpgme_gpg_op_keylist): Remove handling of keylist
659         mode (for now).
660
661 2002-02-06  Marcus Brinkmann  <marcus@g10code.de>
662
663         * wait.c (gpgme_wait): Add new argument STATUS, in which the
664         status of the returned context is returned.
665         (_gpgme_wait_on_condition): Rework the function a bit, to make it
666         aware of cancelled processes, and to allow to use gpgme_wait with
667         CTX being NULL (as documented in the source).
668         (struct proc_s): New member REPORTED.
669         * gpgme.h: Fix prototype.
670         * verify.c (gpgme_op_verify): Fix use of gpgme_wait.
671         * sign.c (gpgme_op_sign): Likewise.
672         * import.c (gpgme_op_import): Likewise.
673         * genkey.c (gpgme_op_genkey): Likewise.
674         * export.c (gpgme_op_export): Likewise.
675         * encrypt.c (gpgme_op_encrypt): Likewise.
676         * delete.c (gpgme_op_delete): Likewise.
677         * decrypt-verify.c (gpgme_op_decrypt_verify): Likewise.
678
679 2002-02-06  Marcus Brinkmann  <marcus@g10code.de>
680
681         * gpgme.c (gpgme_set_keylist_mode): Possibly return an error
682         value.
683         (gpgme_get_keylist_mode): New function.
684         (gpgme_new): Set the default for keylist_mode member of CTX.
685
686         * gpgme.h (gpgme_set_keylist_mode): Fix prototype.
687         (gpgme_get_keylist_mode): New prototype.
688         (GPGME_KEYLIST_MODE_LOCAL): New macro.
689         (GPGME_KEYLIST_MODE_EXTERN): Likewise..
690
691 2002-02-02  Marcus Brinkmann  <marcus@g10code.de>
692
693         This patch has gotten a bit large... mmh.  The main thing that
694         happens here is that error values are now not determined in the
695         operation function after gpgme_wait completed, but in the status
696         handler when EOF is received.  It should always be the case that
697         either an error is flagged or EOF is received, so that after a
698         gpgme_wait you should never have the situation that no error is
699         flagged and EOF is not received.  One problem is that the engine
700         status handlers don't have access to the context, a horrible
701         kludge works around this for now.  All errors that happen during a
702         pending operation should be catched and reported in ctx->error,
703         including out-of-core and cancellation.  This rounds up neatly a
704         couple of loose ends, and makes it possible to pass up any errors
705         in the communication with the backend as well.  As a bonus, there
706         will be a function to access gpgme->wait, so that the operations
707         can truly be implemented with their _start function.
708
709         * engine-gpgsm.c (gpgsm_status_handler): Horrible kludge to report
710         error back to the context.
711         * rungpg.c (gpg_status_handler): Same horrible kludge applied here.
712
713         * engine-gpgsm.c (gpgsm_assuan_simple_command): Add error checking.
714
715         * wait.c (_gpgme_wait_on_condition): If canceled, set CTX->error
716         to a value indication that.
717
718         * verify.c (add_notation): Set error, not out_of_core.
719         (finish_sig): Likewise.
720         (gpgme_op_verify_start): Don't clear out_of_core.
721         (_gpgme_verify_status_handler): At EOF, clean up the notation data.
722         (gpgme_op_verify): And don't do it here.
723
724         * trustlist.c (trustlist_status_handler): Check error, not out_of_core.
725         (gpgme_op_trustlist_start): Don't clear out_of_core.
726         (gpgme_op_trustlist_next): Check error, not out_of_core.
727         (gpgme_op_trustlist_end): Likewise.
728
729         * ops.h (test_and_allocate_result): New macro.
730         (_gpgme_passphrase_result): Remove prototype.
731         * delete.c (gpgme_op_delete): Return error from context.
732         (delete_status_handler): Use macro test_and_allocate_result.
733         Perform error checking at EOF.
734         (gpgme_op_delete_start): Release result.
735         * passphrase.c (_gpgme_passphrase_status_handler): Use macro
736         test_and_allocate_result, and perform error checking here.
737         (_gpgme_passphrase_result): Function removed.
738         * sign.c (gpgme_op_sign_start): Do not set out_of_core to zero.
739         (gpgme_op_sign): Just return the error value from the context.
740         (sign_status_handler): Only progress if no error is set yet.  If
741         we process an EOF, set the resulting error value (if any).
742         * decrypt.c (_gpgme_decrypt_result): Function removed.
743         (create_result_struct): Function removed.
744         (_gpgme_decrypt_status_handler): Use macro test_and_allocate_result,
745         caclulate error on EOF, do not progress with errors.
746         (_gpgme_decrypt_start): Do not set out_of_core to zero.
747         (gpgme_op_decrypt): Just return the error value from the context.
748         * encrypt.c (encrypt_status_handler): Perform the error checking
749         here.
750         (gpgme_op_encrypt_start): Do not clear out_of_core.
751         * export.c (export_status_handler): Return if error is set in context.
752         (gpgme_op_export_start): Release result.
753         (gpgme_op_export): Return error from context.
754         * decrypt-verify.c (gpgme_op_decrypt_verify): Return the error in
755         the context.
756         * genkey.c (genkey_status_handler): Use macro
757         test_and_allocate_result.  Perform error checking at EOF.
758         (gpgme_op_genkey): Just return the error from context.
759         * import.c (gpgme_op_import): Return the error from context.
760         (import_status_handler): Use macro test_and_allocate_result.
761         * keylist.c (gpgme_op_keylist_start): Do not clear out_of_core.
762         (gpgme_op_keylist_next): Return error of context.
763         (keylist_colon_handler): Set error instead out_of_code.
764         (finish_key): Likewise.
765
766         * context.h: Remove member out_of_core, add member error.
767         * gpgme.c (_gpgme_release_result): Clear error flag.
768
769         * engine.h (_gpgme_engine_get_error): New prototype.
770         * engine.c (_gpgme_engine_get_error): New function.
771         * engine-gpgsm.c (_gpgme_gpgsm_get_error): New function.
772
773         * engine-gpgsm.c (map_assuan_error): New function.
774         (gpgsm_assuan_simple_command): Change return type to GpgmeError,
775         use the new function to map error values.
776         (gpgsm_set_fd): Change return type tp GpgmeError.
777         (_gpgme_gpgsm_op_decrypt): Change type of ERR to GpgmeError.
778         (gpgsm_set_recipients): Likewise.  Change type of return value
779         equivalently.  Adjust error values.
780         (_gpgme_gpgsm_op_import): Likewise.
781         (_gpgme_gpgsm_op_sign): Likewise.
782         (struct gpgsm_object_s): New member error.
783         (gpgsm_status_handler): Set error if error occurs.  Determine
784         error number from ERR line received.  If assuan_read_line fails,
785         terminate the connection.
786
787 2002-02-01  Marcus Brinkmann  <marcus@g10code.de>
788
789         * Makefile.am (MOSTLYCLEANFILES): New variable.
790
791 2002-02-01  Marcus Brinkmann  <marcus@g10code.de>
792
793         * engine-gpgsm.c (gpgsm_status_handler): At error, terminate the
794         connection to the server.
795
796 2002-01-31  Marcus Brinkmann  <marcus@g10code.de>
797
798         * rungpg.h: Add STATUS_KEY_CREATED.
799
800         * progress.c: New file.
801         * Makefile.am (libgpgme_la_SOURCES): Add progress.c.
802
803         * genkey.c (genkey_status_handler): Use
804         _gpgme_progress_status_handler.  Add check for status.
805         (struct genkey_result_s): New structure.
806         (_gpgme_release_genkey_result): New function.
807         (gpgme_op_genkey): Check for error.
808         * gpgme.c (_gpgme_release_result): Call
809         _gpgme_release_genkey_result.
810         * ops.h (_gpgme_release_genkey_result): Add prototype.
811         * types.h (GenKeyResult): New type.
812         * context.h (gpgme_context_s): Add GenKeyResult to member result.
813
814 2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
815
816         * gpgme.c (_gpgme_release_result): Call
817         _gpgme_release_delete_result.
818         * ops.h (_gpgme_release_delete_result): Add prototype.
819         * types.h (DeleteResult): New type.
820         * context.h (gpgme_context_s): Add DeleteResult to member result.
821
822         * delete.c (enum delete_problem): New type.
823         (struct delete_result_s): New structure.
824         (_gpgme_release_delete_result): New function.
825         (delete_status_handler): Implement more status codes.
826         (gpgme_op_delete): Return error on failure.
827
828         * import.c (MAX_IMPORTED_FIELDS): Bump up to 14.
829
830 2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
831
832         * import.c (struct import_result_s): New structure.
833         (_gpgme_release_import_result): New function.
834         (append_xml_impinfo): Likewise.
835         (import_status_handler): Implement.
836         * gpgme.c (_gpgme_release_result): Add call to
837         _gpgme_release_import_result.
838         * ops.h (_gpgme_release_import_result): Add prototype.
839         * types.h (ImportResult): New type.
840         * context.h (gpgme_context_s): Add ImportResult to member result.
841
842         * encrypt.c (gpgme_op_encrypt): Code clean up.
843
844 2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
845
846         * gpgme.h: Add lots of comment and fix the formatting.  Add
847         gpgme_trustlist_end prototype.
848
849 2002-01-29  Marcus Brinkmann  <marcus@g10code.de>
850
851         * gpgme.h: Add new type GpgmeIdleFunc.  Change type of
852         gpgme_register_idle to return and accept this type.
853         * wait.c (gpgme_register_idle): Fix type.
854         Save and return old value of idle_function.
855
856 2002-01-29  Werner Koch  <wk@gnupg.org>
857
858         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist): Implement secret only mode.
859
860         * keylist.c (keylist_colon_handler): Add support for the new "crs"
861         record type.
862
863 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
864
865         * engine-gpgsm.c (_gpgme_gpgsm_release): Call assuan_disconnect,
866         not assuan_pipe_disconnect.
867
868         * Makefile.am (libgpgme_la_LIBADD): Change to link assuan and
869         jnlib (needed by assuan) statically into libgpgme.  Linking a
870         static library into a shared library this way is not portable.
871
872 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
873
874         * gpgme.h (GpgmePassphraseCb): Change type of R_HD from void* to
875         void**.
876
877 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
878
879         * data.c (gpgme_data_new_from_filepart): Change type of LENGTH
880         from off_t to size_t.
881         * gpgme.h: Likewise.
882
883 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
884
885         * wait.c (_gpgme_wait_on_condition): If the process finished,
886         reset the pending flag.  Also if the operation was cancelled.
887
888         (struct proc_s): Rename READY to DONE.
889         (wait_item_s): Likewise.
890         (set_process_ready): Rename to ...
891         (set_process_done): ... this.
892         (_gpgme_remove_proc_from_wait_queue): Call set_process_done
893         instead set_process_ready.
894         (_gpgme_wait_on_condition): Likewise.
895         (do_select): Rename READY to DONE.
896
897         * verify.c (gpgme_op_verify): Do not set pending to zero here.
898         * sign.c (gpgme_op_sign): Likewise.
899         * import.c (gpgme_op_import): Likewise.
900         * genkey.c (gpgme_op_genkey): Likewise.
901         * export.c (gpgme_op_export): Likewise.
902         * encrypt.c (gpgme_op_encrypt): Likewise.
903         * delete.c (gpgme_op_delete): Likewise.
904         * decrypt-verify.c (gpgme_op_decrypt_verify): Likewise.
905         * decrypt.c (gpgme_op_decrypt): Likewise.
906
907 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
908
909         * export.c: Cleanup.
910
911 2002-01-15  Marcus Brinkmann  <marcus@g10code.de>
912
913         * trustlist.c: Various source clean ups.
914         (my_isdigit): Removed.
915         (gpgme_op_trustlist_end): New function.
916
917 2002-01-13  Marcus Brinkmann  <marcus@g10code.de>
918
919         * gpgme.c: Various source clean ups, like renaming C to CTX where
920         appropriate.
921         (gpgme_new): Clear R_CTX before starting the work.
922         (my_isdigit): Removed.
923         (my_isxdigit): Likewise.
924
925         * data.c: Various source clean ups.
926         (gpgme_data_new_from_mem): Check BUFFER after clearing R_DH.
927         (gpgme_data_new_with_read_cb): Similar for READ_CB.
928         (gpgme_data_new_from_file): Loop over fread while EINTR.
929         (gpgme_data_new_from_filepart): Rediddled a bit.  Allow LENGTH to
930         be zero.  Loop over fread while EINTR.
931
932         (my_isdigit): Removed.
933         (my_isxdigit): Likewise.
934
935 2001-12-21  Marcus Brinkmann  <marcus@g10code.de>
936
937         * engine-gpgsm.c (_gpgme_gpgsm_new): Replace General_Error with
938         Pipe_Error where appropriate.
939
940 2001-12-19  Marcus Brinkmann  <marcus@g10code.de>
941
942         * engine.c: Include `string.h'.  Reported by Stéphane Corthésy.
943
944         * version.c (get_engine_info): Remove prototype.
945
946 2001-12-19  Marcus Brinkmann  <marcus@g10code.de>
947
948         * engine-gpgsm.c (_gpgme_gpgsm_new): New variable CHILD_FDS.
949         Fill it with the servers fds, and pass it to assuan_pipe_connect.
950
951 2001-12-18  Marcus Brinkmann  <marcus@g10code.de>
952
953         * keylist.c (gpgme_op_keylist_end): New function.
954         * gpgme.h (gpgme_op_keylist_end): New prototype.
955
956         * engine.h (gpgme_engine_check_version): Move prototype to ...
957         * gpgme.h (gpgme_engine_check_version): ... here.
958
959         * genkey.c (gpgme_op_genkey_start): Remove unused variable.
960
961 2001-12-18  Marcus Brinkmann  <marcus@g10code.de>
962
963         * version.c (gpgme_get_engine_info): Reimplemented.
964         (gpgme_check_engine): Reimplemented.
965         (_gpgme_compare_versions): Return NULL if MY_VERSION is NULL.
966
967         * engine.c: Include `io.h'.
968         (gpgme_engine_get_info): New function.
969         * engine.h (gpgme_engine_check_version, _gpgme_engine_get_info):
970         Add prototype.
971
972 2001-12-18  Marcus Brinkmann  <marcus@g10code.de>
973
974         * rungpg.c (struct reap_s, reap_list, reap_list_lock): Moved to ...
975         * engine.c (struct reap_s, reap_list, reap_list_lock): ... here.
976         Include `time.h', `sys/types.h', `assert.h', and `sema.h'.
977
978         * rungpg.c (_gpgme_engine_add_child_to_reap_list): New function.
979         (do_reaping, _gpgme_gpg_housecleaning): Moved to ...
980         * engine.c (do_reaping, _gpgme_engine_housecleaning): ... here.
981         * rungpg.c (_gpgme_gpg_release): Replace code that is now in its
982         own function by call to _gpgme_engine_add_child_to_reap_list().
983
984         * wait.c: Include `engine.h'.
985         (run_idle): Call _gpgme_engine_housecleaning(), not
986         _gpgme_gpg_housecleaning().
987         
988 2001-12-18  Marcus Brinkmann  <marcus@g10code.de>
989
990         * key.c (_gpgme_key_append_name): Append, not prepend, the uid.
991         Initialize the next field of the uid structure.
992         (gpgme_key_get_as_xml): Do not list last uid first.
993
994 2001-12-17  Marcus Brinkmann  <marcus@g10code.de>
995
996         * engine-gpgsm.c (_gpgme_gpgsm_set_colon_line_handler): New
997         function [!ENABLE_GPGSM].
998
999 2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
1000
1001         * engine-gpgsm.c (_gpgme_gpgsm_op_verify): Put TEXT into
1002         message_data, not SIG.
1003         (_gpgme_gpgsm_op_sign): Use `--detached', not `--detach'.
1004
1005         * sign.c (sign_status_handler): Call
1006         _gpgme_passphrase_status_handler early.
1007
1008 2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
1009
1010         * engine-gpgsm.c: Revert last change.
1011
1012 2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
1013
1014         * engine-gpgsm.c (gpgsm_status_handler): Freeze the output file
1015         handler when ending this operation, otherwise the wait function
1016         will sit on it.
1017
1018 2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
1019
1020         * engine-gpgsm.c (struct gpgsm_object_s): New member colon.attic.
1021         (_gpgme_gpgsm_new): Initialize some more members.
1022         (_gpgme_gpgsm_release): Free the colon line handler's attic line.
1023         (gpgsm_status_handler): Rework the inline-data processing.
1024
1025 2001-12-13  Marcus Brinkmann  <marcus@g10code.de>
1026
1027         * rungpg.c (_gpgme_gpg_spawn): Do not add the fds to the child
1028         list that are not dup'ed, for those the close-on-exec flag is set
1029         now.
1030         * version.c (_gpgme_get_program_version): Remove first entry in
1031         CFD, as the close-on-exec flag is now set for this fd.
1032
1033 2001-12-13  Marcus Brinkmann  <marcus@g10code.de>
1034
1035         * engine-gpgsm.c (_gpgme_gpgsm_op_encrypt): Do not add `armor'
1036         option to `ENCRYPT'.
1037         * engine-gpgsm.c (gpgsm_set_recipients): Free LINE when returning
1038         successfully.
1039
1040 2001-12-13  Marcus Brinkmann  <marcus@g10code.de>
1041
1042         * engine-gpgsm.c (close_notify_handler): New function.
1043         (_gpgme_gpgsm_new): Manage the file descriptors a
1044         bit differently.  Do not set close-on-exec flags.
1045         (_gpgme_gpgsm_op_decrypt): Do not set message_fd
1046         to -1, this is done by the close handler.
1047         (_gpgme_gpgsm_op_encrypt): Likewise.
1048         (_gpgme_gpgsm_op_import): Likewise (also for output_fd).
1049         (_gpgme_gpgsm_op_keylist): Likewise (also for input_fd and output_fd).
1050         (_gpgme_gpgsm_op_sign): Likewise.
1051         (_gpgme_gpgsm_op_verify): Likewise, but for output_fd.
1052
1053         * posix-io.c (_gpgme_io_pipe): Set the close-on-exec flag for the
1054         non-inherited file descriptor index of the pipe.
1055
1056 2001-12-13  Werner Koch  <wk@gnupg.org>
1057
1058         * engine-gpgsm.c (_gpgme_gpgsm_set_colon_line_handler): New.
1059         (gpgsm_status_handler): Pass datalines to a colon handler
1060         * engine.c (_gpgme_engine_set_colon_line_handler): Set the colon
1061         handler for gpgsm.
1062
1063         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist): Allow NULL for
1064         pattern.
1065         (gpgsm_assuan_simple_command): Removed underscore from
1066         assuan_write_line.
1067         (_gpgme_gpgsm_start): Ditto.
1068         (gpgsm_assuan_simple_command): Replaced interal Assuan read
1069         function by the new assuan_read_line.  Removed the use of the
1070         internal header.
1071         (gpgsm_status_handler): Ditto. Use the new assuan_pending_line.
1072         (_gpgme_gpgsm_start): Use the documented way to get an fd from
1073         assuan.
1074
1075         * keylist.c (keylist_colon_handler): Handle "crt" records
1076         * key.h (gpgme_key_s): Add an x509 flag.
1077         * key.c (parse_x509_user_id): New.
1078         (_gpgme_key_append_name): Handle x.509 names.
1079
1080 2001-12-05  Marcus Brinkmann  <marcus@g10code.de>
1081
1082         * engine-gpgsm.c (gpgsm_status_handler): Make it work with current
1083         version of assuan.
1084
1085 2001-12-05  Marcus Brinkmann  <marcus@g10code.de>
1086
1087         * engine-gpgsm.c (gpgsm_set_fd): Accept one more argument OPT.
1088         (_gpgme_gpgsm_op_encrypt): Pass armor argument to gpgsm_set_fd for
1089         output descriptor.
1090         (_gpgme_gpgsm_op_sign): Likewise.
1091
1092 2001-12-05  Marcus Brinkmann  <marcus@g10code.de>
1093
1094         * keylist.c (gpgme_op_keylist_next): Set pending to 0 if EOF
1095         occurs.
1096
1097 2001-11-26  Marcus Brinkmann  <marcus@g10code.de>
1098
1099         * engine-gpgsm.c (_gpgme_gpgsm_op_sign): Fix stupid typo.
1100
1101 2001-11-24  Marcus Brinkmann  <marcus@g10code.de>
1102
1103         * engine-gpgsm.c (gpgsm_status_handler): Don't break if bsearch fails.
1104         Deal with assuan read line returning more than one line (for now).
1105
1106 2001-11-23  Marcus Brinkmann  <marcus@g10code.de>
1107
1108         * engine-gpgsm.c (_gpgme_gpgsm_op_sign): Implement it according to
1109         the current protocol definition.
1110
1111 2001-11-23  Marcus Brinkmann  <marcus@g10code.de>
1112
1113         * engine-gpgsm.c (_gpgme_gpgsm_new): Set CLOEXEC flag for parent
1114         ends of the pipe.
1115
1116 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
1117
1118         * engine-gpgsm.c: Include stdlib.h and string.h.  Also include,
1119         for now, rungpg.h and status-table.h.
1120         (gpgsm_status_handler): Implement more of the status handler.
1121
1122 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
1123
1124         * engine.c (_gpgme_engine_op_decrypt): Implement CMS case.
1125         (_gpgme_engine_op_delete): Likewise.
1126         (_gpgme_engine_op_encrypt): Likewise.
1127         (_gpgme_engine_op_export): Likewise.
1128         (_gpgme_engine_op_genkey): Likewise.
1129         (_gpgme_engine_op_keylist): Likewise.
1130         (_gpgme_engine_op_sign): Likewise.
1131         (_gpgme_engine_op_trustlist): Likewise.
1132
1133         * engine-gpgsm.c (_gpgme_gpgsm_op_encrypt): New function.
1134         (gpgsm_assuan_simple_command): Likewise.
1135         (gpgsm_set_recipients): Likewise.
1136         (gpgsm_set_fd): Reimplement using gpgsm_assuan_simple_command.
1137         (_gpgme_gpgsm_op_delete): New function.
1138         (_gpgme_gpgsm_op_export): Likewise.
1139         (_gpgme_gpgsm_op_genkey): Likewise.
1140         (_gpgme_gpgsm_op_sign): Likewise.
1141         (_gpgme_gpgsm_op_keylist): Likewise.
1142         (_gpgme_gpgsm_op_trustlist): Likewise.
1143         (_gpgme_gpgsm_release): Release command.
1144         (_gpgme_gpgsm_op_decrypt): Allocate command.
1145         (_gpgme_gpgsm_op_import): Likewise.
1146         (gpgsm_status_handler): Also treat `ERR' strings as EOF.
1147
1148 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
1149
1150         * gpgme.h (gpgme_set_protocol): New prototype.
1151
1152 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
1153
1154         * engine-gpgsm.c (_gpgme_gpgsm_op_decrypt): New function.
1155         (_gpgme_gpgsm_op_import): Likewise.
1156
1157 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
1158
1159         * engine-gpgsm.c: Shuffle around header inclusion a bit, to still
1160         keep them seperate.
1161         (_gpgme_set_status_handler) [!ENABLE_GPGSM]: New function.
1162
1163 2001-11-22  Werner Koch  <wk@gnupg.org>
1164
1165         * engine-gpgsm.c: Include more headers so that NULL and mk_error
1166         is defined even with an undefined GPGSM_PATH.
1167
1168 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
1169
1170         * rungpg.c (gpg_inbound_handler, write_mem_data, write_cb_data,
1171         gpg_outbound_handler): Moved to ...
1172         * data.c (_gpgme_data_inbound_handler, write_mem_data,
1173         write_cb_data, _gpgme_data_outbound_handler): ... here.  Make the
1174         _gpgme_* ones non-static.
1175         * data.c: Include io.h.
1176
1177         * ops.h (_gpgme_data_inbound_handler): New prototype.
1178         (_gpgme_data_outbound_handler): Likewise.
1179         (_gpgme_gpg_spawn): Use these new functions.
1180
1181         * engine-gpgsm.h (_gpgme_gpgsm_op_decrypt, _gpgme_gpgsm_op_delete,
1182         _gpgme_gpgsm_op_encrypt, _gpgme_gpgsm_op_export,
1183         _gpgme_gpgsm_op_genkey, _gpgme_gpgsm_op_import,
1184         _gpgme_gpgsm_op_keylist, _gpgme_gpgsm_op_sign,
1185         _gpgme_gpgsm_op_trustlist, _gpgme_gpgsm_op_verify,
1186         _gpgme_gpgsm_start, _gpgme_gpgsm_set_status_handler): New prototype.
1187         Include <rungpg.h> for status handler function.
1188
1189         * engine-gpgsm.c (struct gpgsm_object_s): New members input_fd,
1190         input_data, output_fd, output_data, message_fd, message_data, command
1191         and status.
1192         (_gpgme_gpgsm_new): Open input, output and message pipes before
1193         connecting to the client.  Close server's ends afterwards.
1194         (_gpgme_gpgsm_release): Close open file descriptors.  Remove
1195         server process from wait queue.
1196         (_gpgme_gpgsm_op_verify, _gpgme_gpgsm_start,
1197         _gpgme_gpgsm_set_status_handler, gpgms_status_handler): New function.
1198         
1199         * engine.c (_gpgme_engine_start): Implement for GPGME_PROTOCOL_CMS.
1200         (_gpgme_engine_set_status_handler): Likewise.
1201         (_gpgme_engine_op_verify): Likewise.
1202
1203 2001-11-21  Marcus Brinkmann  <marcus@g10code.de>
1204
1205         * context.h: Do not include rungpg.h, but engine.h.
1206         (struct gpgme_context_s): Replace member gpg with engine.
1207         * gpgme.c (gpgme_release): Release engine, not gpg.
1208
1209         * recipient.c (_gpgme_append_gpg_args_from_recifgpients): Function
1210         moved ...
1211         * rungpg.c (_gpgme_append_gpg_args_from_recipients): ... here.
1212         Make static, change order of arguments, and return an error value.
1213         * ops.h (_gpgme_append_gpg_args_from_recipients): Removed prototype.
1214
1215         * rungpg.h (_gpgme_gpg_op_verify): Add prototype.
1216         (_gpgme_gpg_op_encrypt): Likewise.
1217         (_gpgme_gpg_op_decrypt): Likewise.
1218         (_gpgme_gpg_op_delete): Likewise.
1219         (_gpgme_gpg_op_export): Likewise.
1220         (_gpgme_gpg_op_genkey): Likewise.
1221         (_gpgme_gpg_op_import): Likewise.
1222         (_gpgme_gpg_op_keylist): Likewise.
1223         (_gpgme_gpg_op_sign): Likewise.
1224         (_gpgme_gpg_op_trustlist): Likewise.
1225         * rungpg.c (_gpgme_gpg_op_verify): New function.
1226         (_gpgme_gpg_op_encrypt): Likewise.
1227         (_gpgme_gpg_op_decrypt): Likewise.
1228         (_gpgme_gpg_op_delete): Likewise.
1229         (_gpgme_gpg_op_export): Likewise.
1230         (_gpgme_gpg_op_genkey): Likewise.
1231         (_gpgme_gpg_op_import): Likewise.
1232         (_gpgme_gpg_op_keylist): Likewise.
1233         (_gpgme_gpg_op_sign): Likewise.
1234         (_gpgme_gpg_op_trustlist): Likewise.
1235
1236         * engine.h (_gpgme_engine_set_status_handler): Add prototype.
1237         (_gpgme_engine_set_command_handler): Likewise.
1238         (_gpgme_engine_set_colon_line_handler): Likewise.
1239         (_gpgme_engine_op_decrypt): Likewise.
1240         (_gpgme_engine_op_delete): Likewise.
1241         (_gpgme_engine_op_encrypt): Likewise.
1242         (_gpgme_engine_op_export): Likewise.
1243         (_gpgme_engine_op_genkey): Likewise.
1244         (_gpgme_engine_op_import): Likewise.
1245         (_gpgme_engine_op_keylist): Likewise.
1246         (_gpgme_engine_op_sign): Likewise.
1247         (_gpgme_engine_op_trustlist): Likewise.
1248         (_gpgme_engine_op_verify): Likewise.
1249         (_gpgme_engine_start): Likewise.
1250         * engine.c (_gpgme_engine_set_status_handler): New function.
1251         (_gpgme_engine_set_command_handler): Likewise.
1252         (_gpgme_engine_set_colon_line_handler): Likewise.
1253         (_gpgme_engine_op_decrypt): Likewise.
1254         (_gpgme_engine_op_delete): Likewise.
1255         (_gpgme_engine_op_encrypt): Likewise.
1256         (_gpgme_engine_op_export): Likewise.
1257         (_gpgme_engine_op_genkey): Likewise.
1258         (_gpgme_engine_op_import): Likewise.
1259         (_gpgme_engine_op_keylist): Likewise.
1260         (_gpgme_engine_op_sign): Likewise.
1261         (_gpgme_engine_op_trustlist): Likewise.
1262         (_gpgme_engine_op_verify): Likewise.
1263         (_gpgme_engine_start): Likewise.
1264
1265         * verify.c (gpgme_op_verify_start): Reimplement in terms of above
1266         functions.
1267         * encrypt.c (gpgme_op_encrypt_start): Likewise.
1268         * decrypt.c (_gpgme_decrypt_start): Likewise.
1269         * passphrase.c (_gpgme_passphrase_start): Likewise.
1270         * keylist.c (gpgme_op_keylist_start): Likewise.
1271
1272 2001-11-20  Marcus Brinkmann  <marcus@g10code.de>
1273
1274         * types.h: Add types EngineObject and GpgsmObject.
1275
1276         * Makefile.am (libgpgme_la_SOURCES): Add engine-gpgsm.h,
1277         engine-gpgsm.c, engine.h and engine.c.
1278         * engine.h: New file.
1279         * engine.c: Likewise.
1280         * engine-gpgsm.h: Likewise.
1281         * engine-gpgsm.c: Likewise.
1282         
1283         * rungpg.c (_gpgme_gpg_get_version): New function.
1284         (_gpgme_gpg_check_version): Likewise.
1285         * rungpg.h: Add prototypes for _gpgme_gpg_get_version and
1286         _gpgme_gpg_check_version.
1287
1288         * version.c (compare_versions): Rename to ...
1289         (_gpgme_compare_versions): ... this.  Make non-static.
1290         (gpgme_check_version): Use _gpgme_compare_versions rather than
1291         compare_versions.
1292         (gpgme_check_engine): Likewise.
1293         * ops.h (_gpgme_get_program_version): Add prototype.
1294
1295 2001-11-20  Marcus Brinkmann  <marcus@g10code.de>
1296
1297         * Makefile.am (libgpgme_la_INCLUDES): Remove obsolete directive.
1298         (AM_CPPFLAGS): New directive [BUILD_ASSUAN].
1299         (libgpgme_la_LIBADD): Likewise.
1300
1301 2001-11-20  Marcus Brinkmann  <marcus@g10code.de>
1302
1303         * version.c: Remove global variables lineno and
1304         tmp_engine_version.
1305         (version_handler): Removed.
1306         (_gpgme_get_program_version): New function.
1307         (get_engine_info): Don't use context and version_handler,
1308         but _gpgme_get_program_version.
1309         * ops.h (_gpgme_get_program_version): Add prototype for
1310         _gpgme_get_program_version (we expect to use it elsewhere soon).
1311
1312 2001-11-18  Marcus Brinkmann  <marcus@g10code.de>
1313
1314         * version.c (get_engine_info): If GnuPG is not available, return
1315         an error message.
1316         * posix-util.c (_gpgme_get_gpg_path): Allow GPG_PATH to be
1317         undefined.
1318         (_gpgme_get_gpgsm_path): New function.
1319         * w32-util.c (find_program_in_registry): New static function.
1320         (_gpgme_get_gpg_path): Allow GPG_PATH to be undefined.  Rework
1321         to use find_program_in_registry.
1322         (_gpgme_get_gpgsm_path): New function.
1323         (util.h): Prototype _gpgme_get_gpgsm_path).
1324         * rungpg.c (_gpgme_gpg_spawn): Verify that _gpgme_get_gpg_path()
1325         returns non-null.
1326
1327 2001-11-16  Marcus Brinkmann  <marcus@g10code.de>
1328
1329         * decrypt-verify.c: New file.
1330         * Makefile.am (libgpgme_la_SOURCES): Add decrypt-verify.c.
1331         * types.h: Add decrypt-verify types.
1332         * ops.h: Likewise.
1333         * context.h: Add result type for decrypt-verify.
1334         * gpgme.h: Add decrypt-verify prototypes.
1335
1336         * decrypt.c (decrypt_status_handler): Renamed to ...
1337         (_gpgme_decrypt_status_handler): ... this.  Make non-static.
1338         (_gpgme_decrypt_start): New function, derived from
1339         gpgme_op_decrypt_start.
1340         (gpgme_op_decrypt_start): Reimplement in terms of
1341         _gpgme_decrypt_start.
1342         (_gpgme_decrypt_result): New function to retrieve error value.
1343         (gpgme_op_decrypt): Use _gpgme_decrypt_result.
1344         * ops.h: Add prototypes for new functions.
1345
1346         * verify.c (verify_status_handler): Renamed to ...
1347         (_gpgme_verify_status_handler): ... this.  Make non-static.
1348         (gpgme_op_verify_start): Use new function name.
1349         (intersect_stati): Renamed to ...
1350         (_gpgme_intersect_stati): ... this.  Make non-static.
1351         (gpgme_op_verify): Use new name.
1352         * ops.h: Add prototypes for new functions.
1353
1354 2001-11-16  Marcus Brinkmann  <marcus@g10code.de>
1355
1356         * passphrase.c: New file.
1357         * Makefile.am (libgpgme_la_SOURCES): Add passphrase.c.
1358         * ops.h (_gpgme_passphrase_result): Add prototypes from
1359         passphrase.c.
1360         * types.h: Likewise.
1361         * context.h: Add member passphrase to result.
1362         * gpgme.c (_gpgme_release_result): Release passphrase member.
1363
1364         * decrypt.c: Some formatting and variable name changes (like
1365         CTX instead C).
1366         (struct decrypt_result_s): Remove members now found in
1367         passphrase result.
1368         (_gpgme_release_decrypt_result): Don't release removed members.
1369         (decrypt_status_handler): Call _gpgme_passphrase_status_handler,
1370         and don't handle the cases catched there.
1371         (command_handler): Removed.
1372         (gpgme_op_decrypt_start): Don't set command handler, but invoke
1373         _gpgme_passphrase_start which does it.
1374         (gpgme_op_decrypt): Invoke _gpgme_passphrase_result and drop the
1375         cases covered by it.
1376
1377         * sign.c Some formatting and variable name changes (like
1378         CTX instead C).
1379         (struct sign_result_s): Remove members now found in
1380         passphrase result.
1381         (_gpgme_release_sign_result): Don't release removed members.
1382         (sign_status_handler): Call _gpgme_passphrase_status_handler,
1383         and don't handle the cases catched there.
1384         (command_handler): Removed.
1385         (gpgme_op_sign_start): Don't set command handler, but invoke
1386         _gpgme_passphrase_start which does it.
1387         (gpgme_op_sign): Invoke _gpgme_passphrase_result and drop the
1388         cases covered by it.
1389
1390 2001-11-15  Marcus Brinkmann  <marcus@g10code.de>
1391
1392         * decrypt.c (command_handler): Fix last change.
1393
1394 2001-11-15  Marcus Brinkmann  <marcus@g10code.de>
1395
1396         * verify.c (_gpgme_release_verify_result): Rename RES to RESULT.
1397         Rename R2 to NEXT_RESULT.
1398         (intersect_stati): Rename RES to RESULT.
1399         (gpgme_get_sig_status): Likewise.  Do not check return_type, but
1400         the member verify of result.
1401         (gpgme_get_sig_key): Likewise.
1402
1403         * sign.c (_gpgme_release_sign_result): Rename RES to RESULT.  If
1404         RESULT is zero, return.
1405         (sign_status_handler, command_handler): Do not check return_type,
1406         but the member sign of result.
1407         (gpgme_op_sign): Likewise.  Drop assertion.
1408
1409         * encrypt.c (_gpgme_release_encrypt_result): Rename RES to RESULT.
1410         If RESULT is zero, return.
1411         (encrypt_status_handler): Do not check return_type, but the member
1412         encrypt of result.
1413         (gpgme_op_encrypt): Likewise.  Drop assertion.
1414
1415         * decrypt.c (_gpgme_release_decrypt_result): Rename RES to RESULT.
1416         (create_result_struct): Do not set result_type.
1417         (command_handler, decrypt_status_handler): Do not check
1418         return_type, but the member decrypt of result.
1419         (gpgme_op_decrypt): Likewise.  Drop assertion.
1420
1421         * context.h (enum ResultType): Removed.
1422         (struct gpgme_context_s): Remove member result_type.
1423         (struct result): Replaces union result.
1424         * gpgme.c: Include string.h.
1425         (_gpgme_release_result): Release all members of c->result, which
1426         is now a struct.  Zero out all members of the struct afterwards.
1427
1428 2001-11-11  Marcus Brinkmann  <marcus@g10code.de>
1429
1430         * rungpg.c (_gpgme_gpg_release): Release GPG->cmd.cb_data.
1431         Release all members of the list GPG->arglist.
1432         Reported by Michael Schmidt <mschmidt@cs.uni-sb.de>.
1433
1434 2001-11-02  Marcus Brinkmann  <marcus@g10code.de>
1435
1436         * rungpg.c (pipemode_copy): Change type of NBYTES to size_t.
1437
1438         * key.c: Include string.h.
1439         * data.c: Likewise.
1440         * recipient.c: Likewise.
1441
1442 2001-10-29  Marcus Brinkmann  <marcus@g10code.de>
1443
1444         * context.h: New member signers_len.
1445         * signers.c (gpgme_signers_clear): Require that signers are
1446         non-NULL with assertion.  Use signers_len to determine how much
1447         keys to release.  Add documentation.
1448         (gpgme_signers_add): Use signers_len to determine if the buffer is
1449         large enough.  Use xtryrealloc rather than xtrymalloc and copying.
1450         Add documentation.
1451         (gpgme_signers_enum): Use signers_len to determine if key is
1452         available.  Add documentation.
1453
1454 2001-10-22  Marcus Brinkmann  <marcus@g10code.de>
1455
1456         * data.c (_gpgme_data_append): Check if LENGTH is smaller than
1457         ALLOC_CHUNK, not DH->length.
1458
1459 2001-10-17  Marcus Brinkmann  <marcus@g10code.de>
1460
1461         * gpgme.c (gpgme_set_protocol): Fix last change.
1462
1463 2001-10-15  Werner Koch  <wk@gnupg.org>
1464
1465         * gpgme.h (GpgmeProtocol): New.
1466         * gpgme.c (gpgme_set_protocol): New.
1467
1468 2001-09-26  Werner Koch  <wk@gnupg.org>
1469
1470         * gpgme.c (gpgme_set_passphrase_cb): Ignore a NULL context.
1471         (gpgme_set_progress_cb): Ditto. Suggested by Mark Mutz.
1472
1473 2001-09-17  Werner Koch  <wk@gnupg.org>
1474
1475         * keylist.c (finish_key): Shortcut for no tmp_key.  Changed all
1476         callers to use this function without a check for tmp_key.
1477         
1478         * keylist.c (gpgme_op_keylist_next): Reset the key_cond after
1479         emptying the queue.  Bug reported by Stéphane Corthésy.
1480
1481 2001-09-12  Werner Koch  <wk@gnupg.org>
1482
1483         * data.c (gpgme_data_rewind): Allow rewind for callbacks.
1484
1485 2001-09-07  Werner Koch  <wk@gnupg.org>
1486
1487         * rungpg.h: Add NO_RECP.
1488         * encrypt.c (encrypt_status_handler): Take on No_RECP.
1489         (gpgme_op_encrypt): Better error return.
1490
1491         * verify.c (verify_status_handler): Take on NODATA.
1492
1493 2001-09-03  Werner Koch  <wk@gnupg.org>
1494
1495         * rungpg.h: Added STATUS_INV_RECP.
1496         * gpgme.c (_gpgme_release_result): Add support for new
1497         EncryptResult object.
1498         * encrypt.c (append_xml_encinfo): New.
1499         (encrypt_status_handler): Add some status parsing.
1500         (_gpgme_release_encrypt_result): New.
1501
1502 2001-08-29  Werner Koch  <wk@gnupg.org>
1503
1504         * recipient.c (gpgme_recipients_release): Free the list.  By Timo.
1505
1506         * keylist.c (keylist_colon_handler): Do a finish key if we receive
1507         an EOF here.  This is probably the reason for a lot of bugs
1508         related to keylisting.  It is so obvious.  Kudos to Enno Cramer
1509         for pointing that out. 
1510
1511 2001-08-28  Werner Koch  <wk@gnupg.org>
1512
1513         * gpgme.c, gpgme.h (gpgme_get_op_info): New.
1514         (_gpgme_set_op_info): New. 
1515         (_gpgme_release_result): Reset the op_info here.
1516         * sign.c (append_xml_siginfo): New.
1517         (sign_status_handler): Store the sig create information.
1518
1519 2001-07-31  Werner Koch  <wk@gnupg.org>
1520
1521         * encrypt.c (gpgme_op_encrypt): Hack to detect no valid recipients.
1522
1523 2001-07-30  Werner Koch  <wk@gnupg.org>
1524
1525         * gpgme.c (gpgme_get_armor,gpgme_get_textmode): New.
1526
1527         * rungpg.c (build_argv): Disable armor comments
1528         * w32-io.c (build_commandline): Need to add quotes here
1529
1530 2001-07-24  Werner Koch  <wk@gnupg.org>
1531
1532         * data.c (gpgme_data_read): Add a a way to return the available bytes.
1533
1534 2001-07-23  Werner Koch  <wk@gnupg.org>
1535
1536         * util.c: Removed stpcpy() because we use the version from jnlib.
1537
1538 2001-07-19  Werner Koch  <wk@gnupg.org>
1539
1540         * mkstatus: Define the collating sequence for sort.
1541
1542 2001-06-26  Werner Koch  <wk@gnupg.org>
1543
1544         * rungpg.h: Add STATUS_UNEXPECTED as suggested by Timo.
1545
1546 2001-06-15  Werner Koch  <wk@gnupg.org>
1547
1548         * keylist.c (set_userid_flags): Fixed the assigned values. Kudos
1549         to Timo for pointing this out.
1550
1551 2001-06-01  Werner Koch  <wk@gnupg.org>
1552
1553         * debug.c (_gpgme_debug_begin): Fixed a /tmp race.  Noted by
1554         Johannes Poehlmann.
1555
1556 2001-05-28  Werner Koch  <wk@gnupg.org>
1557
1558         * version.c (gpgme_check_engine): Stop version number parsing at
1559         the opening angle and not the closing one.  By Tommy Reynolds.
1560
1561 2001-05-01  José Carlos García Sogo <jose@jaimedelamo.eu.org>
1562
1563         * encrypt.c (gpgme_op_encrypt_start): Deleted the assert ( !c->gpg )
1564         line, because it gave an error if another operation had been made 
1565         before using the same context.
1566         
1567         * decrypt.c (gpgme_op_decrypt_start): The same as above. Also added 
1568         one line to release the gpg object in the context (if any).
1569         
1570 2001-04-26  Werner Koch  <wk@gnupg.org>
1571
1572         * key.c, key.h (_gpgme_key_cache_init): New.
1573         (_gpgme_key_cache_add): New.
1574         (_gpgme_key_cache_get): New.
1575         * version.c (do_subsystem_inits): Init the cache.
1576         * keylist.c (finish_key): Put key into the cache
1577         * verify.c (gpgme_get_sig_key): First look into the cache.
1578
1579 2001-04-19  Werner Koch  <wk@gnupg.org>
1580
1581         * keylist.c (parse_timestamp): Adjusted for the changed
1582         --fixed-list-mode of gpg 1.0.4h.
1583
1584 2001-04-05  Werner Koch  <wk@gnupg.org>
1585
1586         * verify.c (gpgme_op_verify_start): Enabled pipemode for detached sigs.
1587
1588 2001-04-04  Werner Koch  <wk@gnupg.org>
1589
1590         * w32-io.c (_gpgme_io_select): Don't select on the writer if there
1591         are still bytes pending.  Timo found this not easy to track down
1592         race condition. 
1593
1594 2001-04-02  Werner Koch  <wk@gnupg.org>
1595
1596         * gpgme.h: Add GPGME_ATTR_KEY_{EXPIRED,DISABLED}.
1597         * key.c (gpgme_key_get_ulong_attr): And return those attribs.
1598
1599         * verify.c (gpgme_get_sig_key): Set keyliosting mode depending on 
1600         the mode set in the current context.  Suggested by Timo.
1601
1602         * key.c (gpgme_key_get_ulong_attr): Return can_certify and not
1603         can_encrypt. By Timo.
1604
1605 2001-03-30  Werner Koch  <wk@gnupg.org>
1606
1607         * debug.c (debug_init): Allow to specify a debug file.
1608         (_gpgme_debug_level): New.
1609
1610         * posix-io.c (_gpgme_io_read, _gpgme_io_write): Print output.
1611         (_gpgme_io_select): Debug only with level > 2.
1612
1613 2001-03-15  Werner Koch  <wk@gnupg.org>
1614
1615         * rungpg.c: Included time.h.
1616
1617         * key.h: New keyflags for capabilities.
1618         * keylist.c (set_mainkey_capability, set_subkey_capability): New.
1619         (keylist_colon_handler): Parse them.
1620         * gpgme.h: New attribute values for capabilties.
1621         * key.c (gpgme_key_get_string_attr): Return them.
1622         (capabilities_to_string): New.
1623         (gpgme_key_get_ulong_attr): Return the global caps.
1624
1625 2001-03-14  Werner Koch  <wk@gnupg.org>
1626
1627         * w32-io.c (destroy_reader,destroy_writer): Fixed syntax error. 
1628         Thanks to Jan Oliver Wagner.
1629
1630 2001-03-13  Werner Koch  <wk@gnupg.org>
1631
1632         * context.h: Add invalid and revoke flags to user_id structure.
1633         * keylist.c (gpgme_op_keylist_start): Use --fixed-list-mode.
1634         (keylist_colon_handler): Adjust for that.
1635         (set_userid_flags): New. 
1636         (set_mainkey_trust_info): Handle new key invalid flag
1637         (set_subkey_trust_info): Ditto.
1638         * gpgme.h: Add new attributes for key and user ID flags.
1639         * key.c (_gpgme_key_append_name): Init these flags
1640         (gpgme_key_get_as_xml): Print them.
1641         (one_uid_as_xml): New helper for above.
1642         (gpgme_key_get_string_attr, gpgme_key_get_ulong_attr):
1643         Return the new attributes.  Enhanced, so that subkey information
1644         can be returned now.
1645
1646 2001-02-28  Werner Koch  <wk@gnupg.org>
1647
1648         * w32-io.c (destroy_reader): Set stop_me flag.
1649         (writer,create_writer,destroy_writer,find_writer,kill_writer): New.
1650         (_gpgme_io_write): Use a writer thread to avaoid blocking.
1651         (_gpgme_io_close): Cleanup a writer thread
1652         (_gpgme_io_select): Repalce tthe faked wait on writing by a real
1653         waiting which is now possible due to the use of a writer thread.
1654
1655 2001-02-20  Werner Koch  <wk@gnupg.org>
1656
1657         * w32-io.c (destroy_reader,kill_reader): New. 
1658         (create_reader, reader): Add a new event to stop the thread.
1659         (_gpgme_io_close): Kill the reader thread.
1660
1661         * posix-io.c (_gpgme_io_select): Handle frozen fds here. 
1662         * 32-io.c (_gpgme_io_select): Ditto. Removed a bunch of unused code.
1663
1664         * wait.c: Reworked the whole thing.
1665         * rungpg.c (_gpgme_gpg_new): Init pid to -1.
1666         (_gpgme_gpg_release): Remove the process from the wait queue.
1667
1668 2001-02-19  Werner Koch  <wk@gnupg.org>
1669
1670         * w32-io.c (_gpgme_io_set_close_notify): New.
1671         (_gpgme_io_close): Do the notification.
1672
1673         * posix-io.c (_gpgme_io_select): Use a 1 sec timeout and not 200
1674         microseconds.
1675
1676         * wait.c (remove_process): Don't close the fd here.
1677         (do_select): Set the fd to -1 and remove the is_closed flag everywhere.
1678         (_gpgme_wait_on_condition): Remove the assert on the queue and
1679         break out if we could not find the queue.  The whole thing should
1680         be reworked.
1681
1682         * posix-io.c (_gpgme_io_set_close_notify): New.
1683         (_gpgme_io_close): Do the notification.
1684
1685         * rungpg.c (close_notify_handler): New. 
1686         (_gpgme_gpg_new): Register a callback for the fd.
1687         (_gpgme_gpg_set_colon_line_handler): Ditto.
1688         (build_argv): Ditto
1689
1690 2001-02-13  Werner Koch  <wk@gnupg.org>
1691
1692         * rungpg.c (struct reap_s): Replaced pid_t by int.
1693
1694         * types.h: Add ulong typedef.
1695
1696         * rungpg.c (do_reaping,_gpgme_gpg_housecleaning): New.
1697         (_gpgme_gpg_release): Reap children.
1698         * io.h, posix-io.c (_gpgme_io_kill): New.
1699         * w32-io.c (_gpgme_io_kill): New (dummy).
1700
1701         * keylist.c (gpgme_op_keylist_start): Cancel a pending request.
1702
1703         * posix-io.c (_gpgme_io_read): Add some debug output. 
1704         (_gpgme_io_write): Ditto.
1705         (_gpgme_io_select): Increased the timeout.
1706
1707 2001-02-12  Werner Koch  <wk@gnupg.org>
1708
1709         Enhanced the signature verification, so that it can how handle
1710         more than one signature and is able to return more information on 
1711         the signatures.
1712         * verify.c (gpgme_get_sig_key): New.
1713         (gpgme_get_sig_status): New.
1714
1715         * gpgme.h: Add stdio.h. 
1716         (GpgmeSigStat): New status DIFF.
1717
1718 2001-02-01  Werner Koch  <wk@gnupg.org>
1719
1720         * w32-io.c (set_synchronize): Add EVENT_MODIFY_STATE.  Add Debug
1721         code to all Set/ResetEvent().
1722
1723         * rungpg.c (read_status): Check for end of stream only if we have
1724         an r.  By Timo.
1725
1726 2001-01-31  Werner Koch  <wk@gnupg.org>
1727
1728         * wait.c (_gpgme_wait_on_condition): Removed all exit code processing.
1729         (propagate_term_results,clear_active_fds): Removed.
1730         (count_active_fds): Renamed to .. 
1731         (count_active_and_thawed_fds): .. this and count only thawed fds. 
1732
1733         * rungpg.c (gpg_colon_line_handler): Return colon.eof and not
1734         status.eof ;-)
1735
1736 2001-01-30  Werner Koch  <wk@gnupg.org>
1737
1738         * w32-io.c (_gpgme_io_spawn): Use the supplied path arg.
1739
1740         * version.c (get_engine_info): Return better error information.
1741
1742         * posix-util.c, w32-util.c: New.
1743         (_gpgme_get_gpg_path): New, suggested by Jan-Oliver.
1744         * rungpg.c (_gpgme_gpg_spawn): Use new function to get GPG's path.
1745
1746         * signers.c (gpgme_signers_add): Ooops, one should test code and
1747         not just write it; the newarr was not assigned.  Thanks to José
1748         for pointing this out.  Hmmm, still not tested, why shoudl a coder
1749         test his fix :-)
1750
1751         * w32-io.c: Does now use reader threads, so that we can use
1752         WaitForMultipleObjects. 
1753         * sema.h, posix-sema.c, w32-sema.c: Support for Critcial sections.
1754         Does currently only work for W32.
1755
1756         * debug.c, util.h : New. Changed all fprintfs to use this new
1757         set of debugging functions.
1758
1759 2001-01-23  Werner Koch  <wk@gnupg.org>
1760
1761         * data.c (_gpgme_data_release_and_return_string): Fixed string
1762         termination.
1763
1764 2001-01-22  Werner Koch  <wk@gnupg.org>
1765
1766         * delete.c: New.
1767
1768         * signers.c: New.
1769         * key.c (gpgme_key_ref, gpgme_key_unref): New.
1770         * sign.c (gpgme_op_sign_start): Allow the use of other keys.
1771
1772         * version.c (gpgme_get_engine_info,gpgme_check_engine): New.
1773         * rungpg.c (_gpgme_gpg_set_simple_line_handler): New.
1774
1775 2001-01-05  Werner Koch  <wk@gnupg.org>
1776
1777         * data.c (gpgme_data_rewind): Allow to rewind data_type_none.
1778
1779
1780  Copyright 2001, 2002 g10 Code GmbH
1781
1782  This file is free software; as a special exception the author gives
1783  unlimited permission to copy and/or distribute it, with or without
1784  modifications, as long as this notice is preserved.
1785
1786  This file is distributed in the hope that it will be useful, but
1787  WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
1788  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1789