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