1
0
Fork 0
mirror of git://git.gnupg.org/gnupg.git synced 2025-07-02 22:46:30 +02:00

The big Assuan error code removal.

This commit is contained in:
Werner Koch 2006-09-06 16:35:52 +00:00
parent 7b9fa9da99
commit eef036df23
54 changed files with 671 additions and 603 deletions

View file

@ -1,3 +1,18 @@
2006-09-06 Werner Koch <wk@g10code.com>
* query.c: Renamed to ..
* call-pinentry.c: .. this.
* agent.h (out_of_core): Removed.
(CTRL): Removed and changed everywhere to ctrl_t.
Replaced all Assuan error codes by libgpg-error codes. Removed
all map_to_assuan_status and map_assuan_err.
* gpg-agent.c (main): Call assuan_set_assuan_err_source to have Assuan
switch to gpg-error codes.
* command.c (set_error): Adjusted.
2006-09-04 Werner Koch <wk@g10code.com>
* command.c (percent_plus_unescape): New.
@ -13,7 +28,7 @@
2006-07-31 Werner Koch <wk@g10code.com>
* preset-passphrase.c (make_hexstring): For conistency use
* preset-passphrase.c (make_hexstring): For consistency use
xtrymalloc and changed caller to use xfree. Fixed function
comment.

View file

@ -32,7 +32,7 @@ AM_CFLAGS = $(LIBGCRYPT_CFLAGS) $(LIBASSUAN_CFLAGS) $(PTH_CFLAGS)
gpg_agent_SOURCES = \
gpg-agent.c agent.h \
command.c command-ssh.c \
query.c \
call-pinentry.c \
cache.c \
trans.c \
findkey.c \

View file

@ -36,18 +36,12 @@
#include "../common/errors.h"
#include "membuf.h"
/* Convenience function to be used instead of returning the old
GNUPG_Out_Of_Core. */
static inline gpg_error_t
out_of_core (void)
{
return gpg_error (gpg_err_code_from_errno (errno));
}
#define MAX_DIGEST_LEN 24
/* A large struct name "opt" to keep global flags */
struct {
struct
{
unsigned int debug; /* Debug flags (DBG_foo_VALUE) */
int verbose; /* Verbosity level */
int quiet; /* Be as quiet as possible */
@ -136,11 +130,12 @@ struct server_control_s
int use_auth_call; /* Hack to send the PKAUTH command instead of the
PKSIGN command to the scdaemon. */
};
typedef struct server_control_s *CTRL;
typedef struct server_control_s *ctrl_t;
struct pin_entry_info_s {
struct pin_entry_info_s
{
int min_digits; /* min. number of digits required or 0 for freeform entry */
int max_digits; /* max. number of allowed digits allowed*/
int max_tries;

View file

@ -1,4 +1,4 @@
/* query.c - fork of the pinentry to query stuff from the user
/* call-pinnetry.c - fork of the pinentry to query stuff from the user
* Copyright (C) 2001, 2002, 2004 Free Software Foundation, Inc.
*
* This file is part of GnuPG.
@ -32,10 +32,10 @@
#include <sys/wait.h>
#endif
#include <pth.h>
#include <assuan.h>
#include "agent.h"
#include "i18n.h"
#include <assuan.h>
#ifdef _POSIX_OPEN_MAX
#define MAX_OPEN_FDS _POSIX_OPEN_MAX
@ -176,7 +176,7 @@ start_pinentry (ctrl_t ctrl)
{
int rc;
const char *pgmname;
ASSUAN_CONTEXT ctx;
assuan_context_t ctx;
const char *argv[5];
int no_close_list[3];
int i;
@ -238,12 +238,12 @@ start_pinentry (ctrl_t ctrl)
no_close_list[i] = -1;
/* Connect to the pinentry and perform initial handshaking */
rc = assuan_pipe_connect2 (&ctx, opt.pinentry_program, (char**)argv,
rc = assuan_pipe_connect2 (&ctx, opt.pinentry_program, argv,
no_close_list, atfork_cb, NULL);
if (rc)
{
log_error ("can't connect to the PIN entry module: %s\n",
assuan_strerror (rc));
gpg_strerror (rc));
return unlock_pinentry (gpg_error (GPG_ERR_NO_PIN_ENTRY));
}
entry_ctx = ctx;
@ -255,7 +255,7 @@ start_pinentry (ctrl_t ctrl)
opt.no_grab? "OPTION no-grab":"OPTION grab",
NULL, NULL, NULL, NULL, NULL, NULL);
if (rc)
return unlock_pinentry (map_assuan_err (rc));
return unlock_pinentry (rc);
if (ctrl->ttyname)
{
char *optstr;
@ -265,7 +265,7 @@ start_pinentry (ctrl_t ctrl)
NULL);
free (optstr);
if (rc)
return unlock_pinentry (map_assuan_err (rc));
return unlock_pinentry (rc);
}
if (ctrl->ttytype)
{
@ -275,7 +275,7 @@ start_pinentry (ctrl_t ctrl)
rc = assuan_transact (entry_ctx, optstr, NULL, NULL, NULL, NULL, NULL,
NULL);
if (rc)
return unlock_pinentry (map_assuan_err (rc));
return unlock_pinentry (rc);
}
if (ctrl->lc_ctype)
{
@ -285,7 +285,7 @@ start_pinentry (ctrl_t ctrl)
rc = assuan_transact (entry_ctx, optstr, NULL, NULL, NULL, NULL, NULL,
NULL);
if (rc)
return unlock_pinentry (map_assuan_err (rc));
return unlock_pinentry (rc);
}
if (ctrl->lc_messages)
{
@ -295,13 +295,13 @@ start_pinentry (ctrl_t ctrl)
rc = assuan_transact (entry_ctx, optstr, NULL, NULL, NULL, NULL, NULL,
NULL);
if (rc)
return unlock_pinentry (map_assuan_err (rc));
return unlock_pinentry (rc);
}
return 0;
}
static AssuanError
static int
getpin_cb (void *opaque, const void *buffer, size_t length)
{
struct entry_parm_s *parm = opaque;
@ -311,7 +311,7 @@ getpin_cb (void *opaque, const void *buffer, size_t length)
/* we expect the pin to fit on one line */
if (parm->lines || length >= parm->size)
return ASSUAN_Too_Much_Data;
return gpg_error (GPG_ERR_ASS_TOO_MUCH_DATA);
/* fixme: we should make sure that the assuan buffer is allocated in
secure memory or read the response byte by byte */
@ -372,14 +372,14 @@ agent_askpin (ctrl_t ctrl,
line[DIM(line)-1] = 0;
rc = assuan_transact (entry_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
if (rc)
return unlock_pinentry (map_assuan_err (rc));
return unlock_pinentry (rc);
snprintf (line, DIM(line)-1, "SETPROMPT %s",
prompt_text? prompt_text : is_pin? "PIN:" : "Passphrase:");
line[DIM(line)-1] = 0;
rc = assuan_transact (entry_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
if (rc)
return unlock_pinentry (map_assuan_err (rc));
return unlock_pinentry (rc);
if (initial_errtext)
@ -389,7 +389,7 @@ agent_askpin (ctrl_t ctrl,
rc = assuan_transact (entry_ctx, line,
NULL, NULL, NULL, NULL, NULL, NULL);
if (rc)
return unlock_pinentry (map_assuan_err (rc));
return unlock_pinentry (rc);
}
for (;pininfo->failed_tries < pininfo->max_tries; pininfo->failed_tries++)
@ -407,17 +407,17 @@ agent_askpin (ctrl_t ctrl,
rc = assuan_transact (entry_ctx, line,
NULL, NULL, NULL, NULL, NULL, NULL);
if (rc)
return unlock_pinentry (map_assuan_err (rc));
return unlock_pinentry (rc);
errtext = NULL;
}
rc = assuan_transact (entry_ctx, "GETPIN", getpin_cb, &parm,
NULL, NULL, NULL, NULL);
if (rc == ASSUAN_Too_Much_Data)
if (gpg_err_code (rc) == GPG_ERR_ASS_TOO_MUCH_DATA)
errtext = is_pin? _("PIN too long")
: _("Passphrase too long");
else if (rc)
return unlock_pinentry (map_assuan_err (rc));
return unlock_pinentry (rc);
if (!errtext && pininfo->min_digits)
{
@ -443,7 +443,7 @@ agent_askpin (ctrl_t ctrl,
errtext = (is_pin? _("Bad PIN")
: _("Bad Passphrase"));
else if (rc)
return unlock_pinentry (map_assuan_err (rc));
return unlock_pinentry (rc);
}
if (!errtext)
@ -491,13 +491,13 @@ agent_get_passphrase (ctrl_t ctrl,
line[DIM(line)-1] = 0;
rc = assuan_transact (entry_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
if (rc)
return unlock_pinentry (map_assuan_err (rc));
return unlock_pinentry (rc);
snprintf (line, DIM(line)-1, "SETPROMPT %s", prompt);
line[DIM(line)-1] = 0;
rc = assuan_transact (entry_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
if (rc)
return unlock_pinentry (map_assuan_err (rc));
return unlock_pinentry (rc);
if (errtext)
{
@ -505,7 +505,7 @@ agent_get_passphrase (ctrl_t ctrl,
line[DIM(line)-1] = 0;
rc = assuan_transact (entry_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
if (rc)
return unlock_pinentry (map_assuan_err (rc));
return unlock_pinentry (rc);
}
memset (&parm, 0, sizeof parm);
@ -519,7 +519,7 @@ agent_get_passphrase (ctrl_t ctrl,
if (rc)
{
xfree (parm.buffer);
return unlock_pinentry (map_assuan_err (rc));
return unlock_pinentry (rc);
}
hexstring = gcry_malloc_secure (strlen ((char*)parm.buffer)*2+1);
@ -562,7 +562,7 @@ agent_get_confirmation (ctrl_t ctrl,
line[DIM(line)-1] = 0;
rc = assuan_transact (entry_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
if (rc)
return unlock_pinentry (map_assuan_err (rc));
return unlock_pinentry (rc);
if (ok)
{
@ -570,7 +570,7 @@ agent_get_confirmation (ctrl_t ctrl,
line[DIM(line)-1] = 0;
rc = assuan_transact (entry_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
if (rc)
return unlock_pinentry (map_assuan_err (rc));
return unlock_pinentry (rc);
}
if (cancel)
{
@ -578,11 +578,11 @@ agent_get_confirmation (ctrl_t ctrl,
line[DIM(line)-1] = 0;
rc = assuan_transact (entry_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
if (rc)
return unlock_pinentry (map_assuan_err (rc));
return unlock_pinentry (rc);
}
rc = assuan_transact (entry_ctx, "CONFIRM", NULL, NULL, NULL, NULL, NULL, NULL);
return unlock_pinentry (map_assuan_err (rc));
return unlock_pinentry (rc);
}
@ -621,7 +621,7 @@ agent_popup_message_start (ctrl_t ctrl, const char *desc,
line[DIM(line)-1] = 0;
rc = assuan_transact (entry_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL);
if (rc)
return unlock_pinentry (map_assuan_err (rc));
return unlock_pinentry (rc);
if (ok_btn)
{
@ -629,7 +629,7 @@ agent_popup_message_start (ctrl_t ctrl, const char *desc,
line[DIM(line)-1] = 0;
rc = assuan_transact (entry_ctx, line, NULL,NULL,NULL,NULL,NULL,NULL);
if (rc)
return unlock_pinentry (map_assuan_err (rc));
return unlock_pinentry (rc);
}
if (cancel_btn)
{
@ -637,7 +637,7 @@ agent_popup_message_start (ctrl_t ctrl, const char *desc,
line[DIM(line)-1] = 0;
rc = assuan_transact (entry_ctx, line, NULL,NULL,NULL,NULL,NULL,NULL);
if (rc)
return unlock_pinentry (map_assuan_err (rc));
return unlock_pinentry (rc);
}
tattr = pth_attr_new();

View file

@ -266,7 +266,7 @@ start_scd (ctrl_t ctrl)
if (rc)
{
log_error ("can't connect to socket `%s': %s\n",
socket_name, assuan_strerror (rc));
socket_name, gpg_strerror (rc));
err = gpg_error (GPG_ERR_NO_SCDAEMON);
goto leave;
}
@ -315,12 +315,12 @@ start_scd (ctrl_t ctrl)
no_close_list[i] = -1;
/* Connect to the pinentry and perform initial handshaking */
rc = assuan_pipe_connect2 (&ctx, opt.scdaemon_program, (char**)argv,
rc = assuan_pipe_connect2 (&ctx, opt.scdaemon_program, argv,
no_close_list, atfork_cb, NULL);
if (rc)
{
log_error ("can't connect to the SCdaemon: %s\n",
assuan_strerror (rc));
gpg_strerror (rc));
err = gpg_error (GPG_ERR_NO_SCDAEMON);
goto leave;
}
@ -554,7 +554,7 @@ unescape_status_string (const unsigned char *s)
static AssuanError
static int
learn_status_cb (void *opaque, const char *line)
{
struct learn_parm_s *parm = opaque;
@ -610,14 +610,14 @@ agent_card_learn (ctrl_t ctrl,
NULL, NULL, NULL, NULL,
learn_status_cb, &parm);
if (rc)
return unlock_scd (ctrl, map_assuan_err (rc));
return unlock_scd (ctrl, rc);
return unlock_scd (ctrl, 0);
}
static AssuanError
static int
get_serialno_cb (void *opaque, const char *line)
{
char **serialno = opaque;
@ -633,14 +633,14 @@ get_serialno_cb (void *opaque, const char *line)
if (keywordlen == 8 && !memcmp (keyword, "SERIALNO", keywordlen))
{
if (*serialno)
return ASSUAN_Unexpected_Status;
return gpg_error (GPG_ERR_CONFLICT); /* Unexpected status line. */
for (n=0,s=line; hexdigitp (s); s++, n++)
;
if (!n || (n&1)|| !(spacep (s) || !*s) )
return ASSUAN_Invalid_Status;
return gpg_error (GPG_ERR_ASS_PARAMETER);
*serialno = xtrymalloc (n+1);
if (!*serialno)
return ASSUAN_Out_Of_Core;
return out_of_core ();
memcpy (*serialno, line, n);
(*serialno)[n] = 0;
}
@ -666,7 +666,7 @@ agent_card_serialno (ctrl_t ctrl, char **r_serialno)
if (rc)
{
xfree (serialno);
return unlock_scd (ctrl, map_assuan_err (rc));
return unlock_scd (ctrl, rc);
}
*r_serialno = serialno;
return unlock_scd (ctrl, 0);
@ -675,7 +675,7 @@ agent_card_serialno (ctrl_t ctrl, char **r_serialno)
static AssuanError
static int
membuf_data_cb (void *opaque, const void *buffer, size_t length)
{
membuf_t *data = opaque;
@ -686,7 +686,7 @@ membuf_data_cb (void *opaque, const void *buffer, size_t length)
}
/* Handle the NEEDPIN inquiry. */
static AssuanError
static int
inq_needpin (void *opaque, const char *line)
{
struct inq_needpin_s *parm = opaque;
@ -703,11 +703,9 @@ inq_needpin (void *opaque, const char *line)
pinlen = 90;
pin = gcry_malloc_secure (pinlen);
if (!pin)
return ASSUAN_Out_Of_Core;
return out_of_core ();
rc = parm->getpin_cb (parm->getpin_cb_arg, line, pin, pinlen);
if (rc)
rc = ASSUAN_Canceled;
if (!rc)
rc = assuan_send_data (parm->ctx, pin, pinlen);
xfree (pin);
@ -723,13 +721,11 @@ inq_needpin (void *opaque, const char *line)
line++;
rc = parm->getpin_cb (parm->getpin_cb_arg, line, NULL, code);
if (rc)
rc = ASSUAN_Canceled;
}
else
{
log_error ("unsupported inquiry `%s'\n", line);
rc = ASSUAN_Inquire_Unknown;
rc = gpg_error (GPG_ERR_ASS_UNKNOWN_INQUIRE);
}
return rc;
@ -769,7 +765,7 @@ agent_card_pksign (ctrl_t ctrl,
rc = assuan_transact (ctrl->scd_local->ctx, line,
NULL, NULL, NULL, NULL, NULL, NULL);
if (rc)
return unlock_scd (ctrl, map_assuan_err (rc));
return unlock_scd (ctrl, rc);
init_membuf (&data, 1024);
inqparm.ctx = ctrl->scd_local->ctx;
@ -785,7 +781,7 @@ agent_card_pksign (ctrl_t ctrl,
if (rc)
{
xfree (get_membuf (&data, &len));
return unlock_scd (ctrl, map_assuan_err (rc));
return unlock_scd (ctrl, rc);
}
sigbuf = get_membuf (&data, &sigbuflen);
@ -839,7 +835,7 @@ agent_card_pkdecrypt (ctrl_t ctrl,
rc = assuan_transact (ctrl->scd_local->ctx, line,
NULL, NULL, NULL, NULL, NULL, NULL);
if (rc)
return unlock_scd (ctrl, map_assuan_err (rc));
return unlock_scd (ctrl, rc);
init_membuf (&data, 1024);
inqparm.ctx = ctrl->scd_local->ctx;
@ -854,7 +850,7 @@ agent_card_pkdecrypt (ctrl_t ctrl,
if (rc)
{
xfree (get_membuf (&data, &len));
return unlock_scd (ctrl, map_assuan_err (rc));
return unlock_scd (ctrl, rc);
}
*r_buf = get_membuf (&data, r_buflen);
if (!*r_buf)
@ -890,7 +886,7 @@ agent_card_readcert (ctrl_t ctrl,
if (rc)
{
xfree (get_membuf (&data, &len));
return unlock_scd (ctrl, map_assuan_err (rc));
return unlock_scd (ctrl, rc);
}
*r_buf = get_membuf (&data, r_buflen);
if (!*r_buf)
@ -926,7 +922,7 @@ agent_card_readkey (ctrl_t ctrl, const char *id, unsigned char **r_buf)
if (rc)
{
xfree (get_membuf (&data, &len));
return unlock_scd (ctrl, map_assuan_err (rc));
return unlock_scd (ctrl, rc);
}
*r_buf = get_membuf (&data, &buflen);
if (!*r_buf)
@ -1008,9 +1004,9 @@ agent_card_getattr (ctrl_t ctrl, const char *name, char **result)
if (err)
return err;
err = map_assuan_err (assuan_transact (ctrl->scd_local->ctx, line,
NULL, NULL, NULL, NULL,
card_getattr_cb, &parm));
err = assuan_transact (ctrl->scd_local->ctx, line,
NULL, NULL, NULL, NULL,
card_getattr_cb, &parm);
if (!err && parm.error)
err = gpg_error_from_errno (parm.error);
@ -1028,10 +1024,10 @@ agent_card_getattr (ctrl_t ctrl, const char *name, char **result)
static AssuanError
static int
pass_status_thru (void *opaque, const char *line)
{
ASSUAN_CONTEXT ctx = opaque;
assuan_context_t ctx = opaque;
char keyword[200];
int i;
@ -1048,10 +1044,10 @@ pass_status_thru (void *opaque, const char *line)
return 0;
}
static AssuanError
static int
pass_data_thru (void *opaque, const void *buffer, size_t length)
{
ASSUAN_CONTEXT ctx = opaque;
assuan_context_t ctx = opaque;
assuan_send_data (ctx, buffer, length);
return 0;
@ -1083,7 +1079,7 @@ agent_card_scd (ctrl_t ctrl, const char *cmdline,
pass_status_thru, assuan_context);
if (rc)
{
return unlock_scd (ctrl, map_assuan_err (rc));
return unlock_scd (ctrl, rc);
}
return unlock_scd (ctrl, 0);

View file

@ -41,7 +41,7 @@
/* maximum allowed size of the key parameters */
#define MAXLEN_KEYPARAM 1024
#define set_error(e,t) assuan_set_error (ctx, ASSUAN_ ## e, (t))
#define set_error(e,t) assuan_set_error (ctx, gpg_error (e), (t))
#if MAX_DIGEST_LEN < 20
@ -103,16 +103,16 @@ write_and_clear_outbuf (assuan_context_t ctx, membuf_t *mb)
p = get_membuf (mb, &n);
if (!p)
return gpg_error (GPG_ERR_ENOMEM);
return out_of_core ();
ae = assuan_send_data (ctx, p, n);
memset (p, 0, n);
xfree (p);
return map_assuan_err (ae);
return ae;
}
static void
reset_notify (ASSUAN_CONTEXT ctx)
reset_notify (assuan_context_t ctx)
{
ctrl_t ctrl = assuan_get_pointer (ctx);
@ -187,7 +187,7 @@ percent_plus_unescape (char *string)
/* Parse a hex string. Return an Assuan error code or 0 on success and the
length of the parsed string in LEN. */
static int
parse_hexstring (ASSUAN_CONTEXT ctx, const char *string, size_t *len)
parse_hexstring (assuan_context_t ctx, const char *string, size_t *len)
{
const char *p;
size_t n;
@ -196,9 +196,9 @@ parse_hexstring (ASSUAN_CONTEXT ctx, const char *string, size_t *len)
for (p=string, n=0; hexdigitp (p); p++, n++)
;
if (*p != ' ' && *p != '\t' && *p)
return set_error (Parameter_Error, "invalid hexstring");
return set_error (GPG_ERR_ASS_PARAMETER, "invalid hexstring");
if ((n&1))
return set_error (Parameter_Error, "odd number of digits");
return set_error (GPG_ERR_ASS_PARAMETER, "odd number of digits");
*len = n;
return 0;
}
@ -207,7 +207,7 @@ parse_hexstring (ASSUAN_CONTEXT ctx, const char *string, size_t *len)
provide space for 20 bytes. BUF is not changed if the fucntions
returns an error. */
static int
parse_keygrip (ASSUAN_CONTEXT ctx, const char *string, unsigned char *buf)
parse_keygrip (assuan_context_t ctx, const char *string, unsigned char *buf)
{
int rc;
size_t n;
@ -218,7 +218,7 @@ parse_keygrip (ASSUAN_CONTEXT ctx, const char *string, unsigned char *buf)
return rc;
n /= 2;
if (n != 20)
return set_error (Parameter_Error, "invalid length of keygrip");
return set_error (GPG_ERR_ASS_PARAMETER, "invalid length of keygrip");
for (p=(const unsigned char*)string, n=0; n < 20; p += 2, n++)
buf[n] = xtoi_2 (p);
@ -234,7 +234,7 @@ parse_keygrip (ASSUAN_CONTEXT ctx, const char *string, unsigned char *buf)
Return OK when we have an entry with this fingerprint in our
trustlist */
static int
cmd_istrusted (ASSUAN_CONTEXT ctx, char *line)
cmd_istrusted (assuan_context_t ctx, char *line)
{
int rc, n, i;
char *p;
@ -244,7 +244,7 @@ cmd_istrusted (ASSUAN_CONTEXT ctx, char *line)
for (p=line,n=0; hexdigitp (p); p++, n++)
;
if (*p || !(n == 40 || n == 32))
return set_error (Parameter_Error, "invalid fingerprint");
return set_error (GPG_ERR_ASS_PARAMETER, "invalid fingerprint");
i = 0;
if (n==32)
{
@ -255,14 +255,14 @@ cmd_istrusted (ASSUAN_CONTEXT ctx, char *line)
fpr[i] = *p >= 'a'? (*p & 0xdf): *p;
fpr[i] = 0;
rc = agent_istrusted (fpr);
if (!rc)
return 0;
else if (rc == -1)
return ASSUAN_Not_Trusted;
if (!rc || gpg_err_code (rc) == GPG_ERR_NOT_TRUSTED)
return rc;
else if (rc == -1 || gpg_err_code (rc) == GPG_ERR_EOF )
return gpg_error (GPG_ERR_NOT_TRUSTED);
else
{
log_error ("command is_trusted failed: %s\n", gpg_strerror (rc));
return map_to_assuan_status (rc);
return rc;
}
}
@ -270,12 +270,12 @@ cmd_istrusted (ASSUAN_CONTEXT ctx, char *line)
List all entries from the trustlist */
static int
cmd_listtrusted (ASSUAN_CONTEXT ctx, char *line)
cmd_listtrusted (assuan_context_t ctx, char *line)
{
int rc = agent_listtrusted (ctx);
if (rc)
log_error ("command listtrusted failed: %s\n", gpg_strerror (rc));
return map_to_assuan_status (rc);
return rc;
}
@ -283,7 +283,7 @@ cmd_listtrusted (ASSUAN_CONTEXT ctx, char *line)
Store a new key in into the trustlist*/
static int
cmd_marktrusted (ASSUAN_CONTEXT ctx, char *line)
cmd_marktrusted (assuan_context_t ctx, char *line)
{
ctrl_t ctrl = assuan_get_pointer (ctx);
int rc, n, i;
@ -295,7 +295,7 @@ cmd_marktrusted (ASSUAN_CONTEXT ctx, char *line)
for (p=line,n=0; hexdigitp (p); p++, n++)
;
if (!spacep (p) || !(n == 40 || n == 32))
return set_error (Parameter_Error, "invalid fingerprint");
return set_error (GPG_ERR_ASS_PARAMETER, "invalid fingerprint");
i = 0;
if (n==32)
{
@ -310,14 +310,14 @@ cmd_marktrusted (ASSUAN_CONTEXT ctx, char *line)
p++;
flag = *p++;
if ( (flag != 'S' && flag != 'P') || !spacep (p) )
return set_error (Parameter_Error, "invalid flag - must be P or S");
return set_error (GPG_ERR_ASS_PARAMETER, "invalid flag - must be P or S");
while (spacep (p))
p++;
rc = agent_marktrusted (ctrl, p, fpr, flag);
if (rc)
log_error ("command marktrusted failed: %s\n", gpg_strerror (rc));
return map_to_assuan_status (rc);
return rc;
}
@ -327,7 +327,7 @@ cmd_marktrusted (ASSUAN_CONTEXT ctx, char *line)
Return success when the secret key is available */
static int
cmd_havekey (ASSUAN_CONTEXT ctx, char *line)
cmd_havekey (assuan_context_t ctx, char *line)
{
int rc;
unsigned char buf[20];
@ -337,7 +337,7 @@ cmd_havekey (ASSUAN_CONTEXT ctx, char *line)
return rc;
if (agent_key_available (buf))
return ASSUAN_No_Secret_Key;
return gpg_error (GPG_ERR_NO_SECKEY);
return 0;
}
@ -348,7 +348,7 @@ cmd_havekey (ASSUAN_CONTEXT ctx, char *line)
Set the key used for a sign or decrypt operation */
static int
cmd_sigkey (ASSUAN_CONTEXT ctx, char *line)
cmd_sigkey (assuan_context_t ctx, char *line)
{
int rc;
ctrl_t ctrl = assuan_get_pointer (ctx);
@ -389,7 +389,7 @@ cmd_setkeydesc (assuan_context_t ctx, char *line)
*p = 0; /* We ignore any garbage; we might late use it for other args. */
if (!desc || !*desc)
return set_error (Parameter_Error, "no description given");
return set_error (GPG_ERR_ASS_PARAMETER, "no description given");
/* Note, that we only need to replace the + characters and should
leave the other escaping in place because the escaped string is
@ -400,7 +400,7 @@ cmd_setkeydesc (assuan_context_t ctx, char *line)
xfree (ctrl->server_local->keydesc);
ctrl->server_local->keydesc = xtrystrdup (desc);
if (!ctrl->server_local->keydesc)
return map_to_assuan_status (gpg_error_from_errno (errno));
return out_of_core ();
return 0;
}
@ -410,7 +410,7 @@ cmd_setkeydesc (assuan_context_t ctx, char *line)
The client can use this command to tell the server about the data
(which usually is a hash) to be signed. */
static int
cmd_sethash (ASSUAN_CONTEXT ctx, char *line)
cmd_sethash (assuan_context_t ctx, char *line)
{
int rc;
size_t n;
@ -425,7 +425,7 @@ cmd_sethash (ASSUAN_CONTEXT ctx, char *line)
for (line = endp; *line == ' ' || *line == '\t'; line++)
;
if (!algo || gcry_md_test_algo (algo))
return set_error (Unsupported_Algorithm, NULL);
return set_error (GPG_ERR_UNSUPPORTED_ALGORITHM, NULL);
ctrl->digest.algo = algo;
/* parse the hash value */
@ -434,9 +434,9 @@ cmd_sethash (ASSUAN_CONTEXT ctx, char *line)
return rc;
n /= 2;
if (n != 16 && n != 20 && n != 24 && n != 32)
return set_error (Parameter_Error, "unsupported length of hash");
return set_error (GPG_ERR_ASS_PARAMETER, "unsupported length of hash");
if (n > MAX_DIGEST_LEN)
return set_error (Parameter_Error, "hash value to long");
return set_error (GPG_ERR_ASS_PARAMETER, "hash value to long");
buf = ctrl->digest.value;
ctrl->digest.valuelen = n;
@ -453,7 +453,7 @@ cmd_sethash (ASSUAN_CONTEXT ctx, char *line)
Perform the actual sign operation. Neither input nor output are
sensitive to eavesdropping. */
static int
cmd_pksign (ASSUAN_CONTEXT ctx, char *line)
cmd_pksign (assuan_context_t ctx, char *line)
{
int rc;
cache_mode_t cache_mode = CACHE_MODE_NORMAL;
@ -477,7 +477,7 @@ cmd_pksign (ASSUAN_CONTEXT ctx, char *line)
log_error ("command pksign failed: %s\n", gpg_strerror (rc));
xfree (ctrl->server_local->keydesc);
ctrl->server_local->keydesc = NULL;
return map_to_assuan_status (rc);
return rc;
}
/* PKDECRYPT <options>
@ -485,7 +485,7 @@ cmd_pksign (ASSUAN_CONTEXT ctx, char *line)
Perform the actual decrypt operation. Input is not
sensitive to eavesdropping */
static int
cmd_pkdecrypt (ASSUAN_CONTEXT ctx, char *line)
cmd_pkdecrypt (assuan_context_t ctx, char *line)
{
int rc;
ctrl_t ctrl = assuan_get_pointer (ctx);
@ -512,7 +512,7 @@ cmd_pkdecrypt (ASSUAN_CONTEXT ctx, char *line)
log_error ("command pkdecrypt failed: %s\n", gpg_strerror (rc));
xfree (ctrl->server_local->keydesc);
ctrl->server_local->keydesc = NULL;
return map_to_assuan_status (rc);
return rc;
}
@ -531,7 +531,7 @@ cmd_pkdecrypt (ASSUAN_CONTEXT ctx, char *line)
*/
static int
cmd_genkey (ASSUAN_CONTEXT ctx, char *line)
cmd_genkey (assuan_context_t ctx, char *line)
{
ctrl_t ctrl = assuan_get_pointer (ctx);
int rc;
@ -554,7 +554,7 @@ cmd_genkey (ASSUAN_CONTEXT ctx, char *line)
rc = write_and_clear_outbuf (ctx, &outbuf);
if (rc)
log_error ("command genkey failed: %s\n", gpg_strerror (rc));
return map_to_assuan_status (rc);
return rc;
}
@ -591,7 +591,6 @@ cmd_readkey (assuan_context_t ctx, char *line)
len = gcry_sexp_sprint (s_pkey, GCRYSEXP_FMT_CANON, buf, len);
assert (len);
rc = assuan_send_data (ctx, buf, len);
rc = map_assuan_err (rc);
xfree (buf);
}
gcry_sexp_release (s_pkey);
@ -599,7 +598,7 @@ cmd_readkey (assuan_context_t ctx, char *line)
if (rc)
log_error ("command readkey failed: %s\n", gpg_strerror (rc));
return map_to_assuan_status (rc);
return rc;
}
@ -619,7 +618,7 @@ cmd_readkey (assuan_context_t ctx, char *line)
*/
static int
cmd_get_passphrase (ASSUAN_CONTEXT ctx, char *line)
cmd_get_passphrase (assuan_context_t ctx, char *line)
{
ctrl_t ctrl = assuan_get_pointer (ctx);
int rc;
@ -661,9 +660,9 @@ cmd_get_passphrase (ASSUAN_CONTEXT ctx, char *line)
}
}
if (!cacheid || !*cacheid || strlen (cacheid) > 50)
return set_error (Parameter_Error, "invalid length of cacheID");
return set_error (GPG_ERR_ASS_PARAMETER, "invalid length of cacheID");
if (!desc)
return set_error (Parameter_Error, "no description given");
return set_error (GPG_ERR_ASS_PARAMETER, "no description given");
if (!strcmp (cacheid, "X"))
cacheid = NULL;
@ -709,7 +708,7 @@ cmd_get_passphrase (ASSUAN_CONTEXT ctx, char *line)
if (rc)
log_error ("command get_passphrase failed: %s\n", gpg_strerror (rc));
return map_to_assuan_status (rc);
return rc;
}
@ -720,7 +719,7 @@ cmd_get_passphrase (ASSUAN_CONTEXT ctx, char *line)
*/
static int
cmd_clear_passphrase (ASSUAN_CONTEXT ctx, char *line)
cmd_clear_passphrase (assuan_context_t ctx, char *line)
{
char *cacheid = NULL;
char *p;
@ -733,7 +732,7 @@ cmd_clear_passphrase (ASSUAN_CONTEXT ctx, char *line)
if (p)
*p = 0; /* ignore garbage */
if (!cacheid || !*cacheid || strlen (cacheid) > 50)
return set_error (Parameter_Error, "invalid length of cacheID");
return set_error (GPG_ERR_ASS_PARAMETER, "invalid length of cacheID");
agent_put_cache (cacheid, CACHE_MODE_USER, NULL, 0);
return 0;
@ -753,7 +752,7 @@ cmd_clear_passphrase (ASSUAN_CONTEXT ctx, char *line)
*/
static int
cmd_get_confirmation (ASSUAN_CONTEXT ctx, char *line)
cmd_get_confirmation (assuan_context_t ctx, char *line)
{
ctrl_t ctrl = assuan_get_pointer (ctx);
int rc;
@ -769,7 +768,7 @@ cmd_get_confirmation (ASSUAN_CONTEXT ctx, char *line)
*p = 0; /* We ignore any garbage -may be later used for other args. */
if (!desc || !*desc)
return set_error (Parameter_Error, "no description given");
return set_error (GPG_ERR_ASS_PARAMETER, "no description given");
if (!strcmp (desc, "X"))
desc = NULL;
@ -784,7 +783,7 @@ cmd_get_confirmation (ASSUAN_CONTEXT ctx, char *line)
rc = agent_get_confirmation (ctrl, desc, NULL, NULL);
if (rc)
log_error ("command get_confirmation failed: %s\n", gpg_strerror (rc));
return map_to_assuan_status (rc);
return rc;
}
@ -794,7 +793,7 @@ cmd_get_confirmation (ASSUAN_CONTEXT ctx, char *line)
Learn something about the currently inserted smartcard. With
--send the new certificates are send back. */
static int
cmd_learn (ASSUAN_CONTEXT ctx, char *line)
cmd_learn (assuan_context_t ctx, char *line)
{
ctrl_t ctrl = assuan_get_pointer (ctx);
int rc;
@ -802,7 +801,7 @@ cmd_learn (ASSUAN_CONTEXT ctx, char *line)
rc = agent_handle_learn (ctrl, has_option (line, "--send")? ctx : NULL);
if (rc)
log_error ("command learn failed: %s\n", gpg_strerror (rc));
return map_to_assuan_status (rc);
return rc;
}
@ -811,7 +810,7 @@ cmd_learn (ASSUAN_CONTEXT ctx, char *line)
Change the passphrase/PID for the key identified by keygrip in LINE. */
static int
cmd_passwd (ASSUAN_CONTEXT ctx, char *line)
cmd_passwd (assuan_context_t ctx, char *line)
{
ctrl_t ctrl = assuan_get_pointer (ctx);
int rc;
@ -842,7 +841,7 @@ cmd_passwd (ASSUAN_CONTEXT ctx, char *line)
xfree (shadow_info);
if (rc)
log_error ("command passwd failed: %s\n", gpg_strerror (rc));
return map_to_assuan_status (rc);
return rc;
}
/* PRESET_PASSPHRASE <hexstring_with_keygrip> <timeout> <hexstring>
@ -853,7 +852,7 @@ cmd_passwd (ASSUAN_CONTEXT ctx, char *line)
to never expire it). If passwd is not provided, ask for it via the
pinentry module. */
static int
cmd_preset_passphrase (ASSUAN_CONTEXT ctx, char *line)
cmd_preset_passphrase (assuan_context_t ctx, char *line)
{
int rc;
unsigned char grip[20];
@ -874,7 +873,7 @@ cmd_preset_passphrase (ASSUAN_CONTEXT ctx, char *line)
while (*line && (*line != ' ' && *line != '\t'))
line++;
if (!*line)
return map_to_assuan_status (gpg_error (GPG_ERR_MISSING_VALUE));
return gpg_error (GPG_ERR_MISSING_VALUE);
*line = '\0';
line++;
while (*line && (*line == ' ' || *line == '\t'))
@ -883,7 +882,7 @@ cmd_preset_passphrase (ASSUAN_CONTEXT ctx, char *line)
/* Currently, only infinite timeouts are allowed. */
ttl = -1;
if (line[0] != '-' || line[1] != '1')
return map_to_assuan_status (gpg_error (GPG_ERR_NOT_IMPLEMENTED));
return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
line++;
line++;
while (!(*line != ' ' && *line != '\t'))
@ -900,14 +899,14 @@ cmd_preset_passphrase (ASSUAN_CONTEXT ctx, char *line)
if (*line)
passphrase = line;
else
return map_to_assuan_status (gpg_error (GPG_ERR_NOT_IMPLEMENTED));
return gpg_error (GPG_ERR_NOT_IMPLEMENTED);
rc = agent_put_cache (grip_clear, CACHE_MODE_ANY, passphrase, ttl);
if (rc)
log_error ("command preset_passwd failed: %s\n", gpg_strerror (rc));
return map_to_assuan_status (rc);
return rc;
}
@ -916,14 +915,14 @@ cmd_preset_passphrase (ASSUAN_CONTEXT ctx, char *line)
This is a general quote command to redirect everything to the
SCDAEMON. */
static int
cmd_scd (ASSUAN_CONTEXT ctx, char *line)
cmd_scd (assuan_context_t ctx, char *line)
{
ctrl_t ctrl = assuan_get_pointer (ctx);
int rc;
rc = divert_generic_cmd (ctrl, line, ctx);
return map_to_assuan_status (rc);
return rc;
}
@ -951,10 +950,10 @@ cmd_getval (assuan_context_t ctx, char *line)
for (; *p == ' '; p++)
;
if (*p)
return set_error (Parameter_Error, "too many arguments");
return set_error (GPG_ERR_ASS_PARAMETER, "too many arguments");
}
if (!key || !*key)
return set_error (Parameter_Error, "no key given");
return set_error (GPG_ERR_ASS_PARAMETER, "no key given");
for (vl=putval_list; vl; vl = vl->next)
@ -962,17 +961,13 @@ cmd_getval (assuan_context_t ctx, char *line)
break;
if (vl) /* Got an entry. */
{
rc = assuan_send_data (ctx, vl->d+vl->off, vl->len);
if (rc)
rc = map_assuan_err (rc);
}
rc = assuan_send_data (ctx, vl->d+vl->off, vl->len);
else
return gpg_error (GPG_ERR_NO_DATA);
if (rc)
log_error ("command getval failed: %s\n", gpg_strerror (rc));
return map_to_assuan_status (rc);
return rc;
}
@ -1023,7 +1018,7 @@ cmd_putval (assuan_context_t ctx, char *line)
}
}
if (!key || !*key)
return set_error (Parameter_Error, "no key given");
return set_error (GPG_ERR_ASS_PARAMETER, "no key given");
for (vl=putval_list,vlprev=NULL; vl; vlprev=vl, vl = vl->next)
@ -1057,7 +1052,7 @@ cmd_putval (assuan_context_t ctx, char *line)
if (rc)
log_error ("command putval failed: %s\n", gpg_strerror (rc));
return map_to_assuan_status (rc);
return rc;
}
@ -1097,7 +1092,7 @@ cmd_updatestartuptty (assuan_context_t ctx, char *line)
static int
option_handler (ASSUAN_CONTEXT ctx, const char *key, const char *value)
option_handler (assuan_context_t ctx, const char *key, const char *value)
{
ctrl_t ctrl = assuan_get_pointer (ctx);
@ -1107,7 +1102,7 @@ option_handler (ASSUAN_CONTEXT ctx, const char *key, const char *value)
free (ctrl->display);
ctrl->display = strdup (value);
if (!ctrl->display)
return ASSUAN_Out_Of_Core;
return out_of_core ();
}
else if (!strcmp (key, "ttyname"))
{
@ -1117,7 +1112,7 @@ option_handler (ASSUAN_CONTEXT ctx, const char *key, const char *value)
free (ctrl->ttyname);
ctrl->ttyname = strdup (value);
if (!ctrl->ttyname)
return ASSUAN_Out_Of_Core;
return out_of_core ();
}
}
else if (!strcmp (key, "ttytype"))
@ -1128,7 +1123,7 @@ option_handler (ASSUAN_CONTEXT ctx, const char *key, const char *value)
free (ctrl->ttytype);
ctrl->ttytype = strdup (value);
if (!ctrl->ttytype)
return ASSUAN_Out_Of_Core;
return out_of_core ();
}
}
else if (!strcmp (key, "lc-ctype"))
@ -1137,7 +1132,7 @@ option_handler (ASSUAN_CONTEXT ctx, const char *key, const char *value)
free (ctrl->lc_ctype);
ctrl->lc_ctype = strdup (value);
if (!ctrl->lc_ctype)
return ASSUAN_Out_Of_Core;
return out_of_core ();
}
else if (!strcmp (key, "lc-messages"))
{
@ -1145,12 +1140,12 @@ option_handler (ASSUAN_CONTEXT ctx, const char *key, const char *value)
free (ctrl->lc_messages);
ctrl->lc_messages = strdup (value);
if (!ctrl->lc_messages)
return ASSUAN_Out_Of_Core;
return out_of_core ();
}
else if (!strcmp (key, "use-cache-for-signing"))
ctrl->server_local->use_cache_for_signing = *value? atoi (value) : 0;
else
return ASSUAN_Invalid_Option;
return gpg_error (GPG_ERR_UNKNOWN_OPTION);
return 0;
}
@ -1158,11 +1153,11 @@ option_handler (ASSUAN_CONTEXT ctx, const char *key, const char *value)
/* Tell the assuan library about our commands */
static int
register_commands (ASSUAN_CONTEXT ctx)
register_commands (assuan_context_t ctx)
{
static struct {
const char *name;
int (*handler)(ASSUAN_CONTEXT, char *line);
int (*handler)(assuan_context_t, char *line);
} table[] = {
{ "ISTRUSTED", cmd_istrusted },
{ "HAVEKEY", cmd_havekey },
@ -1210,7 +1205,7 @@ void
start_command_handler (int listen_fd, int fd)
{
int rc;
ASSUAN_CONTEXT ctx;
assuan_context_t ctx;
struct server_control_s ctrl;
memset (&ctrl, 0, sizeof ctrl);
@ -1236,14 +1231,14 @@ start_command_handler (int listen_fd, int fd)
if (rc)
{
log_error ("failed to initialize the server: %s\n",
assuan_strerror(rc));
gpg_strerror(rc));
agent_exit (2);
}
rc = register_commands (ctx);
if (rc)
{
log_error ("failed to register commands with Assuan: %s\n",
assuan_strerror(rc));
gpg_strerror(rc));
agent_exit (2);
}
@ -1266,14 +1261,14 @@ start_command_handler (int listen_fd, int fd)
}
else if (rc)
{
log_info ("Assuan accept problem: %s\n", assuan_strerror (rc));
log_info ("Assuan accept problem: %s\n", gpg_strerror (rc));
break;
}
rc = assuan_process (ctx);
if (rc)
{
log_info ("Assuan processing failed: %s\n", assuan_strerror (rc));
log_info ("Assuan processing failed: %s\n", gpg_strerror (rc));
continue;
}
}

View file

@ -35,7 +35,7 @@
static int
ask_for_card (CTRL ctrl, const unsigned char *shadow_info, char **r_kid)
ask_for_card (ctrl_t ctrl, const unsigned char *shadow_info, char **r_kid)
{
int rc, i;
const unsigned char *s;
@ -309,7 +309,7 @@ getpin_cb (void *opaque, const char *info, char *buf, size_t maxbuf)
int
divert_pksign (CTRL ctrl,
divert_pksign (ctrl_t ctrl,
const unsigned char *digest, size_t digestlen, int algo,
const unsigned char *shadow_info, unsigned char **r_sig)
{
@ -344,7 +344,7 @@ divert_pksign (CTRL ctrl,
key identified by SHADOW_INFO and return the plaintext in an
allocated buffer in R_BUF. */
int
divert_pkdecrypt (CTRL ctrl,
divert_pkdecrypt (ctrl_t ctrl,
const unsigned char *cipher,
const unsigned char *shadow_info,
char **r_buf, size_t *r_len)
@ -407,7 +407,7 @@ divert_pkdecrypt (CTRL ctrl,
int
divert_generic_cmd (CTRL ctrl, const char *cmdline, void *assuan_context)
divert_generic_cmd (ctrl_t ctrl, const char *cmdline, void *assuan_context)
{
return agent_card_scd (ctrl, cmdline, getpin_cb, ctrl, assuan_context);
}

View file

@ -88,7 +88,7 @@ reenter_compare_cb (struct pin_entry_info_s *pi)
/* Generate a new keypair according to the parameters given in
KEYPARAM */
int
agent_genkey (CTRL ctrl, const char *keyparam, size_t keyparamlen,
agent_genkey (ctrl_t ctrl, const char *keyparam, size_t keyparamlen,
membuf_t *outbuf)
{
gcry_sexp_t s_keyparam, s_key, s_private, s_public;
@ -209,7 +209,7 @@ agent_genkey (CTRL ctrl, const char *keyparam, size_t keyparamlen,
/* Apply a new passpahrse to the key S_SKEY and store it. */
int
agent_protect_and_store (CTRL ctrl, gcry_sexp_t s_skey)
agent_protect_and_store (ctrl_t ctrl, gcry_sexp_t s_skey)
{
struct pin_entry_info_s *pi, *pi2;
int rc;

View file

@ -509,6 +509,7 @@ main (int argc, char **argv )
assuan_set_malloc_hooks (gcry_malloc, gcry_realloc, gcry_free);
assuan_set_assuan_log_stream (log_get_stream ());
assuan_set_assuan_log_prefix (log_get_prefix (NULL));
assuan_set_assuan_err_source (GPG_ERR_SOURCE_DEFAULT);
gcry_set_log_handler (my_gcry_logger, NULL);
gcry_set_outofcore_handler (my_gcry_outofcore_handler, NULL);
@ -1697,7 +1698,7 @@ check_for_running_agent (int mode)
return 0; /* Okay, its running on the standard socket. */
if (!mode)
log_error ("can't connect to the agent: %s\n", assuan_strerror (rc));
log_error ("can't connect to the agent: %s\n", gpg_strerror (rc));
return -1;
}

View file

@ -265,8 +265,8 @@ send_cert_back (ctrl_t ctrl, const char *id, void *assuan_context)
if (rc)
{
log_error ("sending certificate failed: %s\n",
assuan_strerror (rc));
return map_assuan_err (rc);
gpg_strerror (rc));
return rc;
}
return 0;
}

View file

@ -36,7 +36,7 @@
Try to get the key from CTRL and write the decoded stuff back to
OUTFP. */
int
agent_pkdecrypt (CTRL ctrl, const char *desc_text,
agent_pkdecrypt (ctrl_t ctrl, const char *desc_text,
const unsigned char *ciphertext, size_t ciphertextlen,
membuf_t *outbuf)
{

View file

@ -94,7 +94,7 @@ open_list (int append)
buffer of at least 41 characters. KEYFLAG does return either 'P',
'S' or '*'.
Reading a valid entry return 0, EOF returns -1 any other error
Reading a valid entry returns 0, EOF returns -1 any other error
returns the appropriate error code. */
static int
read_list (char *key, int *keyflag)
@ -246,7 +246,7 @@ agent_listtrusted (void *assuan_context)
whether this is actual wants he want to do.
*/
int
agent_marktrusted (CTRL ctrl, const char *name, const char *fpr, int flag)
agent_marktrusted (ctrl_t ctrl, const char *name, const char *fpr, int flag)
{
int rc;
static char key[41];