Support --locate-keys feature of gpg.
This commit is contained in:
parent
14d099181c
commit
b72c001283
4
NEWS
4
NEWS
@ -1,6 +1,10 @@
|
|||||||
Noteworthy changes in version 1.1.7 (unreleased)
|
Noteworthy changes in version 1.1.7 (unreleased)
|
||||||
------------------------------------------------
|
------------------------------------------------
|
||||||
|
|
||||||
|
* Using GPGME_KEYLIST_MODE_LOCAL combined with
|
||||||
|
GPGME_KEYLIST_MODE_EXTERN is now supported; it uses the
|
||||||
|
--locate-keys feature of gpg (>= 2.0.10).
|
||||||
|
|
||||||
* The encoding of gpgme_data_t objects can affect the output encoding
|
* The encoding of gpgme_data_t objects can affect the output encoding
|
||||||
of export, sign and encrypt operations now (the same operations
|
of export, sign and encrypt operations now (the same operations
|
||||||
that are also affected by the ASCII mode switch). We believe this
|
that are also affected by the ASCII mode switch). We believe this
|
||||||
|
4
TODO
4
TODO
@ -148,6 +148,10 @@ Hey Emacs, this is -*- outline -*- mode!
|
|||||||
** Map ASSUAN/GpgSM ERR error values in a better way than is done now. !!
|
** Map ASSUAN/GpgSM ERR error values in a better way than is done now. !!
|
||||||
** Some error values should identify the source more correctly (mostly error
|
** Some error values should identify the source more correctly (mostly error
|
||||||
values derived from status messages).
|
values derived from status messages).
|
||||||
|
** In rungpg.c we need to check the version of the engine
|
||||||
|
This requires a way to get the cached version number from the
|
||||||
|
engine layer.
|
||||||
|
|
||||||
|
|
||||||
* Tests
|
* Tests
|
||||||
** Write a fake gpg-agent so that we can supply known passphrases to
|
** Write a fake gpg-agent so that we can supply known passphrases to
|
||||||
|
@ -2180,10 +2180,10 @@ is the default.
|
|||||||
|
|
||||||
@item GPGME_KEYLIST_MODE_EXTERN
|
@item GPGME_KEYLIST_MODE_EXTERN
|
||||||
The @code{GPGME_KEYLIST_MODE_EXTERN} symbol specifies that an external
|
The @code{GPGME_KEYLIST_MODE_EXTERN} symbol specifies that an external
|
||||||
source should be searched for keys in the keylisting
|
source should be searched for keys in the keylisting operation. The
|
||||||
operation. The type of external source is dependant on the crypto
|
type of external source is dependant on the crypto engine used and
|
||||||
engine used. For example, it can be a remote keyserver or LDAP
|
whether it is combined with @code{GPGME_KEYLIST_MODE_LOCAL}. For
|
||||||
certificate server.
|
example, it can be a remote keyserver or LDAP certificate server.
|
||||||
|
|
||||||
@item GPGME_KEYLIST_MODE_SIGS
|
@item GPGME_KEYLIST_MODE_SIGS
|
||||||
The @code{GPGME_KEYLIST_MODE_SIGS} symbol specifies that the key
|
The @code{GPGME_KEYLIST_MODE_SIGS} symbol specifies that the key
|
||||||
@ -2208,7 +2208,7 @@ At least one of @code{GPGME_KEYLIST_MODE_LOCAL} and
|
|||||||
@code{GPGME_KEYLIST_MODE_EXTERN} must be specified. For future binary
|
@code{GPGME_KEYLIST_MODE_EXTERN} must be specified. For future binary
|
||||||
compatibility, you should get the current mode with
|
compatibility, you should get the current mode with
|
||||||
@code{gpgme_get_keylist_mode} and modify it by setting or clearing the
|
@code{gpgme_get_keylist_mode} and modify it by setting or clearing the
|
||||||
appropriate bits, and then using that calulcated value in the
|
appropriate bits, and then using that calculated value in the
|
||||||
@code{gpgme_set_keylisting_mode} operation. This will leave all other
|
@code{gpgme_set_keylisting_mode} operation. This will leave all other
|
||||||
bits in the mode value intact (in particular those that are not used
|
bits in the mode value intact (in particular those that are not used
|
||||||
in the current version of the library).
|
in the current version of the library).
|
||||||
|
@ -1,3 +1,14 @@
|
|||||||
|
2008-05-07 Werner Koch <wk@g10code.com>
|
||||||
|
|
||||||
|
* engine-gpgconf.c (gpgconf_write): Change argv[0] to a
|
||||||
|
self-explaining string. Needs a proper fix, though.
|
||||||
|
|
||||||
|
* rungpg.c (gpg_keylist, gpg_keylist_ext): Factor common code out
|
||||||
|
to ..
|
||||||
|
(gpg_build_keylist_options): .. new. Allow combination of extern
|
||||||
|
and intern mode.
|
||||||
|
(gpg_new): DFT_TTYNAME is an array, thus check the first character.
|
||||||
|
|
||||||
2008-05-06 Werner Koch <wk@g10code.com>
|
2008-05-06 Werner Koch <wk@g10code.com>
|
||||||
|
|
||||||
* version.c (extract_version_string): New.
|
* version.c (extract_version_string): New.
|
||||||
|
@ -628,7 +628,7 @@ gpgconf_write (void *engine, char *arg1, char *arg2, gpgme_data_t conf)
|
|||||||
|
|
||||||
/* _gpgme_engine_new guarantees that this is not NULL. */
|
/* _gpgme_engine_new guarantees that this is not NULL. */
|
||||||
argv[0] = gpgconf->file_name;
|
argv[0] = gpgconf->file_name;
|
||||||
argv[0] = "/home/marcus/g10/install/bin/gpgconf";
|
argv[0] = "/nowhere/path-needs-to-be-fixed/gpgconf";
|
||||||
|
|
||||||
if (_gpgme_io_pipe (rp, 0) < 0)
|
if (_gpgme_io_pipe (rp, 0) < 0)
|
||||||
return gpg_error_from_syserror ();
|
return gpg_error_from_syserror ();
|
||||||
|
@ -72,7 +72,7 @@ extern "C" {
|
|||||||
AM_PATH_GPGME macro) check that this header matches the installed
|
AM_PATH_GPGME macro) check that this header matches the installed
|
||||||
library. Warning: Do not edit the next line. configure will do
|
library. Warning: Do not edit the next line. configure will do
|
||||||
that for you! */
|
that for you! */
|
||||||
#define GPGME_VERSION "1.1.7-svn1307"
|
#define GPGME_VERSION "1.1.7-svn1311"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -486,7 +486,7 @@ gpg_new (void **engine, const char *file_name, const char *home_dir)
|
|||||||
rc = gpg_error_from_errno (errno);
|
rc = gpg_error_from_errno (errno);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (dft_ttyname)
|
if (*dft_ttyname)
|
||||||
{
|
{
|
||||||
rc = add_arg (gpg, "--ttyname");
|
rc = add_arg (gpg, "--ttyname");
|
||||||
if (!rc)
|
if (!rc)
|
||||||
@ -1872,19 +1872,11 @@ gpg_keylist_preprocess (char *line, char **r_line)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static gpgme_error_t
|
static gpg_error_t
|
||||||
gpg_keylist (void *engine, const char *pattern, int secret_only,
|
gpg_keylist_build_options (engine_gpg_t gpg, int secret_only,
|
||||||
gpgme_keylist_mode_t mode)
|
gpgme_keylist_mode_t mode)
|
||||||
{
|
{
|
||||||
engine_gpg_t gpg = engine;
|
gpg_error_t err;
|
||||||
gpgme_error_t err;
|
|
||||||
|
|
||||||
if (mode & GPGME_KEYLIST_MODE_EXTERN)
|
|
||||||
{
|
|
||||||
if ((mode & GPGME_KEYLIST_MODE_LOCAL)
|
|
||||||
|| secret_only)
|
|
||||||
return gpg_error (GPG_ERR_NOT_SUPPORTED);
|
|
||||||
}
|
|
||||||
|
|
||||||
err = add_arg (gpg, "--with-colons");
|
err = add_arg (gpg, "--with-colons");
|
||||||
if (!err)
|
if (!err)
|
||||||
@ -1893,7 +1885,8 @@ gpg_keylist (void *engine, const char *pattern, int secret_only,
|
|||||||
err = add_arg (gpg, "--with-fingerprint");
|
err = add_arg (gpg, "--with-fingerprint");
|
||||||
if (!err)
|
if (!err)
|
||||||
err = add_arg (gpg, "--with-fingerprint");
|
err = add_arg (gpg, "--with-fingerprint");
|
||||||
if (!err && (mode & GPGME_KEYLIST_MODE_SIGS)
|
if (!err
|
||||||
|
&& (mode & GPGME_KEYLIST_MODE_SIGS)
|
||||||
&& (mode & GPGME_KEYLIST_MODE_SIG_NOTATIONS))
|
&& (mode & GPGME_KEYLIST_MODE_SIG_NOTATIONS))
|
||||||
{
|
{
|
||||||
err = add_arg (gpg, "--list-options");
|
err = add_arg (gpg, "--list-options");
|
||||||
@ -1902,22 +1895,51 @@ gpg_keylist (void *engine, const char *pattern, int secret_only,
|
|||||||
}
|
}
|
||||||
if (!err)
|
if (!err)
|
||||||
{
|
{
|
||||||
if (mode & GPGME_KEYLIST_MODE_EXTERN)
|
if ( (mode & GPGME_KEYLIST_MODE_EXTERN) )
|
||||||
{
|
{
|
||||||
err = add_arg (gpg, "--search-keys");
|
if (secret_only)
|
||||||
gpg->colon.preprocess_fnc = gpg_keylist_preprocess;
|
err = gpg_error (GPG_ERR_NOT_SUPPORTED);
|
||||||
|
else if ( (mode & GPGME_KEYLIST_MODE_LOCAL))
|
||||||
|
{
|
||||||
|
/* The local+extern mode is special. It works only with
|
||||||
|
gpg >= 2.0.10. FIXME: We should check that we have
|
||||||
|
such a version to that we can return a proper error
|
||||||
|
code. The problem is that we don't know the context
|
||||||
|
here and thus can't accesses the cached version
|
||||||
|
number for the engine info structure. */
|
||||||
|
err = add_arg (gpg, "--locate-keys");
|
||||||
|
if ((mode & GPGME_KEYLIST_MODE_SIGS))
|
||||||
|
err = add_arg (gpg, "--with-sig-check");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
err = add_arg (gpg, "--search-keys");
|
||||||
|
gpg->colon.preprocess_fnc = gpg_keylist_preprocess;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
err = add_arg (gpg, secret_only ? "--list-secret-keys"
|
err = add_arg (gpg, secret_only ? "--list-secret-keys"
|
||||||
: ((mode & GPGME_KEYLIST_MODE_SIGS)
|
: ((mode & GPGME_KEYLIST_MODE_SIGS)
|
||||||
? "--check-sigs" : "--list-keys"));
|
? "--check-sigs" : "--list-keys"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Tell the gpg object about the data. */
|
|
||||||
if (!err)
|
if (!err)
|
||||||
err = add_arg (gpg, "--");
|
err = add_arg (gpg, "--");
|
||||||
|
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static gpgme_error_t
|
||||||
|
gpg_keylist (void *engine, const char *pattern, int secret_only,
|
||||||
|
gpgme_keylist_mode_t mode)
|
||||||
|
{
|
||||||
|
engine_gpg_t gpg = engine;
|
||||||
|
gpgme_error_t err;
|
||||||
|
|
||||||
|
err = gpg_keylist_build_options (gpg, secret_only, mode);
|
||||||
|
|
||||||
if (!err && pattern && *pattern)
|
if (!err && pattern && *pattern)
|
||||||
err = add_arg (gpg, pattern);
|
err = add_arg (gpg, pattern);
|
||||||
|
|
||||||
@ -1938,26 +1960,7 @@ gpg_keylist_ext (void *engine, const char *pattern[], int secret_only,
|
|||||||
if (reserved)
|
if (reserved)
|
||||||
return gpg_error (GPG_ERR_INV_VALUE);
|
return gpg_error (GPG_ERR_INV_VALUE);
|
||||||
|
|
||||||
err = add_arg (gpg, "--with-colons");
|
err = gpg_keylist_build_options (gpg, secret_only, mode);
|
||||||
if (!err)
|
|
||||||
err = add_arg (gpg, "--fixed-list-mode");
|
|
||||||
if (!err)
|
|
||||||
err = add_arg (gpg, "--with-fingerprint");
|
|
||||||
if (!err)
|
|
||||||
err = add_arg (gpg, "--with-fingerprint");
|
|
||||||
if (!err && (mode & GPGME_KEYLIST_MODE_SIGS)
|
|
||||||
&& (mode & GPGME_KEYLIST_MODE_SIG_NOTATIONS))
|
|
||||||
{
|
|
||||||
err = add_arg (gpg, "--list-options");
|
|
||||||
if (!err)
|
|
||||||
err = add_arg (gpg, "show-sig-subpackets=\"20,26\"");
|
|
||||||
}
|
|
||||||
if (!err)
|
|
||||||
err = add_arg (gpg, secret_only ? "--list-secret-keys"
|
|
||||||
: ((mode & GPGME_KEYLIST_MODE_SIGS)
|
|
||||||
? "--check-sigs" : "--list-keys"));
|
|
||||||
if (!err)
|
|
||||||
err = add_arg (gpg, "--");
|
|
||||||
|
|
||||||
if (pattern)
|
if (pattern)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user