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