[svn] GnuPG - r5161 - in trunk: . agent common g10 scd sm tools

svn author marcus cvs at cvs.gnupg.org
Wed Sep 23 02:01:26 CEST 2009


Author: marcus
Date: 2009-09-23 02:01:25 +0200 (Wed, 23 Sep 2009)
New Revision: 5161

Modified:
   trunk/ChangeLog
   trunk/agent/ChangeLog
   trunk/agent/call-pinentry.c
   trunk/agent/call-scd.c
   trunk/agent/command.c
   trunk/agent/gpg-agent.c
   trunk/common/ChangeLog
   trunk/common/asshelp.c
   trunk/configure.ac
   trunk/g10/ChangeLog
   trunk/g10/call-agent.c
   trunk/g10/gpg.c
   trunk/g10/server.c
   trunk/scd/ChangeLog
   trunk/scd/command.c
   trunk/scd/scdaemon.c
   trunk/sm/ChangeLog
   trunk/sm/call-dirmngr.c
   trunk/sm/gpgsm.c
   trunk/sm/server.c
   trunk/tools/ChangeLog
   trunk/tools/gpg-connect-agent.c
Log:
2009-09-23  Marcus Brinkmann  <marcus at g10code.de>

	* configure.ac (NEED_LIBASSUAN_API, NEED_LIBASSUAN_VERSION):
	Update to new API (2, 1.1.0).

agent/
2009-09-23  Marcus Brinkmann  <marcus at g10code.de>

	* gpg-agent.c (parse_rereadable_options): Don't set global assuan
	log file (there ain't one anymore).
	(main): Update to new API.
	(check_own_socket_pid_cb): Return gpg_error_t instead of int.
	(check_own_socket_thread, check_for_running_agent): Create assuan
	context before connecting to server.
	* command.c: Include "scdaemon.h" before <assuan.h> because of
	GPG_ERR_SOURCE_DEFAULT check.
	(write_and_clear_outbuf): Use gpg_error_t instead of
	assuan_error_t.
	(cmd_geteventcounter, cmd_istrusted, cmd_listtrusted)
	(cmd_marktrusted, cmd_havekey, cmd_sigkey, cmd_setkeydesc)
	(cmd_sethash, cmd_pksign, cmd_pkdecrypt, cmd_genkey, cmd_readkey)
	(cmd_keyinfo, cmd_get_passphrase, cmd_clear_passphrase)
	(cmd_get_confirmation, cmd_learn, cmd_passwd)
	(cmd_preset_passphrase, cmd_scd, cmd_getval, cmd_putval)
	(cmd_updatestartuptty, cmd_killagent, cmd_reloadagent)
	(cmd_getinfo, option_handler): Return gpg_error_t instead of int.
	(post_cmd_notify): Change type of ERR to gpg_error_t from int.
	(io_monitor): Add hook argument.  Use symbols for constants.
	(register_commands): Change return type of HANDLER to gpg_error_t.
	(start_command_handler): Allocate assuan context before starting
	server.
	* call-pinentry.c: Include "scdaemon.h" before <assuan.h> because
	of GPG_ERR_SOURCE_DEFAULT check.
	(unlock_pinentry): Call assuan_release instead of
	assuan_disconnect.
	(getinfo_pid_cb, getpin_cb): Return gpg_error_t instead of int.
	(start_pinentry): Allocate assuan context before connecting to
	server.
	* call-scd.c (membuf_data_cb, learn_status_cb, get_serialno_cb)
	(membuf_data_cb, inq_needpin, card_getattr_cb, pass_status_thru)
	(pass_data_thru): Change return type to gpg_error_t.
	(start_scd): Allocate assuan context before connecting to server.

common/
2009-09-23  Marcus Brinkmann  <marcus at g10code.de>

	* asshelp.c (start_new_gpg_agent): Allocate assuan context before
	starting server.

g10/
2009-09-23  Marcus Brinkmann  <marcus at g10code.de>

	* call-agent.c: Include "scdaemon.h" before <assuan.h> because of
	GPG_ERR_SOURCE_DEFAULT check.
	(learn_status_cb, dummy_data_cb, get_serialno_cb, default_inq_cb)
	(learn_status_cb, inq_writecert_parms, inq_writekey_parms)
	(scd_genkey_cb, membuf_data_cb): Return gpg_error_t instead of
	int.
	* gpg.c: Include "scdaemon.h" before <assuan.h> because of
	GPG_ERR_SOURCE_DEFAULT check.
	(main): Update to new Assuan API.
	* server.c: Include "scdaemon.h" before <assuan.h> because of
	GPG_ERR_SOURCE_DEFAULT check.
	(option_handler, cmd_recipient, cmd_signer, cmd_encrypt)
	(cmd_decrypt, cmd_verify, cmd_sign, cmd_import, cmd_export)
	(cmd_delkeys, cmd_message, do_listkeys, cmd_listkeys)
	(cmd_listsecretkeys, cmd_genkey, cmd_getinfo): Return gpg_error_t
	instead of int.
	(register_commands): Allocate assuan context before starting
	server.
	(gpg_server): Allocate assuan_context before starting server.

scd/
2009-09-23  Marcus Brinkmann  <marcus at g10code.de>

	* command.c: Include "scdaemon.h" before <assuan.h> because of
	GPG_ERR_SOURCE_DEFAULT check.
	(option_handler, open_card, cmd_serialno, cmd_lean, cmd_readcert)
	(cmd_readkey, cmd_setdata, cmd_pksign, cmd_pkauth, cmd_pkdecrypt)
	(cmd_getattr, cmd_setattr, cmd_writecert, cmd_writekey)
	(cmd_genkey, cmd_random, cmd_passwd, cmd_checkpin, cmd_lock)
	(cmd_unlock, cmd_getinfo, cmd_restart, cmd_disconnect, cmd_apdu)
	(cmd_killscd): Return gpg_error_t instead of int.
	(scd_command_handler): Allocate assuan context before starting server.
	* scdaemon.c (main): Update to new Assuan API.

sm/
2009-09-23  Marcus Brinkmann  <marcus at g10code.de>

	* gpgsm.c (main): Update to new assuan API.
	* server.c: Include "gpgsm.h" before <assuan.h> due to check for
	GPG_ERR_SOURCE_DEFAULT and assuan.h now including gpg-error.h.
	(option_handler, cmd_recipient, cmd_signer, cmd_encrypt)
	(cmd_decrypt, cmd_verify, cmd_sign, cmd_import, cmd_export)
	(cmd_delkeys, cmd_message, cmd_listkeys, cmd_dumpkeys)
	(cmd_listsecretkeys, cmd_dumpsecretkeys, cmd_genkey)
	(cmd_getauditlog, cmd_getinfo): Return gpg_error_t instead of int.
	(register_commands): Same for member HANDLER in table.
	(gpgsm_server): Allocate assuan context before starting server.
	* sm/call-dirmngr.c:
	* call-dirmngr.c (prepare_dirmngr): Check for CTX and error before
	setting LDAPSERVER.
	(start_dirmngr_ext): Allocate assuan context before starting
	server.
	(inq_certificate, isvalid_status_cb, lookup_cb, lookup_status_cb)
	(run_command_cb, run_command_inq_cb, run_command_status_cb):
	Return gpg_error_t instead of int.

tools/
2009-09-23  Marcus Brinkmann  <marcus at g10code.de>

	* gpg-connect-agent.c (getinfo_pid_cb, read_and_print_response)
	(main): Update to new Assuan API.


[The diff below has been truncated]

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2009-09-21 18:26:52 UTC (rev 5160)
+++ trunk/ChangeLog	2009-09-23 00:01:25 UTC (rev 5161)
@@ -1,3 +1,8 @@
+2009-09-23  Marcus Brinkmann  <marcus at g10code.de>
+
+	* configure.ac (NEED_LIBASSUAN_API, NEED_LIBASSUAN_VERSION):
+	Update to new API (2, 1.1.0).
+
 2009-09-21  Werner Koch  <wk at g10code.com>
 
 	Start a new development branch in the SVN trunk.  The stable one

Modified: trunk/agent/ChangeLog
===================================================================
--- trunk/agent/ChangeLog	2009-09-21 18:26:52 UTC (rev 5160)
+++ trunk/agent/ChangeLog	2009-09-23 00:01:25 UTC (rev 5161)
@@ -1,3 +1,40 @@
+2009-09-23  Marcus Brinkmann  <marcus at g10code.de>
+
+	* gpg-agent.c (parse_rereadable_options): Don't set global assuan
+	log file (there ain't one anymore).
+	(main): Update to new API.
+	(check_own_socket_pid_cb): Return gpg_error_t instead of int.
+	(check_own_socket_thread, check_for_running_agent): Create assuan
+	context before connecting to server.
+	* command.c: Include "scdaemon.h" before <assuan.h> because of
+	GPG_ERR_SOURCE_DEFAULT check.
+	(write_and_clear_outbuf): Use gpg_error_t instead of
+	assuan_error_t.
+	(cmd_geteventcounter, cmd_istrusted, cmd_listtrusted)
+	(cmd_marktrusted, cmd_havekey, cmd_sigkey, cmd_setkeydesc)
+	(cmd_sethash, cmd_pksign, cmd_pkdecrypt, cmd_genkey, cmd_readkey)
+	(cmd_keyinfo, cmd_get_passphrase, cmd_clear_passphrase)
+	(cmd_get_confirmation, cmd_learn, cmd_passwd)
+	(cmd_preset_passphrase, cmd_scd, cmd_getval, cmd_putval)
+	(cmd_updatestartuptty, cmd_killagent, cmd_reloadagent)
+	(cmd_getinfo, option_handler): Return gpg_error_t instead of int.
+	(post_cmd_notify): Change type of ERR to gpg_error_t from int.
+	(io_monitor): Add hook argument.  Use symbols for constants.
+	(register_commands): Change return type of HANDLER to gpg_error_t.
+	(start_command_handler): Allocate assuan context before starting
+	server.
+	* call-pinentry.c: Include "scdaemon.h" before <assuan.h> because
+	of GPG_ERR_SOURCE_DEFAULT check.
+	(unlock_pinentry): Call assuan_release instead of
+	assuan_disconnect.
+	(getinfo_pid_cb, getpin_cb): Return gpg_error_t instead of int.
+	(start_pinentry): Allocate assuan context before connecting to
+	server.
+	* call-scd.c (membuf_data_cb, learn_status_cb, get_serialno_cb)
+	(membuf_data_cb, inq_needpin, card_getattr_cb, pass_status_thru)
+	(pass_data_thru): Change return type to gpg_error_t.
+	(start_scd): Allocate assuan context before connecting to server.
+
 2009-09-04  Marcus Brinkmann  <marcus at g10code.com>
 
 	* command.c (start_command_handler): Add comment about gap in

Modified: trunk/common/ChangeLog
===================================================================
--- trunk/common/ChangeLog	2009-09-21 18:26:52 UTC (rev 5160)
+++ trunk/common/ChangeLog	2009-09-23 00:01:25 UTC (rev 5161)
@@ -1,3 +1,8 @@
+2009-09-23  Marcus Brinkmann  <marcus at g10code.de>
+
+	* asshelp.c (start_new_gpg_agent): Allocate assuan context before
+	starting server.
+
 2009-09-03  Werner Koch  <wk at g10code.com>
 
 	Update from libestream:

Modified: trunk/g10/ChangeLog
===================================================================
--- trunk/g10/ChangeLog	2009-09-21 18:26:52 UTC (rev 5160)
+++ trunk/g10/ChangeLog	2009-09-23 00:01:25 UTC (rev 5161)
@@ -1,3 +1,25 @@
+2009-09-23  Marcus Brinkmann  <marcus at g10code.de>
+
+	* call-agent.c: Include "scdaemon.h" before <assuan.h> because of
+	GPG_ERR_SOURCE_DEFAULT check.
+	(learn_status_cb, dummy_data_cb, get_serialno_cb, default_inq_cb)
+	(learn_status_cb, inq_writecert_parms, inq_writekey_parms)
+	(scd_genkey_cb, membuf_data_cb): Return gpg_error_t instead of
+	int.
+	* gpg.c: Include "scdaemon.h" before <assuan.h> because of
+	GPG_ERR_SOURCE_DEFAULT check.
+	(main): Update to new Assuan API.
+	* server.c: Include "scdaemon.h" before <assuan.h> because of
+	GPG_ERR_SOURCE_DEFAULT check.
+	(option_handler, cmd_recipient, cmd_signer, cmd_encrypt)
+	(cmd_decrypt, cmd_verify, cmd_sign, cmd_import, cmd_export)
+	(cmd_delkeys, cmd_message, do_listkeys, cmd_listkeys)
+	(cmd_listsecretkeys, cmd_genkey, cmd_getinfo): Return gpg_error_t
+	instead of int.
+	(register_commands): Allocate assuan context before starting
+	server.
+	(gpg_server): Allocate assuan_context before starting server.
+
 2009-09-04  Werner Koch  <wk at g10code.com>
 
 	* keyedit.c (menu_select_uid): Use IDX ==-1 t select all.

Modified: trunk/scd/ChangeLog
===================================================================
--- trunk/scd/ChangeLog	2009-09-21 18:26:52 UTC (rev 5160)
+++ trunk/scd/ChangeLog	2009-09-23 00:01:25 UTC (rev 5161)
@@ -1,3 +1,16 @@
+2009-09-23  Marcus Brinkmann  <marcus at g10code.de>
+
+	* command.c: Include "scdaemon.h" before <assuan.h> because of
+	GPG_ERR_SOURCE_DEFAULT check.
+	(option_handler, open_card, cmd_serialno, cmd_lean, cmd_readcert)
+	(cmd_readkey, cmd_setdata, cmd_pksign, cmd_pkauth, cmd_pkdecrypt)
+	(cmd_getattr, cmd_setattr, cmd_writecert, cmd_writekey)
+	(cmd_genkey, cmd_random, cmd_passwd, cmd_checkpin, cmd_lock)
+	(cmd_unlock, cmd_getinfo, cmd_restart, cmd_disconnect, cmd_apdu)
+	(cmd_killscd): Return gpg_error_t instead of int.
+	(scd_command_handler): Allocate assuan context before starting server.
+	* scdaemon.c (main): Update to new Assuan API.
+
 2009-09-03  Werner Koch  <wk at g10code.com>
 
 	* app-openpgp.c (do_decipher): Compute required Le.

Modified: trunk/sm/ChangeLog
===================================================================
--- trunk/sm/ChangeLog	2009-09-21 18:26:52 UTC (rev 5160)
+++ trunk/sm/ChangeLog	2009-09-23 00:01:25 UTC (rev 5161)
@@ -1,3 +1,24 @@
+2009-09-23  Marcus Brinkmann  <marcus at g10code.de>
+
+	* gpgsm.c (main): Update to new assuan API.
+	* server.c: Include "gpgsm.h" before <assuan.h> due to check for
+	GPG_ERR_SOURCE_DEFAULT and assuan.h now including gpg-error.h.
+	(option_handler, cmd_recipient, cmd_signer, cmd_encrypt)
+	(cmd_decrypt, cmd_verify, cmd_sign, cmd_import, cmd_export)
+	(cmd_delkeys, cmd_message, cmd_listkeys, cmd_dumpkeys)
+	(cmd_listsecretkeys, cmd_dumpsecretkeys, cmd_genkey)
+	(cmd_getauditlog, cmd_getinfo): Return gpg_error_t instead of int.
+	(register_commands): Same for member HANDLER in table.
+	(gpgsm_server): Allocate assuan context before starting server.
+	* sm/call-dirmngr.c:
+	* call-dirmngr.c (prepare_dirmngr): Check for CTX and error before
+	setting LDAPSERVER.
+	(start_dirmngr_ext): Allocate assuan context before starting
+	server.
+	(inq_certificate, isvalid_status_cb, lookup_cb, lookup_status_cb)
+	(run_command_cb, run_command_inq_cb, run_command_status_cb):
+	Return gpg_error_t instead of int.
+
 2009-08-06  Werner Koch  <wk at g10code.com>
 
 	* sign.c (gpgsm_sign): Print INV_SNDR for a bad default key.

Modified: trunk/tools/ChangeLog
===================================================================
--- trunk/tools/ChangeLog	2009-09-21 18:26:52 UTC (rev 5160)
+++ trunk/tools/ChangeLog	2009-09-23 00:01:25 UTC (rev 5161)
@@ -1,3 +1,8 @@
+2009-09-23  Marcus Brinkmann  <marcus at g10code.de>
+
+	* gpg-connect-agent.c (getinfo_pid_cb, read_and_print_response)
+	(main): Update to new Assuan API.
+
 2009-07-21  Werner Koch  <wk at g10code.com>
 
 	* gpgsplit.c (my_strusage): Remove i18n stuff.

Modified: trunk/agent/call-pinentry.c
===================================================================
--- trunk/agent/call-pinentry.c	2009-09-21 18:26:52 UTC (rev 5160)
+++ trunk/agent/call-pinentry.c	2009-09-23 00:01:25 UTC (rev 5161)
@@ -32,9 +32,9 @@
 # include <signal.h>
 #endif
 #include <pth.h>
-#include <assuan.h>
 
 #include "agent.h"
+#include <assuan.h>
 #include "setenv.h"
 #include "i18n.h"
 
@@ -158,7 +158,7 @@
       if (!rc)
         rc = gpg_error (GPG_ERR_INTERNAL);
     }
-  assuan_disconnect (ctx);
+  assuan_release (ctx);
   return rc;
 }
 
@@ -196,7 +196,7 @@
 }
 
 
-static int
+static gpg_error_t
 getinfo_pid_cb (void *opaque, const void *buffer, size_t length)
 {
   unsigned long *pid = opaque;
@@ -309,16 +309,24 @@
     }
   no_close_list[i] = -1;
 
+  rc = assuan_new (&ctx);
+  if (rc)
+    {
+      log_error ("can't allocate assuan context: %s\n", gpg_strerror (rc));
+      return rc;
+    }
+
   /* Connect to the pinentry and perform initial handshaking.  Note
      that atfork is used to change the environment for pinentry.  We
      start the server in detached mode to suppress the console window
      under Windows.  */
-  rc = assuan_pipe_connect_ext (&ctx, opt.pinentry_program, argv,
+  rc = assuan_pipe_connect_ext (ctx, opt.pinentry_program, argv,
                                 no_close_list, atfork_cb, ctrl, 128);
   if (rc)
     {
       log_error ("can't connect to the PIN entry module: %s\n",
                  gpg_strerror (rc));
+      assuan_release (ctx);
       return unlock_pinentry (gpg_error (GPG_ERR_NO_PIN_ENTRY));
     }
   entry_ctx = ctx;
@@ -463,7 +471,7 @@
 }
 
 
-static int
+static gpg_error_t
 getpin_cb (void *opaque, const void *buffer, size_t length)
 {
   struct entry_parm_s *parm = opaque;
@@ -553,7 +561,7 @@
 
 
 /* Handle the QUALITY inquiry. */
-static int
+static gpg_error_t
 inq_quality (void *opaque, const char *line)
 {
   assuan_context_t ctx = opaque;

Modified: trunk/agent/call-scd.c
===================================================================
--- trunk/agent/call-scd.c	2009-09-21 18:26:52 UTC (rev 5160)
+++ trunk/agent/call-scd.c	2009-09-23 00:01:25 UTC (rev 5161)
@@ -108,8 +108,8 @@
 
 
 /* Local prototypes.  */
-static assuan_error_t membuf_data_cb (void *opaque,
-                                      const void *buffer, size_t length);
+static gpg_error_t membuf_data_cb (void *opaque,
+				   const void *buffer, size_t length);
 
 
 
@@ -209,7 +209,7 @@
 {
   gpg_error_t err = 0;
   const char *pgmname;
-  assuan_context_t ctx;
+  assuan_context_t ctx = NULL;
   const char *argv[3];
   int no_close_list[3];
   int i;
@@ -268,9 +268,17 @@
       goto leave;
     }
 
+  rc = assuan_new (&ctx);
+  if (rc)
+    {
+      log_error ("can't allocate assuan context: %s\n", gpg_strerror (rc));
+      err = rc;
+      goto leave;
+    }
+
   if (socket_name)
     {
-      rc = assuan_socket_connect (&ctx, socket_name, 0);
+      rc = assuan_socket_connect (ctx, socket_name, 0);
       if (rc)
         {
           log_error ("can't connect to socket `%s': %s\n",
@@ -333,7 +341,7 @@
   /* Connect to the pinentry and perform initial handshaking.  Use
      detached flag (128) so that under W32 SCDAEMON does not show up a
      new window.  */
-  rc = assuan_pipe_connect_ext (&ctx, opt.scdaemon_program, argv,
+  rc = assuan_pipe_connect_ext (ctx, opt.scdaemon_program, argv,
                                 no_close_list, atfork_cb, NULL, 128);
   if (rc)
     {
@@ -399,6 +407,8 @@
   if (err)
     {
       unlock_scd (ctrl, err);
+      if (ctx)
+	assuan_release (ctx);
     } 
   else
     {
@@ -477,14 +487,14 @@
           struct scd_local_s *sl;
 
           assuan_set_flag (primary_scd_ctx, ASSUAN_NO_WAITPID, 1);
-          assuan_disconnect (primary_scd_ctx);
+          assuan_release (primary_scd_ctx);
 
           for (sl=scd_local_list; sl; sl = sl->next_local)
             {
               if (sl->ctx)
                 {
                   if (sl->ctx != primary_scd_ctx)
-                    assuan_disconnect (sl->ctx);
+                    assuan_release (sl->ctx);
                   sl->ctx = NULL;
                 }
             }
@@ -534,7 +544,7 @@
               primary_scd_ctx_reusable = 1;
             }
           else
-            assuan_disconnect (ctrl->scd_local->ctx);
+            assuan_release (ctrl->scd_local->ctx);
           ctrl->scd_local->ctx = NULL;
         }
       
@@ -563,7 +573,7 @@
 
 
 
-static int
+static gpg_error_t
 learn_status_cb (void *opaque, const char *line)
 {
   struct learn_parm_s *parm = opaque;
@@ -626,7 +636,7 @@
 
 
 
-static int
+static gpg_error_t
 get_serialno_cb (void *opaque, const char *line)
 {
   char **serialno = opaque;
@@ -684,7 +694,7 @@
 
 
 
-static assuan_error_t
+static gpg_error_t
 membuf_data_cb (void *opaque, const void *buffer, size_t length)
 {
   membuf_t *data = opaque;
@@ -695,7 +705,7 @@
 }
   
 /* Handle the NEEDPIN inquiry. */
-static int
+static gpg_error_t
 inq_needpin (void *opaque, const char *line)
 {
   struct inq_needpin_s *parm = opaque;
@@ -991,7 +1001,7 @@
 };
 
 /* Callback function for agent_card_getattr.  */
-static assuan_error_t
+static gpg_error_t
 card_getattr_cb (void *opaque, const char *line)
 {
   struct card_getattr_parm_s *parm = opaque;
@@ -1067,7 +1077,7 @@
 
 
 
-static int
+static gpg_error_t
 pass_status_thru (void *opaque, const char *line)
 {
   assuan_context_t ctx = opaque;
@@ -1087,7 +1097,7 @@
   return 0;
 }
 
-static int
+static gpg_error_t
 pass_data_thru (void *opaque, const void *buffer, size_t length)
 {
   assuan_context_t ctx = opaque;

Modified: trunk/agent/command.c
===================================================================
--- trunk/agent/command.c	2009-09-21 18:26:52 UTC (rev 5160)
+++ trunk/agent/command.c	2009-09-23 00:01:25 UTC (rev 5161)
@@ -34,10 +34,9 @@
 #include <sys/stat.h>
 #include <dirent.h>
 
+#include "agent.h"
 #include <assuan.h>
-
 #include "i18n.h"
-#include "agent.h"
 
 /* maximum allowed size of the inquired ciphertext */
 #define MAXLEN_CIPHERTEXT 4096
@@ -133,7 +132,7 @@
 static gpg_error_t
 write_and_clear_outbuf (assuan_context_t ctx, membuf_t *mb)
 {
-  assuan_error_t ae;
+  gpg_error_t ae;
   void *p;
   size_t n;
 
@@ -354,7 +353,7 @@
    KEY  - Incremented for added or removed private keys.
    CARD - Incremented for changes of the card readers stati.
 */
-static int
+static gpg_error_t
 cmd_geteventcounter (assuan_context_t ctx, char *line)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -403,7 +402,7 @@
 
    Return OK when we have an entry with this fingerprint in our
    trustlist */
-static int
+static gpg_error_t
 cmd_istrusted (assuan_context_t ctx, char *line)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -440,7 +439,7 @@
 /* LISTTRUSTED 
 
    List all entries from the trustlist */
-static int
+static gpg_error_t
 cmd_listtrusted (assuan_context_t ctx, char *line)
 {
   int rc;
@@ -457,7 +456,7 @@
 /* MARKTRUSTED <hexstring_with_fingerprint> <flag> <display_name>
 
    Store a new key in into the trustlist*/
-static int
+static gpg_error_t
 cmd_marktrusted (assuan_context_t ctx, char *line)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -501,7 +500,7 @@
 /* HAVEKEY <hexstring_with_keygrip>
   
    Return success when the secret key is available */
-static int
+static gpg_error_t
 cmd_havekey (assuan_context_t ctx, char *line)
 {
   int rc;
@@ -522,7 +521,7 @@
    SETKEY <hexstring_with_keygrip>
   
    Set the  key used for a sign or decrypt operation */
-static int
+static gpg_error_t
 cmd_sigkey (assuan_context_t ctx, char *line)
 {
   int rc;
@@ -550,7 +549,7 @@
    The description is only valid for the next PKSIGN or PKDECRYPT
    operation.
 */
-static int
+static gpg_error_t
 cmd_setkeydesc (assuan_context_t ctx, char *line)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -584,7 +583,7 @@
 
   The client can use this command to tell the server about the data
   (which usually is a hash) to be signed. */
-static int
+static gpg_error_t
 cmd_sethash (assuan_context_t ctx, char *line)
 {
   int rc;
@@ -662,7 +661,7 @@
 
    Perform the actual sign operation. Neither input nor output are
    sensitive to eavesdropping. */
-static int
+static gpg_error_t
 cmd_pksign (assuan_context_t ctx, char *line)
 {
   int rc;
@@ -696,7 +695,7 @@
 
    Perform the actual decrypt operation.  Input is not 
    sensitive to eavesdropping */
-static int
+static gpg_error_t
 cmd_pkdecrypt (assuan_context_t ctx, char *line)
 {
   int rc;
@@ -744,7 +743,7 @@
    S  OK key created
 */
 
-static int
+static gpg_error_t
 cmd_genkey (assuan_context_t ctx, char *line)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -779,7 +778,7 @@
 /* READKEY <hexstring_with_keygrip>
   
    Return the public key for the given keygrip.  */
-static int
+static gpg_error_t
 cmd_readkey (assuan_context_t ctx, char *line)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -892,7 +891,7 @@
 }
 
 
-static int
+static gpg_error_t
 cmd_keyinfo (assuan_context_t ctx, char *line)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -1014,7 +1013,7 @@
    length has been configured.)
 */
 
-static int
+static gpg_error_t
 cmd_get_passphrase (assuan_context_t ctx, char *line)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -1167,7 +1166,7 @@
    function returns with OK even when there is no cached passphrase.
 */
 
-static int
+static gpg_error_t
 cmd_clear_passphrase (assuan_context_t ctx, char *line)
 {
   char *cacheid = NULL;
@@ -1200,7 +1199,7 @@
    as '+'.
 */
 
-static int
+static gpg_error_t
 cmd_get_confirmation (assuan_context_t ctx, char *line)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -1241,7 +1240,7 @@
 
    Learn something about the currently inserted smartcard.  With
    --send the new certificates are send back.  */
-static int
+static gpg_error_t
 cmd_learn (assuan_context_t ctx, char *line)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -1258,7 +1257,7 @@
 /* PASSWD <hexstring_with_keygrip>
   
    Change the passphrase/PIN for the key identified by keygrip in LINE. */
-static int
+static gpg_error_t
 cmd_passwd (assuan_context_t ctx, char *line)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -1304,7 +1303,7 @@
    the default (currently only a timeout of -1 is allowed, which means
    to never expire it).  If passwd is not provided, ask for it via the
    pinentry module.  */
-static int
+static gpg_error_t
 cmd_preset_passphrase (assuan_context_t ctx, char *line)
 {
   int rc;
@@ -1367,7 +1366,7 @@
   
    This is a general quote command to redirect everything to the
    SCDAEMON. */
-static int
+static gpg_error_t
 cmd_scd (assuan_context_t ctx, char *line)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -1385,7 +1384,7 @@
    Return the value for KEY from the special environment as created by
    PUTVAL.
  */
-static int
+static gpg_error_t
 cmd_getval (assuan_context_t ctx, char *line)
 {
   int rc = 0;
@@ -1442,7 +1441,7 @@
    restrictions.  If that value is not given any value under that KEY
    is removed from this special environment.
 */
-static int
+static gpg_error_t
 cmd_putval (assuan_context_t ctx, char *line)
 {
   int rc = 0;
@@ -1517,7 +1516,7 @@
   session.  This command is useful to pull future pinentries to
   another screen.  It is only required because there is no way in the
   ssh-agent protocol to convey this information.  */
-static int
+static gpg_error_t
 cmd_updatestartuptty (assuan_context_t ctx, char *line)
 {
   static const char *names[] = 
@@ -1576,7 +1575,7 @@
 
    Under Windows we start the agent on the fly.  Thus it also make
    sense to allow a client to stop the agent. */
-static int
+static gpg_error_t
 cmd_killagent (assuan_context_t ctx, char *line)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -1591,7 +1590,7 @@
 
    As signals are inconvenient under Windows, we provide this command
    to allow reloading of the configuration.  */
-static int
+static gpg_error_t
 cmd_reloadagent (assuan_context_t ctx, char *line)
 {
   (void)ctx;
@@ -1615,10 +1614,10 @@
      ssh_socket_name - Return the name of the ssh socket.
      scd_running - Return OK if the SCdaemon is already running.
 
-     cmd_has_option CMD OPT
+ gpg_error_t
                  - Returns OK if the command CMD implements the option OPT.
  */
-static int
+static gpg_error_t
 cmd_getinfo (assuan_context_t ctx, char *line)
 {
   int rc = 0;
@@ -1696,7 +1695,7 @@
 
 
 
-static int
+static gpg_error_t
 option_handler (assuan_context_t ctx, const char *key, const char *value)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -1766,7 +1765,7 @@
 /* Called by libassuan after all commands. ERR is the error from the
    last assuan operation and not the one returned from the command. */
 static void
-post_cmd_notify (assuan_context_t ctx, int err)
+post_cmd_notify (assuan_context_t ctx, gpg_error_t err)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
   
@@ -1782,15 +1781,17 @@
    that the debug output won't get cluttered by this primitive
    command.  */
 static unsigned int
-io_monitor (assuan_context_t ctx, int direction,
+io_monitor (assuan_context_t ctx, void *hook, int direction,
             const char *line, size_t linelen)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
   
+  (void) hook;
+
   /* Note that we only check for the uppercase name.  This allows to
      see the logging for debugging if using a non-upercase command
      name. */
-  if (ctx && !direction 
+  if (ctx && direction == ASSUAN_IO_FROM_PEER
       && linelen >= 15
       && !strncmp (line, "GETEVENTCOUNTER", 15)
       && (linelen == 15 || spacep (line+15)))
@@ -1798,7 +1799,7 @@
       ctrl->server_local->pause_io_logging = 1;
     }
 
-  return ctrl->server_local->pause_io_logging? 1:0;
+  return ctrl->server_local->pause_io_logging? ASSUAN_IO_MONITOR_NOLOG : 0;
 }
 
 
@@ -1822,7 +1823,7 @@
 {
   static struct {
     const char *name;
-    int (*handler)(assuan_context_t, char *line);
+    gpg_error_t (*handler)(assuan_context_t, char *line);
   } table[] = {
     { "GETEVENTCOUNTER",cmd_geteventcounter },
     { "ISTRUSTED",      cmd_istrusted },
@@ -1882,25 +1883,32 @@
 start_command_handler (ctrl_t ctrl, gnupg_fd_t listen_fd, gnupg_fd_t fd)
 {
   int rc;
-  assuan_context_t ctx;
+  assuan_context_t ctx = NULL;
 
+  rc = assuan_new (&ctx);
+  if (rc)
+    {
+      log_error ("failed to allocate assuan context: %s\n", gpg_strerror (rc));
+      agent_exit (2);
+    }
+
   if (listen_fd == GNUPG_INVALID_FD && fd == GNUPG_INVALID_FD)
     {
       int filedes[2];
 
       filedes[0] = 0;
       filedes[1] = 1;
-      rc = assuan_init_pipe_server (&ctx, filedes);
+      rc = assuan_init_pipe_server (ctx, filedes);
     }
   else if (listen_fd != GNUPG_INVALID_FD)
     {
-      rc = assuan_init_socket_server_ext (&ctx, listen_fd, 0);
+      rc = assuan_init_socket_server_ext (ctx, listen_fd, 0);
       /* FIXME: Need to call assuan_sock_set_nonce for Windows.  But
 	 this branch is currently not used.  */
     }
   else 
     {
-      rc = assuan_init_socket_server_ext (&ctx, fd, 2);
+      rc = assuan_init_socket_server_ext (ctx, fd, 2);
     }
   if (rc)
     {
@@ -1927,7 +1935,7 @@
     assuan_set_log_stream (ctx, log_get_stream ());
 
 #ifdef HAVE_ASSUAN_SET_IO_MONITOR
-  assuan_set_io_monitor (ctx, io_monitor);
+  assuan_set_io_monitor (ctx, io_monitor, NULL);
 #endif
 
   for (;;)
@@ -1958,7 +1966,7 @@
   agent_reset_query (ctrl);
 
   /* Cleanup.  */
-  assuan_deinit_server (ctx);
+  assuan_release (ctx);
 #ifdef HAVE_W32_SYSTEM
   if (ctrl->server_local->stopme)
     agent_exit (0);

Modified: trunk/agent/gpg-agent.c
===================================================================
--- trunk/agent/gpg-agent.c	2009-09-21 18:26:52 UTC (rev 5160)
+++ trunk/agent/gpg-agent.c	2009-09-23 00:01:25 UTC (rev 5161)
@@ -471,7 +471,6 @@
           || strcmp (current_logfile, pargs->r.ret_str))
         {
           log_set_file (pargs->r.ret_str);
-          assuan_set_assuan_log_stream (log_get_stream ());
           xfree (current_logfile);
           current_logfile = xtrystrdup (pargs->r.ret_str);
         }
@@ -545,8 +544,8 @@
   int gpgconf_list = 0;
   gpg_error_t err;
   const char *env_file_name = NULL;
+  struct assuan_malloc_hooks malloc_hooks;
 
-
   /* Before we do anything else we save the list of currently open
      file descriptors and the signal mask.  This info is required to
      do the exec call properly. */
@@ -588,10 +587,12 @@
                  NEED_LIBGCRYPT_VERSION, gcry_check_version (NULL) );
     }
 
-  assuan_set_malloc_hooks (gcry_malloc, gcry_realloc, gcry_free);
-  assuan_set_assuan_log_stream (log_get_stream ());
+  malloc_hooks.malloc = gcry_malloc;
+  malloc_hooks.realloc = gcry_realloc;
+  malloc_hooks.free = gcry_free;
+  assuan_set_malloc_hooks (&malloc_hooks);
   assuan_set_assuan_log_prefix (log_get_prefix (NULL));
-  assuan_set_assuan_err_source (GPG_ERR_SOURCE_DEFAULT);
+  assuan_set_gpg_err_source (GPG_ERR_SOURCE_DEFAULT);
 
   setup_libgcrypt_logging ();
   gcry_control (GCRYCTL_USE_SECURE_RNDPOOL);
@@ -917,7 +918,6 @@
                              |JNLIB_LOG_WITH_TIME
                              |JNLIB_LOG_WITH_PID));
       current_logfile = xstrdup (logfile);
-      assuan_set_assuan_log_stream (log_get_stream ());
     }
 
   /* Make sure that we have a default ttyname. */
@@ -2048,7 +2048,7 @@
 
 
 /* Helper for check_own_socket.  */
-static int
+static gpg_error_t
 check_own_socket_pid_cb (void *opaque, const void *buffer, size_t length)
 {
   membuf_t *mb = opaque;
@@ -2065,16 +2065,23 @@
 {
   int rc;
   char *sockname = arg;
-  assuan_context_t ctx;
+  assuan_context_t ctx = NULL;
   membuf_t mb;
   char *buffer;
 
   check_own_socket_running++;
 
-  rc = assuan_socket_connect (&ctx, sockname, (pid_t)(-1));
+  rc = assuan_new (&ctx);
   xfree (sockname);
   if (rc)
     {
+      log_error ("can't allocate assuan context: %s\n", gpg_strerror (rc));
+      goto leave;
+    }
+
+  rc = assuan_socket_connect (ctx, sockname, (pid_t)(-1));
+  if (rc)
+    {
       log_error ("can't connect my own socket: %s\n", gpg_strerror (rc));
       goto leave;
     }
@@ -2099,9 +2106,10 @@
     log_error ("socket is still served by this server\n");
     
   xfree (buffer);
-  assuan_disconnect (ctx);
 
  leave:
+  if (ctx)
+    assuan_release (ctx);
   if (rc)
     {
       /* We may not remove the socket as it is now in use by another
@@ -2159,7 +2167,7 @@
 {
   int rc;
   char *infostr, *p;
-  assuan_context_t ctx;
+  assuan_context_t ctx = NULL;
   int prot, pid;
 
   if (!mode)
@@ -2207,8 +2215,9 @@
       pid = (pid_t)(-1);
     }
 
-
-  rc = assuan_socket_connect (&ctx, infostr, pid);
+  rc = assuan_new (&ctx);
+  if (! rc)
+    rc = assuan_socket_connect (&ctx, infostr, pid);
   xfree (infostr);
   if (rc)
     {
@@ -2217,12 +2226,15 @@
 
       if (!mode && !silent)
         log_error ("can't connect to the agent: %s\n", gpg_strerror (rc));
+
+      if (ctx)
+	assuan_release (ctx);
       return -1;
     }
 
   if (!opt.quiet && !silent)
     log_info ("gpg-agent running and available\n");
 
-  assuan_disconnect (ctx);
+  assuan_release (ctx);
   return 0;
 }

Modified: trunk/common/asshelp.c
===================================================================
--- trunk/common/asshelp.c	2009-09-21 18:26:52 UTC (rev 5160)
+++ trunk/common/asshelp.c	2009-09-23 00:01:25 UTC (rev 5161)
@@ -183,6 +183,13 @@
 
   *r_ctx = NULL;
 
+  rc = assuan_new (&ctx);
+  if (rc)
+    {
+      log_error ("error allocating assuan context: %s\n", gpg_strerror (rc));
+      return rc;
+    }
+
  restart:
   infostr = force_pipe_server? NULL : getenv ("GPG_AGENT_INFO");
   if (!infostr || !*infostr)
@@ -192,7 +199,7 @@
       /* First check whether we can connect at the standard
          socket.  */
       sockname = make_filename (homedir, "S.gpg-agent", NULL);
-      rc = assuan_socket_connect (&ctx, sockname, 0);
+      rc = assuan_socket_connect (ctx, sockname, 0);
 
       if (rc)
         {
@@ -210,6 +217,7 @@
               log_error ("error flushing pending output: %s\n",
                          strerror (errno));
               xfree (sockname);
+	      assuan_release (ctx);
               return tmperr;
             }
           
@@ -239,7 +247,7 @@
                 /* Give the agent some time to prepare itself. */
                 gnupg_sleep (3);
                 /* Now try again to connect the agent.  */
-                rc = assuan_socket_connect (&ctx, sockname, 0);
+                rc = assuan_socket_connect (ctx, sockname, 0);
               }
           }
 #else /*!HAVE_W32_SYSTEM*/
@@ -265,7 +273,7 @@
             no_close_list[i] = -1;
             
             /* Connect to the agent and perform initial handshaking. */
-            rc = assuan_pipe_connect (&ctx, agent_program, argv,
+            rc = assuan_pipe_connect (ctx, agent_program, argv,
                                       no_close_list);
           }
 #endif /*!HAVE_W32_SYSTEM*/
@@ -299,7 +307,7 @@
           goto restart;
         }
 
-      rc = assuan_socket_connect (&ctx, infostr, pid);
+      rc = assuan_socket_connect (ctx, infostr, pid);
       xfree (infostr);
       if (gpg_err_code (rc) == GPG_ERR_ASS_CONNECT_FAILED)
         {
@@ -312,6 +320,7 @@
   if (rc)
     {
       log_error ("can't connect to the agent: %s\n", gpg_strerror (rc));
+      assuan_release (ctx);
       return gpg_error (GPG_ERR_NO_AGENT);
     }
 
@@ -326,7 +335,7 @@
                                     session_env);
   if (rc)
     {
-      assuan_disconnect (ctx);
+      assuan_release (ctx);
       return rc;
     }
 

Modified: trunk/configure.ac
===================================================================
--- trunk/configure.ac	2009-09-21 18:26:52 UTC (rev 5160)
+++ trunk/configure.ac	2009-09-23 00:01:25 UTC (rev 5161)
@@ -42,8 +42,8 @@
 NEED_LIBGCRYPT_API=1
 NEED_LIBGCRYPT_VERSION=1.4.0
 
-NEED_LIBASSUAN_API=1
-NEED_LIBASSUAN_VERSION=1.0.4
+NEED_LIBASSUAN_API=2
+NEED_LIBASSUAN_VERSION=1.1.0
 
 NEED_KSBA_API=1
 NEED_KSBA_VERSION=1.0.2

Modified: trunk/g10/call-agent.c
===================================================================
--- trunk/g10/call-agent.c	2009-09-21 18:26:52 UTC (rev 5160)
+++ trunk/g10/call-agent.c	2009-09-23 00:01:25 UTC (rev 5161)
@@ -29,9 +29,9 @@
 #ifdef HAVE_LOCALE_H
 #include <locale.h>
 #endif
-#include <assuan.h>
 
 #include "gpg.h"
+#include <assuan.h>
 #include "util.h"
 #include "membuf.h"
 #include "options.h"
@@ -77,7 +77,7 @@
 };
 
 
-static int learn_status_cb (void *opaque, const char *line);
+static gpg_error_t learn_status_cb (void *opaque, const char *line);
 
 
 
@@ -230,7 +230,7 @@
 
 
 /* This is a dummy data line callback.  */
-static int
+static gpg_error_t
 dummy_data_cb (void *opaque, const void *buffer, size_t length)
 {
   (void)opaque;
@@ -240,7 +240,7 @@
 }
 
 /* A simple callback used to return the serialnumber of a card.  */
-static int
+static gpg_error_t
 get_serialno_cb (void *opaque, const char *line)
 {
   char **serialno = opaque;
@@ -274,7 +274,7 @@
 
 /* This is the default inquiry callback.  It mainly handles the
    Pinentry notifications.  */
-static int
+static gpg_error_t
 default_inq_cb (void *opaque, const char *line)
 {
   (void)opaque;
@@ -312,7 +312,7 @@
   info->fpr1valid = info->fpr2valid = info->fpr3valid = 0;
 }
 
-static int
+static gpg_error_t
 learn_status_cb (void *opaque, const char *line)
 {
   struct agent_card_info_s *parm = opaque;
@@ -597,7 +597,7 @@
 /* Handle a CERTDATA inquiry.  Note, we only send the data,
    assuan_transact takes care of flushing and writing the END
    command. */
-static int
+static gpg_error_t
 inq_writecert_parms (void *opaque, const char *line)
 {
   int rc;
@@ -645,7 +645,7 @@
 
 /* Handle a KEYDATA inquiry.  Note, we only send the data,
    assuan_transact takes care of flushing and writing the end */
-static int
+static gpg_error_t
 inq_writekey_parms (void *opaque, const char *line)
 {
   int rc;
@@ -695,7 +695,7 @@
 
 
 /* Status callback for the SCD GENKEY command. */
-static int
+static gpg_error_t
 scd_genkey_cb (void *opaque, const char *line)
 {
   struct agent_card_genkey_s *parm = opaque;
@@ -882,7 +882,7 @@
 
 
 
-static int
+static gpg_error_t
 membuf_data_cb (void *opaque, const void *buffer, size_t length)
 {
   membuf_t *data = opaque;

Modified: trunk/g10/gpg.c
===================================================================
--- trunk/g10/gpg.c	2009-09-21 18:26:52 UTC (rev 5160)
+++ trunk/g10/gpg.c	2009-09-23 00:01:25 UTC (rev 5161)
@@ -30,13 +30,13 @@
 #include <sys/stat.h> /* for stat() */
 #endif
 #include <fcntl.h>
-#include <assuan.h>
 #ifdef HAVE_W32_SYSTEM
 #include <windows.h>
 #endif
 
 #define INCLUDED_BY_MAIN_MODULE 1
 #include "gpg.h"
+#include <assuan.h>
 #include "packet.h"
 #include "../common/iobuf.h"
 #include "util.h"
@@ -1905,6 +1905,7 @@
     int fpr_maybe_cmd = 0; /* --fingerprint maybe a command.  */
     int any_explicit_recipient = 0;
     int require_secmem=0,got_secmem=0;
+    struct assuan_malloc_hooks malloc_hooks;
 
 #ifdef __riscos__
     opt.lock_once = 1;
@@ -2054,8 +2055,11 @@
     /* Okay, we are now working under our real uid */
 
     /* malloc hooks go here ... */
-    assuan_set_malloc_hooks (gcry_malloc, gcry_realloc, gcry_free);
-    assuan_set_assuan_err_source (GPG_ERR_SOURCE_DEFAULT);
+    malloc_hooks.malloc = gcry_malloc;
+    malloc_hooks.realloc = gcry_realloc;
+    malloc_hooks.free = gcry_free;
+    assuan_set_malloc_hooks (&malloc_hooks);
+    assuan_set_gpg_err_source (GPG_ERR_SOURCE_DEFAULT);
  
 
     /* Try for a version specific config file first */

Modified: trunk/g10/server.c
===================================================================
--- trunk/g10/server.c	2009-09-21 18:26:52 UTC (rev 5160)
+++ trunk/g10/server.c	2009-09-23 00:01:25 UTC (rev 5161)
@@ -26,9 +26,9 @@
 #include <ctype.h>
 #include <unistd.h>
 
-#include <assuan.h>
 
 #include "gpg.h"
+#include <assuan.h>
 #include "util.h"
 #include "i18n.h"
 #include "options.h"
@@ -64,7 +64,7 @@
 
 /* Called by libassuan for Assuan options.  See the Assuan manual for
    details. */
-static int
+static gpg_error_t
 option_handler (assuan_context_t ctx, const char *key, const char *value)
 {
 /*   ctrl_t ctrl = assuan_get_pointer (ctx); */
@@ -168,7 +168,7 @@
    encrypt at all if not all recipients are valid, the client has to
    take care of this.  All RECIPIENT commands are cumulative until a
    RESET or an successful ENCRYPT command.  */
-static int 
+static gpg_error_t
 cmd_recipient (assuan_context_t ctx, char *line)
 {
   (void)ctx;
@@ -193,7 +193,7 @@
 
    Note that this command returns an INV_RECP status which is a bit
    strange, but they are very similar.  */
-static int 
+static gpg_error_t
 cmd_signer (assuan_context_t ctx, char *line)
 {
   (void)ctx;
@@ -216,7 +216,7 @@
    This command should in general not fail, as all necessary checks
    have been done while setting the recipients.  The input and output
    pipes are closed.  */
-static int 
+static gpg_error_t
 cmd_encrypt (assuan_context_t ctx, char *line)
 {
   (void)ctx;
@@ -230,7 +230,7 @@
 
    This performs the decrypt operation after doing some checks on the
    internal state (e.g. that only needed data has been set).   */
-static int 
+static gpg_error_t
 cmd_decrypt (assuan_context_t ctx, char *line)
 {
   (void)ctx;
@@ -249,7 +249,7 @@
    If the signature is a detached one, the server will inquire about
    the signed material and the client must provide it.
  */
-static int 
+static gpg_error_t
 cmd_verify (assuan_context_t ctx, char *line)
 {
   int rc;
@@ -296,7 +296,7 @@
    Sign the data set with the INPUT command and write it to the sink
    set by OUTPUT.  With "--detached" specified, a detached signature
    is created.  */
-static int 
+static gpg_error_t
 cmd_sign (assuan_context_t ctx, char *line)
 {
   (void)ctx;
@@ -310,7 +310,7 @@
 
   Import keys as read from the input-fd, return status message for
   each imported one.  The import checks the validity of the key.  */
-static int 
+static gpg_error_t
 cmd_import (assuan_context_t ctx, char *line)
 {
   (void)ctx;
@@ -330,7 +330,7 @@
    Recall that in general the output format is set with the OUTPUT
    command.
  */
-static int 
+static gpg_error_t
 cmd_export (assuan_context_t ctx, char *line)
 {
   (void)ctx;
@@ -344,7 +344,7 @@
 
     Fixme
 */
-static int 
+static gpg_error_t
 cmd_delkeys (assuan_context_t ctx, char *line)
 {
   (void)ctx;
@@ -358,7 +358,7 @@
 
    Set the file descriptor to read a message which is used with
    detached signatures.  */
-static int 
+static gpg_error_t
 cmd_message (assuan_context_t ctx, char *line)
 {
   int rc;
@@ -381,7 +381,7 @@
 
    fixme
 */
-static int 
+static gpg_error_t
 do_listkeys (assuan_context_t ctx, char *line, int mode)
 {
   (void)ctx;
@@ -392,14 +392,14 @@
 }
 
 
-static int 
+static gpg_error_t
 cmd_listkeys (assuan_context_t ctx, char *line)
 {
   return do_listkeys (ctx, line, 3);
 }
 
 
-static int 
+static gpg_error_t
 cmd_listsecretkeys (assuan_context_t ctx, char *line)
 {
   return do_listkeys (ctx, line, 2);
@@ -412,7 +412,7 @@
    Read the parameters in native format from the input fd and create a
    new OpenPGP key.
  */
-static int 
+static gpg_error_t
 cmd_genkey (assuan_context_t ctx, char *line)
 {
   (void)ctx;
@@ -430,7 +430,7 @@
      pid         - Return the process id of the server.
 
  */
-static int
+static gpg_error_t
 cmd_getinfo (assuan_context_t ctx, char *line)
 {
   int rc;
@@ -461,7 +461,7 @@
   static struct 
   {
     const char *name;
-    int (*handler)(assuan_context_t, char *line);
+    gpg_error_t (*handler)(assuan_context_t, char *line);
   } table[] = {
     { "RECIPIENT",     cmd_recipient },
     { "SIGNER",        cmd_signer    },
@@ -502,7 +502,7 @@
 {
   int rc;
   int filedes[2];
-  assuan_context_t ctx;
+  assuan_context_t ctx = NULL;
   static const char hello[] = ("GNU Privacy Guard's OpenPGP server "
                                VERSION " ready");
 
@@ -511,9 +511,17 @@
      called with a socketpair and ignore FILEDES in this case.  */
   filedes[0] = 0;
   filedes[1] = 1;
-  rc = assuan_init_pipe_server (&ctx, filedes);
+  rc = assuan_new (&ctx);
   if (rc)
     {
+      log_error ("failed to allocate the assuan context: %s\n",
+		 gpg_strerror (rc));
+      goto leave;
+    }
+  
+  rc = assuan_init_pipe_server (ctx, filedes);
+  if (rc)
+    {
       log_error ("failed to initialize the server: %s\n", gpg_strerror (rc));
       goto leave;
     }
@@ -590,7 +598,7 @@
  leave:
   xfree (ctrl->server_local);
   ctrl->server_local = NULL;
-  assuan_deinit_server (ctx);
+  assuan_release (ctx);
   return rc;
 }
 

Modified: trunk/scd/command.c
===================================================================
--- trunk/scd/command.c	2009-09-21 18:26:52 UTC (rev 5160)
+++ trunk/scd/command.c	2009-09-23 00:01:25 UTC (rev 5161)
@@ -30,9 +30,8 @@
 # include <pth.h>
 #endif
 
+#include "scdaemon.h"
 #include <assuan.h>
-
-#include "scdaemon.h"
 #include <ksba.h>
 #include "app-common.h"
 #include "apdu.h" /* Required for apdu_*_reader (). */
@@ -348,7 +347,7 @@
 }
 
 
-static int
+static gpg_error_t
 option_handler (assuan_context_t ctx, const char *key, const char *value)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -401,7 +400,7 @@
 /* If the card has not yet been opened, do it.  Note that this
    function returns an Assuan error, so don't map the error a second
    time.  */
-static assuan_error_t
+static gpg_error_t
 open_card (ctrl_t ctrl, const char *apptype)
 {
   gpg_error_t err;
@@ -483,7 +482,7 @@
    changes between operations; i.e. the client can assume that all
    operations are done on the same card unless he calls this function.
  */
-static int
+static gpg_error_t
 cmd_serialno (assuan_context_t ctx, char *line)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -590,7 +589,7 @@
      
    Note, that this function may even be used on a locked card.
 */
-static int
+static gpg_error_t
 cmd_learn (assuan_context_t ctx, char *line)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -662,7 +661,7 @@
 
    Note, that this function may even be used on a locked card.
  */
-static int
+static gpg_error_t
 cmd_readcert (assuan_context_t ctx, char *line)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -699,7 +698,7 @@
 
    Note, that this function may even be used on a locked card.
   */
-static int
+static gpg_error_t
 cmd_readkey (assuan_context_t ctx, char *line)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -780,7 +779,7 @@
 
    The client should use this command to tell us the data he want to
    sign.  */
-static int
+static gpg_error_t
 cmd_setdata (assuan_context_t ctx, char *line)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -878,7 +877,7 @@
    The --hash option is optional; the default is SHA1.
 
  */
-static int
+static gpg_error_t
 cmd_pksign (assuan_context_t ctx, char *line)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -948,7 +947,7 @@
 /* PKAUTH <hexified_id>
 
  */
-static int
+static gpg_error_t
 cmd_pkauth (assuan_context_t ctx, char *line)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -998,7 +997,7 @@
 /* PKDECRYPT <hexified_id>
 
  */
-static int
+static gpg_error_t
 cmd_pkdecrypt (assuan_context_t ctx, char *line)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -1052,7 +1051,7 @@
  
    Note, that this function may even be used on a locked card.
 */
-static int
+static gpg_error_t
 cmd_getattr (assuan_context_t ctx, char *line)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -1091,7 +1090,7 @@
    A PIN will be requested for most NAMEs.  See the corresponding
    setattr function of the actually used application (app-*.c) for
    details.  */
-static int
+static gpg_error_t
 cmd_setattr (assuan_context_t ctx, char *orig_line)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -1142,7 +1141,7 @@
    In almost all cases a a PIN will be requested.  See the related
    writecert function of the actually used application (app-*.c) for
    details.  */
-static int
+static gpg_error_t
 cmd_writecert (assuan_context_t ctx, char *line)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -1207,7 +1206,7 @@
    A PIN will be requested for most NAMEs.  See the corresponding
    writekey function of the actually used application (app-*.c) for
    details.  */
-static int
+static gpg_error_t
 cmd_writekey (assuan_context_t ctx, char *line)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -1283,7 +1282,7 @@
    READKEY command.
 
  */
-static int
+static gpg_error_t
 cmd_genkey (assuan_context_t ctx, char *line)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -1342,7 +1341,7 @@
 
    Note, that this function may be even be used on a locked card.
 */
-static int
+static gpg_error_t
 cmd_random (assuan_context_t ctx, char *line)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -1384,7 +1383,7 @@
    the card holder verfication vector CHVNO.  The option --nullpin is
    used for TCOS cards to set the initial PIN.  The format of CHVNO
    depends on the card application.  */
-static int
+static gpg_error_t
 cmd_passwd (assuan_context_t ctx, char *line)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -1461,7 +1460,7 @@
       unblock each other.
 
  */
-static int
+static gpg_error_t
 cmd_checkpin (assuan_context_t ctx, char *line)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -1504,7 +1503,7 @@
    If the option --wait is given the command will wait until a
    lock has been released.
  */
-static int
+static gpg_error_t
 cmd_lock (assuan_context_t ctx, char *line)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -1542,7 +1541,7 @@
 
    Release exclusive card access.
  */
-static int
+static gpg_error_t
 cmd_unlock (assuan_context_t ctx, char *line)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -1594,7 +1593,7 @@
                  first field is the name.
 */
 
-static int
+static gpg_error_t
 cmd_getinfo (assuan_context_t ctx, char *line)
 {
   int rc = 0;
@@ -1685,7 +1684,7 @@
    command; i.e. to select another application. 
 */
 
-static int
+static gpg_error_t
 cmd_restart (assuan_context_t ctx, char *line)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -1711,7 +1710,7 @@
    Disconnect the card if it is not any longer used by other
    connections and the backend supports a disconnect operation. 
  */
-static int
+static gpg_error_t
 cmd_disconnect (assuan_context_t ctx, char *line)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -1743,7 +1742,7 @@
    length up to N bytes.  If N is not given a default value is used
    (currently 4096).
  */
-static int
+static gpg_error_t
 cmd_apdu (assuan_context_t ctx, char *line)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -1824,7 +1823,7 @@
 
 
 /* KILLSCD - Commit suicide. */
-static int
+static gpg_error_t
 cmd_killscd (assuan_context_t ctx, char *line)
 {
   ctrl_t ctrl = assuan_get_pointer (ctx);
@@ -1843,7 +1842,7 @@
 {
   static struct {
     const char *name;
-    int (*handler)(assuan_context_t, char *line);
+    gpg_error_t (*handler)(assuan_context_t, char *line);
   } table[] = {
     { "SERIALNO",     cmd_serialno },
     { "LEARN",        cmd_learn },
@@ -1895,20 +1894,28 @@
 scd_command_handler (ctrl_t ctrl, int fd)
 {
   int rc;
-  assuan_context_t ctx;
+  assuan_context_t ctx = NULL;
   int stopme;
   
+  rc = assuan_new (&ctx);
+  if (rc)
+    {
+      log_error ("failed to allocate assuan context: %s\n",
+                 gpg_strerror (rc));
+      scd_exit (2);
+    }
+
   if (fd == -1)
     {
       int filedes[2];
 
       filedes[0] = 0;
       filedes[1] = 1;
-      rc = assuan_init_pipe_server (&ctx, filedes);
+      rc = assuan_init_pipe_server (ctx, filedes);
     }
   else
     {
-      rc = assuan_init_socket_server_ext (&ctx, INT2FD(fd), 2);
+      rc = assuan_init_socket_server_ext (ctx, INT2FD(fd), 2);
     }
   if (rc)
     {
@@ -1987,7 +1994,7 @@
   ctrl->server_local = NULL;
 
   /* Release the Assuan context.  */
-  assuan_deinit_server (ctx);
+  assuan_release (ctx);
 
   if (stopme)
     scd_exit (0);

Modified: trunk/scd/scdaemon.c
===================================================================
--- trunk/scd/scdaemon.c	2009-09-21 18:26:52 UTC (rev 5160)
+++ trunk/scd/scdaemon.c	2009-09-23 00:01:25 UTC (rev 5161)
@@ -370,7 +370,8 @@
   const char *config_filename = NULL;
   int allow_coredump = 0;
   int standard_socket = 0;
-
+  struct assuan_malloc_hooks malloc_hooks;
+  
   set_strusage (my_strusage);
   gcry_control (GCRYCTL_SUSPEND_SECMEM_WARN);
   /* Please note that we may running SUID(ROOT), so be very CAREFUL
@@ -403,10 +404,12 @@
 
   ksba_set_malloc_hooks (gcry_malloc, gcry_realloc, gcry_free);
 
-  assuan_set_malloc_hooks (gcry_malloc, gcry_realloc, gcry_free);
-  assuan_set_assuan_log_stream (log_get_stream ());
+  malloc_hooks.malloc = gcry_malloc;
+  malloc_hooks.realloc = gcry_realloc;
+  malloc_hooks.free = gcry_free;
+  assuan_set_malloc_hooks (&malloc_hooks);
   assuan_set_assuan_log_prefix (log_get_prefix (NULL));
-  assuan_set_assuan_err_source (GPG_ERR_SOURCE_DEFAULT);
+  assuan_set_gpg_err_source (GPG_ERR_SOURCE_DEFAULT);
 
   setup_libgcrypt_logging ();
   gcry_control (GCRYCTL_USE_SECURE_RNDPOOL);

Modified: trunk/sm/call-dirmngr.c
===================================================================




More information about the Gnupg-commits mailing list