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