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