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