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