2010-09-01 Marcus Brinkmann <marcus@g10code.de>
[gpgme.git] / src / ChangeLog
index 93108af5bf6a1c301e77c738168d524f89ae6a7c..814660b6e0d8d117797ce4b84c5420427082efce 100644 (file)
@@ -1,5 +1,788 @@
+2010-09-01  Marcus Brinkmann  <marcus@g10code.de>
+
+       * w32-io.c: Revert change from 2009-06-18, as it created a race
+       condition.
+
+2010-08-18  Marcus Brinkmann  <marcus@g10code.de>
+
+       * gpgme.def: Add gpgme_err_code_from_syserror and gpgme_err_set_errno.
+       * libgpgme.vers: Likewise.
+       * gpgme.h.in (gpgme_error_from_errno): Fix return type to
+       gpgme_error_t.
+       (gpgme_err_code_from_syserror, gpgme_err_set_errno): New prototype.
+       (gpgme_error_from_syserror): New inline function (why are
+       gpgme_err_make_from_errno and gpgme_error_from_errno not inline
+       functions?).
+       * error.c (gpgme_error_from_errno): Fix return type to gpgme_error_t.
+       (gpgme_err_set_errno, gpgme_err_code_from_syserror): New functions.
+
+2010-08-03  Marcus Brinkmann  <marcus@g10code.de>
+
+       * gpgme-tool.c (result_encrypt_to_xml, result_sign_to_xml)
+       (result_verify_to_xml, result_import_to_xml)
+       (result_genkey_to_xml): Check vigorously for null pointers.
+
+       * w32-io.c (GPGCEDEV_IOCTL_ASSIGN_RVID): New macro.
+       (_gpgme_io_spawn): Use ASSIGN_RVID.
+
+2010-06-11  Marcus Brinkmann  <marcus@g10code.de>
+
+       * w32-io.c (_gpgme_io_spawn): Remove debug printf.
+
+2010-06-10  Marcus Brinkmann  <marcus@g10code.de>
+
+       * gpgme-tool.c (gpgme_server): Use special hack for Windows CE to
+       get at stdin and stdout.
+
+       * engine-gpgsm.c (gpgsm_new): Translate returned achild_fds back
+       to child_fds.
+
+       * debug.h (TRACE_SUC6): New macro.
+       * w32-io.c (MAX_SLAFD): New macro.
+       (fd_table): New static variable.
+       (new_fd, release_fd): New functions.
+       (fd_to_handle, handle_to_fd, handle_to_socket): Remove macros.
+       (MAX_READERS, MAX_WRITERS): Increase to 64.
+       (notify_table): Increase to MAX_SLAFD.
+       (struct reader_context_s, struct writer_context_s): Add member
+       file_sock.
+       (reader, writer): Use file_hd vs file_sock to decide if socket
+       operations to use.  Remove auto-detect mode.
+       (create_reader, create_writer): Set file_sock.  Unblock pending
+       thread only if this is a pipe fd.
+       (_gpgme_io_pipe): Allocate fds from table and return slot indices
+       instead of windows handles.  This allows to properly handle RVIDs.
+       (_gpgme_io_close): Handle dup'ed file descriptors.
+       (build_commandline) [HAVE_W32_SYSTEM]: Use RVID from fd table now.
+       (_gpgme_io_spawn): Use fd table now.
+       (_gpgme_io_fd2str): Use RVID from fd table now.
+       (_gpgme_io_dup): Implement using fd table.
+       (_gpgme_io_socket): Allocate fds from table.
+       (_gpgme_io_connect): Use fd from table.
+
+       * w32-glib-io.c (find_channel): Check that the slot is used.
+
+2010-06-09  Marcus Brinkmann  <marcus@g10code.de>
+
+       * w32-io.c [HAVE_W32CE_SYSTEM]: Include assuan.h and winioctl.h.
+       (GPGCEDEV_IOCTL_UNBLOCK) [HAVE_W32CE_SYSTEM]: Define.
+       (set_synchronize) [HAVE_W32CE_SYSTEM]: Stub it out.
+       (is_socket): Allow to return -1 for auto-detect (old behaviour).
+       (is_socket) [HAVE_W32CE_SYSTEM]: Return -1.
+       (reader): Handle auto-detect case.  Handle ctx->stop_me before
+       checking for EOF.
+       (destroy_reader) [HAVE_W32CE_SYSTEM]: Unblock a pending reader.
+       (writer): Handle auto-detect case.  Handle ctx->stop_me with
+       ERROR_BUSY.
+       (destroy_writer) [HAVE_W32CE_SYSTEM]: Unblock a pending writer.
+       (_gpgme_io_pipe) [HAVE_W32CE_SYSTEM]: Implement in terms of a
+       half-pipe.
+       (build_commandline) [HAVE_W32CE_SYSTEM]: New function.
+       (_gpgme_io_spawn) [HAVE_W32CE_SYSTEM]: Implement it differently
+       for this platform.
+       (_gpgme_io_fd2str) [HAVE_W32CE_SYSTEM]: Implement it for RVIDs.
+       (_gpgme_io_dup) [HAVE_W32CE_SYSTEM]: Stub it out.
+
+       * gpgme-tool.c (result_add_timestamp): Add missing NULL argument.
+       (result_sign_to_xml): Protect against NULL fingerprint.
+       (struct server): New members input_fd, input_filename,
+       input_stream output_fd, output_filename, output_stream,
+       message_filename, message_stream.
+       (server_reset_fds): Deallocate those.
+       (server_parse_fd): New function.
+       (server_data_obj): Take optional filename argument and direction
+       argument.  Also take new argument to return a filestream that
+       needs to be closed after destroying the data object.
+       Change all callers, too.
+       (input_notify, output_notify): Removed.
+       (cmd_input, cmd_output): New functions.
+       (gpgme_server): Do not register input and output notifier.
+       (register_commands): Use cmd_input and cmd_output.
+       (cmd_message): Rewritten to use server_parse_fd.
+       (cmd_delete, cmd_keylist): Fix inverted option check.
+       (main) [HAVE_W32CE_SYSTEM]: Sleep a bit to work around bug in ssh.
+
+       * genkey.c (gpgme_op_genkey): Return err with TRACE_ERR.
+
+2010-05-12  Marcus Brinkmann  <marcus@g10code.de>
+
+       * conversion.c (_gpgme_timegm) [HAVE_W32_SYSTEM]: New static
+       function.
+       (_gpgme_parse_timestamp) [HAVE_W32_SYSTEM]: Use it.
+
+       * gpgme-tool.c (main): Protect call to setlocale with
+       HAVE_SETLOCALE.
+
+       * Makefile.am (system_components): Remove custom cppflags from
+       RCCOMPILE (because gpg-error adds -idirafter that makes RC bail.
+       [HAVE_W32CE_SYSTEM]: Add w32-ce.h and w32-ce.c, clear
+       libexec_PROGRAMS.
+       * w32-ce.h, w32-ce.c: New files.
+
+       * priv-io.h: Include <sys/types.h>
+       * util.h: Likewise.
+
+2010-05-11  Marcus Brinkmann  <marcus@g10code.de>
+
+       * w32-util.c: Include ath.h
+       (HAVE_ALLOW_SET_FOREGROUND_WINDOW) [!HAVE_W32CE_SYSTEM]: Define
+       it.
+       (RTLD_LAZY, dlopen, dlsym,
+       dlclose) [!HAVE_ALLOW_SET_FORGROUND_WINDOW]: Don't define anymore.
+       (_gpgme_allow_set_foreground_window) [!HAVE_ALLOW_SET_FOREGROUND_WINDOW]:
+       Make it a stub.
+       (read_w32_registry_string): Use FooA variants of Windows functions
+       instead of Foo (which dispatches depending on UNICODE).
+       [!HAVE_W32CE_SYSTEM]: Don't check environment.
+       (w32_shgetfolderpath): Remove.
+       (find_program_at_standard_place): Call
+       SHGetSpecialFolderPath (which is available on all Windows systems
+       and also Windows CE).
+       (mkstemp): Use ath_self instead of getpid.
+       (_gpgme_mkstemp): Use GetTempPathA instead of GetTempPath.
+
+       * gpgme.h.in: Use _WIN32 instead of _MSC_VER.  Include time.h for
+       time_t.
+
+2010-05-07  Marcus Brinkmann  <marcus@g10code.de>
+
+       * engine-g13.c, gpgme.c, engine-gpgsm.c, engine-gpg.c,
+       op-support.c, engine-assuan.c, gpgme-tool.c: Include <locale.h>
+       only if available with HAVE_LOCALE_H and conditionalize use of
+       LC_CTYPE on its definition.
+       * engine-gpgconf.c: Do not include <locale.h>.
+
+       * engine-gpgsm.c (gpgsm_new, start): Cast between int and
+       assuan_fd_t.
+       * assuan-support.c (my_pipe, my_close, my_read, my_write): Likewise.
+       * gpgme-tool.c (server_data_obj, server_reset_fds, gpgme_server),
+       (my_recvmsg, my_sendmsg, my_spawn): Likewise.
+       * engine-assuan.c (start): Likewise.
+       * engine-g13.c (start): Likewise.
+
+2010-05-06  Marcus Brinkmann  <marcus@g10code.de>
+
+       * w32-glib-io.c, w32-io.c, w32-qt-io.cpp, w32-sema.c, w32-util.c:
+       Do not include <signal.h>.
+
+       * sign.c, data-user.c, conversion.c, debug.c, verify.c, data.c,
+       decrypt.c, delete.c, assuan-support.c, import.c, engine-gpgsm.c,
+       data-mem.c, op-support.c, w32-io.c, w32-util.c, data-compat.c: Use
+       gpg_error_from_syserror instead gpg_error_from_errno, and use
+       gpg_err_set_errno to set error number.
+       * setenv.c: Include <gpg-error.h> and define __set_errno to use
+       gpg_err_set_errno.
+       * gpgme-tool.c (ARGP_ERR_UNKNOWN): Define to EDEADLOCK (which is
+       mapped in Windows CE) instead of E2BIG (which is not).
+       (gt_import_keys): Initialize err.
+
+2010-04-19  Marcus Brinkmann  <marcus@g10code.de>
+
+       * assuan-support.c (my_spawn): Cast to avoid warning.
+       * engine-g13.c (g13_new): Make ARGV array of pointer to const
+       char.
+       (g13_assuan_simple_command) [!USE_DESCRIPTOR_FUNCTION]: Don't define.
+       * ops.h (_gpgme_key_append_name): Same in prototype.
+       * key.c (_gpgme_key_append_name): Make SRC argument pointer to
+       const char.
+       * posix-util.c (_gpgme_get_uiserver_socket_path): Make HOMEDIR
+       const.
+       * vfs-mount.c (gpgme_op_vfs_transact_start): Never define this
+       potentially useful but currently unused function.
+       * vfs-create.c (gpgme_op_vfs_transact_start): Likewise.
+
+2010-04-16  Werner Koch  <wk@g10code.com>
+
+       * w32-io.c (is_socket): New.
+       (reader, writer): Use it to figure out the API to use.
+
+2010-03-15  Werner Koch  <wk@g10code.com>
+
+       * gpgme.h.in: Add autoconf template to set generated file to
+       read-only in an emacs buffer.
+
+2010-03-12  Werner Koch  <wk@g10code.com>
+
+       * gpgme.h.in (GPGME_STATUS_SUCCESS): Use the right file for the
+       change; see below.
+
+       * passwd.c (op_data_t): New.
+       (passwd_start): Setup OPD.
+       (passwd_status_handler): Return GPG_ERR_NOT_SUPPORTED if needed.
+       * context.h (OPDATA_PASSWD): New.
+       * gpgme.h (GPGME_STATUS_SUCCESS): New.
+
+2010-03-09  Werner Koch  <wk@g10code.com>
+
+       * engine-gpgsm.c (gpgsm_keylist): Try to start the agent.
+
+2010-02-17  Werner Koch  <wk@g10code.com>
+
+       * posix-io.c (notify_table): Change implementation.
+       (notify_table_item_t, notify_table_size, notify_table_lock): New.
+       (_gpgme_io_close, _gpgme_io_set_close_notify): Adjust for new
+       implementation.
+
+2010-02-16  Werner Koch  <wk@g10code.com>
+
+       * gpgme-tool.c (spacep, has_option, skip_options): New.
+       (cmd_export): Implement option --minimal.
+
+       * gpgme.h.in (GPGME_EXPORT_MODE_MINIMAL): New.
+       * export.c (export_start, export_ext_start): Implement it.
+       * engine-gpg.c (export_common): Ditto.
+
+2010-01-25  Werner Koch  <wk@g10code.com>
+
+       * w32-io.c (_gpgme_io_connect): Fix return code check to make it work.
+
+       * version.c (do_subsystem_inits): Remove superfluous second
+       WSAStartup.
+
+2010-01-22  Werner Koch  <wk@g10code.com>
+
+       * w32-io.c (writer): Try to use send first.
+       (reader): Try to use recv first.
+
+2010-01-08  Werner Koch  <wk@g10code.com>
+
+       * engine-gpg.c (gpg_passwd): New.
+       (_gpgme_engine_ops_gpg): Register.
+       * passwd.c (parse_error): New.
+       (passwd_status_handler): Use it.
+
+2010-01-07  Marcus Brinkmann  <marcus@g10code.de>
+
+       * gpgme-tool.c (result_xml_write_cb_t, struct result_xml_state):
+       New types.
+       (MAX_TAGS): New macro.
+       (result_init, result_xml_indent, result_xml_tag_start)
+       (result_xml_tag_data, result_xml_tag_end, result_add_error)
+       (result_add_pubkey_algo, result_add_hash_algo, result_add_keyid)
+       (result_add_fpr, result_add_timestamp, result_add_sig_mode)
+       (result_add_value, result_add_string, result_encrypt_to_xml)
+       (result_decrypt_to_xml, result_sign_to_xml)
+       (result_verify_to_xml, result_import_to_xml)
+       (result_genkey_to_xml, result_keylist_to_xml)
+       (result_vfs_mount_to_xml): New functions.
+       (gt_result): Rewritten.
+
+2010-01-05  Werner Koch  <wk@g10code.com>
+
+       * gpgme-tool.c (gt_passwd, cmd_passwd): New.
+       (register_commands): Register.
+
+       * gpgme.h.in (gpgme_op_passwd_start, gpgme_op_passwd): New.
+       * libgpgme.vers, gpgme.def: Add new functions.
+       * passwd.c: New.
+       * Makefile.am (main_sources): Add passwd.c
+       * engine.c, engine.h (_gpgme_engine_op_passwd): New.
+       * engine-backend.h (struct engine_ops): Add PASSWD.
+       * engine-gpgsm.c (gpgsm_passwd): New.
+       (_gpgme_engine_ops_gpgsm): Register.
+       (gpgsm_reset): Reset only if we have a conenction.
+
+       * gpgme.h.in (GPGME_PK_ECDSA, GPGME_PK_ECDH): New.
+       * gpgme.c (gpgme_pubkey_algo_name): Add them.
+
+2009-12-22  Marcus Brinkmann  <marcus@g10code.de>
+
+       * debug.c: Test for TLS, not __GNUC__
+
+2009-12-15  Marcus Brinkmann  <marcus@g10code.de>
+
+       * assuan-support.c (my_spawn): Calloc, not malloc, the fd_items.
+
+2009-12-10  Werner Koch  <wk@g10code.com>
+
+       * debug.c (debug_init): Test on sgid process.
+
+2009-12-08  Marcus Brinkmann  <marcus@g10code.de>
+
+       * Makefile.am (LTRCCOMPILE): Refactor with ...
+       (RCCOMPILE): ... this new macro.
+       (SUFFIXES): Add .lo.
+       (gpgme_res_ldflag): Removed.
+       (gpgme_res): Use libtool object file name here.
+       (libgpgme_la_LDFLAGS): Remove gpgme_res_ldflag usage.
+       (libgpgme_la_LIBADD): Add gpgme_res.
+
+       * ath.c (ath_self) [HAVE_W32_SYSTEM]: Fix typo.
+
+2009-12-02  Werner Koch  <wk@g10code.com>
+
+       * gpgconf.c (gpgme_conf_arg_release): No return in a function
+       returning void.  Reported by Wyllys Ingersoll.
+
+2009-12-01  Werner Koch  <wk@g10code.com>
+
+       * gpgme-tool.c (cmd_getauditlog): Add flag --html.
+       (hlp_getauditlog): New.
+
+       * gpgme-tool.c (GT_GCC_A_SENTINEL, GT_GCC_A_PRINTF): New.
+       (gt_write_status): Use sentinel.
+       (argp_error, log_error): Use printf attribute.
+       (argp_parse): Remove extra argument to argp_error.
+       (_gt_progress_cb, gt_get_engine_info, gt_get_keylist_mode)
+       (gt_result): Add NULL arg.
+
+2009-11-26  Marcus Brinkmann  <marcus@g10code.de>
+
+       * opassuan.c (opassuan_start): Allocate result structure before
+       beginning operation.
+
+2009-11-25  Marcus Brinkmann  <marcus@g10code.de>
+
+       * gpgme-tool.c (gpgme_server): Use assuan_fd_t and assuan_fdopen
+       on fds.
+
+2009-11-13    <wk@g10code.com>
+
+       * sign.c (_gpgme_sign_status_handler): Handle SIG_CREATED_SEEN.
+       * engine-uiserver.c (uiserver_sign): Make sending SENDER optional.
+
+2009-11-10  Marcus Brinkmann  <marcus@g10code.de>
+
+       * op-support.c (_gpgme_op_reset): Instead of last change, only set
+       sub protocol if it is not the default.
+
+2009-11-10  Werner Koch  <wk@g10code.com>
+
+       * op-support.c (_gpgme_op_reset): Ignore GPG_ERR_NOT_IMPLEMENTED
+       while setting the sub protocol.
+
+       * engine-uiserver.c (uiserver_new): Pass fdpassing flag to
+       assuan_socket_connect.
+       (set_recipients): Replace fingerprint by user id.
+
+       * engine-gpgsm.c (set_recipients): Fix non-terminating loop in
+       case of a missing key.
+
+2009-11-10  Marcus Brinkmann  <marcus@g10code.de>
+
+       * gpgme.c (gpgme_new): Set default sub protocol.
+       * gpgme-tool.c: Implement get sub protocol.
+
+       * gpgme.h.in (gpgme_get_sub_protocol): Add prototype.
+       * gpgme.def, libgpgme.vers: Add gpgme_get_sub_protocol.
+       * context.h (struct gpgme_context): New member sub_protocol.
+       * gpgme.c (gpgme_set_sub_protocol): Set CTX->sub_protocol.
+       (gpgme_get_sub_protocol): New function.
+       * op-support.c (_gpgme_op_reset): Set sub protocol.
+
+       * Makefile.am (uiserver_components): New variable.
+       (main_sources): Add it.
+       * ops.h, key.c (_gpgme_key_append_name): Take CONVERT argument,
+       implement it.  Adjust callers.
+       (gpgme_key_from_uid): New function.
+       * gpgme.h.in (gpgme_protocol_t): Add GPGME_PROTOCOL_DEFAULT.
+       (gpgme_encrypt_flags_t): Add GPGME_ENCRYPT_PREPARE,
+       GPGME_ENCRYPT_EXPECT_SIGN.
+       (gpgme_set_sub_protocol, gpgme_key_from_uid): New functions.
+       * libgpgme.vers, gpgme.def: Add new functions.
+       * gpgme.c (gpgme_set_protocol): Add UIServer protocol.
+       (gpgme_set_sub_protocol): New function.
+       (gpgme_get_protocol_name): Add UIServer and default protocol.
+       * assuan-support.c: Return correct error values, implement
+       socketpair for POSIX.
+       * priv-io.h, posix-io.c, w32-io.c, w32-glib-io.c,
+       w32-qt-io.cpp (_gpgme_io_spawn): Add ATFORK and ATFORKVALUE
+       arguments.  Implement it for POSIX.  Adjust all callers.
+       * engine.h, engine-backend.h (_gpgme_engine_set_protocol)
+       (_gpgme_engine_op_decrypt_verify): New prototypes.  Adjust all
+       users.
+       * engine.c (engine_ops, gpgme_get_engine_info): Add UIServer
+       engine.
+       (_gpgme_engine_set_protocol, _gpgme_engine_op_decrypt_verify): New
+       function.
+       * decrypt-verify.c (decrypt_verify_start): Call
+       _gpgme_engine_op_decrypt_verify.
+       * util.h, posix-util.c,
+       w32-util.c (_gpgme_get_uiserver_socket_path): New function.
+       * engine-gpgsm.c (gpgsm_set_fd): Fix _gpgme_io_pipe invocation.
+       * gpgme-tool.c: Some support for UIServer protocol.
+       * engine-uiserver.c: New file.
+
+2009-11-09  Marcus Brinkmann  <marcus@g10code.de>
+
+       * engine-gpgsm.c (gpgsm_new): Close server side FDs.
+
+2009-11-06  Marcus Brinkmann  <marcus@g10code.de>
+
+       * gpgme-tool.c (struct gpgme_tool): New members write_data and
+       write_data_hook.
+       (gt_write_data): New function.
+       (gt_result): Output vfs_mount result.
+       (server_write_data): New function.
+       (gpgme_server): Initialize write_data members.
+
+2009-11-05  Marcus Brinkmann  <marcus@g10code.de>
+
+       * engine-g13.c (struct engine_g13): Remove members RESULT_CB and
+       RESULT_CB_VALUE.
+       (g13_assuan_simple_command, status_handler): Don't use those anymore.
+       (g13_transact): Remove them from argument list, too.
+       * vfs-mount.c (_gpgme_vfs_mount_status_handler): New function.
+       (_gpgme_op_vfs_mount): Pass it to transact.
+
+       * engine-assuan.c (llass_new): Update use of assuan_socket_connect.
+       * engine-gpgsm.c (gpgsm_new): Update use of assuan_pipe_connect.
+       * engine-g13.c (g13_new): Likewise.
+
+       * priv-io.h (IOSPAWN_FLAG_NOCLOSE): New flag.
+       * w32-io.c (_gpgme_io_spawn): Implement this flag.
+       * posix-io.c (_gpgme_io_spawn): Likewise.
+       * w32-glib-io.c (_gpgme_io_spawn): Likewise.
+       * assuan-support.c (my_spawn): Set this flag.
+
+       * decrypt.c (gpgme_op_decrypt_start): Fix use of debug macro.
+       * decrypt-verify.c (gpgme_op_decrypt_verify_start): Likewise.
+       * delete.c (gpgme_op_delete_start): Likewise.
+       * edit.c (gpgme_op_edit_start, gpgme_op_card_edit_start):
+       Likewise.
+       * encrypt.c (gpgme_op_encrypt_start): Likewise.
+       * encrypt-sign.c (gpgme_op_encrypt_sign_start): Likewise.
+       * export.c (gpgme_op_export_start, gpgme_op_export_ext_start)
+       (gpgme_op_export_keys_start, gpgme_op_export_keys): Likewise.
+       * genkey.c (gpgme_op_genkey_start): Likewise.
+       * getauditlog.c (gpgme_op_getauditlog_start): Likewise.
+       * import.c (gpgme_op_import_start, gpgme_op_import_keys_start):
+       Likewise.
+       * opassuan.c (gpgme_op_assuan_transact_start): Likewise.
+       * sign.c (gpgme_op_sign_start): Likewise.
+       * verify.c (gpgme_op_verify_start): Likewise.
+       * vfs-create.c (gpgme_op_vfs_create): Likewise.
+       * vfs-mount.c (gpgme_op_vfs_mount): Likewise.
+
+2009-11-04  Marcus Brinkmann  <marcus@g10code.de>
+
+       * ath.h (ath_self): New prototype.  Include <stdint.h>
+       * ath.c, ath-pth.c, ath-pthread.c (ath_self): New function.
+       * debug.h: Rewrite most macros to beautify debug output.
+       (_gpgme_debug_buffer): Remove tagname and tag argument.
+       (_gpgme_debug_frame_begin, _gpgme_debug_frame_end): New prototypes.
+       * debug.c: Include <time.h>.  Don't include assuan.h.
+       (frame_nr, FRAME_NR): New thread-specific variable and macro.
+       (debug_init): Do not initialize assuan.  Call _gpgme_debug after
+       initialization instead using printf directly.
+       (_gpgme_debug): Do not call debug_init (we now ensure proper
+       initialization by user).  Add timestamp and thread/process ID.
+       (_gpgme_debug_buffer): Do not take tagname and tag argument.
+       (_gpgme_debug_frame_begin, _gpgme_debug_frame_end): New functions.
+       * version.c (gpgme_check_version_internal, gpgme_check_version):
+       Fix debug string.  Do not initialize assuan.
+       * posix-io.c (get_max_fds): Use 0 not NULL (nicer debug output).
+
+2009-11-04  Werner Koch  <wk@g10code.com>
+
+       * gpgme-tool.c (register_commands): Add HELP feature.
+
+2009-11-03  Werner Koch  <wk@g10code.com>
+
+       * gpgme.h.in (GPGME_PROTOCOL_UISERVER): New.
+
+2009-11-03  Marcus Brinkmann  <marcus@g10code.de>
+
+       * Makefile.am (main_sources): Change g13.c to vfs-mount.c.  Add
+       vfs-create.c
+       * vfs-create.c: New file.
+       * g13.c: Renamed to ...
+       * vfs-mount.c: ... this new file.
+       * gpgme.h.in (gpgme_op_vfs_create): New prototype.
+       * gpgme.def, libgpgme.vers: Add gpgme_op_vfs_create.
+       * gpgme-tool.c (gt_vfs_create, cmd_vfs_create): New functions.
+       (register_commands): Add VFS_CREATE and CREAET.
+
+2009-11-02  Marcus Brinkmann  <marcus@g10code.de>
+
+       * debug.h (_gpgme_debug_buffer): Make TAG argument const const.
+       * debug.c (_gpgme_debug_buffer): Likewise.
+       * gpgme-tool.c (input_notify, output_notify): Adjust type to new
+       assuan interface.
+       * decrypt.c (gpgme_op_decrypt_result): Remove unused variable.
+       * opassuan.c (gpgme_op_assuan_transact): Fix return value.
+
+2009-10-30  Marcus Brinkmann  <marcus@g10code.de>
+
+       * Makefile.am (noinst_PROGRAMS): New target gpgme-tool.
+       (gpgme_tool_LDADD): New variable.
+       * gpgme-tool.c: New file.
+       * ops.h (_gpgme_sig_notation_clearm _gpgme_signers_clear): New
+       prototypes.
+       * gpgme.c (gpgme_set_protocol): Allow GPGME_PROTOCOL_GPGCONF (when
+       had that gone missing?).
+       (_gpgme_sig_notation_clear): New function without debug output.
+       (gpgme_release): Call it and _gpgme_signers_clear.
+       * signers.c (_gpgme_signers_clear): New function without debug output.
+       * g13.c (gpgme_op_vfs_mount): Add debug output.
+       * assuan-support.c (my_spawn): Allow fd_child_list to be NULL.
+       * conversion.c (_gpgme_encode_percent_string): Fix infinite loop.
+       * debug.h: Put tag in front of debug lines, should make for nicer
+       output.
+       * engine-assuan.c (llass_new): Use our new system hooks for libassuan.
+       * engine-g13.c (g13_new): Remove redundant assuan context allocation.
+       * version.c (gpgme_check_version_internal): Delay debug output
+       until after gpgme_check_version was called.
+
+2009-10-28  Marcus Brinkmann  <marcus@g10code.de>
+
+       * signers.c, encrypt-sign.c, encrypt.c, delete.c, keylist.c,
+       edit.c, import.c, export.c: Fix last change in debug output.
+
+2009-10-27  Marcus Brinkmann  <marcus@g10code.de>
+
+       * edit.c (gpgme_op_edit_start, gpgme_op_edit)
+       (gpgme_op_card_edit_start, gpgme_op_card_edit): Add debug output.
+       * encrypt-sign.c (gpgme_op_encrypt_sign_start)
+       (gpgme_op_encrypt_sign): Likewise.
+       * encrypt.c (gpgme_op_encrypt_start, gpgme_op_encrypt)
+       (gpgme_op_encrypt_result): Likewise.
+       * export.c (gpgme_op_export_start, gpgme_op_export)
+       (gpgme_op_export_ext_start, gpgme_op_export_ext)
+       (gpgme_op_export_keys_start, gpgme_op_export_keys): Likewise.
+       * genkey.c (gpgme_op_genkey_start, gpgme_op_genkey)
+       (gpgme_op_genkey_result): Likewise.
+       * getauditlog.c (gpgme_op_getauditlog_start)
+       (gpgme_op_getauditlog): Likewise.
+       * import.c (gpgme_op_import_result, gpgme_op_import_start)
+       (gpgme_op_import): Likewise.
+       * keylist.c (gpgme_op_keylist_result, keylist_colon_handler)
+       (gpgme_op_keylist_start, gpgme_op_keylist_ext_start)
+       (gpgme_op_keylist_next, gpgme_op_keylist_end, gpgme_get_key): Likewise.
+       * opassuan.c (gpgme_op_assuan_transact_start)
+       (gpgme_op_assuan_transact_ext, gpgme_op_assuan_result)
+       (gpgme_op_assuan_transact): Likewise.
+       * signers.c (gpgme_signers_add, gpgme_signers_clear): Likewise.
+       * trustlist.c (gpgme_op_trustlist_start)
+       (gpgme_op_trustlist_next, gpgme_op_trustlist_end): Likewise.
+       * verify.c (gpgme_op_verify_start, gpgme_op_verify)
+       (gpgme_op_verify_result): Likewise.
+
+2009-10-26  Marcus Brinkmann  <marcus@g10code.de>
+
+       * gpgme.h.in (struct gpgme_io_event_done_data)
+       (gpgme_io_event_done_data_t): New types.
+       (struct _gpgme_op_assuan_result): Deprecate the err member.
+       (gpgme_op_assuan_result): Deprecate (for now).
+       (gpgme_op_assuan_transact_ext): New prototype.
+       (gpgme_op_assuan_transact): Deprecate.
+       (struct _gpgme_op_g13_result): Replace with ...
+       (struct _gpgme_op_vfs_mount_result): ... this.
+       (gpgme_op_g13_mount): Replace with ...
+       (gpgme_op_vfs_mount): ... this.
+       * gpgme.def (gpgme_op_assuan_transact_ext, gpgme_wait_ext)
+       (gpgme_op_vfs_mount_result, gpgme_op_vfs_mount): New.
+       (gpgme_op_g13_mount): Remove.
+       * libgpgme.vers: Likewise.
+       * engine-backend.h (struct engine_ops): Remove RESULT_CB and
+       RESULT_CB_VALUE args in opassuan_transact member.  Add CANCEL_OP
+       member.
+       * ops.h (_gpgme_cancel_with_err, _gpgme_wait_on_condition): Add
+       OP_ERR argument.
+       (_gpgme_wait_one_ext): New prototype.
+       * context.h (ctx_op_data_id_t): Add OPDATA_VFS_MOUNT.
+       * engine-g13.c (g13_cancel_op): New function.
+       (parse_status): Remove declaration.
+       (g13_assuan_simple_command): Do nothing with status lines for now.
+       (status_handler): Update opaque value access.
+       (_gpgme_engine_ops_g13): Add new cancel_op member.
+       * gpgme.c (_gpgme_cancel_with_err): Add new parameter OP_ERR.
+       Handle operational errors.
+       (gpgme_cancel, gpgme_io_read, gpgme_io_write): Add debug output.
+       * data.c (_gpgme_data_inbound_handler)
+       (_gpgme_data_outbound_handler): Adjust opaque value access.
+       * engine-gpg.c (command_handler, status_handler)
+       (colon_line_handler): Likewise.
+       * engine-gpgsm.c (status_handler): Likewise.
+       * engine-gpg.c (_gpgme_engine_ops_gpg): Add cancel_op member.
+       * engine-gpgsm.c (_gpgme_engine_ops_gpgsm): Likewise.
+       * g13.c: Rewritten (and will be rewritten again).
+       * engine.h (_gpgme_engine_op_assuan_transact): Remove result_cb
+       and result_cb_value parameters from prototype.
+       (_gpgme_engine_cancel_op): New prototype.
+       * engine.c (engine_ops) [! ENABLE_ASSUAN]: Add missing comma.
+       (_gpgme_engine_op_assuan_transact): Remove result_cb and
+       result_cb_value parameter.
+       (_gpgme_engine_cancel_op): New function.
+       * wait.h (_gpgme_run_io_cb): Add new argument OP_ERR.
+       (struct io_cb_data): New struct to pass opaque data and get a
+       op_err return value.  Needed because we can't modify I/O callback
+       handler signature because it is exposed to the user.
+       * wait.c (_gpgme_run_io_cb): Add OP_ERR parameter.  Handle
+       operational errors.
+       * wait-user.c (_gpgme_user_io_cb_handler): Handle operational
+       errors.
+       * wait-private.c (_gpgme_wait_on_condition): New argument to
+       retrieve the operational result.  Handle operational errors in
+       session based protocols.
+       (_gpgme_wait_one_ext): New function.
+       (_gpgme_wait_one): Pass argument in invocation of
+       _gpgme_wait_on_condition.
+       * wait-global.c (struct ctx_list_item): Add member OP_ERR.
+       (ctx_done): New argument OP_ERR.
+       (ctx_wait): New argument OP_ERR.
+       (gpgme_wait_ext): New function based on gpgme_wait but handling
+       operational errors.
+       (gpgme_wait): Implement in term of gpgme_wait_ext.
+       * keylist.c (gpgme_op_keylist_next): Pass argument in invocation
+       of _gpgme_wait_on_condition.
+       * trustlist.c (gpgme_op_trustlist_next): Pass argument in
+       invocation of _gpgme_wait_on_condition.
+       * engine-assuan.c (struct engine_llass): Replace members RESULT_CB
+       and RESULT_CB_VALUE by LAST_OP_ERR.
+       (_gpgme_engine_assuan_last_op_err): Add this hack function.
+       (llass_cancel_op): New function.
+       (_gpgme_engine_llass_ops): Add cancel_op member.
+       (llass_status_handler): Update opaque value access.
+       (llass_transact): Remove RESULT_CB and RESULT_CB_VALUE arguments.
+       * opassuan.c: Move compat hacks to the end of file.
+       (opassuan_start): Do not set OPD->result.err.
+       Do not pass RESULT_Cb and CTX to _gpgme_engine_op_assuan_transact.
+       (gpgme_op_assuan_transact_ext): New function.
+
+       * debug.h (DEBUG_GLOBAL): New debug level.
+       * conversion.c (gnupg_errors, _gpgme_map_gnupg_error): Removed.
+       * data-user.c (gpgme_data_new_from_cbs): Add debug output.
+       * data-fd.c (gpgme_data_new_from_fd): Likewise.
+       * data-stream.c (gpgme_data_new_from_stream): Likewise.
+       * decrypt.c (gpgme_op_decrypt_result, gpgme_op_decrypt_start)
+       (gpgme_op_decrypt): Likewise.
+       * delete.c (gpgme_op_delete_start, gpgme_op_delete): Likewise.
+       * decrypt-verify.c (gpgme_op_decrypt_verify_start)
+       (gpgme_op_decrypt_verify): Likewise.
+       * sign.c (gpgme_op_sign_result): Fix debug message.
+       * data-mem.c (gpgme_data_new): Improve debug output.
+       * verify.c (parse_trust): Use atoi instead of
+       _gpgme_map_gnupg_error.
+       * decrypt.c (_gpgme_decrypt_status_handler): Likewise.
+
+2009-10-22  Marcus Brinkmann  <marcus@g10code.de>
+
+       * Makefile.am: Remove @NETLIBS@ from LIBADDs.
+       (g13_components): New variable.
+       (main_sources): Add $(g13_components).
+       * g13.c, engine-g13.c: New files.
+       * engine.c (engine_ops): Check for assuan for assuan engine, add
+       g13 engine.
+       * util.h (_gpgme_get_g13_path, _gpgme_encode_percent_string): New
+       prototypes.
+       * conversion.c (_gpgme_encode_percent_string): New function.
+       * gpgme.h.in (gpgme_protocol_t): Add GPGME_PROTOCOL_G13.
+       (struct _gpgme_op_g13_result, gpgme_g13_result_t): New types.
+       (gpgme_op_g13_mount): New function.
+       * gpgme.def, libgpgme.vers: Add gpgme_op_g13_mount.
+       * gpgme.c (gpgme_set_protocol): Allow GPGME_PROTOCOL_G13.
+       (gpgme_get_protocol_name): Add GPGME_PROTOCOL_G13.
+       * posix-util.c (_gpgme_get_g13_path): New function.
+       * w32-util.c (_gpgme_get_g13_path): New function.
+       * engine-backend.h (_gpgme_engine_ops_g13): New declaration.
+
+2009-10-20  Marcus Brinkmann  <marcus@g10code.de>
+
+       * gpgme-config.in (netlibs): Remove.
+       (assuan_cflags, assuan_libs): Add.
+
+       * Makefile.am (assuan_cppflags, assuan_libobjs): Removed.
+       (gpgsm_components): Move engine-assuan.c to ...
+       (assuan_components): ... this new variable.
+       (main_sources): Add this new variable.
+       (AM_CPPFLAGS): Remove $(assuan_cppflags).
+       (AM_CFLAGS): Add @LIBASSUAN_CFLAGS@.
+       (libgpgme_la_DEPENDENCIES, libgpgme_pth_la_DEPENDENCIES)
+       (libgpgme_glib_la_DEPENDENCIES, libgpgme_qt_la_DEPENDENCIES)
+       (libgpgme_pthread_la_DEPENDENCIES): Remove $(assuan_libobjs).
+       (libgpgme_la_LIBADD, libgpgme_pth_la_LIBADD)
+       (libgpgme_glib_la_LIBADD, libgpgme_qt_la_LIBADD))
+       (libgpgme_pthread_la_LIBADD): Replace $(assuan_libobjs) by
+       @LIBASSUAN_LIBS@.
+       * priv-io.h [!HAVE_W32_SYSTEM]: Declare _gpgme_io_recvmsg,
+       _gpgme_io_sendmsg, _gpgme_io_waitpid.
+       * engine-backend.h: Define with [ENABLE_ASSUAN] instead
+       of [ENABLE_GPGSM].
+       * posix-io.c (_gpgme_io_waitpid): Make non-static.
+       * util.h (ENABLE_ASSUAN): Declar _gpgme_assuan_system_hooks,
+       _gpgme_assuan_malloc_hooks, _gpgme_assuan_log_cb.
+       * engine-gpgsm.c: Don't map assuan error codes.  Use
+       assuan_release instead of assuan_disconnect.
+       (map_assuan_error): Remove function.
+       (gpgsm_new): Use new assuan context interface.
+       * engine-assuan.c: Use assuan_release instead of
+       assuan_disconnect.
+       (llass_new): Use new assuan context interface.
+
+2009-10-07    <wk@g10code.com>
+
+       * priv-io.h [W32]: Include windows.h instead of sys/socket.h.
+
+2009-08-06  Werner Koch  <wk@g10code.com>
+
+       * op-support.c (_gpgme_parse_inv_recp): Allow for no fingerprint.
+
+       * engine-gpgsm.c (gpgsm_sign): Hook up the status func for the
+       SIGNER command.
+       * gpgme.h.in (GPGME_STATUS_INV_SGNR, GPGME_STATUS_NO_SGNR): New.
+       * sign.c (op_data_t): Add fields IGNORE_INV_RECP and INV_SGNR_SEEN.
+       (_gpgme_op_sign_init_result): Factor code out to ...
+       (sign_init_result): .. new.  Init new fields.
+       (sign_start): Use sign_init_result.
+       (_gpgme_sign_status_handler): Take care of the new INV_SGNR.
+       Return an error if no signature has been created.
+
+2009-07-07  Werner Koch  <wk@g10code.com>
+
+       * engine-gpgsm.c (struct engine_gpgsm): Add fields
+       input_helper_data and input_helper_memory.
+       (close_notify_handler): Release these new fields.
+       (gpgsm_import): Implement the keyarray feature.
+
+       * engine-gpg.c (gpg_import): Actually return GPG_ERR_INV_VALUE.
+
+       * engine-gpgsm.c (gpgsm_import): Return an error for unknown data
+       encodings.
+
+2009-06-22  Marcus Brinkmann  <marcus@g10code.de>
+
+       * debug.h: Everywhere, use %p instead of 0x%x to print pointer.
+       [HAVE_STDINT_H]: Include <stdint.h>.
+       (_TRACE, TRACE, TRACE0, TRACE1, TRACE2, TRACE3, TRACE6): Cast tag
+       to (uintptr_t) before casting it to (void*) to silence GCC
+       warning.
+
+       * gpgme.h.in (_GPGME_DEPRECATED_OUTSIDE_GPGME): New macro.
+       * sign.c (_GPGME_IN_GPGME): Define it.
+       * keylist.c (_GPGME_IN_GPGME): Define it.
+
+       * debug.c (_gpgme_debug_begin, _gpgme_debug_add): Handle error in
+       vasprintf and asprintf.
+
+       * priv-io.h: Include <sys/socket.h>.  Declare _gpgme_io_connect.
+
+2009-06-18  Marcus Brinkmann  <marcus@g10code.de>
+
+       * gpgme.h.in (GPGME_CONF_PATHNAME): Revert last change, it's
+       back! (GPA still uses it...).
+
+       * gpgme.def: Fix stupid typo.
+       * w32-io.c (_gpgme_io_pipe): Add missing declaration.
+
+       * gpgme.h.in (GPGME_CONF_PATHNAME): Remove obsolete macro.
+
+       * w32-io.c (_gpgme_io_pipe): Allocate reader/writer thread right
+       away.
+       (_gpgme_io_read, _gpgme_io_write, _gpgme_io_select)
+       (_gpgme_io_dup): Never allocate threads here.
+       (find_writer, find_reader): Check return value of thread creation
+       function.
+
+       * context.h (CTX_OP_DATA_MAGIC): New macro.
+       (struct ctx_op_data): New member MAGIC.
+       * op-support.c (_gpgme_op_data_lookup): Initialize magic.
+       * gpgme.c (gpgme_result_unref, gpgme_result_ref): Check magic.
+
 2009-06-16  Marcus Brinkmann  <marcus@g10code.de>
 
+       * gpgme.c (gpgme_result_unref): Hot fix to release a lock.
+
        * gpgme.c (result_ref_lock): New global variable.
        (gpgme_result_ref, gpgme_result_unref): use it.
 
 
        * opassuan.c, dirinfo.c, engine-assuan.c: New.
        * Makefile.am:  Add them.
-       * engine-backend.h: Add _gpgme_engine_ops_assuan. 
+       * engine-backend.h: Add _gpgme_engine_ops_assuan.
        (struct engine_ops): Add field OPASSUAN_TRANSACT.  Update all
        engine intializers.
        * Makefile.am (gpgsm_components): Add engine-assuan.c.
        * wait.c: Include `engine.h'.
        (run_idle): Call _gpgme_engine_housecleaning(), not
        _gpgme_gpg_housecleaning().
-       
+
 2001-12-18  Marcus Brinkmann  <marcus@g10code.de>
 
        * key.c (_gpgme_key_append_name): Append, not prepend, the uid.