2006-01-12  Kurt Fitzner <kfitzner@excelcia.org>
 
 * Merged in some of Timo's updates and bug fixes from May 2005 until now.
   This is the last time I'll have to do this, since Timo decided to stop
   using/developing MyGPGME.

2006-01-09  Kurt Fitzner <kfitzner@excelcia.org>

 * gpgme.g, errors.c:  New errors: GPGME_SC_No_Card and GPGME_SC_Wrong_Card.
 * sign.c, sign-encrypt.c, decrypt.c:  Added support for SC_OP_FAILURE and
   CARDCTRL 5 status-fd messages, and the GET_LINE cardctrl.change_card.okay
   command-fd command (wrong smartcard) for smartcard support.

2005-09-05  Kurt Fitzner <kfitzner@excelcia.org>

 * sign.c: Modification to support signing with multiple keys.

2005-09-01  Timo Schulz  <twoaday@freakmail.de>

 * w32-util.c (expand_path): New.
 (read_w32_registry_string): Use it here.

2005-08-06  Timo Schulz  <twoaday@freakmail.de>

 * keycache-openpgp.c (parse_secring): Support to update
 a single key.
 (keycache_prepare2): Likewise. Fix memory leaks.
 (gpgme_keycache_prepare_single): New. Skip 0x of the keyid
 part if present.
 * keycache.c (_gpgme_keycache_find_key2): For internal use.
 * keylist.c (gpgme_op_keylist_start): Do not use -vvv -k but
 --check-sigs which generates the same output. Thanks to David.
 Only support a new bit flag to include signatures in the key
 listing.
 * import.c (_gpgme_release_import_result): Release second key list.

2005-08-04  Timo Schulz  <twoaday@freakmail.de>

 * keycache.c (gpgme_keycache_delete_key): Really delete
 the node and do not mark it.
 * data.c (gpgme_data_release_and_set_file): Before we release
 the memory, we overwrite it because the data could contain
 sentensive information. This does not give perfect security,
 but reduces the risk a little.
 * w32-clip.c (gpgme_data_release_and_set_clipboard): Likewise.
 import.c (gpgme_get_import_status): If we are in interactive
 mode, we return the list of imported keys the user selected.
 Otherwise we return all imported keys.
 * import.c (import_status_handler): Support for IMPORT_OK.
 * keycache-openpgp.c (gpgme_keycache_prepare): Check all
 alloc results.

2005-08-03  Timo Schulz  <twoaday@freakmail.de>

 * delete.c (get_delete_result): New.
 (gpgme_op_delete): Use it here.
 (gpgme_op_delete_keys): Just spawn one GPG instance to delete
 multilple keys.
 * key.c (pkalgo_to_string): Fixed wrong IDs.
 * gpgme.c (gpgme_new): Use AES as default.

2005-07-22  Timo Schulz  <twoaday@freakmail.de>

 * gpgme.c (_gpgme_add_comment): Forgot to alloc an extra
 byte for the '0'. This fixes a lot of crashes related to
 file operations.
 * keylist.c (gpgme_op_keylist_getkey): Use the param for
 'pub' or 'sec' mode.
 * keycache.c (gpgme_keycache_update_key): If the key is
 not in the cache, add it and if the cache contain secret
 key, sync it with the pub cache.
 * editkey.c (edit_key_colon_handler): Allocate 1 byte for
 the NUL-char.  This also fixes a lot of reported crashes
 related to the showpref feature.

2005-05-20 Timo Schulz  <twoaday@freakmail.de>

 * keylist.c (gpgme_op_keylist_getkey): New. Handy function to
 retrieve a single key.
 * verify.c (gpgme_get_sig_key): Use it here.
 * keycache.c (gpgme_keycache_update_key): Update a single key.

2005-05-12  Timo Schulz  <twoaday@freakmail.de>

 * key.c (gpgme_key_get_ulong_attr#GPGME_ATTR_KEY_USABLE): Also
 check if the key is disabled.

2005-05-10  Kurt Fitzner <kfitzner@excelcia.org>

 * file.c: New file - added gpgme_file_get_pgptype() function
 * gpgme.c: Added gpgme_global_control() - supports the following globals:
    GPGME_GLOBAL_GPGPROGRAM, GPGME_GLOBAL_OPTFILE, GPGME_GLOBAL_PUBRING,
    GPGME_GLOBAL_SECRING
 * verify.c, decrypt.c: exptime, key_algo, md_algo, and sig_class are all now
   set in a signature's results.  Also, added a _gpgme_release_result() call
   to match verify_start().  Fixes problem where a gpgme_op_file_verify()
   fails if performed after a gpgme_op_file_decrypt().
 * w32-io.c: Wrong variable in loop fixed
 * Fixed various assignments within tests so as to not produce warnings with
   Borland compilers.

2005-03-22  Timo Schulz  <twoaday@freakmail.de>

 * editcard.c: Support new status-fd entries SC_OP_SUCCESS
 and SC_OP_FAILURE.
 * editkey.c (cmd_addrev_handler): Check if context != NULL.
 * import.c (import_command_handler): Wrong function signature.
 Noted by Kurt Fitzner.
 * types.h: Fixed encrypt_result_s. Noted by Kurt.
 * gpgme.h (gpgme_editkey_addrev_set): Changed return type.
 Kudos to Kurt.
 * key.c: Removed some unreachable code. By Kurt.

2005-01-07  Timo Schulz  <twoaday@freakmail.de>

 * gpgme.c (gpgnme_lib_cleanup): New. Cleanup all static locks.
 (gpgme_lib_init): New.
 * editkey.c (editkey_start): Use --ask-cert-level. Noted by
 a friendly user.

2004-10-07  Timo Schulz  <twoaday@freakmail.de>

 * editcard.c (editcard_start): Remove '--allow-admin' since
 GPG 1.3.90 has another interface.
 (editcard_command_handler): Support 'backup' question.
 * gpgme.h: Add card flags.
 * editkey.c (edit_key_colon_handler): Decode the name.

2004-08-24  Timo Schulz  <twoaday@freakmail.de>

 * key.c (gpgme_key_release): Release user-id hash if possible.

2004-08-20  Timo Schulz  <twoaday@freakmail.de>

 * editkey-util.c (gpgme_editkey_delsig_set): New.
 * editkey.c (check_edit_cmd): New.
 (cmd_delsig_handler): New.

2004-07-13  Timo Schulz  <twoaday@freakmail.de>

 * common-status.c (_gpgme_nodata_status_handler): New.
 (_gpgme_pass_status_handler): New.
 (_gpgme_sigtrust_status_handler): New.

2004-05-11  Timo Schulz  <twoaday@freakmail.de>

 * key.c (_gpgme_key_append_name): Return user-id pointer. 
 Changed all callers.
 * keylist.c (keylist_colon_handler): Implemented new code.
 This fixed a problem with wrong user-id validities.

2003-12-23  Timo Schulz  <twoaday@freakmail.de>

 * verify.c, rungpg.c: Removed all pipemode code. It was
 never used and in newer version of GPG it is declared
 as 'obselete'.

2003-01-07  Timo Schulz  <ts@winpt.org>

 * Removed all code for the primary user-id flag.
 Werner reminded me that the primary user-id is always
 the first in the colon mode.

2002-12-14  Timo Schulz  <ts@winpt.org>

 * verify.c (verify_get_sig_date): Workaround because GPG
 does not return a valid timestam for bad signatures.

2002-10-15  Timo Schulz  <ts@winpt.org>

 * datamisc.c: Removed. Merged stuff into data.c
 * file.c, file-xxx.c: Removed
 * keylist.c (parse_colon_line): Support for subkey fingerprints.
 * clipboard. (gpgme_op_verify_clipboard): Fix an error when
 a subkey was used for signing.

2002-10-13  Timo Schulz  <ts@winpt.org>

 * siglist.c: Removed. Now we use the key directly to list
 the signatures. This is much easier and it will help us
 to implement the planned key manager style.

2002-09-23  Timo Schulz  <ts@winpt.org>

 * keycache.c (gpgme_keycache_prepare): Added support to detect
 primary userID's.
 (uid_set_primary): New.

2002-09-17  Timo Schulz  <ts@winpt.org>

 * Removed the --verbose support, we don't need it.

2002-09-14  Timo Schulz  <ts@winpt.org>

 * implist.c (gpgme_impkey_release): Release the userid.

2001-05-28  Werner Koch  <wk@gnupg.org>

 * version.c (gpgme_check_engine): Stop version number parsing at
 the opening angle and not the closing one.  By Tommy Reynolds.

2001-05-01  Jos Carlos Garca Sogo <jose@jaimedelamo.eu.org>

 * encrypt.c (gpgme_op_encrypt_start): Deleted the assert ( !c->gpg )
 line, because it gave an error if another operation had been made 
 before using the same context.
 
 * decrypt.c (gpgme_op_decrypt_start): The same as above. Also added 
 one line to release the gpg object in the context (if any).
 
2001-04-26  Werner Koch  <wk@gnupg.org>

 * key.c, key.h (_gpgme_key_cache_init): New.
 (_gpgme_key_cache_add): New.
 (_gpgme_key_cache_get): New.
 * version.c (do_subsystem_inits): Init the cache.
 * keylist.c (finish_key): Put key into the cache
 * verify.c (gpgme_get_sig_key): First look into the cache.

2001-04-19  Werner Koch  <wk@gnupg.org>

 * keylist.c (parse_timestamp): Adjusted for the changed
 --fixed-list-mode of gpg 1.0.4h.

2001-04-05  Werner Koch  <wk@gnupg.org>

 * verify.c (gpgme_op_verify_start): Enabled pipemode for detached sigs.

2001-04-04  Werner Koch  <wk@gnupg.org>

 * w32-io.c (_gpgme_io_select): Don't select on the writer if there
 are still bytes pending.  Timo found this not easy to track down
 race condition. 

2001-04-02  Werner Koch  <wk@gnupg.org>

 * gpgme.h: Add GPGME_ATTR_KEY_{EXPIRED,DISABLED}.
 * key.c (gpgme_key_get_ulong_attr): And return those attribs.

 * verify.c (gpgme_get_sig_key): Set keyliosting mode depending on 
 the mode set in the current context.  Suggested by Timo.

 * key.c (gpgme_key_get_ulong_attr): Return can_certify and not
 can_encrypt. By Timo.

2001-03-30  Werner Koch  <wk@gnupg.org>

 * debug.c (debug_init): Allow to specify a debug file.
 (_gpgme_debug_level): New.

 * posix-io.c (_gpgme_io_read, _gpgme_io_write): Print output.
 (_gpgme_io_select): Debug only with level > 2.

2001-03-15  Werner Koch  <wk@gnupg.org>

 * rungpg.c: Included time.h.

 * key.h: New keyflags for capabilities.
 * keylist.c (set_mainkey_capability, set_subkey_capability): New.
 (keylist_colon_handler): Parse them.
 * gpgme.h: New attribute values for capabilties.
 * key.c (gpgme_key_get_string_attr): Return them.
 (capabilities_to_string): New.
 (gpgme_key_get_ulong_attr): Return the global caps.

2001-03-14  Werner Koch  <wk@gnupg.org>

 * w32-io.c (destroy_reader,destroy_writer): Fixed syntax error. 
 Thanks to Jan Oliver Wagner.

2001-03-13  Werner Koch  <wk@gnupg.org>

 * context.h: Add invalid and revoke flags to user_id structure.
 * keylist.c (gpgme_op_keylist_start): Use --fixed-list-mode.
 (keylist_colon_handler): Adjust for that.
  (set_userid_flags): New. 
 (set_mainkey_trust_info): Handle new key invalid flag
 (set_subkey_trust_info): Ditto.
 * gpgme.h: Add new attributes for key and user ID flags.
 * key.c (_gpgme_key_append_name): Init these flags
 (gpgme_key_get_as_xml): Print them.
 (one_uid_as_xml): New helper for above.
 (gpgme_key_get_string_attr, gpgme_key_get_ulong_attr):
 Return the new attributes.  Enhanced, so that subkey information
 can be returned now.

2001-02-28  Werner Koch  <wk@gnupg.org>

 * w32-io.c (destroy_reader): Set stop_me flag.
 (writer,create_writer,destroy_writer,find_writer,kill_writer): New.
 (_gpgme_io_write): Use a writer thread to avaoid blocking.
 (_gpgme_io_close): Cleanup a writer thread
 (_gpgme_io_select): Repalce tthe faked wait on writing by a real
 waiting which is now possible due to the use of a writer thread.

2001-02-20  Werner Koch  <wk@gnupg.org>

 * w32-io.c (destroy_reader,kill_reader): New. 
 (create_reader, reader): Add a new event to stop the thread.
 (_gpgme_io_close): Kill the reader thread.

 * posix-io.c (_gpgme_io_select): Handle frozen fds here. 
 * 32-io.c (_gpgme_io_select): Ditto. Removed a bunch of unused code.

 * wait.c: Reworked the whole thing.
 * rungpg.c (_gpgme_gpg_new): Init pid to -1.
 (_gpgme_gpg_release): Remove the process from the wait queue.

2001-02-19  Werner Koch  <wk@gnupg.org>

 * w32-io.c (_gpgme_io_set_close_notify): New.
 (_gpgme_io_close): Do the notification.

 * posix-io.c (_gpgme_io_select): Use a 1 sec timeout and not 200
 microseconds.

 * wait.c (remove_process): Don't close the fd here.
 (do_select): Set the fd to -1 and remove the is_closed flag everywhere.
 (_gpgme_wait_on_condition): Remove the assert on the queue and
 break out if we could not find the queue.  The whole thing should
 be reworked.

 * posix-io.c (_gpgme_io_set_close_notify): New.
 (_gpgme_io_close): Do the notification.

 * rungpg.c (close_notify_handler): New. 
 (_gpgme_gpg_new): Register a callback for the fd.
 (_gpgme_gpg_set_colon_line_handler): Ditto.
 (build_argv): Ditto

2001-02-13  Werner Koch  <wk@gnupg.org>

 * rungpg.c (struct reap_s): Replaced pid_t by int.

 * types.h: Add ulong typedef.

 * rungpg.c (do_reaping,_gpgme_gpg_housecleaning): New.
 (_gpgme_gpg_release): Reap children.
 * io.h, posix-io.c (_gpgme_io_kill): New.
 * w32-io.c (_gpgme_io_kill): New (dummy).

 * keylist.c (gpgme_op_keylist_start): Cancel a pending request.

 * posix-io.c (_gpgme_io_read): Add some debug output. 
 (_gpgme_io_write): Ditto.
 (_gpgme_io_select): Increased the timeout.

2001-02-12  Werner Koch  <wk@gnupg.org>

 Enhanced the signature verification, so that it can how handle
 more than one signature and is able to return more information on 
 the signatures.
 * verify.c (gpgme_get_sig_key): New.
 (gpgme_get_sig_status): New.

 * gpgme.h: Add stdio.h. 
 (GpgmeSigStat): New status DIFF.

2001-02-01  Werner Koch  <wk@gnupg.org>

 * w32-io.c (set_synchronize): Add EVENT_MODIFY_STATE.  Add Debug
 code to all Set/ResetEvent().

 * rungpg.c (read_status): Check for end of stream only if we have
 an r.  By Timo.

2001-01-31  Werner Koch  <wk@gnupg.org>

 * wait.c (_gpgme_wait_on_condition): Removed all exit code processing.
 (propagate_term_results,clear_active_fds): Removed.
 (count_active_fds): Renamed to .. 
 (count_active_and_thawed_fds): .. this and count only thawed fds. 

 * rungpg.c (gpg_colon_line_handler): Return colon.eof and not
 status.eof ;-)

2001-01-30  Werner Koch  <wk@gnupg.org>

 * w32-io.c (_gpgme_io_spawn): Use the supplied path arg.

 * version.c (get_engine_info): Return better error information.

 * posix-util.c, w32-util.c: New.
 (_gpgme_get_gpg_path): New, suggested by Jan-Oliver.
 * rungpg.c (_gpgme_gpg_spawn): Use new function to get GPG's path.

 * signers.c (gpgme_signers_add): Ooops, one should test code and
 not just write it; the newarr was not assigned.  Thanks to Jos
 for pointing this out.  Hmmm, still not tested, why shoudl a coder
 test his fix :-)

 * w32-io.c: Does now use reader threads, so that we can use
 WaitForMultipleObjects. 
 * sema.h, posix-sema.c, w32-sema.c: Support for Critcial sections.
 Does currently only work for W32.

 * debug.c, util.h : New. Changed all fprintfs to use this new
 set of debugging functions.

2001-01-23  Werner Koch  <wk@gnupg.org>

 * data.c (_gpgme_data_release_and_return_string): Fixed string
 termination.

2001-01-22  Werner Koch  <wk@gnupg.org>

 * delete.c: New.

 * signers.c: New.
 * key.c (gpgme_key_ref, gpgme_key_unref): New.
 * sign.c (gpgme_op_sign_start): Allow the use of other keys.

 * version.c (gpgme_get_engine_info,gpgme_check_engine): New.
 * rungpg.c (_gpgme_gpg_set_simple_line_handler): New.

2001-01-05  Werner Koch  <wk@gnupg.org>

 * data.c (gpgme_data_rewind): Allow to rewind data_type_none.
