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