--- dialog.c.ORIG	2010-06-11 11:08:56.000000000 +0200
+++ dialog.c	2011-03-17 12:55:23.427724957 +0100
@@ -27,15 +27,15 @@
 #include <stdlib.h>
 #include <glib.h>
 #include <locale.h>
-#include "../../config.h"
+//#include "../../config.h"
 #include "../common/i18n.h"
 
 int ask_user_auth()
 {
-  int r;
+  gpg_error_t r;
   const char *argv[3];
   const char *pgmname = PIN_ENTRY; 
-  ASSUAN_CONTEXT ctx;
+  assuan_context_t ctx;
   gchar buf[500];
   gsize buflen = sizeof(buf);
   gchar *buf_conv_ptr = NULL;
@@ -53,10 +53,19 @@
   argv[0] = pgmname;
   argv[1] = NULL;
 	
-  r = assuan_pipe_connect(&ctx, pgmname, (char **) argv, 0);
+  assuan_set_gpg_err_source (GPG_ERR_SOURCE_DEFAULT);
+
+  r = assuan_new(&ctx);
+  if (r) {
+      printf("Can't initialize assuan context: %s\n)",
+          gpg_strerror(r));
+      goto err;
+  }
+   
+  r = assuan_pipe_connect(ctx, pgmname, (const char **) argv, NULL, NULL, NULL, 0);
   if (r) {
     printf(i18n("Can't connect to the PIN entry module: %s\n"),
-	   assuan_strerror((AssuanError) r));
+	   gpg_strerror(r));
     goto err;
   }
 	
@@ -72,26 +81,26 @@
 
   r = assuan_transact(ctx, buf_conv_ptr, NULL, NULL, NULL, NULL, NULL, NULL);
   if (r) {
-    printf("SETDESC: %s\n", assuan_strerror((AssuanError) r));
+    printf("SETDESC: %s\n", gpg_strerror(r));
     goto err;
   }
   while (1) {
     r = assuan_transact(ctx, "CONFIRM", NULL, NULL, NULL, NULL, NULL, NULL);
-    if (r == ASSUAN_Canceled) {
-      assuan_disconnect(ctx);
+    if (gpg_err_code(r) == GPG_ERR_ASS_CANCELED) {
+      assuan_release(ctx);
       return -2;
     }
     if (r) {
-      printf("SETERROR: %s\n", assuan_strerror((AssuanError) r));
+      printf("SETERROR: %s\n", gpg_err_code(r));
       goto err;
     }
     if (r == 0)
       break;
   }
 
-  assuan_disconnect(ctx);	
+  assuan_release(ctx);	
   return 0;
  err:	
-  assuan_disconnect(ctx);
+  assuan_release(ctx);
   return -1;
 }

