2002-10-09 Marcus Brinkmann <marcus@g10code.de>
* rungpg.h (_gpgme_gpg_enable_pipemode): Remove prototype. * rungpg.c (struct gpg_object_s): Remove PM. (pipemode_cb): Prototype removed. (add_pm_data): Function removed. (_gpgme_gpg_enable_pipemode): Likewise. (pipemode_copy): Likewise. (pipemode_cb): Likewise. (add_arg): Don't check for pipemode. (add_data): Likewise. (_gpgme_gpg_set_status_handler): Likewise. (_gpgme_gpg_set_colon_line_handler): Likewise. (_gpgme_gpg_set_command_handler): Likewise. (_gpgme_gpg_spawn): Likewise. (_gpgme_gpg_spawn): Don't set PM.active. (_gpgme_gpg_op_verify): Remove pipemode case. * verify.c (_gpgme_op_verify_start): Remove pipemode case.
This commit is contained in:
parent
8646a29754
commit
291b5c78f4
@ -1,5 +1,22 @@
|
|||||||
2002-10-09 Marcus Brinkmann <marcus@g10code.de>
|
2002-10-09 Marcus Brinkmann <marcus@g10code.de>
|
||||||
|
|
||||||
|
* rungpg.h (_gpgme_gpg_enable_pipemode): Remove prototype.
|
||||||
|
* rungpg.c (struct gpg_object_s): Remove PM.
|
||||||
|
(pipemode_cb): Prototype removed.
|
||||||
|
(add_pm_data): Function removed.
|
||||||
|
(_gpgme_gpg_enable_pipemode): Likewise.
|
||||||
|
(pipemode_copy): Likewise.
|
||||||
|
(pipemode_cb): Likewise.
|
||||||
|
(add_arg): Don't check for pipemode.
|
||||||
|
(add_data): Likewise.
|
||||||
|
(_gpgme_gpg_set_status_handler): Likewise.
|
||||||
|
(_gpgme_gpg_set_colon_line_handler): Likewise.
|
||||||
|
(_gpgme_gpg_set_command_handler): Likewise.
|
||||||
|
(_gpgme_gpg_spawn): Likewise.
|
||||||
|
(_gpgme_gpg_spawn): Don't set PM.active.
|
||||||
|
(_gpgme_gpg_op_verify): Remove pipemode case.
|
||||||
|
* verify.c (_gpgme_op_verify_start): Remove pipemode case.
|
||||||
|
|
||||||
* rungpg.h (_gpgme_gpg_add_arg, _gpgme_gpg_add_data,
|
* rungpg.h (_gpgme_gpg_add_arg, _gpgme_gpg_add_data,
|
||||||
_gpgme_gpg_add_pm_data, _gpgme_gpg_housecleaning,
|
_gpgme_gpg_add_pm_data, _gpgme_gpg_housecleaning,
|
||||||
_gpgme_gpg_set_simple_line_handler): Prototype removed.
|
_gpgme_gpg_set_simple_line_handler): Prototype removed.
|
||||||
|
187
gpgme/rungpg.c
187
gpgme/rungpg.c
@ -101,16 +101,6 @@ struct gpg_object_s
|
|||||||
char **argv;
|
char **argv;
|
||||||
struct fd_data_map_s *fd_data_map;
|
struct fd_data_map_s *fd_data_map;
|
||||||
|
|
||||||
/* stuff needed for pipemode */
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
int used;
|
|
||||||
int active;
|
|
||||||
GpgmeData sig;
|
|
||||||
GpgmeData text;
|
|
||||||
int stream_started;
|
|
||||||
} pm;
|
|
||||||
|
|
||||||
/* stuff needed for interactive (command) mode */
|
/* stuff needed for interactive (command) mode */
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
@ -140,8 +130,6 @@ static GpgmeError read_status (GpgObject gpg);
|
|||||||
static void gpg_colon_line_handler (void *opaque, int fd);
|
static void gpg_colon_line_handler (void *opaque, int fd);
|
||||||
static GpgmeError read_colon_line (GpgObject gpg);
|
static GpgmeError read_colon_line (GpgObject gpg);
|
||||||
|
|
||||||
static int pipemode_cb (void *opaque, char *buffer, size_t length,
|
|
||||||
size_t *nread);
|
|
||||||
static int command_cb (void *opaque, char *buffer, size_t length,
|
static int command_cb (void *opaque, char *buffer, size_t length,
|
||||||
size_t *nread);
|
size_t *nread);
|
||||||
|
|
||||||
@ -227,9 +215,6 @@ add_arg (GpgObject gpg, const char *arg)
|
|||||||
assert (gpg);
|
assert (gpg);
|
||||||
assert (arg);
|
assert (arg);
|
||||||
|
|
||||||
if (gpg->pm.active)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
a = malloc (sizeof *a + strlen (arg));
|
a = malloc (sizeof *a + strlen (arg));
|
||||||
if (!a)
|
if (!a)
|
||||||
{
|
{
|
||||||
@ -252,8 +237,6 @@ add_data (GpgObject gpg, GpgmeData data, int dup_to, int inbound)
|
|||||||
|
|
||||||
assert (gpg);
|
assert (gpg);
|
||||||
assert (data);
|
assert (data);
|
||||||
if (gpg->pm.active)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
a = malloc (sizeof *a - 1);
|
a = malloc (sizeof *a - 1);
|
||||||
if (!a)
|
if (!a)
|
||||||
@ -279,49 +262,6 @@ add_data (GpgObject gpg, GpgmeData data, int dup_to, int inbound)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static GpgmeError
|
|
||||||
add_pm_data (GpgObject gpg, GpgmeData data, int what)
|
|
||||||
{
|
|
||||||
GpgmeError rc = 0;
|
|
||||||
|
|
||||||
assert (gpg->pm.used);
|
|
||||||
|
|
||||||
if (!what)
|
|
||||||
{
|
|
||||||
/* the signature */
|
|
||||||
assert (!gpg->pm.sig);
|
|
||||||
gpg->pm.sig = data;
|
|
||||||
}
|
|
||||||
else if (what == 1)
|
|
||||||
{
|
|
||||||
/* the signed data */
|
|
||||||
assert (!gpg->pm.text);
|
|
||||||
gpg->pm.text = data;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
assert (0);
|
|
||||||
|
|
||||||
if (gpg->pm.sig && gpg->pm.text)
|
|
||||||
{
|
|
||||||
if (!gpg->pm.active)
|
|
||||||
{
|
|
||||||
/* Create the callback handler and connect it to stdin. */
|
|
||||||
GpgmeData tmp;
|
|
||||||
|
|
||||||
rc = gpgme_data_new_with_read_cb (&tmp, pipemode_cb, gpg);
|
|
||||||
if (!rc)
|
|
||||||
rc = add_data (gpg, tmp, 0, 0);
|
|
||||||
}
|
|
||||||
if (!rc)
|
|
||||||
{
|
|
||||||
/* Here we can reset the handler stuff. */
|
|
||||||
gpg->pm.stream_started = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
_gpgme_gpg_get_version (void)
|
_gpgme_gpg_get_version (void)
|
||||||
@ -449,13 +389,6 @@ _gpgme_gpg_release (GpgObject gpg)
|
|||||||
free (gpg);
|
free (gpg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
_gpgme_gpg_enable_pipemode (GpgObject gpg)
|
|
||||||
{
|
|
||||||
gpg->pm.used = 1;
|
|
||||||
assert (!gpg->pm.sig);
|
|
||||||
assert (!gpg->pm.text);
|
|
||||||
}
|
|
||||||
|
|
||||||
GpgmeError
|
GpgmeError
|
||||||
_gpgme_gpg_set_verbosity (GpgObject gpg, int verbosity)
|
_gpgme_gpg_set_verbosity (GpgObject gpg, int verbosity)
|
||||||
@ -473,8 +406,6 @@ _gpgme_gpg_set_status_handler (GpgObject gpg,
|
|||||||
GpgStatusHandler fnc, void *fnc_value)
|
GpgStatusHandler fnc, void *fnc_value)
|
||||||
{
|
{
|
||||||
assert (gpg);
|
assert (gpg);
|
||||||
if (gpg->pm.active)
|
|
||||||
return;
|
|
||||||
|
|
||||||
gpg->status.fnc = fnc;
|
gpg->status.fnc = fnc;
|
||||||
gpg->status.fnc_value = fnc_value;
|
gpg->status.fnc_value = fnc_value;
|
||||||
@ -486,8 +417,6 @@ _gpgme_gpg_set_colon_line_handler (GpgObject gpg,
|
|||||||
GpgColonLineHandler fnc, void *fnc_value)
|
GpgColonLineHandler fnc, void *fnc_value)
|
||||||
{
|
{
|
||||||
assert (gpg);
|
assert (gpg);
|
||||||
if (gpg->pm.active)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
gpg->colon.bufsize = 1024;
|
gpg->colon.bufsize = 1024;
|
||||||
gpg->colon.readpos = 0;
|
gpg->colon.readpos = 0;
|
||||||
@ -526,8 +455,6 @@ _gpgme_gpg_set_command_handler (GpgObject gpg,
|
|||||||
GpgmeError err;
|
GpgmeError err;
|
||||||
|
|
||||||
assert (gpg);
|
assert (gpg);
|
||||||
if (gpg->pm.active)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
err = gpgme_data_new_with_read_cb (&tmp, command_cb, gpg);
|
err = gpgme_data_new_with_read_cb (&tmp, command_cb, gpg);
|
||||||
if (err)
|
if (err)
|
||||||
@ -819,9 +746,6 @@ _gpgme_gpg_spawn (GpgObject gpg, void *opaque)
|
|||||||
if (gpg->arg_error)
|
if (gpg->arg_error)
|
||||||
return mk_error (Out_Of_Core);
|
return mk_error (Out_Of_Core);
|
||||||
|
|
||||||
if (gpg->pm.active)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
rc = build_argv (gpg);
|
rc = build_argv (gpg);
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
return rc;
|
||||||
@ -886,9 +810,6 @@ _gpgme_gpg_spawn (GpgObject gpg, void *opaque)
|
|||||||
if (status == -1)
|
if (status == -1)
|
||||||
return mk_error (Exec_Error);
|
return mk_error (Exec_Error);
|
||||||
|
|
||||||
if (gpg->pm.used)
|
|
||||||
gpg->pm.active = 1;
|
|
||||||
|
|
||||||
/*_gpgme_register_term_handler ( closure, closure_value, pid );*/
|
/*_gpgme_register_term_handler ( closure, closure_value, pid );*/
|
||||||
|
|
||||||
rc = _gpgme_gpg_add_io_cb (gpg, gpg->status.fd[0], 1,
|
rc = _gpgme_gpg_add_io_cb (gpg, gpg->status.fd[0], 1,
|
||||||
@ -1224,85 +1145,6 @@ read_colon_line ( GpgObject gpg )
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static GpgmeError
|
|
||||||
pipemode_copy (char *buffer, size_t length, size_t *nread, GpgmeData data)
|
|
||||||
{
|
|
||||||
size_t nbytes;
|
|
||||||
char tmp[1000], *src, *dst;
|
|
||||||
|
|
||||||
/* We can optimize this whole thing but for now we just return after
|
|
||||||
each escape character. */
|
|
||||||
if (length > 990)
|
|
||||||
length = 990;
|
|
||||||
|
|
||||||
nbytes = gpgme_data_read (data, tmp, length);
|
|
||||||
if (nbytes < 0)
|
|
||||||
return mk_error (File_Error);
|
|
||||||
for (src = tmp, dst = buffer; nbytes; src++, nbytes--)
|
|
||||||
{
|
|
||||||
*dst++ = *src;
|
|
||||||
if (*src == '@')
|
|
||||||
{
|
|
||||||
*dst++ = '@';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*nread = dst - buffer;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static int
|
|
||||||
pipemode_cb ( void *opaque, char *buffer, size_t length, size_t *nread )
|
|
||||||
{
|
|
||||||
GpgObject gpg = opaque;
|
|
||||||
GpgmeError err;
|
|
||||||
|
|
||||||
if ( !buffer || !length || !nread )
|
|
||||||
return 0; /* those values are reserved for extensions */
|
|
||||||
*nread =0;
|
|
||||||
if ( !gpg->pm.stream_started ) {
|
|
||||||
assert (length > 4 );
|
|
||||||
strcpy (buffer, "@<@B" );
|
|
||||||
*nread = 4;
|
|
||||||
gpg->pm.stream_started = 1;
|
|
||||||
}
|
|
||||||
else if ( gpg->pm.sig ) {
|
|
||||||
err = pipemode_copy ( buffer, length, nread, gpg->pm.sig );
|
|
||||||
if ( err == GPGME_EOF ) {
|
|
||||||
gpg->pm.sig = NULL;
|
|
||||||
assert (length > 4 );
|
|
||||||
strcpy (buffer, "@t" );
|
|
||||||
*nread = 2;
|
|
||||||
}
|
|
||||||
else if (err) {
|
|
||||||
DEBUG1 ("pipemode_cb: copy sig failed: %s\n",
|
|
||||||
gpgme_strerror (err) );
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if ( gpg->pm.text ) {
|
|
||||||
err = pipemode_copy ( buffer, length, nread, gpg->pm.text );
|
|
||||||
if ( err == GPGME_EOF ) {
|
|
||||||
gpg->pm.text = NULL;
|
|
||||||
assert (length > 4 );
|
|
||||||
strcpy (buffer, "@.@>" );
|
|
||||||
*nread = 4;
|
|
||||||
}
|
|
||||||
else if (err) {
|
|
||||||
DEBUG1 ("pipemode_cb: copy data failed: %s\n",
|
|
||||||
gpgme_strerror (err) );
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return 0; /* eof */
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Here we handle --command-fd. This works closely together with
|
* Here we handle --command-fd. This works closely together with
|
||||||
* the status handler.
|
* the status handler.
|
||||||
@ -1755,30 +1597,17 @@ _gpgme_gpg_op_verify (GpgObject gpg, GpgmeData sig, GpgmeData signed_text,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (gpg->pm.used)
|
err = add_arg (gpg, "--verify");
|
||||||
|
if (!err)
|
||||||
|
err = add_arg (gpg, "--");
|
||||||
|
if (!err)
|
||||||
|
err = add_data (gpg, sig, -1, 0);
|
||||||
|
if (signed_text)
|
||||||
{
|
{
|
||||||
err = add_arg (gpg, gpg->pm.used ? "--pipemode" : "--verify");
|
|
||||||
if (!err)
|
if (!err)
|
||||||
err = add_arg (gpg, "--");
|
err = add_arg (gpg, "-");
|
||||||
if (!err)
|
if (!err)
|
||||||
err = add_pm_data (gpg, sig, 0);
|
err = add_data (gpg, signed_text, 0, 0);
|
||||||
if (!err)
|
|
||||||
err = add_pm_data (gpg, signed_text, 1);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
err = add_arg (gpg, "--verify");
|
|
||||||
if (!err)
|
|
||||||
err = add_arg (gpg, "--");
|
|
||||||
if (!err)
|
|
||||||
err = add_data (gpg, sig, -1, 0);
|
|
||||||
if (signed_text)
|
|
||||||
{
|
|
||||||
if (!err)
|
|
||||||
err = add_arg (gpg, "-");
|
|
||||||
if (!err)
|
|
||||||
err = add_data (gpg, signed_text, 0, 0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return err;
|
return err;
|
||||||
|
@ -33,7 +33,6 @@ GpgmeError _gpgme_gpg_check_version (void);
|
|||||||
|
|
||||||
GpgmeError _gpgme_gpg_new (GpgObject *r_gpg);
|
GpgmeError _gpgme_gpg_new (GpgObject *r_gpg);
|
||||||
void _gpgme_gpg_release (GpgObject gpg);
|
void _gpgme_gpg_release (GpgObject gpg);
|
||||||
void _gpgme_gpg_enable_pipemode (GpgObject gpg);
|
|
||||||
GpgmeError _gpgme_gpg_set_verbosity (GpgObject gpg, int verbosity);
|
GpgmeError _gpgme_gpg_set_verbosity (GpgObject gpg, int verbosity);
|
||||||
void _gpgme_gpg_set_status_handler (GpgObject gpg, GpgStatusHandler fnc,
|
void _gpgme_gpg_set_status_handler (GpgObject gpg, GpgStatusHandler fnc,
|
||||||
void *fnc_value);
|
void *fnc_value);
|
||||||
|
@ -362,21 +362,11 @@ _gpgme_op_verify_start (GpgmeCtx ctx, int synchronous,
|
|||||||
GpgmeData sig, GpgmeData signed_text, GpgmeData plaintext)
|
GpgmeData sig, GpgmeData signed_text, GpgmeData plaintext)
|
||||||
{
|
{
|
||||||
int err = 0;
|
int err = 0;
|
||||||
int pipemode = 0; /* !!text; use pipemode for detached sigs. */
|
|
||||||
|
|
||||||
if (!pipemode)
|
|
||||||
; /* XXX I am not sure what should happen/not happen in
|
|
||||||
pipemode. */
|
|
||||||
|
|
||||||
err = _gpgme_op_reset (ctx, synchronous);
|
err = _gpgme_op_reset (ctx, synchronous);
|
||||||
if (err)
|
if (err)
|
||||||
goto leave;
|
goto leave;
|
||||||
|
|
||||||
#if 0 /* FIXME */
|
|
||||||
if (pipemode)
|
|
||||||
_gpgme_gpg_enable_pipemode (c->engine->engine.gpg);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
_gpgme_engine_set_status_handler (ctx->engine, _gpgme_verify_status_handler,
|
_gpgme_engine_set_status_handler (ctx->engine, _gpgme_verify_status_handler,
|
||||||
ctx);
|
ctx);
|
||||||
_gpgme_engine_set_verbosity (ctx->engine, ctx->verbosity);
|
_gpgme_engine_set_verbosity (ctx->engine, ctx->verbosity);
|
||||||
|
Loading…
Reference in New Issue
Block a user