* w32/resource.h, w32/pinentry-w32.rc, w32/main.c, w32/dialog.h
authorWerner Koch <wk@gnupg.org>
Wed, 22 Dec 2004 13:10:08 +0000 (13:10 +0000)
committerWerner Koch <wk@gnupg.org>
Wed, 22 Dec 2004 13:10:08 +0000 (13:10 +0000)
* w32/dialog.c, w32/controller.h, w32/controller.c
* w32/Makefile.am: New.  Based on Timo's work.

13 files changed:
ChangeLog
w32/Manifest [new file with mode: 0644]
w32/controller.c [new file with mode: 0755]
w32/controller.h [moved from w32/pinentrycontroller.h with 51% similarity, mode: 0755]
w32/dialog.c [new file with mode: 0755]
w32/dialog.h [new file with mode: 0755]
w32/main.c
w32/pinentry-w32.rc [new file with mode: 0755]
w32/pinentry_w32.rc [deleted file]
w32/pinentrycontroller.c [deleted file]
w32/pinentrydialog.c [deleted file]
w32/pinentrydialog.h [deleted file]
w32/resource.h

index 7df3bbb..f6d3fa9 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2004-12-22  Werner Koch  <wk@g10code.com>
 
+       * w32/resource.h, w32/pinentry-w32.rc, w32/main.c, w32/dialog.h
+       * w32/dialog.c, w32/controller.h, w32/controller.c
+       * w32/Makefile.am: New.  Based on Timo's work.
+
        Update to automake 1.9.
        
        * autogen.sh (configure_ac): Add --build-w32 option.
@@ -14,7 +18,6 @@
        (pinentry_loop) [DOSISH]: Don't do uid check.
 
        * secmem/util.c [DOSISH]: Disable UID stuff.
-
        
 2004-09-27  Marcus Brinkmann  <marcus@g10code.de>
 
diff --git a/w32/Manifest b/w32/Manifest
new file mode 100644 (file)
index 0000000..85ffc67
--- /dev/null
@@ -0,0 +1,2 @@
+Makefile.am
+$names$
diff --git a/w32/controller.c b/w32/controller.c
new file mode 100755 (executable)
index 0000000..5348a13
--- /dev/null
@@ -0,0 +1,357 @@
+/* controller.c - A W32 dialog for PIN entry.
+   Copyright (C) 2004 g10 Code GmbH
+   
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+   02111-1307, USA  */
+
+#include <config.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <windows.h>
+
+#include "controller.h"
+#include "dialog.h"
+
+
+#define xtoi_1(p)   (*(p) <= '9'? (*(p)- '0'): \
+                     *(p) <= 'F'? (*(p)-'A'+10):(*(p)-'a'+10))
+#define xtoi_2(p)   ((xtoi_1(p) * 16) + xtoi_1((p)+1))
+
+static void
+strcpy_escaped (char *d, const char *s)
+{
+  while (*s)
+    {
+      if (*s == '%' && s[1] && s[2])
+       {
+         s++;
+         *d++ = xtoi_2 (s);
+         s += 2;
+       }
+      else
+       *d++ = *s++;
+    }
+  *d = 0;
+}
+
+
+int
+pinentry_controller_new (struct pinentry_controller_s **ctx)
+{
+  struct pinentry_controller_s *c;
+  int rc;
+  int fds[2];
+
+  c = calloc (1, sizeof *c);
+  if (!c)
+    exit (1);
+  fds[0] = 0;
+  fds[1] = 1;
+
+  assuan_set_malloc_hooks (malloc, realloc, free);
+  rc = assuan_init_pipe_server (&c->_ctx, fds);
+  if (rc)
+    exit (-1);
+  rc = pinentry_ctl_registcmds (c);
+  assuan_set_pointer (c->_ctx, c);
+  *ctx = c;
+  return 0;
+}
+
+
+
+void
+pinentry_controller_free (struct pinentry_controller_s *c)
+{
+  if (c->_desc)
+    free (c->_desc);
+  if (c->_error)
+    free (c->_error);
+  if (c->_desc)
+    free (c->_desc);
+  if (c->_prompt)
+    free (c->_prompt);
+  if (c->_ok)
+    free (c->_ok);
+  if (c->_cancel)
+    free (c->_cancel);
+  assuan_deinit_server (c->_ctx);
+}
+
+
+void
+pinentry_ctrl_exec (struct pinentry_controller_s *c)
+{
+  while (1)
+    {
+      assuan_error_t rc = assuan_accept (c->_ctx);
+      if (rc == -1)
+       {
+         fprintf (stderr, "Assuan terminated");
+         break;
+       }
+      else if (rc)
+       {
+         fprintf (stderr, "Assuan accept problem: %s", assuan_strerror (rc));
+         break;
+       }
+      rc = assuan_process (c->_ctx);
+      if (rc)
+       {
+         fprintf (stderr, "Assuan processing failed: %s",
+                  assuan_strerror (rc));
+         continue;
+       }
+    }
+}
+
+
+int
+pinentry_ctl_desc (ASSUAN_CONTEXT ctx, char *line)
+{
+  struct pinentry_controller_s *c;
+  char *newl;
+
+  c = (struct pinentry_controller_s *) assuan_get_pointer (ctx);
+  fprintf (stderr, "ctl_desc %s\n", line);
+
+  newl = malloc (strlen (line) + 1);
+  strcpy_escaped (newl, line);
+
+  c->_desc = strdup (newl);    /*UTF8 */
+  c->_error = NULL;
+
+  free (newl);
+  return 0;
+}
+
+
+int
+pinentry_ctl_prompt (ASSUAN_CONTEXT ctx, char *line)
+{
+  struct pinentry_controller_s *c;
+  char *newl;
+
+  c = (struct pinentry_controller_s *) assuan_get_pointer (ctx);
+
+  fprintf (stderr, "ctl_prompt %s\n", line);
+
+  newl = malloc (strlen (line) + 1);
+  strcpy_escaped (newl, line);
+
+  c->_prompt = strdup (newl);  /*UTF8 */
+  c->_error = NULL;
+
+  free (newl);
+  return 0;
+}
+
+
+int
+pinentry_ctl_error (ASSUAN_CONTEXT ctx, char *line)
+{
+  struct pinentry_controller_s *c;
+  char *newl;
+
+  c = (struct pinentry_controller_s *) assuan_get_pointer (ctx);
+
+  fprintf (stderr, "error %s", line);
+
+  newl = malloc (strlen (line) + 1);
+  strcpy_escaped (newl, line);
+
+  c->_error = strdup (newl);   /* UTF8 */
+
+  free (newl);
+  return 0;
+}
+
+int
+pinentry_ctl_ok (ASSUAN_CONTEXT ctx, char *line)
+{
+  struct pinentry_controller_s *c;
+  char *newl;
+
+  c = (struct pinentry_controller_s *) assuan_get_pointer (ctx);
+
+  fprintf (stderr, "OK %s\n", line);
+
+  newl = malloc (strlen (line) + 1);
+  strcpy_escaped (newl, line);
+
+  c->_ok = strdup (line);
+
+  free (newl);
+  return 0;
+}
+
+int
+pinentry_ctl_cancel (ASSUAN_CONTEXT ctx, char *line)
+{
+  struct pinentry_controller_s *c;
+  char *newl;
+
+  c = (struct pinentry_controller_s *) assuan_get_pointer (ctx);
+
+  fprintf (stderr, "cancel %s\n", line);
+
+  newl = malloc (strlen (line) + 1);
+  strcpy_escaped (newl, line);
+
+  c->_cancel = strdup (line);
+
+  free (newl);
+  return 0;
+}
+
+
+int
+_pinentry_ctl_getpin (struct pinentry_controller_s *c, char *line)
+{
+  int ret;
+  FILE *fp;
+
+  if (c->_pinentry == NULL)
+    c->_pinentry = pinentry_new (NULL);
+
+  pinentry_set_prompt (c->_pinentry, c->_prompt);
+  pinentry_set_description (c->_pinentry, c->_desc);
+  pinentry_set_text (c->_pinentry, NULL);
+  if (c->_ok)
+    pinentry_set_ok_text (c->_pinentry, c->_ok);
+  if (c->_cancel)
+    pinentry_set_cancel_text (c->_pinentry, c->_cancel);
+  if (c->_error)
+    pinentry_set_error (c->_pinentry, c->_error);
+
+  ret = pinentry_exec (c->_pinentry);
+  fp = NULL; /* We can't use that: assuan_get_data_fp (c->_ctx); */
+  if (ret)
+    {
+      char *p;
+      p = (char *) pinentry_text (c->_pinentry);
+      fputs (p /*UTF8 */ , fp);
+      return 0;
+    }
+  else
+    {
+      assuan_set_error (c->_ctx, ASSUAN_Canceled, "Dialog cancelled by user");
+      return ASSUAN_Canceled;
+    }
+}
+
+
+int
+pinentry_ctl_getpin (ASSUAN_CONTEXT ctx, char *line)
+{
+  struct pinentry_controller_s *c;
+
+  c = (struct pinentry_controller_s *) assuan_get_pointer (ctx);
+
+  fprintf (stderr, "getpin %s\n", line);
+  return _pinentry_ctl_getpin (c, line);
+}
+
+
+int
+_pinentry_ctl_confirm (struct pinentry_controller_s *c, char *line)
+{
+  int ret;
+  FILE *fp;
+
+  if (c->_error)
+    ret = MessageBox (NULL, c->_error, "Error", MB_YESNO | MB_ICONERROR);
+  else
+    ret =
+      MessageBox (NULL, c->_desc, "Information",
+                 MB_YESNO | MB_ICONINFORMATION);
+  fp = NULL; /* We can't use that: assuan_get_data_fp (c->_ctx); */
+  if (ret == IDYES)
+    {
+      //fputs( "YES", fp );    
+      return ASSUAN_No_Error;
+    }
+  else
+    {
+      //fputs( "NO", fp );
+      return ASSUAN_Not_Confirmed;
+    }
+}
+
+
+int
+pinentry_ctl_confirm (ASSUAN_CONTEXT ctx, char *line)
+{
+  struct pinentry_controller_s *c;
+
+  c = (struct pinentry_controller_s *) assuan_get_pointer (ctx);
+
+  fprintf (stderr, "confirm %s\n", line);
+
+  return _pinentry_ctl_confirm (c, line);
+}
+
+
+
+int
+pinentry_ctl_opthandler (ASSUAN_CONTEXT ctx, const char *key,
+                        const char *value)
+{
+  struct pinentry_controller_s *c;
+
+  c = (struct pinentry_controller_s *) assuan_get_pointer (ctx);
+
+  /* FIXME: For now we simply ignore all options.  This module should
+     be converted to make use of the pinentry framework. */
+  return 0;
+}
+
+int
+pinentry_ctl_registcmds (struct pinentry_controller_s *c)
+{
+  static struct
+  {
+    const char *name;
+    int (*handler) (ASSUAN_CONTEXT, char *line);
+  } table[] =
+  {
+    {
+    "SETDESC", pinentry_ctl_desc},
+    {
+    "SETPROMPT", pinentry_ctl_prompt},
+    {
+    "SETERROR", pinentry_ctl_error},
+    {
+    "SETOK", pinentry_ctl_ok},
+    {"SETCANCEL", pinentry_ctl_cancel},
+    {
+    "GETPIN", pinentry_ctl_getpin},
+    {
+    "CONFIRM", pinentry_ctl_confirm},
+    {
+    0, 0}
+  };
+  int i, rc;
+
+  for (i = 0; table[i].name; i++)
+    {
+      rc = assuan_register_command (c->_ctx, 0, table[i].name, table[i].handler);
+      if (rc)
+       return rc;
+    }
+  assuan_register_option_handler (c->_ctx, pinentry_ctl_opthandler);
+  return 0;
+}
old mode 100644 (file)
new mode 100755 (executable)
similarity index 51%
rename from w32/pinentrycontroller.h
rename to w32/controller.h
index ab40dbd..40394be
@@ -1,6 +1,5 @@
-/* pinentrycontroller.h - A secure KDE dialog for PIN entry.
-   Copyright (C) 2002 Klarälvdalens Datakonsult AB
-   Written by Steffen Hansen <steffen@klaralvdalens-datakonsult.se>.
+/* controller.h - A W32 dialog for PIN entry.
+   Copyright (C) 2004 g10 Code GmbH
    
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
    02111-1307, USA  */
 
-#ifndef __PINENTRYCONTROLLER_H__
-#define __PINENTRYCONTROLLER_H__
+#ifndef W32_CONTROLLER_H
+#define W32_CONTROLLER_H
 
+#include "assuan.h"
 
-#include <assuan.h>
 
-
-struct pinentry_controller_s {
-    ASSUAN_CONTEXT _ctx;
-    char * _desc;
-    char * _error;
-    char * _prompt;
-    char * _ok;
-    char * _cancel;
-    struct w32_pinentry_s *_pinentry;
+struct pinentry_controller_s
+{
+  ASSUAN_CONTEXT _ctx;
+  char *_desc;
+  char *_error;
+  char *_prompt;
+  char *_ok;
+  char *_cancel;
+  struct w32_pinentry_s *_pinentry;
 };
 
 
-int  pinentry_ctl_registcmds (struct pinentry_controller_s * c);
-void pinentry_controller_free (struct pinentry_controller_s * c);
-void pinentry_ctrl_exec (struct pinentry_controller_s * c);
+int pinentry_ctl_registcmds (struct pinentry_controller_s *c);
+void pinentry_controller_free (struct pinentry_controller_s *c);
+void pinentry_ctrl_exec (struct pinentry_controller_s *c);
 
-#endif // __PINENTRYCONTROLLER_H__
+#endif /*W32_CONTROLLER_H*/
diff --git a/w32/dialog.c b/w32/dialog.c
new file mode 100755 (executable)
index 0000000..28e415d
--- /dev/null
@@ -0,0 +1,173 @@
+/* dialog.c - A W32 dialog for PIN entry.
+   Copyright (C) 2004 g10 Code GmbH
+   
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+   02111-1307, USA  */
+
+#include <config.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <windows.h>
+
+#include "resource.h"
+#include "dialog.h"
+
+BOOL CALLBACK
+pinentry_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
+{
+  static struct w32_pinentry_s *ctx;
+
+  switch (msg)
+    {
+    case WM_INITDIALOG:
+      ctx = (struct w32_pinentry_s *) lparam;
+      ctx->dlg = dlg;
+      SetForegroundWindow (dlg);
+      break;
+
+    case WM_COMMAND:
+      switch (LOWORD (wparam))
+       {
+       case IDOK:
+         EndDialog (dlg, TRUE);
+         break;
+
+       case IDCANCEL:
+         EndDialog (dlg, FALSE);
+         break;
+       }
+      break;
+    }
+  return FALSE;
+}
+
+
+struct w32_pinentry_s *
+pinentry_new (HINSTANCE h)
+{
+  struct w32_pinentry_s *c;
+
+  c = calloc (1, sizeof *c);
+  if (!c)
+    return NULL;
+  DialogBoxParam (h, (LPCTSTR) IDD_PINENT, GetDesktopWindow (),
+                 pinentry_dlg_proc, (LONG) c);
+  return c;
+}
+
+
+int
+pinentry_exec (struct w32_pinentry_s *c)
+{
+  ShowWindow (c->dlg, TRUE);
+  return TRUE;
+}
+
+
+void
+pinentry_set_description (struct w32_pinentry_s *ctx, const char *s)
+{
+  if (!s)
+    SetDlgItemText (ctx->dlg, IDC_PINENT_DESC, "");
+  else
+    SetDlgItemText (ctx->dlg, IDC_PINENT_DESC, s);
+  SetDlgItemText (ctx->dlg, IDC_PINENT_ERR, "");
+}
+
+
+const char *
+pinentry_description (struct w32_pinentry_s *ctx)
+{
+  static char buf[256];
+  GetDlgItemText (ctx->dlg, IDC_PINENT_DESC, buf, 256);
+  return buf;
+}
+
+
+void
+pinentry_set_error (struct w32_pinentry_s *ctx, const char *s)
+{
+  if (!s)
+    SetDlgItemText (ctx->dlg, IDC_PINENT_ERR, "");
+  else
+    SetDlgItemText (ctx->dlg, IDC_PINENT_ERR, s);
+}
+
+
+const char *
+pinentry_error (struct w32_pinentry_s *ctx)
+{
+  static char buf[256];
+  GetDlgItemText (ctx->dlg, IDC_PINENT_ERR, buf, 256);
+  return buf;
+}
+
+
+void
+pinentry_set_text (struct w32_pinentry_s *ctx, const char *s)
+{
+  if (!s)
+    SetDlgItemText (ctx->dlg, IDC_PINENT_TEXT, "");
+  else
+    SetDlgItemText (ctx->dlg, IDC_PINENT_TEXT, s);
+}
+
+
+const char *
+pinentry_text (struct w32_pinentry_s *ctx)
+{
+  static char buf[256];
+  GetDlgItemText (ctx->dlg, IDC_PINENT_TEXT, buf, 256);
+  return buf;
+}
+
+
+void
+pinentry_set_prompt (struct w32_pinentry_s *ctx, const char *s)
+{
+  if (!s)
+    SetDlgItemText (ctx->dlg, IDC_PINENT_PROMPT, "");
+  else
+    SetDlgItemText (ctx->dlg, IDC_PINENT_PROMPT, s);
+}
+
+
+
+const char *
+pinentry_prompt (struct w32_pinentry_s *ctx)
+{
+  static char buf[256];
+  GetDlgItemText (ctx->dlg, IDC_PINENT_PROMPT, buf, 256);
+  return buf;
+}
+
+
+void
+pinentry_set_ok_text (struct w32_pinentry_s *ctx, const char *s)
+{
+  if (!s)
+    SetDlgItemText (ctx->dlg, IDOK, "OK");
+  else
+    SetDlgItemText (ctx->dlg, IDOK, s);
+}
+
+void
+pinentry_set_cancel_text (struct w32_pinentry_s *ctx, const char *s)
+{
+  if (!s)
+    SetDlgItemText (ctx->dlg, IDCANCEL, "Cancel");
+  else
+    SetDlgItemText (ctx->dlg, IDCANCEL, s);
+}
diff --git a/w32/dialog.h b/w32/dialog.h
new file mode 100755 (executable)
index 0000000..b53f718
--- /dev/null
@@ -0,0 +1,43 @@
+/* dialog.h - A W32 dialog for PIN entry.
+   Copyright (C) 2004 g10 Code GmbH
+   
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+   02111-1307, USA  */
+
+#ifndef W32_DIALOG_H
+#define W32_DIALOG_H
+
+struct w32_pinentry_s
+{
+  HWND dlg;
+};
+
+
+BOOL CALLBACK pinentry_dlg_proc (HWND dlg, UINT msg, WPARAM wparam,
+                                LPARAM lparam);
+struct w32_pinentry_s *pinentry_new (HINSTANCE h);
+int pinentry_exec (struct w32_pinentry_s *c);
+void pinentry_set_description (struct w32_pinentry_s *ctx, const char *s);
+const char *pinentry_description (struct w32_pinentry_s *ctx);
+void pinentry_set_error (struct w32_pinentry_s *ctx, const char *s);
+const char *pinentry_error (struct w32_pinentry_s *ctx);
+void pinentry_set_text (struct w32_pinentry_s *ctx, const char *s);
+const char *pinentry_text (struct w32_pinentry_s *ctx);
+void pinentry_set_prompt (struct w32_pinentry_s *ctx, const char *s);
+const char *pinentry_prompt (struct w32_pinentry_s *ctx);
+void pinentry_set_ok_text (struct w32_pinentry_s *ctx, const char *s);
+void pinentry_set_cancel_text (struct w32_pinentry_s *ctx, const char *s);
+
+#endif /*W32_DIALOG_H*/
index 7d81da4..6540c51 100644 (file)
 #include <stdlib.h>
 #include <windows.h>
 
-#include "pinentrydialog.h"
-#include "pinentrycontroller.h"
+#include "dialog.h"
+#include "controller.h"
 
 
-int WINAPI
-WinMain (HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmdLine, int nShowCmd)
+/* int WINAPI */
+/* WinMain (HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmdLine, int nShowCmd) */
+int
+main ()
 {
-    struct pinentry_controller_s ctl;
+  struct pinentry_controller_s ctl;
 
-    pinentry_ctrl_exec (&ctl);
-    pinentry_controller_free (&ctl);
-    return TRUE;
+  fprintf (stderr, "enter main\n");
+  pinentry_ctrl_exec (&ctl);
+  fprintf (stderr, "debug 1\n");
+  pinentry_controller_free (&ctl);
+  fprintf (stderr, "leave main\n");
+  return 0;
 }
diff --git a/w32/pinentry-w32.rc b/w32/pinentry-w32.rc
new file mode 100755 (executable)
index 0000000..6fe9b1a
--- /dev/null
@@ -0,0 +1,41 @@
+/* dialog.rc - Resource definitions
+   Copyright (C) 2004 g10 Code GmbH
+   
+   This program is free software; you can redistribute it and/or
+   modify it under the terms of the GNU General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+   This program is distributed in the hope that it will be useful, but
+   WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   General Public License for more details.
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+   02111-1307, USA  */
+
+
+#include <winuser.h>
+#include "resource.h"
+
+/* 
+ * Main dialog 
+ */
+
+IDD_PINENT DIALOG DISCARDABLE  0, 0, 186, 95
+STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "Pinentry W32"
+FONT 8, "MS Sans Serif"
+BEGIN
+    LTEXT           "Description", IDC_PINENT_DESC, 6, 6, 152, 19
+    EDITTEXT        IDC_PINENT_TEXT, 71, 36, 107, 12, ES_PASSWORD | ES_AUTOHSCROLL
+    DEFPUSHBUTTON   "OK", IDOK, 77, 76, 50, 14
+    PUSHBUTTON      "&Cancel", IDCANCEL, 132, 76, 50, 14
+    LTEXT           "Error", IDC_PINENT_ERR, 2, 62, 180, 9
+    LTEXT           "Prompt", IDC_PINENT_PROMPT, 2, 37, 64, 12
+END
+
+
+
diff --git a/w32/pinentry_w32.rc b/w32/pinentry_w32.rc
deleted file mode 100644 (file)
index 2529082..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-//Microsoft Developer Studio generated resource script.
-//
-#include "resource.h"
-
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-#include "afxres.h"
-
-/////////////////////////////////////////////////////////////////////////////
-#undef APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-// Deutsch (Deutschland) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)
-#ifdef _WIN32
-LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
-#pragma code_page(1252)
-#endif //_WIN32
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Dialog
-//
-
-IDD_PINENT DIALOG DISCARDABLE  0, 0, 186, 95
-STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
-CAPTION "Pinentry W32"
-FONT 8, "MS Sans Serif"
-BEGIN
-    LTEXT           "Description",IDC_PINENT_DESC,6,6,152,19
-    EDITTEXT        IDC_PINENT_TEXT,71,36,107,12,ES_PASSWORD | 
-                    ES_AUTOHSCROLL
-    DEFPUSHBUTTON   "OK",IDOK,77,76,50,14
-    PUSHBUTTON      "&Cancel",IDCANCEL,132,76,50,14
-    LTEXT           "Error",IDC_PINENT_ERR,2,62,180,9
-    LTEXT           "Prompt",IDC_PINENT_PROMPT,2,37,64,12
-END
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// DESIGNINFO
-//
-
-#ifdef APSTUDIO_INVOKED
-GUIDELINES DESIGNINFO DISCARDABLE 
-BEGIN
-    IDD_PINENT, DIALOG
-    BEGIN
-        LEFTMARGIN, 2
-        RIGHTMARGIN, 182
-        TOPMARGIN, 1
-        BOTTOMMARGIN, 91
-    END
-END
-#endif    // APSTUDIO_INVOKED
-
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-
-1 TEXTINCLUDE DISCARDABLE 
-BEGIN
-    "resource.h\0"
-END
-
-2 TEXTINCLUDE DISCARDABLE 
-BEGIN
-    "#include ""afxres.h""\r\n"
-    "\0"
-END
-
-3 TEXTINCLUDE DISCARDABLE 
-BEGIN
-    "\r\n"
-    "\0"
-END
-
-#endif    // APSTUDIO_INVOKED
-
-#endif    // Deutsch (Deutschland) resources
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-#ifndef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 3 resource.
-//
-
-
-/////////////////////////////////////////////////////////////////////////////
-#endif    // not APSTUDIO_INVOKED
-
diff --git a/w32/pinentrycontroller.c b/w32/pinentrycontroller.c
deleted file mode 100644 (file)
index 068f013..0000000
+++ /dev/null
@@ -1,320 +0,0 @@
-/* pinentrycontroller.c - A W32 dialog for PIN entry.
-   Copyright (C) 2004 g10 Code GmbH
-   
-   This program is free software; you can redistribute it and/or
-   modify it under the terms of the GNU General Public License as
-   published by the Free Software Foundation; either version 2 of the
-   License, or (at your option) any later version.
-   This program is distributed in the hope that it will be useful, but
-   WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   General Public License for more details.
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-   02111-1307, USA  */
-
-#include <windows.h>
-#include <stdlib.h>
-
-#include "pinentrycontroller.h"
-#include "pinentrydialog.h"
-
-
-#define xtoi_1(p)   (*(p) <= '9'? (*(p)- '0'): \
-                     *(p) <= 'F'? (*(p)-'A'+10):(*(p)-'a'+10))
-#define xtoi_2(p)   ((xtoi_1(p) * 16) + xtoi_1((p)+1))
-
-static void 
-strcpy_escaped (char *d, const char *s)
-{
-    while (*s) {
-       if (*s == '%' && s[1] && s[2]) {
-           s++;
-           *d++ = xtoi_2 (s);
-           s += 2;
-       }
-       else        
-           *d++ = *s++;
-    }
-    *d = 0;
-}
-
-
-int
-pinentry_controller_new (struct pinentry_controller_s ** ctx)
-{
-    struct pinentry_controller_s * c;
-    int rc;
-    int fds[2];
-
-    c = calloc (1, sizeof *c);
-    if (!c)
-       exit (1);
-    fds[0] = 0;
-    fds[1] = 1;
-    
-    assuan_set_malloc_hooks (malloc, realloc, free);
-    rc = assuan_init_pipe_server (&c->_ctx, fds);
-    if (rc)
-       exit(-1);
-    rc = pinentry_ctl_registcmds (c);
-    assuan_set_pointer (c->_ctx, c);
-    *ctx = c;
-    return 0;
-}
-
-
-
-void
-pinentry_controller_free (struct pinentry_controller_s * c)
-{
-    if (c->_desc)
-       free (c->_desc);
-    if (c->_error)
-       free (c->_error);
-    if (c->_desc)
-       free (c->_desc);
-    if (c->_prompt)
-       free (c->_prompt);
-    if (c->_ok)
-       free (c->_ok);
-    if (c->_cancel)
-       free (c->_cancel);
-    assuan_deinit_server (c->_ctx);
-}
-
-
-void 
-pinentry_ctrl_exec (struct pinentry_controller_s * c)
-{  
-    while (1) {
-       assuan_error_t rc = assuan_accept (c->_ctx);
-       if (rc == -1) {
-           fprintf (stderr, "Assuan terminated");
-           break;
-       } else if (rc) {
-           fprintf (stderr, "Assuan accept problem: %s", assuan_strerror (rc));
-           break;
-       }
-       rc = assuan_process (c->_ctx);
-       if (rc) {
-           fprintf (stderr, "Assuan processing failed: %s", assuan_strerror (rc));
-           continue;
-       }
-    }
-}
-
-
-int 
-pinentry_ctl_desc (ASSUAN_CONTEXT ctx, char* line)
-{
-    struct pinentry_controller_s * c;
-    char* newl;
-
-    c = (struct pinentry_controller_s*)assuan_get_pointer(ctx);
-    fprintf (stderr, "ctl_desc %s\n", line);
-
-    newl = malloc (strlen (line) + 1);
-    strcpy_escaped (newl, line);
-
-    c->_desc = strdup (newl); /*UTF8*/
-    c->_error = NULL;
-
-    free (newl);
-    return 0;
-}
-
-
-int pinentry_ctl_prompt (ASSUAN_CONTEXT ctx, char* line)
-{
-    struct pinentry_controller_s * c;
-    char* newl;
-
-    c = (struct pinentry_controller_s*)assuan_get_pointer (ctx);
-
-    fprintf (stderr, "ctl_prompt %s\n", line);
-
-    newl = malloc (strlen (line) + 1);
-    strcpy_escaped (newl, line);
-
-    c->_prompt = strdup (newl); /*UTF8*/
-    c->_error = NULL;
-
-    free (newl);
-    return 0;
-}
-
-
-int pinentry_ctl_error (ASSUAN_CONTEXT ctx, char* line)
-{
-    struct pinentry_controller_s * c;
-    char* newl;
-
-    c = (struct pinentry_controller_s*)assuan_get_pointer(ctx);
-
-    fprintf (stderr, "error %s", line);    
-
-    newl = malloc (strlen (line) + 1);
-    strcpy_escaped (newl, line);
-
-    c->_error = strdup (newl); /* UTF8*/
-
-    free (newl);
-    return 0;
-}
-
-int pinentry_ctl_ok ( ASSUAN_CONTEXT ctx, char* line )
-{
-    struct pinentry_controller_s * c;
-    char* newl;
-
-    c = (struct pinentry_controller_s*)assuan_get_pointer(ctx);
-
-    fprintf (stderr, "OK %s\n", line);    
-
-    newl = malloc (strlen (line) + 1);
-    strcpy_escaped (newl, line);
-
-    c->_ok = strdup (line);
-
-    free (newl);
-    return 0;
-}
-
-int pinentry_ctl_cancel( ASSUAN_CONTEXT ctx, char* line )
-{
-    struct pinentry_controller_s * c;
-    char* newl;
-
-    c = (struct pinentry_controller_s*)assuan_get_pointer(ctx);
-
-    fprintf (stderr, "cancel %s\n", line);
-
-    newl = malloc (strlen (line) + 1);
-    strcpy_escaped (newl, line);
-
-    c->_cancel = strdup (line);
-
-    free (newl);
-    return 0;
-}
-
-
-int 
-_pinentry_ctl_getpin (struct pinentry_controller_s * c, char* line ) 
-{
-    int ret;
-    FILE* fp;
-
-    if (c->_pinentry == NULL)
-        c->_pinentry = pinentry_new (NULL);
-    
-    pinentry_set_prompt (c->_pinentry, c->_prompt);
-    pinentry_set_description (c->_pinentry, c->_desc);
-    pinentry_set_text (c->_pinentry, NULL);
-    if (c->_ok) 
-       pinentry_set_ok_text (c->_pinentry, c->_ok);
-    if (c->_cancel)
-       pinentry_set_cancel_text (c->_pinentry, c->_cancel);
-    if (c->_error)
-       pinentry_set_error (c->_pinentry, c->_error);
-    
-    ret = pinentry_exec (c->_pinentry);
-    fp = assuan_get_data_fp (c->_ctx);
-    if (ret) {
-       char * p;
-       p = (char*)pinentry_text (c->_pinentry);
-       fputs (p /*UTF8*/, fp);
-       return 0;
-    } else {
-       assuan_set_error (c->_ctx, ASSUAN_Canceled, "Dialog cancelled by user");
-       return ASSUAN_Canceled;
-    }
-}
-
-
-int pinentry_ctl_getpin( ASSUAN_CONTEXT ctx, char* line )
-{
-    struct pinentry_controller_s * c;
-
-    c = (struct pinentry_controller_s*)assuan_get_pointer(ctx);
-
-    fprintf (stderr, "getpin %s\n", line); 
-    return _pinentry_ctl_getpin (c, line); 
-}
-
-
-int _pinentry_ctl_confirm (struct pinentry_controller_s *c, char* line)
-{
-    int ret;
-    FILE* fp;
-
-    if (c->_error)
-       ret = MessageBox (NULL, c->_error, "Error", MB_YESNO|MB_ICONERROR);
-    else
-       ret = MessageBox (NULL, c->_desc, "Information", MB_YESNO|MB_ICONINFORMATION);  
-    fp = assuan_get_data_fp (c->_ctx);
-    if (ret == IDYES) {
-       //fputs( "YES", fp );    
-       return ASSUAN_No_Error;
-    } else {
-       //fputs( "NO", fp );
-       return ASSUAN_Not_Confirmed;
-    }
-}
-
-
-int pinentry_ctl_confirm (ASSUAN_CONTEXT ctx, char* line)
-{
-    struct pinentry_controller_s * c;
-
-    c = (struct pinentry_controller_s*)assuan_get_pointer (ctx);
-
-    fprintf (stderr, "confirm %s\n", line);
-    
-    return _pinentry_ctl_confirm (c, line);
-}
-
-
-
-int
-pinentry_ctl_opthandler (ASSUAN_CONTEXT ctx, const char* key, const char* value)
-{
-    struct pinentry_controller_s * c;
-    
-    c = (struct pinentry_controller_s*)assuan_get_pointer(ctx);
-
-    /* FIXME: For now we simply ignore all options.  This module should
-        be converted to make use of the pinentry framework. */
-    return 0;
-}
-
-int 
-pinentry_ctl_registcmds (struct pinentry_controller_s * c)
-{
-    static struct {
-       const char *name;
-       int (*handler)(ASSUAN_CONTEXT, char *line);
-    } table[] = {
-       {"SETDESC",      pinentry_ctl_desc},
-       {"SETPROMPT",    pinentry_ctl_prompt},
-       {"SETERROR",     pinentry_ctl_error},
-       {"SETOK",        pinentry_ctl_ok},
-       {"SETCANCEL",    pinentry_ctl_cancel},
-       {"GETPIN",       pinentry_ctl_getpin},
-       {"CONFIRM",      pinentry_ctl_confirm},
-       {0,0 }
-    };
-    int i, rc;
-  
-    for (i=0; table[i].name; i++) {
-       rc = assuan_register_command (c->_ctx, table[i].name, table[i].handler);
-       if (rc) 
-           return rc;
-    }
-    assuan_register_option_handler (c->_ctx, pinentry_ctl_opthandler);
-    return 0;
-}
diff --git a/w32/pinentrydialog.c b/w32/pinentrydialog.c
deleted file mode 100644 (file)
index bc8a140..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-/* pinentrydialog.c - A W32 dialog for PIN entry.
-   Copyright (C) 2004 g10 Code GmbH
-   
-   This program is free software; you can redistribute it and/or
-   modify it under the terms of the GNU General Public License as
-   published by the Free Software Foundation; either version 2 of the
-   License, or (at your option) any later version.
-   This program is distributed in the hope that it will be useful, but
-   WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   General Public License for more details.
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-   02111-1307, USA  */
-
-#include <windows.h>
-#include "resource.h"
-
-#include "pinentrydialog.h"
-
-BOOL CALLBACK
-pinentry_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
-{
-    static struct w32_pinentry_s * ctx;
-
-    switch (msg) {
-    case WM_INITDIALOG:
-       ctx = (struct w32_pinentry_s *)lparam;
-       ctx->dlg = dlg;
-       SetForegroundWindow (dlg);
-       break;
-
-    case WM_COMMAND:
-       switch (LOWORD (wparam)) {
-       case IDOK:
-           EndDialog (dlg, TRUE);
-           break;
-
-       case IDCANCEL:
-           EndDialog (dlg, FALSE);
-           break;
-       }
-       break;
-    }
-    return FALSE;
-}
-
-
-struct w32_pinentry_s *
-pinentry_new (HINSTANCE h)
-{
-    struct w32_pinentry_s *c;
-
-    c = calloc (1, sizeof *c);
-    if (!c)
-       return NULL;
-    DialogBoxParam (h, (LPCTSTR)IDD_PINENT, GetDesktopWindow (),
-                   pinentry_dlg_proc, (LONG)c);
-    return c;
-}
-
-
-int
-pinentry_exec (struct w32_pinentry_s * c)
-{
-    ShowWindow (c->dlg, TRUE);
-    return TRUE;
-}
-
-
-void
-pinentry_set_description (struct w32_pinentry_s *ctx, const char * s)
-{ 
-    if (!s)
-       SetDlgItemText (ctx->dlg, IDC_PINENT_DESC, "");
-    else
-       SetDlgItemText (ctx->dlg, IDC_PINENT_DESC, s);
-    SetDlgItemText (ctx->dlg, IDC_PINENT_ERR, "");
-}
-
-
-const char *
-pinentry_description (struct w32_pinentry_s *ctx)
-{
-    static char buf[256];
-    GetDlgItemText (ctx->dlg, IDC_PINENT_DESC, buf, 256);
-    return buf;
-}
-
-
-void
-pinentry_set_error (struct w32_pinentry_s *ctx, const char * s)
-{
-    if (!s)
-       SetDlgItemText (ctx->dlg, IDC_PINENT_ERR, "");
-    else
-       SetDlgItemText (ctx->dlg, IDC_PINENT_ERR, s);
-}
-
-
-const char *
-pinentry_error (struct w32_pinentry_s * ctx)
-{
-    static char buf[256];
-    GetDlgItemText (ctx->dlg, IDC_PINENT_ERR, buf, 256);
-    return buf;
-}
-
-
-void
-pinentry_set_text (struct w32_pinentry_s * ctx, const char * s)
-{
-    if (!s)
-       SetDlgItemText (ctx->dlg, IDC_PINENT_TEXT, "");
-    else
-       SetDlgItemText (ctx->dlg, IDC_PINENT_TEXT, s);
-}
-
-
-const char *
-pinentry_text (struct w32_pinentry_s * ctx)
-{
-    static char buf[256];
-    GetDlgItemText (ctx->dlg, IDC_PINENT_TEXT, buf, 256);
-    return buf;
-}
-
-
-void
-pinentry_set_prompt (struct w32_pinentry_s * ctx, const char * s)
-{
-    if (!s)
-       SetDlgItemText (ctx->dlg, IDC_PINENT_PROMPT, "");
-    else
-       SetDlgItemText (ctx->dlg, IDC_PINENT_PROMPT, s);
-}
-
-
-
-const char *
-pinentry_prompt (struct w32_pinentry_s * ctx)
-{
-    static char buf[256];
-    GetDlgItemText (ctx->dlg, IDC_PINENT_PROMPT, buf, 256);
-    return buf;
-}
-
-
-void 
-pinentry_set_ok_text (struct w32_pinentry_s * ctx, const char * s)
-{
-    if (!s)
-       SetDlgItemText (ctx->dlg, IDOK, "OK");
-    else
-       SetDlgItemText (ctx->dlg, IDOK, s);
-}
-
-void 
-pinentry_set_cancel_text (struct w32_pinentry_s * ctx, const char * s)
-{
-    if (!s)
-       SetDlgItemText (ctx->dlg, IDCANCEL, "Cancel");
-    else
-       SetDlgItemText (ctx->dlg, IDCANCEL, s);
-}
diff --git a/w32/pinentrydialog.h b/w32/pinentrydialog.h
deleted file mode 100644 (file)
index 2b159cc..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/* pinentrydialog.cpp - A W32 dialog for PIN entry.
-   Copyright (C) 2004 g10 Code GmbH
-   
-   This program is free software; you can redistribute it and/or
-   modify it under the terms of the GNU General Public License as
-   published by the Free Software Foundation; either version 2 of the
-   License, or (at your option) any later version.
-   This program is distributed in the hope that it will be useful, but
-   WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   General Public License for more details.
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-   02111-1307, USA  */
-
-#ifndef __PINENTRYDIALOG_H__
-#define __PINENTRYDIALOG_H__
-
-struct w32_pinentry_s {
-    HWND   dlg;
-};
-
-
-BOOL CALLBACK  pinentry_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam);
-struct w32_pinentry_s * pinentry_new (HINSTANCE h);
-int pinentry_exec (struct w32_pinentry_s * c);
-void pinentry_set_description (struct w32_pinentry_s *ctx, const char * s);
-const char * pinentry_description (struct w32_pinentry_s *ctx);
-void pinentry_set_error (struct w32_pinentry_s *ctx, const char * s);
-const char * pinentry_error (struct w32_pinentry_s * ctx);
-void pinentry_set_text (struct w32_pinentry_s * ctx, const char * s);
-const char * pinentry_text (struct w32_pinentry_s * ctx);
-void pinentry_set_prompt (struct w32_pinentry_s * ctx, const char * s);
-const char * pinentry_prompt (struct w32_pinentry_s * ctx);
-void  pinentry_set_ok_text (struct w32_pinentry_s * ctx, const char * s);
-void  pinentry_set_cancel_text (struct w32_pinentry_s * ctx, const char * s);
-
-#endif // __PINENTRYDIALOG_H__
index 86c9585..b5b77ae 100644 (file)
@@ -1,20 +1,17 @@
-//{{NO_DEPENDENCIES}}
-// Microsoft Developer Studio generated include file.
-// Used by pinentry_w32.rc
-//
+/* resource.h 
+ *       Copyright 2004 g10 Code GmbH
+ *              
+ * This file is free software; as a special exception the author gives
+ * unlimited permission to copy and/or distribute it, with or without
+ * modifications, as long as this notice is preserved.
+ *
+ * This file is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
+ * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
 #define IDD_PINENT                      101
 #define IDC_PINENT_TEXT                 292
 #define IDC_PINENT_DESC                 1000
 #define IDC_PINENT_ERR                  1001
 #define IDC_PINENT_PROMPT               1002
-
-// Next default values for new objects
-// 
-#ifdef APSTUDIO_INVOKED
-#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE        102
-#define _APS_NEXT_COMMAND_VALUE         40001
-#define _APS_NEXT_CONTROL_VALUE         1003
-#define _APS_NEXT_SYMED_VALUE           101
-#endif
-#endif