2009-08-08 Moritz <moritz@gnu.org>
authorMoritz Schulte <mo@g10code.com>
Sat, 8 Aug 2009 15:02:51 +0000 (15:02 +0000)
committerMoritz Schulte <mo@g10code.com>
Sat, 8 Aug 2009 15:02:51 +0000 (15:02 +0000)
* AUTHORS (Homepage): Fixed.

2009-08-08  Moritz  <moritz@gnu.org>

* poldi.conf.skel: Fixed log-file path.

2009-08-08  Moritz  <moritz@gnu.org>

* scd.h (scd_connect): Declared new parameter: scd_options.
* scd.c (scd_connect): Enlarge argv and fill it with options
related arguments.

2009-08-08  Moritz  <moritz@gnu.org>

* poldi-ctrl.c (main): Pass NULL as scd_connect's new
scd_options parameter.

2009-08-08  Moritz  <moritz@gnu.org>

* pam_poldi.c: Implement new option: scdaemon-options.
(pam_sm_authenticate): Pass ctx->scdaemon_options to
scd_connect().  (pam_sm_authenticate): Changed some user
messages.

2009-08-08  Moritz  <moritz@gnu.org>

* ctx.h (struct poldi_ctx_s): New member: scdaemon_options.

2009-08-08  Moritz  <moritz@gnu.org>

* poldi.texi (Configuration): Documented scdaemon-program and
scdaemon-options.

17 files changed:
AUTHORS
ChangeLog
NEWS
conf/ChangeLog
conf/poldi.conf.skel
doc/ChangeLog
doc/poldi.texi
po/poldi.pot
src/ctrl/ChangeLog
src/ctrl/poldi-ctrl.c
src/pam/ChangeLog
src/pam/auth-support/ChangeLog
src/pam/auth-support/ctx.h
src/pam/pam_poldi.c
src/scd/ChangeLog
src/scd/scd.c
src/scd/scd.h

diff --git a/AUTHORS b/AUTHORS
index 6130edd..b07ec23 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -1,5 +1,5 @@
 Program: Poldi
-Homepage: none yet
+Homepage: http://www.g10code.com/p-poldi.html
 Maintainer: Moritz Schulte <moritz@g10code.com>
 Bug reports: http://bugs.gnupg.org
 Security related bug reports: <security@gnupg.org>
index 8b07533..926a6db 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2009-08-08  Moritz  <moritz@gnu.org>
+
+       * AUTHORS (Homepage): Fixed.
+
 2009-08-03  Werner Koch  <wk@g10code.com>
 
        * configure.ac: Fixed no-x.509 notice.  Reported by Lionel Elie
diff --git a/NEWS b/NEWS
index 551f979..decdc2d 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,23 @@
 
 Changes since version 0.4.1:
 
+* New option "scdaemon-options"
+  Added a new option "scdaemon-options", which can be used to specify
+  the scdaemon configuration file to use for newly spawned scdaemon
+  instances.
+
+* New option "modify-environment"
+  Added a new option "modify-environment", which causes Poldi to add
+  certain Poldi related environment variables to the PAM environment.
+  During the login process they can be used for whatever customization
+  which one can think of: e.g. deriving the locale environment from
+  the card's LANG data item or printing the signature counter on
+  login.  As of now, the following environment variables are set:
+
+    PAM_POLDI_AUTHENTICATED=""
+    PAM_POLDI_SERIALNO="<SERIALNO>"
+    PAM_POLDI_LANG="<LANG>"
+
 * New option "quiet"
   Added a new option "quiet", which causes Poldi to skip most of the
   PAM info messages during authentication.  Careful: the exact
index 8673666..e200803 100644 (file)
@@ -1,3 +1,7 @@
+2009-08-08  Moritz  <moritz@gnu.org>
+
+       * poldi.conf.skel: Fixed log-file path.
+
 2008-08-17  Moritz  <moritz@gnu.org>
 
        * Makefile.am: Added several missing instances of DESTDIR. Thanks
index aa08924..58967b3 100644 (file)
@@ -5,7 +5,7 @@
 auth-method localdb
 
 # Specify the log file:
-log-file /home/moritz/logs/poldi.txt
+log-file /var/log/poldi
 
 # Enable debugging messages
 debug
index ab6e1d4..2785427 100644 (file)
@@ -1,3 +1,8 @@
+2009-08-08  Moritz  <moritz@gnu.org>
+
+       * poldi.texi (Configuration): Documented scdaemon-program and
+       scdaemon-options.
+
 2009-05-16  Moritz  <moritz@gnu.org>
 
        * poldi.texi (XScreensaver): Added note for GNOME Screensaver.
index 6ce7733..bf14845 100644 (file)
@@ -229,16 +229,20 @@ seperated by a whitespace - one such configuration item per line.
 Poldi supports the following authentication method independent
 options, which can be specified in the main configuration file and in
 the PAM configuration files as arguments to the Poldi PAM module (with
-standard doubledash notation).
+standard double-dash notation).
 
 @table @code
 @item log-file FILENAME
 Specify the file to use for log messages.
 @item auth-method AUTH-METHOD
-Specify the authentication method to use.  May be either ``localdb
+Specify the authentication method to use.  May be either ``localdb''
 or ``x509''.
 @item debug
 Enable debugging messages.
+@item scdaemon-program
+Specify scdaemon executable to use.
+@item scdaemon-options
+Specify scdaemon configuration file to use.
 @item modify-environment
 This option causes Poldi to add certain Poldi related environment
 variables to the PAM environment.  Currently, the following variables
index 3755cf8..f6ffed1 100644 (file)
@@ -6,9 +6,9 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: poldi 0.4.1\n"
+"Project-Id-Version: poldi 0.4.2-cvs\n"
 "Report-Msgid-Bugs-To: gnupg-devel@gnupg.org\n"
-"POT-Creation-Date: 2008-12-22 22:59+0100\n"
+"POT-Creation-Date: 2009-08-08 15:48+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -70,30 +70,30 @@ msgid "Please enter username: "
 msgstr ""
 
 #: src/pam/auth-method-localdb/auth-localdb.c:121
-#: src/pam/auth-method-localdb/auth-localdb.c:123
+#: src/pam/auth-method-localdb/auth-localdb.c:124
 #, c-format
 msgid "Trying authentication as user `%s'..."
 msgstr ""
 
-#: src/pam/auth-method-localdb/auth-localdb.c:132
-#: src/pam/auth-method-localdb/auth-localdb.c:135
+#: src/pam/auth-method-localdb/auth-localdb.c:133
+#: src/pam/auth-method-localdb/auth-localdb.c:136
 #, c-format
 msgid "Serial number %s is not associated with user %s"
 msgstr ""
 
-#: src/pam/auth-method-localdb/auth-localdb.c:151
+#: src/pam/auth-method-localdb/auth-localdb.c:152
 #: src/pam/auth-method-x509/auth-x509.c:553
 #, c-format
 msgid "failed to generate challenge: %s"
 msgstr ""
 
-#: src/pam/auth-method-localdb/auth-localdb.c:163
+#: src/pam/auth-method-localdb/auth-localdb.c:164
 #: src/pam/auth-method-x509/auth-x509.c:565
 #, c-format
 msgid "failed to retrieve challenge signature from card: %s"
 msgstr ""
 
-#: src/pam/auth-method-localdb/auth-localdb.c:173
+#: src/pam/auth-method-localdb/auth-localdb.c:174
 msgid "failed to verify challenge"
 msgstr ""
 
@@ -216,86 +216,106 @@ msgstr ""
 msgid "success"
 msgstr ""
 
-#: src/pam/pam_poldi.c:132 src/pam/pam_poldi.c:145 src/scd/scd.c:124
+#: src/pam/pam_poldi.c:142 src/pam/pam_poldi.c:155 src/pam/pam_poldi.c:169
+#: src/scd/scd.c:124
 #, c-format
 msgid "failed to duplicate %s: %s"
 msgstr ""
 
-#: src/pam/pam_poldi.c:160
+#: src/pam/pam_poldi.c:184
 #, c-format
 msgid "unknown authentication method '%s'"
 msgstr ""
 
-#: src/pam/pam_poldi.c:320
+#: src/pam/pam_poldi.c:312
 #, c-format
-msgid "failed to parse configuration file: %s"
+msgid "asprintf() failed in modify_environment_putenv(): %s"
 msgstr ""
 
-#: src/pam/pam_poldi.c:332
+#: src/pam/pam_poldi.c:321
+#, c-format
+msgid "pam_putenv() failed in modify_environment_putenv(): %s"
+msgstr ""
+
+#: src/pam/pam_poldi.c:406
+#, c-format
+msgid "failed to parse configuration file '%s': %s"
+msgstr ""
+
+#: src/pam/pam_poldi.c:419
 #, c-format
 msgid "failed to parse PAM argument vector: %s"
 msgstr ""
 
-#: src/pam/pam_poldi.c:361
+#: src/pam/pam_poldi.c:448
 msgid "no authentication method specified"
 msgstr ""
 
-#: src/pam/pam_poldi.c:375
+#: src/pam/pam_poldi.c:462
 #, c-format
 msgid "using authentication method `%s'"
 msgstr ""
 
-#: src/pam/pam_poldi.c:387
+#: src/pam/pam_poldi.c:474
 #, c-format
 msgid "failed to initialize authentication method %i: %s"
 msgstr ""
 
-#: src/pam/pam_poldi.c:401
+#: src/pam/pam_poldi.c:488
 #, c-format
 msgid ""
 "failed to initialize parsing of configuration file for authentication method "
 "%s: %s"
 msgstr ""
 
-#: src/pam/pam_poldi.c:422
+#: src/pam/pam_poldi.c:509
 #, c-format
 msgid "failed to parse configuration for authentication method %i: %s"
 msgstr ""
 
-#: src/pam/pam_poldi.c:441
+#: src/pam/pam_poldi.c:528
 msgid "failed to retrieve PAM conversation structure"
 msgstr ""
 
-#: src/pam/pam_poldi.c:459
+#: src/pam/pam_poldi.c:546
 #, c-format
 msgid "failed to retrieve username from PAM: %s"
 msgstr ""
 
-#: src/pam/pam_poldi.c:482 src/pam/pam_poldi.c:483
+#: src/pam/pam_poldi.c:570
 #, c-format
 msgid "Waiting for card for user `%s'..."
 msgstr ""
 
-#: src/pam/pam_poldi.c:488 src/pam/pam_poldi.c:489
+#: src/pam/pam_poldi.c:572
+#, c-format
+msgid "Insert authentication card for user `%s'"
+msgstr ""
+
+#: src/pam/pam_poldi.c:577
 msgid "Waiting for card..."
 msgstr ""
 
-#: src/pam/pam_poldi.c:496
+#: src/pam/pam_poldi.c:579
+msgid "Insert authentication card"
+msgstr ""
+
+#: src/pam/pam_poldi.c:586
 #, c-format
 msgid "failed to wait for card insertion: %s"
 msgstr ""
 
-#: src/pam/pam_poldi.c:509
+#: src/pam/pam_poldi.c:599
 #, c-format
 msgid "connected to card; serial number is: %s"
 msgstr ""
 
-#: src/pam/pam_poldi.c:547
+#: src/pam/pam_poldi.c:637
 #, c-format
 msgid "authentication failed: %s"
 msgstr ""
 
-#: src/pam/pam_poldi.c:549
+#: src/pam/pam_poldi.c:641
 msgid "authentication succeeded"
 msgstr ""
 
@@ -308,41 +328,41 @@ msgstr ""
 msgid "agent protocol version %d is not supported"
 msgstr ""
 
-#: src/scd/scd.c:197 src/scd/scd.c:925
+#: src/scd/scd.c:197 src/scd/scd.c:941
 #, c-format
 msgid "warning: can't store getinfo data: %s"
 msgstr ""
 
-#: src/scd/scd.c:294
+#: src/scd/scd.c:295
 #, c-format
 msgid "connected to system scdaemon through socket '%s'"
 msgstr ""
 
-#: src/scd/scd.c:314
+#: src/scd/scd.c:315
 #, c-format
 msgid "got scdaemon socket name from gpg-agent, connected to socket '%s'"
 msgstr ""
 
-#: src/scd/scd.c:335
+#: src/scd/scd.c:336
 msgid "no running scdaemon - starting one"
 msgstr ""
 
-#: src/scd/scd.c:341
+#: src/scd/scd.c:342
 #, c-format
 msgid "error flushing pending output: %s"
 msgstr ""
 
-#: src/scd/scd.c:374
+#: src/scd/scd.c:385
 #, c-format
 msgid "spawned a new scdaemon (path: '%s')"
 msgstr ""
 
-#: src/scd/scd.c:381
+#: src/scd/scd.c:392
 #, c-format
 msgid "could not connect to any scdaemon: %s"
 msgstr ""
 
-#: src/scd/scd.c:404
+#: src/scd/scd.c:415
 msgid "connection to scdaemon established"
 msgstr ""
 
index e4be205..6a23053 100644 (file)
@@ -1,3 +1,8 @@
+2009-08-08  Moritz  <moritz@gnu.org>
+
+       * poldi-ctrl.c (main): Pass NULL as scd_connect's new scd_options
+       parameter.
+
 2008-08-07  Moritz  <moritz@gnu.org>
 
        * poldi-ctrl.c (cmd_dump): Removed (disabled) workaround for older
index 7cf63ae..f595f01 100644 (file)
@@ -337,7 +337,7 @@ main (int argc, char **argv)
   /* Connect to scdaemon. */
 
   err = scd_connect (&scd_ctx, NULL, getenv ("GPG_AGENT_INFO"),
-                    NULL, 0, loghandle);
+                    NULL, NULL, 0, loghandle);
   if (err)
     {
       log_msg_error (loghandle, _("failed to connect to scdaemon: %s"),
index 252086e..2f5683e 100644 (file)
@@ -1,3 +1,9 @@
+2009-08-08  Moritz  <moritz@gnu.org>
+
+       * pam_poldi.c: Implement new option: scdaemon-options.
+       (pam_sm_authenticate): Pass ctx->scdaemon_options to scd_connect().
+       (pam_sm_authenticate): Changed some user messages.
+
 2009-05-16  Moritz  <moritz@gnu.org>
 
        * pam_poldi.c (enum opt_ids, opt_specs, pam_poldi_options_cb):
index 1cecb2e..fceb260 100644 (file)
@@ -1,3 +1,7 @@
+2009-08-08  Moritz  <moritz@gnu.org>
+
+       * ctx.h (struct poldi_ctx_s): New member: scdaemon_options.
+
 2009-05-16  Moritz  <moritz@gnu.org>
 
        * ctx.h (struct poldi_ctx_s): New member: modify_environment.
index 03c9ade..98f1034 100644 (file)
@@ -70,6 +70,7 @@ struct poldi_ctx_s
 
   /* Scdaemon. */
   char *scdaemon_program;      /* Path of Scdaemon program to execute.  */
+  char *scdaemon_options;      /* Path of Scdaemon configuration file.  */
   scd_context_t scd;           /* Handle for the Scdaemon access
                                   layer.  */
 
index 7822861..0448819 100644 (file)
@@ -82,6 +82,7 @@ enum opt_ids
     opt_auth_method,
     opt_debug,
     opt_scdaemon_program,
+    opt_scdaemon_options,
     opt_modify_environment,
     opt_quiet
   };
@@ -97,6 +98,8 @@ static simpleparse_opt_spec_t opt_specs[] =
       0, SIMPLEPARSE_ARG_NONE,     0, "Enable debugging mode" },
     { opt_scdaemon_program, "scdaemon-program",
       0, SIMPLEPARSE_ARG_REQUIRED, 0, "Specify scdaemon executable to use" },
+    { opt_scdaemon_options, "scdaemon-options",
+      0, SIMPLEPARSE_ARG_REQUIRED, 0, "Specify scdaemon configuration file to use" },
     { opt_modify_environment, "modify-environment",
       0, SIMPLEPARSE_ARG_NONE, 0, "Set Poldi related variables in the PAM environment" },
     { opt_quiet, "quiet",
@@ -154,6 +157,20 @@ pam_poldi_options_cb (void *cookie, simpleparse_opt_spec_t spec, const char *arg
                         gpg_strerror (err));
        }
     }
+  else if (!strcmp (spec.long_opt, "scdaemon-options"))
+    {
+      /* SCDAEMON-OPTIONS.  */
+
+      ctx->scdaemon_options = strdup (arg);
+      if (!ctx->scdaemon_options)
+       {
+         err = gpg_error_from_errno (errno);
+         log_msg_error (ctx->loghandle,
+                        _("failed to duplicate %s: %s"),
+                        "scdaemon options name",
+                        gpg_strerror (err));
+       }
+    }
   else if (!strcmp (spec.long_opt, "auth-method"))
     {
       /* AUTH-METHOD.  */
@@ -266,6 +283,7 @@ destroy_context (poldi_ctx_t ctx)
       simpleparse_destroy (ctx->parsehandle);
       log_destroy (ctx->loghandle);
       xfree (ctx->scdaemon_program);
+      xfree (ctx->scdaemon_options);
       scd_disconnect (ctx->scd);
       scd_release_cardinfo (ctx->cardinfo);
       /* FIXME: not very consistent: conv is (de-)allocated by caller. -mo */
@@ -533,7 +551,8 @@ pam_sm_authenticate (pam_handle_t *pam_handle,
 
   err = scd_connect (&scd_ctx,
                     NULL, getenv ("GPG_AGENT_INFO"),
-                    ctx->scdaemon_program, 0, ctx->loghandle);
+                    ctx->scdaemon_program, ctx->scdaemon_options,
+                    0, ctx->loghandle);
   if (err)
     goto out;
 
@@ -550,14 +569,14 @@ pam_sm_authenticate (pam_handle_t *pam_handle,
       if (ctx->debug)
        log_msg_debug (ctx->loghandle, _("Waiting for card for user `%s'..."), pam_username);
       if (!ctx->quiet)
-       conv_tell (ctx->conv, _("Waiting for card for user `%s'..."), pam_username);
+       conv_tell (ctx->conv, _("Insert authentication card for user `%s'"), pam_username);
     }
   else
     {
       if (ctx->debug)
        log_msg_debug (ctx->loghandle, _("Waiting for card..."));
       if (!ctx->quiet)
-       conv_tell (ctx->conv, _("Waiting for card..."));
+       conv_tell (ctx->conv, _("Insert authentication card"));
     }
 
   err = wait_for_card (ctx->scd, 0);
index e2c54bd..4ccb0af 100644 (file)
@@ -1,3 +1,9 @@
+2009-08-08  Moritz  <moritz@gnu.org>
+
+       * scd.h (scd_connect): Declared new parameter: scd_options.
+       * scd.c (scd_connect): Enlarge argv and fill it with options
+       related arguments.
+
 2009-05-16  Moritz  <moritz@gnu.org>
 
        * scd.h (struct scd_cardinfo): New member: disp_lang.
index 903114e..f0b6d35 100644 (file)
@@ -260,6 +260,7 @@ 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)
 {
@@ -326,7 +327,7 @@ scd_connect (scd_context_t *scd_ctx,
         fallback: spawn a new scdaemon.  */
 
       const char *pgmname;
-      const char *argv[3];
+      const char *argv[5];
       int no_close_list[3];
       int i;
 
@@ -350,9 +351,17 @@ scd_connect (scd_context_t *scd_ctx,
       else
         pgmname++;
 
-      argv[0] = pgmname;
-      argv[1] = "--server";
-      argv[2] = NULL;
+      /* Fill argument vector for scdaemon.  */
+
+      i = 0;
+      argv[i++] = pgmname;
+      argv[i++] = "--server";
+      if (scd_options)
+       {
+         argv[i++] = "--options";
+         argv[i++] = scd_options;
+       }
+      argv[i++] = NULL;
 
       i=0;
 
@@ -362,6 +371,8 @@ scd_connect (scd_context_t *scd_ctx,
       if (log_get_fd () != -1)
         no_close_list[i++] = log_get_fd ();
 #endif
+
+      /* FIXME: What about stderr? */
       no_close_list[i++] = fileno (stderr);
       no_close_list[i] = -1;
 
index 0b06839..2df7ae7 100644 (file)
@@ -53,6 +53,7 @@ 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);