Blame tests/gpg/t-support.h

Packit d7e8d0
/* t-support.h - Helper routines for regression tests.
Packit d7e8d0
   Copyright (C) 2000 Werner Koch (dd9jn)
Packit d7e8d0
   Copyright (C) 2001, 2002, 2003, 2004 g10 Code GmbH
Packit d7e8d0
Packit d7e8d0
   This file is part of GPGME.
Packit d7e8d0
Packit d7e8d0
   GPGME is free software; you can redistribute it and/or modify it
Packit d7e8d0
   under the terms of the GNU Lesser General Public License as
Packit d7e8d0
   published by the Free Software Foundation; either version 2.1 of
Packit d7e8d0
   the License, or (at your option) any later version.
Packit d7e8d0
Packit d7e8d0
   GPGME is distributed in the hope that it will be useful, but
Packit d7e8d0
   WITHOUT ANY WARRANTY; without even the implied warranty of
Packit d7e8d0
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit d7e8d0
   Lesser General Public License for more details.
Packit d7e8d0
Packit d7e8d0
   You should have received a copy of the GNU Lesser General Public
Packit d7e8d0
   License along with this program; if not, write to the Free Software
Packit d7e8d0
   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
Packit d7e8d0
   02111-1307, USA.  */
Packit d7e8d0
Packit d7e8d0
#include <unistd.h>
Packit d7e8d0
#include <errno.h>
Packit d7e8d0
#include <stdlib.h>
Packit d7e8d0
#include <locale.h>
Packit d7e8d0
Packit d7e8d0
#ifdef HAVE_W32_SYSTEM
Packit d7e8d0
#include <windows.h>
Packit d7e8d0
#endif
Packit d7e8d0
Packit d7e8d0
#include <gpgme.h>
Packit d7e8d0
Packit d7e8d0
#ifndef DIM
Packit d7e8d0
#define DIM(v)		     (sizeof(v)/sizeof((v)[0]))
Packit d7e8d0
#endif
Packit d7e8d0
Packit d7e8d0
#define fail_if_err(err)					\
Packit d7e8d0
  do								\
Packit d7e8d0
    {								\
Packit d7e8d0
      if (err)							\
Packit d7e8d0
        {							\
Packit d7e8d0
          fprintf (stderr, "%s:%d: %s: %s\n",			\
Packit d7e8d0
                   __FILE__, __LINE__, gpgme_strsource (err),	\
Packit d7e8d0
		   gpgme_strerror (err));			\
Packit d7e8d0
          exit (1);						\
Packit d7e8d0
        }							\
Packit d7e8d0
    }								\
Packit d7e8d0
  while (0)
Packit d7e8d0
Packit d7e8d0
Packit d7e8d0
#ifdef GPGRT_HAVE_MACRO_FUNCTION
Packit d7e8d0
void GPGRT_ATTR_NORETURN
Packit d7e8d0
_test (const char *expr, const char *file, int line,
Packit d7e8d0
       const char *func)
Packit d7e8d0
{
Packit d7e8d0
  fprintf (stderr, "Test \"%s\" in %s failed (%s:%d)\n",
Packit d7e8d0
           expr, func, file, line);
Packit d7e8d0
  exit (1);
Packit d7e8d0
}
Packit d7e8d0
# define test(expr)                                             \
Packit d7e8d0
  ((expr)                                                       \
Packit d7e8d0
   ? (void) 0                                                   \
Packit d7e8d0
   : _test (#expr, __FILE__, __LINE__, __FUNCTION__))
Packit d7e8d0
#else /*!GPGRT_HAVE_MACRO_FUNCTION*/
Packit d7e8d0
void
Packit d7e8d0
_test (const char *expr, const char *file, int line)
Packit d7e8d0
{
Packit d7e8d0
  fprintf (stderr, "Test \"%s\" failed (%s:%d)\n",
Packit d7e8d0
           expr, file, line);
Packit d7e8d0
  exit (1);
Packit d7e8d0
}
Packit d7e8d0
# define test(expr)                                             \
Packit d7e8d0
  ((expr)                                                       \
Packit d7e8d0
   ? (void) 0                                                   \
Packit d7e8d0
   : _test (#expr, __FILE__, __LINE__))
Packit d7e8d0
#endif /*!GPGRT_HAVE_MACRO_FUNCTION*/
Packit d7e8d0
Packit d7e8d0
Packit d7e8d0
static const char *
Packit d7e8d0
nonnull (const char *s)
Packit d7e8d0
{
Packit d7e8d0
  return s? s :"[none]";
Packit d7e8d0
}
Packit d7e8d0
Packit d7e8d0
Packit d7e8d0
void
Packit d7e8d0
print_data (gpgme_data_t dh)
Packit d7e8d0
{
Packit d7e8d0
#define BUF_SIZE 512
Packit d7e8d0
  char buf[BUF_SIZE + 1];
Packit d7e8d0
  int ret;
Packit d7e8d0
Packit d7e8d0
  ret = gpgme_data_seek (dh, 0, SEEK_SET);
Packit d7e8d0
  if (ret)
Packit d7e8d0
    fail_if_err (gpgme_err_code_from_errno (errno));
Packit d7e8d0
  while ((ret = gpgme_data_read (dh, buf, BUF_SIZE)) > 0)
Packit d7e8d0
    fwrite (buf, ret, 1, stdout);
Packit d7e8d0
  if (ret < 0)
Packit d7e8d0
    fail_if_err (gpgme_err_code_from_errno (errno));
Packit d7e8d0
}
Packit d7e8d0
Packit d7e8d0
Packit d7e8d0
gpgme_error_t
Packit d7e8d0
passphrase_cb (void *opaque, const char *uid_hint, const char *passphrase_info,
Packit d7e8d0
	       int last_was_bad, int fd)
Packit d7e8d0
{
Packit d7e8d0
  int res;
Packit d7e8d0
  char pass[] = "abc\n";
Packit d7e8d0
  int passlen = strlen (pass);
Packit d7e8d0
  int off = 0;
Packit d7e8d0
Packit d7e8d0
  (void)opaque;
Packit d7e8d0
  (void)uid_hint;
Packit d7e8d0
  (void)passphrase_info;
Packit d7e8d0
  (void)last_was_bad;
Packit d7e8d0
Packit d7e8d0
  do
Packit d7e8d0
    {
Packit d7e8d0
      res = gpgme_io_write (fd, &pass[off], passlen - off);
Packit d7e8d0
      if (res > 0)
Packit d7e8d0
	off += res;
Packit d7e8d0
    }
Packit d7e8d0
  while (res > 0 && off != passlen);
Packit d7e8d0
Packit d7e8d0
  return off == passlen ? 0 : gpgme_error_from_errno (errno);
Packit d7e8d0
}
Packit d7e8d0
Packit d7e8d0
Packit d7e8d0
char *
Packit d7e8d0
make_filename (const char *fname)
Packit d7e8d0
{
Packit d7e8d0
  const char *srcdir = getenv ("srcdir");
Packit d7e8d0
  char *buf;
Packit d7e8d0
Packit d7e8d0
  if (!srcdir)
Packit d7e8d0
    srcdir = ".";
Packit d7e8d0
  buf = malloc (strlen(srcdir) + strlen(fname) + 2);
Packit d7e8d0
  if (!buf)
Packit d7e8d0
    exit (8);
Packit d7e8d0
  strcpy (buf, srcdir);
Packit d7e8d0
  strcat (buf, "/");
Packit d7e8d0
  strcat (buf, fname);
Packit d7e8d0
  return buf;
Packit d7e8d0
}
Packit d7e8d0
Packit d7e8d0
Packit d7e8d0
void
Packit d7e8d0
init_gpgme (gpgme_protocol_t proto)
Packit d7e8d0
{
Packit d7e8d0
  gpgme_error_t err;
Packit d7e8d0
Packit d7e8d0
  gpgme_check_version (NULL);
Packit d7e8d0
  setlocale (LC_ALL, "");
Packit d7e8d0
  gpgme_set_locale (NULL, LC_CTYPE, setlocale (LC_CTYPE, NULL));
Packit d7e8d0
#ifndef HAVE_W32_SYSTEM
Packit d7e8d0
  gpgme_set_locale (NULL, LC_MESSAGES, setlocale (LC_MESSAGES, NULL));
Packit d7e8d0
#endif
Packit d7e8d0
Packit d7e8d0
  err = gpgme_engine_check_version (proto);
Packit d7e8d0
  fail_if_err (err);
Packit d7e8d0
}
Packit d7e8d0
Packit d7e8d0
Packit d7e8d0
void
Packit d7e8d0
print_import_result (gpgme_import_result_t r)
Packit d7e8d0
{
Packit d7e8d0
  gpgme_import_status_t st;
Packit d7e8d0
Packit d7e8d0
  for (st=r->imports; st; st = st->next)
Packit d7e8d0
    {
Packit d7e8d0
      printf ("  fpr: %s err: %d (%s) status:", nonnull (st->fpr),
Packit d7e8d0
              st->result, gpgme_strerror (st->result));
Packit d7e8d0
      if (st->status & GPGME_IMPORT_NEW)
Packit d7e8d0
        fputs (" new", stdout);
Packit d7e8d0
      if (st->status & GPGME_IMPORT_UID)
Packit d7e8d0
        fputs (" uid", stdout);
Packit d7e8d0
      if (st->status & GPGME_IMPORT_SIG)
Packit d7e8d0
        fputs (" sig", stdout);
Packit d7e8d0
      if (st->status & GPGME_IMPORT_SUBKEY)
Packit d7e8d0
        fputs (" subkey", stdout);
Packit d7e8d0
      if (st->status & GPGME_IMPORT_SECRET)
Packit d7e8d0
        fputs (" secret", stdout);
Packit d7e8d0
      putchar ('\n');
Packit d7e8d0
    }
Packit d7e8d0
  printf ("key import summary:\n"
Packit d7e8d0
          "        considered: %d\n"
Packit d7e8d0
          "        no user id: %d\n"
Packit d7e8d0
          "          imported: %d\n"
Packit d7e8d0
          "      imported_rsa: %d\n"
Packit d7e8d0
          "         unchanged: %d\n"
Packit d7e8d0
          "      new user ids: %d\n"
Packit d7e8d0
          "       new subkeys: %d\n"
Packit d7e8d0
          "    new signatures: %d\n"
Packit d7e8d0
          "   new revocations: %d\n"
Packit d7e8d0
          "       secret read: %d\n"
Packit d7e8d0
          "   secret imported: %d\n"
Packit d7e8d0
          "  secret unchanged: %d\n"
Packit d7e8d0
          "  skipped new keys: %d\n"
Packit d7e8d0
          "      not imported: %d\n",
Packit d7e8d0
          r->considered,
Packit d7e8d0
          r->no_user_id,
Packit d7e8d0
          r->imported,
Packit d7e8d0
          r->imported_rsa,
Packit d7e8d0
          r->unchanged,
Packit d7e8d0
          r->new_user_ids,
Packit d7e8d0
          r->new_sub_keys,
Packit d7e8d0
          r->new_signatures,
Packit d7e8d0
          r->new_revocations,
Packit d7e8d0
          r->secret_read,
Packit d7e8d0
          r->secret_imported,
Packit d7e8d0
          r->secret_unchanged,
Packit d7e8d0
          r->skipped_new_keys,
Packit d7e8d0
          r->not_imported);
Packit d7e8d0
}
Packit d7e8d0