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