From 01dcc2cf2f2f00235ffa7d0718ecb468370980cc Mon Sep 17 00:00:00 2001 From: Justus Winter Date: Fri, 22 Jan 2016 11:47:58 +0100 Subject: [PATCH] tests/openpgp: Reimplement 'pinentry.sh' in c. * tests/openpgp/Makefile.am: Build new program. * tests/openpgp/defs.inc: Use the new program. * tests/openpgp/fake-pinentry.c: New file. -- Building an executable that does not require an interpreter makes it easier to use on Windows. Signed-off-by: Justus Winter --- tests/openpgp/Makefile.am | 9 +++++++ tests/openpgp/defs.inc | 2 +- tests/openpgp/fake-pinentry.c | 50 +++++++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 tests/openpgp/fake-pinentry.c diff --git a/tests/openpgp/Makefile.am b/tests/openpgp/Makefile.am index a04b62ca7..873ddcea0 100644 --- a/tests/openpgp/Makefile.am +++ b/tests/openpgp/Makefile.am @@ -23,6 +23,15 @@ required_pgms = ../../g10/gpg2 ../../agent/gpg-agent \ ../../tools/gpg-connect-agent ../../tools/mk-tdata +AM_CPPFLAGS = -I$(top_srcdir)/common +include $(top_srcdir)/am/cmacros.am + +AM_CFLAGS = + +noinst_PROGRAMS = fake-pinentry + +fake_pinentry_SOURCES = fake-pinentry.c + TESTS_ENVIRONMENT = GNUPGHOME=$(abs_builddir) GPG_AGENT_INFO= LC_ALL=C if SQLITE3 diff --git a/tests/openpgp/defs.inc b/tests/openpgp/defs.inc index 941f786bc..8f969db26 100755 --- a/tests/openpgp/defs.inc +++ b/tests/openpgp/defs.inc @@ -222,7 +222,7 @@ GPG_CONNECT_AGENT="../../tools/gpg-connect-agent" GPGCONF="../../tools/gpgconf" GPG_PRESET_PASSPHRASE="../../agent/gpg-preset-passphrase" MKTDATA="../../tools/mk-tdata" -PINENTRY="$(cd $srcdir && /bin/pwd)/pinentry.sh" +PINENTRY="$(/bin/pwd)/fake-pinentry${EXEEXT}" # Default to empty passphrase for pinentry.sh PINENTRY_USER_DATA= diff --git a/tests/openpgp/fake-pinentry.c b/tests/openpgp/fake-pinentry.c new file mode 100644 index 000000000..c90637016 --- /dev/null +++ b/tests/openpgp/fake-pinentry.c @@ -0,0 +1,50 @@ +/* Fake pinentry program for the OpenPGP test suite. + * + * Copyright (C) 2016 g10 code GmbH + * + * This file is part of GnuPG. + * + * GnuPG is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * GnuPG is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ + +#include +#include +#include + +int +main (int argc, char **argv) +{ + (void) argc, (void) argv; + + printf ("OK - what's up?\n"); + + while (! feof (stdin)) + { + char buffer[128]; + + if (fgets (buffer, sizeof buffer, stdin) == NULL) + break; + + if (strncmp (buffer, "GETPIN", 6) == 0) + printf ("D %s\nOK\n", getenv ("PINENTRY_USER_DATA") ?: ""); + else if (strncmp (buffer, "BYE", 3) == 0) + { + printf ("OK\n"); + break; + } + else + printf ("OK\n"); + } + return 0; +}