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