1 2010-11-03 Werner Koch <wk@g10code.com>
3 * setenv.c: Include string.h due to our strerror replacement.
5 * w32-ce.h (access): New macro.
6 * w32-ce.c (_gpgme_wince_access): New.
7 (RegQueryValueExA): Change DATA to a void*.
9 Guard include of sys/stat.h and sys/types.h.
11 2010-11-02 Werner Koch <wk@g10code.com>
13 * data-fd.c (read, write, lseek) [W32CE && ! __MINGW32CE__]: New.
14 Taken from Pedro Alves Public Domain code.
16 * w32-ce.h (SHGetSpecialFolderPath): Remove our defines and
17 prototypes. We use the system provided prototypes now.
18 * w32-ce.c: Include shlobj.h
19 (_WIN32_IE): Define to 0x0400
21 * w32-util.c: Explicitly include windows headers before util.h.
22 (_gpgme_w32ce_get_debug_envvar): Do not use wchar_t strings for
23 read_w32_registry_string.
24 (mkstemp): Use CreateFile instead of open.
26 * w32-io.c (handle_to_fd, fd_tohandle): Add. We need them for W32.
27 * w32-util.c (_WIN32_IE): Define to 0x0400.
29 * util.h [W32]: Include windows.h.
30 * w32-sema.c: Do not include windows.h directly.
31 * ath.c (ssize_t, pid_t)[_MSC_VER]: Add new types.
32 * gpgme.c (gpgme_result_ref, gpgme_result_unref): Do not use a
33 void pointer in pointer arithmetic.
34 * w32-util.c: Include util.h prior to ath.h. Don't include
36 (F_OK): Define if not defined.
37 * w32-ce.c: Include string.h.
38 (RegQueryValueExA): Use WINAPI modifier to match the declaration.
39 * vfs-create.c: Include string.h because under W32CE with MSC we
40 get a warning related to our strerror replacement.
41 * encrypt-sign.c: Include stdlib.h, string.h and errno.h.
42 * priv-io.h [W32CE]: Include w32-ce.h
43 * w32-ce.h: Include winsock2.h and ws2tcpip.h.
44 (_MSV_VER): Remove useless macro.
47 Guard all includes of unistd.h and sys/time.h.
49 2010-10-28 Marcus Brinkmann <marcus@g10code.com>
51 * opassuan.c (gpgme_op_assuan_transact_ext): Fix uninitialized
52 value use. Reported by Marc Mutz.
54 2010-10-07 Werner Koch <wk@g10code.com>
56 * gpgme-tool.c (ARGP_ERR_UNKNOWN): Use EDEADLK if available.
58 * w32-util.c (_gpgme_w32ce_get_debug_envvar) [W32CE]: New.
59 * debug.c (debug_init) [W32CE]: Use new function.
61 2010-09-16 Werner Koch <wk@g10code.com>
63 * import.c: Include "util.h".
64 (parse_import): Return GPG_ERR_MISSING_ISSUER_CERT.
66 * util.h: Add fallback define for GPG_ERR_MISSING_ISSUER_CERT.
67 * op-support.c: Include "util.h".
68 (_gpgme_parse_inv_recp): Handle new code 12.
70 2010-09-02 Marcus Brinkmann <marcus@g10code.de>
72 * error.c (gpgme_err_code_to_errno): Fix cut and paste bug (thanks
75 2010-09-01 Marcus Brinkmann <marcus@g10code.de>
77 * w32-io.c: Revert change from 2009-06-18, as it created a race
80 2010-08-18 Marcus Brinkmann <marcus@g10code.de>
82 * gpgme.def: Add gpgme_err_code_from_syserror and gpgme_err_set_errno.
83 * libgpgme.vers: Likewise.
84 * gpgme.h.in (gpgme_error_from_errno): Fix return type to
86 (gpgme_err_code_from_syserror, gpgme_err_set_errno): New prototype.
87 (gpgme_error_from_syserror): New inline function (why are
88 gpgme_err_make_from_errno and gpgme_error_from_errno not inline
90 * error.c (gpgme_error_from_errno): Fix return type to gpgme_error_t.
91 (gpgme_err_set_errno, gpgme_err_code_from_syserror): New functions.
93 2010-08-03 Marcus Brinkmann <marcus@g10code.de>
95 * gpgme-tool.c (result_encrypt_to_xml, result_sign_to_xml)
96 (result_verify_to_xml, result_import_to_xml)
97 (result_genkey_to_xml): Check vigorously for null pointers.
99 * w32-io.c (GPGCEDEV_IOCTL_ASSIGN_RVID): New macro.
100 (_gpgme_io_spawn): Use ASSIGN_RVID.
102 2010-06-11 Marcus Brinkmann <marcus@g10code.de>
104 * w32-io.c (_gpgme_io_spawn): Remove debug printf.
106 2010-06-10 Marcus Brinkmann <marcus@g10code.de>
108 * gpgme-tool.c (gpgme_server): Use special hack for Windows CE to
109 get at stdin and stdout.
111 * engine-gpgsm.c (gpgsm_new): Translate returned achild_fds back
114 * debug.h (TRACE_SUC6): New macro.
115 * w32-io.c (MAX_SLAFD): New macro.
116 (fd_table): New static variable.
117 (new_fd, release_fd): New functions.
118 (fd_to_handle, handle_to_fd, handle_to_socket): Remove macros.
119 (MAX_READERS, MAX_WRITERS): Increase to 64.
120 (notify_table): Increase to MAX_SLAFD.
121 (struct reader_context_s, struct writer_context_s): Add member
123 (reader, writer): Use file_hd vs file_sock to decide if socket
124 operations to use. Remove auto-detect mode.
125 (create_reader, create_writer): Set file_sock. Unblock pending
126 thread only if this is a pipe fd.
127 (_gpgme_io_pipe): Allocate fds from table and return slot indices
128 instead of windows handles. This allows to properly handle RVIDs.
129 (_gpgme_io_close): Handle dup'ed file descriptors.
130 (build_commandline) [HAVE_W32_SYSTEM]: Use RVID from fd table now.
131 (_gpgme_io_spawn): Use fd table now.
132 (_gpgme_io_fd2str): Use RVID from fd table now.
133 (_gpgme_io_dup): Implement using fd table.
134 (_gpgme_io_socket): Allocate fds from table.
135 (_gpgme_io_connect): Use fd from table.
137 * w32-glib-io.c (find_channel): Check that the slot is used.
139 2010-06-09 Marcus Brinkmann <marcus@g10code.de>
141 * w32-io.c [HAVE_W32CE_SYSTEM]: Include assuan.h and winioctl.h.
142 (GPGCEDEV_IOCTL_UNBLOCK) [HAVE_W32CE_SYSTEM]: Define.
143 (set_synchronize) [HAVE_W32CE_SYSTEM]: Stub it out.
144 (is_socket): Allow to return -1 for auto-detect (old behaviour).
145 (is_socket) [HAVE_W32CE_SYSTEM]: Return -1.
146 (reader): Handle auto-detect case. Handle ctx->stop_me before
148 (destroy_reader) [HAVE_W32CE_SYSTEM]: Unblock a pending reader.
149 (writer): Handle auto-detect case. Handle ctx->stop_me with
151 (destroy_writer) [HAVE_W32CE_SYSTEM]: Unblock a pending writer.
152 (_gpgme_io_pipe) [HAVE_W32CE_SYSTEM]: Implement in terms of a
154 (build_commandline) [HAVE_W32CE_SYSTEM]: New function.
155 (_gpgme_io_spawn) [HAVE_W32CE_SYSTEM]: Implement it differently
157 (_gpgme_io_fd2str) [HAVE_W32CE_SYSTEM]: Implement it for RVIDs.
158 (_gpgme_io_dup) [HAVE_W32CE_SYSTEM]: Stub it out.
160 * gpgme-tool.c (result_add_timestamp): Add missing NULL argument.
161 (result_sign_to_xml): Protect against NULL fingerprint.
162 (struct server): New members input_fd, input_filename,
163 input_stream output_fd, output_filename, output_stream,
164 message_filename, message_stream.
165 (server_reset_fds): Deallocate those.
166 (server_parse_fd): New function.
167 (server_data_obj): Take optional filename argument and direction
168 argument. Also take new argument to return a filestream that
169 needs to be closed after destroying the data object.
170 Change all callers, too.
171 (input_notify, output_notify): Removed.
172 (cmd_input, cmd_output): New functions.
173 (gpgme_server): Do not register input and output notifier.
174 (register_commands): Use cmd_input and cmd_output.
175 (cmd_message): Rewritten to use server_parse_fd.
176 (cmd_delete, cmd_keylist): Fix inverted option check.
177 (main) [HAVE_W32CE_SYSTEM]: Sleep a bit to work around bug in ssh.
179 * genkey.c (gpgme_op_genkey): Return err with TRACE_ERR.
181 2010-05-12 Marcus Brinkmann <marcus@g10code.de>
183 * conversion.c (_gpgme_timegm) [HAVE_W32_SYSTEM]: New static
185 (_gpgme_parse_timestamp) [HAVE_W32_SYSTEM]: Use it.
187 * gpgme-tool.c (main): Protect call to setlocale with
190 * Makefile.am (system_components): Remove custom cppflags from
191 RCCOMPILE (because gpg-error adds -idirafter that makes RC bail.
192 [HAVE_W32CE_SYSTEM]: Add w32-ce.h and w32-ce.c, clear
194 * w32-ce.h, w32-ce.c: New files.
196 * priv-io.h: Include <sys/types.h>
199 2010-05-11 Marcus Brinkmann <marcus@g10code.de>
201 * w32-util.c: Include ath.h
202 (HAVE_ALLOW_SET_FOREGROUND_WINDOW) [!HAVE_W32CE_SYSTEM]: Define
204 (RTLD_LAZY, dlopen, dlsym,
205 dlclose) [!HAVE_ALLOW_SET_FORGROUND_WINDOW]: Don't define anymore.
206 (_gpgme_allow_set_foreground_window) [!HAVE_ALLOW_SET_FOREGROUND_WINDOW]:
208 (read_w32_registry_string): Use FooA variants of Windows functions
209 instead of Foo (which dispatches depending on UNICODE).
210 [!HAVE_W32CE_SYSTEM]: Don't check environment.
211 (w32_shgetfolderpath): Remove.
212 (find_program_at_standard_place): Call
213 SHGetSpecialFolderPath (which is available on all Windows systems
214 and also Windows CE).
215 (mkstemp): Use ath_self instead of getpid.
216 (_gpgme_mkstemp): Use GetTempPathA instead of GetTempPath.
218 * gpgme.h.in: Use _WIN32 instead of _MSC_VER. Include time.h for
221 2010-05-07 Marcus Brinkmann <marcus@g10code.de>
223 * engine-g13.c, gpgme.c, engine-gpgsm.c, engine-gpg.c,
224 op-support.c, engine-assuan.c, gpgme-tool.c: Include <locale.h>
225 only if available with HAVE_LOCALE_H and conditionalize use of
226 LC_CTYPE on its definition.
227 * engine-gpgconf.c: Do not include <locale.h>.
229 * engine-gpgsm.c (gpgsm_new, start): Cast between int and
231 * assuan-support.c (my_pipe, my_close, my_read, my_write): Likewise.
232 * gpgme-tool.c (server_data_obj, server_reset_fds, gpgme_server),
233 (my_recvmsg, my_sendmsg, my_spawn): Likewise.
234 * engine-assuan.c (start): Likewise.
235 * engine-g13.c (start): Likewise.
237 2010-05-06 Marcus Brinkmann <marcus@g10code.de>
239 * w32-glib-io.c, w32-io.c, w32-qt-io.cpp, w32-sema.c, w32-util.c:
240 Do not include <signal.h>.
242 * sign.c, data-user.c, conversion.c, debug.c, verify.c, data.c,
243 decrypt.c, delete.c, assuan-support.c, import.c, engine-gpgsm.c,
244 data-mem.c, op-support.c, w32-io.c, w32-util.c, data-compat.c: Use
245 gpg_error_from_syserror instead gpg_error_from_errno, and use
246 gpg_err_set_errno to set error number.
247 * setenv.c: Include <gpg-error.h> and define __set_errno to use
249 * gpgme-tool.c (ARGP_ERR_UNKNOWN): Define to EDEADLOCK (which is
250 mapped in Windows CE) instead of E2BIG (which is not).
251 (gt_import_keys): Initialize err.
253 2010-04-19 Marcus Brinkmann <marcus@g10code.de>
255 * assuan-support.c (my_spawn): Cast to avoid warning.
256 * engine-g13.c (g13_new): Make ARGV array of pointer to const
258 (g13_assuan_simple_command) [!USE_DESCRIPTOR_FUNCTION]: Don't define.
259 * ops.h (_gpgme_key_append_name): Same in prototype.
260 * key.c (_gpgme_key_append_name): Make SRC argument pointer to
262 * posix-util.c (_gpgme_get_uiserver_socket_path): Make HOMEDIR
264 * vfs-mount.c (gpgme_op_vfs_transact_start): Never define this
265 potentially useful but currently unused function.
266 * vfs-create.c (gpgme_op_vfs_transact_start): Likewise.
268 2010-04-16 Werner Koch <wk@g10code.com>
270 * w32-io.c (is_socket): New.
271 (reader, writer): Use it to figure out the API to use.
273 2010-03-15 Werner Koch <wk@g10code.com>
275 * gpgme.h.in: Add autoconf template to set generated file to
276 read-only in an emacs buffer.
278 2010-03-12 Werner Koch <wk@g10code.com>
280 * gpgme.h.in (GPGME_STATUS_SUCCESS): Use the right file for the
283 * passwd.c (op_data_t): New.
284 (passwd_start): Setup OPD.
285 (passwd_status_handler): Return GPG_ERR_NOT_SUPPORTED if needed.
286 * context.h (OPDATA_PASSWD): New.
287 * gpgme.h (GPGME_STATUS_SUCCESS): New.
289 2010-03-09 Werner Koch <wk@g10code.com>
291 * engine-gpgsm.c (gpgsm_keylist): Try to start the agent.
293 2010-02-17 Werner Koch <wk@g10code.com>
295 * posix-io.c (notify_table): Change implementation.
296 (notify_table_item_t, notify_table_size, notify_table_lock): New.
297 (_gpgme_io_close, _gpgme_io_set_close_notify): Adjust for new
300 2010-02-16 Werner Koch <wk@g10code.com>
302 * gpgme-tool.c (spacep, has_option, skip_options): New.
303 (cmd_export): Implement option --minimal.
305 * gpgme.h.in (GPGME_EXPORT_MODE_MINIMAL): New.
306 * export.c (export_start, export_ext_start): Implement it.
307 * engine-gpg.c (export_common): Ditto.
309 2010-01-25 Werner Koch <wk@g10code.com>
311 * w32-io.c (_gpgme_io_connect): Fix return code check to make it work.
313 * version.c (do_subsystem_inits): Remove superfluous second
316 2010-01-22 Werner Koch <wk@g10code.com>
318 * w32-io.c (writer): Try to use send first.
319 (reader): Try to use recv first.
321 2010-01-08 Werner Koch <wk@g10code.com>
323 * engine-gpg.c (gpg_passwd): New.
324 (_gpgme_engine_ops_gpg): Register.
325 * passwd.c (parse_error): New.
326 (passwd_status_handler): Use it.
328 2010-01-07 Marcus Brinkmann <marcus@g10code.de>
330 * gpgme-tool.c (result_xml_write_cb_t, struct result_xml_state):
332 (MAX_TAGS): New macro.
333 (result_init, result_xml_indent, result_xml_tag_start)
334 (result_xml_tag_data, result_xml_tag_end, result_add_error)
335 (result_add_pubkey_algo, result_add_hash_algo, result_add_keyid)
336 (result_add_fpr, result_add_timestamp, result_add_sig_mode)
337 (result_add_value, result_add_string, result_encrypt_to_xml)
338 (result_decrypt_to_xml, result_sign_to_xml)
339 (result_verify_to_xml, result_import_to_xml)
340 (result_genkey_to_xml, result_keylist_to_xml)
341 (result_vfs_mount_to_xml): New functions.
342 (gt_result): Rewritten.
344 2010-01-05 Werner Koch <wk@g10code.com>
346 * gpgme-tool.c (gt_passwd, cmd_passwd): New.
347 (register_commands): Register.
349 * gpgme.h.in (gpgme_op_passwd_start, gpgme_op_passwd): New.
350 * libgpgme.vers, gpgme.def: Add new functions.
352 * Makefile.am (main_sources): Add passwd.c
353 * engine.c, engine.h (_gpgme_engine_op_passwd): New.
354 * engine-backend.h (struct engine_ops): Add PASSWD.
355 * engine-gpgsm.c (gpgsm_passwd): New.
356 (_gpgme_engine_ops_gpgsm): Register.
357 (gpgsm_reset): Reset only if we have a conenction.
359 * gpgme.h.in (GPGME_PK_ECDSA, GPGME_PK_ECDH): New.
360 * gpgme.c (gpgme_pubkey_algo_name): Add them.
362 2009-12-22 Marcus Brinkmann <marcus@g10code.de>
364 * debug.c: Test for TLS, not __GNUC__
366 2009-12-15 Marcus Brinkmann <marcus@g10code.de>
368 * assuan-support.c (my_spawn): Calloc, not malloc, the fd_items.
370 2009-12-10 Werner Koch <wk@g10code.com>
372 * debug.c (debug_init): Test on sgid process.
374 2009-12-08 Marcus Brinkmann <marcus@g10code.de>
376 * Makefile.am (LTRCCOMPILE): Refactor with ...
377 (RCCOMPILE): ... this new macro.
379 (gpgme_res_ldflag): Removed.
380 (gpgme_res): Use libtool object file name here.
381 (libgpgme_la_LDFLAGS): Remove gpgme_res_ldflag usage.
382 (libgpgme_la_LIBADD): Add gpgme_res.
384 * ath.c (ath_self) [HAVE_W32_SYSTEM]: Fix typo.
386 2009-12-02 Werner Koch <wk@g10code.com>
388 * gpgconf.c (gpgme_conf_arg_release): No return in a function
389 returning void. Reported by Wyllys Ingersoll.
391 2009-12-01 Werner Koch <wk@g10code.com>
393 * gpgme-tool.c (cmd_getauditlog): Add flag --html.
394 (hlp_getauditlog): New.
396 * gpgme-tool.c (GT_GCC_A_SENTINEL, GT_GCC_A_PRINTF): New.
397 (gt_write_status): Use sentinel.
398 (argp_error, log_error): Use printf attribute.
399 (argp_parse): Remove extra argument to argp_error.
400 (_gt_progress_cb, gt_get_engine_info, gt_get_keylist_mode)
401 (gt_result): Add NULL arg.
403 2009-11-26 Marcus Brinkmann <marcus@g10code.de>
405 * opassuan.c (opassuan_start): Allocate result structure before
408 2009-11-25 Marcus Brinkmann <marcus@g10code.de>
410 * gpgme-tool.c (gpgme_server): Use assuan_fd_t and assuan_fdopen
413 2009-11-13 <wk@g10code.com>
415 * sign.c (_gpgme_sign_status_handler): Handle SIG_CREATED_SEEN.
416 * engine-uiserver.c (uiserver_sign): Make sending SENDER optional.
418 2009-11-10 Marcus Brinkmann <marcus@g10code.de>
420 * op-support.c (_gpgme_op_reset): Instead of last change, only set
421 sub protocol if it is not the default.
423 2009-11-10 Werner Koch <wk@g10code.com>
425 * op-support.c (_gpgme_op_reset): Ignore GPG_ERR_NOT_IMPLEMENTED
426 while setting the sub protocol.
428 * engine-uiserver.c (uiserver_new): Pass fdpassing flag to
429 assuan_socket_connect.
430 (set_recipients): Replace fingerprint by user id.
432 * engine-gpgsm.c (set_recipients): Fix non-terminating loop in
433 case of a missing key.
435 2009-11-10 Marcus Brinkmann <marcus@g10code.de>
437 * gpgme.c (gpgme_new): Set default sub protocol.
438 * gpgme-tool.c: Implement get sub protocol.
440 * gpgme.h.in (gpgme_get_sub_protocol): Add prototype.
441 * gpgme.def, libgpgme.vers: Add gpgme_get_sub_protocol.
442 * context.h (struct gpgme_context): New member sub_protocol.
443 * gpgme.c (gpgme_set_sub_protocol): Set CTX->sub_protocol.
444 (gpgme_get_sub_protocol): New function.
445 * op-support.c (_gpgme_op_reset): Set sub protocol.
447 * Makefile.am (uiserver_components): New variable.
448 (main_sources): Add it.
449 * ops.h, key.c (_gpgme_key_append_name): Take CONVERT argument,
450 implement it. Adjust callers.
451 (gpgme_key_from_uid): New function.
452 * gpgme.h.in (gpgme_protocol_t): Add GPGME_PROTOCOL_DEFAULT.
453 (gpgme_encrypt_flags_t): Add GPGME_ENCRYPT_PREPARE,
454 GPGME_ENCRYPT_EXPECT_SIGN.
455 (gpgme_set_sub_protocol, gpgme_key_from_uid): New functions.
456 * libgpgme.vers, gpgme.def: Add new functions.
457 * gpgme.c (gpgme_set_protocol): Add UIServer protocol.
458 (gpgme_set_sub_protocol): New function.
459 (gpgme_get_protocol_name): Add UIServer and default protocol.
460 * assuan-support.c: Return correct error values, implement
461 socketpair for POSIX.
462 * priv-io.h, posix-io.c, w32-io.c, w32-glib-io.c,
463 w32-qt-io.cpp (_gpgme_io_spawn): Add ATFORK and ATFORKVALUE
464 arguments. Implement it for POSIX. Adjust all callers.
465 * engine.h, engine-backend.h (_gpgme_engine_set_protocol)
466 (_gpgme_engine_op_decrypt_verify): New prototypes. Adjust all
468 * engine.c (engine_ops, gpgme_get_engine_info): Add UIServer
470 (_gpgme_engine_set_protocol, _gpgme_engine_op_decrypt_verify): New
472 * decrypt-verify.c (decrypt_verify_start): Call
473 _gpgme_engine_op_decrypt_verify.
474 * util.h, posix-util.c,
475 w32-util.c (_gpgme_get_uiserver_socket_path): New function.
476 * engine-gpgsm.c (gpgsm_set_fd): Fix _gpgme_io_pipe invocation.
477 * gpgme-tool.c: Some support for UIServer protocol.
478 * engine-uiserver.c: New file.
480 2009-11-09 Marcus Brinkmann <marcus@g10code.de>
482 * engine-gpgsm.c (gpgsm_new): Close server side FDs.
484 2009-11-06 Marcus Brinkmann <marcus@g10code.de>
486 * gpgme-tool.c (struct gpgme_tool): New members write_data and
488 (gt_write_data): New function.
489 (gt_result): Output vfs_mount result.
490 (server_write_data): New function.
491 (gpgme_server): Initialize write_data members.
493 2009-11-05 Marcus Brinkmann <marcus@g10code.de>
495 * engine-g13.c (struct engine_g13): Remove members RESULT_CB and
497 (g13_assuan_simple_command, status_handler): Don't use those anymore.
498 (g13_transact): Remove them from argument list, too.
499 * vfs-mount.c (_gpgme_vfs_mount_status_handler): New function.
500 (_gpgme_op_vfs_mount): Pass it to transact.
502 * engine-assuan.c (llass_new): Update use of assuan_socket_connect.
503 * engine-gpgsm.c (gpgsm_new): Update use of assuan_pipe_connect.
504 * engine-g13.c (g13_new): Likewise.
506 * priv-io.h (IOSPAWN_FLAG_NOCLOSE): New flag.
507 * w32-io.c (_gpgme_io_spawn): Implement this flag.
508 * posix-io.c (_gpgme_io_spawn): Likewise.
509 * w32-glib-io.c (_gpgme_io_spawn): Likewise.
510 * assuan-support.c (my_spawn): Set this flag.
512 * decrypt.c (gpgme_op_decrypt_start): Fix use of debug macro.
513 * decrypt-verify.c (gpgme_op_decrypt_verify_start): Likewise.
514 * delete.c (gpgme_op_delete_start): Likewise.
515 * edit.c (gpgme_op_edit_start, gpgme_op_card_edit_start):
517 * encrypt.c (gpgme_op_encrypt_start): Likewise.
518 * encrypt-sign.c (gpgme_op_encrypt_sign_start): Likewise.
519 * export.c (gpgme_op_export_start, gpgme_op_export_ext_start)
520 (gpgme_op_export_keys_start, gpgme_op_export_keys): Likewise.
521 * genkey.c (gpgme_op_genkey_start): Likewise.
522 * getauditlog.c (gpgme_op_getauditlog_start): Likewise.
523 * import.c (gpgme_op_import_start, gpgme_op_import_keys_start):
525 * opassuan.c (gpgme_op_assuan_transact_start): Likewise.
526 * sign.c (gpgme_op_sign_start): Likewise.
527 * verify.c (gpgme_op_verify_start): Likewise.
528 * vfs-create.c (gpgme_op_vfs_create): Likewise.
529 * vfs-mount.c (gpgme_op_vfs_mount): Likewise.
531 2009-11-04 Marcus Brinkmann <marcus@g10code.de>
533 * ath.h (ath_self): New prototype. Include <stdint.h>
534 * ath.c, ath-pth.c, ath-pthread.c (ath_self): New function.
535 * debug.h: Rewrite most macros to beautify debug output.
536 (_gpgme_debug_buffer): Remove tagname and tag argument.
537 (_gpgme_debug_frame_begin, _gpgme_debug_frame_end): New prototypes.
538 * debug.c: Include <time.h>. Don't include assuan.h.
539 (frame_nr, FRAME_NR): New thread-specific variable and macro.
540 (debug_init): Do not initialize assuan. Call _gpgme_debug after
541 initialization instead using printf directly.
542 (_gpgme_debug): Do not call debug_init (we now ensure proper
543 initialization by user). Add timestamp and thread/process ID.
544 (_gpgme_debug_buffer): Do not take tagname and tag argument.
545 (_gpgme_debug_frame_begin, _gpgme_debug_frame_end): New functions.
546 * version.c (gpgme_check_version_internal, gpgme_check_version):
547 Fix debug string. Do not initialize assuan.
548 * posix-io.c (get_max_fds): Use 0 not NULL (nicer debug output).
550 2009-11-04 Werner Koch <wk@g10code.com>
552 * gpgme-tool.c (register_commands): Add HELP feature.
554 2009-11-03 Werner Koch <wk@g10code.com>
556 * gpgme.h.in (GPGME_PROTOCOL_UISERVER): New.
558 2009-11-03 Marcus Brinkmann <marcus@g10code.de>
560 * Makefile.am (main_sources): Change g13.c to vfs-mount.c. Add
562 * vfs-create.c: New file.
563 * g13.c: Renamed to ...
564 * vfs-mount.c: ... this new file.
565 * gpgme.h.in (gpgme_op_vfs_create): New prototype.
566 * gpgme.def, libgpgme.vers: Add gpgme_op_vfs_create.
567 * gpgme-tool.c (gt_vfs_create, cmd_vfs_create): New functions.
568 (register_commands): Add VFS_CREATE and CREAET.
570 2009-11-02 Marcus Brinkmann <marcus@g10code.de>
572 * debug.h (_gpgme_debug_buffer): Make TAG argument const const.
573 * debug.c (_gpgme_debug_buffer): Likewise.
574 * gpgme-tool.c (input_notify, output_notify): Adjust type to new
576 * decrypt.c (gpgme_op_decrypt_result): Remove unused variable.
577 * opassuan.c (gpgme_op_assuan_transact): Fix return value.
579 2009-10-30 Marcus Brinkmann <marcus@g10code.de>
581 * Makefile.am (noinst_PROGRAMS): New target gpgme-tool.
582 (gpgme_tool_LDADD): New variable.
583 * gpgme-tool.c: New file.
584 * ops.h (_gpgme_sig_notation_clearm _gpgme_signers_clear): New
586 * gpgme.c (gpgme_set_protocol): Allow GPGME_PROTOCOL_GPGCONF (when
587 had that gone missing?).
588 (_gpgme_sig_notation_clear): New function without debug output.
589 (gpgme_release): Call it and _gpgme_signers_clear.
590 * signers.c (_gpgme_signers_clear): New function without debug output.
591 * g13.c (gpgme_op_vfs_mount): Add debug output.
592 * assuan-support.c (my_spawn): Allow fd_child_list to be NULL.
593 * conversion.c (_gpgme_encode_percent_string): Fix infinite loop.
594 * debug.h: Put tag in front of debug lines, should make for nicer
596 * engine-assuan.c (llass_new): Use our new system hooks for libassuan.
597 * engine-g13.c (g13_new): Remove redundant assuan context allocation.
598 * version.c (gpgme_check_version_internal): Delay debug output
599 until after gpgme_check_version was called.
601 2009-10-28 Marcus Brinkmann <marcus@g10code.de>
603 * signers.c, encrypt-sign.c, encrypt.c, delete.c, keylist.c,
604 edit.c, import.c, export.c: Fix last change in debug output.
606 2009-10-27 Marcus Brinkmann <marcus@g10code.de>
608 * edit.c (gpgme_op_edit_start, gpgme_op_edit)
609 (gpgme_op_card_edit_start, gpgme_op_card_edit): Add debug output.
610 * encrypt-sign.c (gpgme_op_encrypt_sign_start)
611 (gpgme_op_encrypt_sign): Likewise.
612 * encrypt.c (gpgme_op_encrypt_start, gpgme_op_encrypt)
613 (gpgme_op_encrypt_result): Likewise.
614 * export.c (gpgme_op_export_start, gpgme_op_export)
615 (gpgme_op_export_ext_start, gpgme_op_export_ext)
616 (gpgme_op_export_keys_start, gpgme_op_export_keys): Likewise.
617 * genkey.c (gpgme_op_genkey_start, gpgme_op_genkey)
618 (gpgme_op_genkey_result): Likewise.
619 * getauditlog.c (gpgme_op_getauditlog_start)
620 (gpgme_op_getauditlog): Likewise.
621 * import.c (gpgme_op_import_result, gpgme_op_import_start)
622 (gpgme_op_import): Likewise.
623 * keylist.c (gpgme_op_keylist_result, keylist_colon_handler)
624 (gpgme_op_keylist_start, gpgme_op_keylist_ext_start)
625 (gpgme_op_keylist_next, gpgme_op_keylist_end, gpgme_get_key): Likewise.
626 * opassuan.c (gpgme_op_assuan_transact_start)
627 (gpgme_op_assuan_transact_ext, gpgme_op_assuan_result)
628 (gpgme_op_assuan_transact): Likewise.
629 * signers.c (gpgme_signers_add, gpgme_signers_clear): Likewise.
630 * trustlist.c (gpgme_op_trustlist_start)
631 (gpgme_op_trustlist_next, gpgme_op_trustlist_end): Likewise.
632 * verify.c (gpgme_op_verify_start, gpgme_op_verify)
633 (gpgme_op_verify_result): Likewise.
635 2009-10-26 Marcus Brinkmann <marcus@g10code.de>
637 * gpgme.h.in (struct gpgme_io_event_done_data)
638 (gpgme_io_event_done_data_t): New types.
639 (struct _gpgme_op_assuan_result): Deprecate the err member.
640 (gpgme_op_assuan_result): Deprecate (for now).
641 (gpgme_op_assuan_transact_ext): New prototype.
642 (gpgme_op_assuan_transact): Deprecate.
643 (struct _gpgme_op_g13_result): Replace with ...
644 (struct _gpgme_op_vfs_mount_result): ... this.
645 (gpgme_op_g13_mount): Replace with ...
646 (gpgme_op_vfs_mount): ... this.
647 * gpgme.def (gpgme_op_assuan_transact_ext, gpgme_wait_ext)
648 (gpgme_op_vfs_mount_result, gpgme_op_vfs_mount): New.
649 (gpgme_op_g13_mount): Remove.
650 * libgpgme.vers: Likewise.
651 * engine-backend.h (struct engine_ops): Remove RESULT_CB and
652 RESULT_CB_VALUE args in opassuan_transact member. Add CANCEL_OP
654 * ops.h (_gpgme_cancel_with_err, _gpgme_wait_on_condition): Add
656 (_gpgme_wait_one_ext): New prototype.
657 * context.h (ctx_op_data_id_t): Add OPDATA_VFS_MOUNT.
658 * engine-g13.c (g13_cancel_op): New function.
659 (parse_status): Remove declaration.
660 (g13_assuan_simple_command): Do nothing with status lines for now.
661 (status_handler): Update opaque value access.
662 (_gpgme_engine_ops_g13): Add new cancel_op member.
663 * gpgme.c (_gpgme_cancel_with_err): Add new parameter OP_ERR.
664 Handle operational errors.
665 (gpgme_cancel, gpgme_io_read, gpgme_io_write): Add debug output.
666 * data.c (_gpgme_data_inbound_handler)
667 (_gpgme_data_outbound_handler): Adjust opaque value access.
668 * engine-gpg.c (command_handler, status_handler)
669 (colon_line_handler): Likewise.
670 * engine-gpgsm.c (status_handler): Likewise.
671 * engine-gpg.c (_gpgme_engine_ops_gpg): Add cancel_op member.
672 * engine-gpgsm.c (_gpgme_engine_ops_gpgsm): Likewise.
673 * g13.c: Rewritten (and will be rewritten again).
674 * engine.h (_gpgme_engine_op_assuan_transact): Remove result_cb
675 and result_cb_value parameters from prototype.
676 (_gpgme_engine_cancel_op): New prototype.
677 * engine.c (engine_ops) [! ENABLE_ASSUAN]: Add missing comma.
678 (_gpgme_engine_op_assuan_transact): Remove result_cb and
679 result_cb_value parameter.
680 (_gpgme_engine_cancel_op): New function.
681 * wait.h (_gpgme_run_io_cb): Add new argument OP_ERR.
682 (struct io_cb_data): New struct to pass opaque data and get a
683 op_err return value. Needed because we can't modify I/O callback
684 handler signature because it is exposed to the user.
685 * wait.c (_gpgme_run_io_cb): Add OP_ERR parameter. Handle
687 * wait-user.c (_gpgme_user_io_cb_handler): Handle operational
689 * wait-private.c (_gpgme_wait_on_condition): New argument to
690 retrieve the operational result. Handle operational errors in
691 session based protocols.
692 (_gpgme_wait_one_ext): New function.
693 (_gpgme_wait_one): Pass argument in invocation of
694 _gpgme_wait_on_condition.
695 * wait-global.c (struct ctx_list_item): Add member OP_ERR.
696 (ctx_done): New argument OP_ERR.
697 (ctx_wait): New argument OP_ERR.
698 (gpgme_wait_ext): New function based on gpgme_wait but handling
700 (gpgme_wait): Implement in term of gpgme_wait_ext.
701 * keylist.c (gpgme_op_keylist_next): Pass argument in invocation
702 of _gpgme_wait_on_condition.
703 * trustlist.c (gpgme_op_trustlist_next): Pass argument in
704 invocation of _gpgme_wait_on_condition.
705 * engine-assuan.c (struct engine_llass): Replace members RESULT_CB
706 and RESULT_CB_VALUE by LAST_OP_ERR.
707 (_gpgme_engine_assuan_last_op_err): Add this hack function.
708 (llass_cancel_op): New function.
709 (_gpgme_engine_llass_ops): Add cancel_op member.
710 (llass_status_handler): Update opaque value access.
711 (llass_transact): Remove RESULT_CB and RESULT_CB_VALUE arguments.
712 * opassuan.c: Move compat hacks to the end of file.
713 (opassuan_start): Do not set OPD->result.err.
714 Do not pass RESULT_Cb and CTX to _gpgme_engine_op_assuan_transact.
715 (gpgme_op_assuan_transact_ext): New function.
717 * debug.h (DEBUG_GLOBAL): New debug level.
718 * conversion.c (gnupg_errors, _gpgme_map_gnupg_error): Removed.
719 * data-user.c (gpgme_data_new_from_cbs): Add debug output.
720 * data-fd.c (gpgme_data_new_from_fd): Likewise.
721 * data-stream.c (gpgme_data_new_from_stream): Likewise.
722 * decrypt.c (gpgme_op_decrypt_result, gpgme_op_decrypt_start)
723 (gpgme_op_decrypt): Likewise.
724 * delete.c (gpgme_op_delete_start, gpgme_op_delete): Likewise.
725 * decrypt-verify.c (gpgme_op_decrypt_verify_start)
726 (gpgme_op_decrypt_verify): Likewise.
727 * sign.c (gpgme_op_sign_result): Fix debug message.
728 * data-mem.c (gpgme_data_new): Improve debug output.
729 * verify.c (parse_trust): Use atoi instead of
730 _gpgme_map_gnupg_error.
731 * decrypt.c (_gpgme_decrypt_status_handler): Likewise.
733 2009-10-22 Marcus Brinkmann <marcus@g10code.de>
735 * Makefile.am: Remove @NETLIBS@ from LIBADDs.
736 (g13_components): New variable.
737 (main_sources): Add $(g13_components).
738 * g13.c, engine-g13.c: New files.
739 * engine.c (engine_ops): Check for assuan for assuan engine, add
741 * util.h (_gpgme_get_g13_path, _gpgme_encode_percent_string): New
743 * conversion.c (_gpgme_encode_percent_string): New function.
744 * gpgme.h.in (gpgme_protocol_t): Add GPGME_PROTOCOL_G13.
745 (struct _gpgme_op_g13_result, gpgme_g13_result_t): New types.
746 (gpgme_op_g13_mount): New function.
747 * gpgme.def, libgpgme.vers: Add gpgme_op_g13_mount.
748 * gpgme.c (gpgme_set_protocol): Allow GPGME_PROTOCOL_G13.
749 (gpgme_get_protocol_name): Add GPGME_PROTOCOL_G13.
750 * posix-util.c (_gpgme_get_g13_path): New function.
751 * w32-util.c (_gpgme_get_g13_path): New function.
752 * engine-backend.h (_gpgme_engine_ops_g13): New declaration.
754 2009-10-20 Marcus Brinkmann <marcus@g10code.de>
756 * gpgme-config.in (netlibs): Remove.
757 (assuan_cflags, assuan_libs): Add.
759 * Makefile.am (assuan_cppflags, assuan_libobjs): Removed.
760 (gpgsm_components): Move engine-assuan.c to ...
761 (assuan_components): ... this new variable.
762 (main_sources): Add this new variable.
763 (AM_CPPFLAGS): Remove $(assuan_cppflags).
764 (AM_CFLAGS): Add @LIBASSUAN_CFLAGS@.
765 (libgpgme_la_DEPENDENCIES, libgpgme_pth_la_DEPENDENCIES)
766 (libgpgme_glib_la_DEPENDENCIES, libgpgme_qt_la_DEPENDENCIES)
767 (libgpgme_pthread_la_DEPENDENCIES): Remove $(assuan_libobjs).
768 (libgpgme_la_LIBADD, libgpgme_pth_la_LIBADD)
769 (libgpgme_glib_la_LIBADD, libgpgme_qt_la_LIBADD))
770 (libgpgme_pthread_la_LIBADD): Replace $(assuan_libobjs) by
772 * priv-io.h [!HAVE_W32_SYSTEM]: Declare _gpgme_io_recvmsg,
773 _gpgme_io_sendmsg, _gpgme_io_waitpid.
774 * engine-backend.h: Define with [ENABLE_ASSUAN] instead
776 * posix-io.c (_gpgme_io_waitpid): Make non-static.
777 * util.h (ENABLE_ASSUAN): Declar _gpgme_assuan_system_hooks,
778 _gpgme_assuan_malloc_hooks, _gpgme_assuan_log_cb.
779 * engine-gpgsm.c: Don't map assuan error codes. Use
780 assuan_release instead of assuan_disconnect.
781 (map_assuan_error): Remove function.
782 (gpgsm_new): Use new assuan context interface.
783 * engine-assuan.c: Use assuan_release instead of
785 (llass_new): Use new assuan context interface.
787 2009-10-07 <wk@g10code.com>
789 * priv-io.h [W32]: Include windows.h instead of sys/socket.h.
791 2009-08-06 Werner Koch <wk@g10code.com>
793 * op-support.c (_gpgme_parse_inv_recp): Allow for no fingerprint.
795 * engine-gpgsm.c (gpgsm_sign): Hook up the status func for the
797 * gpgme.h.in (GPGME_STATUS_INV_SGNR, GPGME_STATUS_NO_SGNR): New.
798 * sign.c (op_data_t): Add fields IGNORE_INV_RECP and INV_SGNR_SEEN.
799 (_gpgme_op_sign_init_result): Factor code out to ...
800 (sign_init_result): .. new. Init new fields.
801 (sign_start): Use sign_init_result.
802 (_gpgme_sign_status_handler): Take care of the new INV_SGNR.
803 Return an error if no signature has been created.
805 2009-07-07 Werner Koch <wk@g10code.com>
807 * engine-gpgsm.c (struct engine_gpgsm): Add fields
808 input_helper_data and input_helper_memory.
809 (close_notify_handler): Release these new fields.
810 (gpgsm_import): Implement the keyarray feature.
812 * engine-gpg.c (gpg_import): Actually return GPG_ERR_INV_VALUE.
814 * engine-gpgsm.c (gpgsm_import): Return an error for unknown data
817 2009-06-22 Marcus Brinkmann <marcus@g10code.de>
819 * debug.h: Everywhere, use %p instead of 0x%x to print pointer.
820 [HAVE_STDINT_H]: Include <stdint.h>.
821 (_TRACE, TRACE, TRACE0, TRACE1, TRACE2, TRACE3, TRACE6): Cast tag
822 to (uintptr_t) before casting it to (void*) to silence GCC
825 * gpgme.h.in (_GPGME_DEPRECATED_OUTSIDE_GPGME): New macro.
826 * sign.c (_GPGME_IN_GPGME): Define it.
827 * keylist.c (_GPGME_IN_GPGME): Define it.
829 * debug.c (_gpgme_debug_begin, _gpgme_debug_add): Handle error in
830 vasprintf and asprintf.
832 * priv-io.h: Include <sys/socket.h>. Declare _gpgme_io_connect.
834 2009-06-18 Marcus Brinkmann <marcus@g10code.de>
836 * gpgme.h.in (GPGME_CONF_PATHNAME): Revert last change, it's
837 back! (GPA still uses it...).
839 * gpgme.def: Fix stupid typo.
840 * w32-io.c (_gpgme_io_pipe): Add missing declaration.
842 * gpgme.h.in (GPGME_CONF_PATHNAME): Remove obsolete macro.
844 * w32-io.c (_gpgme_io_pipe): Allocate reader/writer thread right
846 (_gpgme_io_read, _gpgme_io_write, _gpgme_io_select)
847 (_gpgme_io_dup): Never allocate threads here.
848 (find_writer, find_reader): Check return value of thread creation
851 * context.h (CTX_OP_DATA_MAGIC): New macro.
852 (struct ctx_op_data): New member MAGIC.
853 * op-support.c (_gpgme_op_data_lookup): Initialize magic.
854 * gpgme.c (gpgme_result_unref, gpgme_result_ref): Check magic.
856 2009-06-16 Marcus Brinkmann <marcus@g10code.de>
858 * gpgme.c (gpgme_result_unref): Hot fix to release a lock.
860 * gpgme.c (result_ref_lock): New global variable.
861 (gpgme_result_ref, gpgme_result_unref): use it.
863 2009-06-16 Werner Koch <wk@g10code.com>
865 * version.c: Include stdlib.h.
867 * gpgme.h.in (gpgme_data_encoding_t): Add GPGME_DATA_ENCODING_URL,
868 GPGME_DATA_ENCODING_URLESC, GPGME_DATA_ENCODING_URL0.
869 * data.c (gpgme_data_set_encoding): Adjust for new values.
870 * engine-gpg.c (string_from_data): New.
871 (gpg_import): Implement --fetch-key feature.
873 * gpgme.h.in (gpgme_op_export_keys_start, gpgme_op_export_keys): New.
874 * gpgme.def, libgpgme.vers: Add them.
875 * export.c (gpgme_op_export_keys_start, gpgme_op_export_keys): New.
876 (export_keys_start): New.
878 * gpgme.h.in (gpgme_export_mode_t, GPGME_EXPORT_MODE_EXTERN): New.
879 (gpgme_op_export_start, gpgme_op_export, gpgme_op_export_ext_start)
880 (gpgme_op_export_ext): Change arg RESERVED to MODE of new
882 * export.c (gpgme_export_ext_start, gpgme_op_export)
883 (gpgme_op_export_ext_start, gpgme_op_export_ext): Ditto.
884 (export_start): Ditto.
885 * engine.c (_gpgme_engine_op_export): Ditto.
886 * engine-backend.h (struct engine_ops): Ditto.
887 * engine-gpgsm.c (gpgsm_export, gpgsm_export_ext): Ditto.
888 * engine-gpg.c (gpg_export, gpg_export_ext): Ditto. Implement
890 (gpg_export, gpg_export_ext): Factor common code out to ..
891 (export_common): .. this.
893 * gpgme.h.in (gpgme_op_import_keys_start, gpgme_op_import_keys): New.
894 * gpgme.def, libgpgme.vers: Add them.
895 * import.c (gpgme_op_import_keys_start, gpgme_op_import_keys): New.
896 (_gpgme_op_import_keys_start): New.
897 * engine.c (_gpgme_engine_op_import): Add arg KEYARRAY.
898 * engine-backend.h (struct engine_ops): Ditto.
899 * engine-gpgsm.c (gpgsm_import): Ditto. Not functional.
900 * engine-gpg.c (gpg_import): Ditto. Implement it.
902 2009-06-15 Marcus Brinkmann <marcus@g10code.de>
904 * gpgme.h.in (gpgme_result_ref, gpgme_result_unref): Add
906 * gpgme.def, libgpgme.vers (gpgme_result_ref, gpgme_result_unref):
908 * context.h (struct ctx_op_data): Add member "references".
909 * gpgme.c (gpgme_result_ref, gpgme_result_unref): New functions.
910 (_gpgme_release_result): Use gpgme_result_unref.
911 * op-support.c (_gpgme_op_data_lookup): Initialize references.
913 2009-06-12 Werner Koch <wk@g10code.com>
915 * gpgme-w32spawn.c (translate_get_from_file): Parse optional spawn
916 flags. Add new arg R_FLAGS. Fix segv on file w/o LF.
917 (translate_handles): Add new arg R_FLAGS. Avoid possible segv.
918 (main): Pass flags for my_spawn.
919 (my_spawn): Add arg FLAGS and implement AllowSetForegroundWindow.
921 * priv-io.h (IOSPAWN_FLAG_ALLOW_SET_FG): New.
922 * w32-io.c (_gpgme_io_spawn): Add arg FLAGS and implement it.
923 * w32-glib-io.c (_gpgme_io_spawn): Ditto.
924 * w32-qt-io.cpp (_gpgme_io_spawn): Ditto.
925 * posix-io.c (_gpgme_io_spawn): Add dummy arg FLAGS.
926 * engine-gpg.c (start): Call spawn with new flag.
928 * w32-util.c (_gpgme_allow_set_foregound_window): Rename to
929 _gpgme_allow_set_foreground_window. Change all callers.
930 * posix-util.c (_gpgme_allow_set_foreground_window): Ditto.
932 2009-06-10 Werner Koch <wk@g10code.com>
934 * w32-util.c (_gpgme_allow_set_foregound_window): Add trace support.
936 2009-06-09 Werner Koch <wk@g10code.com>
938 * engine-gpg.c (gpg_io_event): Test for cmd.fd.
940 * version.c (gpgme_check_version_internal): Make result const.
942 * gpgme.c: Include priv-io.h.
943 (gpgme_io_read, gpgme_io_write): New.
944 * libgpgme.vers (GPGME_1.1): Add them.
947 * Makefile.am (main_sources): Remove gpgme.h.
948 (include_HEADERS): Rename to nodist_include_HEADERS so that a
949 VPATH build won't use the distributed one.
951 * util.h (GPG_ERR_NOT_OPERATIONAL): Define.
953 2009-05-28 Marcus Brinkmann <marcus@g10code.de>
955 * gpgme.h.in (gpgme_check_version_internal): New prototype.
956 (gpgme_check_version): New macro, overriding function of the same
958 * libgpgme.vers, gpgme.def: Add gpgme_check_version_internal.o
959 * context.h (_gpgme_selftest): New variable declaration.
960 * version.c: Include "context.h".
961 (gpgme_check_version): Set _gpgme_selftest on success.
962 (gpgme_check_version_internal): New function.
963 * gpgme.c (_gpgme_selftest): Define it.
964 (gpgme_new): Check the selftest result.
966 2009-05-18 Marcus Brinkmann <marcus@g10code.de>
968 * gpgme.h.in (gpgme_encrypt_flags_t): Add
969 GPGME_ENCRYPT_NO_ENCRYPT_TO.
970 * engine-gpg.c (gpg_encrypt): Pass --no-encrypt-to to gpg if
971 GPGME_ENCRYPT_NO_ENCRYPT_TO flag is set.
973 2009-05-14 Werner Koch <wk@g10code.com>
975 * gpgme.h.in (gpgme_status_code_t): Explicitly initialize for
976 better maintainability and to help debugging.
978 2009-05-05 Marcus Brinkmann <marcus@g10code.de>
980 * gpgme.h.in: Add compile time check for _FILE_OFFSET_BITS.
982 2009-04-15 Marcus Brinkmann <marcus@g10code.de>
984 * posix-io.c (_gpgme_io_socket, _gpgme_io_connect): New functions.
985 * w32-io.c (_gpgme_io_connect): Fix stupid error.
987 2009-04-08 Marcus Brinkmann <marcus@g10code.de>
989 * w32-glib-io.c (giochannel_table): New members used, fd, socket.
990 (find_channel): Drop CREATE argument.
991 (new_dummy_channel_from_fd, new_channel_from_fd)
992 (new_channel_from_socket): New functions.
993 (_gpgm_io_fd2str): Implement for sockets.
994 (_gpgme_io_write, _gpgme_io_read): Translate EAGAIN errors
996 (_gpgme_io_pipe): Fix for new channel bookkeeping.
997 (_gpgme_io_close, _gpgme_io_dup): Likewise.
998 (wsa2errno, _gpgme_io_socket, _gpgme_io_connect): New.
999 * w32-io.c (MAX_READERS, MAX_WRITERS): Bump up to 40.
1000 (wsa2errno, _gpgme_io_socket, _gpgme_io_connect): New.
1001 * w32-qt-io.cpp (_gpgme_io_socket, _gpgme_io_connect): New stubs.
1002 * version.c [HAVE_W32_SYSTEM]: Include "windows.h.
1003 (do_subsystem_inits) [HAVE_W32_SYSTEM]: Call WSAStartup.
1004 * engine-assuan.c (llass_status_handler): Ignore EAGAIN errors.
1006 2009-03-18 Werner Koch <wk@g10code.com>
1008 * gpgme.h.in (GPGME_KEYLIST_MODE_EPHEMERAL): New.
1009 * engine-gpgsm.c (gpgsm_keylist): Send new option.
1011 2009-03-13 Werner Koch <wk@g10code.com>
1013 * gpgme-config.in: Make sure locale is set to C.
1015 2009-02-24 Werner Koch <wk@g10code.com>
1017 * gpgme.h.in (struct _gpgme_op_assuan_result): New.
1018 (gpgme_assuan_result_t): New.
1019 (gpgme_op_assuan_result): Change return type.
1020 (struct _gpgme_assuan_sendfnc_ctx)
1021 (gpgme_assuan_sendfnc_ctx_t, gpgme_assuan_sendfnc_t):Remove.
1022 (gpgme_assuan_inquire_cb_t): Changed.
1023 * opassuan.c (op_data_t): Make use of a result structure.
1024 (gpgme_op_assuan_result): Change return type.
1025 (opassuan_start): Use result structure.
1027 * engine-assuan.c (struct _gpgme_assuan_sendfnc_ctx): Remove.
1028 (inquire_cb_sendfnc): Remove.
1029 (inquire_cb): Change for new callback scheme. Not yet finished.
1030 (llass_status_handler): Allow sending a CANCEL from the inquire CB.
1032 2009-02-04 Werner Koch <wk@g10code.com>
1034 * w32-glib-io.c (_gpgme_io_spawn): Make ARGV argument const to
1036 * w32-qt-io.cpp (_gpgme_io_spawn): Ditto.
1038 2009-02-03 Werner Koch <wk@g10code.com>
1040 * gpgme.h.in (struct _gpgme_subkey): Add fields IS_CARDKEY and
1042 * key.c (gpgme_key_unref): Release field CARD_NUMBER.
1043 * keylist.c (keylist_colon_handler): Factor common code out to ...
1044 (parse_sec_field15): New. Set card number.
1046 2009-01-26 Werner Koch <wk@g10code.com>
1048 * opassuan.c, dirinfo.c, engine-assuan.c: New.
1049 * Makefile.am: Add them.
1050 * engine-backend.h: Add _gpgme_engine_ops_assuan.
1051 (struct engine_ops): Add field OPASSUAN_TRANSACT. Update all
1053 * Makefile.am (gpgsm_components): Add engine-assuan.c.
1054 * gpgme.h.in (gpgme_protocol_t): Add GPGME_PROTOCOL_ASSUAN.
1055 (gpgme_assuan_data_cb_t, gpgme_assuan_sendfnc_ctx_t)
1056 (gpgme_assuan_inquire_cb_t, gpgme_assuan_status_cb_t): New.
1057 (gpgme_op_assuan_transact_start, gpgme_op_assuan_transact): New.
1058 * gpgme.c (gpgme_get_protocol_name): Ditto.
1059 (gpgme_set_protocol): Support it.
1060 * engine.c (gpgme_get_engine_info): Ditto.
1061 (engine_ops): Register it.
1062 (_gpgme_engine_op_assuan_transact): New.
1063 * libgpgme.vers (gpgme_op_assuan_transact_start)
1064 (gpgme_op_assuan_transact): New.
1065 * gpgme.def (gpgme_op_assuan_transact_start)
1066 (gpgme_op_assuan_transact): New.
1067 * engine-backend.h (struct engine_ops): Add GET_HOME_DIR and
1068 initialize to NULL for all engines.
1069 * engine.c (engine_get_home_dir): New.
1070 (gpgme_get_engine_info): Use it.
1071 (_gpgme_set_engine_info): Use it.
1072 * engine.h (engine_assuan_result_cb_t): New.
1073 * context.h (ctx_op_data_id_t): Add OPDATA_ASSUAN.
1075 * util.h (GPG_ERR_UNFINISHED): Define if not yet defined.
1077 * version.c (gpgme_check_version): Protect trace arg against NULL.
1079 2009-01-19 Werner Koch <wk@g10code.com>
1081 * rungpg.c: Rename to engine-gpg.c
1082 * Makefile.am (main_sources): Ditto.
1084 2008-12-03 Marcus Brinkmann <marcus@g10code.de>
1086 * Makefile.am (status-table.h): Use $(builddir) to find gpgme.h.
1088 2008-11-18 Werner Koch <wk@g10code.com>
1090 * version.c (do_subsystem_inits): Always initialize I/O
1091 subsystem. Fixes regression from 2007-08-02.
1093 * decrypt.c (_gpgme_decrypt_status_handler): Use
1094 _gpgme_map_gnupg_error to parse the error code for decrypt.algorithm.
1096 2008-10-30 Marcus Brinkmann <marcus@g10code.de>
1098 * wait-private.c (_gpgme_wait_on_condition): Remove unused
1100 * wait-global.c: Include ops.h to silence gcc warning.
1101 (_gpgme_wait_global_event_cb): Pass error value directly.
1102 * wait-user.c: Include ops.h to silence gcc warning.
1104 * posix-io.c (_gpgme_io_spawn): Make ARGV argument const to
1105 silence gcc warning. Cast argument to execv to silence warning.
1106 * w32-io.c (_gpgme_io_spawn): Likewise.
1107 * priv-io.h (_gpgme_io_spawn): Likewise for prototype.
1109 2008-10-24 Werner Koch <wk@g10code.com>
1111 * rungpg.c (gpg_keylist_preprocess): Escape backslashes too.
1113 2008-10-23 Marcus Brinkmann <marcus@g10code.de>
1115 * rungpg.c (gpg_keylist_preprocess): Convert percent escaped
1116 string to C coded string.
1118 2008-10-20 Werner Koch <wk@g10code.com>
1120 * Makefile.am (EXTRA_DIST): Add gpgme.h.in.
1122 * gpgme.h: Rename to gpgme.h.in.
1123 * gpgme.h.in (GPGME_VERSION): Use autoconf substitution.
1125 * posix-io.c: Include sys/uio.h. Fixes bug #818.
1127 2008-10-18 Marcus Brinkmann <marcus@g10code.com>
1129 * w32-util.c (find_program_in_registry): Don't define.
1130 (_gpgme_get_gpg_path, _gpgme_get_gpgsm_path)
1131 (_gpgme_get_gpgconf_path): Do not check for fooProgram in the
1132 registry anymore. It is now no longer possible to overwrite the
1133 default location in that way.
1135 2008-10-17 Werner Koch <wk@g10code.com>
1137 * w32-glib-io.c (_gpgme_io_fd2str): Use "%d" and not "%ld" to work
1138 around a bug in mingw32.
1140 2008-09-23 Marcus Brinkmann <marcus@g10code.com>
1142 * gpgme.c (gpgme_sig_notation_clear): Clear CTX->sig_notations.
1143 Submitted by "Daniel Mueller" <daniel@danm.de>
1145 2008-09-16 Marcus Brinkmann <marcus@g10code.com>
1147 * rungpg.c (gpg_new): Don't use errno with ttyname_r.
1149 2008-08-11 Marcus Brinkmann <marcus@g10code.com>
1151 * rungpg.c (gpg_cancel): Remove cmd fd before status fd.
1152 * gpgme.c (_gpgme_cancel_with_err): New function.
1153 (gpgme_cancel): Reimplement in terms of _gpgme_cancel_with_err.
1154 * wait-private.c (_gpgme_wait_on_condition): Use
1155 _gpgme_cancel_with_err.
1156 * wait-user.c (_gpgme_user_io_cb_handler): Likewise.
1157 * wait-global.c (_gpgme_wait_global_event_cb, gpgme_wait): Likewise.
1159 2008-08-08 Marcus Brinkmann <marcus@g10code.com>
1161 * rungpg.c (command_handler): Remove I/O callback on error, too.
1163 2008-06-29 Marcus Brinkmann <marcus@g10code.com>
1165 * gpgme.c (gpgme_cancel_async): Remove unused variable.
1167 2008-06-27 Marcus Brinkmann <marcus@g10code.de>
1169 * libgpgme.vers: Add gpgme_cancel_async.
1170 * gpgme.def: Likewise.
1172 * context.h: Include "sema.h".
1173 (struct gpgme_context): New members lock and canceled.
1174 * gpgme.c (gpgme_new): Initialize lock.
1175 (gpgme_release): Destroy lock.
1176 (gpgme_cancel_async): New function.
1177 * op-support.c (_gpgme_op_reset): Reset the canceled flag.
1178 * wait-global.c (gpgme_wait): Check cancel flag before processing
1180 * wait-private.c (_gpgme_wait_on_condition): Likewise.
1181 * wait-user.c (_gpgme_user_io_cb_handler): Likewise.
1183 2008-06-26 Werner Koch <wk@g10code.com>
1185 * w32-util.c (_gpgme_mkstemp): Replace sprint by stpcpy.
1186 (mkstemp): Need to use GetSystemTimeAsFileTime for better
1189 2008-06-25 Marcus Brinkmann <marcus@g10code.de>
1191 * gpgme-w32spawn.c: New file.
1192 * Makefile.am (libexec_PROGRAMS) [HAVE_W32_SYSTEM]: New variable
1193 with gpgme-w32spawn.
1194 * engine-gpgsm.c (gpgsm_new): Use server translated handles.
1195 (gpgsm_set_locale): Return early if locale value is NULL.
1196 * util.h (_gpgme_mkstemp)
1197 (_gpgme_get_w32spawn_path) [HAVE_W32_SYSTEM]: New function
1199 * w32-util.c: Include <stdint.h>, <sys/stat.h> and <unistd.h>.
1200 (letters, mkstemp, _gpgme_mkstemp, _gpgme_get_w32spawn_path): New
1202 * rungpg.c (gpg_decrypt, gpg_encrypt, gpg_encrypt_sign)
1203 (gpg_genkey, gpg_import, gpg_verify, gpg_sign): Pass data over
1204 special filename FD rather than stdin.
1205 (struct arg_and_data_s): Add member ARG_LOCP.
1206 (struct fd_data_map_s): Add member ARG_LOC.
1207 (struct engine_gpg): Add member ARG_LOC to status and colon.
1208 (_add_arg, add_arg_with_locp): New function.
1209 (add_arg_ext): Reimplement in terms of _add_arg.
1210 (gpg_new): Remember argument location for status FD.
1211 (build_argv): Set argument location if requested. Also set
1212 argument location of fd_data_map for data items.
1213 (start): Adjust caller of _gpgme_io_spawn.
1214 * priv-io.h (struct spawn_fd_item_s): Add members peer_name and
1216 (_gpgme_io_spawn): Remove parent fd list argument.
1217 * posix-io.c (get_max_fds): New function.
1218 (_gpgme_io_dup): Add tracing.
1219 (_gpgme_io_spawn): Remove parent fd list. Change meaning of child
1220 fd list to contain all child fds that should be inherited. Close
1221 all other file descriptors after fork.
1222 * w32-io.c, w32-glib-io.c, w32-qt-io.c(_gpgme_io_spawn): Remove
1223 parent fd list. Change meaning of child fd list to contain all
1224 child fds that should be inherited. Do not inherit any file
1225 descriptors, but DuplicateHandle them. Spawn process through
1226 wrapper process. Provide wrapper process with a temporary file
1227 containing handle translation data. Return translated handle
1229 * w32-io.c (reader): Add more tracing output.
1230 (_gpgme_io_read): Likewise.
1231 * engine-gpgconf.c (gpgconf_read): Adjust caller of
1233 * version.c (_gpgme_get_program_version): Likewise.
1235 2008-06-20 Werner Koch <wk@g10code.com>
1237 * engine-gpgconf.c (gpgconf_read): Change ARGV initialization for
1238 compatibility with old compilers. Fix amount of memmove. Fix
1241 2008-06-19 Werner Koch <wk@g10code.com>
1243 * gpgme.h (GPGME_CONF_PATHNAME): Replace by GPGME_CONF_FILENAME,
1244 change all callers and provide compatibilty macro.
1245 (gpgme_conf_type_t): Add complex types 34..37.
1246 * engine-gpgconf.c (gpgconf_parse_option, arg_to_data)
1247 (_gpgme_conf_arg_new, _gpgme_conf_arg_release): Add new types.
1249 2008-06-19 Marcus Brinkmann <marcus@g10code.de>
1251 * engine-gpgconf.c (gpgconf_parse_option): Fix comma detection.
1253 2008-05-09 Werner Koch <wk@g10code.com>
1255 * engine-gpgconf.c (gpgconf_read): Do not pass empty lines to the
1258 2008-05-07 Werner Koch <wk@g10code.com>
1260 * engine-gpgconf.c (gpgconf_write): Change argv[0] to a
1261 self-explaining string. Needs a proper fix, though.
1263 * rungpg.c (gpg_keylist, gpg_keylist_ext): Factor common code out
1265 (gpg_build_keylist_options): .. new. Allow combination of extern
1267 (gpg_new): DFT_TTYNAME is an array, thus check the first character.
1269 2008-05-06 Werner Koch <wk@g10code.com>
1271 * version.c (extract_version_string): New.
1272 (_gpgme_get_program_version): Use it to allow for suffixes in the
1275 2008-04-28 Werner Koch <wk@g10code.com>
1277 * engine-gpgconf.c (gpgconf_read): Fixed segv. Avoid memmove for
1280 2008-04-22 Marcus Brinkmann <marcus@g10code.de>
1282 * w32-qt-io.cpp, kdpipeiodevice.cpp: New versions from Frank
1283 Osterfeld, implement blocking select.
1285 2008-03-11 Marcus Brinkmann <marcus@g10code.de>
1287 * data.c (gpgme_data_read, gpgme_data_write): Retry on EINTR.
1289 2008-03-06 Marcus Brinkmann <marcus@g10code.de>
1291 * key.c (_gpgme_key_add_sig): Terminate UID in case SRC is NULL.
1292 Reported by Marc Mutz.
1294 2008-03-05 Marcus Brinkmann <marcus@g10code.de>
1296 * decrypt.c (release_op_data): Release OPD->result.recipients.
1297 * encrypt.c (release_op_data): Release invalid_recipient.
1299 2008-02-15 Marcus Brinkmann <marcus@g10code.de>
1301 * engine-gpgconf.c (gpgconf_read): Fix end-of-line handline.
1303 2008-02-14 Werner Koch <wk@g10code.com>
1305 * w32-io.c (_gpgme_io_spawn): Add arg R_PID to return the pid.
1306 * posix-io.c (_gpgme_io_spawn): Ditto.
1307 * w32-glib-io.c (_gpgme_io_spawn): Ditto.
1308 * w32-qt-io.cpp (_gpgme_io_spawn): Ditto.
1309 * priv-io.h (_gpgme_io_spawn): Adjust prototyp and change all callers.
1310 * rungpg.c (start): Call _gpgme_allow_set_foregound_window.
1312 * w32-util.c (_gpgme_allow_set_foregound_window): New.
1313 * posix-util.c (_gpgme_allow_set_foregound_window): New.
1314 * engine-gpgsm.c (default_inq_cb): New.
1315 (gpgsm_new) [W32]: Enable pinentry notifications.
1316 (status_handler): Handle inquiries.
1318 2008-01-30 Marcus Brinkmann <marcus@g10code.de>
1320 * kdpipeiodevice.cpp: New version by Frank Osterfeld, fixes race
1323 2008-01-28 Marcus Brinkmann <marcus@g10code.de>
1325 * engine-gpgsm.c (map_input_enc): Rename to ...
1326 (map_data_enc): ... this. Also change all callers.
1327 (gpgsm_encrypt, gpgsm_export, gpgsm_export_ext, gpgsm_genkey)
1328 (gpgsm_sign): Set encoding for output.
1330 2008-01-28 Werner Koch <wk@g10code.com>
1332 * keylist.c (gpgme_get_key): Skip duplicated keys. Fixes bug 876.
1334 2008-01-14 Marcus Brinkmann <marcus@g10code.de>
1336 * engine-gpgconf.c (gpgconf_config_load_cb): Fix program_name
1339 2008-01-10 Marcus Brinkmann <marcus@g10code.de>
1341 * kdpipeiodevice.cpp: New version from Frank Osterfeld.
1343 * engine-gpgconf.c (gpgconf_config_load_cb2): Handle the flag
1346 2008-01-04 Marcus Brinkmann <marcus@g10code.de>
1348 * Makefile.am (gpgconf_components): New variable.
1349 (main_sources): Add gpgconf.c.
1350 * gpgme.h (gpgme_protocol_t): New protocol GPGME_PROTOCOL_GPGCONF.
1351 (gpgme_conf_level_t, gpgme_conf_type_t, gpgme_conf_arg_t)
1352 (gpgme_conf_opt_t, gpgme_conf_comp_t, gpgme_conf_arg_new)
1353 (gpgme_conf_arg_release, gpgme_conf_opt_change)
1354 (gpgme_conf_release, gpgme_op_conf_load, gpgme_op_conf_save): New
1356 * gpgconf.c, engine-gpgconf.c: New files.
1357 * engine.h: (_gpgme_engine_op_conf_load,
1358 (_gpgme_engine_op_conf_save): New prototypes.
1359 * op-support.c (_gpgme_op_reset): Ignore not implemented locale
1361 * posix-util.c (_gpgme_get_gpgconf_path): New function.
1362 * w32-util.c (_gpgme_get_gpgconf_path): New function.
1364 (_gpgme_engine_ops_gpgsm): Add stubs for conf_load and conf_save.
1366 (_gpgme_engine_ops_gpg): Add stubs for conf_load and conf_save.
1367 * gpgme.def: Add new gpgconf related interfaces.
1368 * libgpgme.vers: Likewise.
1369 * util.h (_gpgme_get_gpgconf_path): New prototype.
1370 * gpgme.h (gpgme_protocol_t): Add GPGME_PROTOCOL_GPGCONF.
1371 * engine-backend.h (_gpgme_engine_ops_gpgconf): New prototype.
1372 (struct engine_ops): Add members for conf_load and conf_save.
1373 * engine.c (engine_ops): Add _gpgme_engine_ops_gpgconf.
1374 (_gpgme_engine_op_conf_load,
1375 (_gpgme_engine_op_conf_save): New functions.
1376 (gpgme_get_engine_info): Allow protocol GPGME_PROTOCOL_GPGCONF.
1378 2007-11-28 Marcus Brinkmann <marcus@g10code.de>
1380 * w32-util.c (_gpgme_get_gpg_path, _gpgme_get_gpgsm_path): Search
1381 for installation directory. Remove old fallback default.
1382 (find_program_in_inst_dir): New function.
1384 2007-11-26 Werner Koch <wk@g10code.com>
1386 * engine-gpgsm.c (struct engine_gpgsm): Add field INLINE_DATA and
1387 always reset it before calling start.
1388 (gpgsm_new): Clear it.
1389 (status_handler): Implement it.
1390 (gpgsm_getauditlog) [USE_DESCRIPTOR_PASSING]: Use INLINE_DATA.
1392 2007-11-23 Werner Koch <wk@g10code.com>
1394 * op-support.c (_gpgme_op_reset): Implement a no-reset flag.
1395 * getauditlog.c (getauditlog_start): Use that flag.
1397 2007-11-22 Werner Koch <wk@g10code.com>
1399 * gpgme.h (gpgme_op_getauditlog_start, gpgme_op_getauditlog): New.
1400 * libgpgme.vers: Ditto.
1402 * getauditlog.c: New.
1403 * engine-backend.h (struct engine_ops): Add member GETAUDITLOG.
1404 * engine-gpgsm.c (gpgsm_getauditlog): New.
1405 (_gpgme_engine_ops_gpgsm): Insert new function.
1406 (gpgsm_new): Try to enable audit log support.
1407 * rungpg.c (_gpgme_engine_ops_gpg): Insert dummy entry.
1409 2007-11-20 Werner Koch <wk@g10code.com>
1411 * op-support.c (_gpgme_parse_inv_recp): Add new reason code 11.
1413 2007-11-12 Marcus Brinkmann <marcus@g10code.de>
1415 * kdpipeiodevice.cpp: New version from Frank Osterfeld.
1417 2007-10-11 Marcus Brinkmann <marcus@g10code.de>
1419 * kdpipeiodevice.cpp: New version from Frank Osterfeld.
1421 2007-10-09 Marcus Brinkmann <marcus@g10code.de>
1423 * kdpipeiodevice.cpp: New version from Frank Osterfeld and Marc
1426 2007-10-05 Marcus Brinkmann <marcus@g10code.de>
1428 * kdpipeiodevice.cpp, w32-qt-io.cpp: New versions from Frank
1431 2007-10-04 Marcus Brinkmann <marcus@g10code.de>
1433 * kdpipeiodevice.h, kdpipeiodevice.cpp, kdpipeiodevice.moc,
1434 w32-qt-io.cpp: New versions from Frank Osterfeld.
1436 2007-10-02 Marcus Brinkmann <marcus@g10code.de>
1438 * kdpipeiodevice.cpp, kdpipeiodevice.moc: New versions.
1439 * w32-qt-io.cpp (_gpgme_io_fd2str): Print actual_fd if available.
1440 (_gpgme_io_dup): Only acquire a reference, do not actually dup.
1441 Submitted by Frank Osterfeld.
1443 * priv-io.h, engine-gpgsm.c: Add comments.
1444 * w32-qt-io.cpp (_gpgme_io_select): Remove code handling frozen FDs.
1445 * w32-glib-io.c (_gpgme_io_close): Always dereference the channel,
1446 even if not primary.
1447 (_gpgme_io_dup): Acquire a reference. Replace unused
1448 implementation by assertion.
1450 2007-09-28 Werner Koch <wk@g10code.com>
1452 * engine-gpgsm.c (iocb_data_t): Add SERVER_FD_STR.
1453 (gpgsm_new): Set it.
1454 (gpgsm_set_fd): Use it.
1456 * w32-glib-io.c (find_channel): Add a new primary flag.
1457 (_gpgme_io_close): Close channel only if primary.
1458 (_gpgme_io_dup): Put newfd into the table as shallow copy.
1460 * priv-io.h (struct io_select_fd_s): Remove member FROZEN.
1461 * w32-io.c (_gpgme_io_select): Ditto.
1462 * w32-glib-io.c (_gpgme_io_select): Ditto.
1464 * posix-io.c (_gpgme_io_select): Ditto.
1465 * rungpg.c (read_status): Ditto.
1466 * wait.c (fd_table_put): Ditto.
1468 * rungpg.c (gpg_io_event): Add tracing.
1469 (start): Use gpg_io_event for sending the start event.
1470 * engine-gpgsm.c (gpgsm_io_event): Add tracing.
1471 (start): Use gpgsm_io_event for sending the start event.
1472 * wait.c (_gpgme_add_io_cb, _gpgme_run_io_cb): Add tracing.
1474 2007-09-28 Marcus Brinkmann <marcus@g10code.de>
1476 * kdpipeiodevice.moc, w32-qt-io.cpp, kdpipeiodevice.cpp: New
1477 versions from Frank Osterfeld.
1479 2007-09-27 Marcus Brinkmann <marcus@g10code.de>
1481 * w32-glib-io.c (_gpgme_io_spawn),
1482 w32-qt-io.cpp (_gpgme_io_spawn), w32-io.c (_gpgme_io_spawn): Close
1483 the process handle, return 0.
1485 * gpgme.h (gpgme_protocol_t): Add GPGME_PROTOCOL_UNKNOWN.
1486 * gpgme.c (gpgme_get_protocol_name): Implement support for
1487 GPGME_PROTOCOL_UNKNOWN.
1489 * kdpipeiodevice.h: Fix last change.
1491 * w32-glib-io.c (_gpgme_io_pipe), w32-qt-io.c (_gpgme_io_pipe),
1492 w32-io.c (_gpgme_io_pipe), posix-io.c (_gpgme_io_pipe): Fix debug
1495 2007-09-25 Marcus Brinkmann <marcus@g10code.de>
1497 * conversion.c, keylist.c: Include <sys/types.h>.
1499 * kdpipeiodevice.h: Use namespace _gpgme_.
1500 * kdpipeiodevice.cpp: Use namespace _gpgme_.
1501 [Q_OS_WIN32 && NOMINMAX]: Do not define NOMINMAX again.
1502 * w32-qt-io.cpp: Change namespace of KDPipeIODevice to
1503 _gpgme_::KDPipeIODevice.
1505 2007-09-17 Werner Koch <wk@g10code.com>
1507 * rungpg.c (gpg_new): Make robust against undefined ttyname or
1510 2007-09-14 Werner Koch <wk@g10code.com>
1512 * data-mem.c (gpgme_data_release_and_get_mem): Fix tracing bug.
1514 2007-09-14 Marcus Brinkmann <marcus@g10code.de>
1516 * gpgme.c (gpgme_release): Call gpgme_sig_notation_clear.
1518 2007-09-13 Marcus Brinkmann <marcus@g10code.de>
1520 * rungpg.c (gpg_new): Handle return value of _gpgme_getenv (fixes
1523 2007-09-07 Marcus Brinkmann <marcus@g10code.de>
1525 * Makefile.am (libgpgme_qt_la_SOURCES): Move
1526 moc_kdpipeiodevice.cpp to EXTRA_DIST, as this is only included by
1527 another file (it's more like a header file than a cpp file, but
1528 automake doesn't know that).
1530 * w32-qt-io.cpp (_gpgme_io_spawn): Fix several cast errors and typos.
1531 * w32-io.c (_gpgme_io_write): Use TRACE_SYSRES instead of TRACE_SYS.
1532 (libgpgme_qt_la_LIBADD): Add QT4_CORE_LIBS, not QT4_CORE_LIB.
1534 * kdpipeiodevice.h, kdpipeiodevice.cpp, moc_kdpipeiodevice.cpp,
1535 kdpipeiodevice.moc, w32-qt-io.c: New files.
1536 * Makefile.am (ltlib_gpgme_extra): Rename to ltlib_gpgme_glib.
1537 (ltlib_gpgme_qt): New variable.
1538 (lib_LTLIBRARIES): Add $(ltlib_gpgme_qt).
1539 (libgpgme_qt_la_SOURCES): New variable.
1540 (AM_CPPFLAGS): Add @QT4_CORE_INCLUDES@
1541 (AM_CFLAGS): Add @QT4_CORE_CFLAGS@.
1542 (libgpgme_qt_la_LDFLAGS, libgpgme_qt_la_DEPENDENCIES)
1543 (libgpgme_qt_la_LIBADD): New variables.
1545 * sema.h (struct critsect_s): Rename "private" to "priv" to make
1546 C++ users happy. Change users.
1547 * posix-sema.c (_gpgme_sema_cs_enter, _gpgme_sema_cs_leave)
1548 (_gpgme_sema_cs_destroy): Likewise.
1549 * w32-sema.c (critsect_init, _gpgme_sema_cs_enter)
1550 (_gpgme_sema_cs_leave, _gpgme_sema_cs_destroy): Likewise.
1551 * w32-glib-io.c (gpgme_get_giochannel): Change return type to
1553 (gpgme_get_fdptr): New function.
1554 * w32-io.c (gpgme_get_fdptr): New function
1555 * gpgme.def: Add gpgme_get_fdptr.
1557 2007-08-22 Marcus Brinkmann <marcus@g10code.de>
1559 * w32-io.c (_gpgme_io_write): Return early if COUNT is zero.
1560 (writer): Remove superfluous check.
1562 2007-08-20 Marcus Brinkmann <marcus@g10code.de>
1564 * gpgme.h: Move include of gpg-error.h out of extern "C".
1566 2007-08-07 Werner Koch <wk@g10code.com>
1568 * gpgme.h (struct _gpgme_signature): Add member CHAIN_MODEL.
1569 * verify.c (parse_trust): Set Chain_MODEL.
1571 2007-08-02 Werner Koch <wk@g10code.com>
1573 * w32-glib-io.c (_gpgme_io_spawn): Use DETACHED_PROCESS flag.
1574 * w32-io.c (_gpgme_io_spawn): Ditto.
1575 (_gpgme_io_write): Map ERROR_NO_DATA to EPIPE.
1576 * debug.c (_gpgme_debug): Enable assuan logging.
1577 (_gpgme_debug_subsystem_init): New.
1578 * version.c (do_subsystem_inits): Disable assuan logging and
1579 initialize the debug system.
1580 (gpgme_check_version): Do not trace before the subsystems are
1583 2007-07-17 Marcus Brinkmann <marcus@g10code.de>
1585 * debug.c: Include <errno.h> and "debug.h".
1586 (_gpgme_debug): Save and restore ERRNO.
1588 (_gpgme_debug_buffer): New function.
1589 * conversion.c, data-compat.c, data-mem.c, data.c, engine-gpgsm.c,
1590 gpgme.c, keylist.c, posix-io.c, rungpg.c, sign.c, version.c,
1591 w32-io.c, wait.c: Replace DEBUG macros by TRACE_* variants. In
1592 most of these files, add many more tracepoints.
1594 2007-07-16 Marcus Brinkmann <marcus@g10code.de>
1596 * engine-gpgsm.c (status_handler): Do not send BYE here.
1598 * w32-io.c (struct reader_context_s, struct writer_context_s): New
1600 (create_reader, create_writer): Initialize C->refcount to 1.
1601 (destroy_reader, destroy_writer): Only destroy if C->refcount
1603 (find_reader, find_writer, kill_reader, kill_writer): Beautify.
1604 * priv-io.h (_gpgme_io_dup): New prototype.
1605 * posix-io.c (_gpgme_io_dup): New function.
1606 * w32-io.c (_gpgme_io_dup): Likewise.
1607 * w32-glib-io.c (_gpgme_io_dup): Likewise.
1608 * engine-gpgsm.c (start): Reverting to version 2007-07-10.
1610 2007-07-13 Marcus Brinkmann <marcus@g10code.de>
1612 * data-user.c (user_read, user_write, user_seek): Set errno and
1613 return -1 instead returning the error code directly.
1614 * data-compat.c (old_user_seek): Likewise.
1615 * gpgme.c (gpgme_sig_notation_add): Return error properly.
1617 * Revert the "close_notify_handler" returns int stuff. Always
1618 close in the _gpgme_io_close implementations.
1619 * engine-gpgsm.c (status_handler): Try to terminate the connection
1621 * w32-io.c (_gpgme_io_read): Return C->error_code in ERRNO.
1622 (_gpgme_io_write): Likewise.
1624 * priv-io.h (_gpgme_io_set_close_notify): Change type of HANDLER
1625 to _gpgme_close_notify_handler.
1626 (_gpgme_close_notify_handler): New type.
1627 (_gpgme_io_dup): Remove prototype.
1628 * posix-io.c (notify_table, _gpgme_io_set_close_notify): Change
1629 type of HANDLER to _gpgme_close_notify_handler_t.
1630 (_gpgme_io_close): Do not close the FD if handler returns 0.
1631 (_gpgme_io_dup): Remove function.
1632 * w32-io.c (notify_table, _gpgme_io_set_close_notify,
1633 _gpgme_io_close): Change type of HANDLER to
1634 _gpgme_close_notify_handler_t.
1635 (_gpgme_io_close): Do not close the FD if handler returns 0.
1636 (_gpgme_io_dup): Remove function.
1637 * w32-glib-io.c (_gpgme_io_dup): Remove function.
1638 (_gpgme_io_set_close_notify, notify_table): Change type of HANDLER
1639 to _gpgme_close_notify_handler_t.
1640 (_gpgme_io_close): Do not close the FD if handler returns 0.
1641 * rungpg.c (close_notify_handler): Change return type to int,
1643 * engine-gpgsm.c (close_notify_handler): Change return type to
1644 int, return 0 for status FD and 1 for all other FDs.
1645 (start): Do not duplicate the status FD.
1647 2007-07-12 Marcus Brinkmann <marcus@g10code.de>
1649 * Makefile.am: Replace implicite rule by suffix rule. Add
1652 2007-07-12 Werner Koch <wk@g10code.com>
1654 * version.c (do_subsystem_inits) [W32]: Make sure that the socket
1655 system has been started.
1657 2007-07-10 Marcus Brinkmann <marcus@g10code.de>
1659 * priv-io.h (_gpgme_io_dup): New prototype.
1660 * posix-io.c (_gpgme_io_dup): New function.
1661 * w32-io.c (_gpgme_io_dup): Likewise.
1662 * w32-glib-io.c (_gpgme_io_dup): Likewise.
1663 * engine-gpgsm.c (start): Use _gpgme_dup() instead of dup().
1665 2007-07-08 Marcus Brinkmann <marcus@g10code.de>
1667 * engine-gpgsm.c [HAVE_W32_SYSTEM]: Enable the bunch of the file.
1668 * funopen.c (funopen): Rename to _gpgme_funopen.
1670 2007-04-30 Marcus Brinkmann <marcus@g10code.de>
1672 * engine-gpgsm.c (gpgsm_new): Fix error handling for ttyname_r.
1673 * rungpg.c (gpg_new): Likewise.
1674 Submitted by Stephen Tether.
1676 2007-02-26 Werner Koch <wk@g10code.com>
1678 * verify.c (op_data_t): New element PLAINTEXT_SEEN.
1679 (_gpgme_verify_status_handler): Return an error if more than one
1680 plaintext has been seen.
1681 (parse_error): New arg SET_STATUS. Also detect it based on an
1682 ERROR status (gpg > 1.4.6).
1684 2007-01-26 Werner Koch <wk@g10code.com>
1686 * w32-io.c (build_commandline): Fixed stupid quoting bug.
1687 * w32-glib-io.c (build_commandline): Ditto.
1689 * rungpg.c (gpg_set_locale): Avoid dangling pointer after free.
1691 * gpgme-config.in: New options --get-gpg and --get-gpgsm.
1693 2007-01-18 Marcus Brinkmann <marcus@g10code.de>
1695 * data.h (_gpgme_data_get_fd): Add prototype.
1696 (gpgme_data_get_fd_cb): New type.
1697 (struct _gpgme_data_cbs): New member get_fd.
1698 * data.c (_gpgme_data_get_fd): New function.
1699 * data-fd.c (fd_get_fd): New function.
1700 (fd_cbs): Add fd_get_fd.
1701 * data-stream.c (stream_get_fd): New function.
1702 (stream_cbs): Add stream_get_fd.
1703 * data-mem.c (mem_cbs): Add NULL for get_fd callback.
1704 * data-user.c (user_cbs): Likewise.
1705 * engine-gpgsm.c (gpgsm_set_fd) [USE_DESCRIPTOR_PASSING]: Try to
1706 short-cut by passing the data descriptor directly.
1708 2007-01-17 Marcus Brinkmann <marcus@g10code.de>
1710 * w32-io.c (build_commandline): Quote all command line arguments.
1711 * w32-glib-io.c (build_commandline): Likewise.
1713 2007-01-10 Werner Koch <wk@g10code.com>
1715 * ttyname_r.c (ttyname_r) [W32]: Return a dummy name.
1717 2007-01-08 Werner Koch <wk@g10code.com>
1719 * version.c (do_subsystem_inits): Do assuan init only if building
1721 * setenv.c: Include assuan-def.h only if building with Assuan
1724 * op-support.c (_gpgme_op_reset): Set LC_MESSAGES only if
1726 * engine-gpgsm.c (gpgsm_set_locale): Ditto.
1727 * rungpg.c (gpg_set_locale): Ditto.
1729 2006-12-17 Marcus Brinkmann <marcus@g10code.de>
1731 * gpgme.c (gpgme_set_protocol): Shut down the engine when
1732 switching protocols.
1733 (gpgme_ctx_set_engine_info): Likewise for engine info.
1734 * engine.h (_gpgme_engine_reset): New function prototype.
1735 * engine.c (_gpgme_engine_reset): New function.
1736 * engine-backend.h (struct engine_ops): New member RESET.
1737 * rungpg.c (_gpgme_engine_ops_gpg): Add NULL for reset function.
1738 * engine-gpgsm.c (_gpgme_engine_ops_gpgsm)
1739 [USE_DESCRIPTOR_PASSING]: Add gpgsm_reset for reset.
1740 (_gpgme_engine_ops_gpgsm) [!USE_DESCRIPTOR_PASSING]: Add NULL for
1742 (gpgsm_reset) [USE_DESCRIPTOR_PASSING]: New function.
1743 * op-support.c (_gpgme_op_reset): Try to use the engine's reset
1744 function if available.
1745 * engine-gpgsm.c (gpgsm_new): Move code to dup status_fd to ...
1747 * posix-io.c (_gpgme_io_recvmsg, _gpgme_io_sendmsg): New functions.
1749 * engine.h (_gpgme_engine_new): Remove arguments lc_ctype and
1750 lc_messages from prototype.
1751 (_gpgme_engine_set_locale): New prototype.
1752 * engine.c (_gpgme_engine_set_locale): New function.
1753 * op-support.c (_gpgme_op_reset): Call _gpgme_engine_set_locale.
1754 * engine-backend.h (struct engine_ops): Add new member SET_LOCALE.
1755 Remove arguments lc_messages and lc_ctype from member NEW.
1756 * engine-gpgsm.c (struct engine_gpgsm): New members lc_ctype_set
1757 and lc_messages_set.
1758 (gpgsm_new): Remove lc_messages and lc_ctype
1760 (gpgsm_set_locale): New function.
1761 (_gpgme_engine_ops_gpgsm): Add gpgsm_set_locale.
1762 * rungpg.c (struct engine_gpg): Add new members lc_messages and
1764 (gpg_release): Release lc_messages and lc_ctype if set.
1765 (gpg_new): Remove lc_messages and lc_ctype arguments.
1766 (gpg_set_locale): New function.
1767 (_gpgme_engine_ops_gpg): Add gpg_set_locale.
1768 (add_arg): Implement in terms of:
1769 (add_arg_ext): New function.
1770 (start): Set lc-messages and lc-ctype arguments here.
1772 2006-12-03 Marcus Brinkmann <marcus@g10code.de>
1774 * engine-gpgsm.c (struct engine_gpgsm): Move members
1775 input_fd_server, output_fd_server, message_fd_server to ...
1776 (iocb_data): ... here (as server_fd).
1777 (close_notify_handler): Reset tags as well.
1778 (gpgsm_new): Implement support for descriptor
1780 (fd_type_t): New type.
1781 (gpgsm_clear_fd): New function. Use it instead of _gpgsm_io_close
1782 for unused communication channels.
1783 (gpgsm_set_fd): Rewritten to support descriptor passing. All
1784 relevant callers adjusted as well (previously of _gpgme_io_close).
1786 2006-12-02 Marcus Brinkmann <marcus@g10code.de>
1788 * version.c: Include "assuan.h".
1789 (do_subsystem_inits): Call assuan_set_assuan_err_source.
1791 2006-12-01 Marcus Brinkmann <marcus@g10code.de>
1793 * Makefile.am (libgpgme_real_la_SOURCES): Rename to main_sources.
1794 (libgpgme_la_SOURCES, libgpgme_pthread_la_SOURCES,
1795 libgpgme_glib_la_SOURCES, libgpgme_pth_la_SOURCES): Add
1797 (libgpgme_la_DEPENDENCIES, libgpgme_la_LIBADD,
1798 libgpgme_pthread_la_DEPENDENCIES, libgpgme_pthread_la_LIBADD,
1799 libgpgme_pth_la_DEPENDENCIES, libgpgme_pth_la_LIBADD,
1800 libgpgme_glib_la_DEPENDENCIES, libgpgme_glib_la_LIBADD): Remove
1802 (noinst_LTLIBRARIES): Removed.
1803 (libgpgme_glib_la_CFLAGS, libgpgme_pth_la_CFLAGS): Removed.
1804 (AM_CFLAGS): New variable.
1806 2006-11-30 Marcus Brinkmann <marcus@g10code.de>
1808 * engine-gpgsm.c: Replace AssuanError with gpg_error_t and
1809 ASSUAN_CONTEXT with assuan_context_t.
1811 2006-11-29 Marcus Brinkmann <marcus@g10code.de>
1813 * engine-gpgsm.c (gpgsm_new): Check return value of
1814 assuan_pipe_connect.
1816 * rungpg.c: Include <unistd.h>.
1817 (gpg_new): Support --display, --ttyname, --ttytype, --lc-ctype and
1818 --lc-messages. Fixes issue 734.
1820 2006-10-24 Marcus Brinkmann <marcus@g10code.de>
1822 * trustlist.c (gpgme_op_trustlist_next): Return error if OPD is
1825 2006-10-23 Marcus Brinkmann <marcus@g10code.de>
1827 * wait-global.c (gpgme_wait): Unlock CTX_LIST_LOCK while calling
1828 _gpgme_engine_io_event().
1830 * keylist.c (gpgme_op_keylist_next): Return error if OPD is NULL.
1832 2006-09-25 Marcus Brinkmann <marcus@g10code.de>
1834 * data-mem.c (gpgme_data_release_and_get_mem): Release the data
1837 2006-09-22 Marcus Brinkmann <marcus@g10code.de>
1839 * keylist.c (keylist_colon_handler): Move debug output after
1842 2006-07-29 Marcus Brinkmann <marcus@g10code.de>
1844 * gpgme-config.in (Options): Add NETLIBS.
1845 * Makefile.am (libgpgme_la_LIBADD, libgpgme_pthread_la_LIBADD,
1846 libgpgme_pth_la_LIBADD, libgpgme_glib_la_LIBADD): Add NETLIBS.
1848 * rungpg.c (read_status): Fix comparison disguising as an
1851 2005-03-24 Marcus Brinkmann <marcus@g10code.de>
1853 * gpgme.c (gpgme_set_locale): Remove conditional on
1854 HAVE_W32_SYSTEM, and just check for LC_MESSAGES.
1856 2006-07-16 Marcus Brinkmann <marcus@g10code.de>
1858 * rungpg.c (read_status): Strip potential carriage return.
1859 * genkey.c (get_key_parameter): Skip potential carriage return.
1860 * version.c (_gpgme_get_program_version): Strip potential carriage
1863 * data.c (gpgme_data_set_file_name): Allow to clear the file name
1866 2006-06-22 Marcus Brinkmann <marcus@g10code.de>
1868 * keylist.c (gpgme_get_key): Also clone the engine info.
1870 2006-03-06 Marcus Brinkmann <marcus@g10code.de>
1872 * gpgme-config.in (cflags_pth): Revert accidential removal of
1873 pthread support with last change.
1875 2006-02-28 Marcus Brinkmann <marcus@g10code.de>
1877 * w32-glib-io.c (O_BINARY) [!O_BINARY]: New macro.
1878 (_gpgme_io_pipe): Open pipes in binary mode.
1880 2006-02-22 Marcus Brinkmann <marcus@g10code.de>
1882 * engine.c (gpgme_engine_check_version): Reimplemented to allow
1883 checking the version correctly even after changing the engine
1884 information. Bug reported by Stéphane Corthésy.
1886 * rungpg.c (read_colon_line): Invoke colon preprocess handler if
1888 (colon_preprocessor_t): New type.
1889 (struct engine_gpg): New member colon.preprocess_fnc.
1890 (gpg_keylist_preprocess): New function.
1891 * keylist.c (keylist_colon_handler): Allow short key IDs.
1893 2006-02-15 Marcus Brinkmann <marcus@g10code.de>
1895 * w32-io.c (create_writer): Make C->have_data a manually resetted
1897 (writer): Move code from end of if block to beginning, so it
1898 is also run the first time.
1899 (_gpgme_io_write): Move assert check after error check. Reset
1900 the is_empty event, and also do it eagerly.
1901 (_gpgme_io_select): Unconditionally wait for the is_empty event.
1903 2006-01-26 Werner Koch <wk@g10code.com>
1905 * w32-util.c (_gpgme_get_conf_int): New.
1906 * posix-util.c (_gpgme_get_conf_int): New.
1907 * w32-io.c (get_desired_thread_priority): New.
1908 (create_reader, create_writer): Use it here.
1910 2006-01-04 Werner Koch <wk@g10code.com>
1912 * debug.h (_gpgme_debug_srcname): New. Use it with the debug macros.
1914 * w32-glib-io.c (_gpgme_io_set_nonblocking): Add debug
1915 statements. Disable error return for failed nonblocking call.
1917 2006-01-03 Marcus Brinkmann <marcus@g10code.de>
1919 * w32-glib-io.c (_gpgme_io_close): Only close fd if there is no
1922 2005-12-31 Marcus Brinkmann <marcus@g10code.de>
1924 * w32-glib-io.c (find_channel): Set channel to unbuffered.
1925 (_gpgme_io_select): Fix debug output.
1927 2005-12-23 Werner Koch <wk@g10code.com>
1929 * gpgme.h (struct _gpgme_signature): Append field PKA_ADDRESS.
1930 * verify.c (release_op_data, _gpgme_verify_status_handler): Set
1933 2005-12-20 Werner Koch <wk@g10code.com>
1935 * gpgme.h (gpgme_status_code_t): Added GPGME_STATUS_PKA_TRUST_BAD
1936 and GPGME_STATUS_PKA_TRUST_GOOD.
1937 (struct _gpgme_signature): New field pka_trust.
1938 * verify.c (_gpgme_verify_status_handler): Set pka_trust.
1940 2005-12-06 Werner Koch <wk@g10code.com>
1942 * keylist.c (keylist_colon_handler): Store fingerprints of the
1943 subkeys. Reset the secret flag of subkeys for stub secret keys.
1944 (NR_FIELDS): Bumped up to 16
1946 2005-11-27 Marcus Brinkmann <marcus@g10code.de>
1948 * engine.c (_gpgme_set_engine_info): Use new_file_name in
1949 engine_get_version invocation. Reported by Stéphane Corthésy.
1951 2005-11-24 Marcus Brinkmann <marcus@g10code.de>
1953 * w32-glib-io.c (_gpgme_io_fd2str): Remove debug printf.
1955 2005-11-18 Werner Koch <wk@g10code.com>
1957 * w32-glib-io.c: Include glib.h before windows to avoid a symbol
1959 (find_channel): Better use g_io_channel_win32_new_fd instead of
1960 the autodetection function g_io_channel_unix_new.
1961 (_gpgme_io_select): Rewritten. It is now a fully working select
1964 2005-11-18 Marcus Brinkmann <marcus@g10code.de>
1966 * priv-io.h (_gpgme_io_fd2str): New prototype.
1967 * posix-io.c (_gpgme_io_fd2str): New function.
1968 * w32-io.c (_gpgme_io_fd2str): New function.
1969 * rungpg.c: Use this new function.
1970 * w32-glib-io.c (_gpgme_io_fd2str): Rewrote the file handle code
1971 again. Two's company, three's the musketeers.
1973 * w32-glib-io.c: Rewrote the file handle code. We don't create
1974 system fds for every handle (doesn't work for inherited handles),
1975 but we create pseudo fds in a private namespace that designate a
1976 handle and potentially a giochannel.
1978 2005-11-18 Werner Koch <wk@g10code.com>
1980 * versioninfo.rc.in: Set file version to LT-version + Svn-revision.
1982 2005-11-17 Marcus Brinkmann <marcus@g10code.de>
1984 * w32-glib-io.c: New file.
1985 * gpgme.def (gpgme_get_giochannel): Add symbol.
1986 * Makefile.am (system_components) [HAVE_DOSISH_SYSTEM]: Remove
1988 (ltlib_gpgme_extra): New variable.
1989 (lib_LTLIBRARIES): Add $(ltlib_gpgme_extra).
1990 (system_components_not_extra): New variable.
1991 (libgpgme_la_SOURCES, libgpgme_pthread_la_SOURCES,
1992 (libgpgme_pth_la_SOURCES): Add $(system_components_not_extra).
1993 (libgpgme_glib_la_LDFLAGS, libgpgme_glib_la_DEPENDENCIES,
1994 (libgpgme_glib_la_LIBADD, libgpgme_glib_la_CFLAGS)
1995 [BUILD_W32_GLIB]: New variables.
1996 * gpgme-config.in (glib): New option.
1997 * gpgme.m4 (AM_PATH_GPGME_GLIB): New macro.
1999 2005-11-17 Marcus Brinkmann <marcus@g10code.de>
2001 * priv-io.h (_gpgme_io_waitpid, _gpgme_io_kill): Removed.
2002 * w32-io.c (_gpgme_io_waitpid, _gpgme_io_kill): Removed.
2003 * posix-io.c (_gpgme_io_kill): Removed.
2004 (_gpgme_io_waitpid): Declare static.
2006 2005-10-24 Marcus Brinkmann <marcus@g10code.de>
2008 * w32-io.c (_gpgme_io_spawn): Don't minimize window, hide it.
2010 2005-10-21 Werner Koch <wk@g10code.com>
2012 * Makefile.am: Fixed cut+paste problem
2014 2005-10-20 Marcus Brinkmann <marcus@g10code.de>
2016 * Makefile.am: Build versioninfo.lo, not versioninfo.o. Also, fix
2019 2005-10-16 Marcus Brinkmann <marcus@g10code.de>
2021 * rungpg.c (gpg_edit): Don't add a key argument if in card edit
2024 2005-10-06 Marcus Brinkmann <marcus@g10code.de>
2026 * Makefile.am (gpgme.dll gpgme.dll.a): Use $(srcdir) for
2029 * gpgme.h (gpgme_free): New prototype.
2030 * data-mem.c (gpgme_free): New function.
2031 * libgpgme.vers (GPGME_1.1): Add gpgme_free.
2032 * gpgme.def: Add gpgme_free.
2034 2005-10-02 Marcus Brinkmann <marcus@g10code.de>
2036 * util.h (_gpgme_decode_percent_string): Add new argument BINARY
2038 * verify.c (parse_notation): Likewise for invocation.
2039 * conversion.c (_gpgme_decode_percent_string): Likewise to
2040 declaration. If set, do not replace '\0' characters with a
2042 * gpgme.h (struct _gpgme_key_sig): New field notations.
2043 * ops.h (_gpgme_parse_notation): New prototype.
2044 * sig-notation.c (_gpgme_parse_notation): New function.
2045 * key.c (gpgme_key_unref): Free all signature notations.
2046 * keylist.c (op_data_t): New member tmp_keysig.
2047 (finish_key): Clear OPD->tmp_keysig.
2048 * gpgme.c (gpgme_set_keylist_mode): Remove check.
2049 * rungpg.c (gpg_keylist): Support listing signature notations.
2050 (gpg_keylist_ext): Likewise.
2052 2005-10-01 Marcus Brinkmann <marcus@g10code.de>
2054 * engine.h (_gpgme_set_engine_info): Add prototype.
2055 * engine-backend.h (struct engine_ops): Change return type of
2056 get_file_name() to const char * to silence gcc warning.
2057 * engine.c (engine_get_file_name): Change return type to const
2058 char * to silence gcc warning.
2059 (gpgme_get_engine_info): Use transitional variable to go from
2060 const char * to char * to silence gcc warning.
2061 (_gpgme_set_engine_info): Likewise.
2062 * engine-gpgsm.c (struct engine_gpgsm): Change type of LINE to
2063 char * to silence gcc warning.
2064 (gpgsm_new): Make ARGV a pointer to const char.
2065 (status_handler): Change type of SRC, END, DST, ALINE and NEWLINE
2066 to char * to silence gcc warning.
2068 * gpgme.def: Add gpgme_data_set_file_name,
2069 gpgme_data_get_file_name, gpgme_sig_notation_clear,
2070 gpgme_sig_notation_add and gpgme_sig_notation_get.
2071 * libgpgme.vers: Add gpgme_sig_notation_clear,
2072 gpgme_sig_notation_add and gpgme_sig_notation_get.
2073 * Makefile.am (libgpgme_real_la_SOURCES): Add sig-notation.c.
2074 * context.h (struct gpgme_context): New field sig_notations.
2075 * gpgme.h (struct _gpgme_sig_notation): New member value_len and
2077 (GPGME_SIG_NOTATION_CRITICAL): New symbol.
2078 (gpgme_sig_notation_flags_t): New type.
2079 (gpgme_sig_notation_add, gpgme_sig_notation_clear,
2080 gpgme_sig_notation_get): New prototypes.
2081 * ops.h (_gpgme_sig_notation_create, _gpgme_sig_notation_free):
2083 * sig-notation.c (_gpgme_sig_notation_free): New file.
2084 * verify.c (parse_notation): Use support functions.
2085 (release_op_data): Likewise.
2086 * rungpg.c (append_args_from_sig_notations): New function.
2087 (gpg_encrypt_sign, gpg_sign): Call it.
2089 2005-09-30 Marcus Brinkmann <marcus@g10code.de>
2091 * data.h (struct gpgme_data): New member file_name.
2092 * data.c (gpgme_data_set_filename): New function.
2093 (_gpgme_data_release): Free DH->filename if necessary.
2094 (gpgme_data_get_filename): New function.
2095 * rungpg.c (gpg_encrypt): Set filename option.
2096 (gpg_encrypt_sign): Likewise.
2097 (gpg_sign): Likewise.
2098 * libgpgme.vers (GPGME_1.1): Add gpgme_data_set_file_name and
2099 gpgme_data_get_file_name.
2101 * decrpyt.c, verify.c, gpgme.h: Replace plaintext_filename with
2104 2005-09-29 Marcus Brinkmann <marcus@g10code.de>
2106 * gpgme.h (struct _gpgme_key): Add field is_qualified.
2107 (struct _gpgme_subkey): Likewise.
2108 * keylist.c (set_subkey_capability, set_mainkey_capability): Set
2111 2005-09-23 Werner Koch <wk@g10code.com>
2113 * w32-io.c (_gpgme_io_pipe): Removed use of environment variable
2115 (create_reader, create_writer): Set thread priority higher.
2117 2005-09-19 Werner Koch <wk@g10code.com>
2119 * w32-io.c (_gpgme_io_pipe): New environment variable to change
2120 the size of the pipe buffer.
2122 2005-09-13 Werner Koch <wk@g10code.com>
2124 * ath.c: Changes to make it work under W32.
2126 2005-09-12 Marcus Brinkmann <marcus@g10code.de>
2128 * Makefile.am (libgpgme_la_SOURCES): Set to ath.h and ath.c.
2129 (ath_pth_src, ath_pthread_src): Removed.
2130 (w32_o_files): Replace ath-compat.o with ath.o.
2131 (libgpgme_pth_la_CFLAGS): New variable.
2132 * ath-compat.c, ath-pthread-compat.c, ath-pth-compat.c: Removed.
2133 * ath.h (ath_pthread_available, ath_pth_available): Removed.
2134 (ath_init) [!_ATH_EXT_SYM_PREFIX]: Do not define macro.
2135 (struct ath_ops, ath_init) [_ATH_COMPAT]: Removed.
2136 (_ATH_COMPAT): Macro removed.
2137 * posix-sema.c (_gpgme_sema_subsystem_init): Do not call
2140 2005-09-12 Marcus Brinkmann <marcus@g10code.de>
2142 * keylist.c (release_op_data): Do not free opd->tmp_uid.
2144 2005-09-07 Werner Koch <wk@g10code.com>
2146 * w32-io.c (build_commandline): Quote argv[0].
2148 2005-08-26 Marcus Brinkmann <marcus@g10code.de>
2150 * rungpg.c (command_handler): Use _gpgme_io_write instead of write.
2152 * edit.c (command_handler): Do not depend on PROCESSED being
2155 * engine.h (engine_command_handler_t): Add new argument processed.
2156 * ops.h (_gpgme_passphrase_command_handler_internal): Rename
2158 (_gpgme_passphrase_command_handler): ... this one.
2159 * passphrase.c (_gpgme_passphrase_command_handler_internal):
2161 (_gpgme_passphrase_command_handler): ... this one.
2162 * edit.c (command_handler): Add new argument processed. Remove
2163 local variable with the same name. Always return processed as
2165 * rungpg.c (command_handler): Send a newline character if the
2168 2005-08-26 Werner Koch <wk@g10code.com>
2170 * w32-util.c (read_w32_registry_string): Updated from code used by
2171 GnuPG. This allows for expanding strings and features the
2172 implicit fallback key.
2173 (w32_shgetfolderpath, find_program_at_standard_place): New.
2174 (_gpgme_get_gpg_path, _gpgme_get_gpgsm_path): With no registry
2175 entry, locate the programs at the standard place.
2176 (dlopen, dlsym, dlclose): New, so that we can keep on using what
2177 we are accustomed to.
2179 * debug.c (debug_init): Use PATHSEP_C so that under W32 a
2180 semicolon is used which allows us to create files with drive
2183 * w32-io.c (_gpgme_io_read, _gpgme_io_write): Print content in
2186 2005-08-19 Werner Koch <wk@g10code.com>
2189 * versioninfo.rc.in: New.
2190 * Makefile.am: Addes support for building a W32 DLL.
2192 * ttyname_r.c (ttyname_r) [W32]: Return error.
2193 * ath-compat.c [W32]: select and co are not yet supported; return
2195 * data-stream.c (stream_seek): Use ftell if ftello is not available.
2197 2005-08-08 Werner Koch <wk@g10code.com>
2199 * util.h (stpcpy): Renamed to ..
2200 (_gpgme_stpcpy): .. this and made inline. This avoids duplicate
2201 definitions when linking statically.
2202 * stpcpy.c: Removed.
2204 2005-07-27 Marcus Brinkmann <marcus@g10code.de>
2206 * gpgme.h (gpgme_status_code_t): Add GPGME_STATUS_PLAINTEXT.
2207 (struct _gpgme_op_decrypt_result): New member plaintext_filename.
2208 (struct _gpgme_op_verify_result): Likewise.
2209 * ops.h (_gpgme_parse_plaintext): Add prototype.
2210 * op-support.c (_gpgme_parse_plaintext): New function.
2211 * decrypt.c (release_op_data): Release
2212 OPD->result.plaintext_filename.
2213 (_gpgme_decrypt_status_handler): Handle GPGME_STATUS_PLAINTEXT.
2214 * verify.c (release_op_data): Release
2215 OPD->result.plaintext_filename.
2216 (_gpgme_verify_status_handler): Handle GPGME_STATUS_PLAINTEXT.
2218 2005-07-26 Marcus Brinkmann <marcus@g10code.de>
2220 * keylist.c (gpgme_get_key): Allow key IDs.
2222 2005-06-20 Marcus Brinkmann <marcus@g10code.de>
2224 * gpgme.m4: Only call GPGME_CONFIG if found.
2226 2005-06-03 Marcus Brinkmann <marcus@g10code.de>
2228 * gpgme.h (struct _gpgme_signature): New members pubkey_algo and
2230 * verify.c (parse_valid_sig): Parse pubkey and hash algo numbers.
2231 (parse_new_sig): Parse pubkey, hash algo and timestamp for ERRSIG.
2233 (_gpgme_decrypt_status_handler): Fix last change.
2235 * gpgme.h (struct _gpgme_recipient): New structure.
2236 (gpgme_recipient_t): New type.
2237 (struct _gpgme_op_decrypt_result): Add member recipients.
2238 * decrypt.c (op_data_t): New member last_recipient_p.
2239 (_gpgme_op_decrypt_init_result): Initialize last_recipient_p.
2240 (parse_enc_to): New function.
2241 (_gpgme_decrypt_status_handler): Handle status ENC_TO and
2244 * wait-global.c (gpgme_wait): Break out of the fd processing loop
2246 Reported by Igor Belyi <gpgme@katehok.ac93.org>.
2248 2005-06-02 Marcus Brinkmann <marcus@g10code.de>
2250 * wait.h (_gpgme_run_io_cb): New prototype.
2251 * wait.c (_gpgme_run_io_cb): New function.
2252 * wait-global.c (gpgme_wait): Call it.
2253 * wait-user.c (_gpgme_user_io_cb_handler): Likewise.
2254 * wait-private.c (_gpgme_wait_on_condition): Likewise.
2256 2005-06-02 Werner Koch <wk@g10code.com>
2258 * passphrase.c (_gpgme_passphrase_status_handler): Take care of
2259 GPGME_STATUS_NEED_PASSPHRASE_PIN.
2260 (_gpgme_passphrase_command_handler_internal): Also act on the key
2261 "passphrase.pin.ask".
2263 * gpgme.h: Added status codes GPGME_STATUS_SIG_SUBPACKET,
2264 GPGME_STATUS_NEED_PASSPHRASE_PIN, GPGME_STATUS_SC_OP_FAILURE,
2265 GPGME_STATUS_SC_OP_SUCCESS, GPGME_STATUS_CARDCTRL,
2266 GPGME_STATUS_BACKUP_KEY_CREATED.
2268 2005-05-28 Marcus Brinkmann <marcus@g10code.de>
2270 * data-user.c: Include <errno.h>.
2272 2005-05-17 Marcus Brinkmann <marcus@g10code.de>
2274 * gpgme.c (gpgme_new): Set the CTX->include_certs default to the
2277 2005-05-11 Marcus Brinkmann <marcus@g10code.de>
2279 * w32-io.c (_gpgme_io_select): Fix loop increment.
2281 2005-05-05 Marcus Brinkmann <marcus@g10code.de>
2283 * data-user.c (user_release): Only call user hook if provided.
2284 (user_seek): Return EBADF if no user hook is provided.
2285 (user_read): Likewise.
2286 (user_write): Likewise.
2288 2005-04-28 Marcus Brinkmann <marcus@g10code.de>
2290 * gpgme.h (GPGME_INCLUDE_CERTS_DEFAULT): New macro.
2291 * engine-gpgsm.c (gpgsm_sign): Send the include-certs option after
2292 the reset, just for cleanliness, and do not sent it at all if the
2293 default is requested.
2294 * gpgme.c (gpgme_set_include_certs): Allow to use
2295 GPGME_INCLUDE_CERTS_DEFAULT.
2297 2005-04-21 Werner Koch <wk@g10code.com>
2299 * verify.c (calc_sig_summary): Set the key revoked bit.
2301 2005-04-14 Marcus Brinkmann <marcus@g10code.de>
2303 * wait-global.c (gpgme_wait): Use LI->ctx when checking a context
2304 in the list, not the user-provided CTX.
2305 Reported by Igor Belyi <gpgme@katehok.ac93.org>.
2307 * wait-global.c (gpgme_wait): If no context is found, and we
2308 should not hang, set *status to 0 and return NULL.
2309 Reported by Igor Belyi <gpgme@katehok.ac93.org>.
2311 2005-03-24 Marcus Brinkmann <marcus@g10code.de>
2313 * data.h (EOPNOTSUPP) [_WIN32]: Remove definition.
2314 * data.c (EOPNOTSUPP) [HAVE_W32_SYSTEM]: Remove definition.
2315 (gpgme_data_read, gpgme_data_write, gpgme_data_seek): Return
2316 ENOSYS instead EOPNOTSUPP.
2317 * data-compat.c (EOPNOTSUPP) [HAVE_W32_SYSTEM]: Remove definition.
2318 (gpgme_error_to_errno): Map GPG_ERR_NOT_SUPPORTED
2321 2005-03-24 Marcus Brinkmann <marcus@g10code.de>
2323 * io.h: Rename to ...
2324 * priv-io.h: ... this.
2325 * Makefile.am (libgpgme_real_la_SOURCES): Change io.h to priv-io.h.
2326 * data.c, engine-gpgsm.c, posix-io.c, rungpg.c, version.c,
2327 w32-io.c, wait-private.c, wait-global.c, wait-user.c, wait.c:
2328 Change all includes of "io.h" to "priv-io.h"
2330 2005-03-09 Werner Koch <wk@g10code.com>
2332 * w32-util.c (_gpgme_get_gpg_path, _gpgme_get_gpgsm_path): Do not
2333 cast away type checks.
2335 * io.h [W32]: Do not include stdio.h. If it is needed do it at
2338 * data.h [W32]: Removed kludge for EOPNOTSUP.
2339 * data.c, data-compat.c [W32]: Explicitly test for it here.
2341 Replaced use of _WIN32 by HAVE_W32_SYSTEM except for public header
2344 2005-03-07 Timo Schulz <twoaday@g10code.de>
2346 * gpgme.h: [_WIN32] Removed ssize_t typedef.
2347 * ath.h: [_WIN32] Added some (dummy) types.
2348 * io.h: [_WIN32] include stdio.h.
2349 * data.h: [_WIN32] Define EOPNOTSUPP.
2350 * w32-io.c [_WIN32] (_gpgme_io_subsystem_init): New.
2351 * gpgme.c [_WIN32] (gpgme_set_locale): Disabled.
2353 2004-12-12 Marcus Brinkmann <marcus@g10code.de>
2355 * engine.c (_gpgme_set_engine_info): Fix assertion.
2357 2004-12-11 Marcus Brinkmann <marcus@g10code.de>
2359 * util.h [HAVE_CONFIG_H && HAVE_TTYNAME_R] (ttyname_r): Define
2361 * ttyname_r.c: New file.
2363 2004-12-07 Marcus Brinkmann <marcus@g10code.de>
2365 * putc_unlocked.c, funopen.c: I just claim copyright on these
2366 files and change their license to LGPL, because they are totally
2367 trivial wrapper functions.
2368 * isascii.c: Change copyright notice to the one from ctype/ctype.h
2369 in the GNU C Library (CVS Head 2004-10-10), where isascii is
2370 defined as a macro doing exactly the same as the function in this
2372 * memrchr.c: Update from the GNU C Library (CVS Head 2001-07-06).
2373 * stpcpy.c: Update from the GNU C Library (CVS Head 2004-10-10).
2374 * ath.c, ath-compat.c, ath.h, ath-pth.c, ath-pth-compat.c,
2375 ath-pthread.c, ath-pthread-compat.c, context.h, conversion.c,
2376 data.c, data-compat.c, data-fd.c, data.h, data-mem.c,
2377 data-stream.c, data-user.c, debug.c, debug.h, decrypt.c,
2378 decrypt-verify.c, delete.c, edit.c, encrypt.c, encrypt-sign.c,
2379 engine-backend.h, engine.c, engine-gpgsm.c, engine.h, error.c,
2380 export.c, genkey.c, get-env.c, gpgme.c, gpgme.h, import.c, io.h,
2381 key.c, keylist.c, mkstatus, Makefile.am, ops.h, op-support.c,
2382 passphrase.c, posix-io.c, posix-sema.c, posix-util.c, progress.c,
2383 rungpg.c, sema.h, sign.c, signers.c, trust-item.c, trustlist.c,
2384 util.h, verify.c, version.c, w32-io.c, w32-sema.c, w32-util.c,
2385 wait.c, wait-global.c, wait.h, wait-private.c, wait-user.c: Change
2388 2004-12-07 Marcus Brinkmann <marcus@g10code.de>
2390 * libgpgme.vers (GPGME_1.1): New version.
2391 * engine-backend.h (struct engine_ops): Add argument FILE_NAME to
2392 member get_version(). Add arguments FILE_NAME and HOME_DIR to
2393 member new(). Change return type of get_file_name and get_version
2395 * engine-gpgsm.c (gpgsm_get_version): Change return type to char
2396 pointer. Do not cache result.
2397 (gpgsm_new): Add file_name and home_dir argument, and use them
2398 instead of the defaults, if set.
2399 * rungpg.c (struct engine_gpg): New member file_name.
2400 (gpg_get_version): Change return type to char pointer, and do not
2402 (gpg_release): Free gpg->file_name.
2403 (gpg_new): Take new arguments file_name and home_dir. Set the
2404 --homedir argument if HOME_DIR is not NULL. Set gpg->file_name.
2405 (start): Use gpg->file_name instead _gpgme_get_gpg_path, if set.
2406 * engine.h (_gpgme_engine_info_copy, _gpgme_engine_info_release):
2408 (_gpgme_engine_new): Change first argument to gpgme_engine_info_t
2410 * engine.c: Include <assert.h>.
2411 (gpgme_get_engine_info): Set *INFO within the lock. Move
2412 ENGINE_INFO and ENGINE_INFO_LOCK to ....
2413 (engine_info, engine_info_lock): ... here. New static variables.
2414 (engine_get_version): Add file_name argument to
2415 get_version invocation. Change return type to char pointer.
2416 (gpgme_engine_check_version): Rewritten to free() the return value
2417 of engine_get_version after using it.
2418 (_gpgme_engine_info_release): New function.
2419 (gpgme_get_engine_info): Rewritten.
2420 (_gpgme_engine_info_copy): New function.
2421 (_gpgme_set_engine_info): New function.
2422 (gpgme_set_engine_info): New function.
2423 (_gpgme_engine_new): Change first argument to gpgme_engine_info_t
2425 * gpgme.h (struct _gpgme_engine_info): Change type of file_name
2426 and version to char * (remove the const). New member home_dir.
2427 (gpgme_set_engine_info, gpgme_ctx_get_engine_info,
2428 gpgme_ctx_set_engine_info): New prototypes.
2429 * context.h (struct gpgme_context): New member engine_info.
2430 * gpgme.c (gpgme_new): Allocate CTX->engine_info.
2431 (gpgme_release): Deallocate CTX->engine_info.
2432 (gpgme_ctx_get_engine_info, gpgme_ctx_set_engine_info): New
2434 * op-support.c (_gpgme_op_reset): Look for correct engine info and
2435 pass it to _gpgme_engine_new.
2436 * version.c (gpgme_check_version): Adjust to
2437 _gpgme_compare_versions returning an int.
2438 (_gpgme_compare_versions): Return an int value, not a const char
2440 * ops.h (_gpgme_compare_versions): Same for prototype.
2442 2004-10-03 Marcus Brinkmann <marcus@g10code.de>
2444 * verify.c (parse_trust): If no reason is provided, set
2445 SIG->validity_reason to 0.
2446 (calc_sig_summary): Set GPGME_SIGSUM_CRL_TOO_OLD if appropriate.
2448 2004-10-22 Marcus Brinkmann <marcus@g10code.de>
2450 * engine-gpgsm.c (map_assuan_error): Return 0 if ERR is 0.
2451 (start): Call map_assuan_error on return value of
2454 2004-10-05 Marcus Brinkmann <marcus@g10code.de>
2456 * op-support.c (_gpgme_op_data_lookup): Use char pointer for
2459 2004-09-30 Marcus Brinkmann <marcus@g10code.de>
2461 * gpgme.m4: Implement the --api-version check.
2463 * rungpg.c (read_status): Move the polling of the output data pipe
2464 to just before removing the command fd, from just before adding
2465 it. This avoids buffering problems.
2467 * data.c (_gpgme_data_inbound_handler): Use _gpgme_io_read, not
2468 read, to improve debug output.
2470 2004-09-29 Marcus Brinkmann <marcus@g10code.de>
2472 * gpgme.h (GPGME_IMPORT_NEW, GPGME_IMPORT_UID, GPGME_IMPORT_SIG,
2473 GPGME_IMPORT_SUBKEY, GPGME_IMPORT_SECRET,
2474 (GPGME_KEYLIST_MODE_LOCAL, GPGME_KEYLIST_MODERN_EXTERN,
2475 GPGME_KEYLIST_MODE_SIGS, GPGME_KEYLIST_MODE_VALIDATE): Change from
2477 (gpgme_keylist_mode_t): Define as unsigned int.
2478 (gpgme_key_t): Change type of keylist_mode to
2479 gpgme_keylist_mode_t.
2481 2004-09-23 Marcus Brinkmann <marcus@g10code.de>
2483 * data.c (_gpgme_data_outbound_handler): Close the file descriptor
2486 * data-stream.c (stream_seek): Call ftello and return the current
2488 * data.h (struct gpgme_data): Change type of data.mem.offset to
2490 * data.c (gpgme_data_seek): Check dh->cbs->seek callback, not read
2491 callback. If SEEK_CUR, adjust the offset by the pending buffer
2492 size. Clear pending buffer on success.
2495 2004-09-14 Marcus Brinkmann <marcus@g10code.de>
2497 * gpgme.m4: Add copyright notice.
2499 2004-08-18 Marcus Brinkmann <marcus@g10code.de>
2501 * passphrase.c (_gpgme_passphrase_status_handler): Always run the
2504 2004-08-17 Marcus Brinkmann <marcus@g10code.de>
2506 * rungpg.c (build_argv): Use --no-sk-comment, not --no-comment.
2508 2004-06-23 Marcus Brinkmann <marcus@g10code.de>
2510 * key.c (_gpgme_key_append_name): Make sure tail points to the
2511 byte following the uid.
2512 (_gpgme_key_add_sig): Likewise. Don't use calloc, but malloc and
2515 2004-06-02 Marcus Brinkmann <marcus@g10code.de>
2517 * libgpgme.vers: Remove C-style comment, which is not supported by
2520 2004-05-21 Marcus Brinkmann <marcus@g10code.de>
2522 * gpgme-config.in (Options): Support --api-version.
2524 * libgpgme.vers: List all gpgme symbols under version GPGME_1.0.
2526 * decrypt.c (_gpgme_decrypt_status_handler): Fix last change.
2527 * verify.c (parse_error): Likewise.
2529 * verify.c (parse_error): Do not skip location of where token.
2531 * gpgme.h (gpgme_status_code_t): Add GPGME_STATUS_REVKEYSIG.
2532 * verify.c (_gpgme_verify_status_handler): Add handling of
2533 GPGME_STATUS_REVKEYSIG.
2534 (parse_trust): Likewise.
2536 2004-05-21 Marcus Brinkmann <marcus@g10code.de>
2538 * gpgme.h (struct _gpgme_decrypt_result): New fields
2539 wrong_key_usage and _unused.
2540 * decrypt.c (_gpgme_decrypt_status_handler): Don't skip over
2541 character after a matched string, as in a protocol error this
2542 could skip over the trailing binary zero.
2543 Handle decrypt.keyusage error notifications.
2545 * gpgme.h (struct _gpgme_key): New member keylist_mode.
2546 * keylist.c (keylist_colon_handler): Set the keylist_mode of KEY.
2548 2004-04-29 Marcus Brinkmann <marcus@g10code.de>
2550 * gpgme.h (struct _gpgme_signature): Change member WRONG_KEY_USAGE
2551 to unsigned int. Same for member _unused.
2553 * keylist.c (set_mainkey_trust_info): Rewritten.
2554 (set_subkey_capability): Handle 'd' (disabled).
2555 (set_mainkey_capability): Rewritten.
2557 2004-04-22 Marcus Brinkmann <marcus@g10code.de>
2559 * gpgme.m4: Quote first argument to AC_DEFUN.
2561 2004-04-21 Werner Koch <wk@gnupg.org>
2563 * key.c (gpgme_key_unref): Allow passing NULL like free does.
2564 The rule of least surprise.
2566 2004-04-15 Werner Koch <wk@gnupg.org>
2568 * verify.c (prepare_new_sig, _gpgme_verify_status_handler): Remove
2569 unused result.signatures items.
2571 * keylist.c (gpgme_get_key): Return an error if FPR is NULL.
2573 2004-04-08 Werner Koch <wk@gnupg.org>
2575 * verify.c (_gpgme_verify_status_handler): Ignore the error status
2576 if we can't process it.
2577 * decrypt-verify.c (decrypt_verify_status_handler): Backed out
2578 yesterday's hack. It is not any longer required.
2580 2004-04-07 Werner Koch <wk@gnupg.org>
2582 * decrypt-verify.c (decrypt_verify_status_handler): Hack to cope
2583 with meaningless error codes from the verify status function.
2585 2004-04-05 Werner Koch <wk@gnupg.org>
2587 * gpgme.h: Add GPGME_STATUS_NEWSIG.
2589 * verify.c (parse_error): Compare only the last part of the where
2591 (prepare_new_sig): New.
2592 (parse_new_sig): Use prepare_new_sig when required.
2593 (_gpgme_verify_status_handler): Handle STATUS_NEWSIG.
2595 * engine-gpgsm.c (gpgsm_keylist_ext): Send with-validation
2596 option. Fixed pattern construction.
2597 (status_handler): Add debugging output.
2599 2004-03-23 Marcus Brinkmann <marcus@g10code.de>
2601 * engine-gpgsm.c (gpgsm_new): Protect _only_ tty related code with
2602 isatty(). Submitted by Bernhard Herzog.
2604 2004-03-11 Marcus Brinkmann <marcus@g10code.de>
2606 * engine-gpgsm.c (gpgsm_new): Protect all tty related code with
2609 * rungpg.c (gpg_cancel): Set GPG->fd_data_map to NULL after
2611 * engine-gpgsm.c (gpgsm_cancel): Only call assuan_disconnect if
2612 GPGSM->assuan_ctx is not NULL. Set it to NULL afterwards.
2614 2004-03-07 Marcus Brinkmann <marcus@g10code.de>
2616 * gpgme-config.in: Do not emit include and lib directory for
2617 prefix "/usr" or "".
2619 2004-03-03 Werner Koch <wk@gnupg.org>
2621 * engine-gpgsm.c (gpgsm_export_ext): Properly insert a space
2624 2004-02-18 Werner Koch <wk@gnupg.org>
2626 * gpgme-config.in: Ignore setting of --prefix.
2628 2004-02-25 Marcus Brinkmann <marcus@g10code.de>
2630 * rungpg.c (gpg_cancel): New function.
2631 (gpg_release): Call it here.
2632 (_gpgme_engine_ops_gpg): Add it here.
2633 * engine-gpgsm.c (gpgsm_cancel): Fix last change.
2635 2004-02-24 Marcus Brinkmann <marcus@g10code.de>
2637 * gpgme.c (gpgme_cancel): New function.
2638 * engine-backend.h (struct engine_ops): New member cancel.
2639 * engine.h (_gpgme_engine_cancel): New prototype.
2640 * engine.c (_gpgme_engine_cancel): New function.
2641 * engine-gpgsm.c (_gpgme_engine_ops_gpgsm): Add new member cancel.
2642 (gpgsm_cancel): New function.
2643 (gpgsm_release): Use it.
2644 * rungpg.c (_gpgme_engine_ops_gpg): Add new member cancel.
2646 2004-02-17 Werner Koch <wk@gnupg.org>
2648 * gpgme.h: Add GPGME_KEYLIST_MODE_VALIDATE.
2649 * engine-gpgsm.c (gpgsm_keylist): Send this to gpgsm.
2651 2004-02-15 Werner Koch <wk@gnupg.org>
2653 * memrchr.c (memrchr): Fixed implementation. Problem pointed out
2654 by Adriaan de Groot.
2656 2004-02-01 Marcus Brinkmann <marcus@g10code.de>
2658 * rungpg.c (build_argv): Use --no-comment, not --comment "".
2660 * data-compat.c (gpgme_data_new_from_filepart): Call fseeko if
2662 * data-stream.c (stream_seek): Likewise.
2664 2004-01-16 Werner Koch <wk@gnupg.org>
2666 * conversion.c (_gpgme_map_gnupg_error): Handle numerical codes as
2669 2004-01-13 Marcus Brinkmann <marcus@g10code.de>
2671 * gpgme.h (struct _gpgme_key_sig): Fix comment on REVOKED.
2673 2004-01-12 Werner Koch <wk@gnupg.org>
2675 * sign.c: Include util.h for prototype of _gpgme_parse_timestamp.
2677 2003-12-25 Marcus Brinkmann <marcus@g10code.de>
2679 * gpgme.h (_GPGME_D_CLASS): Revert this change.
2680 (struct _gpgme_key_sig): For C++ compilers, rename class
2681 member to _obsolete_class. Add new member sig_class.
2682 (struct _gpgme_new_signature): Same here.
2683 * key.c (gpgme_key_sig_get_ulong_attr): Use CERTSIG->sig_class,
2685 * keylist.c (keylist_colon_handler): Likewise for KEYSIG, but keep
2686 setting KEYSIG->class, too. Rename variable CLASS to SIG_CLASS.
2687 * sign.c (parse_sig_created): Set SIG->sig_class.
2689 2003-12-22 Werner Koch <wk@gnupg.org>
2691 * gpgme.h (_GPGME_D_CLASS): Kludge for C++ compatibility without
2694 2003-11-19 Werner Koch <wk@gnupg.org>
2696 * conversion.c (_gpgme_parse_timestamp): New.
2697 (atoi_1, atoi_2, atoi_4): New.
2698 * keylist.c (parse_timestamp): Removed. Changed all callers to use
2700 * verify.c (parse_valid_sig): Ditto. Repalced the errno check.
2701 * sign.c (parse_sig_created): Ditto.
2703 2003-10-31 Werner Koch <wk@gnupg.org>
2705 * keylist.c (parse_timestamp): Detect ISO 8601 timestamps and try
2708 2003-10-10 Marcus Brinkmann <marcus@g10code.de>
2710 * genkey.c (get_key_parameter): Make a copy of the key parameters.
2711 Submitted by Miguel Coca <e970095@zipi.fi.upm.es>.
2713 2003-10-06 Marcus Brinkmann <marcus@g10code.de>
2715 * data-compat.c: Include <sys/time.h> before <sys/stat.h> for
2718 * engine-gpgsm.c (map_assuan_error): If ERR is -1, return sensible
2721 * io.h (_gpgme_io_subsystem_init): New prototype.
2722 * posix-io.c (_gpgme_io_subsystem_init): Add function.
2723 (_gpgme_io_spawn): Do not fixup signal handler here.
2724 * version.c (do_subsystem_inits): Call _gpgme_io_subsystem_init.
2726 * debug.c (debug_init): Drop const qualifier from E.
2728 * ath.h (struct ath_ops): Make ADDR argument of CONNECT prototype
2730 (ath_connect): Make ADDR argument const.
2731 * ath-pthread.c (ath_connect): Likewise.
2732 * ath-pth.c (ath_connect): Likewise.
2733 * ath-compat.c (ath_connect): Likewise.
2734 * ath.c (ath_connect): Likewise.
2736 * ath.h [HAVE_SYS_SELECT_H]: Include <sys/select.h> for fd_set.
2737 [!HAVE_SYS_SELECT_H]: Include <sys/time.h>.
2739 * conversion.c (_gpgme_hextobyte): Drop "unsigned" from type of
2741 * util.h (_gpgme_hextobyte): Likewise for prototype.
2743 * gpgme.h: Remove trailing comma in enum.
2745 * rungpg.c: Do not include <time.h>, <sys/time.h>, <sys/types.h>,
2746 <signal.h>, <fcntl.h>, or "unistd.h".
2748 2003-10-02 Marcus Brinkmann <marcus@g10code.de>
2750 * engine-backend.h (struct engine_ops): Add argument TYPE.
2751 * engine.c (_gpgme_engine_op_edit): Likewise.
2752 * engine.h: Likewise.
2753 * rungpg.c (gpg_edit): Likewise. Use it.
2754 * edit.c (edit_start): Likewise. Pass it on.
2755 (gpgme_op_edit_start, gpgme_op_edit): Likewise.
2756 (gpgme_op_card_edit_start, gpgme_op_card_edit): New functions.
2758 2003-09-30 Marcus Brinkmann <marcus@g10code.de>
2760 * gpgme.h (gpg_strerror_r): Change prototype to match
2761 gpg_strerror_r change.
2762 * error.c (gpg_strerror_r): Likewise, also update implementation.
2764 * gpgme.c (gpgme_hash_algo_name): Change name of RMD160 to
2765 RIPEMD160, name of TIGER to TIGER192, name of CRC32-RFC1510 to
2766 CRC32RFC1510, and name of CRC24-RFC2440 to CRC24RFC2440.
2768 2003-09-14 Marcus Brinkmann <marcus@g10code.de>
2770 * gpgme.h: Add prototype for gpgme_set_locale.
2772 * gpgme.h: Define macro _GPGME_INLINE depending on the compiler
2773 characteristics and use that instead __inline__.
2775 * context.h (struct gpgme_context): New members lc_ctype and
2777 * gpgme.c: Include <locale.h>.
2778 (def_lc_lock, def_lc_ctype, def_lc_messages): New static
2780 (gpgme_set_locale): New function.
2781 * engine.c (_gpgme_engine_new): Add arguments lc_ctype and
2783 * engine.h (_gpgme_engine_new): Likewise.
2784 * engine-gpgsm.c (gpgsm_new): Likewise.
2785 * rungpg.c (gpg_new): Likewise.
2786 * engine-backend.h (struct engine_ops): Likewise to NEW.
2787 * op-support.c (_gpgme_op_reset): Likewise to invocation of
2790 2003-09-13 Marcus Brinkmann <marcus@g10code.de>
2792 * gpgme.h (gpgme_strerror_r): New prototype.
2793 * error.c (gpgme_strerror_r): New function.
2795 * get-env.c: New file.
2796 * util.h (_gpgme_getenv): Add prototype.
2797 * Makefile.am (libgpgme_real_la_SOURCES): Add get-env.c.
2798 * rungpg.c (build_argv): Use _gpgme_getenv.
2799 * debug.c (debug_init): Likewise.
2800 * engine-gpgsm.c (gpgsm_new): Likewise.
2801 (gpgsm_new): Use ttyname_r.
2802 * w32-io.c (_gpgme_io_spawn): Disable debugging for now.
2804 2003-09-03 Marcus Brinkmann <marcus@g10code.de>
2806 * gpgme-config.in: Use $libdir, not @libdir@, for the echo
2809 * gpgme-config.in: Rewritten.
2810 * gpgme.m4: Rewritten.
2812 2003-08-19 Marcus Brinkmann <marcus@g10code.de>
2814 The ath files (ath.h, ath.c, ath-pth.c, ath-pthread.c,
2815 ath-compat.c, ath-pth-compat.c and ath-pthread-compat.c) have been
2816 updated to have better thread support, and the Makefile.am was
2817 changed to reflect that.
2819 * util.h [!HAVE_FOPENCOOKIE]: Remove fopencookie declaration.
2820 * engine-gpgsm.c (gpgsm_assuan_simple_command): Set ERR to return
2821 value of status_fnc.
2822 * rungpg.c (start): Return SAVED_ERRNO, not errno.
2824 2003-08-18 Marcus Brinkmann <marcus@g10code.de>
2826 * rungpg.c (start): Use saved_errno instead errno.
2828 2003-08-18 Marcus Brinkmann <marcus@g10code.de>
2830 * funopen.c, putc_unlocked.c, isascii.c, memrchr.c: New files.
2831 * fopencookie.c: File removed.
2833 2003-08-15 Marcus Brinkmann <marcus@g10code.de>
2835 * gpgme-config.in: Put gpg-error related flags after gpgme's.
2837 2003-08-14 Marcus Brinkmann <marcus@g10code.de>
2839 * gpgme.h (struct _gpgme_new_signature): Rename member CLASS to
2840 _OBSOLETE_CLASS, add member CLASS with type unsigned int.
2841 * sign.c (parse_sig_created): Also set SIG->_unused_class for
2842 backward compatibility.
2844 2003-08-04 Marcus Brinkmann <marcus@g10code.de>
2846 * verify.c (parse_new_sig): Fix status parsing case.
2848 2003-07-31 Marcus Brinkmann <marcus@g10code.de>
2850 * gpgme.h (struct _gpgme_subkey): Add flag CAN_AUTHENTICATE.
2851 Lower _UNUSED to 23 bits.
2852 (struct _gpgme_key): Likewise.
2853 * keylist.c (set_mainkey_capability): Support 'a' and 'A'.
2854 (set_subkey_capability): Support 'a'.
2856 * keylist.c (gpgme_get_key): Check if there is more than one key
2857 listed, and return GPG_ERR_AMBIGUOUS_NAME in that case.
2859 * util.h (_gpgme_decode_c_string): Change type of LEN argument to
2861 (_gpgme_decode_percent_string): Likewise.
2862 * conversion.c (_gpgme_decode_c_string): Likewise.
2863 (_gpgme_decode_percent_string): Likewise.
2864 (_gpgme_map_gnupg_error): Change type of I to unsigned int.
2865 * signers.c (gpgme_signers_clear): Likewise.
2866 (gpgme_signers_enum): New unsigned variable SEQNO, set to SEQ.
2867 Use SEQNO instead SEQ.
2868 * wait.c (fd_table_put): Change type of I and J to unsigned int.
2869 * wait-global.c (_gpgme_wait_global_event_cb): Change type of IDX
2871 (gpgme_wait): Change type of I and IDX to unsigned int.
2872 * wait-private.c (_gpgme_wait_on_condition): Change type of IDX
2873 and I to unsigned int.
2874 * posix-io.c (_gpgme_io_close): Cast return value of macro DIM to
2875 int to suppress gcc warning.
2876 (_gpgme_io_set_close_notify): Likewise.
2877 (_gpgme_io_select): Change type of I to unsigned int.
2878 * engine.c (gpgme_get_engine_info): Change type of PROTO to
2880 * wait-user.c (_gpgme_user_io_cb_handler): Change type of IDX and
2883 2003-07-29 Marcus Brinkmann <marcus@g10code.de>
2885 * decrypt-verify.c (decrypt_verify_status_handler): Expand silly
2886 and wrong expression.
2887 * encrypt-sign.c (encrypt_sign_status_handler): Likewise.
2888 * encrypt.c (encrypt_sym_status_handler): Likewise.
2889 * sign.c (sign_status_handler): Likewise.
2890 * verify.c (verify_status_handler): Likewise.
2891 * decrypt.c (decrypt_status_handler): Likewise.
2893 * engine.c (gpgme_get_engine_info): Initialize NULL.
2895 2003-07-23 Marcus Brinkmann <marcus@g10code.de>
2897 * gpgme-config.in (gpg_error_libs): Quote GPG_ERROR_CFLAGS and
2898 GPG_ERROR_LIBS when setting the corresponding variables.
2899 Reported by Stéphane Corthésy.
2901 2003-07-22 Marcus Brinkmann <marcus@g10code.de>
2903 * engine-gpgsm.c (set_recipients): Move declaration of NEWLEN to
2904 the beginning of the block.
2906 2003-06-22 Marcus Brinkmann <marcus@g10code.de>
2908 * data-mem.c (mem_write): Copy original buffer content.
2910 2003-06-22 Marcus Brinkmann <marcus@g10code.de>
2912 * gpgme.h (gpgme_user_ids_release, gpgme_user_ids_append): Remove
2915 2003-06-06 Marcus Brinkmann <marcus@g10code.de>
2917 * Makefile.am (AM_CPPFLAGS): Add @GPG_ERROR_CFLAGS@.
2918 * gpgme-config.in (gpg_error_libs, gpg_error_cflags): New variables.
2921 * op-support.c (_gpgme_parse_inv_userid): Rename to
2922 _gpgme_parse_inv_recp and change to new datatype.
2923 * ops.h (_gpgme_parse_inv_key): Fix prototype.
2924 * gpgme.h (struct _gpgme_invalid_user_id): Rename to
2925 __gpgme_invalid_key. Rename field ID to KEY.
2926 (gpgme_invalid_user_id_t): Rename to gpgme_invalid_key_t.
2927 (struct _gpgme_op_encrypt_result): Here, too.
2928 (struct _gpgme_op_sign_result): Likewise.
2929 * encrypt.c (struct op_data): Likewise.
2930 (release_op_data): Likewise.
2931 * sign.c (struct op_data): Likewise.
2932 (release_op_data): Likewise.
2934 * posix-io.c (_gpgme_io_read): Save errno across debug calls.
2935 (_gpgme_io_write): Likewise.
2936 (_gpgme_io_pipe): Likewise.
2937 (_gpgme_io_select): Likewise.
2939 * rungpg.c (struct engine_gpg): Remove arg_error.
2940 (add_arg): Don't set arg_error.
2941 (add_data): Likewise.
2942 (start): Don't check arg_error.
2943 (gpg_new): Check return value of add_arg.
2944 * verify.c (parse_notation): Free allocated memory at error.
2946 2003-06-05 Marcus Brinkmann <marcus@g10code.de>
2948 Everywhere: Use libgpg-error error codes.
2950 * Makefile.am (EXTRA_DIST): Remove mkerrors.
2951 (BUILT_SOURCES): Remove errors.c.
2952 (MOSTLYCLEANFILES): Likewise.
2953 (libgpgme_la_SOURCES): Likewise. Add error.c.
2954 (errors.c): Remove target.
2955 * mkerrors: File removed.
2956 * error.c: New file.
2958 * gpgme.h (gpgme_error_t): Change to type gpg_error_t.
2959 (gpgme_err_code_t, gpgme_err_source_t): New types.
2960 (gpgme_err_code, gpgme_err_source, gpgme_error, gpgme_err_make):
2961 New static inline functions.
2962 (gpgme_strsource, gpgme_err_code_from_errno,
2963 gpgme_err_code_to_errno, gpgme_err_make_from_errno,
2964 gpgme_error_from_errno): New prototypes.
2966 2003-05-29 Marcus Brinkmann <marcus@g10code.de>
2968 * gpgme.h (gpgme_op_export_start): Change second arg to const char *.
2969 (gpgme_op_export): Likewise.
2970 (gpgme_op_export_ext_start): New prototype.
2971 (gpgme_op_export_ext): Likewise.
2972 * engine.h: Likewise for _gpgme_engine_op_export and
2973 _gpgme_engine_op_export_ext.
2974 * engine-backend.h (struct engine_ops): Change second argument of
2975 prototype of export to const char *, and add reserverd int as
2976 third argument. Add prototype for export_ext.
2977 * engine.c (_gpgme_engine_op_export_ext): New function.
2978 (_gpgme_engine_op_export): Change second argument of prototype of
2979 export to const char *, and add reserverd int as third argument.
2980 * rungpg.c (gpg_export): Change second argument of prototype of
2981 export to const char *, and add reserverd int as third argument.
2982 (gpg_export_ext): New function.
2983 (gpg_keylist_ext): Break loop at error.
2984 (_gpgme_engine_ops_gpg): Add gpg_export_ext.
2985 * engine-gpgsm.c (gpgsm_export): Change second argument of
2986 prototype of export to const char *, and add reserverd int as
2988 (gpgsm_export_ext): New function.
2989 (_gpgme_engine_ops_gpgsm): Add gpgsm_export_ext.
2990 * export.c (export_start): Change second argument of prototype of
2991 export to const char *, and add reserverd int as third argument.
2992 (gpgme_op_export_start): Likewise.
2993 (export_ext_start): New function.
2994 (gpgme_op_export_ext_start): Likewise.
2995 (gpgme_op_export_ext): Likewise.
2997 * gpgme.h (gpgme_keylist_mode_t): New type for anonymous enum.
2998 (gpgme_sigsum_t): New type for anonymous enum.
3000 * encrypt-sign.c (encrypt_sign_start): Check for errors earlier,
3001 and return an error if RECP is not set.
3003 * Makefile.am (libgpgme_la_SOURCES): Remove user-id.c.
3004 * user-id.c: Remove file.
3005 * ops.h: Remove prototype for _gpgme_user_ids_all_valid.
3006 * gpgme.h (gpgme_encrypt_flags_t): New type.
3007 (gpgme_op_encrypt_start): Change second parameter to type
3008 gpgme_key_t[], and add third parameter.
3009 (gpgme_op_encrypt): Likewise.
3010 (gpgme_op_encrypt_sign_start): Likewise.
3011 (gpgme_op_encrypt_sign): Likewise.
3012 * encrypt.c (encrypt_start): Likewise.
3013 (gpgme_op_encrypt_start): Likewise.
3014 (gpgme_op_encrypt): Likewise. Pass flags to engine.
3015 * encrypt-sign.c (encrypt_sign_start): Likewise.
3016 (gpgme_op_encrypt_sign_start): Likewise.
3017 (gpgme_op_encrypt_sign): Likewise.
3018 * engine-backend.h (struct engine_ops): Likewise for prototypes of
3019 encrypt and encrypt_sign.
3020 * engine.h: Likewise for prototypes of _gpgme_engine_op_encrypt
3021 and _gpgme_engine_op_encrypt_sign.
3022 * engine.c (_gpgme_engine_op_encrypt): Likewise.
3023 (_gpgme_engine_op_encrypt_sign): Likewise.
3024 * rungpg.c (gpg_encrypt): Likewise.
3025 (gpg_encrypt_sign): Likewise.
3026 * rungpg.c (gpg_encrypt): Check flags for always trust option.
3027 * engine-gpgsm.c (gpgsm_encrypt): Likewise.
3028 (set_recipients): Rewritten to use keys instead user IDs.
3029 * rungpg.c (append_args_from_recipients): Rewritten to use keys
3031 * encrypt.c (_gpgme_encrypt_status_handler): Change errors
3032 returned to GPGME_Invalid_Key and GPGME_General_Error.
3034 2003-05-28 Marcus Brinkmann <marcus@g10code.de>
3036 * engine-gpgsm.c: Rename GpgsmObject to engine_gpgsm_t.
3037 (struct gpgsm_object_s): Rename to struct engine_gpgsm.
3038 * rungpg.c: Rename GpgObject to engine_gpg_t.
3039 (struct gpg_object_s): Rename to struct engine_gpg.
3041 * context.h (struct gpgme_context): Change EngineObject to
3043 (enum ctx_op_data_type): Rename to ctx_op_data_id_t.
3044 (ctx_op_data_t): New type.
3045 (struct gpgme_context): Use it.
3046 * ops.h (_gpgme_op_data_lookup): Use new type name.
3047 * op-support.c (_gpgme_op_data_lookup): Likewise.
3048 * engine.c: Rename EngineObject to engine_t in the file. Also
3049 EngineStatusHandler to engine_status_handler_t,
3050 EngineCommandHandler to engine_command_handler_t and
3051 EngineColonLineHandler to engine_colon_line_handler.
3052 * rungpg.c (start): Likewise.
3053 * engine-gpgsm.c: Likewise.
3054 * engine-backend.h (struct engine_ops): Likewise
3055 * engine.h (struct engine_object_s): Rename to struct engine.
3056 (EngineObject): Rename to engine_t. Also everywhere else in the
3058 (EngineStatusHandler): Rename to engine_status_handler_t.
3059 (EngineColonLineHandler): Rename to engine_colon_line_handler_t.
3060 (EngineCommandHandler): Rename to engine_command_handler_t.
3062 * engine-gpgsm.c (gpgsm_export): Fix bug in last change.
3064 * Makefile.am (libgpgme_la_SOURCES): Remove recipient.c, add
3066 * gpgme.h (gpgme_recipients_t): Removed.
3067 (gpgme_recipients_new, gpgme_recipients_release,
3068 gpgme_recipients_add_name,
3069 gpgme_recipients_add_name_with_validity, gpgme_recipients_count,
3070 gpgme_recipients_enum_open, gpgme_recipients_enum_read,
3071 gpgme_recipients_enum_close): Removed.
3072 (gpgme_op_encrypt, gpgme_op_encrypt_start, gpgme_op_encrypt_sign,
3073 gpgme_op_encrypt_sign_start, gpgme_op_export_start,
3074 gpgme_op_export): Change second argument to gpgme_user_id_t.
3075 (gpgme_user_ids_release): New prototype.
3076 (gpgme_user_ids_append): Likewise.
3077 * ops.h (_gpgme_recipients_all_valid): Remove.
3078 (_gpgme_user_ids_all_valid): Add.
3079 * context.h (struct gpgme_recipients): Removed.
3080 * user-id.c: New file.
3081 * recipient.c: Removed file.
3082 * rungpg.c (append_args_from_recipients): Change last arg to
3083 gpgme_user_id_t. Reimplement.
3084 (gpg_encrypt): Change second arg to gpgme_user_id_t.
3085 (gpg_encrypt_sign): Likewise.
3086 (gpg_export): Likewise. Rewrite user ID list code.
3087 * engine.c (_gpgme_engine_op_encrypt): Change second arg to
3089 (_gpgme_engine_op_encrypt_sign): Likewise.
3090 (_gpgme_engine_op_export): Likewise.
3091 * engine.h (_gpgme_engine_op_encrypt, _gpgme_engine_op_encrypt_sign,
3092 _gpgme_engine_op_export): Likewise.
3093 * engine-gpgsm.c (set_recipients): Likewise. Rewrite loop code.
3094 (gpgsm_encrypt): Likewise.
3095 (gpgsm_export): Likewise.
3096 * engine-backend.h (struct engine_ops): Likewise for members
3097 ENCRYPT, ENCRYPT_SIGN and EXPORT.
3098 * export.c (export_start, gpgme_op_export_start, gpgme_op_export):
3100 * encrypt.c (encrypt_start): Likewise. Don't check for count of
3102 (gpgme_op_encrypt_start): Likewise.
3103 (gpgme_op_encrypt): Likewise.
3104 * encrypt-sign.c (encrypt_sign_start): Likewise.
3105 (gpgme_op_encrypt_sign): Likewise.
3106 (gpgme_op_encrypt_sign_start): Likewise.
3108 2003-05-27 Marcus Brinkmann <marcus@g10code.de>
3110 * gpgme.h (struct _gpgme_op_import_result): Add skipped_new_keys.
3111 * import.c (parse_import_res): Add skipped_new_keys parser.
3113 * op-support.c (_gpgme_parse_inv_userid): Add missing break
3115 * encrypt.c (gpgme_op_encrypt): Use gpgme_error_t instead of int.
3117 2003-05-27 Marcus Brinkmann <marcus@g10code.de>
3119 * encrypt.c (gpgme_op_encrypt_result): Use intermediate variable
3120 HOOK to avoid compiler warning. Don't ask, you don't want to know.
3121 (_gpgme_encrypt_status_handler): Likewise.
3122 (_gpgme_op_encrypt_init_result): Likewise.
3123 * decrypt.c (gpgme_op_decrypt_result): Likewise.
3124 (_gpgme_decrypt_status_handler): Likewise.
3125 (_gpgme_op_decrypt_init_result): Likewise.
3126 * verify.c (gpgme_op_verify_result): Likewise.
3127 (_gpgme_verify_status_handler): Likewise.
3128 (_gpgme_op_verify_init_result): Likewise.
3129 * edit.c (edit_status_handler): Likewise.
3130 (command_handler): Likewise.
3131 (edit_start): Likewise.
3132 * genkey.c (gpgme_op_genkey_result): Likewise.
3133 (genkey_status_handler): Likewise.
3134 (genkey_start): Likewise.
3135 * import.c (gpgme_op_import_result): Likewise.
3136 (import_status_handler): Likewise.
3137 (_gpgme_op_import_start): Likewise.
3138 * trustlist.c (gpgme_op_trustlist_next): Likewise.
3139 (_gpgme_op_trustlist_event_cb): Likewise.
3140 (gpgme_op_trustlist_start): Likewise.
3141 * keylist.c (gpgme_op_keylist_result): Likewise.
3142 (keylist_colon_handler): Likewise.
3143 (keylist_status_handler): Likewise.
3144 (_gpgme_op_keylist_event_cb): Likewise.
3145 (gpgme_op_keylist_start): Likewise.
3146 (gpgme_op_keylist_ext_start): Likewise.
3147 (gpgme_op_keylist_next): Likewise.
3148 * passphrase.c (_gpgme_passphrase_status_handler): Likewise.
3149 (_gpgme_passphrase_command_handler_internal): Likewise.
3150 * sign.c (gpgme_op_sign_result): Likewise.
3151 (_gpgme_sign_status_handler): Likewise.
3152 (_gpgme_op_sign_init_result): Likewise.
3154 * passphrase.c (_gpgme_passphrase_command_handler_internal): Fix
3155 access to pointer type.
3157 2003-05-26 Marcus Brinkmann <marcus@g10code.de>
3159 * engine.h (EngineCommandHandler): Change last argument to int fd.
3160 * gpgme.h (gpgme_passphrase_cb_t): Rewritten to take parts of the
3162 (gpgme_edit_cb_t): Change last argument to int fd.
3163 * ops.h (_gpgme_passphrase_command_handler_internal): New prototype.
3164 * passphrase.c: Include <assert.h>.
3165 (op_data_t): Rename userid_hint to uid_hint, remove last_pw_handle.
3166 (release_op_data): Check values before calling free.
3167 (_gpgme_passphrase_status_handler): Likewise.
3168 (_gpgme_passphrase_command_handler_internal): New function.
3169 (_gpgme_passphrase_command_handler): Rewritten.
3170 * edit.c (edit_status_handler): Pass -1 as fd argument.
3171 (command_handler): Update prototype. New variable processed. Use
3172 it to store return value of
3173 _gpgme_passphrase_command_handler_internal which is now used
3174 instead _gpgme_passphrase_command_handler. Use it also to check
3175 if we should call the user's edit function. Pass fd to user's
3177 * rungpg.c (struct gpg_object_s): Change type of cmd.cb_data to
3179 (gpg_release): Check value before calling free. Do not release
3181 (command_cb): Function removed.
3182 (command_handler): New function. Thus we don't use a data object
3183 for command handler stuff anymore, but handle it directly. This
3184 allows proper error reporting (cancel of passphrase requests, for
3185 example). Also all callbacks work via direct writes to the file
3186 descriptor (so that passphrases are not kept in insecure memory).
3187 (gpg_set_command_handler): Rewritten to use even more ugly hacks.
3188 (read_status): Check cmd.keyword before calling free. Install
3189 command_handler as the I/O callback handler with GPG as private
3192 * rungpg.c (gpg_new): Add --enable-progress-filter to gpg
3194 * decrypt-verify.c (_gpgme_op_decrypt_verify_start): Rename to
3195 decrypt_verify_start.
3196 (gpgme_op_decrypt_verify_start): Call decrypt_verify_start.
3197 (gpgme_op_decrypt_verify): Likewise.
3198 * verify.c (verify_status_handler): New function that also calls
3199 progress status handler.
3200 (_gpgme_op_verify_start): Set status handler to verify_status_handler.
3201 Rename to (verify_start).
3202 (gpgme_op_verify_start): Call verify_start.
3203 (gpgme_op_verify): Likewise.
3204 * encrypt.c (encrypt_status_handler): New function.
3205 (_gpgme_encrypt_sym_status_handler): Call progress status handler.
3206 Make static. Rename to encrypt_sym_status_handler.
3207 (encrypt_start): Set status handler to encrypt_sym_status_handler
3208 or encrypt_status_handler.
3209 * sign.c (sign_status_handler): New function.
3210 (sign_start): Set status handler to sign_status_handler.
3211 * decrypt.c (decrypt_status_handler): New function that also calls
3212 progress status handler.
3213 (decrypt_start): Set status handler to decrypt_status_handler.
3214 * encrypt-sign.c (encrypt_sign_status_handler): Likewise.
3215 * decrypt-verify.c (decrypt_verify_status_handler): Call
3216 _gpgme_progress_status_handler.
3218 * conversion.c (_gpgme_decode_c_string): Add missing break
3221 * recipient.c (gpgme_recipients_add_name_with_validity): Add one
3222 to buffer to allocate.
3224 2003-05-19 Marcus Brinkmann <marcus@g10code.de>
3226 * verify.c (parse_new_sig): Fix ERRSIG case.
3227 Submitted by Benjamin Lee <benjaminlee@users.sf.net>.
3229 2003-05-18 Marcus Brinkmann <marcus@g10code.de>
3231 * gpgme.h: The following types are renamed. The old name is kept
3232 as a deprecated typedef.
3233 (GpgmeCtx): Rename to gpgme_ctx_t.
3234 (GpgmeData): Rename to gpgme_data_t.
3235 (GpgmeRecipients): Rename to gpgme_recipients_t.
3236 (GpgmeError): Rename to gpgme_error_t.
3237 (GpgmeDataEncoding): Rename to gpgme_data_encoding_t.
3238 (GpgmePubKeyAlgo): Rename to gpgme_pubkey_algo_t.
3239 (GpgmeHashAlgo): Rename to gpgme_hash_algo_t.
3240 (GpgmeSigStat): Rename to gpgme_sig_stat_t.
3241 (GpgmeSigMode): Rename to gpgme_sig_mode_t.
3242 (GpgmeAttr): Rename to gpgme_attr_t.
3243 (GpgmeValidity): Rename to gpgme_validity_t.
3244 (GpgmeProtocol): Rename to gpgme_protocol_t.
3245 (GpgmeStatusCode): Rename to gpgme_status_code_t.
3246 (GpgmeEngineInfo): Rename to gpgme_engine_info_t.
3247 (GpgmeSubkey): Rename to gpgme_subkey_t.
3248 (GpgmeKeySig): Rename to gpgme_keysig_t.
3249 (GpgmeUserID): Rename to gpgme_user_id_t.
3250 (GpgmePassphraseCb): Rename to gpgme_passphrase_cb_t.
3251 (GpgmeProgressCb): Rename to gpgme_progress_cb_t.
3252 (GpgmeEditCb): Rename to gpgme_edit_cb_t.
3253 (GpgmeIOCb): Rename to gpgme_io_cb_t.
3254 (GpgmeRegisterIOCb): Rename to gpgme_register_io_cb_t.
3255 (GpgmeRemoveIOCb): Rename to gpgme_remove_io_cb_t.
3256 (GpgmeEventIO): Rename to gpgme_event_io_t.
3257 (GpgmeEventIOCb): Rename to gpgme_event_io_cb_t.
3258 (GpgmeIOCbs): Rename to gpgme_io_cbs.
3259 (gpgme_io_cbs_t): New type.
3260 (GpgmeDataReadCb): Rename to gpgme_data_read_cb_t.
3261 (GpgmeDataWriteCb): Rename to gpgme_data_write_cb_t.
3262 (GpgmeDataSeekCb): Rename to gpgme_data_seek_cb_t.
3263 (GpgmeDataReleaseCb): Rename to gpgme_data_release_cb_t.
3264 (GpgmeDataCbs): Rename to gpgme_data_cbs.
3265 (gpgme_data_cbs_t): New type.
3266 (GpgmeInvalidUserID): Rename to gpgme_invalid_user_id_t.
3267 (GpgmeEncryptResult): Rename to gpgme_encrypt_result_t.
3268 (GpgmeDecryptResult): Rename to gpgme_decrypt_result_t.
3269 (GpgmeNewSignature): Rename to gpgme_new_signature_t.
3270 (GpgmeSignResult): Rename to gpgme_sign_result_t.
3271 (GpgmeSigNotation): Rename to gpgme_sig_notation_t.
3272 (GpgmeSignature): Rename to gpgme_signature_t.
3273 (GpgmeVerifyResult): Rename to gpgme_verify_result_t.
3274 (GpgmeImportStatus): Rename to gpgme_import_status_t.
3275 (GpgmeImportResult): Rename to gpgme_import_result_t.
3276 (GpgmeGenKeyResult): Rename to gpgme_genkey_result_t.
3277 (GpgmeKeyListResult): Rename to gpgme_keylist_result_t.
3278 (GpgmeTrustItem): Rename to gpgme_trust_item_t.
3279 * gpgme.h (gpgme_deprecated_error_t): New type, swallowing macros
3280 GPGME_No_Recipients, GPGME_Invalid_Recipient and
3281 GPGME_No_Passphrase.
3282 * data.h (struct gpgme_data_s): Rename to struct gpgme_data.
3283 * context.h (struct gpgme_context_s): Rename to struct
3285 (struct gpgme_recipients_s): Rename to gpgme_recipients.
3287 2003-05-18 Marcus Brinkmann <marcus@g10code.de>
3289 * keylist.c (finish_key): Clear OPD->tmp_uid.
3291 2003-05-18 Marcus Brinkmann <marcus@g10code.de>
3293 * verify.c (_gpgme_verify_status_handler): Return GPGME_No_Data
3294 for NODATA status without signatures.
3296 2003-05-05 Marcus Brinkmann <marcus@g10code.de>
3298 * key.c (_gpgme_key_append_name): Use decoded string to parse user id.
3299 (_gpgme_key_add_sig): Likewise.
3301 2003-05-04 Marcus Brinkmann <marcus@g10code.de>
3303 * context.h (struct gpgme_context_s): Remove member op_info.
3305 * key.c (_gpgme_key_add_sig): Initialize SIG->uid.
3307 * gpgme.h (GpgmeError): Add deprecated values for
3308 GPGME_Invalid_Type and GPGME_Invalid_Mode.
3310 2003-04-30 Marcus Brinkmann <marcus@g10code.de>
3312 * gpgme.h (gpgme_get_op_info): Remove prototype.
3313 * ops.h (_gpgme_set_op_info,
3314 _gpgme_data_release_and_return_string, _gpgme_data_get_as_string,
3315 _gpgme_data_append, _gpgme_data_append_string,
3316 _gpgme_data_append_string_for_xml, _gpgme_data_append_for_xml,
3317 _gpgme_data_append_percentstring_for_xml): Likewise.
3318 (_gpgme_progress_status_handler): Change first arg to void *.
3319 * progress.c (_gpgme_progress_status_handler): Likewise.
3320 * conversion.c: Do not include <string.h>, <errno.h>, <ctype.h>,
3321 and <sys/types.h>, but <string.h>.
3322 (_gpgme_data_append): Remove function.
3323 (_gpgme_data_append_string): Likewise.
3324 (_gpgme_data_append_for_xml): Likewise.
3325 (_gpgme_data_append_string_for_xml): Likewise.
3326 (_gpgme_data_append_percentstring_for_xml): Likewise.
3327 * data-mem.c (_gpgme_data_get_as_string): Likewise.
3328 (_gpgme_data_release_and_return_string): Likewise.
3329 * gpgme.c (gpgme_get_op_info): Likewise.
3330 (_gpgme_set_op_info): Likewise.
3332 * gpgme.h (struct _gpgme_key): New structure.
3333 (GpgmeKey): Define using _gpgme_key.
3334 (struct _gpgme_subkey): New structure.
3335 (GpgmeSubKey): New type.
3336 (struct _gpgme_key_sig): New structure.
3337 (GpgmeKeySig): New type.
3338 (struct _gpgme_user_id): New structure.
3339 (GpgmeUserID): New type.
3340 (struct _gpgme_op_keylist_result): New structure.
3341 (GpgmeKeyListResult): New type.
3342 (gpgme_op_keylist_result): New function.
3343 (gpgme_key_get_as_xml): Remove prototype.
3344 * context.h (struct gpgme_context_s): Remove members tmp_key,
3345 tmp_uid, key_cond and key_queue.
3346 (struct key_queue_item_s): Remove structure.
3347 (struct user_id_s): Remove structure.
3348 (struct gpgme_recipients_s): Replace with simple
3350 * gpgme.c (gpgme_release): Do not release CTX->tmp_key.
3351 * ops.h (_gpgme_key_add_subkey, _gpgme_key_append_name,
3352 _gpgme_key_add_sig, _gpgme_trust_item_new): New prototypes.
3353 * rungpg.c (command_cb): Return GpgmeError instead int.
3354 New variable ERR. Use it to hold return value of cmd handler.
3355 (gpg_delete): Access fingerprint of key directly.
3356 (append_args_from_signers): Likewise.
3357 (gpg_edit): Likewise.
3358 (append_args_from_recipients): Use GpgmeUserID for recipient list.
3359 * engine-gpgsm.c: Do not include "key.h".
3360 (gpgsm_delete): Access fingerprint of key directly.
3361 (gpgsm_sign): Likewise.
3362 (set_recipients): Use GpgmeUserID for recipients. Invert invalid
3364 * key.h: File removed.
3365 * key.c: Completely reworked to use exposed GpgmeKey data types.
3366 * keylist.c: Likewise.
3367 * recipient.c: Completely reworked to use GpgmeUserID.
3369 2003-04-29 Marcus Brinkmann <marcus@g10code.de>
3371 * gpgme.h (gpgme_get_key): Remove force_update argument.
3372 * key-cache.c: File removed.
3373 * Makefile.am (libgpgme_la_SOURCES): Remove key-cache.c.
3374 * ops.h (_gpgme_key_cache_add, _gpgme_key_cache_get): Remove
3376 * keylist.c (_gpgme_op_keylist_event_cb): Don't call
3377 _gpgme_key_cache_add.
3378 (gpgme_get_key): New function.
3379 * verify.c (gpgme_get_sig_key): Remove last argument to
3380 gpgme_get_key invocation.
3382 * gpgme.h (struct _gpgme_trust_item): New structure.
3383 (GpgmeTrustItem): New type.
3384 (gpgme_trust_item_ref, gpgme_trust_item_unref): New prototypes.
3385 * context.h (struct trust_queue_item_s): Remove structure.
3386 (struct gpgme_context_s): Remove trust_queue member.
3387 * Makefile.am (libgpgme_la_SOURCES): Add trust-item.c.
3388 * trust-item.c: New file.
3389 * trustlist.c: Do not include <stdio.h> or <time.h>, but
3391 (struct trust_queue_item_s): Change to new type op_data_t.
3392 (trust_status_handler): Change first argument to void *.
3393 (trust_colon_handler): Likewise.
3394 (_gpgme_op_trustlist_event_cb): Use op_data_t type.
3395 (gpgme_op_trustlist_start): Use op_data_t and rework error
3397 (gpgme_op_trustlist_next): Use op_data_t.
3398 (gpgme_trust_item_release): Remove function.
3399 (gpgme_trust_item_get_string_attr): Likewise.
3400 (gpgme_trust_item_get_int_attr): Likewise.
3402 * verify.c (calc_sig_summary): Do not set GPGME_SIGSUM_SYS_ERROR
3405 2003-04-28 Marcus Brinkmann <marcus@g10code.de>
3407 * context.h: Remove OPDATA_VERIFY_COLLECTING.
3408 (struct gpgme_context_s): Remove member notation.
3409 * gpgme.h: Make enum for GPGME_KEYLIST_MODE_* values.
3411 * gpgme.h (struct _gpgme_sig_notation): New structure.
3412 (GpgmeSigNotation): New type.
3413 (struct _gpgme_signature): New structure.
3414 (GpgmeSignature): New type.
3415 (struct _gpgme_op_verify_result): New structure.
3416 (GpgmeVerifyResult): New type.
3417 (gpgme_op_verify_result): New prototype.
3418 (gpgme_get_notation): Remove prototype.
3419 * ops.h (_gpgme_op_verify_init_result): New prototype.
3420 (_gpgme_verify_status_handler): Change first argument to void *.
3421 * util.h (_gpgme_decode_percent_string, _gpgme_map_gnupg_error):
3423 * conversion.c (_gpgme_decode_percent_string): New function.
3424 (gnupg_errors): New static global.
3425 (_gpgme_map_gnupg_error): New function.
3426 * gpgme.c (gpgme_release): Don't release CTX->notation.
3427 (gpgme_get_notation): Remove function.
3428 * decrypt-verify.c (_gpgme_op_decrypt_verify_start): Call
3429 _gpgme_op_verify_init_result.
3430 * verify.c: Do not include <stdio.h>, <assert.h> and "key.h", but
3431 do include "gpgme.h".
3432 (struct verify_result): Replace with ...
3433 (op_data_t): ... this type.
3434 (release_verify_result): Remove function.
3435 (release_op_data): New function.
3436 (is_token): Remove function.
3437 (skip_token): Remove function.
3438 (copy_token): Remove function.
3439 (gpgme_op_verify_result): New function.
3440 (calc_sig_summary): Rewritten.
3441 (finish_sig): Remove function.
3442 (parse_new_sig): New function.
3443 (parse_valid_sig): New function.
3444 (parse_notation): New function.
3445 (parse_trust): New function.
3446 (parse_error): New function.
3447 (_gpgme_verify_status_handler): Rewritten. Change first argument
3449 (_gpgme_op_verify_start): Rework error handling. Call