tests: Make signature notation test compatible with older GnuPGs.

* lang/python/tests/t-sig-notation.py: Only check the critical flag
when GnuPG >= 2.1.13 is used.
* tests/gpg/t-sig-notation.c: Likewise.

Fixes-commit: c88c9ef3
Signed-off-by: Justus Winter <justus@g10code.com>
This commit is contained in:
Justus Winter 2016-09-12 14:53:08 +02:00
parent d480f6b701
commit a0263ad282
2 changed files with 40 additions and 3 deletions

View File

@ -29,6 +29,14 @@ expected_notations = {
None: ("http://www.gnu.org/policy/", 0), None: ("http://www.gnu.org/policy/", 0),
} }
# GnuPG prior to 2.1.13 did not report the critical flag correctly.
with core.Context() as c:
version = c.engine_info.version
have_correct_sig_data = not (version.startswith("1.")
or version == "2.1.1"
or (version.startswith("2.1.1")
and version[5] < '3'))
def check_result(result): def check_result(result):
assert len(result.signatures) == 1, "Unexpected number of signatures" assert len(result.signatures) == 1, "Unexpected number of signatures"
sig = result.signatures[0] sig = result.signatures[0]
@ -45,7 +53,8 @@ def check_result(result):
assert r.human_readable \ assert r.human_readable \
== bool(flags&constants.SIG_NOTATION_HUMAN_READABLE) == bool(flags&constants.SIG_NOTATION_HUMAN_READABLE)
assert r.critical \ assert r.critical \
== bool(flags&constants.SIG_NOTATION_CRITICAL) == (bool(flags&constants.SIG_NOTATION_CRITICAL)
if have_correct_sig_data else False)
assert len(expected_notations) == 0 assert len(expected_notations) == 0

View File

@ -24,6 +24,7 @@
#include <config.h> #include <config.h>
#endif #endif
#include <assert.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
@ -33,6 +34,11 @@
#include "t-support.h" #include "t-support.h"
/* GnuPG prior to 2.1.13 did not report the critical flag
correctly. */
int have_correct_sig_data;
static struct { static struct {
const char *name; const char *name;
const char *value; const char *value;
@ -83,11 +89,17 @@ check_result (gpgme_verify_result_t result)
&& r->value && r->value
&& !strcmp (r->value, expected_notations[i].value) && !strcmp (r->value, expected_notations[i].value)
&& r->value_len == strlen (expected_notations[i].value) && r->value_len == strlen (expected_notations[i].value)
&& r->flags == expected_notations[i].flags && r->flags
== (have_correct_sig_data
? expected_notations[i].flags
: expected_notations[i].flags
& ~GPGME_SIG_NOTATION_CRITICAL)
&& r->human_readable && r->human_readable
== !!(r->flags & GPGME_SIG_NOTATION_HUMAN_READABLE) == !!(r->flags & GPGME_SIG_NOTATION_HUMAN_READABLE)
&& r->critical && r->critical
== !!(r->flags & GPGME_SIG_NOTATION_CRITICAL)) == (have_correct_sig_data
? !!(r->flags & GPGME_SIG_NOTATION_CRITICAL)
: 0))
{ {
expected_notations[i].seen++; expected_notations[i].seen++;
any++; any++;
@ -121,9 +133,25 @@ main (int argc, char *argv[])
gpgme_verify_result_t result; gpgme_verify_result_t result;
char *agent_info; char *agent_info;
int i; int i;
gpgme_engine_info_t engine_info;
init_gpgme (GPGME_PROTOCOL_OpenPGP); init_gpgme (GPGME_PROTOCOL_OpenPGP);
err = gpgme_get_engine_info (&engine_info);
fail_if_err (err);
for (; engine_info; engine_info = engine_info->next)
if (engine_info->protocol == GPGME_PROTOCOL_OpenPGP)
break;
assert (engine_info);
/* GnuPG prior to 2.1.13 did not report the critical flag
correctly. */
have_correct_sig_data =
! (strncmp ("1.", engine_info->version, 2)
|| (strncmp ("2.1.1", engine_info->version, 5)
&& (engine_info->version[5] == 0
|| engine_info->version[5] < '3')));
err = gpgme_new (&ctx); err = gpgme_new (&ctx);
fail_if_err (err); fail_if_err (err);