[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