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