[git] Poldi - branch, master, updated. release-0.4.1-35-gb428097

by NIIBE Yutaka cvs at cvs.gnupg.org
Fri Nov 4 08:50:05 CET 2016


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 "PAM for the OpenPGP card".

The branch, master has been updated
       via  b4280978f83971103bf54470d7084e98d125aca2 (commit)
       via  88e2fe393b465d6ac3def5c786608f98bd53fae7 (commit)
       via  a9763b5f203ab5ebd09a87d8d251bc00eb25ed4c (commit)
      from  ee253ccb14aa1edb15fc19306d13c226900d2800 (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 b4280978f83971103bf54470d7084e98d125aca2
Author: NIIBE Yutaka <gniibe at fsij.org>
Date:   Fri Nov 4 16:46:11 2016 +0900

    Only support forking off scdaemon.
    
    * src/scd/scd.c (scd_serialno_internal): Cleanup API with no AGENT.
    (agent_connect_from_infostr): Remove.
    (agent_scd_getinfo_socket_name): Remove.
    (get_scd_socket_from_agent): Remove.
    (scd_connect): Change API to only support forking off scdaemon.
    * src/pam/pam_poldi.c (pam_sm_authenticate): Follow the change of API.
    
    --
    Signed-off-by: NIIBE Yutaka <gniibe at fsij.org>

diff --git a/src/pam/pam_poldi.c b/src/pam/pam_poldi.c
index 0448819..6ed3cc4 100644
--- a/src/pam/pam_poldi.c
+++ b/src/pam/pam_poldi.c
@@ -549,10 +549,8 @@ pam_sm_authenticate (pam_handle_t *pam_handle,
 
   /*** Connect to Scdaemon. ***/
 
-  err = scd_connect (&scd_ctx,
-		     NULL, getenv ("GPG_AGENT_INFO"),
-		     ctx->scdaemon_program, ctx->scdaemon_options,
-		     0, ctx->loghandle);
+  err = scd_connect (&scd_ctx, ctx->scdaemon_program, ctx->scdaemon_options,
+		     ctx->loghandle);
   if (err)
     goto out;
 
diff --git a/src/scd/scd.c b/src/scd/scd.c
index 52a64f4..9f60026 100644
--- a/src/scd/scd.c
+++ b/src/scd/scd.c
@@ -91,155 +91,9 @@ static assuan_error_t membuf_data_cb (void *opaque,
 

 
 static gpg_error_t scd_serialno_internal (assuan_context_t ctx,
-					  int agent, char **r_serialno);
+					  char **r_serialno);
 
 

-
-/* Helper function for get_scd_socket_from_agent(), which is used by
-   scd_connect().
-
-   Try to connect to gpg-agent, which is to be found through the
-   info-string contained in AGENT_INFOSTR.  On success, *AGENT_CTX is
-   filled with an assuan context.  Return proper error code or zero on
-   success. */
-static int
-agent_connect_from_infostr (const char *agent_infostr,
-			    assuan_context_t *agent_ctx,
-			    log_handle_t loghandle)
-{
-  char *infostr;
-  int prot;
-  int pid;
-  int rc;
-  char *p;
-
-  *agent_ctx = NULL;
-  rc = 0;
-
-  infostr = xtrystrdup (agent_infostr);
-  if (!infostr)
-    {
-      rc = gpg_error_from_syserror ();
-      log_msg_error (loghandle,
-		     _("failed to duplicate %s: %s"),
-		     "agent infostring", gpg_strerror (rc));
-      goto out;
-    }
-
-  p = strchr (infostr, ':');
-  if (!p || p == infostr)
-    {
-      log_msg_info (loghandle,
-		    _("malformed GPG_AGENT_INFO environment variable"));
-      /* FIXME: what error code is more appropriate here?  -mo */
-      rc = gpg_error (GPG_ERR_ASS_CONNECT_FAILED);
-      goto out;
-    }
-  *p++ = 0;
-  pid = atoi (p);
-  while (*p && *p != ':')
-    p++;
-  prot = *p? atoi (p+1) : 0;
-  if (prot != 1)
-    {
-      log_msg_error (loghandle,
-		     _("agent protocol version %d is not supported"),
-		     prot);
-      /* FIXME: what error code is more appropriate here?  -mo */
-      rc = gpg_error (GPG_ERR_ASS_CONNECT_FAILED);
-      goto out;
-    
-    }
-
-  /* Connect!  */
-  rc = assuan_socket_connect (agent_ctx, infostr, pid);
-
- out:
-
-  xfree (infostr);
-
-  return rc;
-}
-
-/* Helper function for get_scd_socket_from_agent(), which is used by
-   scd_connect().
-
-   Try to retrieve the SCDaemons socket naem from the gpg-agent
-   context CTX.  On success, *SOCKET_NAME is filled with a copy ot the
-   socket name.  Return proper error code or zero on success. */
-static int
-agent_scd_getinfo_socket_name (assuan_context_t ctx, char **socket_name,
-			       log_handle_t loghandle)
-{
-  unsigned char *databuf;
-  size_t datalen;
-  membuf_t data;
-  char *res;
-  int rc;
-
-  init_membuf (&data, 256);
-  *socket_name = NULL;
-  res = NULL;
-  rc = 0;
-
-  rc = assuan_transact (ctx, "SCD GETINFO socket_name", membuf_data_cb, &data,
-			NULL, NULL, NULL, NULL);
-  if (rc)
-    goto out;
-
-  databuf = get_membuf (&data, &datalen);
-  if (databuf && datalen)
-    {
-      res = xtrymalloc (datalen + 1);
-      if (!res)
-	{
-	  log_msg_error (loghandle,
-			 _("warning: can't store getinfo data: %s"),
-			 strerror (errno));
-	}
-      else
-	{
-	  memcpy (res, databuf, datalen);
-	  res[datalen] = 0;
-	  *socket_name = res;
-	}
-    }
-
- out:
-
-  xfree (get_membuf (&data, &datalen));
-
-  return rc;
-}
-
-/* Retrieve SCDaemons socket name through a running gpg-agent, which
-   is to be found through the info-string AGENT_INFOSTR.  On Success,
-   *SOCKET_NAME contains a copy of the socket name.  Returns proper
-   error code or zero on success.  */
-static int
-get_scd_socket_from_agent (const char *agent_infostr, char **socket_name,
-			   log_handle_t loghandle)
-{
-  assuan_context_t ctx;
-  int rc;
-
-  *socket_name = NULL;
-  ctx = NULL;
-  rc = 0;
-
-  rc = agent_connect_from_infostr (agent_infostr, &ctx, loghandle);
-  if (rc)
-    goto out;
-
-  rc = agent_scd_getinfo_socket_name (ctx, socket_name, loghandle);
-
- out:
-
-  assuan_disconnect (ctx);
-
-  return rc;
-}
-
 /* Send a RESTART to SCDaemon.  */
 static void
 restart_scd (scd_context_t ctx)
@@ -250,19 +104,11 @@ restart_scd (scd_context_t ctx)
 
 

 
-/* Try to connect to scdaemon.  We support three methods to access
-   scdaemon.  First: connect to a specified socket, second: connect to
-   a running gpg-agent, retrieve scdaemon socket name through the
-   agent and connect to that socket, third: fork of a new scdaemon.
-   Returns proper error code or zero on success.  */
+/* Fork off scdaemon and work by pipes.  Returns proper error code or
+   zero on success.  */
 gpg_error_t
-scd_connect (scd_context_t *scd_ctx,
-	     const char *scdaemon_socket,
-	     const char *agent_infostr,
-	     const char *scd_path,
-	     const char *scd_options,
-	     unsigned int flags,
-	     log_handle_t loghandle)
+scd_connect (scd_context_t *scd_ctx, const char *scd_path,
+	     const char *scd_options, log_handle_t loghandle)
 {
   assuan_context_t assuan_ctx;
   scd_context_t ctx;
@@ -280,60 +126,17 @@ scd_connect (scd_context_t *scd_ctx,
   ctx->assuan_ctx = NULL;
   ctx->flags = 0;
 
-#if 0
-  /* Scdaemon is not yet able to run as a system daemon, thus this
-     code is disabled. */
-
-  if (scdaemon_socket)
-    {
-      /* This has the highest priority; connect to system scdaemon. */
-
-      rc = assuan_socket_connect (&assuan_ctx, scdaemon_socket, 0);
-      if (!rc)
-	{
-	  log_msg_debug (loghandle,
-			 _("connected to system scdaemon through socket '%s'"),
-			 scdaemon_socket);
-	  goto out;
-	}
-    }
-#endif
-
-  if (agent_infostr && *agent_infostr)
-    {
-      /* Somehow connecting to a system scdaemon didn't work.  Try to
-	 retrieve a scdaemon socket name from gpg-agent. */
-
-      char *scd_socket;
-
-      rc = get_scd_socket_from_agent (agent_infostr, &scd_socket, loghandle);
-      if (!rc)
-	rc = assuan_socket_connect (&assuan_ctx, scd_socket, 0);
-
-      if (!rc)
-	log_msg_debug (loghandle,
-		       _("got scdaemon socket name from gpg-agent, "
-			 "connected to socket '%s'"), scd_socket);
-      
-      xfree (scd_socket);
-
-      if (!rc)
-	goto out;
-    }
-
   if (1)
     {
-      /* Neither of the above scdaemon connect methods worked,
-	 fallback: spawn a new scdaemon.  */
-
       const char *pgmname;
       const char *argv[5];
       int no_close_list[3];
       int i;
 
-      if (flags & SCD_FLAG_VERBOSE)
+#if 0
 	log_msg_debug (loghandle,
 		       _("no running scdaemon - starting one"));
+#endif
 
       if (fflush (NULL))
         {
@@ -376,7 +179,7 @@ scd_connect (scd_context_t *scd_ctx,
       no_close_list[i++] = fileno (stderr);
       no_close_list[i] = -1;
 
-      /* connect to the agent and perform initial handshaking */
+      /* connect to the scdaemon and perform initial handshaking */
       rc = assuan_pipe_connect (&assuan_ctx, scd_path, argv,
                                 no_close_list);
       if (!rc)
@@ -404,15 +207,16 @@ scd_connect (scd_context_t *scd_ctx,
     {
       /* FIXME: is this the best way?  -mo */
       //reset_scd (assuan_ctx);
-      scd_serialno_internal (assuan_ctx, 0, NULL);
+      scd_serialno_internal (assuan_ctx, NULL);
 
       ctx->assuan_ctx = assuan_ctx;
-      ctx->flags = flags;
+      ctx->flags = 0;
       ctx->loghandle = loghandle;
       *scd_ctx = ctx;
-      if (flags & SCD_FLAG_VERBOSE)
+#if 0
 	log_msg_debug (loghandle,
 		       _("connection to scdaemon established"));
+#endif
     }
 
   return rc;
@@ -642,7 +446,7 @@ get_serialno_cb (void *opaque, const char *line)
 }
 
 static gpg_error_t
-scd_serialno_internal (assuan_context_t ctx, int agent, char **r_serialno)
+scd_serialno_internal (assuan_context_t ctx, char **r_serialno)
 {
   char *serialno;
   int rc;
@@ -672,7 +476,7 @@ scd_serialno (scd_context_t ctx, char **r_serialno)
 {
   gpg_error_t err;
 
-  err = scd_serialno_internal (ctx->assuan_ctx, 0, r_serialno);
+  err = scd_serialno_internal (ctx->assuan_ctx, r_serialno);
 
   return err;
 }
diff --git a/src/scd/scd.h b/src/scd/scd.h
index 2df7ae7..25680f8 100644
--- a/src/scd/scd.h
+++ b/src/scd/scd.h
@@ -47,15 +47,10 @@ typedef struct scd_cardinfo scd_cardinfo_t;
 
 #define SCD_FLAG_VERBOSE (1 << 0)
 
-/* Try to connect to the agent via socket or fork it off and work by
-   pipes.  Returns proper error code or zero on success.  */
-gpg_error_t scd_connect (scd_context_t *scd_ctx,
-			 const char *scdaemon_socket,
-			 const char *agent_infostr,
-			 const char *scd_path,
-			 const char *scd_options,
-			 unsigned int flags,
-			 log_handle_t loghandle);
+/* Fork it off and work by pipes.  Returns proper error code or zero
+   on success.  */
+gpg_error_t scd_connect (scd_context_t *scd_ctx, const char *scd_path,
+			 const char *scd_options, log_handle_t loghandle);
 
 /* Disconnect from SCDaemon; destroy the context SCD_CTX.  */
 void scd_disconnect (scd_context_t scd_ctx);

commit 88e2fe393b465d6ac3def5c786608f98bd53fae7
Author: NIIBE Yutaka <gniibe at fsij.org>
Date:   Fri Nov 4 15:55:59 2016 +0900

    Modify document for removal of poldi-ctrl.
    
    --
    Signed-off-by: NIIBE Yutaka <gniibe at fsij.org>

diff --git a/conf/users.skel b/conf/users.skel
index 7ca3913..c2ba6f0 100644
--- a/conf/users.skel
+++ b/conf/users.skel
@@ -5,9 +5,9 @@
 #   Entries are of the form: "<SERIALNO><WHITESPACES><USERNAME>\n"
 #   (without quotation marks and without angle brackets.  Allowed
 #   whitespaces are spaces and tabs.  <SERIALNO> is the serial number
-#   of an OpenPGP smartcard as reported by poldi-ctrl
-#   --print-serialno.  <USERNAME> is a valid username on the system.
-#   Comments are opened with "#" and terminated by a newline.
+#   of an OpenPGP smartcard.  It can be obtained by "gpg --card-status"
+#   command as ``Application ID''.  <USERNAME> is a valid username on
+#   the system.  Comments are opened with "#" and terminated by a newline.
 #
 # So, a valid entry would look like:
 #   "D2760001240101010001000006550000	moritz"
diff --git a/doc/poldi.texi b/doc/poldi.texi
index d098186..191a44a 100644
--- a/doc/poldi.texi
+++ b/doc/poldi.texi
@@ -142,9 +142,9 @@ associated with many users and one user can be associated with many
 smartcards.
 
 The public keys are stored in files in a subdirectory named
-``keys''. The files are named after the card serial numbers and must
+``keys''.  The files are named after the card serial numbers and must
 contain the public key as a single S-Expression as it is printed out
-by poldi-ctrl.
+by gpg-connect-agent (See below).
 
 The mapping between keys and Unix accounts is to be established by
 adding appropriate entries to the user database file named ``users''.
@@ -288,9 +288,10 @@ local usernames.  Syntax: this file consists of entries - one entry
 per line.  Entries are of the form:
 "<SERIALNO><WHITESPACES><USERNAME>\n" (without quotation marks and
 without angle brackets.  Allowed whitespaces are spaces and tabs.
-<SERIALNO> is the serial number of an OpenPGP smartcard as reported by
-poldi-ctrl --print-serialno.  <USERNAME> is a valid username on the
-system.  Comments are opened with "#" and terminated by a newline.
+<SERIALNO> is the serial number of an OpenPGP smartcard.  It can be
+obtained by "gpg --card-status" command as ``Application ID''.
+<USERNAME> is a valid username on the system.  Comments are opened
+with "#" and terminated by a newline.
 
 @item Directory: keys
 
@@ -354,7 +355,7 @@ card-specific key file.  Therefore he inserts Moritz' smartcard and
 executes:
 
 @example
-$ poldi-ctrl --print-key > /etc/poldi/localdb/keys/D2760001240101010001000006550000
+$ gpg-connect-agent "/datafile /etc/poldi/localdb/keys/D2760001240101010001000006550000" "SCD READKEY --advanced OPENPGP.3" /bye
 @end example
 
 The administrator wants to allow Moritz to update his card's key
diff --git a/po/POTFILES.in b/po/POTFILES.in
index abda8f7..b631da8 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1,6 +1,5 @@
 # List of source files which contain translatable strings.
 
-./src/ctrl/poldi-ctrl.c
 ./src/pam/auth-method-localdb/usersdb.c
 ./src/pam/auth-method-localdb/auth-localdb.c
 ./src/pam/auth-method-localdb/key-lookup.h
diff --git a/po/de.po b/po/de.po
index b24a46b..932bd1e 100644
--- a/po/de.po
+++ b/po/de.po
@@ -16,55 +16,6 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: src/ctrl/poldi-ctrl.c:85
-msgid "Dump certain card information"
-msgstr "Informationen der Smartcard ausgeben"
-
-#: src/ctrl/poldi-ctrl.c:87
-msgid "Print authentication key from card"
-msgstr "Zeige Authentifikationsschlüssel der Karte an"
-
-#: src/ctrl/poldi-ctrl.c:89
-msgid "Print serial number from card"
-msgstr "Zeige Seriennummer der Karte an"
-
-#: src/ctrl/poldi-ctrl.c:93
-msgid "Enable debugging mode"
-msgstr "Aktiviere Debugging-Modus"
-
-#: src/ctrl/poldi-ctrl.c:269
-#, c-format
-msgid "failed to initialize logging: %s\n"
-msgstr "konnte Protokollierung nicht initialisieren: %s\n"
-
-#: src/ctrl/poldi-ctrl.c:277
-#, c-format
-msgid "failed to set logging backend: %s\n"
-msgstr "konnte Protokollierungs-Backend nicht aktivieren: %s\n"
-
-#: src/ctrl/poldi-ctrl.c:316
-#, c-format
-msgid "parsing argument vector failed: %s"
-msgstr "Auswerten des Argumentvektors fehlgeschlagen: %s"
-
-#: src/ctrl/poldi-ctrl.c:328
-msgid "more than one command specified (try --help)"
-msgstr "mehr als ein Kommando angegeben (versuche --help)"
-
-#: src/ctrl/poldi-ctrl.c:333
-msgid "no command specified (try --help)"
-msgstr "kein Kommando angegeben (versuche --help)"
-
-#: src/ctrl/poldi-ctrl.c:343
-#, c-format
-msgid "failed to connect to scdaemon: %s"
-msgstr "Verbinden zum Scdaemon fehlgeschlagen: %s"
-
-#: src/ctrl/poldi-ctrl.c:352
-#, c-format
-msgid "failed to retrieve smartcard data: %s"
-msgstr "konnte Daten der Smartcard nicht empfangen: %s"
-
 #: src/pam/auth-method-localdb/auth-localdb.c:109
 msgid "Please enter username: "
 msgstr "Bitte Benutzername eingeben: "
diff --git a/po/poldi.pot b/po/poldi.pot
index b822d06..241e5bc 100644
--- a/po/poldi.pot
+++ b/po/poldi.pot
@@ -17,55 +17,6 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: src/ctrl/poldi-ctrl.c:85
-msgid "Dump certain card information"
-msgstr ""
-
-#: src/ctrl/poldi-ctrl.c:87
-msgid "Print authentication key from card"
-msgstr ""
-
-#: src/ctrl/poldi-ctrl.c:89
-msgid "Print serial number from card"
-msgstr ""
-
-#: src/ctrl/poldi-ctrl.c:93
-msgid "Enable debugging mode"
-msgstr ""
-
-#: src/ctrl/poldi-ctrl.c:269
-#, c-format
-msgid "failed to initialize logging: %s\n"
-msgstr ""
-
-#: src/ctrl/poldi-ctrl.c:277
-#, c-format
-msgid "failed to set logging backend: %s\n"
-msgstr ""
-
-#: src/ctrl/poldi-ctrl.c:316
-#, c-format
-msgid "parsing argument vector failed: %s"
-msgstr ""
-
-#: src/ctrl/poldi-ctrl.c:328
-msgid "more than one command specified (try --help)"
-msgstr ""
-
-#: src/ctrl/poldi-ctrl.c:333
-msgid "no command specified (try --help)"
-msgstr ""
-
-#: src/ctrl/poldi-ctrl.c:343
-#, c-format
-msgid "failed to connect to scdaemon: %s"
-msgstr ""
-
-#: src/ctrl/poldi-ctrl.c:352
-#, c-format
-msgid "failed to retrieve smartcard data: %s"
-msgstr ""
-
 #: src/pam/auth-method-localdb/auth-localdb.c:109
 msgid "Please enter username: "
 msgstr ""

commit a9763b5f203ab5ebd09a87d8d251bc00eb25ed4c
Author: NIIBE Yutaka <gniibe at fsij.org>
Date:   Fri Nov 4 14:10:10 2016 +0900

    Remove poldi-ctrl.
    
    * src/Makefile.am (SUBDIRS): Remove ctrl.
    * src/ctrl: Remove.
    
    --
    Signed-off-by: NIIBE Yutaka <gniibe at fsij.org>

diff --git a/src/Makefile.am b/src/Makefile.am
index 8715d19..70cce5b 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -17,6 +17,6 @@
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 # 02111-1307, USA
 
-SUBDIRS = assuan util scd pam ctrl
+SUBDIRS = assuan util scd pam
 
 EXTRA_DIST = README poldi.h
diff --git a/src/ctrl/ChangeLog b/src/ctrl/ChangeLog
deleted file mode 100644
index 6a23053..0000000
--- a/src/ctrl/ChangeLog
+++ /dev/null
@@ -1,310 +0,0 @@
-2009-08-08  Moritz  <moritz at gnu.org>
-
-	* poldi-ctrl.c (main): Pass NULL as scd_connect's new scd_options
-	parameter.
-
-2008-08-07  Moritz  <moritz at gnu.org>
-
-	* poldi-ctrl.c (cmd_dump): Removed (disabled) workaround for older
-	cards for now.
-
-2008-08-04  Moritz  <moritz at gnu.org>
-
-	* poldi-ctrl.c: Mark strings for i18n.
-
-2008-08-03  Moritz  <moritz at gnu.org>
-
-	* poldi-ctrl.c (i18n_cb): New function.
-	(main): call simpleparse_set_i18n_cb.
-
-2008-07-20  Moritz  <moritz at gnu.org>
-
-	* Makefile.am: removed jnlib.
-
-	* poldi-ctrl.c: New static variables: loghandle, scd_ctx,
-	scd_cardinfo. Setup loghandle and scdaemon context in main(), thus
-	the cmd implementation functions don't need to it anymore.
-	Now uses simplelog API.
-
-2008-07-14  Moritz  <moritz at gnu.org>
-
-	* poldi-ctrl.c: Don't include pwd.h and util/optparse.h.  Include:
-	util/simpleparse.h.
-	(struct poldi_ctrl_opt): Remove member cmd_print_config.  Replace
-	enum_arg_opt_ids list with enum opt_ids.  Replace ARGPARSE_OPTS
-	definitions with simpleparse_opt_spec_t opt_specs[].
-	(my_strusage): Dropped functions.
-	(poldi_ctrl_options_cb): Adjust to new simpleparse interface.
-	Throughout: adjust calls to scd_connect() to new API (providing
-	logging callback).
-	(cmd_print_config): Dropped function. I don't think this
-	functionality is required. Instead do: cat poldi.conf.
-	(main): use new simpleparse subsystem, not jnlibs ARGPARSE, do not
-	use jnlib logging interface.
-	
-2008-04-05  Moritz  <moritz at gnu.org>
-
-	* poldi-ctrl.c (cmd_dump): Use bin2hex instead of convert_to_hex.
-	Removed usersdb manipulating functions.
-
-2007-11-10  Moritz  <moritz at g10code.com>
-
-	* poldi-ctrl.c (conversation): Removed unused function.
-
-2007-11-04  Moritz  <moritz at g10code.com>
-
-	* poldi-ctrl.c (main): Adjust to new options_parse_argv API.
-
-2007-10-28  Moritz  <moritz at g10code.com>
-
-	* poldi-ctrl.c: Do not include scd-support.h; include
-	common/support.h.
-	* Makefile.am (poldi_ctrl_LDADD): Removed reference to
-	libscd-support.a
-
-2007-10-27  Moritz  <moritz at g10code.com>
-
-	* poldi-ctrl.c: Removed "test" command completely.  It's rationale
-	was to test authentication through Poldi.  But since poldi-ctrl
-	didn't use the PAM module (instead it duplicated some
-	authentication code), it's not suitable for testing Poldi through
-	*PAM*.  Removing this command simplifies the Poldi package. There
-	are more reliable ways of testing authentication through Poldi:
-	e.g. the "pamtester" program (not included in PAM Poldi), which
-	uses the PAM API.
-
-2007-08-25  Moritz  <moritz at g10code.com>
-
-	* poldi-ctrl.c (my_strusage): Handle copyright line.
-	Implemented new CLI argument: --serialno-inserted.
-	(struct poldi_ctrl_opt): New member: serialno_inserted.
-	(enum arg_opt_ids): New: arg_serialno_inserted.
-	(ARGPARSE_OPTS arg_opts): Specify arg_serialno_inserted.
-	(poldi_ctrl_options_cb): Handle arg_serialno_inserted.
-	(serialno_from_inserted_card): New function.
-	(cmd_register_card): New variable: use_inserted; use
-	serialno_from_inserted_card.
-	(cmd_unregister_card): New variables: serialno, use_inserted; use
-	serialno_from_inserted_card.
-	(cmd_associate):  New variables: serialno,  account, use_inserted;
-	use serialno_from_inserted_card().
-	(cmd_disassociate): Likewise.  Allow disassociate if serialno AND
-	account is given (removed wildcard mechanism with one of these two
-	being NULL).
-
-2007-08-17  Moritz  <moritz at g10code.com>
-
-	* poldi-ctrl.c (cmd_test): Call wait_for_card().
-	(cmd_dump): Unused variable key_nbits; do not pretend to dump key
-	sizes; cleanup.
-
-2007-08-16  Moritz  <moritz at g10code.com>
-
-	* poldi-ctrl.c (cmd_test): Lookup GPG_AGENT_INFO, not
-	SCDAEMON_INFO.
-	(cmd_dump): Likewise.
-	(cmd_set_key): Likewise.
-
-2007-08-10  Moritz  <moritz at euler>
-
-	* poldi-ctrl.c (cmd_test): Call scd_reset.
-	(cmd_dump): Likewise.
-	(cmd_set_key): Likewise.
-
-2007-06-29  Moritz  <moritz at g10code.com>
-
-	* poldi-ctrl.c: Removed includes: <common/card.h>, <libscd/scd.h>,
-	<common/options.h>; new includes: <common/optparse.h>,
-	<scd/scd.h>, <scd-support/scd-support.h>.
-	(struct poldi_ctrl_opt): Removed members: debug_sc, ctapi_driver,
-	pcsc_driver, reader_port, disable_opensc, disable_ccid,
-	debug_ccid_driver.
-	(enum arg_opt_ids): Removed: arg_ctapi_driver, arg_pcsc_driver,
-	arg_reader_port, arg_disable_ccid, arg_disable_opensc,
-	arg_debug_ccid_driver, arg_require_card_switch.
-	(arg_opts[]): Adjusted to arg_opt_ids changes.
-	(poldi_ctrl_options_cb): Likewise.
-	(cardinfo_NULL): New variable.
-	(cmd_test, cmd_dump, cmd_set_key): Slightly rewritte, use new scd
-	interface.
-	(main): Initialize libgcrypt secure memory, removed call to
-	scd_init.
-
-	* Makefile.am: Adjusted CFLAGS/LDADD, include cmacros.am.
-	(poldi_ctrl_LDADD): Removed $(GPG_ERR_LDFLAGS),$(LIBUSB_LIBS);
-	added: $(LIBASSUAN_LIBS).
-
-2005-12-11  Moritz Schulte  <moritz at g10code.com>
-
-	* poldi-ctrl.c: Removed some FIXMEs.
-
-2005-12-10  Moritz Schulte  <moritz at g10code.com>
-
-	* poldi-ctrl.c (ask_user): Return ERR_NO_DATA in case of EOF while
-	reading username, return ERR_INV_NAME in case an empty line was
-	read.
-	(key_file_create): Print warning instead of error message in case
-	the key file does already exist; only change file owner in case
-	PWENT is non-NULL.
-	(main): Include new commands, removed old commands.
-
-	(key_file_create): Open key file with O_EXCL flag set, better
-	error handling.
-
-	(struct poldi_ctrl_opt): New members: cmd_register_card,
-	cmd_unregister_card, cmd_list_cards, cmd_associate,
-	cmd_disassociate; removed members: cmd_add_user, cmd_remove_user.
-	Implemented new commands.
-
-	(cmd_register_card, cmd_unregister_card, cmd_list_cards,
-	cmd_associate, cmd_disassociate, directory_process_cb): New
-	functions.
-	(cmd_add_user, cmd_remove_user): Removed functions.
-	(enum arg_opt_ids): Add new symbols for new command arguments.
-
-2005-12-03  Moritz Schulte  <moritz at g10code.com>
-
-	* poldi-ctrl.c: Include <assert.h>, <common/usersdb.h>.
-	(ask_user): New function.
-	(cmd_test): Mostly rewritten.
-	(cmd_list): Removed function body; add call to usersdb_list.
-	(cmd_add, cmd_remove): Stripped.
-	Adjusted to new usersdb API.
-
-	* poldi-ctrl.c (cmd_add_user): Removed exit calls.
-	(cmd_remove_user): Likewise.
-
-2005-11-19  Moritz Schulte  <moritz at g10code.com>
-
-	* poldi-ctrl.c (cmd_dump): Retrive key size information through
-	card_read_key, print key size.
-	(cmd_set_key): Adjust to card_read_key API.
-
-2005-11-12  Moritz Schulte  <moritz at g10code.com>
-
-	* poldi-ctrl.c (cmd_test): Adjust to new wait_for_card() API.
-	(cmd_set_key, cmd_dump): Adjust to new card_info() API.
-
-	* Makefile.am (poldi_ctrl_CFLAGS): Added include path:
-	$(top_srcdir)/src/common.
-
-2005-10-31  Moritz Schulte  <moritz at g10code.com>
-
-	* poldi-ctrl.c (cmd_test): Adjusted to new wait_for_card() API.
-	(conversation): New function.
-	Use authenticate() instead of duplicating the authentication
-	mechanism.
-	(cmd_dump): Retrieve and print signing key fingerprint.
-
-2005-10-29  Moritz Schulte  <moritz at g10code.com>
-
-	* poldi-ctrl.c (cmd_remove_user): Print a warning instead of an
-	error in case the serial number could not be looked up; set ERR to
-	0 in this case and only try to remove key file in case SERIALNO is
-	non-zero.
-	(cmd_remove_user): Make sure to lookup the serial number before
-	removing the user from the user database.
-
-2005-10-26  Moritz Schulte  <moritz at g10code.com>
-
-	* poldi-ctrl.c (poldi_ctrl_options_cb): Use gpg_error_t instead of
-	gpg_err_code_t.
-	(cmd_test): Do not call card_close() before "out" label, only
-	after "out" label.
-	(cmd_add_user): Recognize situations of adding duplicates much
-	better; new local variable: skip_userdb.  Added plenty of log
-	messages and comments.
-	(cmd_set_key): Do not call card_close() before "out" label, only
-	after "out" label.
-	(cmd_show_key): New local variable: KEY_SEXP; convert key from
-	string into s-expression representation and back, so that the user
-	sees the key in a standard format.
-	(cmd_remove_user): New local variable; NENTRIES_REMOVED; adjust to
-	new usersdb_remove_entry() interface.
-	(main): New local variable: NCOMMANDS; differentiate case of no
-	command being given from that of too many commands being given; be
-	more verbose.
-	(arg_opts): Include special codes in order to seperate commands
-	from options.
-
-2005-10-23  Moritz Schulte  <moritz at g10code.com>
-
-	* poldi-ctrl.c (cmd_remove_user): Be more verbose (through jnlib
-	logging).
-	Removed dump-shadowed-key command.
-	(key_file_create): Replaced parameter ACCOUNT with PWENT.
-	(cmd_add_user): Pass PWENT to key_file_create instead of ACCOUNT.
-	(cmd_list_users): New local variable LINE_NUMBERS, use it for
-	error reporting, do not bail out on corrupt lines.
-
-2005-10-16  Moritz Schulte  <moritz at g10code.com>
-
-	* poldi-ctrl.c (key_file_create, key_file_remove): Re-ordered functions.
-	(key_file_create, key_file_remove, cmd_test, cmd_set_key)
-	(cmd_show_key): Use key_filename_construct() instead of
-	make_filename() directly.
-
-2005-10-08  Moritz Schulte  <moritz at g10code.com>
-
-	* poldi-ctrl.c: Remove `fake-wait-for-card'-feature.
-
-2005-10-01  Moritz Schulte  <moritz at g10code.com>
-
-	* poldi-ctrl.c (struct poldi_ctrl_opt): New member: WAIT_TIMEOUT.
-	(poldi_ctrl_opt): Exten struct initialization.
-	(arg_opt_ids): New entry: ARG_WAIT_TIMEOUT.
-	(arg_opts): New entry for ARG_WAIT_TIMEOUT.
-	(poldi_ctrl_options_cb): Handle ARG_WAIT_TIMEOUT.
-	(cmd_test): Pass WAIT_TIMEOUT to card_init.
-
-2005-09-30  Moritz Schulte  <moritz at g10code.com>
-
-	* poldi-ctrl.c (struct poldi_ctrl_opt): Remove unnecessary, rather
-	annoying const attributes.
-	(cmd_add_user): Likewise.
-
-2005-09-27  Moritz Schulte  <moritz at g10code.com>
-
-	* poldi-ctrl.c: Adjust to new card_init API; pass zero timeout.
-
-2005-07-26  Moritz Schulte  <moritz at g10code.com>
-
-	* poldi-ctrl.c (cmd_test): Remove unnecessary const attributes and
-	cast.
-	(cmd_dump): Likewise.
-	(cmd_remove_user): Likewise.
-	(cmd_set_key): Likewise.
-	Updated to use new support.h API.
-	(cmd_add_user): Fail, if specified serial number does already
-	exist in database.
-	(cmd_add_user): Fail, if specified user does not exist on system.
-	(poldi_ctrl_options_cb): Better interaction with jnlib in respect
-	to error propagation.
-	(key_file_remove): Do not return error in case of ENOENT.
-
-2005-07-13  Moritz Schulte  <moritz at g10code.com>
-
-	* poldi-ctrl.c: Adjust to new card_info() API, use version
-	information in order to figure out if CHV3 is necessary for public
-	key retrival.
-
-2005-07-12  Moritz Schulte  <moritz at g10code.com>
-
-	* poldi-ctrl.c (cmd_show_key): Only print KEY_STRING, if non-NULL.
-
-2005-01-30  Moritz Schulte  <moritz at g10code.com>
-
-	* poldi-ctrl.c (sexp_to_string): New function.
-
-2004-11-29  Moritz Schulte  <moritz at g10code.com>
-
-	* poldi-ctrl.c: Fix contact address.
-
-2004-11-27  Moritz Schulte  <moritz at g10code.com>
-
-	* poldi-ctrl.c (cmd_test): Adjust card_init caller.
-	(cmd_dump): Likewise.
-	(cmd_set_key): Likewise.
-	Implement require-card-switch option.
-	(cmd_test): Do not require that the uid of the current process is
-	equal to the one of the user to test authentication for.
diff --git a/src/ctrl/Makefile.am b/src/ctrl/Makefile.am
deleted file mode 100644
index 776c781..0000000
--- a/src/ctrl/Makefile.am
+++ /dev/null
@@ -1,40 +0,0 @@
-# Copyright (C) 2005, 2007, 2008 g10 Code GmbH
-#
-# This file is part of Poldi.
-#
-# Poldi 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.
-#
-# Poldi 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
-
-AM_CPPFLAGS =
-include $(top_srcdir)/am/cmacros.am
-
-bin_PROGRAMS = poldi-ctrl
-
-poldi_ctrl_SOURCES = poldi-ctrl.c
-poldi_ctrl_CFLAGS = \
-	-Wall \
-	-I$(top_builddir) \
-	-I$(top_srcdir)/src \
-	-I$(top_builddir)/src \
-	-I$(top_srcdir)/util \
-	-I$(top_srcdir)/src/assuan \
-	$(GPG_ERROR_CFLAGS) \
-	$(LIBGCRYPT_CFLAGS)
-
-poldi_ctrl_LDADD = \
-	../scd/libscd.a ../util/libpoldi-util.a ../assuan/libassuan.a \
-	$(LIBGCRYPT_LDFLAGS) \
-	$(LIBGCRYPT_LIBS) \
-	$(GPG_ERROR_LIBS)
diff --git a/src/ctrl/poldi-ctrl.c b/src/ctrl/poldi-ctrl.c
deleted file mode 100644
index 3dc22f5..0000000
--- a/src/ctrl/poldi-ctrl.c
+++ /dev/null
@@ -1,375 +0,0 @@
-/* poldi-ctrl.c - Poldi maintaince tool
-   Copyright (C) 2004, 2005, 2007, 2008 g10 Code GmbH.
- 
-   This file is part of Poldi.
-  
-   Poldi 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.
-  
-   Poldi 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
-   Lesser General Public License for more details.
-  
-   You should have received a copy of the GNU Lesser 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 <poldi.h>
-
-#include <stdlib.h>
-#include <unistd.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <assert.h>
-
-#include <gcrypt.h>
-
-#include "util/simpleparse.h"
-#include "util/simplelog.h"
-#include "util/support.h"
-#include "util/defs.h"
-#include "util/util.h"
-#include "scd/scd.h"
-
-/* We use the Libgcrypt memory allocator. */
-#define xtrymalloc(n)        gcry_malloc(n)
-#define xtrymalloc_secure(n) gcry_malloc_secure(n)
-#define xtrystrdup(p)        gcry_strdup(p)
-#define xtryrealloc(p,n)     gcry_realloc(p,n)
-#define xfree(p)             gcry_free(p)
-
-

-
-/* Global flags.  */
-struct poldi_ctrl_opt
-{
-  int cmd_dump;
-  int cmd_print_key;
-  int cmd_print_serialno;
-} poldi_ctrl_opt;
-
-/* Handle for simplelog subsystem. */
-static log_handle_t loghandle;
-
-/* Handle for scd access subsystem.  */
-static scd_context_t scd_ctx;
-
-/* Struct holding card info. */
-static struct scd_cardinfo scd_cardinfo;
-
-/* Set defaults.  */
-struct poldi_ctrl_opt poldi_ctrl_opt =
-  {
-    0,
-    0,
-    0
-  };
-
-enum opt_ids
-  {
-    opt_none,
-    opt_dump,
-    opt_print_key,
-    opt_print_serialno,
-    opt_debug
-  };
-
-static simpleparse_opt_spec_t opt_specs[] =
-  {
-    /* Commands:  */
-    { opt_dump, "dump",
-      'd', SIMPLEPARSE_ARG_NONE, 0, N_("Dump certain card information") },
-    { opt_print_key, "print-key",
-      'k', SIMPLEPARSE_ARG_NONE, 0, N_("Print authentication key from card") },
-    { opt_print_serialno, "print-serialno",
-      's', SIMPLEPARSE_ARG_NONE, 0, N_("Print serial number from card") },
-
-    /* Options:  */
-    { opt_debug, "debug",
-      0, SIMPLEPARSE_ARG_NONE, 0, N_("Enable debugging mode") },
-    { 0 }
-  };
-
-

-
-/* Callback for parsing of command-line arguments. */
-static gpg_error_t
-poldi_ctrl_options_cb (void *cookie,
-		       simpleparse_opt_spec_t spec, const char *arg)
-{
-  if (spec.id == opt_dump)
-    poldi_ctrl_opt.cmd_dump = 1;
-  else if (spec.id == opt_print_key)
-    poldi_ctrl_opt.cmd_print_key = 1;
-  else if (spec.id == opt_print_serialno)
-    poldi_ctrl_opt.cmd_print_serialno = 1;
-  else if (spec.id == opt_debug)
-    log_set_min_level (loghandle, LOG_LEVEL_DEBUG);
-
-  return 0;
-}
-
-

-
-/*
- * Command functions.
- */
-
-
-

-
-/* Retrieve authentication key from card through the SCDaemon context
-   CTX and store it as a S-Expression c-string in *KEY_STRING.
-   Returns proper error code. */
-static gpg_error_t
-retrieve_key (scd_context_t ctx, char **key_string)
-{
-  gcry_sexp_t key;
-  char *key_s;
-  gpg_error_t err;
-
-  *key_string = NULL;
-  key = NULL;
-  key_s = NULL;
-
-  /* Retrieve key from card.  */
-  err = scd_readkey (ctx, "OPENPGP.3", &key);
-  if (err)
-    {
-      log_msg_error (loghandle,
-		     "failed to retrieve key from card: %s",
-		     gpg_strerror (err));
-      goto out;
-    }
-
-  /* Convert key into a string.  */
-  err = sexp_to_string (key, &key_s);
-  if (err)
-    {
-      log_msg_error (loghandle,
-		     "failed to convert key S-Expression "
-		     "into C-String: %s",
-		     gpg_strerror (err));
-      goto out;
-    }
-
-  *key_string = key_s;
-
- out:
-
-  gcry_sexp_release (key);
-
-  return err;
-}
-
-/* Implementation of `dump' command; dumps information from card.  */
-static gpg_error_t
-cmd_dump (void)
-{
-  char *key_s;
-  gpg_error_t err;
-  char fpr[41];
-
-  key_s = NULL;
-
-  /* Retrieve key from card.  */
-
-  err = retrieve_key (scd_ctx, &key_s);
-  if (err)
-    {
-      log_msg_error (loghandle, "failed to retrieve key from card: %s",
-		     gpg_strerror (err));
-      goto out;
-    }
-
-  bin2hex (scd_cardinfo.fpr3, 20, fpr);
-
-  printf ("Serial number: %s\n"
-	  "Signing key fingerprint: %s\n"
-	  "Key:\n%s\n",
-	  scd_cardinfo.serialno, fpr, key_s);
-
- out:
-
-  gcry_free (key_s);
-
-  return err;
-}
-
-/* Implementation of `print-key' command; dumps information from card.  */
-static gpg_error_t
-cmd_print_key (void)
-{
-  char *key_s;
-  gpg_error_t err;
-
-  key_s = NULL;
-
-  /* Retrieve key from card.  */
-
-  err = retrieve_key (scd_ctx, &key_s);
-  if (err)
-    {
-      log_msg_error (loghandle, "failed to retrieve key from card: %s",
-		     gpg_strerror (err));
-      goto out;
-    }
-
-  printf ("%s", key_s);
-
- out:
-
-  gcry_free (key_s);
-
-  return err;
-}
-
-/* Implementation of `print-serialno' command.  */
-static gpg_error_t
-cmd_print_serialno (void)
-{
-  printf ("%s\n", scd_cardinfo.serialno);
-  return 0;
-}
-
-static const char *
-i18n_cb (void *cookie, const char *msg)
-{
-  return _(msg);
-}
-
-/* Main.  */
-int
-main (int argc, const char **argv)
-{
-  simpleparse_handle_t parsehandle;
-  unsigned int ncommands;
-  gpg_error_t err;
-
-  /** Initialize.  **/
-
-  assert (argc > 0);
-
-  /* I18n. */
-  setlocale (LC_ALL, "");
-  bindtextdomain (PACKAGE, LOCALEDIR);
-  textdomain (PACKAGE);
-
-  gcry_control (GCRYCTL_INIT_SECMEM, 16384, 0);
-
-  /* Initialize logging. */
-
-  err = log_create (&loghandle);
-  if (err)
-    {
-      fprintf (stderr, _("failed to initialize logging: %s\n"),
-	       gpg_strerror (err));
-      exit (1);
-    }
-
-  err = log_set_backend_stream (loghandle, stderr);
-  if (err)
-    {
-      fprintf (stderr, _("failed to set logging backend: %s\n"),
-	       gpg_strerror (err));
-      exit (1);
-    }
-
-  log_set_prefix (loghandle, "poldi-ctrl:");
-  log_set_flags (loghandle, LOG_FLAG_WITH_PREFIX);
-
-  /* Parse arguments. */
-
-  err = simpleparse_create (&parsehandle);
-  if (err)
-    goto out;
-
-  simpleparse_set_loghandle (parsehandle, loghandle);
-  simpleparse_set_streams (parsehandle, stdout, stderr);
-  simpleparse_set_parse_cb (parsehandle, poldi_ctrl_options_cb, NULL);
-  simpleparse_set_i18n_cb (parsehandle, i18n_cb, NULL);
-  err = simpleparse_set_specs (parsehandle, opt_specs);
-  if (err)
-    goto out;
-
-  simpleparse_set_name (parsehandle, "poldi-ctrl");
-  simpleparse_set_package (parsehandle, "Poldi");
-  simpleparse_set_version (parsehandle, PACKAGE_VERSION);
-  simpleparse_set_bugaddress (parsehandle, PACKAGE_BUGREPORT);
-  simpleparse_set_description (parsehandle, "Command line utility for Poldi");
-  simpleparse_set_copyright (parsehandle,
-			     "Copyright (C) 2008 g10 Code GmbH\n"
-			     "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>\n"
-			     "This is free software: you are free to change and redistribute it.\n"
-			     "There is NO WARRANTY, to the extent permitted by law.");
-
-  /* Parse command-line arguments.  */
-  err = simpleparse_parse (parsehandle, 0, argc - 1, argv + 1, NULL);
-  /* This causes compiler warning, who is correct? */
-  if (err)
-    {
-      log_msg_error (loghandle,
-		     _("parsing argument vector failed: %s"),
-		     gpg_strerror (err));
-      goto out;
-    }
-
-  ncommands = (0
-	       + poldi_ctrl_opt.cmd_print_key
-	       + poldi_ctrl_opt.cmd_print_serialno
-	       + poldi_ctrl_opt.cmd_dump);
-  if (ncommands > 1)
-    {
-      log_msg_error (loghandle,
-		     _("more than one command specified (try --help)"));
-      goto out;
-    }
-  else if (! ncommands)
-    {
-      log_msg_error (loghandle, _("no command specified (try --help)"));
-      goto out;
-    }
-
-  /* Connect to scdaemon. */
-
-  err = scd_connect (&scd_ctx, NULL, getenv ("GPG_AGENT_INFO"),
-		     NULL, NULL, 0, loghandle);
-  if (err)
-    {
-      log_msg_error (loghandle, _("failed to connect to scdaemon: %s"),
-		     gpg_strerror (err));
-      goto out;
-    }
-
-  err = scd_learn (scd_ctx, &scd_cardinfo);
-  if (err)
-    {
-      log_msg_error (loghandle,
-		     _("failed to retrieve smartcard data: %s"),
-		     gpg_strerror (err));
-      goto out;
-    }
-
-  if (poldi_ctrl_opt.cmd_dump)
-    err = cmd_dump ();
-  else if (poldi_ctrl_opt.cmd_print_key)
-    err = cmd_print_key ();
-  else if (poldi_ctrl_opt.cmd_print_serialno)
-    err = cmd_print_serialno ();
-
- out:
-
-  if (parsehandle)
-    simpleparse_destroy (parsehandle);
-  if (scd_ctx)
-    scd_disconnect (scd_ctx);
-  scd_release_cardinfo (scd_cardinfo);
-  
-  return err ? EXIT_FAILURE : EXIT_SUCCESS;
-}
-
-/* END */

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

Summary of changes:
 conf/users.skel       |   6 +-
 doc/poldi.texi        |  13 +-
 po/POTFILES.in        |   1 -
 po/de.po              |  49 -------
 po/poldi.pot          |  49 -------
 src/Makefile.am       |   2 +-
 src/ctrl/ChangeLog    | 310 -----------------------------------------
 src/ctrl/Makefile.am  |  40 ------
 src/ctrl/poldi-ctrl.c | 375 --------------------------------------------------
 src/pam/pam_poldi.c   |   6 +-
 src/scd/scd.c         | 224 ++----------------------------
 src/scd/scd.h         |  13 +-
 12 files changed, 31 insertions(+), 1057 deletions(-)
 delete mode 100644 src/ctrl/ChangeLog
 delete mode 100644 src/ctrl/Makefile.am
 delete mode 100644 src/ctrl/poldi-ctrl.c


hooks/post-receive
-- 
PAM for the OpenPGP card
http://git.gnupg.org




More information about the Gnupg-commits mailing list