[Gpg4win-commits] [git] Gpg4win - branch, master, updated. gpg4win-2.2.3-13-g369bc42

by Andre Heinecke cvs at cvs.gnupg.org
Mon Mar 9 11:44:39 CET 2015


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GnuPG for Windows".

The branch, master has been updated
       via  369bc42c7963df3fc70ea24744d8418f9532e2ae (commit)
       via  05b1fef96457711c31837ea7a06eeea49cee1bee (commit)
       via  0ace15f9eb788b2cb93f933ffd0c04b86df1f1b1 (commit)
       via  79a97ee85224e80f6b2a6a80a077d02b54ac87c0 (commit)
       via  cb5b4dcea170af0b400f7686d6aff2bed993bccb (commit)
       via  726f584d377646bc77554b25208034129a95829d (commit)
       via  df0c7480d1e0f17ca1a0ab26ca53af8fb53d834a (commit)
      from  1d0aea89d9c8daaa7091541e92c0bbb8bcc1de5f (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 369bc42c7963df3fc70ea24744d8418f9532e2ae
Author: Andre Heinecke <aheinecke at intevation.de>
Date:   Mon Mar 9 11:34:47 2015 +0100

    Update adns to 1.4-g10-5
    
    * packages/packages.current (adns): Update.

diff --git a/packages/packages.current b/packages/packages.current
index 7850937..889ff9c 100644
--- a/packages/packages.current
+++ b/packages/packages.current
@@ -466,9 +466,11 @@ chk  16af56d0e7bdf081d60c59ea4d72e7df6d9cec21
 #
 server ftp://ftp.g10code.com/g10code/adns
 
-# checked: 2014-07-16 ah - updated
-file adns-1.4-g10-4.tar.bz2
-chk  040aed033694aeb3a97b8e5d74b990d4cad6bc99
+# last changed: 2015-03-09
+# by: ah
+# verified: Sig D869 2123 C406 5DEA 5E0F  3AB5 249B 39D2 4F25 E3B6
+file adns-1.4-g10-5.tar.bz2
+chk  aecd6213118f01aa38f535dc3bafc31b1e7c1c21
 
 
 #

commit 05b1fef96457711c31837ea7a06eeea49cee1bee
Author: Andre Heinecke <aheinecke at intevation.de>
Date:   Mon Mar 9 11:30:36 2015 +0100

    Update gpa to 0.9.7
    
    * packages/packages.current (gpa): Update.
    * packages/packages.current: Summarize gnupg.org file verification.

diff --git a/NEWS b/NEWS
index e83cf03..c7ff35e 100644
--- a/NEWS
+++ b/NEWS
@@ -19,7 +19,7 @@ Noteworthy changes in version 2.2.4 (unreleased)
 ~~~~~~~~~~~~~~~
 GnuPG:          2.0.27
 Kleopatra:      2.2.0-git945878c
-GPA:            0.9.6
+GPA:            0.9.7
 GpgOL:          1.2.1
 GpgEX:          1.0.1
 Claws-Mail:     3.9.1
diff --git a/packages/packages.current b/packages/packages.current
index 0ec1943..7850937 100644
--- a/packages/packages.current
+++ b/packages/packages.current
@@ -396,6 +396,9 @@ chk  6e38be3377340a21a1f13ff84b5e6adce97cd1d4
 #
 # GnuPG et al.
 #
+# All tarballs from this server are verified with an openpgp
+# signature made by "Werner Koch (dist sig)".
+# D869 2123 C406 5DEA 5E0F  3AB5 249B 39D2 4F25 E3B6
 server ftp://ftp.gnupg.org/gcrypt
 
 # checked: 2014-07-16 ah - updated
@@ -404,7 +407,6 @@ chk  50fbff11446a7b0decbf65a6e6b0eda17b5139fb
 
 # last changed: 2015-03-09
 # by: ah
-# verified: Sig D869 2123 C406 5DEA 5E0F  3AB5 249B 39D2 4F25 E3B6
 file libgcrypt/libgcrypt-1.6.3.tar.bz2
 chk  9456e7b64db9df8360a1407a38c8c958da80bbf1
 
@@ -414,13 +416,11 @@ chk  37d0893a587354af2b6e49f6ae701ca84f52da67
 
 # last changed: 2015-03-09
 # by: ah
-# verified: Sig D869 2123 C406 5DEA 5E0F  3AB5 249B 39D2 4F25 E3B6
 file libassuan/libassuan-2.2.0.tar.bz2
 chk  7cf0545955ce414044bb99b871d324753dd7b2e5
 
 # last changed: 2015-02-18
 # by: ah
-# verified: Sig D869 2123 C406 5DEA 5E0F  3AB5 249B 39D2 4F25 E3B6
 name gnupg2-2.0.27.tar.bz2
 file gnupg/gnupg-2.0.27.tar.bz2
 chk  d065be185f5bac8ea07b210ab7756e79b83b63d4
@@ -431,7 +431,6 @@ chk  e708d4aa5ce852f4de3f4b58f4e4f221f5e5c690
 
 # last changed: 2015-03-09
 # by: ah
-# verified: Sig D869 2123 C406 5DEA 5E0F  3AB5 249B 39D2 4F25 E3B6
 file pinentry/pinentry-0.9.0.tar.bz2
 chk  f8e5c774c35fbb91d84e82559baf76f6b4513236
 
@@ -441,13 +440,13 @@ chk  e28141d2b03612c09512651795976c58ed3f8035
 
 # last changed: 2015-03-09
 # by: ah
-# verified: Sig D869 2123 C406 5DEA 5E0F  3AB5 249B 39D2 4F25 E3B6
 file gpgme/gpgme-1.5.3.tar.bz2
 chk  8dd7711a4de117994fe2d45879ef8a9900d50f6a
 
-# checked: 2014-11-21 ah - updated
-file gpa/gpa-0.9.6.tar.bz2
-chk  c664409c7d423eccc1120fbd0d232108269c9797
+# last changed: 2015-03-09
+# by: ah
+file gpa/gpa-0.9.7.tar.bz2
+chk  9eb07bcceeb986c7b6dbce8a18b82a2c344b50ce
 
 # (Snapshots)
 # server ftp://ftp.g10code.com/g10code/scratch

commit 0ace15f9eb788b2cb93f933ffd0c04b86df1f1b1
Author: Andre Heinecke <aheinecke at intevation.de>
Date:   Mon Mar 9 11:22:43 2015 +0100

    Remove obsolete gpa patches
    
    * patches/gpa-0.9.4: Removed patches.
    * Makefile.am (EXTRA_DIST): Remove patches.
    
    --
    
    Those patches were already not applied in the last release
    which included gpa 0.9.6 and should have been removed then.

diff --git a/Makefile.am b/Makefile.am
index 6b05d6a..3949703 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -50,12 +50,6 @@ EXTRA_DIST = autogen.sh README.GIT ONEWS \
         patches/gnutls-2.12.23/05-cve-2014-3466.patch \
         patches/gnutls-2.12.23/fix-gcrypt-private-api-usage.patch \
         patches/gnutls-2.12.23/gnulib-mingw-w64-fix.patch \
-        patches/gpa-0.9.4/01-bin-encrypt.patch \
-        patches/gpa-0.9.4/02-cms-detection.patch \
-        patches/gpa-0.9.4/02-x509-import.patch \
-        patches/gpa-0.9.4/03-homedir-via-gpgconf.patch \
-        patches/gpa-0.9.4/04-utf-clip-crash.patch \
-        patches/gpa-0.9.4/05-event-done.patch \
         patches/gtkhtml2_viewer-0.34/80-src-makefile.postcfg-build \
         patches/libtasn1-2.14/gnulib-mingw-w64-fix.patch \
         patches/pthreads-w32-2-8-0-release/01-make.patch \
diff --git a/patches/gpa-0.9.4/01-bin-encrypt.patch b/patches/gpa-0.9.4/01-bin-encrypt.patch
deleted file mode 100755
index 4eb9a4d..0000000
--- a/patches/gpa-0.9.4/01-bin-encrypt.patch
+++ /dev/null
@@ -1,509 +0,0 @@
-#! /bin/sh
-patch -p1 -l -f $* < $0
-exit $?
-
-From 5574ece82ed5950dca11d729744f52ac159444d5 Mon Sep 17 00:00:00 2001
-From: Werner Koch <wk at gnupg.org>
-Date: Wed, 31 Jul 2013 17:35:39 +0200
-Subject: [PATCH] Implement the binary option for server based encrypt and
- sign.
-
-* src/server.c (conn_ctrl_s): Add field OUTPUT_BINARY.
-(prepare_io_streams): Set data encoding to binary if requested.
-(output_notify): New.
-(connection_startup): Register new callback.
-* src/gpastreamencryptop.c (start_encryption): Use a provided encoding.
-* src/gpastreamsignop.c (start_signing): Ditto.
---
-
-Note that these changes have not yet been tested.
----
- src/gpastreamencryptop.c |   62 +++++++++++++++++++++++---------------------
- src/gpastreamsignop.c    |   64 ++++++++++++++++++++++++---------------------
- src/server.c             |   23 ++++++++++++++++
- 3 files changed, 90 insertions(+), 59 deletions(-)
-
-diff --git a/src/gpastreamencryptop.c b/src/gpastreamencryptop.c
-index 146707f..70a5e24 100644
---- a/src/gpastreamencryptop.c
-+++ b/src/gpastreamencryptop.c
-@@ -28,11 +28,11 @@
- #include "selectkeydlg.h"
-
-
--struct _GpaStreamEncryptOperation
-+struct _GpaStreamEncryptOperation
- {
-   GpaStreamOperation parent;
--
--  SelectKeyDlg *key_dialog;
-+
-+  SelectKeyDlg *key_dialog;
-   RecipientDlg *recp_dialog;
-   GSList *recipients;
-   gpgme_key_t *keys;
-@@ -40,7 +40,7 @@ struct _GpaStreamEncryptOperation
- };
-
-
--struct _GpaStreamEncryptOperationClass
-+struct _GpaStreamEncryptOperationClass
- {
-   GpaStreamOperationClass parent_class;
- };
-@@ -48,7 +48,7 @@ struct _GpaStreamEncryptOperationClass
-
-
- /* Indentifiers for our properties. */
--enum
-+enum
-   {
-     PROP_0,
-     PROP_RECIPIENTS,
-@@ -95,7 +95,7 @@ static GSList *
- copy_recipients (GSList *recipients)
- {
-   GSList *recp, *newlist;
--
-+
-   newlist= NULL;
-   for (recp = recipients; recp; recp = g_slist_next (recp))
-     newlist = g_slist_append (newlist, g_strdup (recp->data));
-@@ -110,7 +110,7 @@ gpa_stream_encrypt_operation_get_property (GObject *object, guint prop_id,
-                                            GValue *value, GParamSpec *pspec)
- {
-   GpaStreamEncryptOperation *op = GPA_STREAM_ENCRYPT_OPERATION (object);
--
-+
-   switch (prop_id)
-     {
-     case PROP_RECIPIENTS:
-@@ -156,7 +156,7 @@ gpa_stream_encrypt_operation_set_property (GObject *object, guint prop_id,
-
- static void
- gpa_stream_encrypt_operation_finalize (GObject *object)
--{
-+{
-   GpaStreamEncryptOperation *op = GPA_STREAM_ENCRYPT_OPERATION (object);
-
-   release_recipients (op->recipients);
-@@ -180,7 +180,7 @@ gpa_stream_encrypt_operation_init (GpaStreamEncryptOperation *op)
-
-
- static GObject*
--gpa_stream_encrypt_operation_constructor
-+gpa_stream_encrypt_operation_constructor
-	(GType type,
-          guint n_construct_properties,
-          GObjectConstructParam *construct_properties)
-@@ -224,7 +224,7 @@ gpa_stream_encrypt_operation_constructor
-   g_signal_connect (G_OBJECT (GPA_OPERATION (op)->context), "done",
-		    G_CALLBACK (done_cb), op);
-
--  gtk_window_set_title
-+  gtk_window_set_title
-     (GTK_WINDOW (GPA_STREAM_OPERATION (op)->progress_dialog),
-			_("Encrypting message ..."));
-
-@@ -241,7 +241,7 @@ static void
- gpa_stream_encrypt_operation_class_init (GpaStreamEncryptOperationClass *klass)
- {
-   GObjectClass *object_class = G_OBJECT_CLASS (klass);
--
-+
-   parent_class = g_type_class_peek_parent (klass);
-
-   object_class->constructor = gpa_stream_encrypt_operation_constructor;
-@@ -249,21 +249,21 @@ gpa_stream_encrypt_operation_class_init (GpaStreamEncryptOperationClass *klass)
-   object_class->set_property = gpa_stream_encrypt_operation_set_property;
-   object_class->get_property = gpa_stream_encrypt_operation_get_property;
-
--  g_object_class_install_property
-+  g_object_class_install_property
-     (object_class, PROP_RECIPIENTS,
--     g_param_spec_pointer
-+     g_param_spec_pointer
-      ("recipients", "Recipients",
-       "A list of recipients in rfc-822 mailbox format.",
-       G_PARAM_WRITABLE|G_PARAM_CONSTRUCT_ONLY));
--  g_object_class_install_property
-+  g_object_class_install_property
-     (object_class, PROP_RECIPIENT_KEYS,
--     g_param_spec_pointer
-+     g_param_spec_pointer
-      ("recipient-keys", "Recipient-keys",
-       "An array of gpgme_key_t with the selected keys.",
-       G_PARAM_WRITABLE|G_PARAM_CONSTRUCT_ONLY));
--  g_object_class_install_property
-+  g_object_class_install_property
-     (object_class, PROP_PROTOCOL,
--     g_param_spec_int
-+     g_param_spec_int
-      ("protocol", "Protocol",
-       "The gpgme protocol currently selected.",
-       GPGME_PROTOCOL_OpenPGP, GPGME_PROTOCOL_UNKNOWN, GPGME_PROTOCOL_UNKNOWN,
-@@ -276,7 +276,7 @@ GType
- gpa_stream_encrypt_operation_get_type (void)
- {
-   static GType stream_encrypt_operation_type = 0;
--
-+
-   if (!stream_encrypt_operation_type)
-     {
-       static const GTypeInfo stream_encrypt_operation_info =
-@@ -291,12 +291,12 @@ gpa_stream_encrypt_operation_get_type (void)
-         0,    /* n_preallocs */
-         (GInstanceInitFunc) gpa_stream_encrypt_operation_init,
-       };
--
--      stream_encrypt_operation_type = g_type_register_static
-+
-+      stream_encrypt_operation_type = g_type_register_static
-	(GPA_STREAM_OPERATION_TYPE, "GpaStreamEncryptOperation",
-	 &stream_encrypt_operation_info, 0);
-     }
--
-+
-   return stream_encrypt_operation_type;
- }
-
-@@ -343,10 +343,14 @@ start_encryption (GpaStreamEncryptOperation *op)
-     goto leave;
-
-   /* Set the output encoding.  */
--  if (GPA_STREAM_OPERATION (op)->input_stream
-+  if (GPA_STREAM_OPERATION (op)->input_stream
-       && GPA_STREAM_OPERATION (op)->output_stream)
-     {
--      if (op->selected_protocol == GPGME_PROTOCOL_CMS)
-+      if (gpgme_data_get_encoding (GPA_STREAM_OPERATION(op)->output_stream))
-+        gpgme_data_set_encoding
-+          (GPA_STREAM_OPERATION (op)->output_stream,
-+           gpgme_data_get_encoding (GPA_STREAM_OPERATION(op)->output_stream));
-+      else if (op->selected_protocol == GPGME_PROTOCOL_CMS)
-         gpgme_data_set_encoding (GPA_STREAM_OPERATION (op)->output_stream,
-                                  GPGME_DATA_ENCODING_BASE64);
-       else
-@@ -358,8 +362,8 @@ start_encryption (GpaStreamEncryptOperation *op)
-           err = gpg_error (GPG_ERR_CONFLICT);
-           goto leave;
-         }
--
--      gpgme_set_protocol (GPA_OPERATION (op)->context->ctx,
-+
-+      gpgme_set_protocol (GPA_OPERATION (op)->context->ctx,
-                           op->selected_protocol);
-
-       /* We always trust the keys because the recipient selection
-@@ -376,7 +380,7 @@ start_encryption (GpaStreamEncryptOperation *op)
-
-       /* Show and update the progress dialog.  */
-       gtk_widget_show_all (GPA_STREAM_OPERATION (op)->progress_dialog);
--      gpa_progress_dialog_set_label
-+      gpa_progress_dialog_set_label
-         (GPA_PROGRESS_DIALOG (GPA_STREAM_OPERATION (op)->progress_dialog),
-          _("Message encryption"));
-     }
-@@ -394,13 +398,13 @@ start_encryption (GpaStreamEncryptOperation *op)
-
-
- /* The recipient key selection dialog has returned.  */
--static void
-+static void
- response_cb (GtkDialog *dialog, int response, void *user_data)
- {
-   GpaStreamEncryptOperation *op = user_data;
-
-   gtk_widget_hide (GTK_WIDGET (dialog));
--
-+
-   if (response != GTK_RESPONSE_OK)
-     {
-       /* The dialog was canceled, so we do nothing and complete the
-@@ -514,7 +518,7 @@ gpa_stream_encrypt_operation_get_keys (GpaStreamEncryptOperation *op,
-                                        gpgme_protocol_t *r_protocol)
- {
-   g_return_val_if_fail (op, NULL);
--
-+
-   if (r_protocol)
-     *r_protocol = op->selected_protocol;
-   return gpa_gpgme_copy_keyarray (op->keys);
-diff --git a/src/gpastreamsignop.c b/src/gpastreamsignop.c
-index 0b955eb..a19b0a3 100644
---- a/src/gpastreamsignop.c
-+++ b/src/gpastreamsignop.c
-@@ -28,19 +28,19 @@
-
-
-
--struct _GpaStreamSignOperation
-+struct _GpaStreamSignOperation
- {
-   GpaStreamOperation parent;
-
-   GtkWidget *sign_dialog;
--
-+
-   const char *sender;
-   gpgme_protocol_t requested_protocol;
-   gboolean detached;
- };
-
-
--struct _GpaStreamSignOperationClass
-+struct _GpaStreamSignOperationClass
- {
-   GpaStreamOperationClass parent_class;
- };
-@@ -48,7 +48,7 @@ struct _GpaStreamSignOperationClass
-
-
- /* Indentifiers for our properties. */
--enum
-+enum
-   {
-     PROP_0,
-     PROP_SENDER,
-@@ -76,7 +76,7 @@ gpa_stream_sign_operation_get_property (GObject *object, guint prop_id,
-                                            GValue *value, GParamSpec *pspec)
- {
-   GpaStreamSignOperation *op = GPA_STREAM_SIGN_OPERATION (object);
--
-+
-   switch (prop_id)
-     {
-     case PROP_SENDER:
-@@ -122,7 +122,7 @@ gpa_stream_sign_operation_set_property (GObject *object, guint prop_id,
-
- static void
- gpa_stream_sign_operation_finalize (GObject *object)
--{
-+{
- /*   GpaStreamSignOperation *op = GPA_STREAM_SIGN_OPERATION (object); */
-
-   G_OBJECT_CLASS (parent_class)->finalize (object);
-@@ -171,7 +171,7 @@ gpa_stream_sign_operation_ctor (GType type, guint n_construct_properties,
-   g_signal_connect (G_OBJECT (GPA_OPERATION (op)->context), "done",
-		    G_CALLBACK (done_cb), op);
-
--  gtk_window_set_title
-+  gtk_window_set_title
-     (GTK_WINDOW (GPA_STREAM_OPERATION (op)->progress_dialog),
-			_("Signing message ..."));
-
-@@ -186,7 +186,7 @@ static void
- gpa_stream_sign_operation_class_init (GpaStreamSignOperationClass *klass)
- {
-   GObjectClass *object_class = G_OBJECT_CLASS (klass);
--
-+
-   parent_class = g_type_class_peek_parent (klass);
-
-   object_class->constructor = gpa_stream_sign_operation_ctor;
-@@ -194,22 +194,22 @@ gpa_stream_sign_operation_class_init (GpaStreamSignOperationClass *klass)
-   object_class->set_property = gpa_stream_sign_operation_set_property;
-   object_class->get_property = gpa_stream_sign_operation_get_property;
-
--  g_object_class_install_property
-+  g_object_class_install_property
-     (object_class, PROP_SENDER,
--     g_param_spec_pointer
-+     g_param_spec_pointer
-      ("sender", "Sender",
-       "The sender of the message in rfc-822 mailbox format or NULL.",
-       G_PARAM_WRITABLE|G_PARAM_CONSTRUCT_ONLY));
--  g_object_class_install_property
-+  g_object_class_install_property
-     (object_class, PROP_PROTOCOL,
--     g_param_spec_int
-+     g_param_spec_int
-      ("protocol", "Protocol",
-       "The requested gpgme protocol.",
-       GPGME_PROTOCOL_OpenPGP, GPGME_PROTOCOL_UNKNOWN, GPGME_PROTOCOL_UNKNOWN,
-       G_PARAM_WRITABLE|G_PARAM_CONSTRUCT_ONLY));
--  g_object_class_install_property
-+  g_object_class_install_property
-     (object_class, PROP_DETACHED,
--     g_param_spec_boolean
-+     g_param_spec_boolean
-      ("detached", "Detached",
-       "Flag requesting a detached signature.",
-       FALSE,
-@@ -221,7 +221,7 @@ GType
- gpa_stream_sign_operation_get_type (void)
- {
-   static GType stream_sign_operation_type = 0;
--
-+
-   if (!stream_sign_operation_type)
-     {
-       static const GTypeInfo stream_sign_operation_info =
-@@ -236,12 +236,12 @@ gpa_stream_sign_operation_get_type (void)
-         0,    /* n_preallocs */
-         (GInstanceInitFunc) gpa_stream_sign_operation_init,
-       };
--
--      stream_sign_operation_type = g_type_register_static
-+
-+      stream_sign_operation_type = g_type_register_static
-	(GPA_STREAM_OPERATION_TYPE, "GpaStreamSignOperation",
-	 &stream_sign_operation_info, 0);
-     }
--
-+
-   return stream_sign_operation_type;
- }
-
-@@ -274,11 +274,11 @@ set_signers (GpaStreamSignOperation *op, GList *signers)
-         {
-           /* Should not happen because the selection dialog should
-              have not allowed to select different key types.  */
--          gpa_window_error
-+          gpa_window_error
-             (_("The selected certificates are not all of the same type."
-                " That is, you mixed OpenPGP and X.509 certificates."
-                " Please make sure to select only certificates of the"
--               " same type."),
-+               " same type."),
-              GPA_OPERATION (op)->window);
-           return FALSE;
-         }
-@@ -311,7 +311,7 @@ start_signing (GpaStreamSignOperation *op)
-   GList *signers;
-   gpgme_protocol_t protocol;
-
--  signers = gpa_file_sign_dialog_signers
-+  signers = gpa_file_sign_dialog_signers
-     (GPA_FILE_SIGN_DIALOG (op->sign_dialog));
-   if (!set_signers (op, signers))
-     {
-@@ -332,29 +332,33 @@ start_signing (GpaStreamSignOperation *op)
-     goto leave;
-
-   /* Set the output encoding.  */
--  if (GPA_STREAM_OPERATION (op)->input_stream
-+  if (GPA_STREAM_OPERATION (op)->input_stream
-       && GPA_STREAM_OPERATION (op)->output_stream)
-     {
--      if (protocol == GPGME_PROTOCOL_CMS)
-+      if (gpgme_data_get_encoding (GPA_STREAM_OPERATION(op)->output_stream))
-+        gpgme_data_set_encoding
-+          (GPA_STREAM_OPERATION (op)->output_stream,
-+           gpgme_data_get_encoding (GPA_STREAM_OPERATION(op)->output_stream));
-+      else if (protocol == GPGME_PROTOCOL_CMS)
-         gpgme_data_set_encoding (GPA_STREAM_OPERATION (op)->output_stream,
-                                  GPGME_DATA_ENCODING_BASE64);
-       else
-         gpgme_set_armor (GPA_OPERATION (op)->context->ctx, 1);
-
--      err = gpgme_op_sign_start (GPA_OPERATION (op)->context->ctx,
-+      err = gpgme_op_sign_start (GPA_OPERATION (op)->context->ctx,
-                                  GPA_STREAM_OPERATION (op)->input_stream,
-                                  GPA_STREAM_OPERATION (op)->output_stream,
-                                  (op->detached? GPGME_SIG_MODE_DETACH
--                                  /* */       : GPGME_SIG_MODE_NORMAL));
-+                                  /* */       : GPGME_SIG_MODE_NORMAL));
-       if (err)
-         {
-           gpa_gpgme_warning (err);
-           goto leave;
-         }
--
-+
-       /* Show and update the progress dialog.  */
-       gtk_widget_show_all (GPA_STREAM_OPERATION (op)->progress_dialog);
--      gpa_progress_dialog_set_label
-+      gpa_progress_dialog_set_label
-         (GPA_PROGRESS_DIALOG (GPA_STREAM_OPERATION (op)->progress_dialog),
-          _("Message signing"));
-     }
-@@ -372,13 +376,13 @@ start_signing (GpaStreamSignOperation *op)
-
-
- /* The recipient key selection dialog has returned.  */
--static void
-+static void
- response_cb (GtkDialog *dialog, int response, void *user_data)
- {
-   GpaStreamSignOperation *op = user_data;
-
-   gtk_widget_hide (GTK_WIDGET (dialog));
--
-+
-   if (response != GTK_RESPONSE_OK)
-     {
-       /* The dialog was canceled, so we do nothing and complete the
-@@ -448,7 +452,7 @@ done_cb (GpaContext *context, gpg_error_t err, GpaStreamSignOperation *op)
-	    {
-	      char *str;
-	      char *algo_name;
--
-+
-	      str = g_strdup_printf
-		("%s%s", (protocol == GPGME_PROTOCOL_OpenPGP) ? "pgp-" : "",
-		 gpgme_hash_algo_name (sig->hash_algo));
-diff --git a/src/server.c b/src/server.c
-index ee4ec8f..d220ccb 100644
---- a/src/server.c
-+++ b/src/server.c
-@@ -78,6 +78,9 @@ struct conn_ctrl_s
-   /* File descriptor set with the MESSAGE command.  */
-   int message_fd;
-
-+  /* Flag indicating the the output shall be binary.  */
-+  int output_binary;
-+
-   /* Channels used with the gpgme callbacks.  */
-   GIOChannel *input_channel;
-   GIOChannel *output_channel;
-@@ -535,6 +538,8 @@ prepare_io_streams (assuan_context_t ctx,
-       err = gpgme_data_new_from_cbs (r_output_data, &my_gpgme_data_cbs, ctrl);
-       if (err)
-         goto leave;
-+      if (ctrl->output_binary)
-+        gpgme_data_set_encoding (*r_output_data, GPGME_DATA_ENCODING_BINARY);
-     }
-   if (ctrl->message_channel)
-     {
-@@ -1637,6 +1642,7 @@ reset_notify (assuan_context_t ctx, char *line)
-   assuan_close_output_fd (ctx);
-   ctrl->input_fd = -1;
-   ctrl->output_fd = -1;
-+  ctrl->output_binary = 0;
-   if (ctrl->gpa_op)
-     {
-       g_object_unref (ctrl->gpa_op);
-@@ -1648,6 +1654,22 @@ reset_notify (assuan_context_t ctx, char *line)
-   return 0;
- }
-
-+
-+static gpg_error_t
-+output_notify (assuan_context_t ctx, char *line)
-+{
-+  conn_ctrl_t ctrl = assuan_get_pointer (ctx);
-+
-+  if (strstr (line, "--binary"))
-+    ctrl->output_binary = 1;
-+  else
-+    ctrl->output_binary = 0;
-+  /* Note: We also allow --armor and --base64 but because we don't
-+     check for errors we don't need to parse them.  */
-+  return 0;
-+}
-+
-+
- 
- /* Tell libassuan about our commands.   */
- static int
-@@ -1738,6 +1760,7 @@ connection_startup (assuan_fd_t fd)
-   assuan_set_pointer (ctx, ctrl);
-   assuan_set_log_stream (ctx, stderr);
-   assuan_register_reset_notify (ctx, reset_notify);
-+  assuan_register_output_notify (ctx, output_notify);
-   ctrl->message_fd = -1;
-
-   connection_counter++;
---
-1.7.7.1
diff --git a/patches/gpa-0.9.4/02-cms-detection.patch b/patches/gpa-0.9.4/02-cms-detection.patch
deleted file mode 100755
index 6c2ffc7..0000000
--- a/patches/gpa-0.9.4/02-cms-detection.patch
+++ /dev/null
@@ -1,152 +0,0 @@
-#! /bin/sh
-patch -p1 -l -f $* < $0
-exit $?
-
-From 3a8458ae7c083fd46e8d5e165997422a35bdd21f Mon Sep 17 00:00:00 2001
-From: Werner Koch <wk at gnupg.org>
-Date: Fri, 9 Aug 2013 19:46:10 +0200
-Subject: [PATCH 1/2] Improve detection of CMS objects.
-
-* configure.ac: Detect gpgme_data_identify.
-* src/filetype.c (is_cms_data, is_cms_file): Use gpgme_data_identify
-is available.
---
-
-The gpgme_data_identify function has the advantage that it also
-detects X.509 certificates.  This offers way to detect certificate
-files and import them.  As of now the import function does only work
-with PGP.
----
- configure.ac   |    9 +++++++++
- src/filetype.c |   54 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
- 2 files changed, 62 insertions(+), 1 deletions(-)
-
-diff --git a/configure.ac b/configure.ac
-index 57d677f..9f5213d 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -244,6 +244,15 @@ else
-                 have_gpgme=yes,have_gpgme=no)
- fi
-
-+_save_libs=$LIBS
-+_save_cflags=$CFLAGS
-+LIBS="$LIBS $GPGME_LIBS"
-+CFLAGS="$CFLAGS $GPGME_CFLAGS"
-+AC_CHECK_FUNCS([gpgme_data_identify])
-+LIBS=$_save_libs
-+CFLAGS="$_save_cflags"
-+
-+
- dnl The tests below are not anymore used because we now depend on a
- dnl gpgme which has all these features.  However, I keep the code here
- dnl for future work.
-diff --git a/src/filetype.c b/src/filetype.c
-index c59dde7..4e68d27 100644
---- a/src/filetype.c
-+++ b/src/filetype.c
-@@ -22,6 +22,7 @@
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-+#include <gpgme.h>
-
- #include "parsetlv.h"
- #include "filetype.h"
-@@ -32,6 +33,7 @@
-
-
- /* Warning: DATA may be binary but there must be a Nul before DATALEN.  */
-+#ifndef HAVE_GPGME_DATA_IDENTIFY
- static int
- detect_cms (const char *data, size_t datalen)
- {
-@@ -90,6 +92,7 @@ detect_cms (const char *data, size_t datalen)
-
-   return 0;
- }
-+#endif /*!HAVE_GPGME_DATA_IDENTIFY*/
-
-
- /* Return true if the file FNAME looks like an CMS file.  There is no
-@@ -98,6 +101,34 @@ detect_cms (const char *data, size_t datalen)
- int
- is_cms_file (const char *fname)
- {
-+#ifdef HAVE_GPGME_DATA_IDENTIFY
-+  FILE *fp;
-+  gpgme_data_t dh;
-+  gpgme_data_type_t dt;
-+
-+  fp = fopen (fname, "rb");
-+  if (!fp)
-+    return 0; /* Not found - can't be a CMS file.  */
-+  if (gpgme_data_new_from_stream (&dh, fp))
-+    {
-+      fclose (fp);
-+      return 0;
-+    }
-+  dt = gpgme_data_identify (dh, 0);
-+  gpgme_data_release (dh);
-+  fclose (fp);
-+  switch (dt)
-+    {
-+    case GPGME_DATA_TYPE_CMS_SIGNED:
-+    case GPGME_DATA_TYPE_CMS_ENCRYPTED:
-+    case GPGME_DATA_TYPE_CMS_OTHER:
-+    case GPGME_DATA_TYPE_X509_CERT:
-+    case GPGME_DATA_TYPE_PKCS12:
-+      return 1;
-+    default:
-+      return 0;
-+    }
-+#else
-   int result;
-   FILE *fp;
-   char *data;
-@@ -121,6 +152,7 @@ is_cms_file (const char *fname)
-   result = detect_cms (data, datalen);
-   free (data);
-   return result;
-+#endif
- }
-
-
-@@ -129,9 +161,28 @@ is_cms_file (const char *fname)
- int
- is_cms_data (const char *data, size_t datalen)
- {
-+#ifdef HAVE_GPGME_DATA_IDENTIFY
-+  gpgme_data_t dh;
-+  gpgme_data_type_t dt;
-+
-+  if (gpgme_data_new_from_mem (&dh, data, datalen, 0))
-+    return 0;
-+  dt = gpgme_data_identify (dh, 0);
-+  gpgme_data_release (dh);
-+  switch (dt)
-+    {
-+    case GPGME_DATA_TYPE_CMS_SIGNED:
-+    case GPGME_DATA_TYPE_CMS_ENCRYPTED:
-+    case GPGME_DATA_TYPE_CMS_OTHER:
-+    case GPGME_DATA_TYPE_X509_CERT:
-+    case GPGME_DATA_TYPE_PKCS12:
-+      return 1;
-+    default:
-+      return 0;
-+    }
-+#else
-   int result;
-   char *buffer;
--
-   if (datalen < 24)
-     return 0; /* Too short - don't bother to copy the buffer.  */
-
-@@ -147,4 +198,5 @@ is_cms_data (const char *data, size_t datalen)
-   result = detect_cms (buffer, datalen);
-   free (buffer);
-   return result;
-+#endif
- }
---
-1.7.7.1
diff --git a/patches/gpa-0.9.4/02-x509-import.patch b/patches/gpa-0.9.4/02-x509-import.patch
deleted file mode 100755
index 8891d8c..0000000
--- a/patches/gpa-0.9.4/02-x509-import.patch
+++ /dev/null
@@ -1,288 +0,0 @@
-#! /bin/sh
-patch -p1 -l -f $* < $0
-exit $?
-
-From 6742525110270b0098e41157edfb13e36483f1ca Mon Sep 17 00:00:00 2001
-From: Werner Koch <wk at gnupg.org>
-Date: Sat, 10 Aug 2013 08:34:38 +0200
-Subject: [PATCH] Allow import and export of X.509 certificates.
-
-* src/filetype.c (is_cms_data_ext): New.
-* src/gpaimportop.c (gpa_import_operation_idle_cb): Set the
-appropriate protocol.
-* src/gpaexportop.c (gpa_export_operation_idle_cb): Ditto.
----
- src/filetype.c    |   23 +++++++++++++++++++++++
- src/filetype.h    |    1 +
- src/gpaexportop.c |   41 +++++++++++++++++++++++++++++------------
- src/gpaimportop.c |   26 +++++++++++++++-----------
- 4 files changed, 68 insertions(+), 23 deletions(-)
-
-diff --git a/src/filetype.c b/src/filetype.c
-index 4e68d27..58b4145 100644
---- a/src/filetype.c
-+++ b/src/filetype.c
-@@ -200,3 +200,26 @@ is_cms_data (const char *data, size_t datalen)
-   return result;
- #endif
- }
-+
-+/* New version of is_cms_data which requires a decent version of
-+   gpgme.  In contrast to is_cms_data this works directly on a gpgme
-+   data object.  */
-+int
-+is_cms_data_ext (gpgme_data_t dh)
-+{
-+#ifdef HAVE_GPGME_DATA_IDENTIFY
-+  switch (gpgme_data_identify (dh, 0))
-+    {
-+    case GPGME_DATA_TYPE_CMS_SIGNED:
-+    case GPGME_DATA_TYPE_CMS_ENCRYPTED:
-+    case GPGME_DATA_TYPE_CMS_OTHER:
-+    case GPGME_DATA_TYPE_X509_CERT:
-+    case GPGME_DATA_TYPE_PKCS12:
-+      return 1;
-+    default:
-+      return 0;
-+    }
-+#else
-+  return 0;
-+#endif
-+}
-diff --git a/src/filetype.h b/src/filetype.h
-index 6c88c68..8ba4c2e 100644
---- a/src/filetype.h
-+++ b/src/filetype.h
-@@ -20,6 +20,7 @@
-
- int is_cms_file (const char *fname);
- int is_cms_data (const char *data, size_t datalen);
-+int is_cms_data_ext (gpgme_data_t dh);
-
-
- #endif /*FILETYPE_H*/
-diff --git a/src/gpaexportop.c b/src/gpaexportop.c
-index 51df806..9caf49f 100644
---- a/src/gpaexportop.c
-+++ b/src/gpaexportop.c
-@@ -38,7 +38,7 @@ enum
- static gboolean gpa_export_operation_idle_cb (gpointer data);
- static void gpa_export_operation_done_cb (GpaContext *context, gpg_error_t err,
-			      GpaExportOperation *op);
--static void gpa_export_operation_done_error_cb (GpaContext *context,
-+static void gpa_export_operation_done_error_cb (GpaContext *context,
-						gpg_error_t err,
-						GpaExportOperation *op);
-
-@@ -97,7 +97,7 @@ gpa_export_operation_finalize (GObject *object)
-     {
-       gpgme_data_release (op->dest);
-     }
--
-+
-   G_OBJECT_CLASS (parent_class)->finalize (object);
- }
-
-@@ -138,14 +138,14 @@ static void
- gpa_export_operation_class_init (GpaExportOperationClass *klass)
- {
-   GObjectClass *object_class = G_OBJECT_CLASS (klass);
--
-+
-   parent_class = g_type_class_peek_parent (klass);
-
-   object_class->constructor = gpa_export_operation_constructor;
-   object_class->finalize = gpa_export_operation_finalize;
-   object_class->set_property = gpa_export_operation_set_property;
-   object_class->get_property = gpa_export_operation_get_property;
--
-+
-   /* Virtual methods */
-   klass->get_destination = NULL;
-   klass->complete_export = NULL;
-@@ -153,7 +153,7 @@ gpa_export_operation_class_init (GpaExportOperationClass *klass)
-   /* Properties */
-   g_object_class_install_property (object_class,
-				   PROP_KEYS,
--				   g_param_spec_pointer
-+				   g_param_spec_pointer
-				   ("keys", "Keys",
-				    "Keys",
-				    G_PARAM_WRITABLE|G_PARAM_CONSTRUCT_ONLY));
-@@ -163,7 +163,7 @@ GType
- gpa_export_operation_get_type (void)
- {
-   static GType file_operation_type = 0;
--
-+
-   if (!file_operation_type)
-     {
-       static const GTypeInfo file_operation_info =
-@@ -178,12 +178,12 @@ gpa_export_operation_get_type (void)
-         0,              /* n_preallocs */
-         (GInstanceInitFunc) gpa_export_operation_init,
-       };
--
-+
-       file_operation_type = g_type_register_static (GPA_OPERATION_TYPE,
-						    "GpaExportOperation",
-						    &file_operation_info, 0);
-     }
--
-+
-   return file_operation_type;
- }
-
-@@ -198,10 +198,11 @@ gpa_export_operation_idle_cb (gpointer data)
-   if (GPA_EXPORT_OPERATION_GET_CLASS (op)->get_destination (op, &op->dest,
-							    &armor))
-     {
--      gpg_error_t err;
-+      gpg_error_t err = 0;
-       const char **patterns;
-       GList *k;
-       int i;
-+      gpgme_protocol_t prot = GPGME_PROTOCOL_UNKNOWN;
-
-       gpgme_set_armor (GPA_OPERATION (op)->context->ctx, armor);
-       /* Create the set of keys to export */
-@@ -210,17 +211,33 @@ gpa_export_operation_idle_cb (gpointer data)
-	{
-	  gpgme_key_t key = (gpgme_key_t) k->data;
-	  patterns[i] = key->subkeys->fpr;
-+          if (prot == GPGME_PROTOCOL_UNKNOWN)
-+            prot = key->protocol;
-+          else if (prot != key->protocol)
-+            {
-+              gpa_window_error
-+                (_("Only keys of the same procotol may be exported"
-+                   " as a collection."), NULL);
-+              g_signal_emit_by_name (GPA_OPERATION (op), "completed", err);
-+              goto cleanup;
-+            }
-	}
-+      if (prot == GPGME_PROTOCOL_UNKNOWN)
-+        {
-+          g_signal_emit_by_name (GPA_OPERATION (op), "completed", err);
-+          goto cleanup;  /* No keys.  */
-+        }
-+      gpgme_set_protocol (GPA_OPERATION (op)->context->ctx, prot);
-       /* Export to the gpgme_data_t */
--      err = gpgme_op_export_ext_start (GPA_OPERATION (op)->context->ctx,
-+      err = gpgme_op_export_ext_start (GPA_OPERATION (op)->context->ctx,
-				       patterns, 0, op->dest);
-       if (err)
-	{
-	  gpa_gpgme_warning (err);
-	  g_signal_emit_by_name (GPA_OPERATION (op), "completed", err);
-	}
--      /* Clean up */
--      g_free (patterns);
-+    cleanup:
-+      g_free (patterns);
-     }
-   else
-     /* Abort the operation.  */
-diff --git a/src/gpaimportop.c b/src/gpaimportop.c
-index 81ed769..0680a21 100644
---- a/src/gpaimportop.c
-+++ b/src/gpaimportop.c
-@@ -25,6 +25,7 @@
- #include "i18n.h"
- #include "gtktools.h"
- #include "gpaimportop.h"
-+#include "filetype.h"
-
- static GObjectClass *parent_class = NULL;
-
-@@ -40,7 +41,7 @@ static guint signals [LAST_SIGNAL] = { 0 };
- static gboolean gpa_import_operation_idle_cb (gpointer data);
- static void gpa_import_operation_done_cb (GpaContext *context, gpg_error_t err,
-			      GpaImportOperation *op);
--static void gpa_import_operation_done_error_cb (GpaContext *context,
-+static void gpa_import_operation_done_error_cb (GpaContext *context,
-						gpg_error_t err,
-						GpaImportOperation *op);
-
-@@ -56,7 +57,7 @@ gpa_import_operation_finalize (GObject *object)
-     {
-       gpgme_data_release (op->source);
-     }
--
-+
-   G_OBJECT_CLASS (parent_class)->finalize (object);
- }
-
-@@ -95,12 +96,12 @@ static void
- gpa_import_operation_class_init (GpaImportOperationClass *klass)
- {
-   GObjectClass *object_class = G_OBJECT_CLASS (klass);
--
-+
-   parent_class = g_type_class_peek_parent (klass);
-
-   object_class->constructor = gpa_import_operation_constructor;
-   object_class->finalize = gpa_import_operation_finalize;
--
-+
-   /* Virtual methods */
-   klass->get_source = NULL;
-   klass->complete_import = NULL;
-@@ -130,7 +131,7 @@ GType
- gpa_import_operation_get_type (void)
- {
-   static GType file_operation_type = 0;
--
-+
-   if (!file_operation_type)
-     {
-       static const GTypeInfo file_operation_info =
-@@ -145,12 +146,12 @@ gpa_import_operation_get_type (void)
-         0,              /* n_preallocs */
-         (GInstanceInitFunc) gpa_import_operation_init,
-       };
--
-+
-       file_operation_type = g_type_register_static (GPA_OPERATION_TYPE,
-						    "GpaImportOperation",
-						    &file_operation_info, 0);
-     }
--
-+
-   return file_operation_type;
- }
-
-@@ -164,7 +165,10 @@ gpa_import_operation_idle_cb (gpointer data)
-   if (GPA_IMPORT_OPERATION_GET_CLASS (op)->get_source (op, &op->source))
-     {
-       gpg_error_t err;
--
-+
-+      gpgme_set_protocol (GPA_OPERATION (op)->context->ctx,
-+                          is_cms_data_ext (op->source)?
-+                          GPGME_PROTOCOL_CMS : GPGME_PROTOCOL_OpenPGP);
-       err = gpgme_op_import_start (GPA_OPERATION (op)->context->ctx,
-				   op->source);
-       if (err)
-@@ -181,8 +185,8 @@ gpa_import_operation_idle_cb (gpointer data)
-   return FALSE;
- }
-
--static void
--key_import_results_dialog_run (GtkWidget *parent,
-+static void
-+key_import_results_dialog_run (GtkWidget *parent,
-			       gpgme_import_result_t info)
- {
-   GtkWidget *dialog;
-@@ -211,7 +215,7 @@ key_import_results_dialog_run (GtkWidget *parent,
-                                        info->unchanged, info->secret_read,
-                                        info->secret_imported,
-				       info->secret_unchanged);
--    }
-+    }
-
-   /* Run the dialog */
-   gtk_widget_show_all (dialog);
---
-1.7.7.1
diff --git a/patches/gpa-0.9.4/03-homedir-via-gpgconf.patch b/patches/gpa-0.9.4/03-homedir-via-gpgconf.patch
deleted file mode 100755
index 6f83e98..0000000
--- a/patches/gpa-0.9.4/03-homedir-via-gpgconf.patch
+++ /dev/null
@@ -1,1032 +0,0 @@
-#! /bin/sh
-patch -p1 -l -f $* < $0
-exit $?
-
-From 398fd028c762dd6c0fc7a5945f55eb2dbd2edaec Mon Sep 17 00:00:00 2001
-From: Werner Koch <wk at gnupg.org>
-Date: Mon, 12 Aug 2013 18:44:06 +0200
-Subject: [PATCH] Detect default homedir via gpgconf.
-
-* src/server.c (decode_percent_string): Move to ..
-* src/utils.c (decode_percent_string): here.
-* src/gpgmetools.c (gpa_start_simple_gpg_command): Add arg use_stderr
-and change all callers.
-(gpg_simple_stdio_cb): Implement the !use_stderr case.
-* src/get-path.c: Include string.h and gpa.h.
-(struct homedir_from_gpgconf_s): New.
-(homedir_from_gpgconf_parser): New.
-(homedir_from_gpgconf): New.
-(default_homedir): First try to detect via gpgconf.
---
-
-It would be useful to equip GPGME with a function to parse the output
-of "gpgconf --list-dir".  Until then we need to go into some length to
-read it.
----
- src/cm-netkey.c  |  132 +++++++++++++++++++++++++++---------------------------
- src/get-path.c   |   85 ++++++++++++++++++++++++++++++++---
- src/gpa.h        |    1 +
- src/gpgmetools.c |   75 ++++++++++++++++++++-----------
- src/gpgmetools.h |    1 +
- src/server.c     |   47 -------------------
- src/utils.c      |   65 +++++++++++++++++++++++----
- 7 files changed, 252 insertions(+), 154 deletions(-)
-
-diff --git a/src/cm-netkey.c b/src/cm-netkey.c
-index 8b4aba2..8ddbcb7 100644
---- a/src/cm-netkey.c
-+++ b/src/cm-netkey.c
-@@ -14,7 +14,7 @@
-  * License for more details.
-  *
-  * You should have received a copy of the GNU General Public License
-- * along with this program; if not, see <http://www.gnu.org/licenses/>.
-+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
-  */
-
- #ifdef HAVE_CONFIG_H
-@@ -26,7 +26,7 @@
- #include <string.h>
- #include <assert.h>
-
--#include "gpa.h"
-+#include "gpa.h"
- #include "gtktools.h"
- #include "convert.h"
- #include "gpa-key-details.h"
-@@ -49,7 +49,7 @@ enum
-     ENTRY_SIGG_PUK_RETRYCOUNTER,
-
-     ENTRY_LAST
--  };
-+  };
-
-
- /* A structure for PIN information.  */
-@@ -65,7 +65,7 @@ struct pininfo_s
-
-
- /* Object's class definition.  */
--struct _GpaCMNetkeyClass
-+struct _GpaCMNetkeyClass
- {
-   GpaCMObjectClass parent_class;
- };
-@@ -106,7 +106,7 @@ static void gpa_cm_netkey_finalize (GObject *object);
-
-
- 
--/************************************************************
-+/************************************************************
-  *******************   Implementation   *********************
-  ************************************************************/
-
-@@ -127,13 +127,13 @@ clear_card_data (GpaCMNetkey *card)
- /* Put the PIN information into the field with ENTRY_ID.  If BUTTON is
-    not NULL its sensitivity is set as well. */
- static void
--update_entry_retry_counter (GpaCMNetkey *card, int entry_id,
-+update_entry_retry_counter (GpaCMNetkey *card, int entry_id,
-                             struct pininfo_s *info, int any_isnull,
-                             int is_puk, GtkWidget *button)
- {
-   char numbuf[50];
-   const char *string;
--
-+
-   if (!info->valid)
-     string = _("unknown");
-   else if (info->nullpin)
-@@ -150,12 +150,12 @@ update_entry_retry_counter (GpaCMNetkey *card, int entry_id,
-   gtk_label_set_text (GTK_LABEL (card->entries[entry_id]), string);
-   if (button)
-     {
--      gtk_button_set_label (GTK_BUTTON (button),
-+      gtk_button_set_label (GTK_BUTTON (button),
-                             (info->valid && !info->nullpin
-                              && (info->blocked || !info->tries_left))
-                             ? (is_puk? _("Reset PUK") : _("Reset PIN"))
-                             : (is_puk? _("Change PUK"): _("Change PIN")));
--      gtk_widget_set_sensitive (button,
-+      gtk_widget_set_sensitive (button,
-                                 (info->valid && !any_isnull
-                                  && !info->nullpin && !info->blocked
-                                  && !info->nopin));
-@@ -168,12 +168,12 @@ update_entry_retry_counter (GpaCMNetkey *card, int entry_id,
- static void
- update_entry_chv_status (GpaCMNetkey *card, int entry_id, char *string)
- {
--  struct {
-+  struct {
-     int info_idx;
-     int is_puk;
-     int entry_id;
-     GtkWidget *widget;
--  } tbl[] =
-+  } tbl[] =
-     {
-       {  0, 0, ENTRY_PIN_RETRYCOUNTER },
-       {  1, 1, ENTRY_PUK_RETRYCOUNTER  },
-@@ -190,7 +190,7 @@ update_entry_chv_status (GpaCMNetkey *card, int entry_id, char *string)
-   tbl[3].widget = card->change_sigg_puk_btn;
-
-   (void)entry_id; /* Not used.  */
--
-+
-   for (idx=0; idx < DIM (card->pininfo); idx++)
-     memset (&card->pininfo[idx], 0, sizeof card->pininfo[0]);
-
-@@ -203,7 +203,7 @@ update_entry_chv_status (GpaCMNetkey *card, int entry_id, char *string)
-         string++;
-       while (spacep (string))
-         string++;
--
-+
-       card->pininfo[idx].valid = 1;
-       if (value >= 0)
-         card->pininfo[idx].tries_left = value;
-@@ -224,7 +224,7 @@ update_entry_chv_status (GpaCMNetkey *card, int entry_id, char *string)
-     if (tbl[idx].info_idx < DIM (card->pininfo))
-       update_entry_retry_counter (card, tbl[idx].entry_id,
-                                   &card->pininfo[tbl[idx].info_idx],
--                                  any_isnull,
-+                                  any_isnull,
-                                   tbl[idx].is_puk, tbl[idx].widget);
-
-   gtk_widget_set_no_show_all (card->warning_frame, FALSE);
-@@ -371,7 +371,7 @@ reload_more_data (GpaCMNetkey *card)
-
-       align = gtk_alignment_new (0.5, 0, 0, 0);
-       button = gtk_button_new_with_label (_("Learn keys"));
--      gpa_add_tooltip
-+      gpa_add_tooltip
-         (button, _("For some or all of the keys available on the card, "
-                    "the GnuPG crypto engine does not yet know the "
-                    "corresponding certificates.\n"
-@@ -404,7 +404,7 @@ static gboolean
- reload_more_data_idle_cb (void *user_data)
- {
-   GpaCMNetkey *card = user_data;
--
-+
-   if (card->reloading)
-     {
-       g_debug ("already reloading (count=%d)", card->reloading);
-@@ -414,7 +414,7 @@ reload_more_data_idle_cb (void *user_data)
-
-   card->reloading++;
-   reload_more_data (card);
--  g_object_unref (card);
-+  g_object_unref (card);
-   card->reloading--;
-
-   return FALSE;  /* Remove us from the idle queue.  */
-@@ -450,17 +450,17 @@ scd_getattr_cb (void *opaque, const char *status, const char *args)
-           if (parm->updfnc)
-             parm->updfnc (parm->card, entry_id, tmp);
-           else if (GTK_IS_LABEL (parm->card->entries[entry_id]))
--            gtk_label_set_text
-+            gtk_label_set_text
-               (GTK_LABEL (parm->card->entries[entry_id]), tmp);
-           else
--            gtk_entry_set_text
-+            gtk_entry_set_text
-               (GTK_ENTRY (parm->card->entries[entry_id]), tmp);
-           xfree (tmp);
-         }
-     }
-
-   return 0;
--}
-+}
-
-
- /* Use the assuan machinery to load the bulk of the OpenPGP card data.  */
-@@ -509,7 +509,7 @@ reload_data (GpaCMNetkey *card)
-         {
-           /* The NKS-VERSION is only supported by GnuPG > 2.0.11
-              thus we ignore the error.  */
--          gtk_label_set_text
-+          gtk_label_set_text
-             (GTK_LABEL (card->entries[attrtbl[attridx].entry_id]),
-              _("unknown"));
-         }
-@@ -519,7 +519,7 @@ reload_data (GpaCMNetkey *card)
-             ; /* Lost the card.  */
-           else
-             {
--              g_debug ("assuan command `%s' failed: %s <%s>\n",
-+              g_debug ("assuan command `%s' failed: %s <%s>\n",
-                        command, gpg_strerror (err), gpg_strsource (err));
-             }
-           clear_card_data (card);
-@@ -537,7 +537,7 @@ reload_data (GpaCMNetkey *card)
-
-
- /* A structure used to pass data to the learn_keys_gpg_status_cb.  */
--struct learn_keys_gpg_status_parm
-+struct learn_keys_gpg_status_parm
- {
-   GpaCMNetkey    *card;
-   GtkWidget      *button;
-@@ -546,11 +546,11 @@ struct learn_keys_gpg_status_parm
-
-
- /* Helper for learn_keys_clicked_cb.  */
--static gboolean
-+static gboolean
- learn_keys_gpg_status_cb (void *opaque, char *line)
- {
-   struct learn_keys_gpg_status_parm *parm = opaque;
--
-+
-   if (!line)
-     {
-       /* We are finished with the command.  */
-@@ -590,7 +590,7 @@ learn_keys_clicked_cb (GtkButton *button, void *user_data)
-
-   widget = gtk_progress_bar_new ();
-   gtk_container_add (GTK_CONTAINER (button), widget);
--  gtk_progress_bar_set_text (GTK_PROGRESS_BAR (widget),
-+  gtk_progress_bar_set_text (GTK_PROGRESS_BAR (widget),
-                               _("Learning keys ..."));
-   gtk_widget_show_all (GTK_WIDGET (button));
-
-@@ -600,8 +600,8 @@ learn_keys_clicked_cb (GtkButton *button, void *user_data)
-   parm->button = GTK_WIDGET (button);
-   parm->pbar = GTK_PROGRESS_BAR (widget);
-
--  err = gpa_start_simple_gpg_command
--    (learn_keys_gpg_status_cb, parm, GPGME_PROTOCOL_CMS,
-+  err = gpa_start_simple_gpg_command
-+    (learn_keys_gpg_status_cb, parm, GPGME_PROTOCOL_CMS, 1,
-      "--learn-card", "-v", NULL);
-   if (err)
-     {
-@@ -633,7 +633,7 @@ change_nullpin (GpaCMNetkey *card)
-   else
-     return; /* Oops: No NullPIN.  */
-
--  string = g_strdup_printf
-+  string = g_strdup_printf
-     (_("<b>Setting the Initial PIN</b> (%s)\n\n"
-        "You selected to set the initial PIN of your card.  "
-        "The PIN is currently set to the NullPIN.  Setting an "
-@@ -653,12 +653,12 @@ change_nullpin (GpaCMNetkey *card)
-          "PIN to the same value as used for the NKS keys.")
-      : _("You are now setting the PIN for the NKS keys used for standard "
-          "signatures, encryption and authentication."));
--
-+
-   /* FIXME:  How do we figure out our GtkWindow?  */
-   dialog = gtk_message_dialog_new_with_markup (NULL /*GTK_WINDOW (card)*/,
-                                                GTK_DIALOG_DESTROY_WITH_PARENT,
--                                               GTK_MESSAGE_INFO,
--                                               GTK_BUTTONS_OK_CANCEL,
-+                                               GTK_MESSAGE_INFO,
-+                                               GTK_BUTTONS_OK_CANCEL,
-                                                NULL);
-   gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG (dialog), string);
-   g_free (string);
-@@ -679,7 +679,7 @@ change_nullpin (GpaCMNetkey *card)
-         okay = 0; /* No need to reload the data.  */
-       else if (err)
-         {
--          char *message = g_strdup_printf
-+          char *message = g_strdup_printf
-             (_("Error changing the NullPIN.\n"
-                "(%s <%s>)"), gpg_strerror (err), gpg_strsource (err));
-           gpa_window_error (message, NULL);
-@@ -709,7 +709,7 @@ change_or_reset_pin (GpaCMNetkey *card, int info_idx)
-   g_return_if_fail (gpgagent);
-   g_return_if_fail (info_idx < DIM (card->pininfo));
-
--  if (!card->pininfo[info_idx].valid
-+  if (!card->pininfo[info_idx].valid
-       || card->pininfo[info_idx].nopin
-       || card->pininfo[info_idx].nullpin)
-     {
-@@ -741,7 +741,7 @@ change_or_reset_pin (GpaCMNetkey *card, int info_idx)
-                 "of the PIN and the corresponding PUK are both down "
-                 "to zero, the keys controlled by the PIN are not anymore "
-                 "usable and there is no way to unblock them!")
--            : is_puk
-+            : is_puk
-             ? _("<b>Resetting a PUK</b>\n"
-                 "\n"
-                 "Although <i>PUK</i> stands for <i>PIN Unblocking Code</i> "
-@@ -766,12 +766,12 @@ change_or_reset_pin (GpaCMNetkey *card, int info_idx)
-                 "value of the PUK and then to enter a new value for the "
-                 "blocked PIN and repeat that new value at another prompt.")
-             );
--
-+
-   /* FIXME:  How do we figure out our GtkWindow?  */
-   dialog = gtk_message_dialog_new_with_markup (NULL /*GTK_WINDOW (card)*/,
-                                                GTK_DIALOG_DESTROY_WITH_PARENT,
--                                               GTK_MESSAGE_INFO,
--                                               GTK_BUTTONS_OK_CANCEL,
-+                                               GTK_MESSAGE_INFO,
-+                                               GTK_BUTTONS_OK_CANCEL,
-                                                NULL);
-   gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG (dialog), string);
-   okay = (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK);
-@@ -783,13 +783,13 @@ change_or_reset_pin (GpaCMNetkey *card, int info_idx)
-                 reset_mode? " --reset":"", pwidstr);
-       err = gpgme_op_assuan_transact (gpgagent, command,
-                                       NULL, NULL, NULL, NULL, NULL, NULL);
--      if (!err)
-+      if (!err)
-         err = gpgme_op_assuan_result (gpgagent)->err;
-       if (gpg_err_code (err) == GPG_ERR_CANCELED)
-         okay = 0; /* No need to reload the data.  */
--      else if (err)
-+      else if (err)
-         {
--          char *message = g_strdup_printf
-+          char *message = g_strdup_printf
-             (_("Error changing or resetting the PIN/PUK.\n"
-                "(%s <%s>)"), gpg_strerror (err), gpg_strsource (err));
-           gpa_window_error (message, NULL);
-@@ -840,12 +840,12 @@ add_table_row (GtkWidget *table, int *rowidx,
-   label = gtk_label_new (labelstr);
-   gtk_label_set_width_chars  (GTK_LABEL (label), 22);
-   gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
--  gtk_table_attach (GTK_TABLE (table), label, 0, 1,
--                    *rowidx, *rowidx + 1, GTK_FILL, GTK_SHRINK, 0, 0);
-+  gtk_table_attach (GTK_TABLE (table), label, 0, 1,
-+                    *rowidx, *rowidx + 1, GTK_FILL, GTK_SHRINK, 0, 0);
-
-   if (is_label)
-     gtk_misc_set_alignment (GTK_MISC (widget), 0, 0.5);
--
-+
-   if (readonly)
-     {
-       if (!is_label && GTK_IS_ENTRY (widget))
-@@ -859,7 +859,7 @@ add_table_row (GtkWidget *table, int *rowidx,
-       if (is_label)
-         gtk_label_set_selectable (GTK_LABEL (widget), TRUE);
-     }
--
-+
-   gtk_table_attach (GTK_TABLE (table), widget, 1, 2,
-                     *rowidx, *rowidx + 1, GTK_FILL, GTK_SHRINK, 0, 0);
-   if (widget2)
-@@ -893,17 +893,17 @@ construct_data_widget (GpaCMNetkey *card)
-   gtk_container_set_border_width (GTK_CONTAINER (table), 10);
-   gtk_container_add (GTK_CONTAINER (frame), table);
-   rowidx = 0;
--
-+
-   card->entries[ENTRY_SERIALNO] = gtk_label_new (NULL);
-   add_table_row (table, &rowidx, _("Serial number:"),
-                  card->entries[ENTRY_SERIALNO], NULL, 0);
-
-   card->entries[ENTRY_NKS_VERSION] = gtk_label_new (NULL);
--  add_table_row (table, &rowidx, _("Card version:"),
-+  add_table_row (table, &rowidx, _("Card version:"),
-                  card->entries[ENTRY_NKS_VERSION], NULL, 0);
-
-   gtk_box_pack_start (GTK_BOX (card), frame, FALSE, TRUE, 0);
--
-+
-
-   /* Warning frame.  */
-   frame = gtk_frame_new (NULL);
-@@ -939,7 +939,7 @@ construct_data_widget (GpaCMNetkey *card)
-      widgets are added while figuring out the keys of the card.  */
-   label = gtk_label_new (_("scanning ..."));
-   gtk_container_add (GTK_CONTAINER (frame), label);
--
-+
-   gtk_box_pack_start (GTK_BOX (card), frame, FALSE, TRUE, 0);
-   card->keys_frame = frame;
-
-@@ -957,42 +957,42 @@ construct_data_widget (GpaCMNetkey *card)
-
-   card->entries[ENTRY_PIN_RETRYCOUNTER] = gtk_label_new (NULL);
-   button = gtk_button_new ();
--  add_table_row (table, &rowidx, _("PIN retry counter:"),
-+  add_table_row (table, &rowidx, _("PIN retry counter:"),
-                  card->entries[ENTRY_PIN_RETRYCOUNTER], button, 1);
--  card->change_pin_btn = button;
-+  card->change_pin_btn = button;
-   g_signal_connect (G_OBJECT (button), "clicked",
-                     G_CALLBACK (change_pin_clicked_cb), card);
-
-   card->entries[ENTRY_PUK_RETRYCOUNTER] = gtk_label_new (NULL);
-   button = gtk_button_new ();
--  add_table_row (table, &rowidx, _("PUK retry counter:"),
-+  add_table_row (table, &rowidx, _("PUK retry counter:"),
-                  card->entries[ENTRY_PUK_RETRYCOUNTER], button, 1);
--  card->change_puk_btn = button;
-+  card->change_puk_btn = button;
-   g_signal_connect (G_OBJECT (button), "clicked",
-                     G_CALLBACK (change_pin_clicked_cb), card);
-
-   card->entries[ENTRY_SIGG_PIN_RETRYCOUNTER] = gtk_label_new (NULL);
-   button = gtk_button_new ();
--  add_table_row (table, &rowidx, _("SigG PIN retry counter:"),
-+  add_table_row (table, &rowidx, _("SigG PIN retry counter:"),
-                  card->entries[ENTRY_SIGG_PIN_RETRYCOUNTER], button, 1);
--  card->change_sigg_pin_btn = button;
-+  card->change_sigg_pin_btn = button;
-   g_signal_connect (G_OBJECT (button), "clicked",
-                     G_CALLBACK (change_pin_clicked_cb), card);
-
-   card->entries[ENTRY_SIGG_PUK_RETRYCOUNTER] = gtk_label_new (NULL);
-   button = gtk_button_new ();
--  add_table_row (table, &rowidx, _("SigG PUK retry counter:"),
-+  add_table_row (table, &rowidx, _("SigG PUK retry counter:"),
-                  card->entries[ENTRY_SIGG_PUK_RETRYCOUNTER], button, 1);
--  card->change_sigg_puk_btn = button;
-+  card->change_sigg_puk_btn = button;
-   g_signal_connect (G_OBJECT (button), "clicked",
-                     G_CALLBACK (change_pin_clicked_cb), card);
--
-+
-   gtk_box_pack_start (GTK_BOX (card), frame, FALSE, TRUE, 0);
- }
-
-
- 
--/************************************************************
-+/************************************************************
-  ******************   Object Management  ********************
-  ************************************************************/
-
-@@ -1002,7 +1002,7 @@ gpa_cm_netkey_class_init (void *class_ptr, void *class_data)
-   GpaCMNetkeyClass *klass = class_ptr;
-
-   parent_class = g_type_class_peek_parent (klass);
--
-+
-   G_OBJECT_CLASS (klass)->finalize = gpa_cm_netkey_finalize;
- }
-
-@@ -1019,7 +1019,7 @@ gpa_cm_netkey_init (GTypeInstance *instance, void *class_ptr)
-
- static void
- gpa_cm_netkey_finalize (GObject *object)
--{
-+{
- /*   GpaCMNetkey *card = GPA_CM_NETKEY (object); */
-
-   parent_class->finalize (object);
-@@ -1031,7 +1031,7 @@ GType
- gpa_cm_netkey_get_type (void)
- {
-   static GType this_type = 0;
--
-+
-   if (!this_type)
-     {
-       static const GTypeInfo this_info =
-@@ -1046,23 +1046,23 @@ gpa_cm_netkey_get_type (void)
-	  0,    /* n_preallocs */
-	  gpa_cm_netkey_init
-	};
--
-+
-       this_type = g_type_register_static (GPA_CM_OBJECT_TYPE,
-                                           "GpaCMNetkey",
-                                           &this_info, 0);
-     }
--
-+
-   return this_type;
- }
-
- 
--/************************************************************
-+/************************************************************
-  **********************  Public API  ************************
-  ************************************************************/
- GtkWidget *
- gpa_cm_netkey_new ()
- {
--  return GTK_WIDGET (g_object_new (GPA_CM_NETKEY_TYPE, NULL));
-+  return GTK_WIDGET (g_object_new (GPA_CM_NETKEY_TYPE, NULL));
- }
-
-
-diff --git a/src/get-path.c b/src/get-path.c
-index f50e21b..71fe0e1 100644
---- a/src/get-path.c
-+++ b/src/get-path.c
-@@ -1,6 +1,6 @@
- /* get-path.c - Find a system path.
-    Copyright (C) 2000-2002 G-N-U GmbH.
--   Copyright (C) 2005, 2008 g10 Code GmbH.
-+   Copyright (C) 2005, 2008, 2013 g10 Code GmbH.
-
-    This file is part of GPA.
-
-@@ -23,7 +23,10 @@
- #endif
-
- #include <glib.h>
-+#include <string.h>
-+#include <gpgme.h>
-
-+#include "gpa.h"
- #include "get-path.h"
-
- 
-@@ -31,7 +34,7 @@
-
- #include <unistd.h>
-
--#include <windows.h>
-+#include <windows.h>
-
- #include "w32reg.h"
-
-@@ -55,7 +58,7 @@ w32_strerror (int w32_errno)
- {
-   static char strerr[256];
-   int ec = (int) GetLastError ();
--
-+
-   if (w32_errno == 0)
-     w32_errno = ec;
-   FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM, NULL, w32_errno,
-@@ -103,7 +106,7 @@ dlclose (void *hd)
-       return 0;
-     }
-   return -1;
--}
-+}
-
-
- static HRESULT
-@@ -143,13 +146,83 @@ w32_shgetfolderpath (HWND a, int b, HANDLE c, DWORD d, LPSTR e)
-
- #endif	/* G_OS_WIN32 */
-
-+
-+
-+
- 
-+struct homedir_from_gpgconf_s
-+{
-+  GMainLoop *loop;
-+  char *homedir;
-+};
-+
-+static gboolean
-+homedir_from_gpgconf_parser (void *opaque, char *line)
-+{
-+  struct homedir_from_gpgconf_s *parm = opaque;
-+  char *value, *p;
-+
-+  if (!line)
-+    {
-+      /* We are finished with the command.  Stop the loop.  */
-+      g_main_loop_quit (parm->loop);
-+      return FALSE; /* (The return code does not matter here.)  */
-+    }
-+
-+  value = strchr (line, ':');
-+  if (!value)
-+    return TRUE; /* Invalid line - keep on running.  */;
-+  *value++ = 0;
-+  if (strcmp (line, "homedir"))
-+    return TRUE; /* Not the right item - keep on running.  */
-+
-+  p = strchr (value, ':');
-+  if (p)
-+    *p = 0;
-+  decode_percent_string (value);
-+  parm->homedir = g_strdup (value);
-+  return FALSE; /* Ready - force an EOF.  */
-+}
-+
-+
-+/* Retrieve the default home directory via gpgconf and return it as a
-+   malloced string.  If this is not possible, return NULL.  */
-+static char *
-+homedir_from_gpgconf (void)
-+{
-+  struct homedir_from_gpgconf_s parm;
-+
-+  memset (&parm, 0, sizeof parm);
-+
-+  parm.loop = g_main_loop_new (NULL, TRUE);
-+
-+  if (gpa_start_simple_gpg_command
-+      (homedir_from_gpgconf_parser, &parm,
-+       GPGME_PROTOCOL_GPGCONF, 0, "--list-dirs", NULL))
-+    {
-+      g_main_loop_unref (parm.loop);
-+      return NULL;
-+    }
-+
-+  g_main_loop_run (parm.loop);
-+  g_main_loop_unref (parm.loop);
-+  return parm.homedir;
-+}
-+
-+
- /* Get the path to the default home directory.  */
- gchar *
- default_homedir (void)
- {
-   gchar *dir;
-
-+  dir = homedir_from_gpgconf ();
-+  if (dir)
-+    {
-+      g_debug ("Found homedir '%s' via gpgconf", dir);
-+      return dir;
-+    }
-+
-   /* g_getenv returns string in filename encoding.  */
-   dir = (gchar *) g_getenv ("GNUPGHOME");
-   if (dir && dir[0])
-@@ -166,7 +239,7 @@ default_homedir (void)
-	  dir = NULL;
-	}
-     }
--
-+
-   if (! dir)
-     {
-       char path[MAX_PATH];
-@@ -178,7 +251,7 @@ default_homedir (void)
-          using a system roaming serives might be better than to let
-          them do it manually.  A security conscious user will anyway
-          use the registry entry to have better control.  */
--      if (w32_shgetfolderpath (NULL, CSIDL_APPDATA | CSIDL_FLAG_CREATE,
-+      if (w32_shgetfolderpath (NULL, CSIDL_APPDATA | CSIDL_FLAG_CREATE,
-                                NULL, 0, path) >= 0)
-         {
-	  dir = g_build_filename (path, "gnupg", NULL);
-diff --git a/src/gpa.h b/src/gpa.h
-index a20d704..a321698 100644
---- a/src/gpa.h
-+++ b/src/gpa.h
-@@ -131,6 +131,7 @@ char *decode_c_string (const char *src);
- char *percent_escape (const char *string,
-                       const char *delimiters, int space2plus);
- size_t percent_unescape (char *string, int plus2space);
-+void decode_percent_string (char *str);
-
-
- /*-- Convenience macros. -- */
-diff --git a/src/gpgmetools.c b/src/gpgmetools.c
-index 5d4beae..a6ff3d8 100644
---- a/src/gpgmetools.c
-+++ b/src/gpgmetools.c
-@@ -1435,20 +1435,21 @@ is_gpg_version_at_least (const char *need_version)
- }
-
-
--/* Structure used to communicate with gpg_simple_stderr_cb.  */
--struct gpg_simple_stderr_parm_s
-+/* Structure used to communicate with gpg_simple_stdio_cb.  */
-+struct gpg_simple_stdio_parm_s
- {
-   gboolean (*cb)(void *opaque, char *line);
-   void *cb_arg;
-   GString *string;
-+  int only_status_lines;
- };
-
- /* Helper for gpa_start_simple_gpg_command.  */
- static gboolean
--gpg_simple_stderr_cb (GIOChannel *channel, GIOCondition condition,
--                      void *user_data)
-+gpg_simple_stdio_cb (GIOChannel *channel, GIOCondition condition,
-+                     void *user_data)
- {
--  struct gpg_simple_stderr_parm_s *parm = user_data;
-+  struct gpg_simple_stdio_parm_s *parm = user_data;
-   GIOStatus status;
-   char *line, *p;
-
-@@ -1461,27 +1462,41 @@ gpg_simple_stderr_cb (GIOChannel *channel, GIOCondition condition,
-         {
-           line = parm->string->str;
-
-+          /* Strip line terminator.  */
-+          p = strchr (line, '\n');
-+          if (p)
-+            {
-+              if (p > line && p[-1] == '\r')
-+                p[-1] = 0;
-+              else
-+                *p = 0;
-+            }
-+
-           /* We care only about status lines.  */
--          if (!strncmp (line, "[GNUPG:] ", 9))
-+          if (parm->only_status_lines && !strncmp (line, "[GNUPG:] ", 9))
-             {
-               line += 9;
-
--              /* Strip line terminator.  */
--              p = strchr (line, '\n');
--              if (p)
-+              /* Call user callback.  */
-+              if (parm->cb && !parm->cb (parm->cb_arg, line))
-                 {
--                  if (p > line && p[-1] == '\r')
--                    p[-1] = 0;
--                  else
--                    *p = 0;
-+                  /* User requested EOF.  */
-+                  goto cleanup;
-                 }
--
-+              /* Return direct so that we do not run into the G_IO_HUP
-+                 check.  This is required to read all buffered input.  */
-+              return TRUE;  /* Keep on watching this channel. */
-+            }
-+          else if (!parm->only_status_lines)
-+            {
-               /* Call user callback.  */
-               if (parm->cb && !parm->cb (parm->cb_arg, line))
-                 {
-                   /* User requested EOF.  */
-                   goto cleanup;
-                 }
-+
-+              return TRUE;  /* Keep on watching this channel. */
-             }
-         }
-       if (status != G_IO_STATUS_NORMAL && status != G_IO_STATUS_AGAIN )
-@@ -1517,20 +1532,22 @@ gpg_simple_stderr_cb (GIOChannel *channel, GIOCondition condition,
-    is used to call gpg-connect-agent.
-
-    If the function returns success the provided callback CB is called
--   for each line received on STDERR.  EOF is send to this callback by
--   passing a LINE argument of NULL.  The callback may use this for
--   cleanup. If the callback returns FALSE, an EOF is forced with the
--   result that the callback is called once more with LINE set to NULL.  */
-+   for each line received on stdout (respective stderr if USE_STADERR
-+   is true).  EOF is send to this callback by passing a LINE as NULL.
-+   The callback may use this for cleanup.  If the callback returns
-+   FALSE, an EOF is forced so that the callback is called once more
-+   with LINE set to NULL.  */
- gpg_error_t
- gpa_start_simple_gpg_command (gboolean (*cb)(void *opaque, char *line),
-                               void *cb_arg, gpgme_protocol_t protocol,
-+                              int use_stderr,
-                               const char *first_arg, ...)
- {
-   char *argv[24];
-   int argc;
--  int fd_stderr;
-+  int fd_stdio;
-   GIOChannel *channel;
--  struct gpg_simple_stderr_parm_s *parm = NULL;
-+  struct gpg_simple_stdio_parm_s *parm = NULL;
-   char *freeme = NULL;
-
-   if (protocol == GPGME_PROTOCOL_OpenPGP)
-@@ -1571,11 +1588,17 @@ gpa_start_simple_gpg_command (gboolean (*cb)(void *opaque, char *line),
-   parm->cb = cb;
-   parm->cb_arg = cb_arg;
-   parm->string = g_string_sized_new (200);
-+  parm->only_status_lines = use_stderr;
-
-   if (!g_spawn_async_with_pipes (NULL, argv, NULL,
--                                 (G_SPAWN_STDOUT_TO_DEV_NULL),
-+                                 (use_stderr
-+                                  ? G_SPAWN_STDOUT_TO_DEV_NULL
-+                                  : G_SPAWN_STDERR_TO_DEV_NULL),
-                                  NULL, NULL, NULL,
--                                 NULL, NULL, &fd_stderr, NULL))
-+                                 NULL,
-+                                 use_stderr? NULL : &fd_stdio,
-+                                 use_stderr? &fd_stdio : NULL,
-+                                 NULL))
-     {
-       gpa_window_error (_("Calling the crypto engine program failed."), NULL);
-       xfree (parm);
-@@ -1584,9 +1607,9 @@ gpa_start_simple_gpg_command (gboolean (*cb)(void *opaque, char *line),
-     }
-   g_free (freeme);
- #ifdef G_OS_WIN32
--  channel = g_io_channel_win32_new_fd (fd_stderr);
-+  channel = g_io_channel_win32_new_fd (fd_stdio);
- #else
--  channel = g_io_channel_unix_new (fd_stderr);
-+  channel = g_io_channel_unix_new (fd_stdio);
- #endif
-   g_io_channel_set_encoding (channel, NULL, NULL);
-   /* Note that we need a buffered channel, so that we can use the read
-@@ -1595,7 +1618,7 @@ gpa_start_simple_gpg_command (gboolean (*cb)(void *opaque, char *line),
-
-   /* Create a watch for the channel.  */
-   if (!g_io_add_watch (channel, (G_IO_IN|G_IO_HUP),
--                       gpg_simple_stderr_cb, parm))
-+                       gpg_simple_stdio_cb, parm))
-     {
-       g_debug ("error creating watch for gpg command");
-       g_io_channel_unref (channel);
-@@ -1613,7 +1636,7 @@ gpa_start_simple_gpg_command (gboolean (*cb)(void *opaque, char *line),
- void
- gpa_start_agent (void)
- {
--  gpa_start_simple_gpg_command (NULL, NULL, GPGME_PROTOCOL_ASSUAN,
-+  gpa_start_simple_gpg_command (NULL, NULL, GPGME_PROTOCOL_ASSUAN, 1,
-                                 "NOP", "/bye", NULL);
- }
-
-diff --git a/src/gpgmetools.h b/src/gpgmetools.h
-index 2953362..e8b2c34 100644
---- a/src/gpgmetools.h
-+++ b/src/gpgmetools.h
-@@ -209,6 +209,7 @@ gpg_error_t gpa_start_simple_gpg_command (gboolean (*cb)
-                                           (void *opaque, char *line),
-                                           void *cb_arg,
-                                           gpgme_protocol_t protocol,
-+                                          int use_stderr,
-                                           const char *first_arg, ...
-                                           ) G_GNUC_NULL_TERMINATED;
-
-diff --git a/src/server.c b/src/server.c
-index d220ccb..1ce9a89 100644
---- a/src/server.c
-+++ b/src/server.c
-@@ -1255,53 +1255,6 @@ hextobyte (const char *str)
- }
-
-
--/* Decode the percent escaped string STR in place.  */
--static void
--decode_percent_string (char *str)
--{
--  char *src = str;
--  char *dest = str;
--
--  /* Convert the string.  */
--  while (*src)
--    {
--      if (*src != '%')
--        {
--          *(dest++) = *(src++);
--          continue;
--        }
--      else
--        {
--          int val = hextobyte (&src[1]);
--
--          if (val == -1)
--            {
--              /* Should not happen.  */
--              *(dest++) = *(src++);
--              if (*src)
--                *(dest++) = *(src++);
--              if (*src)
--                *(dest++) = *(src++);
--            }
--          else
--            {
--              if (!val)
--                {
--                  /* A binary zero is not representable in a C
--                     string.  */
--                  *(dest++) = '\\';
--                  *(dest++) = '0';
--                }
--              else
--                *((unsigned char *) dest++) = val;
--              src += 3;
--            }
--        }
--    }
--  *(dest++) = 0;
--}
--
--
- /* FILE <file> [--continued]
-
-    Set the files on which to operate.
-diff --git a/src/utils.c b/src/utils.c
-index 1b8dbaa..0d3379f 100644
---- a/src/utils.c
-+++ b/src/utils.c
-@@ -65,7 +65,7 @@ xcalloc (size_t n, size_t m)
-     memset (p, 0, nbytes);
-   else
-     {
--      g_error ("%s: failed to allocate %lu bytes",
-+      g_error ("%s: failed to allocate %lu bytes",
-                G_STRLOC, (unsigned long)nbytes);
-       abort (); /* Just in case g_error returns.  */
-     }
-@@ -97,7 +97,7 @@ translate_sys2libc_fd (assuan_fd_t fd, int for_write)
-
-   if (fd == ASSUAN_INVALID_FD)
-     return -1;
--
-+
-   /* Note that _open_osfhandle is currently defined to take and return
-      a long.  */
-   x = _open_osfhandle ((long)fd, for_write ? 1 : 0);
-@@ -111,15 +111,15 @@ translate_sys2libc_fd (assuan_fd_t fd, int for_write)
-
-
- #ifdef HAVE_W32_SYSTEM
--int
-+int
- inet_aton (const char *cp, struct in_addr *inp)
- {
-   if (!cp || !*cp || !inp)
-     {
-       errno = EINVAL;
--      return 0;
-+      return 0;
-     }
--
-+
-   if (!strcmp(cp, "255.255.255.255"))
-     {
-       /*  Although this is a valid address, the old inet_addr function
-@@ -127,7 +127,7 @@ inet_aton (const char *cp, struct in_addr *inp)
-         inp->s_addr = INADDR_NONE;
-         return 1;
-     }
--
-+
-   inp->s_addr = inet_addr (cp);
-   return (inp->s_addr != INADDR_NONE);
- }
-@@ -226,9 +226,9 @@ decode_c_string (const char *src)
-		       this will also never be larger than the source
-		       string.  */
-		    *(dest++) = '\\';
--		    *(dest++) = '0';
-+		    *(dest++) = '0';
-		  }
--		else
-+		else
-		  *((unsigned char *) dest++) = val;
-		src += 4;
-	      }
-@@ -322,7 +322,7 @@ percent_unescape (char *string, int plus2space)
-   while (*string)
-     {
-       if (*string == '%' && string[1] && string[2])
--        {
-+        {
-           string++;
-           *p++ = xtoi_2 (string);
-           n++;
-@@ -345,3 +345,50 @@ percent_unescape (char *string, int plus2space)
- }
-
-
-+/* Decode the percent escaped string STR in place.  In contrast to
-+   percent_unescape, this make sure that the result is a string and in
-+   addition escapes embedded nuls. */
-+void
-+decode_percent_string (char *str)
-+{
-+  char *src = str;
-+  char *dest = str;
-+
-+  /* Convert the string.  */
-+  while (*src)
-+    {
-+      if (*src != '%')
-+        {
-+          *(dest++) = *(src++);
-+          continue;
-+        }
-+      else
-+        {
-+          int val = hextobyte (&src[1]);
-+
-+          if (val == -1)
-+            {
-+              /* Should not happen.  */
-+              *(dest++) = *(src++);
-+              if (*src)
-+                *(dest++) = *(src++);
-+              if (*src)
-+                *(dest++) = *(src++);
-+            }
-+          else
-+            {
-+              if (!val)
-+                {
-+                  /* A binary zero is not representable in a C
-+                     string.  */
-+                  *(dest++) = '\\';
-+                  *(dest++) = '0';
-+                }
-+              else
-+                *((unsigned char *) dest++) = val;
-+              src += 3;
-+            }
-+        }
-+    }
-+  *(dest++) = 0;
-+}
---
-1.7.7.1
diff --git a/patches/gpa-0.9.4/04-utf-clip-crash.patch b/patches/gpa-0.9.4/04-utf-clip-crash.patch
deleted file mode 100755
index 3460a62..0000000
--- a/patches/gpa-0.9.4/04-utf-clip-crash.patch
+++ /dev/null
@@ -1,190 +0,0 @@
-#! /bin/sh
-patch -p1 -l -f $* < $0
-exit $?
-
-
-From d3f20e7883f2fb9e52e487fd516bdc7b9bc695ed Mon Sep 17 00:00:00 2001
-From: Werner Koch <wk at gnupg.org>
-Date: Fri, 16 Aug 2013 15:18:57 +0200
-Subject: [PATCH] w32: Fix crash due to bad conversions of utf-8 in the
- clipboard.
-
-* src/gpgmetools.c (dos_to_unix): Remove.  Remove all calls.
-(dump_data_to_clipboard): Return an error code instead of calling
-exit.
-* src/gpaexportclipop.c
-(gpa_export_clipboard_operation_complete_export): Print success
-message only on success.
---
-
-The removal of dos_to_unix is possible due to the patch
-https://bugzilla.gnome.org/show_bug.cgi?id=649390 which will go into
-the next Gtk+ 2.24 version.dos_to_unix was anyway not correct because
-it scanned for an embedded nul but it is not guaranteed that it is
-always called with one.
-
-The other patch which will be helpful is:
-https://bugzilla.gnome.org/show_bug.cgi?id=696232
-(g_utf8_to_utf16() is not guaranteed to succeed. Check the error and
- return if it failed.)
-
-Gpg4win uses both patches.
-
-GnuPG-bug-id: 1525
----
- src/clipboard.c       |   12 ------------
- src/gpaexportclipop.c |    8 ++++----
- src/gpgmetools.c      |   43 +++++++------------------------------------
- src/gpgmetools.h      |    5 -----
- 4 files changed, 11 insertions(+), 57 deletions(-)
-
-diff --git a/src/clipboard.c b/src/clipboard.c
-index 682bd34..01b6058 100644
---- a/src/clipboard.c
-+++ b/src/clipboard.c
-@@ -283,10 +283,6 @@ file_created_cb (GpaFileOperation *op, gpa_file_item_t item, gpointer data)
-                        NULL, &len, NULL);
-       if (str)
-         {
--#ifdef G_OS_WIN32
--          dos_to_unix (str, &item->direct_out_len);
--#endif
--
-           gtk_text_buffer_set_text (clipboard->text_buffer, str, len);
-           g_free (str);
-           return;
-@@ -296,10 +292,6 @@ file_created_cb (GpaFileOperation *op, gpa_file_item_t item, gpointer data)
-       /* Enough warnings: Try to show even with invalid encoding.  */
-     }
-
--#ifdef G_OS_WIN32
--  dos_to_unix (item->direct_out, &item->direct_out_len);
--#endif
--
-   gtk_text_buffer_set_text (clipboard->text_buffer,
-			    item->direct_out, item->direct_out_len);
- }
-@@ -481,10 +473,6 @@ file_open (GtkAction *action, gpointer param)
-       return;
-     }
-
--#ifdef G_OS_WIN32
--  dos_to_unix (contents, &length);
--#endif
--
-   gtk_text_buffer_set_text (clipboard->text_buffer, contents, length);
-   g_free (contents);
- }
-diff --git a/src/gpaexportclipop.c b/src/gpaexportclipop.c
-index 0ce88af..62edb12 100644
---- a/src/gpaexportclipop.c
-+++ b/src/gpaexportclipop.c
-@@ -134,10 +134,10 @@ static void
- gpa_export_clipboard_operation_complete_export (GpaExportOperation *operation)
- {
-   GpaExportClipboardOperation *op = GPA_EXPORT_CLIPBOARD_OPERATION (operation);
--  dump_data_to_clipboard (operation->dest, gtk_clipboard_get
--			  (GDK_SELECTION_CLIPBOARD));
--  gpa_window_message (_("The keys have been copied to the clipboard."),
--		      GPA_OPERATION (op)->window);
-+  if (!dump_data_to_clipboard (operation->dest, gtk_clipboard_get
-+                               (GDK_SELECTION_CLIPBOARD)))
-+    gpa_window_message (_("The keys have been copied to the clipboard."),
-+                        GPA_OPERATION (op)->window);
- }
-
- /* API */
-diff --git a/src/gpgmetools.c b/src/gpgmetools.c
-index 2b4be56..63f6b8d 100644
---- a/src/gpgmetools.c
-+++ b/src/gpgmetools.c
-@@ -294,37 +294,12 @@ gpa_gpgme_data_new_from_file (gpgme_data_t *data,
- }
-
-
--#ifdef G_OS_WIN32
--/* Convert newlines.  */
--void
--dos_to_unix (gchar *str, gsize *len)
--{
--  /* On Windows 2000, we need to convert \r\n to \n in the output for
--     cut & paste to work properly (otherwise, extra newlines will be
--     inserted).  */
--  gchar *src;
--  gchar *dst;
--
--  src = str;
--  dst = str;
--  while (*src)
--    {
--      if (src[0] == '\r' && src[1] == '\n')
--	src++;
--      *(dst++) = *(src++);
--    }
--  *dst = '\0';
--  *len = dst - str;
--}
--#endif
--
--
- /* Write the contents of the gpgme_data_t into the clipboard.  Assumes
--   that the data is ASCII.  */
--void
-+   that the data is ASCII.  Return 0 on success.  */
-+int
- dump_data_to_clipboard (gpgme_data_t data, GtkClipboard *clipboard)
- {
--  char buffer[128];
-+  char buffer[512];
-   int nread;
-   gchar *text = NULL;
-   size_t len = 0;
-@@ -333,27 +308,23 @@ dump_data_to_clipboard (gpgme_data_t data, GtkClipboard *clipboard)
-   if (nread == -1)
-     {
-       gpa_window_error (strerror (errno), NULL);
--      exit (EXIT_FAILURE);
-+      return -1;
-     }
-   while ((nread = gpgme_data_read (data, buffer, sizeof (buffer))) > 0)
-     {
--      text = g_realloc (text, len + nread);
-+      text = g_realloc (text, len + nread + 1);
-       strncpy (text + len, buffer, nread);
-       len += nread;
-     }
-   if (nread == -1)
-     {
-       gpa_window_error (strerror (errno), NULL);
--      exit (EXIT_FAILURE);
-+      return -1;
-     }
-
--#ifdef G_OS_WIN32
--  dos_to_unix (text, &len);
--#endif
--
-   gtk_clipboard_set_text (clipboard, text, (int)len);
-   g_free (text);
--  return;
-+  return 0;
- }
-
-
---- a/src/gpgmetools.h 2013-08-16 16:12:46.648003898 +0200
-+++ b/src/gpgmetools.h 2013-08-16 16:13:14.836003193 +0200
-@@ -112,13 +112,8 @@
- int gpa_open_input (const char *filename, gpgme_data_t *data,
-                    GtkWidget *parent);
-
--#ifdef G_OS_WIN32
--/* Convert newlines.  */
--void dos_to_unix (gchar *str, gsize *len);
--#endif
--
- /* Write the contents of the gpgme_data_t into the clipboard.  */
--void dump_data_to_clipboard (gpgme_data_t data, GtkClipboard *clipboard);
-+int dump_data_to_clipboard (gpgme_data_t data, GtkClipboard *clipboard);
-
- /* Begin generation of a key with the given parameters.  It prepares
-    the parameters required by Gpgme and returns whatever
diff --git a/patches/gpa-0.9.4/05-event-done.patch b/patches/gpa-0.9.4/05-event-done.patch
deleted file mode 100755
index a9c68c2..0000000
--- a/patches/gpa-0.9.4/05-event-done.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-#! /bin/sh
-patch -p1 -l -f $* < $0
-exit $?
-
-From 45eb36a00e0bb39fd02cb065e79cbc53945e7103 Mon Sep 17 00:00:00 2001
-From: Werner Koch <wk at gnupg.org>
-Date: Mon, 19 Aug 2013 20:29:25 +0200
-Subject: [PATCH] Fix wrong use of GPGME_EVENT_DONE.
-
-* src/gpacontext.c (gpa_context_event_cb): Fix use of TYPE_DATA.  Add
-debug output.
---
-
-With GPGME commit c8e934b2 (2009-10-26) gpgme_io_event_done_data_t was
-introduced to replace the use of gpg_error_t with GPGME_EVENT_DONE.
-Unfortunately this was not documented.  Maybe at that time the event
-code was considered internal and its use in GPA was not known.  Too
-bad.
----
- src/gpacontext.c |   13 +++++++++----
- 1 files changed, 9 insertions(+), 4 deletions(-)
-
-diff --git a/src/gpacontext.c b/src/gpacontext.c
-index e021d5f..b049f84 100644
---- a/src/gpacontext.c
-+++ b/src/gpacontext.c
-@@ -405,16 +405,21 @@ static void
- gpa_context_event_cb (void *data, gpgme_event_io_t type, void *type_data)
- {
-   GpaContext *context = data;
--  gpg_error_t *err;
--
-+  gpg_error_t err, op_err;
-+
-   switch (type)
-     {
-     case GPGME_EVENT_START:
-       g_signal_emit (context, signals[START], 0);
-       break;
-     case GPGME_EVENT_DONE:
--      err = type_data;
--      g_signal_emit (context, signals[DONE], 0, *err);
-+      err = ((gpgme_io_event_done_data_t)type_data)->err;
-+      op_err = ((gpgme_io_event_done_data_t)type_data)->op_err;
-+      g_debug ("EVENT_DONE: err=%s op_err=%s",
-+               gpg_strerror (err), gpg_strerror (op_err));
-+      if (!err)
-+        err = op_err;
-+      g_signal_emit (context, signals[DONE], 0, err);
-       break;
-     case GPGME_EVENT_NEXT_KEY:
-       g_signal_emit (context, signals[NEXT_KEY], 0, type_data);
---
-1.7.7.1

commit 79a97ee85224e80f6b2a6a80a077d02b54ac87c0
Author: Andre Heinecke <aheinecke at intevation.de>
Date:   Mon Mar 9 11:21:36 2015 +0100

    Update gpgme to 1.5.3
    
    * packages/packages.current (gpgme): Update.
    * patches/gpgme-1.5.1: Removed patch included upstream.

diff --git a/Makefile.am b/Makefile.am
index 16f2984..6b05d6a 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -56,7 +56,6 @@ EXTRA_DIST = autogen.sh README.GIT ONEWS \
         patches/gpa-0.9.4/03-homedir-via-gpgconf.patch \
         patches/gpa-0.9.4/04-utf-clip-crash.patch \
         patches/gpa-0.9.4/05-event-done.patch \
-        patches/gpgme-1.5.1/0001-Handle-modern-keyserver-output-which-may-emit-the-fi.patch \
         patches/gtkhtml2_viewer-0.34/80-src-makefile.postcfg-build \
         patches/libtasn1-2.14/gnulib-mingw-w64-fix.patch \
         patches/pthreads-w32-2-8-0-release/01-make.patch \
diff --git a/packages/packages.current b/packages/packages.current
index 34be6df..0ec1943 100644
--- a/packages/packages.current
+++ b/packages/packages.current
@@ -439,9 +439,11 @@ chk  f8e5c774c35fbb91d84e82559baf76f6b4513236
 file scute/scute-1.4.0.tar.bz2
 chk  e28141d2b03612c09512651795976c58ed3f8035
 
-# checked: 2014-11-21 ah - updated
-file gpgme/gpgme-1.5.1.tar.bz2
-chk  a91c258e79acf30ec86a667e07f835e5e79342d8
+# last changed: 2015-03-09
+# by: ah
+# verified: Sig D869 2123 C406 5DEA 5E0F  3AB5 249B 39D2 4F25 E3B6
+file gpgme/gpgme-1.5.3.tar.bz2
+chk  8dd7711a4de117994fe2d45879ef8a9900d50f6a
 
 # checked: 2014-11-21 ah - updated
 file gpa/gpa-0.9.6.tar.bz2
diff --git a/patches/gpgme-1.5.1/0001-Handle-modern-keyserver-output-which-may-emit-the-fi.patch b/patches/gpgme-1.5.1/0001-Handle-modern-keyserver-output-which-may-emit-the-fi.patch
deleted file mode 100755
index ff5beb7..0000000
--- a/patches/gpgme-1.5.1/0001-Handle-modern-keyserver-output-which-may-emit-the-fi.patch
+++ /dev/null
@@ -1,101 +0,0 @@
-#! /bin/sh
-patch -p1 -f -l $* < $0
-exit $?
-
-From 7a0e7f93f727e82d9404655b96abb0a8558cb2e5 Mon Sep 17 00:00:00 2001
-From: Werner Koch <wk at gnupg.org>
-Date: Tue, 12 Aug 2014 10:36:30 +0200
-Subject: [PATCH] Handle modern keyserver output which may emit the
- fingerprint.
-
-* src/engine-gpg.c (read_colon_line): Split preprocessed lines.
-(gpg_keylist_preprocess): Limit keyid field and print fingerprint.
----
- src/engine-gpg.c | 53 ++++++++++++++++++++++++++++++++++++++++++++---------
- 1 file changed, 44 insertions(+), 9 deletions(-)
-
-diff --git a/src/engine-gpg.c b/src/engine-gpg.c
-index 36f035a..924ba44 100644
---- a/src/engine-gpg.c
-+++ b/src/engine-gpg.c
-@@ -1237,10 +1237,26 @@ read_colon_line (engine_gpg_t gpg)
-		    }
-
-		  assert (gpg->colon.fnc);
--		  gpg->colon.fnc (gpg->colon.fnc_value, line ? line : buffer);
--		  if (line)
--		    free (line);
--		}
-+                  if (line)
-+                    {
-+                      char *linep = line;
-+                      char *endp;
-+
-+                      do
-+                        {
-+                          endp = strchr (linep, '\n');
-+                          if (endp)
-+                            *endp++ = 0;
-+                          gpg->colon.fnc (gpg->colon.fnc_value, linep);
-+                          linep = endp;
-+                        }
-+                      while (linep && *linep);
-+
-+                      free (line);
-+                    }
-+                  else
-+                    gpg->colon.fnc (gpg->colon.fnc_value, buffer);
-+                }
-
-	      /* To reuse the buffer for the next line we have to
-		 shift the remaining data to the buffer start and
-@@ -2059,6 +2075,7 @@ gpg_keylist_preprocess (char *line, char **r_line)
- #define NR_FIELDS 16
-   char *field[NR_FIELDS];
-   int fields = 0;
-+  size_t n;
-
-   *r_line = NULL;
-
-@@ -2094,16 +2111,34 @@ gpg_keylist_preprocess (char *line, char **r_line)
-	 pub:<keyid>:<algo>:<keylen>:<creationdate>:<expirationdate>:<flags>
-
-	 as defined in 5.2. Machine Readable Indexes of the OpenPGP
--	 HTTP Keyserver Protocol (draft).
-+	 HTTP Keyserver Protocol (draft).  Modern versions of the SKS
-+	 keyserver return the fingerprint instead of the keyid.  We
-+	 detect this here and use the v4 fingerprint format to convert
-+	 it to a key id.
-
-	 We want:
-	 pub:o<flags>:<keylen>:<algo>:<keyid>:<creatdate>:<expdate>::::::::
-       */
-
--      if (asprintf (r_line, "pub:o%s:%s:%s:%s:%s:%s::::::::",
--		    field[6], field[3], field[2], field[1],
--		    field[4], field[5]) < 0)
--	return gpg_error_from_syserror ();
-+      n = strlen (field[1]);
-+      if (n > 16)
-+        {
-+          if (asprintf (r_line,
-+                        "pub:o%s:%s:%s:%s:%s:%s::::::::\n"
-+                        "fpr:::::::::%s:",
-+                        field[6], field[3], field[2], field[1] + n - 16,
-+                        field[4], field[5], field[1]) < 0)
-+            return gpg_error_from_syserror ();
-+        }
-+      else
-+        {
-+          if (asprintf (r_line,
-+                        "pub:o%s:%s:%s:%s:%s:%s::::::::",
-+                        field[6], field[3], field[2], field[1],
-+                        field[4], field[5]) < 0)
-+            return gpg_error_from_syserror ();
-+        }
-+
-       return 0;
-
-     case RT_UID:
---
-1.9.1

commit cb5b4dcea170af0b400f7686d6aff2bed993bccb
Author: Andre Heinecke <aheinecke at intevation.de>
Date:   Mon Mar 9 11:17:10 2015 +0100

    Update libassuan to 2.2.0
    
    * packages/packages.current(libassuan): Update.

diff --git a/packages/packages.current b/packages/packages.current
index a1ac9c2..34be6df 100644
--- a/packages/packages.current
+++ b/packages/packages.current
@@ -412,9 +412,11 @@ chk  9456e7b64db9df8360a1407a38c8c958da80bbf1
 file libksba/libksba-1.3.2.tar.bz2
 chk  37d0893a587354af2b6e49f6ae701ca84f52da67
 
-# checked: 2014-11-25 ah - updated
-file libassuan/libassuan-2.1.3.tar.bz2
-chk  56ac91973c2818a91d4f16ed48265a2b5daf45d3
+# last changed: 2015-03-09
+# by: ah
+# verified: Sig D869 2123 C406 5DEA 5E0F  3AB5 249B 39D2 4F25 E3B6
+file libassuan/libassuan-2.2.0.tar.bz2
+chk  7cf0545955ce414044bb99b871d324753dd7b2e5
 
 # last changed: 2015-02-18
 # by: ah

commit 726f584d377646bc77554b25208034129a95829d
Author: Andre Heinecke <aheinecke at intevation.de>
Date:   Mon Mar 9 11:12:38 2015 +0100

    Update pinentry to 0.9.0 and remove patches
    
    * packages/packages.current (pinentry): Update.
    * patches/pinentry-0.8.4-beta8: Removed. All patches applied.

diff --git a/Makefile.am b/Makefile.am
index e97a1b6..16f2984 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -59,10 +59,6 @@ EXTRA_DIST = autogen.sh README.GIT ONEWS \
         patches/gpgme-1.5.1/0001-Handle-modern-keyserver-output-which-may-emit-the-fi.patch \
         patches/gtkhtml2_viewer-0.34/80-src-makefile.postcfg-build \
         patches/libtasn1-2.14/gnulib-mingw-w64-fix.patch \
-        patches/pinentry-0.8.4-beta8/0001-Set-some-accessibility-information.patch \
-        patches/pinentry-0.8.4-beta8/0002-Use-raiseWindow-also-for-confirm-dialogs.patch \
-        patches/pinentry-0.8.4-beta8/0003-Add-fallbacks-for-SetForegroundWindow.patch \
-        patches/pinentry-0.8.4-beta8/0004-Check-for-MOC-also-if-pinentry-qt-is-disabled.patch \
         patches/pthreads-w32-2-8-0-release/01-make.patch \
         patches/pthreads-w32-2-8-0-release/02-mingw_w64_timespec_compatibility.patch
 
diff --git a/packages/packages.current b/packages/packages.current
index a1a4048..a1ac9c2 100644
--- a/packages/packages.current
+++ b/packages/packages.current
@@ -427,9 +427,11 @@ chk  d065be185f5bac8ea07b210ab7756e79b83b63d4
 file dirmngr/dirmngr-1.1.1.tar.bz2
 chk  e708d4aa5ce852f4de3f4b58f4e4f221f5e5c690
 
-# checked: 2014-07-16 ah (I don't think its unstable :P)
-file pinentry/unstable/pinentry-0.8.4-beta8.tar.bz2
-chk  de4ba5ef9a1ced4e4f8543feac553d4cf68dea00
+# last changed: 2015-03-09
+# by: ah
+# verified: Sig D869 2123 C406 5DEA 5E0F  3AB5 249B 39D2 4F25 E3B6
+file pinentry/pinentry-0.9.0.tar.bz2
+chk  f8e5c774c35fbb91d84e82559baf76f6b4513236
 
 # checked: 2014-07-16 ah
 file scute/scute-1.4.0.tar.bz2
diff --git a/patches/pinentry-0.8.4-beta8/0001-Set-some-accessibility-information.patch b/patches/pinentry-0.8.4-beta8/0001-Set-some-accessibility-information.patch
deleted file mode 100755
index 8cbc22b..0000000
--- a/patches/pinentry-0.8.4-beta8/0001-Set-some-accessibility-information.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-#! /bin/sh
-patch -p1 -l -f $* < $0
-exit $?
-
-From 41d046022e912c76cb424c906064745e732f01f3 Mon Sep 17 00:00:00 2001
-From: Andre Heinecke <aheinecke at intevation.de>
-Date: Wed, 30 Jul 2014 11:34:26 +0200
-Subject: [PATCH] Set some accessibility information
-
-    * qt4/main.cpp (qt_cmd_handler): Build buttons with accessibile
-    Description.
-    * qt4/pinentrydialog.cpp (setDescription, setError, setOkText)
-    (setCancelText, setQualityBar): Set an accessible description.
-    * qt4/pinentryconfirm.cpp (PinentryConfirm): Set message
-    box contents also as accessible values.
-    * NEWS: Mention it and the copy/paste change from last year.
----
- NEWS                    | 4 +++-
- qt4/main.cpp            | 5 ++++-
- qt4/pinentryconfirm.cpp | 2 ++
- qt4/pinentrydialog.cpp  | 8 +++++++-
- 4 files changed, 16 insertions(+), 3 deletions(-)
-
-diff --git a/NEWS b/NEWS
-index a9c0057..fbc3708 100644
---- a/NEWS
-+++ b/NEWS
-@@ -1,7 +1,9 @@
- Noteworthy changes in version 0.8.4 (unreleased)
- ------------------------------------------------
-
-- *
-+ * Qt4: New option to enable pasting the passphrase from clipboard
-+
-+ * Qt4: Improved accessiblity
-
-
- Noteworthy changes in version 0.8.3 (2013-04-26)
-diff --git a/qt4/main.cpp b/qt4/main.cpp
-index 7fdef37..106999e 100644
---- a/qt4/main.cpp
-+++ b/qt4/main.cpp
-@@ -215,8 +215,11 @@ qt_cmd_handler (pinentry_t pe)
-       };
-
-       for ( size_t i = 0 ; i < sizeof buttonLabels / sizeof *buttonLabels ; ++i )
--        if ( (buttons & buttonLabels[i].button) && !buttonLabels[i].label.isEmpty() )
-+        if ( (buttons & buttonLabels[i].button) && !buttonLabels[i].label.isEmpty() ) {
-             box.button( buttonLabels[i].button )->setText( buttonLabels[i].label );
-+            box.button( buttonLabels[i].button )->setAccessibleDescription ( buttonLabels[i].label );
-+
-+        }
-
-       box.setIconPixmap( icon() );
-
-diff --git a/qt4/pinentryconfirm.cpp b/qt4/pinentryconfirm.cpp
-index b22aef5..f7a1d63 100644
---- a/qt4/pinentryconfirm.cpp
-+++ b/qt4/pinentryconfirm.cpp
-@@ -29,6 +29,8 @@ PinentryConfirm::PinentryConfirm(Icon icon, int timeout, const QString &title,
-	connect(_timer, SIGNAL(timeout()), this, SLOT(slotTimeout()));
-	_timer->start(timeout*1000);
-     }
-+    setAccessibleDescription (desc);
-+    setAccessibleName (title);
- }
-
- void PinentryConfirm::slotTimeout()
-diff --git a/qt4/pinentrydialog.cpp b/qt4/pinentrydialog.cpp
-index a8dbb42..b16a74f 100644
---- a/qt4/pinentrydialog.cpp
-+++ b/qt4/pinentrydialog.cpp
-@@ -198,6 +198,7 @@ void PinEntryDialog::setDescription( const QString& txt )
- {
-   _desc->setVisible( !txt.isEmpty() );
-   _desc->setText( txt );
-+  _desc->setAccessibleDescription ( txt );
-   _icon->setPixmap( icon() );
-   setError( QString::null );
- }
-@@ -211,6 +212,7 @@ void PinEntryDialog::setError( const QString& txt )
- {
-   if( !txt.isNull() )_icon->setPixmap( icon( QStyle::SP_MessageBoxCritical ) );
-   _error->setText( txt );
-+  _error->setAccessibleDescription ( txt );
-   _error->setVisible( !txt.isEmpty() );
- }
-
-@@ -243,19 +245,23 @@ QString PinEntryDialog::prompt() const
- void PinEntryDialog::setOkText( const QString& txt )
- {
-   _ok->setText( txt );
-+  _ok->setAccessibleDescription ( txt );
-   _ok->setVisible( !txt.isEmpty() );
- }
-
- void PinEntryDialog::setCancelText( const QString& txt )
- {
-   _cancel->setText( txt );
-+  _cancel->setAccessibleDescription ( txt );
-   _cancel->setVisible( !txt.isEmpty() );
- }
-
- void PinEntryDialog::setQualityBar( const QString& txt )
- {
--  if (_have_quality_bar)
-+  if (_have_quality_bar) {
-     _quality_bar_label->setText( txt );
-+    _quality_bar_label->setAccessibleDescription ( txt );
-+  }
- }
-
- void PinEntryDialog::setQualityBarTT( const QString& txt )
---
-1.9.1
diff --git a/patches/pinentry-0.8.4-beta8/0002-Use-raiseWindow-also-for-confirm-dialogs.patch b/patches/pinentry-0.8.4-beta8/0002-Use-raiseWindow-also-for-confirm-dialogs.patch
deleted file mode 100755
index 6be4a22..0000000
--- a/patches/pinentry-0.8.4-beta8/0002-Use-raiseWindow-also-for-confirm-dialogs.patch
+++ /dev/null
@@ -1,76 +0,0 @@
-#! /bin/sh
-patch -p1 -l -f $* < $0
-exit $?
-
-From 47476d2f288a22c29567ae2c179ce0472db4257e Mon Sep 17 00:00:00 2001
-From: Andre Heinecke <aheinecke at intevation.de>
-Date: Wed, 6 Aug 2014 15:01:54 +0200
-Subject: [PATCH 2/3] Use raiseWindow also for confirm dialogs
-
-    This should fix the case that the dialog opened
-    in the foreground but a warning / confirm dialog
-    opened in the background.
-
-    * qt4/pinentryconfirm.cpp, qt4/pinentryconfirm.h (showEvent):
-    New overwrite base class method to call raiseWindow.
-    * NEWS: Mention this.
----
- NEWS                    | 1 +
- qt4/pinentryconfirm.cpp | 8 ++++++++
- qt4/pinentryconfirm.h   | 3 +++
- 3 files changed, 12 insertions(+)
-
-diff --git a/NEWS b/NEWS
-index fbc3708..2741f5c 100644
---- a/NEWS
-+++ b/NEWS
-@@ -5,6 +5,7 @@ Noteworthy changes in version 0.8.4 (unreleased)
-
-  * Qt4: Improved accessiblity
-
-+ * Qt4: Raise confirm message windows into foreground
-
- Noteworthy changes in version 0.8.3 (2013-04-26)
- ------------------------------------------------
-diff --git a/qt4/pinentryconfirm.cpp b/qt4/pinentryconfirm.cpp
-index f7a1d63..dfbd19f 100644
---- a/qt4/pinentryconfirm.cpp
-+++ b/qt4/pinentryconfirm.cpp
-@@ -18,6 +18,7 @@
-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
- #include "pinentryconfirm.h"
-+#include "pinentrydialog.h"
- #include <QAbstractButton>
-
- PinentryConfirm::PinentryConfirm(Icon icon, int timeout, const QString &title,
-@@ -31,6 +32,13 @@ PinentryConfirm::PinentryConfirm(Icon icon, int timeout, const QString &title,
-     }
-     setAccessibleDescription (desc);
-     setAccessibleName (title);
-+    raiseWindow (this);
-+}
-+
-+void PinentryConfirm::showEvent( QShowEvent* event )
-+{
-+    QDialog::showEvent( event );
-+    raiseWindow( this );
- }
-
- void PinentryConfirm::slotTimeout()
-diff --git a/qt4/pinentryconfirm.h b/qt4/pinentryconfirm.h
-index 3113750..44fb3ae 100644
---- a/qt4/pinentryconfirm.h
-+++ b/qt4/pinentryconfirm.h
-@@ -36,6 +36,9 @@ class PinentryConfirm : public QMessageBox
-
-     private:
-	QTimer *_timer;
-+
-+    protected:
-+    /* reimp */ void showEvent( QShowEvent* event );
- };
-
- #endif
---
-1.9.1
diff --git a/patches/pinentry-0.8.4-beta8/0003-Add-fallbacks-for-SetForegroundWindow.patch b/patches/pinentry-0.8.4-beta8/0003-Add-fallbacks-for-SetForegroundWindow.patch
deleted file mode 100755
index 013e1bd..0000000
--- a/patches/pinentry-0.8.4-beta8/0003-Add-fallbacks-for-SetForegroundWindow.patch
+++ /dev/null
@@ -1,112 +0,0 @@
-#! /bin/sh
-patch -p1 -l -f $* < $0
-exit $?
-
-From f4d14ffcf2e04b1938c00a0ef1504e0e932631fd Mon Sep 17 00:00:00 2001
-From: Andre Heinecke <aheinecke at intevation.de>
-Date: Wed, 6 Aug 2014 15:05:25 +0200
-Subject: [PATCH 3/3] Add fallbacks for SetForegroundWindow
-
-    If that foreground window fails pinentry-qt now tries to
-    attach to the current foreground process and then tries
-    to set the foreground window again. If that fails it also
-    calls ShowWindow as a last resort.
-
-    * qt4/pinentrydialog.cpp (raiseWindow): Add fallbacks in
-    case SetForegroundWindow fails.
----
- NEWS                   |  3 +++
- qt4/pinentrydialog.cpp | 59 +++++++++++++++++++++++++++++++++-----------------
- 2 files changed, 42 insertions(+), 20 deletions(-)
-
-diff --git a/NEWS b/NEWS
-index 2741f5c..5bd874f 100644
---- a/NEWS
-+++ b/NEWS
-@@ -7,6 +7,9 @@ Noteworthy changes in version 0.8.4 (unreleased)
-
-  * Qt4: Raise confirm message windows into foreground
-
-+ * Qt4 (Windows): Improve the way pinentry-qt raises itself in
-+ the foreground.
-+
- Noteworthy changes in version 0.8.3 (2013-04-26)
- ------------------------------------------------
-
-diff --git a/qt4/pinentrydialog.cpp b/qt4/pinentrydialog.cpp
-index b16a74f..3a6dacc 100644
---- a/qt4/pinentrydialog.cpp
-+++ b/qt4/pinentrydialog.cpp
-@@ -45,31 +45,50 @@
-    versions.  This is the reason why gpg-agent employs its
-    AllowSetForegroundWindow callback machinery to ask the supposed to
-    be be calling process to allow a pinentry to go into the
--   foreground.  */
--// #ifdef Q_WS_WIN
--// void SetForegroundWindowEx( HWND hWnd )
--// {
--//    //Attach foreground window thread to our thread
--//    const DWORD ForeGroundID = GetWindowThreadProcessId(::GetForegroundWindow(),NULL);
--//    const DWORD CurrentID   = GetCurrentThreadId();
--
--//    AttachThreadInput ( ForeGroundID, CurrentID, TRUE );
--//    //Do our stuff here
--//    HWND hLastActivePopupWnd = GetLastActivePopup( hWnd );
--//    SetForegroundWindow( hLastActivePopupWnd );
--
--//    //Detach the attached thread
--//    AttachThreadInput ( ForeGroundID, CurrentID, FALSE );
--// }// End SetForegroundWindowEx
--// #endif
-+   foreground.
-
--void raiseWindow( QWidget* w )
--{
-+   [ah] This is a Hack to workaround the fact that Foregrounding
-+   a Window is so restricted that it AllowSetForegroundWindow
-+   does not always work (e.g. when the ForegroundWindow timeout
-+   has not expired.
-+   */
- #ifdef Q_WS_WIN
--    SetForegroundWindow( w->winId() );
-+WINBOOL SetForegroundWindowEx( HWND hWnd )
-+{
-+   //Attach foreground window thread to our thread
-+   const DWORD ForeGroundID = GetWindowThreadProcessId(::GetForegroundWindow(),NULL);
-+   const DWORD CurrentID   = GetCurrentThreadId();
-+   WINBOOL retval;
-+
-+   AttachThreadInput ( ForeGroundID, CurrentID, TRUE );
-+   //Do our stuff here
-+   HWND hLastActivePopupWnd = GetLastActivePopup( hWnd );
-+   retval = SetForegroundWindow( hLastActivePopupWnd );
-+
-+   //Detach the attached thread
-+   AttachThreadInput ( ForeGroundID, CurrentID, FALSE );
-+   return retval;
-+}// End SetForegroundWindowEx
- #endif
-+
-+void raiseWindow( QWidget* w )
-+{
-+    /* Maybe Qt will become agressive enough one day that
-+     * this is enough on windows too*/
-     w->raise();
-     w->activateWindow();
-+#ifdef Q_WS_WIN
-+    /* In the meantime we do our own attention grabbing */
-+    if (!SetForegroundWindow (w->winId()) &&
-+            !SetForegroundWindowEx (w->winId()))  {
-+        OutputDebugString("SetForegroundWindow (ex) failed");
-+        /* Yet another fallback which will not work on some
-+         * versions and is not recommended by msdn */
-+        if (!ShowWindow (w->winId(), SW_SHOWNORMAL)) {
-+            OutputDebugString ("ShowWindow failed.");
-+        }
-+    }
-+#endif
- }
-
- QPixmap icon( QStyle::StandardPixmap which )
---
-1.9.1
diff --git a/patches/pinentry-0.8.4-beta8/0004-Check-for-MOC-also-if-pinentry-qt-is-disabled.patch b/patches/pinentry-0.8.4-beta8/0004-Check-for-MOC-also-if-pinentry-qt-is-disabled.patch
deleted file mode 100755
index d4eacea..0000000
--- a/patches/pinentry-0.8.4-beta8/0004-Check-for-MOC-also-if-pinentry-qt-is-disabled.patch
+++ /dev/null
@@ -1,107 +0,0 @@
-#! /bin/sh
-patch -p1 -l -f $* < $0
-exit $?
-
-From 52cf95c4fd97dc38856e72aa3e42a135d010df06 Mon Sep 17 00:00:00 2001
-From: Andre Heinecke <aheinecke at intevation.de>
-Date: Wed, 6 Aug 2014 16:09:55 +0200
-Subject: [PATCH 4/4] Check for MOC also if pinentry-qt is disabled
-
-  * configure.ac: Call QT_PATH_MOC if pinentry_qt4 is not no.
-
---
-  Previously the MOC lookup from m4/qt.m4 would only be called
-  if pinentry-qt was at least maybe. The MOC variable defined by
-  this macro is also used in pinentry-qt4 though.
----
- configure.ac | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/configure.ac b/configure.ac
-index b4133b0..595c2aa 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -427,6 +427,7 @@ fi)
- fi
-
- if test "$pinentry_qt4" != "no"; then
-+QT_PATH_MOC
- PKG_CHECK_MODULES(QT4_GUI, QtGui,,
- if test "$pinentry_qt4" = "yes"; then
-     AC_MSG_ERROR([[
-diff -u a/configure.orig b/configure
---- a/configure.orig	2014-08-06 14:14:43.887295901 +0000
-+++ b/configure	2014-08-06 14:14:53.003225375 +0000
-@@ -11081,6 +11081,72 @@
-
- if test "$pinentry_qt4" != "no"; then
-
-+   qt_bindirs=""
-+   for dir in $qt_dirs; do
-+      qt_bindirs="$qt_bindirs:$dir/bin:$dir/src/moc"
-+   done
-+   qt_bindirs="$qt_bindirs:/usr/bin:/usr/X11R6/bin:/usr/local/qt/bin"
-+   if test ! "$ac_qt_bindir" = "NO"; then
-+      qt_bindirs="$ac_qt_bindir:$qt_bindirs"
-+   fi
-+
-+   # Extract the first word of "moc", so it can be a program name with args.
-+set dummy moc; ac_word=$2
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-+$as_echo_n "checking for $ac_word... " >&6; }
-+if ${ac_cv_path_MOC+:} false; then :
-+  $as_echo_n "(cached) " >&6
-+else
-+  case $MOC in
-+  [\\/]* | ?:[\\/]*)
-+  ac_cv_path_MOC="$MOC" # Let the user override the test with a path.
-+  ;;
-+  *)
-+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $qt_bindirs
-+do
-+  IFS=$as_save_IFS
-+  test -z "$as_dir" && as_dir=.
-+    for ac_exec_ext in '' $ac_executable_extensions; do
-+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-+    ac_cv_path_MOC="$as_dir/$ac_word$ac_exec_ext"
-+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-+    break 2
-+  fi
-+done
-+  done
-+IFS=$as_save_IFS
-+
-+  test -z "$ac_cv_path_MOC" && ac_cv_path_MOC="no"
-+  ;;
-+esac
-+fi
-+MOC=$ac_cv_path_MOC
-+if test -n "$MOC"; then
-+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MOC" >&5
-+$as_echo "$MOC" >&6; }
-+else
-+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+
-+   if test "$MOC" = no; then
-+    #AC_MSG_ERROR([No Qt meta object compiler (moc) found!
-+    #Please check whether you installed Qt correctly.
-+    #You need to have a running moc binary.
-+    #configure tried to run $ac_cv_path_moc and the test didn't
-+    #succeed. If configure shouldn't have tried this one, set
-+    #the environment variable MOC to the right one before running
-+    #configure.
-+    #])
-+    have_moc="no"
-+   else
-+    have_moc="yes"
-+
-+   fi
-+
-+
- pkg_failed=no
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for QT4_GUI" >&5
- $as_echo_n "checking for QT4_GUI... " >&6; }

commit df0c7480d1e0f17ca1a0ab26ca53af8fb53d834a
Author: Andre Heinecke <aheinecke at intevation.de>
Date:   Mon Mar 9 11:08:40 2015 +0100

    Update libgcrypt to 1.6.3 and mention it in NEWS
    
    * pacakges/packages.current (libgcrypt): Update

diff --git a/NEWS b/NEWS
index 6622af7..e83cf03 100644
--- a/NEWS
+++ b/NEWS
@@ -10,6 +10,12 @@ Noteworthy changes in version 2.2.4 (unreleased)
 (de) GnuPG wurde auf Version 2.0.27 aktualisiert. Details zu dieser
      Version finden sich unter www.gnupg.org
 
+(en) Libgcrypt has been updated to version 1.6.3 (includes fix for
+     CVE-2014-3591)
+
+(de) Libgcrypt wurde auf Version 1.6.3 aktualisiert (enthält den
+     fix für CVE-2014-3591)
+
 ~~~~~~~~~~~~~~~
 GnuPG:          2.0.27
 Kleopatra:      2.2.0-git945878c
diff --git a/packages/packages.current b/packages/packages.current
index d5e858d..a1a4048 100644
--- a/packages/packages.current
+++ b/packages/packages.current
@@ -402,9 +402,11 @@ server ftp://ftp.gnupg.org/gcrypt
 file libgpg-error/libgpg-error-1.13.tar.bz2
 chk  50fbff11446a7b0decbf65a6e6b0eda17b5139fb
 
-# checked: 2014-08-21 ah - updated
-file libgcrypt/libgcrypt-1.6.2.tar.bz2
-chk  cc31aca87e4a3769cb86884a3f5982b2cc8eb7ec
+# last changed: 2015-03-09
+# by: ah
+# verified: Sig D869 2123 C406 5DEA 5E0F  3AB5 249B 39D2 4F25 E3B6
+file libgcrypt/libgcrypt-1.6.3.tar.bz2
+chk  9456e7b64db9df8360a1407a38c8c958da80bbf1
 
 # checked: 2014-11-25 ah
 file libksba/libksba-1.3.2.tar.bz2
@@ -414,7 +416,7 @@ chk  37d0893a587354af2b6e49f6ae701ca84f52da67
 file libassuan/libassuan-2.1.3.tar.bz2
 chk  56ac91973c2818a91d4f16ed48265a2b5daf45d3
 
-# last changed: 2015-2-18
+# last changed: 2015-02-18
 # by: ah
 # verified: Sig D869 2123 C406 5DEA 5E0F  3AB5 249B 39D2 4F25 E3B6
 name gnupg2-2.0.27.tar.bz2

-----------------------------------------------------------------------

Summary of changes:
 Makefile.am                                        |   11 -
 NEWS                                               |    8 +-
 packages/packages.current                          |   49 +-
 patches/gpa-0.9.4/01-bin-encrypt.patch             |  509 ----------
 patches/gpa-0.9.4/02-cms-detection.patch           |  152 ---
 patches/gpa-0.9.4/02-x509-import.patch             |  288 ------
 patches/gpa-0.9.4/03-homedir-via-gpgconf.patch     | 1032 --------------------
 patches/gpa-0.9.4/04-utf-clip-crash.patch          |  190 ----
 patches/gpa-0.9.4/05-event-done.patch              |   54 -
 ...rn-keyserver-output-which-may-emit-the-fi.patch |  101 --
 .../0001-Set-some-accessibility-information.patch  |  115 ---
 ...-Use-raiseWindow-also-for-confirm-dialogs.patch |   76 --
 ...003-Add-fallbacks-for-SetForegroundWindow.patch |  112 ---
 ...k-for-MOC-also-if-pinentry-qt-is-disabled.patch |  107 --
 14 files changed, 36 insertions(+), 2768 deletions(-)
 delete mode 100755 patches/gpa-0.9.4/01-bin-encrypt.patch
 delete mode 100755 patches/gpa-0.9.4/02-cms-detection.patch
 delete mode 100755 patches/gpa-0.9.4/02-x509-import.patch
 delete mode 100755 patches/gpa-0.9.4/03-homedir-via-gpgconf.patch
 delete mode 100755 patches/gpa-0.9.4/04-utf-clip-crash.patch
 delete mode 100755 patches/gpa-0.9.4/05-event-done.patch
 delete mode 100755 patches/gpgme-1.5.1/0001-Handle-modern-keyserver-output-which-may-emit-the-fi.patch
 delete mode 100755 patches/pinentry-0.8.4-beta8/0001-Set-some-accessibility-information.patch
 delete mode 100755 patches/pinentry-0.8.4-beta8/0002-Use-raiseWindow-also-for-confirm-dialogs.patch
 delete mode 100755 patches/pinentry-0.8.4-beta8/0003-Add-fallbacks-for-SetForegroundWindow.patch
 delete mode 100755 patches/pinentry-0.8.4-beta8/0004-Check-for-MOC-also-if-pinentry-qt-is-disabled.patch


hooks/post-receive
-- 
GnuPG for Windows
http://git.gnupg.org



More information about the Gpg4win-commits mailing list