doc/
[gpgme.git] / gpgme / ChangeLog
1 2002-01-31  Marcus Brinkmann  <marcus@g10code.de>
2
3         * rungpg.h: Add STATUS_KEY_CREATED.
4
5         * progress.c: New file.
6         * Makefile.am (libgpgme_la_SOURCES): Add progress.c.
7
8         * genkey.c (genkey_status_handler): Use
9         _gpgme_progress_status_handler.  Add check for status.
10         (struct genkey_result_s): New structure.
11         (_gpgme_release_genkey_result): New function.
12         (gpgme_op_genkey): Check for error.
13         * gpgme.c (_gpgme_release_result): Call
14         _gpgme_release_genkey_result.
15         * ops.h (_gpgme_release_genkey_result): Add prototype.
16         * types.h (GenKeyResult): New type.
17         * context.h (gpgme_context_s): Add GenKeyResult to member result.
18
19 2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
20
21         * gpgme.c (_gpgme_release_result): Call
22         _gpgme_release_delete_result.
23         * ops.h (_gpgme_release_delete_result): Add prototype.
24         * types.h (DeleteResult): New type.
25         * context.h (gpgme_context_s): Add DeleteResult to member result.
26
27         * delete.c (enum delete_problem): New type.
28         (struct delete_result_s): New structure.
29         (_gpgme_release_delete_result): New function.
30         (delete_status_handler): Implement more status codes.
31         (gpgme_op_delete): Return error on failure.
32
33         * import.c (MAX_IMPORTED_FIELDS): Bump up to 14.
34
35 2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
36
37         * import.c (struct import_result_s): New structure.
38         (_gpgme_release_import_result): New function.
39         (append_xml_impinfo): Likewise.
40         (import_status_handler): Implement.
41         * gpgme.c (_gpgme_release_result): Add call to
42         _gpgme_release_import_result.
43         * ops.h (_gpgme_release_import_result): Add prototype.
44         * types.h (ImportResult): New type.
45         * context.h (gpgme_context_s): Add ImportResult to member result.
46
47         * encrypt.c (gpgme_op_encrypt): Code clean up.
48
49 2002-01-30  Marcus Brinkmann  <marcus@g10code.de>
50
51         * gpgme.h: Add lots of comment and fix the formatting.  Add
52         gpgme_trustlist_end prototype.
53
54 2002-01-29  Marcus Brinkmann  <marcus@g10code.de>
55
56         * gpgme.h: Add new type GpgmeIdleFunc.  Change type of
57         gpgme_register_idle to return and accept this type.
58         * wait.c (gpgme_register_idle): Fix type.
59         Save and return old value of idle_function.
60
61 2002-01-29  Werner Koch  <wk@gnupg.org>
62
63         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist): Implement secret only mode.
64
65         * keylist.c (keylist_colon_handler): Add support for the new "crs"
66         record type.
67
68 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
69
70         * engine-gpgsm.c (_gpgme_gpgsm_release): Call assuan_disconnect,
71         not assuan_pipe_disconnect.
72
73         * Makefile.am (libgpgme_la_LIBADD): Change to link assuan and
74         jnlib (needed by assuan) statically into libgpgme.  Linking a
75         static library into a shared library this way is not portable.
76
77 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
78
79         * gpgme.h (GpgmePassphraseCb): Change type of R_HD from void* to
80         void**.
81
82 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
83
84         * data.c (gpgme_data_new_from_filepart): Change type of LENGTH
85         from off_t to size_t.
86         * gpgme.h: Likewise.
87
88 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
89
90         * wait.c (_gpgme_wait_on_condition): If the process finished,
91         reset the pending flag.  Also if the operation was cancelled.
92
93         (struct proc_s): Rename READY to DONE.
94         (wait_item_s): Likewise.
95         (set_process_ready): Rename to ...
96         (set_process_done): ... this.
97         (_gpgme_remove_proc_from_wait_queue): Call set_process_done
98         instead set_process_ready.
99         (_gpgme_wait_on_condition): Likewise.
100         (do_select): Rename READY to DONE.
101
102         * verify.c (gpgme_op_verify): Do not set pending to zero here.
103         * sign.c (gpgme_op_sign): Likewise.
104         * import.c (gpgme_op_import): Likewise.
105         * genkey.c (gpgme_op_genkey): Likewise.
106         * export.c (gpgme_op_export): Likewise.
107         * encrypt.c (gpgme_op_encrypt): Likewise.
108         * delete.c (gpgme_op_delete): Likewise.
109         * decrypt-verify.c (gpgme_op_decrypt_verify): Likewise.
110         * decrypt.c (gpgme_op_decrypt): Likewise.
111
112 2002-01-22  Marcus Brinkmann  <marcus@g10code.de>
113
114         * export.c: Cleanup.
115
116 2002-01-15  Marcus Brinkmann  <marcus@g10code.de>
117
118         * trustlist.c: Various source clean ups.
119         (my_isdigit): Removed.
120         (gpgme_op_trustlist_end): New function.
121
122 2002-01-13  Marcus Brinkmann  <marcus@g10code.de>
123
124         * gpgme.c: Various source clean ups, like renaming C to CTX where
125         appropriate.
126         (gpgme_new): Clear R_CTX before starting the work.
127         (my_isdigit): Removed.
128         (my_isxdigit): Likewise.
129
130         * data.c: Various source clean ups.
131         (gpgme_data_new_from_mem): Check BUFFER after clearing R_DH.
132         (gpgme_data_new_with_read_cb): Similar for READ_CB.
133         (gpgme_data_new_from_file): Loop over fread while EINTR.
134         (gpgme_data_new_from_filepart): Rediddled a bit.  Allow LENGTH to
135         be zero.  Loop over fread while EINTR.
136
137         (my_isdigit): Removed.
138         (my_isxdigit): Likewise.
139
140 2001-12-21  Marcus Brinkmann  <marcus@g10code.de>
141
142         * engine-gpgsm.c (_gpgme_gpgsm_new): Replace General_Error with
143         Pipe_Error where appropriate.
144
145 2001-12-19  Marcus Brinkmann  <marcus@g10code.de>
146
147         * engine.c: Include `string.h'.  Reported by Stéphane Corthésy.
148
149         * version.c (get_engine_info): Remove prototype.
150
151 2001-12-19  Marcus Brinkmann  <marcus@g10code.de>
152
153         * engine-gpgsm.c (_gpgme_gpgsm_new): New variable CHILD_FDS.
154         Fill it with the servers fds, and pass it to assuan_pipe_connect.
155
156 2001-12-18  Marcus Brinkmann  <marcus@g10code.de>
157
158         * keylist.c (gpgme_op_keylist_end): New function.
159         * gpgme.h (gpgme_op_keylist_end): New prototype.
160
161         * engine.h (gpgme_engine_check_version): Move prototype to ...
162         * gpgme.h (gpgme_engine_check_version): ... here.
163
164         * genkey.c (gpgme_op_genkey_start): Remove unused variable.
165
166 2001-12-18  Marcus Brinkmann  <marcus@g10code.de>
167
168         * version.c (gpgme_get_engine_info): Reimplemented.
169         (gpgme_check_engine): Reimplemented.
170         (_gpgme_compare_versions): Return NULL if MY_VERSION is NULL.
171
172         * engine.c: Include `io.h'.
173         (gpgme_engine_get_info): New function.
174         * engine.h (gpgme_engine_check_version, _gpgme_engine_get_info):
175         Add prototype.
176
177 2001-12-18  Marcus Brinkmann  <marcus@g10code.de>
178
179         * rungpg.c (struct reap_s, reap_list, reap_list_lock): Moved to ...
180         * engine.c (struct reap_s, reap_list, reap_list_lock): ... here.
181         Include `time.h', `sys/types.h', `assert.h', and `sema.h'.
182
183         * rungpg.c (_gpgme_engine_add_child_to_reap_list): New function.
184         (do_reaping, _gpgme_gpg_housecleaning): Moved to ...
185         * engine.c (do_reaping, _gpgme_engine_housecleaning): ... here.
186         * rungpg.c (_gpgme_gpg_release): Replace code that is now in its
187         own function by call to _gpgme_engine_add_child_to_reap_list().
188
189         * wait.c: Include `engine.h'.
190         (run_idle): Call _gpgme_engine_housecleaning(), not
191         _gpgme_gpg_housecleaning().
192         
193 2001-12-18  Marcus Brinkmann  <marcus@g10code.de>
194
195         * key.c (_gpgme_key_append_name): Append, not prepend, the uid.
196         Initialize the next field of the uid structure.
197         (gpgme_key_get_as_xml): Do not list last uid first.
198
199 2001-12-17  Marcus Brinkmann  <marcus@g10code.de>
200
201         * engine-gpgsm.c (_gpgme_gpgsm_set_colon_line_handler): New
202         function [!ENABLE_GPGSM].
203
204 2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
205
206         * engine-gpgsm.c (_gpgme_gpgsm_op_verify): Put TEXT into
207         message_data, not SIG.
208         (_gpgme_gpgsm_op_sign): Use `--detached', not `--detach'.
209
210         * sign.c (sign_status_handler): Call
211         _gpgme_passphrase_status_handler early.
212
213 2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
214
215         * engine-gpgsm.c: Revert last change.
216
217 2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
218
219         * engine-gpgsm.c (gpgsm_status_handler): Freeze the output file
220         handler when ending this operation, otherwise the wait function
221         will sit on it.
222
223 2001-12-14  Marcus Brinkmann  <marcus@g10code.de>
224
225         * engine-gpgsm.c (struct gpgsm_object_s): New member colon.attic.
226         (_gpgme_gpgsm_new): Initialize some more members.
227         (_gpgme_gpgsm_release): Free the colon line handler's attic line.
228         (gpgsm_status_handler): Rework the inline-data processing.
229
230 2001-12-13  Marcus Brinkmann  <marcus@g10code.de>
231
232         * rungpg.c (_gpgme_gpg_spawn): Do not add the fds to the child
233         list that are not dup'ed, for those the close-on-exec flag is set
234         now.
235         * version.c (_gpgme_get_program_version): Remove first entry in
236         CFD, as the close-on-exec flag is now set for this fd.
237
238 2001-12-13  Marcus Brinkmann  <marcus@g10code.de>
239
240         * engine-gpgsm.c (_gpgme_gpgsm_op_encrypt): Do not add `armor'
241         option to `ENCRYPT'.
242         * engine-gpgsm.c (gpgsm_set_recipients): Free LINE when returning
243         successfully.
244
245 2001-12-13  Marcus Brinkmann  <marcus@g10code.de>
246
247         * engine-gpgsm.c (close_notify_handler): New function.
248         (_gpgme_gpgsm_new): Manage the file descriptors a
249         bit differently.  Do not set close-on-exec flags.
250         (_gpgme_gpgsm_op_decrypt): Do not set message_fd
251         to -1, this is done by the close handler.
252         (_gpgme_gpgsm_op_encrypt): Likewise.
253         (_gpgme_gpgsm_op_import): Likewise (also for output_fd).
254         (_gpgme_gpgsm_op_keylist): Likewise (also for input_fd and output_fd).
255         (_gpgme_gpgsm_op_sign): Likewise.
256         (_gpgme_gpgsm_op_verify): Likewise, but for output_fd.
257
258         * posix-io.c (_gpgme_io_pipe): Set the close-on-exec flag for the
259         non-inherited file descriptor index of the pipe.
260
261 2001-12-13  Werner Koch  <wk@gnupg.org>
262
263         * engine-gpgsm.c (_gpgme_gpgsm_set_colon_line_handler): New.
264         (gpgsm_status_handler): Pass datalines to a colon handler
265         * engine.c (_gpgme_engine_set_colon_line_handler): Set the colon
266         handler for gpgsm.
267
268         * engine-gpgsm.c (_gpgme_gpgsm_op_keylist): Allow NULL for
269         pattern.
270         (gpgsm_assuan_simple_command): Removed underscore from
271         assuan_write_line.
272         (_gpgme_gpgsm_start): Ditto.
273         (gpgsm_assuan_simple_command): Replaced interal Assuan read
274         function by the new assuan_read_line.  Removed the use of the
275         internal header.
276         (gpgsm_status_handler): Ditto. Use the new assuan_pending_line.
277         (_gpgme_gpgsm_start): Use the documented way to get an fd from
278         assuan.
279
280         * keylist.c (keylist_colon_handler): Handle "crt" records
281         * key.h (gpgme_key_s): Add an x509 flag.
282         * key.c (parse_x509_user_id): New.
283         (_gpgme_key_append_name): Handle x.509 names.
284
285 2001-12-05  Marcus Brinkmann  <marcus@g10code.de>
286
287         * engine-gpgsm.c (gpgsm_status_handler): Make it work with current
288         version of assuan.
289
290 2001-12-05  Marcus Brinkmann  <marcus@g10code.de>
291
292         * engine-gpgsm.c (gpgsm_set_fd): Accept one more argument OPT.
293         (_gpgme_gpgsm_op_encrypt): Pass armor argument to gpgsm_set_fd for
294         output descriptor.
295         (_gpgme_gpgsm_op_sign): Likewise.
296
297 2001-12-05  Marcus Brinkmann  <marcus@g10code.de>
298
299         * keylist.c (gpgme_op_keylist_next): Set pending to 0 if EOF
300         occurs.
301
302 2001-11-26  Marcus Brinkmann  <marcus@g10code.de>
303
304         * engine-gpgsm.c (_gpgme_gpgsm_op_sign): Fix stupid typo.
305
306 2001-11-24  Marcus Brinkmann  <marcus@g10code.de>
307
308         * engine-gpgsm.c (gpgsm_status_handler): Don't break if bsearch fails.
309         Deal with assuan read line returning more than one line (for now).
310
311 2001-11-23  Marcus Brinkmann  <marcus@g10code.de>
312
313         * engine-gpgsm.c (_gpgme_gpgsm_op_sign): Implement it according to
314         the current protocol definition.
315
316 2001-11-23  Marcus Brinkmann  <marcus@g10code.de>
317
318         * engine-gpgsm.c (_gpgme_gpgsm_new): Set CLOEXEC flag for parent
319         ends of the pipe.
320
321 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
322
323         * engine-gpgsm.c: Include stdlib.h and string.h.  Also include,
324         for now, rungpg.h and status-table.h.
325         (gpgsm_status_handler): Implement more of the status handler.
326
327 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
328
329         * engine.c (_gpgme_engine_op_decrypt): Implement CMS case.
330         (_gpgme_engine_op_delete): Likewise.
331         (_gpgme_engine_op_encrypt): Likewise.
332         (_gpgme_engine_op_export): Likewise.
333         (_gpgme_engine_op_genkey): Likewise.
334         (_gpgme_engine_op_keylist): Likewise.
335         (_gpgme_engine_op_sign): Likewise.
336         (_gpgme_engine_op_trustlist): Likewise.
337
338         * engine-gpgsm.c (_gpgme_gpgsm_op_encrypt): New function.
339         (gpgsm_assuan_simple_command): Likewise.
340         (gpgsm_set_recipients): Likewise.
341         (gpgsm_set_fd): Reimplement using gpgsm_assuan_simple_command.
342         (_gpgme_gpgsm_op_delete): New function.
343         (_gpgme_gpgsm_op_export): Likewise.
344         (_gpgme_gpgsm_op_genkey): Likewise.
345         (_gpgme_gpgsm_op_sign): Likewise.
346         (_gpgme_gpgsm_op_keylist): Likewise.
347         (_gpgme_gpgsm_op_trustlist): Likewise.
348         (_gpgme_gpgsm_release): Release command.
349         (_gpgme_gpgsm_op_decrypt): Allocate command.
350         (_gpgme_gpgsm_op_import): Likewise.
351         (gpgsm_status_handler): Also treat `ERR' strings as EOF.
352
353 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
354
355         * gpgme.h (gpgme_set_protocol): New prototype.
356
357 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
358
359         * engine-gpgsm.c (_gpgme_gpgsm_op_decrypt): New function.
360         (_gpgme_gpgsm_op_import): Likewise.
361
362 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
363
364         * engine-gpgsm.c: Shuffle around header inclusion a bit, to still
365         keep them seperate.
366         (_gpgme_set_status_handler) [!ENABLE_GPGSM]: New function.
367
368 2001-11-22  Werner Koch  <wk@gnupg.org>
369
370         * engine-gpgsm.c: Include more headers so that NULL and mk_error
371         is defined even with an undefined GPGSM_PATH.
372
373 2001-11-22  Marcus Brinkmann  <marcus@g10code.de>
374
375         * rungpg.c (gpg_inbound_handler, write_mem_data, write_cb_data,
376         gpg_outbound_handler): Moved to ...
377         * data.c (_gpgme_data_inbound_handler, write_mem_data,
378         write_cb_data, _gpgme_data_outbound_handler): ... here.  Make the
379         _gpgme_* ones non-static.
380         * data.c: Include io.h.
381
382         * ops.h (_gpgme_data_inbound_handler): New prototype.
383         (_gpgme_data_outbound_handler): Likewise.
384         (_gpgme_gpg_spawn): Use these new functions.
385
386         * engine-gpgsm.h (_gpgme_gpgsm_op_decrypt, _gpgme_gpgsm_op_delete,
387         _gpgme_gpgsm_op_encrypt, _gpgme_gpgsm_op_export,
388         _gpgme_gpgsm_op_genkey, _gpgme_gpgsm_op_import,
389         _gpgme_gpgsm_op_keylist, _gpgme_gpgsm_op_sign,
390         _gpgme_gpgsm_op_trustlist, _gpgme_gpgsm_op_verify,
391         _gpgme_gpgsm_start, _gpgme_gpgsm_set_status_handler): New prototype.
392         Include <rungpg.h> for status handler function.
393
394         * engine-gpgsm.c (struct gpgsm_object_s): New members input_fd,
395         input_data, output_fd, output_data, message_fd, message_data, command
396         and status.
397         (_gpgme_gpgsm_new): Open input, output and message pipes before
398         connecting to the client.  Close server's ends afterwards.
399         (_gpgme_gpgsm_release): Close open file descriptors.  Remove
400         server process from wait queue.
401         (_gpgme_gpgsm_op_verify, _gpgme_gpgsm_start,
402         _gpgme_gpgsm_set_status_handler, gpgms_status_handler): New function.
403         
404         * engine.c (_gpgme_engine_start): Implement for GPGME_PROTOCOL_CMS.
405         (_gpgme_engine_set_status_handler): Likewise.
406         (_gpgme_engine_op_verify): Likewise.
407
408 2001-11-21  Marcus Brinkmann  <marcus@g10code.de>
409
410         * context.h: Do not include rungpg.h, but engine.h.
411         (struct gpgme_context_s): Replace member gpg with engine.
412         * gpgme.c (gpgme_release): Release engine, not gpg.
413
414         * recipient.c (_gpgme_append_gpg_args_from_recifgpients): Function
415         moved ...
416         * rungpg.c (_gpgme_append_gpg_args_from_recipients): ... here.
417         Make static, change order of arguments, and return an error value.
418         * ops.h (_gpgme_append_gpg_args_from_recipients): Removed prototype.
419
420         * rungpg.h (_gpgme_gpg_op_verify): Add prototype.
421         (_gpgme_gpg_op_encrypt): Likewise.
422         (_gpgme_gpg_op_decrypt): Likewise.
423         (_gpgme_gpg_op_delete): Likewise.
424         (_gpgme_gpg_op_export): Likewise.
425         (_gpgme_gpg_op_genkey): Likewise.
426         (_gpgme_gpg_op_import): Likewise.
427         (_gpgme_gpg_op_keylist): Likewise.
428         (_gpgme_gpg_op_sign): Likewise.
429         (_gpgme_gpg_op_trustlist): Likewise.
430         * rungpg.c (_gpgme_gpg_op_verify): New function.
431         (_gpgme_gpg_op_encrypt): Likewise.
432         (_gpgme_gpg_op_decrypt): Likewise.
433         (_gpgme_gpg_op_delete): Likewise.
434         (_gpgme_gpg_op_export): Likewise.
435         (_gpgme_gpg_op_genkey): Likewise.
436         (_gpgme_gpg_op_import): Likewise.
437         (_gpgme_gpg_op_keylist): Likewise.
438         (_gpgme_gpg_op_sign): Likewise.
439         (_gpgme_gpg_op_trustlist): Likewise.
440
441         * engine.h (_gpgme_engine_set_status_handler): Add prototype.
442         (_gpgme_engine_set_command_handler): Likewise.
443         (_gpgme_engine_set_colon_line_handler): Likewise.
444         (_gpgme_engine_op_decrypt): Likewise.
445         (_gpgme_engine_op_delete): Likewise.
446         (_gpgme_engine_op_encrypt): Likewise.
447         (_gpgme_engine_op_export): Likewise.
448         (_gpgme_engine_op_genkey): Likewise.
449         (_gpgme_engine_op_import): Likewise.
450         (_gpgme_engine_op_keylist): Likewise.
451         (_gpgme_engine_op_sign): Likewise.
452         (_gpgme_engine_op_trustlist): Likewise.
453         (_gpgme_engine_op_verify): Likewise.
454         (_gpgme_engine_start): Likewise.
455         * engine.c (_gpgme_engine_set_status_handler): New function.
456         (_gpgme_engine_set_command_handler): Likewise.
457         (_gpgme_engine_set_colon_line_handler): Likewise.
458         (_gpgme_engine_op_decrypt): Likewise.
459         (_gpgme_engine_op_delete): Likewise.
460         (_gpgme_engine_op_encrypt): Likewise.
461         (_gpgme_engine_op_export): Likewise.
462         (_gpgme_engine_op_genkey): Likewise.
463         (_gpgme_engine_op_import): Likewise.
464         (_gpgme_engine_op_keylist): Likewise.
465         (_gpgme_engine_op_sign): Likewise.
466         (_gpgme_engine_op_trustlist): Likewise.
467         (_gpgme_engine_op_verify): Likewise.
468         (_gpgme_engine_start): Likewise.
469
470         * verify.c (gpgme_op_verify_start): Reimplement in terms of above
471         functions.
472         * encrypt.c (gpgme_op_encrypt_start): Likewise.
473         * decrypt.c (_gpgme_decrypt_start): Likewise.
474         * passphrase.c (_gpgme_passphrase_start): Likewise.
475         * keylist.c (gpgme_op_keylist_start): Likewise.
476
477 2001-11-20  Marcus Brinkmann  <marcus@g10code.de>
478
479         * types.h: Add types EngineObject and GpgsmObject.
480
481         * Makefile.am (libgpgme_la_SOURCES): Add engine-gpgsm.h,
482         engine-gpgsm.c, engine.h and engine.c.
483         * engine.h: New file.
484         * engine.c: Likewise.
485         * engine-gpgsm.h: Likewise.
486         * engine-gpgsm.c: Likewise.
487         
488         * rungpg.c (_gpgme_gpg_get_version): New function.
489         (_gpgme_gpg_check_version): Likewise.
490         * rungpg.h: Add prototypes for _gpgme_gpg_get_version and
491         _gpgme_gpg_check_version.
492
493         * version.c (compare_versions): Rename to ...
494         (_gpgme_compare_versions): ... this.  Make non-static.
495         (gpgme_check_version): Use _gpgme_compare_versions rather than
496         compare_versions.
497         (gpgme_check_engine): Likewise.
498         * ops.h (_gpgme_get_program_version): Add prototype.
499
500 2001-11-20  Marcus Brinkmann  <marcus@g10code.de>
501
502         * Makefile.am (libgpgme_la_INCLUDES): Remove obsolete directive.
503         (AM_CPPFLAGS): New directive [BUILD_ASSUAN].
504         (libgpgme_la_LIBADD): Likewise.
505
506 2001-11-20  Marcus Brinkmann  <marcus@g10code.de>
507
508         * version.c: Remove global variables lineno and
509         tmp_engine_version.
510         (version_handler): Removed.
511         (_gpgme_get_program_version): New function.
512         (get_engine_info): Don't use context and version_handler,
513         but _gpgme_get_program_version.
514         * ops.h (_gpgme_get_program_version): Add prototype for
515         _gpgme_get_program_version (we expect to use it elsewhere soon).
516
517 2001-11-18  Marcus Brinkmann  <marcus@g10code.de>
518
519         * version.c (get_engine_info): If GnuPG is not available, return
520         an error message.
521         * posix-util.c (_gpgme_get_gpg_path): Allow GPG_PATH to be
522         undefined.
523         (_gpgme_get_gpgsm_path): New function.
524         * w32-util.c (find_program_in_registry): New static function.
525         (_gpgme_get_gpg_path): Allow GPG_PATH to be undefined.  Rework
526         to use find_program_in_registry.
527         (_gpgme_get_gpgsm_path): New function.
528         (util.h): Prototype _gpgme_get_gpgsm_path).
529         * rungpg.c (_gpgme_gpg_spawn): Verify that _gpgme_get_gpg_path()
530         returns non-null.
531
532 2001-11-16  Marcus Brinkmann  <marcus@g10code.de>
533
534         * decrypt-verify.c: New file.
535         * Makefile.am (libgpgme_la_SOURCES): Add decrypt-verify.c.
536         * types.h: Add decrypt-verify types.
537         * ops.h: Likewise.
538         * context.h: Add result type for decrypt-verify.
539         * gpgme.h: Add decrypt-verify prototypes.
540
541         * decrypt.c (decrypt_status_handler): Renamed to ...
542         (_gpgme_decrypt_status_handler): ... this.  Make non-static.
543         (_gpgme_decrypt_start): New function, derived from
544         gpgme_op_decrypt_start.
545         (gpgme_op_decrypt_start): Reimplement in terms of
546         _gpgme_decrypt_start.
547         (_gpgme_decrypt_result): New function to retrieve error value.
548         (gpgme_op_decrypt): Use _gpgme_decrypt_result.
549         * ops.h: Add prototypes for new functions.
550
551         * verify.c (verify_status_handler): Renamed to ...
552         (_gpgme_verify_status_handler): ... this.  Make non-static.
553         (gpgme_op_verify_start): Use new function name.
554         (intersect_stati): Renamed to ...
555         (_gpgme_intersect_stati): ... this.  Make non-static.
556         (gpgme_op_verify): Use new name.
557         * ops.h: Add prototypes for new functions.
558
559 2001-11-16  Marcus Brinkmann  <marcus@g10code.de>
560
561         * passphrase.c: New file.
562         * Makefile.am (libgpgme_la_SOURCES): Add passphrase.c.
563         * ops.h (_gpgme_passphrase_result): Add prototypes from
564         passphrase.c.
565         * types.h: Likewise.
566         * context.h: Add member passphrase to result.
567         * gpgme.c (_gpgme_release_result): Release passphrase member.
568
569         * decrypt.c: Some formatting and variable name changes (like
570         CTX instead C).
571         (struct decrypt_result_s): Remove members now found in
572         passphrase result.
573         (_gpgme_release_decrypt_result): Don't release removed members.
574         (decrypt_status_handler): Call _gpgme_passphrase_status_handler,
575         and don't handle the cases catched there.
576         (command_handler): Removed.
577         (gpgme_op_decrypt_start): Don't set command handler, but invoke
578         _gpgme_passphrase_start which does it.
579         (gpgme_op_decrypt): Invoke _gpgme_passphrase_result and drop the
580         cases covered by it.
581
582         * sign.c Some formatting and variable name changes (like
583         CTX instead C).
584         (struct sign_result_s): Remove members now found in
585         passphrase result.
586         (_gpgme_release_sign_result): Don't release removed members.
587         (sign_status_handler): Call _gpgme_passphrase_status_handler,
588         and don't handle the cases catched there.
589         (command_handler): Removed.
590         (gpgme_op_sign_start): Don't set command handler, but invoke
591         _gpgme_passphrase_start which does it.
592         (gpgme_op_sign): Invoke _gpgme_passphrase_result and drop the
593         cases covered by it.
594
595 2001-11-15  Marcus Brinkmann  <marcus@g10code.de>
596
597         * decrypt.c (command_handler): Fix last change.
598
599 2001-11-15  Marcus Brinkmann  <marcus@g10code.de>
600
601         * verify.c (_gpgme_release_verify_result): Rename RES to RESULT.
602         Rename R2 to NEXT_RESULT.
603         (intersect_stati): Rename RES to RESULT.
604         (gpgme_get_sig_status): Likewise.  Do not check return_type, but
605         the member verify of result.
606         (gpgme_get_sig_key): Likewise.
607
608         * sign.c (_gpgme_release_sign_result): Rename RES to RESULT.  If
609         RESULT is zero, return.
610         (sign_status_handler, command_handler): Do not check return_type,
611         but the member sign of result.
612         (gpgme_op_sign): Likewise.  Drop assertion.
613
614         * encrypt.c (_gpgme_release_encrypt_result): Rename RES to RESULT.
615         If RESULT is zero, return.
616         (encrypt_status_handler): Do not check return_type, but the member
617         encrypt of result.
618         (gpgme_op_encrypt): Likewise.  Drop assertion.
619
620         * decrypt.c (_gpgme_release_decrypt_result): Rename RES to RESULT.
621         (create_result_struct): Do not set result_type.
622         (command_handler, decrypt_status_handler): Do not check
623         return_type, but the member decrypt of result.
624         (gpgme_op_decrypt): Likewise.  Drop assertion.
625
626         * context.h (enum ResultType): Removed.
627         (struct gpgme_context_s): Remove member result_type.
628         (struct result): Replaces union result.
629         * gpgme.c: Include string.h.
630         (_gpgme_release_result): Release all members of c->result, which
631         is now a struct.  Zero out all members of the struct afterwards.
632
633 2001-11-11  Marcus Brinkmann  <marcus@g10code.de>
634
635         * rungpg.c (_gpgme_gpg_release): Release GPG->cmd.cb_data.
636         Release all members of the list GPG->arglist.
637         Reported by Michael Schmidt <mschmidt@cs.uni-sb.de>.
638
639 2001-11-02  Marcus Brinkmann  <marcus@g10code.de>
640
641         * rungpg.c (pipemode_copy): Change type of NBYTES to size_t.
642
643         * key.c: Include string.h.
644         * data.c: Likewise.
645         * recipient.c: Likewise.
646
647 2001-10-29  Marcus Brinkmann  <marcus@g10code.de>
648
649         * context.h: New member signers_len.
650         * signers.c (gpgme_signers_clear): Require that signers are
651         non-NULL with assertion.  Use signers_len to determine how much
652         keys to release.  Add documentation.
653         (gpgme_signers_add): Use signers_len to determine if the buffer is
654         large enough.  Use xtryrealloc rather than xtrymalloc and copying.
655         Add documentation.
656         (gpgme_signers_enum): Use signers_len to determine if key is
657         available.  Add documentation.
658
659 2001-10-22  Marcus Brinkmann  <marcus@g10code.de>
660
661         * data.c (_gpgme_data_append): Check if LENGTH is smaller than
662         ALLOC_CHUNK, not DH->length.
663
664 2001-10-17  Marcus Brinkmann  <marcus@g10code.de>
665
666         * gpgme.c (gpgme_set_protocol): Fix last change.
667
668 2001-10-15  Werner Koch  <wk@gnupg.org>
669
670         * gpgme.h (GpgmeProtocol): New.
671         * gpgme.c (gpgme_set_protocol): New.
672
673 2001-09-26  Werner Koch  <wk@gnupg.org>
674
675         * gpgme.c (gpgme_set_passphrase_cb): Ignore a NULL context.
676         (gpgme_set_progress_cb): Ditto. Suggested by Mark Mutz.
677
678 2001-09-17  Werner Koch  <wk@gnupg.org>
679
680         * keylist.c (finish_key): Shortcut for no tmp_key.  Changed all
681         callers to use this function without a check for tmp_key.
682         
683         * keylist.c (gpgme_op_keylist_next): Reset the key_cond after
684         emptying the queue.  Bug reported by Stéphane Corthésy.
685
686 2001-09-12  Werner Koch  <wk@gnupg.org>
687
688         * data.c (gpgme_data_rewind): Allow rewind for callbacks.
689
690 2001-09-07  Werner Koch  <wk@gnupg.org>
691
692         * rungpg.h: Add NO_RECP.
693         * encrypt.c (encrypt_status_handler): Take on No_RECP.
694         (gpgme_op_encrypt): Better error return.
695
696         * verify.c (verify_status_handler): Take on NODATA.
697
698 2001-09-03  Werner Koch  <wk@gnupg.org>
699
700         * rungpg.h: Added STATUS_INV_RECP.
701         * gpgme.c (_gpgme_release_result): Add support for new
702         EncryptResult object.
703         * encrypt.c (append_xml_encinfo): New.
704         (encrypt_status_handler): Add some status parsing.
705         (_gpgme_release_encrypt_result): New.
706
707 2001-08-29  Werner Koch  <wk@gnupg.org>
708
709         * recipient.c (gpgme_recipients_release): Free the list.  By Timo.
710
711         * keylist.c (keylist_colon_handler): Do a finish key if we receive
712         an EOF here.  This is probably the reason for a lot of bugs
713         related to keylisting.  It is so obvious.  Kudos to Enno Cramer
714         for pointing that out. 
715
716 2001-08-28  Werner Koch  <wk@gnupg.org>
717
718         * gpgme.c, gpgme.h (gpgme_get_op_info): New.
719         (_gpgme_set_op_info): New. 
720         (_gpgme_release_result): Reset the op_info here.
721         * sign.c (append_xml_siginfo): New.
722         (sign_status_handler): Store the sig create information.
723
724 2001-07-31  Werner Koch  <wk@gnupg.org>
725
726         * encrypt.c (gpgme_op_encrypt): Hack to detect no valid recipients.
727
728 2001-07-30  Werner Koch  <wk@gnupg.org>
729
730         * gpgme.c (gpgme_get_armor,gpgme_get_textmode): New.
731
732         * rungpg.c (build_argv): Disable armor comments
733         * w32-io.c (build_commandline): Need to add quotes here
734
735 2001-07-24  Werner Koch  <wk@gnupg.org>
736
737         * data.c (gpgme_data_read): Add a a way to return the available bytes.
738
739 2001-07-23  Werner Koch  <wk@gnupg.org>
740
741         * util.c: Removed stpcpy() because we use the version from jnlib.
742
743 2001-07-19  Werner Koch  <wk@gnupg.org>
744
745         * mkstatus: Define the collating sequence for sort.
746
747 2001-06-26  Werner Koch  <wk@gnupg.org>
748
749         * rungpg.h: Add STATUS_UNEXPECTED as suggested by Timo.
750
751 2001-06-15  Werner Koch  <wk@gnupg.org>
752
753         * keylist.c (set_userid_flags): Fixed the assigned values. Kudos
754         to Timo for pointing this out.
755
756 2001-06-01  Werner Koch  <wk@gnupg.org>
757
758         * debug.c (_gpgme_debug_begin): Fixed a /tmp race.  Noted by
759         Johannes Poehlmann.
760
761 2001-05-28  Werner Koch  <wk@gnupg.org>
762
763         * version.c (gpgme_check_engine): Stop version number parsing at
764         the opening angle and not the closing one.  By Tommy Reynolds.
765
766 2001-05-01  José Carlos García Sogo <jose@jaimedelamo.eu.org>
767
768         * encrypt.c (gpgme_op_encrypt_start): Deleted the assert ( !c->gpg )
769         line, because it gave an error if another operation had been made 
770         before using the same context.
771         
772         * decrypt.c (gpgme_op_decrypt_start): The same as above. Also added 
773         one line to release the gpg object in the context (if any).
774         
775 2001-04-26  Werner Koch  <wk@gnupg.org>
776
777         * key.c, key.h (_gpgme_key_cache_init): New.
778         (_gpgme_key_cache_add): New.
779         (_gpgme_key_cache_get): New.
780         * version.c (do_subsystem_inits): Init the cache.
781         * keylist.c (finish_key): Put key into the cache
782         * verify.c (gpgme_get_sig_key): First look into the cache.
783
784 2001-04-19  Werner Koch  <wk@gnupg.org>
785
786         * keylist.c (parse_timestamp): Adjusted for the changed
787         --fixed-list-mode of gpg 1.0.4h.
788
789 2001-04-05  Werner Koch  <wk@gnupg.org>
790
791         * verify.c (gpgme_op_verify_start): Enabled pipemode for detached sigs.
792
793 2001-04-04  Werner Koch  <wk@gnupg.org>
794
795         * w32-io.c (_gpgme_io_select): Don't select on the writer if there
796         are still bytes pending.  Timo found this not easy to track down
797         race condition. 
798
799 2001-04-02  Werner Koch  <wk@gnupg.org>
800
801         * gpgme.h: Add GPGME_ATTR_KEY_{EXPIRED,DISABLED}.
802         * key.c (gpgme_key_get_ulong_attr): And return those attribs.
803
804         * verify.c (gpgme_get_sig_key): Set keyliosting mode depending on 
805         the mode set in the current context.  Suggested by Timo.
806
807         * key.c (gpgme_key_get_ulong_attr): Return can_certify and not
808         can_encrypt. By Timo.
809
810 2001-03-30  Werner Koch  <wk@gnupg.org>
811
812         * debug.c (debug_init): Allow to specify a debug file.
813         (_gpgme_debug_level): New.
814
815         * posix-io.c (_gpgme_io_read, _gpgme_io_write): Print output.
816         (_gpgme_io_select): Debug only with level > 2.
817
818 2001-03-15  Werner Koch  <wk@gnupg.org>
819
820         * rungpg.c: Included time.h.
821
822         * key.h: New keyflags for capabilities.
823         * keylist.c (set_mainkey_capability, set_subkey_capability): New.
824         (keylist_colon_handler): Parse them.
825         * gpgme.h: New attribute values for capabilties.
826         * key.c (gpgme_key_get_string_attr): Return them.
827         (capabilities_to_string): New.
828         (gpgme_key_get_ulong_attr): Return the global caps.
829
830 2001-03-14  Werner Koch  <wk@gnupg.org>
831
832         * w32-io.c (destroy_reader,destroy_writer): Fixed syntax error. 
833         Thanks to Jan Oliver Wagner.
834
835 2001-03-13  Werner Koch  <wk@gnupg.org>
836
837         * context.h: Add invalid and revoke flags to user_id structure.
838         * keylist.c (gpgme_op_keylist_start): Use --fixed-list-mode.
839         (keylist_colon_handler): Adjust for that.
840         (set_userid_flags): New. 
841         (set_mainkey_trust_info): Handle new key invalid flag
842         (set_subkey_trust_info): Ditto.
843         * gpgme.h: Add new attributes for key and user ID flags.
844         * key.c (_gpgme_key_append_name): Init these flags
845         (gpgme_key_get_as_xml): Print them.
846         (one_uid_as_xml): New helper for above.
847         (gpgme_key_get_string_attr, gpgme_key_get_ulong_attr):
848         Return the new attributes.  Enhanced, so that subkey information
849         can be returned now.
850
851 2001-02-28  Werner Koch  <wk@gnupg.org>
852
853         * w32-io.c (destroy_reader): Set stop_me flag.
854         (writer,create_writer,destroy_writer,find_writer,kill_writer): New.
855         (_gpgme_io_write): Use a writer thread to avaoid blocking.
856         (_gpgme_io_close): Cleanup a writer thread
857         (_gpgme_io_select): Repalce tthe faked wait on writing by a real
858         waiting which is now possible due to the use of a writer thread.
859
860 2001-02-20  Werner Koch  <wk@gnupg.org>
861
862         * w32-io.c (destroy_reader,kill_reader): New. 
863         (create_reader, reader): Add a new event to stop the thread.
864         (_gpgme_io_close): Kill the reader thread.
865
866         * posix-io.c (_gpgme_io_select): Handle frozen fds here. 
867         * 32-io.c (_gpgme_io_select): Ditto. Removed a bunch of unused code.
868
869         * wait.c: Reworked the whole thing.
870         * rungpg.c (_gpgme_gpg_new): Init pid to -1.
871         (_gpgme_gpg_release): Remove the process from the wait queue.
872
873 2001-02-19  Werner Koch  <wk@gnupg.org>
874
875         * w32-io.c (_gpgme_io_set_close_notify): New.
876         (_gpgme_io_close): Do the notification.
877
878         * posix-io.c (_gpgme_io_select): Use a 1 sec timeout and not 200
879         microseconds.
880
881         * wait.c (remove_process): Don't close the fd here.
882         (do_select): Set the fd to -1 and remove the is_closed flag everywhere.
883         (_gpgme_wait_on_condition): Remove the assert on the queue and
884         break out if we could not find the queue.  The whole thing should
885         be reworked.
886
887         * posix-io.c (_gpgme_io_set_close_notify): New.
888         (_gpgme_io_close): Do the notification.
889
890         * rungpg.c (close_notify_handler): New. 
891         (_gpgme_gpg_new): Register a callback for the fd.
892         (_gpgme_gpg_set_colon_line_handler): Ditto.
893         (build_argv): Ditto
894
895 2001-02-13  Werner Koch  <wk@gnupg.org>
896
897         * rungpg.c (struct reap_s): Replaced pid_t by int.
898
899         * types.h: Add ulong typedef.
900
901         * rungpg.c (do_reaping,_gpgme_gpg_housecleaning): New.
902         (_gpgme_gpg_release): Reap children.
903         * io.h, posix-io.c (_gpgme_io_kill): New.
904         * w32-io.c (_gpgme_io_kill): New (dummy).
905
906         * keylist.c (gpgme_op_keylist_start): Cancel a pending request.
907
908         * posix-io.c (_gpgme_io_read): Add some debug output. 
909         (_gpgme_io_write): Ditto.
910         (_gpgme_io_select): Increased the timeout.
911
912 2001-02-12  Werner Koch  <wk@gnupg.org>
913
914         Enhanced the signature verification, so that it can how handle
915         more than one signature and is able to return more information on 
916         the signatures.
917         * verify.c (gpgme_get_sig_key): New.
918         (gpgme_get_sig_status): New.
919
920         * gpgme.h: Add stdio.h. 
921         (GpgmeSigStat): New status DIFF.
922
923 2001-02-01  Werner Koch  <wk@gnupg.org>
924
925         * w32-io.c (set_synchronize): Add EVENT_MODIFY_STATE.  Add Debug
926         code to all Set/ResetEvent().
927
928         * rungpg.c (read_status): Check for end of stream only if we have
929         an r.  By Timo.
930
931 2001-01-31  Werner Koch  <wk@gnupg.org>
932
933         * wait.c (_gpgme_wait_on_condition): Removed all exit code processing.
934         (propagate_term_results,clear_active_fds): Removed.
935         (count_active_fds): Renamed to .. 
936         (count_active_and_thawed_fds): .. this and count only thawed fds. 
937
938         * rungpg.c (gpg_colon_line_handler): Return colon.eof and not
939         status.eof ;-)
940
941 2001-01-30  Werner Koch  <wk@gnupg.org>
942
943         * w32-io.c (_gpgme_io_spawn): Use the supplied path arg.
944
945         * version.c (get_engine_info): Return better error information.
946
947         * posix-util.c, w32-util.c: New.
948         (_gpgme_get_gpg_path): New, suggested by Jan-Oliver.
949         * rungpg.c (_gpgme_gpg_spawn): Use new function to get GPG's path.
950
951         * signers.c (gpgme_signers_add): Ooops, one should test code and
952         not just write it; the newarr was not assigned.  Thanks to José
953         for pointing this out.  Hmmm, still not tested, why shoudl a coder
954         test his fix :-)
955
956         * w32-io.c: Does now use reader threads, so that we can use
957         WaitForMultipleObjects. 
958         * sema.h, posix-sema.c, w32-sema.c: Support for Critcial sections.
959         Does currently only work for W32.
960
961         * debug.c, util.h : New. Changed all fprintfs to use this new
962         set of debugging functions.
963
964 2001-01-23  Werner Koch  <wk@gnupg.org>
965
966         * data.c (_gpgme_data_release_and_return_string): Fixed string
967         termination.
968
969 2001-01-22  Werner Koch  <wk@gnupg.org>
970
971         * delete.c: New.
972
973         * signers.c: New.
974         * key.c (gpgme_key_ref, gpgme_key_unref): New.
975         * sign.c (gpgme_op_sign_start): Allow the use of other keys.
976
977         * version.c (gpgme_get_engine_info,gpgme_check_engine): New.
978         * rungpg.c (_gpgme_gpg_set_simple_line_handler): New.
979
980 2001-01-05  Werner Koch  <wk@gnupg.org>
981
982         * data.c (gpgme_data_rewind): Allow to rewind data_type_none.
983
984
985  Copyright 2001, 2002 g10 Code GmbH
986
987  This file is free software; as a special exception the author gives
988  unlimited permission to copy and/or distribute it, with or without
989  modifications, as long as this notice is preserved.
990
991  This file is distributed in the hope that it will be useful, but
992  WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
993  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
994