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