[git] Poldi - branch, master, updated. release-0.4.1-51-g553060d

by NIIBE Yutaka cvs at cvs.gnupg.org
Tue Nov 15 05:16:03 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  553060d8bbaac1381d0501b4525f4b102ccd3324 (commit)
       via  6091c0af2537ff100dcbbd66029d2302a7d5c5c1 (commit)
       via  6904ae208e81e19639c85edfaa76a4fea0a4074f (commit)
       via  0afd57e088146f0e2e968809e95867f8caabce00 (commit)
       via  91aa9c96ab7d6a608c76a713b13b301e7ea5ff82 (commit)
       via  eb1fc82c307c1a147a4fa2e240c3b3330875fede (commit)
       via  af67cba1ed81ca642e85f684bbc897e54187ba2a (commit)
       via  836d56934709b8a8821b60eeda9c815448826320 (commit)
       via  64b07726e2d3e3a6140dcf49416ad30f83fecfc0 (commit)
      from  83891ae71db2ba6f7d0e48db746fb5caaeba2c4b (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 553060d8bbaac1381d0501b4525f4b102ccd3324
Author: NIIBE Yutaka <gniibe at fsij.org>
Date:   Tue Nov 15 13:07:15 2016 +0900

    Update po.
    
    --
    Signed-off-by: NIIBE Yutaka <gniibe at fsij.org>

diff --git a/po/POTFILES.in b/po/POTFILES.in
index b631da8..45ad51c 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1,38 +1,36 @@
 # List of source files which contain translatable strings.
 
-./src/pam/auth-method-localdb/usersdb.c
 ./src/pam/auth-method-localdb/auth-localdb.c
+./src/pam/auth-method-localdb/key-lookup.c
 ./src/pam/auth-method-localdb/key-lookup.h
+./src/pam/auth-method-localdb/usersdb.c
 ./src/pam/auth-method-localdb/usersdb.h
-./src/pam/auth-method-localdb/key-lookup.c
+./src/pam/auth-method-x509/auth-x509.c
+./src/pam/auth-method-x509/dirmngr.c
+./src/pam/auth-method-x509/dirmngr.h
 ./src/pam/auth-methods.h
-./src/pam/auth-support/getpin-cb.h
-./src/pam/auth-support/pam-util.h
 ./src/pam/auth-support/conv.c
-./src/pam/auth-support/wait-for-card.h
-./src/pam/auth-support/wait-for-card.c
-./src/pam/auth-support/pam-util.c
 ./src/pam/auth-support/conv.h
 ./src/pam/auth-support/ctx.h
 ./src/pam/auth-support/getpin-cb.c
-./src/pam/auth-method-x509/dirmngr.h
-./src/pam/auth-method-x509/dirmngr.c
-./src/pam/auth-method-x509/auth-x509.c
+./src/pam/auth-support/getpin-cb.h
+./src/pam/auth-support/wait-for-card.c
+./src/pam/auth-support/wait-for-card.h
 ./src/pam/pam_poldi.c
 ./src/poldi.h
 ./src/scd/scd.c
 ./src/scd/scd.h
-./src/util/simplelog.c
 ./src/util/convert.c
-./src/util/support.c
-./src/util/support.h
-./src/util/membuf.c
-./src/util/simpleparse.h
+./src/util/defs.h.in
 ./src/util/filenames.c
 ./src/util/filenames.h
+./src/util/membuf.c
 ./src/util/membuf.h
-./src/util/util.h
+./src/util/simplelog.c
 ./src/util/simplelog.h
-./src/util/util-local.h
 ./src/util/simpleparse.c
-./src/util/defs.h.in
+./src/util/simpleparse.h
+./src/util/support.c
+./src/util/support.h
+./src/util/util-local.h
+./src/util/util.h
diff --git a/po/de.po b/po/de.po
index 932bd1e..026e0b5 100644
--- a/po/de.po
+++ b/po/de.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: poldi 0.4-cvs\n"
 "Report-Msgid-Bugs-To: gnupg-devel at gnupg.org\n"
-"POT-Creation-Date: 2015-12-18 04:31+0000\n"
+"POT-Creation-Date: 2016-11-15 13:02+0900\n"
 "PO-Revision-Date: 2009-08-08 19:47+0200\n"
 "Last-Translator: Moritz Schulte <moritz at g10code.com>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -16,337 +16,243 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: src/pam/auth-method-localdb/auth-localdb.c:109
+#: src/pam/auth-method-localdb/auth-localdb.c:108
 msgid "Please enter username: "
 msgstr "Bitte Benutzername eingeben: "
 
-#: src/pam/auth-method-localdb/auth-localdb.c:121
-#: src/pam/auth-method-localdb/auth-localdb.c:124
+#: src/pam/auth-method-localdb/auth-localdb.c:123
 #, c-format
 msgid "Trying authentication as user `%s'..."
 msgstr "Versuche Authentifizierung als Benutzer '%s'..."
 
-#: src/pam/auth-method-localdb/auth-localdb.c:133
-#: src/pam/auth-method-localdb/auth-localdb.c:136
+#: src/pam/auth-method-localdb/auth-localdb.c:135
 #, c-format
 msgid "Serial number %s is not associated with user %s"
 msgstr "Seriennummer %s ist nicht assoziiert mit Benutzer %s"
 
-#: 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 "Generierung der Challenge fehlgeschlagen: %s"
-
-#: 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 "konnte Signatur der Challenge nicht von der Karte empfangen: %s"
+#: src/pam/auth-method-x509/auth-x509.c:102
+msgid "Specify local socket for dirmngr access"
+msgstr "Spezifiziert den lokalen Socket fuer Dirmngr Zugriff"
 
-#: src/pam/auth-method-localdb/auth-localdb.c:174
-msgid "failed to verify challenge"
-msgstr "Verifizierung der Challenge fehlgeschlagen"
+#: src/pam/auth-method-x509/auth-x509.c:104
+msgid "Specify X509 domain for this host"
+msgstr "Spezifiziere die X509 Domäne für dieses System"
 
-#: src/pam/auth-method-localdb/key-lookup.c:63
-#, c-format
-msgid "failed to construct key file path for serial number `%s': %s\n"
+#: src/pam/auth-support/getpin-cb.c:75
+msgid "PIN too short"
 msgstr ""
-"konnte Pfad fuer die Schlüsseldatei für die Seriennummer '%s' nicht "
-"konstruieren: %s\n"
 
-#: src/pam/auth-method-localdb/key-lookup.c:75
-#, c-format
-msgid "failed to retrieve key from key file `%s': %s\n"
-msgstr ""
-"Auslesen des Schlüssels aus der Schlüsseldatei '%s' fehlgeschlagen: %s\n"
+#: src/pam/auth-support/getpin-cb.c:228 src/pam/auth-support/getpin-cb.c:247
+msgid "Please enter the PIN:"
+msgstr "Bitte PIN eingeben:"
 
-#: src/pam/auth-method-localdb/key-lookup.c:84
+#: src/pam/pam_poldi.c:591
 #, c-format
-msgid "failed to convert key from `%s' into S-Expression: %s\n"
-msgstr ""
-"konnte Schlüssel aus '%s' nicht in eine S-Expression konvertieren: %s\n"
-
-#: src/pam/auth-support/getpin-cb.c:74 src/pam/auth-support/getpin-cb.c:75
-msgid "PIN too short"
-msgstr ""
+msgid "Insert authentication card for user `%s'"
+msgstr "Bitte Authentifikationskarte für Benutzer '%s' einlegen"
 
-#: src/pam/auth-support/getpin-cb.c:83
-msgid "PIN too long for buffer!"
-msgstr "PIN zu lang für Puffer"
+#: src/pam/pam_poldi.c:598
+msgid "Insert authentication card"
+msgstr "Bitte Authentifikationskarte einlegen"
 
-#: src/pam/auth-support/getpin-cb.c:204
+#: src/util/simpleparse.c:149
 #, c-format
-msgid "getpin_cb called with flags set in info string `%s'\n"
-msgstr "getpin-Callback mit nicht unterstützten Flags in '%s' aufgerufen\n"
+msgid "Please report bugs to <%s>.\n"
+msgstr "Bitte sende Fehlerberichte an <%s>.\n"
 
-#: src/pam/auth-support/getpin-cb.c:214
+#: src/util/simpleparse.c:308 src/util/simpleparse.c:597
 #, c-format
-msgid "frob_info_msg failed for info msg of size %u\n"
-msgstr "frob_info_msg fehlgeschlagen für eine Nachricht der Länge %u\n"
-
-#: src/pam/auth-support/getpin-cb.c:228 src/pam/auth-support/getpin-cb.c:247
-msgid "Please enter the PIN:"
-msgstr "Bitte PIN eingeben:"
+msgid "unknown option '%s'"
+msgstr "unbekannte Option '%s'"
 
-#: src/pam/auth-method-x509/dirmngr.c:153
+#: src/util/simpleparse.c:321 src/util/simpleparse.c:335
+#: src/util/simpleparse.c:352 src/util/simpleparse.c:378
 #, c-format
-msgid "ignored inquiry from dirmngr: `%s'"
-msgstr "ignorierte Anfrage von Dirmngr: '%s'"
+msgid "parse-callback returned error '%s' for argument '%s'"
+msgstr "parse-Callback hat Fehler '%s' für das Argument '%s' zurückgegeben"
 
-#: src/pam/auth-method-x509/dirmngr.c:157
+#: src/util/simpleparse.c:365 src/util/simpleparse.c:619
 #, c-format
-msgid "failed to send back empty value to dirmngr: %s"
-msgstr "zurücksenden eines leeren Werts an Dirmngr fehlgeschlagen: %s"
+msgid "missing required argument for '%s'"
+msgstr "fehlendes notwendiges Argument für '%s'"
 
-#: src/pam/auth-method-x509/dirmngr.c:162
+#: src/util/simpleparse.c:608 src/util/simpleparse.c:628
 #, c-format
-msgid "unsupported assuan inquiry `%s'"
-msgstr "nicht unterstützte Assuan Anfrage '%s'"
+msgid "too many arguments specified for option '%s'"
+msgstr "zu viele Argumente für Options '%s' angegeben"
 
-#: src/pam/auth-method-x509/dirmngr.c:258
-#, c-format
-msgid "failed to create new ksba certificate object: %s"
-msgstr "erzeugen eines neuen KSBA Zertifikatobjekts fehlgeschlagen: %s"
+#~ msgid "failed to generate challenge: %s"
+#~ msgstr "Generierung der Challenge fehlgeschlagen: %s"
 
-#: src/pam/auth-method-x509/auth-x509.c:103
-msgid "Specify local socket for dirmngr access"
-msgstr "Spezifiziert den lokalen Socket fuer Dirmngr Zugriff"
+#~ msgid "failed to retrieve challenge signature from card: %s"
+#~ msgstr "konnte Signatur der Challenge nicht von der Karte empfangen: %s"
 
-#: src/pam/auth-method-x509/auth-x509.c:105
-msgid "Specify X509 domain for this host"
-msgstr "Spezifiziere die X509 Domäne für dieses System"
+#~ msgid "failed to verify challenge"
+#~ msgstr "Verifizierung der Challenge fehlgeschlagen"
 
-#: src/pam/auth-method-x509/auth-x509.c:124
-#: src/pam/auth-method-x509/auth-x509.c:136
-#, c-format
-msgid "failed to duplicate %s (length: %i): %s"
-msgstr "konnte %s (Länge: %i) nicht duplizieren: %s"
+#~ msgid "failed to construct key file path for serial number `%s': %s\n"
+#~ msgstr ""
+#~ "konnte Pfad fuer die Schlüsseldatei für die Seriennummer '%s' nicht "
+#~ "konstruieren: %s\n"
 
-#: src/pam/auth-method-x509/auth-x509.c:168
-msgid "libksba did not return a proper S-Exp"
-msgstr "libksba gab keine gültige S-Expression zurück"
+#~ msgid "failed to retrieve key from key file `%s': %s\n"
+#~ msgstr ""
+#~ "Auslesen des Schlüssels aus der Schlüsseldatei '%s' fehlgeschlagen: %s\n"
 
-#: src/pam/auth-method-x509/auth-x509.c:177
-#, c-format
-msgid "failed to convert KSBA s-expression into s-expression object: %s"
-msgstr "konnte KSBA S-Expression nicht in S-Expression Objekt konvertieren: %s"
+#~ msgid "failed to convert key from `%s' into S-Expression: %s\n"
+#~ msgstr ""
+#~ "konnte Schlüssel aus '%s' nicht in eine S-Expression konvertieren: %s\n"
 
-#: src/pam/auth-method-x509/auth-x509.c:409
-msgid "failed to extract username from certificate"
-msgstr "konnte Benutzername nicht aus dem Zertifikat extrahieren: %s"
+#~ msgid "failed to duplicate %s (length: %i): %s"
+#~ msgstr "konnte %s (Länge: %i) nicht duplizieren: %s"
 
-#: src/pam/auth-method-x509/auth-x509.c:443
-msgid "invalid certificate URL on card"
-msgstr "ungültige Zertifikats URL auf der Karte"
+#~ msgid "libksba did not return a proper S-Exp"
+#~ msgstr "libksba gab keine gültige S-Expression zurück"
 
-#: src/pam/auth-method-x509/auth-x509.c:490
-msgid "x509 authentication method not properly configured"
-msgstr "X509 Authentifikationsmethode nicht richtig konfiguriert"
+#~ msgid "failed to convert KSBA s-expression into s-expression object: %s"
+#~ msgstr ""
+#~ "konnte KSBA S-Expression nicht in S-Expression Objekt konvertieren: %s"
 
-#: src/pam/auth-method-x509/auth-x509.c:504
-#, c-format
-msgid "public key url is '%s'"
-msgstr "URL des Öffentlichen Schlüssels ist '%s'"
+#~ msgid "failed to extract username from certificate"
+#~ msgstr "konnte Benutzername nicht aus dem Zertifikat extrahieren: %s"
 
-#: src/pam/auth-method-x509/auth-x509.c:512
-#, c-format
-msgid "failed to look up certificate `%s': %s"
-msgstr "nachschlagen des Zertifikats '%s' gescheitert: %s"
+#~ msgid "invalid certificate URL on card"
+#~ msgstr "ungültige Zertifikats URL auf der Karte"
 
-#: src/pam/auth-method-x509/auth-x509.c:578
-msgid "failed to verify challenge signature"
-msgstr "Verifizierung der Signatur der Challenge fehlgeschlagen"
+#~ msgid "x509 authentication method not properly configured"
+#~ msgstr "X509 Authentifikationsmethode nicht richtig konfiguriert"
 
-#: src/pam/auth-method-x509/auth-x509.c:598
-#, c-format
-msgid "failure: %s"
-msgstr "fehlgeschlagen: %s"
+#~ msgid "failed to look up certificate `%s': %s"
+#~ msgstr "nachschlagen des Zertifikats '%s' gescheitert: %s"
 
-#: src/pam/auth-method-x509/auth-x509.c:600
-msgid "success"
-msgstr "Erfolg"
+#~ msgid "failed to verify challenge signature"
+#~ msgstr "Verifizierung der Signatur der Challenge fehlgeschlagen"
 
-#: 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 "Konnte %s nicht duplizieren: %s"
+#~ msgid "failure: %s"
+#~ msgstr "fehlgeschlagen: %s"
 
-#: src/pam/pam_poldi.c:184
-#, c-format
-msgid "unknown authentication method '%s'"
-msgstr "unbekannte Authentifikationsmethode '%s'"
+#~ msgid "failed to send back empty value to dirmngr: %s"
+#~ msgstr "zurücksenden eines leeren Werts an Dirmngr fehlgeschlagen: %s"
 
-#: src/pam/pam_poldi.c:312
-#, c-format
-msgid "asprintf() failed in modify_environment_putenv(): %s"
-msgstr "asprintf() in modify_environment_putenv() fehlgeschlagen: %s"
+#~ msgid "unsupported assuan inquiry `%s'"
+#~ msgstr "nicht unterstützte Assuan Anfrage '%s'"
 
-#: src/pam/pam_poldi.c:321
-#, c-format
-msgid "pam_putenv() failed in modify_environment_putenv(): %s"
-msgstr "pam_putenv() in modify_environment_putenv() fehlgeschlagen: %s"
+#~ msgid "failed to create new ksba certificate object: %s"
+#~ msgstr "erzeugen eines neuen KSBA Zertifikatobjekts fehlgeschlagen: %s"
 
-#: src/pam/pam_poldi.c:406
-#, c-format
-msgid "failed to parse configuration file '%s': %s"
-msgstr "Lesen der Konfigurationsdatei '%s' fehlgeschlagen: %s"
+#~ msgid "PIN too long for buffer!"
+#~ msgstr "PIN zu lang für Puffer"
 
-#: src/pam/pam_poldi.c:419
-#, c-format
-msgid "failed to parse PAM argument vector: %s"
-msgstr "Auswertung des PAM Argumentvektors fehlgeschlagen: %s"
+#~ msgid "getpin_cb called with flags set in info string `%s'\n"
+#~ msgstr "getpin-Callback mit nicht unterstützten Flags in '%s' aufgerufen\n"
 
-#: src/pam/pam_poldi.c:448
-msgid "no authentication method specified"
-msgstr "Keine Authentifikationsmethode spezifiziert"
+#~ msgid "frob_info_msg failed for info msg of size %u\n"
+#~ msgstr "frob_info_msg fehlgeschlagen für eine Nachricht der Länge %u\n"
 
-#: src/pam/pam_poldi.c:462
-#, c-format
-msgid "using authentication method `%s'"
-msgstr "benutze Authentifikationsmethode '%s'"
+#~ msgid "failed to duplicate %s: %s"
+#~ msgstr "Konnte %s nicht duplizieren: %s"
 
-#: src/pam/pam_poldi.c:474
-#, c-format
-msgid "failed to initialize authentication method %i: %s"
-msgstr "Initialisierung der Authentifikationsmethode %i fehlgeschlagen: %s"
+#~ msgid "unknown authentication method '%s'"
+#~ msgstr "unbekannte Authentifikationsmethode '%s'"
 
-#: src/pam/pam_poldi.c:488
-#, c-format
-msgid ""
-"failed to initialize parsing of configuration file for authentication method "
-"%s: %s"
-msgstr ""
-"konnte Auswertung der Konfigurationsdatei für die Authentifikationsmethode "
-"%s nicht beginnen: %s"
+#~ msgid "asprintf() failed in modify_environment_putenv(): %s"
+#~ msgstr "asprintf() in modify_environment_putenv() fehlgeschlagen: %s"
 
-#: src/pam/pam_poldi.c:509
-#, c-format
-msgid "failed to parse configuration for authentication method %i: %s"
-msgstr ""
-"konnte Konfigurationsdatei für die Authentifikationsmethode %i nicht lesen: "
-"%s"
+#~ msgid "pam_putenv() failed in modify_environment_putenv(): %s"
+#~ msgstr "pam_putenv() in modify_environment_putenv() fehlgeschlagen: %s"
 
-#: src/pam/pam_poldi.c:528
-msgid "failed to retrieve PAM conversation structure"
-msgstr "konnte PAM conversation-structure nicht empfangen"
+#~ msgid "failed to parse configuration file '%s': %s"
+#~ msgstr "Lesen der Konfigurationsdatei '%s' fehlgeschlagen: %s"
 
-#: src/pam/pam_poldi.c:546
-#, c-format
-msgid "failed to retrieve username from PAM: %s"
-msgstr "konnte Benutzername nicht von PAM empfangen: %s"
+#~ msgid "failed to parse PAM argument vector: %s"
+#~ msgstr "Auswertung des PAM Argumentvektors fehlgeschlagen: %s"
 
-#: src/pam/pam_poldi.c:570
-#, c-format
-msgid "Waiting for card for user `%s'..."
-msgstr "Warte auf Karte für Benutzer '%s'..."
+#~ msgid "no authentication method specified"
+#~ msgstr "Keine Authentifikationsmethode spezifiziert"
 
-#: src/pam/pam_poldi.c:572
-#, c-format
-msgid "Insert authentication card for user `%s'"
-msgstr "Bitte Authentifikationskarte für Benutzer '%s' einlegen"
+#~ msgid "using authentication method `%s'"
+#~ msgstr "benutze Authentifikationsmethode '%s'"
 
-#: src/pam/pam_poldi.c:577
-msgid "Waiting for card..."
-msgstr "Warte auf Karte..."
+#~ msgid "failed to initialize authentication method %i: %s"
+#~ msgstr "Initialisierung der Authentifikationsmethode %i fehlgeschlagen: %s"
 
-#: src/pam/pam_poldi.c:579
-msgid "Insert authentication card"
-msgstr "Bitte Authentifikationskarte einlegen"
+#~ msgid ""
+#~ "failed to initialize parsing of configuration file for authentication "
+#~ "method %s: %s"
+#~ msgstr ""
+#~ "konnte Auswertung der Konfigurationsdatei für die "
+#~ "Authentifikationsmethode %s nicht beginnen: %s"
 
-#: src/pam/pam_poldi.c:586
-#, c-format
-msgid "failed to wait for card insertion: %s"
-msgstr "Warten auf Karte fehlgeschlagen: %s"
+#~ msgid "failed to parse configuration for authentication method %i: %s"
+#~ msgstr ""
+#~ "konnte Konfigurationsdatei für die Authentifikationsmethode %i nicht "
+#~ "lesen: %s"
 
-#: src/pam/pam_poldi.c:599
-#, c-format
-msgid "connected to card; serial number is: %s"
-msgstr "Verbunden zur Karte; Seriennummer ist: '%s'"
+#~ msgid "failed to retrieve PAM conversation structure"
+#~ msgstr "konnte PAM conversation-structure nicht empfangen"
 
-#: src/pam/pam_poldi.c:637
-#, c-format
-msgid "authentication failed: %s"
-msgstr "Authentifikation fehlgeschlagen: %s"
+#, fuzzy
+#~ msgid "Can't retrieve username from PAM"
+#~ msgstr "konnte Benutzername nicht von PAM empfangen: %s"
 
-#: src/pam/pam_poldi.c:641
-msgid "authentication succeeded"
-msgstr "Authentifikation erfolgreich"
+#~ msgid "failed to wait for card insertion: %s"
+#~ msgstr "Warten auf Karte fehlgeschlagen: %s"
 
-#: src/scd/scd.c:133
-msgid "malformed GPG_AGENT_INFO environment variable"
-msgstr "syntaktisch ungültige GPG_AGENT_INFO Umgebungsvariable"
+#~ msgid "authentication failed: %s"
+#~ msgstr "Authentifikation fehlgeschlagen: %s"
 
-#: src/scd/scd.c:146
-#, c-format
-msgid "agent protocol version %d is not supported"
-msgstr "Agent-Protokoll Version %d ist nicht unterstützt"
+#~ msgid "error flushing pending output: %s"
+#~ msgstr "konnte wartende Ausgabe nicht schreiben: %s"
 
-#: src/scd/scd.c:197 src/scd/scd.c:941
-#, c-format
-msgid "warning: can't store getinfo data: %s"
-msgstr "Warnung: konnte GETINFO Daten nicht speichern: %s"
+#, fuzzy
+#~ msgid "could not spawn scdaemon: %s"
+#~ msgstr "Verbinden zu Scdaemon fehlgeschlagen: %s"
 
-#: src/scd/scd.c:295
-#, c-format
-msgid "connected to system scdaemon through socket '%s'"
-msgstr "über den Socket '%s' zu System Scdaemon verbunden"
+#~ msgid "warning: can't store getinfo data: %s"
+#~ msgstr "Warnung: konnte GETINFO Daten nicht speichern: %s"
 
-#: src/scd/scd.c:315
-#, c-format
-msgid "got scdaemon socket name from gpg-agent, connected to socket '%s'"
-msgstr ""
-"Scdaemon Socket Namen über GPG-Agent empfangen, verbunden mit Socket '%s'"
+#~ msgid "ignored inquiry from dirmngr: `%s'"
+#~ msgstr "ignorierte Anfrage von Dirmngr: '%s'"
 
-#: src/scd/scd.c:336
-msgid "no running scdaemon - starting one"
-msgstr "Kein aktiver Scdaemon - starte einen"
+#~ msgid "public key url is '%s'"
+#~ msgstr "URL des Öffentlichen Schlüssels ist '%s'"
 
-#: src/scd/scd.c:342
-#, c-format
-msgid "error flushing pending output: %s"
-msgstr "konnte wartende Ausgabe nicht schreiben: %s"
+#~ msgid "success"
+#~ msgstr "Erfolg"
 
-#: src/scd/scd.c:385
-#, c-format
-msgid "spawned a new scdaemon (path: '%s')"
-msgstr "neuer Scdaemon gestartet (Pfad: '%s')"
+#~ msgid "Waiting for card for user `%s'..."
+#~ msgstr "Warte auf Karte für Benutzer '%s'..."
 
-#: src/scd/scd.c:392
-#, c-format
-msgid "could not connect to any scdaemon: %s"
-msgstr "Verbinden zu Scdaemon fehlgeschlagen: %s"
+#~ msgid "Waiting for card..."
+#~ msgstr "Warte auf Karte..."
 
-#: src/scd/scd.c:415
-msgid "connection to scdaemon established"
-msgstr "Verbindung zu Scdaemon hergestellt"
+#~ msgid "connected to card; serial number is: %s"
+#~ msgstr "Verbunden zur Karte; Seriennummer ist: '%s'"
 
-#: src/util/simpleparse.c:149
-#, c-format
-msgid "Please report bugs to <%s>.\n"
-msgstr "Bitte sende Fehlerberichte an <%s>.\n"
+#~ msgid "authentication succeeded"
+#~ msgstr "Authentifikation erfolgreich"
 
-#: src/util/simpleparse.c:308 src/util/simpleparse.c:597
-#, c-format
-msgid "unknown option '%s'"
-msgstr "unbekannte Option '%s'"
+#~ msgid "malformed GPG_AGENT_INFO environment variable"
+#~ msgstr "syntaktisch ungültige GPG_AGENT_INFO Umgebungsvariable"
 
-#: src/util/simpleparse.c:321 src/util/simpleparse.c:335
-#: src/util/simpleparse.c:352 src/util/simpleparse.c:378
-#, c-format
-msgid "parse-callback returned error '%s' for argument '%s'"
-msgstr "parse-Callback hat Fehler '%s' für das Argument '%s' zurückgegeben"
+#~ msgid "agent protocol version %d is not supported"
+#~ msgstr "Agent-Protokoll Version %d ist nicht unterstützt"
 
-#: src/util/simpleparse.c:365 src/util/simpleparse.c:619
-#, c-format
-msgid "missing required argument for '%s'"
-msgstr "fehlendes notwendiges Argument für '%s'"
+#~ msgid "connected to system scdaemon through socket '%s'"
+#~ msgstr "über den Socket '%s' zu System Scdaemon verbunden"
 
-#: src/util/simpleparse.c:608 src/util/simpleparse.c:628
-#, c-format
-msgid "too many arguments specified for option '%s'"
-msgstr "zu viele Argumente für Options '%s' angegeben"
+#~ msgid "got scdaemon socket name from gpg-agent, connected to socket '%s'"
+#~ msgstr ""
+#~ "Scdaemon Socket Namen über GPG-Agent empfangen, verbunden mit Socket '%s'"
+
+#~ msgid "no running scdaemon - starting one"
+#~ msgstr "Kein aktiver Scdaemon - starte einen"
+
+#~ msgid "spawned a new scdaemon (path: '%s')"
+#~ msgstr "neuer Scdaemon gestartet (Pfad: '%s')"
+
+#~ msgid "connection to scdaemon established"
+#~ msgstr "Verbindung zu Scdaemon hergestellt"
 
 #~ msgid "invalid PIN"
 #~ msgstr "ungültige PIN"
diff --git a/po/poldi.pot b/po/poldi.pot
index 241e5bc..3675c24 100644
--- a/po/poldi.pot
+++ b/po/poldi.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: poldi 0.4.2.git\n"
 "Report-Msgid-Bugs-To: gnupg-devel at gnupg.org\n"
-"POT-Creation-Date: 2015-12-18 04:31+0000\n"
+"POT-Creation-Date: 2016-11-15 13:02+0900\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -17,303 +17,45 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: src/pam/auth-method-localdb/auth-localdb.c:109
+#: src/pam/auth-method-localdb/auth-localdb.c:108
 msgid "Please enter username: "
 msgstr ""
 
-#: src/pam/auth-method-localdb/auth-localdb.c:121
-#: src/pam/auth-method-localdb/auth-localdb.c:124
+#: src/pam/auth-method-localdb/auth-localdb.c:123
 #, c-format
 msgid "Trying authentication as user `%s'..."
 msgstr ""
 
-#: src/pam/auth-method-localdb/auth-localdb.c:133
-#: src/pam/auth-method-localdb/auth-localdb.c:136
+#: src/pam/auth-method-localdb/auth-localdb.c:135
 #, c-format
 msgid "Serial number %s is not associated with user %s"
 msgstr ""
 
-#: 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: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:174
-msgid "failed to verify challenge"
-msgstr ""
-
-#: src/pam/auth-method-localdb/key-lookup.c:63
-#, c-format
-msgid "failed to construct key file path for serial number `%s': %s\n"
-msgstr ""
-
-#: src/pam/auth-method-localdb/key-lookup.c:75
-#, c-format
-msgid "failed to retrieve key from key file `%s': %s\n"
+#: src/pam/auth-method-x509/auth-x509.c:102
+msgid "Specify local socket for dirmngr access"
 msgstr ""
 
-#: src/pam/auth-method-localdb/key-lookup.c:84
-#, c-format
-msgid "failed to convert key from `%s' into S-Expression: %s\n"
+#: src/pam/auth-method-x509/auth-x509.c:104
+msgid "Specify X509 domain for this host"
 msgstr ""
 
-#: src/pam/auth-support/getpin-cb.c:74 src/pam/auth-support/getpin-cb.c:75
+#: src/pam/auth-support/getpin-cb.c:75
 msgid "PIN too short"
 msgstr ""
 
-#: src/pam/auth-support/getpin-cb.c:83
-msgid "PIN too long for buffer!"
-msgstr ""
-
-#: src/pam/auth-support/getpin-cb.c:204
-#, c-format
-msgid "getpin_cb called with flags set in info string `%s'\n"
-msgstr ""
-
-#: src/pam/auth-support/getpin-cb.c:214
-#, c-format
-msgid "frob_info_msg failed for info msg of size %u\n"
-msgstr ""
-
 #: src/pam/auth-support/getpin-cb.c:228 src/pam/auth-support/getpin-cb.c:247
 msgid "Please enter the PIN:"
 msgstr ""
 
-#: src/pam/auth-method-x509/dirmngr.c:153
-#, c-format
-msgid "ignored inquiry from dirmngr: `%s'"
-msgstr ""
-
-#: src/pam/auth-method-x509/dirmngr.c:157
-#, c-format
-msgid "failed to send back empty value to dirmngr: %s"
-msgstr ""
-
-#: src/pam/auth-method-x509/dirmngr.c:162
-#, c-format
-msgid "unsupported assuan inquiry `%s'"
-msgstr ""
-
-#: src/pam/auth-method-x509/dirmngr.c:258
-#, c-format
-msgid "failed to create new ksba certificate object: %s"
-msgstr ""
-
-#: src/pam/auth-method-x509/auth-x509.c:103
-msgid "Specify local socket for dirmngr access"
-msgstr ""
-
-#: src/pam/auth-method-x509/auth-x509.c:105
-msgid "Specify X509 domain for this host"
-msgstr ""
-
-#: src/pam/auth-method-x509/auth-x509.c:124
-#: src/pam/auth-method-x509/auth-x509.c:136
-#, c-format
-msgid "failed to duplicate %s (length: %i): %s"
-msgstr ""
-
-#: src/pam/auth-method-x509/auth-x509.c:168
-msgid "libksba did not return a proper S-Exp"
-msgstr ""
-
-#: src/pam/auth-method-x509/auth-x509.c:177
-#, c-format
-msgid "failed to convert KSBA s-expression into s-expression object: %s"
-msgstr ""
-
-#: src/pam/auth-method-x509/auth-x509.c:409
-msgid "failed to extract username from certificate"
-msgstr ""
-
-#: src/pam/auth-method-x509/auth-x509.c:443
-msgid "invalid certificate URL on card"
-msgstr ""
-
-#: src/pam/auth-method-x509/auth-x509.c:490
-msgid "x509 authentication method not properly configured"
-msgstr ""
-
-#: src/pam/auth-method-x509/auth-x509.c:504
-#, c-format
-msgid "public key url is '%s'"
-msgstr ""
-
-#: src/pam/auth-method-x509/auth-x509.c:512
-#, c-format
-msgid "failed to look up certificate `%s': %s"
-msgstr ""
-
-#: src/pam/auth-method-x509/auth-x509.c:578
-msgid "failed to verify challenge signature"
-msgstr ""
-
-#: src/pam/auth-method-x509/auth-x509.c:598
-#, c-format
-msgid "failure: %s"
-msgstr ""
-
-#: src/pam/auth-method-x509/auth-x509.c:600
-msgid "success"
-msgstr ""
-
-#: 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:184
-#, c-format
-msgid "unknown authentication method '%s'"
-msgstr ""
-
-#: src/pam/pam_poldi.c:312
-#, c-format
-msgid "asprintf() failed in modify_environment_putenv(): %s"
-msgstr ""
-
-#: 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:448
-msgid "no authentication method specified"
-msgstr ""
-
-#: src/pam/pam_poldi.c:462
-#, c-format
-msgid "using authentication method `%s'"
-msgstr ""
-
-#: src/pam/pam_poldi.c:474
-#, c-format
-msgid "failed to initialize authentication method %i: %s"
-msgstr ""
-
-#: 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:509
-#, c-format
-msgid "failed to parse configuration for authentication method %i: %s"
-msgstr ""
-
-#: src/pam/pam_poldi.c:528
-msgid "failed to retrieve PAM conversation structure"
-msgstr ""
-
-#: src/pam/pam_poldi.c:546
-#, c-format
-msgid "failed to retrieve username from PAM: %s"
-msgstr ""
-
-#: src/pam/pam_poldi.c:570
-#, c-format
-msgid "Waiting for card for user `%s'..."
-msgstr ""
-
-#: src/pam/pam_poldi.c:572
+#: src/pam/pam_poldi.c:591
 #, 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:579
+#: src/pam/pam_poldi.c:598
 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:599
-#, c-format
-msgid "connected to card; serial number is: %s"
-msgstr ""
-
-#: src/pam/pam_poldi.c:637
-#, c-format
-msgid "authentication failed: %s"
-msgstr ""
-
-#: src/pam/pam_poldi.c:641
-msgid "authentication succeeded"
-msgstr ""
-
-#: src/scd/scd.c:133
-msgid "malformed GPG_AGENT_INFO environment variable"
-msgstr ""
-
-#: src/scd/scd.c:146
-#, c-format
-msgid "agent protocol version %d is not supported"
-msgstr ""
-
-#: 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:295
-#, c-format
-msgid "connected to system scdaemon through socket '%s'"
-msgstr ""
-
-#: src/scd/scd.c:315
-#, c-format
-msgid "got scdaemon socket name from gpg-agent, connected to socket '%s'"
-msgstr ""
-
-#: src/scd/scd.c:336
-msgid "no running scdaemon - starting one"
-msgstr ""
-
-#: src/scd/scd.c:342
-#, c-format
-msgid "error flushing pending output: %s"
-msgstr ""
-
-#: src/scd/scd.c:385
-#, c-format
-msgid "spawned a new scdaemon (path: '%s')"
-msgstr ""
-
-#: src/scd/scd.c:392
-#, c-format
-msgid "could not connect to any scdaemon: %s"
-msgstr ""
-
-#: src/scd/scd.c:415
-msgid "connection to scdaemon established"
-msgstr ""
-
 #: src/util/simpleparse.c:149
 #, c-format
 msgid "Please report bugs to <%s>.\n"

commit 6091c0af2537ff100dcbbd66029d2302a7d5c5c1
Author: NIIBE Yutaka <gniibe at fsij.org>
Date:   Tue Nov 15 13:03:15 2016 +0900

    Don't translate logged message.
    
    * src/pam/auth-method-localdb/auth-localdb.c,
    src/pam/auth-method-localdb/key-lookup.c,
    src/pam/auth-method-x509/auth-x509.c, src/pam/auth-method-x509/dirmngr.c,
    src/pam/auth-support/getpin-cb.c, src/pam/pam_poldi.c: Don't translate.
    
    --
    
    Signed-off-by: NIIBE Yutaka <gniibe at fsij.org>

diff --git a/src/pam/auth-method-localdb/auth-localdb.c b/src/pam/auth-method-localdb/auth-localdb.c
index 3081737..d73808d 100644
--- a/src/pam/auth-method-localdb/auth-localdb.c
+++ b/src/pam/auth-method-localdb/auth-localdb.c
@@ -148,7 +148,7 @@ auth_method_localdb_auth_do (poldi_ctx_t ctx,
   if (err)
     {
       log_msg_error (ctx->loghandle,
-		     _("failed to generate challenge: %s"),
+		     "failed to generate challenge: %s",
 		     gpg_strerror (err));
       goto out;
     }
@@ -160,7 +160,7 @@ auth_method_localdb_auth_do (poldi_ctx_t ctx,
   if (err)
     {
       log_msg_error (ctx->loghandle,
-		     _("failed to retrieve challenge signature from card: %s"),
+		     "failed to retrieve challenge signature from card: %s",
 		     gpg_strerror (err));
       goto out;
     }
@@ -169,8 +169,7 @@ auth_method_localdb_auth_do (poldi_ctx_t ctx,
   err = challenge_verify (key, challenge, challenge_n, response, response_n);
   if (err)
     {
-      log_msg_error (ctx->loghandle,
-		     _("failed to verify challenge"));
+      log_msg_error (ctx->loghandle, "failed to verify challenge");
       goto out;
     }
 
diff --git a/src/pam/auth-method-localdb/key-lookup.c b/src/pam/auth-method-localdb/key-lookup.c
index c7a8840..20fce4a 100644
--- a/src/pam/auth-method-localdb/key-lookup.c
+++ b/src/pam/auth-method-localdb/key-lookup.c
@@ -60,8 +60,8 @@ key_lookup_by_serialno (poldi_ctx_t ctx, const char *serialno, gcry_sexp_t *key)
   if (err)
     {
       log_msg_error (ctx->loghandle,
-		     _("failed to construct key file path "
-		       "for serial number `%s': %s\n"),
+		     "failed to construct key file path "
+		     "for serial number `%s': %s\n",
 		     serialno, gpg_strerror (err));
       goto out;
     }
@@ -72,7 +72,7 @@ key_lookup_by_serialno (poldi_ctx_t ctx, const char *serialno, gcry_sexp_t *key)
   if (err)
     {
       log_msg_error (ctx->loghandle,
-		     _("failed to retrieve key from key file `%s': %s\n"),
+		     "failed to retrieve key from key file `%s': %s\n",
 		     key_path, gpg_strerror (err));
       goto out;
     }
@@ -81,8 +81,8 @@ key_lookup_by_serialno (poldi_ctx_t ctx, const char *serialno, gcry_sexp_t *key)
   if (err)
     {
       log_msg_error (ctx->loghandle,
-		     _("failed to convert key "
-		       "from `%s' into S-Expression: %s\n"),
+		     "failed to convert key "
+		     "from `%s' into S-Expression: %s\n",
 		     key_path, gpg_strerror (err));
       goto out;
     }
diff --git a/src/pam/auth-method-x509/auth-x509.c b/src/pam/auth-method-x509/auth-x509.c
index 3d7c0f2..fafdc9e 100644
--- a/src/pam/auth-method-x509/auth-x509.c
+++ b/src/pam/auth-method-x509/auth-x509.c
@@ -120,7 +120,7 @@ auth_method_x509_parsecb (void *opaque, simpleparse_opt_spec_t spec, const char
       if (!x509_ctx->x509_domain)
 	{
 	  log_msg_error (ctx->loghandle,
-			 _("failed to duplicate %s (length: %i): %s"),
+			 "failed to duplicate %s (length: %i): %s",
 			 "x509-domain option string",
 			 strlen (arg), strerror (errno));
 	  err = gpg_error_from_syserror ();
@@ -132,7 +132,7 @@ auth_method_x509_parsecb (void *opaque, simpleparse_opt_spec_t spec, const char
       if (!x509_ctx->dirmngr_socket)
 	{
 	  log_msg_error (ctx->loghandle,
-			 _("failed to duplicate %s (length: %i): %s"),
+			 "failed to duplicate %s (length: %i): %s",
 			 "dirmngr-socket option string",
 			 strlen (arg), strerror (errno));
 	  err = gpg_error_from_syserror ();
@@ -164,7 +164,7 @@ extract_public_key_from_cert (poldi_ctx_t ctx, ksba_cert_t cert, gcry_sexp_t *pu
   if (!sexp_len)
     {
       log_msg_error (ctx->loghandle,
-		     _("libksba did not return a proper S-Exp"));
+		     "libksba did not return a proper S-Exp");
       err = GPG_ERR_BUG;
       goto out;
     }
@@ -173,7 +173,7 @@ extract_public_key_from_cert (poldi_ctx_t ctx, ksba_cert_t cert, gcry_sexp_t *pu
   if (err)
     {
       log_msg_error (ctx->loghandle,
-		     _("failed to convert KSBA s-expression into s-expression object: %s"),
+		     "failed to convert KSBA s-expression into s-expression object: %s",
 		     gpg_strerror (err));
       goto out;
     }
@@ -405,7 +405,7 @@ extract_username_from_cert (poldi_ctx_t ctx, ksba_cert_t cert,
   else
     {
       log_msg_error (ctx->loghandle,
-		     _("failed to extract username from certificate"));
+		     "failed to extract username from certificate");
       err = gpg_error (GPG_ERR_UNSUPPORTED_CERT);
     }
 
@@ -439,7 +439,7 @@ lookup_cert (poldi_ctx_t ctx, dirmngr_ctx_t dirmngr, const char *url,
   else
     {
       log_msg_error (ctx->loghandle,
-		     _("invalid certificate URL on card"));
+		     "invalid certificate URL on card");
       err = GPG_ERR_INV_CARD;
     }
   if (err)
@@ -486,7 +486,7 @@ auth_method_x509_auth_do (poldi_ctx_t ctx, x509_ctx_t cookie,
     {
       err = gpg_error (GPG_ERR_CONFIGURATION);
       log_msg_error (ctx->loghandle,
-		     _("x509 authentication method not properly configured"));
+		     "x509 authentication method not properly configured");
       goto out;
     }
 
@@ -508,7 +508,7 @@ auth_method_x509_auth_do (poldi_ctx_t ctx, x509_ctx_t cookie,
   if (err)
     {
       log_msg_error (ctx->loghandle,
-		     _("failed to look up certificate `%s': %s"),
+		     "failed to look up certificate `%s': %s",
 		     ctx->cardinfo.pubkey_url, gpg_strerror (err));
       goto out;
     }
@@ -548,8 +548,7 @@ auth_method_x509_auth_do (poldi_ctx_t ctx, x509_ctx_t cookie,
   err = challenge_generate (&challenge, &challenge_n);
   if (err)
     {
-      log_msg_error (ctx->loghandle,
-		     _("failed to generate challenge: %s"),
+      log_msg_error (ctx->loghandle, "failed to generate challenge: %s",
 		     gpg_strerror (err));
       goto out;
     }
@@ -561,7 +560,7 @@ auth_method_x509_auth_do (poldi_ctx_t ctx, x509_ctx_t cookie,
   if (err)
     {
       log_msg_error (ctx->loghandle,
-		     _("failed to retrieve challenge signature from card: %s"),
+		     "failed to retrieve challenge signature from card: %s",
 		     gpg_strerror (err));
       goto out;
     }
@@ -573,8 +572,7 @@ auth_method_x509_auth_do (poldi_ctx_t ctx, x509_ctx_t cookie,
 			      response, response_n);
   if (err)
     {
-      log_msg_error (ctx->loghandle,
-		     _("failed to verify challenge signature"));
+      log_msg_error (ctx->loghandle, "failed to verify challenge signature");
       goto out;
     }
 
@@ -594,7 +592,7 @@ auth_method_x509_auth_do (poldi_ctx_t ctx, x509_ctx_t cookie,
 
   /* Log result.  */
   if (err)
-    log_msg_error (ctx->loghandle, _("failure: %s"), gpg_strerror (err));
+    log_msg_error (ctx->loghandle, "failure: %s", gpg_strerror (err));
   else if (ctx->debug)
     log_msg_debug (ctx->loghandle, "success");
 
diff --git a/src/pam/auth-method-x509/dirmngr.c b/src/pam/auth-method-x509/dirmngr.c
index a95bf71..7c5ad70 100644
--- a/src/pam/auth-method-x509/dirmngr.c
+++ b/src/pam/auth-method-x509/dirmngr.c
@@ -154,12 +154,12 @@ inq_cert (void *opaque, const char *line)
       err = assuan_send_data (parm->ctx->assuan, NULL, 0);
       if (err)
 	log_msg_error (parm->ctx->log_handle,
-		       _("failed to send back empty value to dirmngr: %s"),
+		       "failed to send back empty value to dirmngr: %s",
 		       gpg_strerror (err));
     }
   else
     {
-      log_msg_error (parm->ctx->log_handle, _("unsupported assuan inquiry `%s'"), line);
+      log_msg_error (parm->ctx->log_handle, "unsupported assuan inquiry `%s'", line);
       err = gpg_error (GPG_ERR_ASS_UNKNOWN_INQUIRE);
       /* Note that this error will let assuan_transact terminate
          immediately instead of return the error to the caller.  It is
@@ -255,7 +255,7 @@ lookup_cb (void *opaque, const void *buffer, size_t length)
       if (rc)
 	{
 	  log_msg_error (parm->ctx->log_handle,
-			 _("failed to create new ksba certificate object: %s"),
+			 "failed to create new ksba certificate object: %s",
 			 gpg_strerror (rc));
 	  /* FIXME: better error handling?  -mo */
 	}
diff --git a/src/pam/auth-support/getpin-cb.c b/src/pam/auth-support/getpin-cb.c
index c5d7ba8..d06c50f 100644
--- a/src/pam/auth-support/getpin-cb.c
+++ b/src/pam/auth-support/getpin-cb.c
@@ -71,7 +71,7 @@ query_user (poldi_ctx_t ctx, const char *info, char *pin, size_t pin_size)
 
       if (strlen (buffer) < 6)	/* FIXME? is it really minimum of 6 bytes? */
 	{
-	  log_msg_error (ctx->loghandle, _("PIN too short"));
+	  log_msg_error (ctx->loghandle, "PIN too short");
 	  conv_tell (ctx->conv, "%s", _("PIN too short"));
 	}
       else
@@ -80,7 +80,7 @@ query_user (poldi_ctx_t ctx, const char *info, char *pin, size_t pin_size)
 
   if (strlen (buffer) >= pin_size)
     {
-      log_msg_error (ctx->loghandle, _("PIN too long for buffer!"));
+      log_msg_error (ctx->loghandle, "PIN too long for buffer!");
       rc = gpg_error (GPG_ERR_INV_DATA); /* ? */
       goto out;
     }
@@ -201,7 +201,7 @@ getpin_cb (void *opaque, const char *info, char *buf, size_t maxbuf)
 	      /* Weird that we received flags - they are neither expected nor
 		 implemented here.  */
 	      log_msg_error (ctx->loghandle,
-			     _("getpin_cb called with flags set in info string `%s'\n"),
+			     "getpin_cb called with flags set in info string `%s'\n",
 			     info);
 	      err = gpg_error (GPG_ERR_INV_VALUE); /* FIXME? */
 	      goto out;
@@ -211,7 +211,7 @@ getpin_cb (void *opaque, const char *info, char *buf, size_t maxbuf)
       if (err)
 	{
 	  log_msg_error (ctx->loghandle,
-			 _("frob_info_msg failed for info msg of size %u\n"),
+			 "frob_info_msg failed for info msg of size %u\n",
 			 (unsigned int) strlen (info));
 	  goto out;
 	}
diff --git a/src/pam/pam_poldi.c b/src/pam/pam_poldi.c
index 5992e5c..cb4cb3e 100644
--- a/src/pam/pam_poldi.c
+++ b/src/pam/pam_poldi.c
@@ -140,7 +140,7 @@ pam_poldi_options_cb (void *cookie, simpleparse_opt_spec_t spec, const char *arg
 	{
 	  err = gpg_error_from_errno (errno);
 	  log_msg_error (ctx->loghandle,
-			 _("failed to duplicate %s: %s"),
+			 "failed to duplicate %s: %s",
 			 "logfile name", gpg_strerror (err));
 	}
     }
@@ -153,7 +153,7 @@ pam_poldi_options_cb (void *cookie, simpleparse_opt_spec_t spec, const char *arg
 	{
 	  err = gpg_error_from_errno (errno);
 	  log_msg_error (ctx->loghandle,
-			 _("failed to duplicate %s: %s"),
+			 "failed to duplicate %s: %s",
 			 "scdaemon program name",
 			 gpg_strerror (err));
 	}
@@ -167,7 +167,7 @@ pam_poldi_options_cb (void *cookie, simpleparse_opt_spec_t spec, const char *arg
 	{
 	  err = gpg_error_from_errno (errno);
 	  log_msg_error (ctx->loghandle,
-			 _("failed to duplicate %s: %s"),
+			 "failed to duplicate %s: %s",
 			 "scdaemon options name",
 			 gpg_strerror (err));
 	}
@@ -182,7 +182,7 @@ pam_poldi_options_cb (void *cookie, simpleparse_opt_spec_t spec, const char *arg
       else
 	{
 	  log_msg_error (ctx->loghandle,
-			 _("unknown authentication method '%s'"),
+			 "unknown authentication method '%s'",
 			 arg);
 	  err = GPG_ERR_INV_VALUE;
 	}
@@ -310,7 +310,7 @@ modify_environment_putenv (pam_handle_t *pam_handle, poldi_ctx_t ctx,
   if (ret < 0)
     {
       log_msg_error (ctx->loghandle,
-		     _("asprintf() failed in modify_environment_putenv(): %s"),
+		     "asprintf() failed in modify_environment_putenv(): %s",
 		     errno);
       return;
     }
@@ -319,7 +319,7 @@ modify_environment_putenv (pam_handle_t *pam_handle, poldi_ctx_t ctx,
   if (ret != PAM_SUCCESS)
     {
       log_msg_error (ctx->loghandle,
-		     _("pam_putenv() failed in modify_environment_putenv(): %s"),
+		     "pam_putenv() failed in modify_environment_putenv(): %s",
 		     pam_strerror (pam_handle, ret));
     }
   free (str);
@@ -404,7 +404,7 @@ pam_sm_authenticate (pam_handle_t *pam_handle,
   if (err)
     {
       log_msg_error (ctx->loghandle,
-		     _("failed to parse configuration file '%s': %s"),
+		     "failed to parse configuration file '%s': %s",
 		     POLDI_CONF_FILE,
 		     gpg_strerror (err));
       goto out;
@@ -417,7 +417,7 @@ pam_sm_authenticate (pam_handle_t *pam_handle,
       if (err)
 	{
 	  log_msg_error (ctx->loghandle,
-			 _("failed to parse PAM argument vector: %s"),
+			 "failed to parse PAM argument vector: %s",
 			 gpg_strerror (err));
 	  goto out;
 	}
@@ -446,7 +446,7 @@ pam_sm_authenticate (pam_handle_t *pam_handle,
   if (ctx->auth_method < 0)
     {
       log_msg_error (ctx->loghandle,
-		     _("no authentication method specified"));
+		     "no authentication method specified");
       err = GPG_ERR_CONFIGURATION;
       goto out;
     }
@@ -460,7 +460,7 @@ pam_sm_authenticate (pam_handle_t *pam_handle,
   if (ctx->debug)
     {
       log_msg_debug (ctx->loghandle,
-		     _("using authentication method `%s'"),
+		     "using authentication method `%s'",
 		     auth_methods[ctx->auth_method].name);
     }
 
@@ -472,7 +472,7 @@ pam_sm_authenticate (pam_handle_t *pam_handle,
       if (err)
 	{
 	  log_msg_error (ctx->loghandle,
-			 _("failed to initialize authentication method %i: %s"),
+			 "failed to initialize authentication method %i: %s",
 			 -1, gpg_strerror (err));
 	  goto out;
 	}
@@ -486,7 +486,7 @@ pam_sm_authenticate (pam_handle_t *pam_handle,
       if (err)
 	{
 	  log_msg_error (ctx->loghandle,
-			 _("failed to initialize parsing of configuration file for authentication method %s: %s"),
+			 "failed to initialize parsing of configuration file for authentication method %s: %s",
 			 auth_methods[ctx->auth_method].name, gpg_strerror (err));
 	  goto out_parsing;
 	}
@@ -507,7 +507,7 @@ pam_sm_authenticate (pam_handle_t *pam_handle,
       if (err)
 	{
 	  log_msg_error (ctx->loghandle,
-			 _("failed to parse configuration for authentication method %i: %s"),
+			 "failed to parse configuration for authentication method %i: %s",
 			 auth_methods[ctx->auth_method].name, gpg_strerror (err));
 	  goto out_parsing;
 	}
@@ -526,7 +526,7 @@ pam_sm_authenticate (pam_handle_t *pam_handle,
   if (ret != PAM_SUCCESS)
     {
       log_msg_error (ctx->loghandle,
-		     _("failed to retrieve PAM conversation structure"));
+		     "failed to retrieve PAM conversation structure");
       err = GPG_ERR_INTERNAL;
       goto out;
     }
@@ -544,8 +544,7 @@ pam_sm_authenticate (pam_handle_t *pam_handle,
   if (ret != PAM_SUCCESS)
     {
       /* It's not fatal, username can be in the card.  */
-      log_msg_error (ctx->loghandle,
-		     _("Can't retrieve username from PAM"));
+      log_msg_error (ctx->loghandle, "Can't retrieve username from PAM");
     }
 
   /*** Check if we use gpg-agent. ***/
@@ -602,8 +601,7 @@ pam_sm_authenticate (pam_handle_t *pam_handle,
   err = wait_for_card (ctx->scd, 0);
   if (err)
     {
-      log_msg_error (ctx->loghandle,
-		     _("failed to wait for card insertion: %s"),
+      log_msg_error (ctx->loghandle, "failed to wait for card insertion: %s",
 		     gpg_strerror (err));
       goto out;
     }
@@ -660,7 +658,7 @@ pam_sm_authenticate (pam_handle_t *pam_handle,
 
   /* Log result.  */
   if (err)
-    log_msg_error (ctx->loghandle, _("authentication failed: %s"), gpg_strerror (err));
+    log_msg_error (ctx->loghandle, "authentication failed: %s", gpg_strerror (err));
   else
     {
       if (ctx->debug)
diff --git a/src/scd/scd.c b/src/scd/scd.c
index fe6613a..5d1b835 100644
--- a/src/scd/scd.c
+++ b/src/scd/scd.c
@@ -225,8 +225,7 @@ scd_connect (scd_context_t *scd_ctx, int use_agent, const char *scd_path,
   if (fflush (NULL))
     {
       err = gpg_error_from_syserror ();
-      log_msg_error (loghandle,
-		     _("error flushing pending output: %s"),
+      log_msg_error (loghandle, "error flushing pending output: %s",
 		     strerror (errno));
       return err;
     }
@@ -305,14 +304,12 @@ scd_connect (scd_context_t *scd_ctx, int use_agent, const char *scd_path,
       err = assuan_pipe_connect (&assuan_ctx, scd_path, argv, no_close_list);
       if (err)
 	{
-	  log_msg_error (loghandle,
-			 _("could not spawn scdaemon: %s"),
+	  log_msg_error (loghandle, "could not spawn scdaemon: %s",
 			 gpg_strerror (err));
 	}
       else
 	{
-	  log_msg_debug (loghandle,
-			 "spawned a new scdaemon (path: '%s')",
+	  log_msg_debug (loghandle, "spawned a new scdaemon (path: '%s')",
 			 scd_path);
 	}
     }
@@ -856,7 +853,7 @@ scd_getinfo (scd_context_t ctx, const char *what, char **result)
       if (!res)
 	{
 	  log_msg_error (ctx->loghandle,
-			 _("warning: can't store getinfo data: %s"),
+			 "warning: can't store getinfo data: %s",
 			 strerror (errno));
 	  rc = gpg_error_from_syserror ();
 	}

commit 6904ae208e81e19639c85edfaa76a4fea0a4074f
Author: NIIBE Yutaka <gniibe at fsij.org>
Date:   Tue Nov 15 12:11:44 2016 +0900

    Don't translate debug messages.
    
    * src/scd/scd.c (scd_connect): No use of translation.
    * src/pam/auth-method-x509/auth-x509.c (auth_method_x509_auth_do): Ditto.
    * src/pam/auth-method-localdb/auth-localdb.c
    (auth_method_localdb_auth_do): Ditto.
    * src/pam/auth-method-x509/dirmngr.c (inq_cert): Ditto.
    * src/pam/pam_poldi.c (pam_sm_authenticate): Ditto.
    
    --
    Signed-off-by: NIIBE Yutaka <gniibe at fsij.org>

diff --git a/src/pam/auth-method-localdb/auth-localdb.c b/src/pam/auth-method-localdb/auth-localdb.c
index 07dfe64..3081737 100644
--- a/src/pam/auth-method-localdb/auth-localdb.c
+++ b/src/pam/auth-method-localdb/auth-localdb.c
@@ -117,7 +117,7 @@ auth_method_localdb_auth_do (poldi_ctx_t ctx,
 
   if (ctx->debug)
     log_msg_debug (ctx->loghandle,
-		   _("Trying authentication as user `%s'..."), username);
+		   "Trying authentication as user `%s'...", username);
   if (!ctx->quiet)
     conv_tell (ctx->conv,
 	       _("Trying authentication as user `%s'..."), username);
@@ -129,7 +129,7 @@ auth_method_localdb_auth_do (poldi_ctx_t ctx,
     {
       if (ctx->debug)
 	log_msg_debug (ctx->loghandle,
-		       _("Serial number %s is not associated with user %s"),
+		       "Serial number %s is not associated with user %s",
 		       ctx->cardinfo.serialno, username);
       conv_tell (ctx->conv,
 		 _("Serial number %s is not associated with user %s"),
diff --git a/src/pam/auth-method-x509/auth-x509.c b/src/pam/auth-method-x509/auth-x509.c
index d71d988..3d7c0f2 100644
--- a/src/pam/auth-method-x509/auth-x509.c
+++ b/src/pam/auth-method-x509/auth-x509.c
@@ -500,7 +500,7 @@ auth_method_x509_auth_do (poldi_ctx_t ctx, x509_ctx_t cookie,
 
   if (ctx->debug)
     log_msg_debug (ctx->loghandle,
-		   _("public key url is '%s'"), ctx->cardinfo.pubkey_url);
+		   "public key url is '%s'", ctx->cardinfo.pubkey_url);
 
   /*** Fetch certificate. ***/
 
@@ -596,7 +596,7 @@ auth_method_x509_auth_do (poldi_ctx_t ctx, x509_ctx_t cookie,
   if (err)
     log_msg_error (ctx->loghandle, _("failure: %s"), gpg_strerror (err));
   else if (ctx->debug)
-    log_msg_debug (ctx->loghandle, _("success"));
+    log_msg_debug (ctx->loghandle, "success");
 
   return !err;
 }
diff --git a/src/pam/auth-method-x509/dirmngr.c b/src/pam/auth-method-x509/dirmngr.c
index 79eedf5..a95bf71 100644
--- a/src/pam/auth-method-x509/dirmngr.c
+++ b/src/pam/auth-method-x509/dirmngr.c
@@ -150,7 +150,7 @@ inq_cert (void *opaque, const char *line)
     {
       /* We don't support this but dirmngr might ask for it.  So
 	 simply ignore it by sending back an empty value. */
-      log_msg_debug (parm->ctx->log_handle, _("ignored inquiry from dirmngr: `%s'"), line);
+      log_msg_debug (parm->ctx->log_handle, "ignored inquiry from dirmngr: `%s'", line);
       err = assuan_send_data (parm->ctx->assuan, NULL, 0);
       if (err)
 	log_msg_error (parm->ctx->log_handle,
diff --git a/src/pam/pam_poldi.c b/src/pam/pam_poldi.c
index 6e01f10..5992e5c 100644
--- a/src/pam/pam_poldi.c
+++ b/src/pam/pam_poldi.c
@@ -587,14 +587,14 @@ pam_sm_authenticate (pam_handle_t *pam_handle,
   if (pam_username)
     {
       if (ctx->debug)
-	log_msg_debug (ctx->loghandle, _("Waiting for card for user `%s'..."), pam_username);
+	log_msg_debug (ctx->loghandle, "Waiting for card for user `%s'...", pam_username);
       if (!ctx->quiet)
 	conv_tell (ctx->conv, _("Insert authentication card for user `%s'"), pam_username);
     }
   else
     {
       if (ctx->debug)
-	log_msg_debug (ctx->loghandle, _("Waiting for card..."));
+	log_msg_debug (ctx->loghandle, "Waiting for card...");
       if (!ctx->quiet)
 	conv_tell (ctx->conv, _("Insert authentication card"));
     }
@@ -616,7 +616,7 @@ pam_sm_authenticate (pam_handle_t *pam_handle,
 
   if (ctx->debug)
     log_msg_debug (ctx->loghandle,
-		   _("connected to card; serial number is: %s"),
+		   "connected to card; serial number is: %s",
 		   ctx->cardinfo.serialno);
 
   /*** Authenticate.  ***/
@@ -664,7 +664,7 @@ pam_sm_authenticate (pam_handle_t *pam_handle,
   else
     {
       if (ctx->debug)
-	log_msg_debug (ctx->loghandle, _("authentication succeeded"));
+	log_msg_debug (ctx->loghandle, "authentication succeeded");
       if (ctx->modify_environment)
 	modify_environment (pam_handle, ctx);
     }
diff --git a/src/scd/scd.c b/src/scd/scd.c
index 709497d..fe6613a 100644
--- a/src/scd/scd.c
+++ b/src/scd/scd.c
@@ -253,8 +253,8 @@ scd_connect (scd_context_t *scd_ctx, int use_agent, const char *scd_path,
 
       if (!err)
 	log_msg_debug (loghandle,
-		       _("got scdaemon socket name from gpg-agent, "
-			 "connected to socket '%s'"), scd_socket_name);
+		       "got scdaemon socket name from gpg-agent, "
+		       "connected to socket '%s'", scd_socket_name);
 
       xfree (scd_socket_name);
     }
@@ -312,7 +312,7 @@ scd_connect (scd_context_t *scd_ctx, int use_agent, const char *scd_path,
       else
 	{
 	  log_msg_debug (loghandle,
-			 _("spawned a new scdaemon (path: '%s')"),
+			 "spawned a new scdaemon (path: '%s')",
 			 scd_path);
 	}
     }

commit 0afd57e088146f0e2e968809e95867f8caabce00
Author: NIIBE Yutaka <gniibe at fsij.org>
Date:   Tue Nov 15 12:06:32 2016 +0900

    Use ERR instead of RC.
    
    * src/scd/scd.c (scd_connect): Clean up for ERR.
    
    --
    "Return code" is not good when we have definition of
    error code properly.
    
    Signed-off-by: NIIBE Yutaka <gniibe at fsij.org>

diff --git a/src/scd/scd.c b/src/scd/scd.c
index f209940..709497d 100644
--- a/src/scd/scd.c
+++ b/src/scd/scd.c
@@ -177,7 +177,7 @@ agent_scd_getinfo_socket_name (assuan_context_t ctx, char **socket_name)
 }
 
 /* Retrieve SCDaemons socket name through a running gpg-agent.  On
-   Success, *SOCKET_NAME contains a copy of the socket name.  Returns
+   success, *SOCKET_NAME contains a copy of the socket name.  Returns
    proper error code or zero on success.  */
 static gpg_error_t
 get_scd_socket_from_agent (char **socket_name)
@@ -218,53 +218,51 @@ scd_connect (scd_context_t *scd_ctx, int use_agent, const char *scd_path,
 {
   assuan_context_t assuan_ctx;
   scd_context_t ctx;
-  int rc = 0;
+  gpg_error_t err;
 
   assuan_ctx = NULL;
 
   if (fflush (NULL))
     {
-      rc = gpg_error_from_syserror ();
+      err = gpg_error_from_syserror ();
       log_msg_error (loghandle,
 		     _("error flushing pending output: %s"),
 		     strerror (errno));
-      return rc;
+      return err;
     }
 
   ctx = xtrymalloc (sizeof (*ctx));
   if (!ctx)
-    {
-      rc = gpg_error_from_syserror ();
-      return rc;
-    }
+    return gpg_error_from_syserror ();
 
   ctx->assuan_ctx = NULL;
   ctx->flags = 0;
 
+  /* Try using scdaemon under gpg-agent.  */
   if (use_agent)
     {
-      /* Retrieve a scdaemon socket name from gpg-agent.  */
       char *scd_socket_name = NULL;
 
-      rc = get_scd_socket_from_agent (&scd_socket_name);
-      if (!rc)
-	rc = assuan_socket_connect (&assuan_ctx, scd_socket_name, 0);
+      /* Note that if gpg-agent is there but no scdaemon yet,
+       * gpg-agent automatically invokes scdaemon by this query
+       * itself.
+       */
+      err = get_scd_socket_from_agent (&scd_socket_name);
+      if (!err)
+	err = assuan_socket_connect (&assuan_ctx, scd_socket_name, 0);
 
-      if (!rc)
+      if (!err)
 	log_msg_debug (loghandle,
 		       _("got scdaemon socket name from gpg-agent, "
 			 "connected to socket '%s'"), scd_socket_name);
 
       xfree (scd_socket_name);
-
-      if (rc)
-	{
-	  log_msg_error (loghandle,
-			 _("could not connect to scdaemon: %s"),
-			 gpg_strerror (rc));
-	}
     }
-  if (!use_agent || rc)
+
+  /* If scdaemon under gpg-agent is irrelevant or not available,
+   * let Poldi invoke scdaemon.
+   */
+  if (!use_agent || err)
     {
       const char *pgmname;
       const char *argv[5];
@@ -304,12 +302,12 @@ scd_connect (scd_context_t *scd_ctx, int use_agent, const char *scd_path,
       no_close_list[i] = -1;
 
       /* connect to the scdaemon and perform initial handshaking */
-      rc = assuan_pipe_connect (&assuan_ctx, scd_path, argv, no_close_list);
-      if (rc)
+      err = assuan_pipe_connect (&assuan_ctx, scd_path, argv, no_close_list);
+      if (err)
 	{
 	  log_msg_error (loghandle,
 			 _("could not spawn scdaemon: %s"),
-			 gpg_strerror (rc));
+			 gpg_strerror (err));
 	}
       else
 	{
@@ -319,7 +317,7 @@ scd_connect (scd_context_t *scd_ctx, int use_agent, const char *scd_path,
 	}
     }
 
-  if (rc)
+  if (err)
     {
       assuan_disconnect (assuan_ctx);
       xfree (ctx);
@@ -336,7 +334,7 @@ scd_connect (scd_context_t *scd_ctx, int use_agent, const char *scd_path,
       *scd_ctx = ctx;
     }
 
-  return rc;
+  return err;
 }
 
 /* Disconnect from SCDaemon; destroy the context SCD_CTX.  */

commit 91aa9c96ab7d6a608c76a713b13b301e7ea5ff82
Author: Marc-Antoine Perennou <Marc-Antoine at perennou.com>
Date:   Fri Nov 11 15:51:23 2016 +0100

    Fallback to invoking scdaemon.
    
    * src/scd/scd.c (scd_connect): When gpg-agent is not available
    in the case of pam_username == username_of_process_uid, try
    normal way to invoke scdaemon through pipe.
    
    --
    
    Signed-off-by: Marc-Antoine Perennou <Marc-Antoine at Perennou.com>

diff --git a/src/scd/scd.c b/src/scd/scd.c
index 5626187..f209940 100644
--- a/src/scd/scd.c
+++ b/src/scd/scd.c
@@ -264,7 +264,7 @@ scd_connect (scd_context_t *scd_ctx, int use_agent, const char *scd_path,
 			 gpg_strerror (rc));
 	}
     }
-  else
+  if (!use_agent || rc)
     {
       const char *pgmname;
       const char *argv[5];

commit eb1fc82c307c1a147a4fa2e240c3b3330875fede
Author: NIIBE Yutaka <gniibe at fsij.org>
Date:   Tue Nov 15 11:41:49 2016 +0900

    Invoke gpgconf by absolute path.
    
    * configure.ac (GNUPG_DEFAULT_GPGCONF): No parens.
    (GNUPG_DEFAULT_DIRMNGR): Remove unused var.
    * src/scd/scd.c (get_agent_socket_name): Use GNUPG_DEFAULT_GPGCONF.
    
    --
    
    Signed-off-by: NIIBE Yutaka <gniibe at fsij.org>

diff --git a/configure.ac b/configure.ac
index 0aba308..626b9a0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -69,13 +69,10 @@ AC_DEFINE_UNQUOTED(NEED_KSBA_VERSION, "$NEED_KSBA_VERSION",
 AH_BOTTOM([
 /* Setup the hardwired names of modules. */
 #ifndef GNUPG_DEFAULT_GPGCONF
-#define GNUPG_DEFAULT_GPGCONF    ( GNUPG_BINDIR "/gpgconf" )
+#define GNUPG_DEFAULT_GPGCONF GNUPG_BINDIR "/gpgconf"
 #endif
 #ifndef GNUPG_DEFAULT_SCD
-#define GNUPG_DEFAULT_SCD    ( GNUPG_LIBEXECDIR "/scdaemon" )
-#endif
-#ifndef GNUPG_DEFAULT_DIRMNGR
-#define GNUPG_DEFAULT_DIRMNGR    ( GNUPG_BINDIR "/dirmngr" )
+#define GNUPG_DEFAULT_SCD     GNUPG_LIBEXECDIR "/scdaemon"
 #endif
 ])
 
diff --git a/src/scd/scd.c b/src/scd/scd.c
index 06a26d8..5626187 100644
--- a/src/scd/scd.c
+++ b/src/scd/scd.c
@@ -110,7 +110,8 @@ get_agent_socket_name (char **gpg_agent_sockname)
   if (!result)
     return gpg_error_from_syserror ();
 
-  input = popen ("gpgconf --list-dirs agent-socket", "r");
+  /* It is good if we have popen with execv (no SHELL) */
+  input = popen (GNUPG_DEFAULT_GPGCONF " --list-dirs agent-socket", "r");
   if (input == NULL)
     {
       xfree (result);

commit af67cba1ed81ca642e85f684bbc897e54187ba2a
Author: NIIBE Yutaka <gniibe at fsij.org>
Date:   Tue Nov 15 09:49:28 2016 +0900

    Restrict use of scdaemon under gpg-agent.
    
    * src/pam/pam_poldi.c (opt_ids, opt_specs): Remove use-agent option.
    (pam_poldi_options_cb): Remove use-agent handling.
    (pam_sm_authenticate): Determin use_agent by username.
    
    --
    
    Signed-off-by: NIIBE Yutaka <gniibe at fsij.org>

diff --git a/NEWS b/NEWS
index d3d8c46..2e6d054 100644
--- a/NEWS
+++ b/NEWS
@@ -5,12 +5,13 @@ Changes since version 0.4.1:
 * poldi-ctrl is removed
   Please use gpg-connect-agent instead.
 
-* New "use-agent" PAM option for backward compatibility
+* For backward compatibility of sudo and screen unlock
   In GnuPG 2.1, the environment variable GPG_AGENT_INFO is gone.  And
   now, Poldi's default is invoking scdaemon directly.  Still, there
-  are use cases (like su/sudo) which expect connecting user's
-  gpg-agent.  For this purpose, we now have "use-agent" option.  Don't
-  enable this option for login authentication.
+  are use cases (like sudo and screen unlock) which expect connecting
+  user's gpg-agent.  For this purpose, Poldi now distinguishes a case
+  where pam_username == username_of_process_uid.  Only for such a case,
+  Poldi tries to find scdaemon under gpg-agent.
 
 * Poldi invokes scdaemon to connect it through pipe
   Older Poldi has a feature of connecting to scdaemon with help of
diff --git a/src/pam/pam_poldi.c b/src/pam/pam_poldi.c
index 9bf504e..6e01f10 100644
--- a/src/pam/pam_poldi.c
+++ b/src/pam/pam_poldi.c
@@ -24,6 +24,8 @@
 #include <syslog.h>
 #include <stdarg.h>
 #include <errno.h>
+#include <unistd.h>
+#include <sys/types.h>
 #include <pwd.h>
 #include <assert.h>
 
@@ -84,7 +86,6 @@ enum opt_ids
     opt_scdaemon_options,
     opt_modify_environment,
     opt_quiet,
-    opt_use_agent,
   };
 
 /* Full specifications for options. */
@@ -104,8 +105,6 @@ static simpleparse_opt_spec_t opt_specs[] =
       0, SIMPLEPARSE_ARG_NONE, 0, "Set Poldi related variables in the PAM environment" },
     { opt_quiet, "quiet",
       0, SIMPLEPARSE_ARG_NONE, 0, "Be more quiet during PAM conversation with user" },
-    { opt_use_agent, "use-agent",
-      0, SIMPLEPARSE_ARG_NONE, 0, "Use gpg-agent for scdaemon" },
     { 0 }
   };
 
@@ -204,10 +203,6 @@ pam_poldi_options_cb (void *cookie, simpleparse_opt_spec_t spec, const char *arg
       /* QUIET.  */
       ctx->quiet = 1;
     }
-  else if (!strcmp (spec.long_opt, "use-agent"))
-    {
-      ctx->use_agent = 1;
-    }
 
   return gpg_error (err);
 }
@@ -369,6 +364,7 @@ pam_sm_authenticate (pam_handle_t *pam_handle,
   struct auth_method_parse_cookie method_parse_cookie = { NULL, NULL };
   simpleparse_handle_t method_parse;
   struct getpin_cb_data getpin_cb_data;
+  int use_agent = 0;
 
   pam_username = NULL;
   scd_ctx = NULL;
@@ -552,9 +548,29 @@ pam_sm_authenticate (pam_handle_t *pam_handle,
 		     _("Can't retrieve username from PAM"));
     }
 
+  /*** Check if we use gpg-agent. ***/
+  {
+    struct passwd *pw;
+    pw = getpwuid (getuid ());
+
+    if (pw == NULL)
+      {
+	err = gpg_error_from_syserror ();
+	goto out;
+      }
+
+    /* Supporting backward compatibility of old Poldi.
+     *
+     * For use cases of sudo and screen unlock where a user wants to
+     * use smartcard using the existing scdaemon under gpg-agent.
+     */
+    if (pam_username && !strcmp (pw->pw_name, pam_username))
+      use_agent = 1;
+  }
+
   /*** Connect to Scdaemon. ***/
 
-  err = scd_connect (&scd_ctx, ctx->use_agent,
+  err = scd_connect (&scd_ctx, use_agent,
 		     ctx->scdaemon_program, ctx->scdaemon_options,
 		     ctx->loghandle);
   if (err)

commit 836d56934709b8a8821b60eeda9c815448826320
Author: NIIBE Yutaka <gniibe at fsij.org>
Date:   Tue Nov 15 08:28:21 2016 +0900

    More clean up.
    
    * src/pam/pam_poldi.c (retrieve_username_from_pam): Remove.
    (send_username_to_pam): Remove.
    (pam_sm_authenticate): Call pam_get_item, pam_set_item directly.
    --
    
    Signed-off-by: NIIBE Yutaka <gniibe at fsij.org>

diff --git a/src/pam/pam_poldi.c b/src/pam/pam_poldi.c
index 48dbb3c..9bf504e 100644
--- a/src/pam/pam_poldi.c
+++ b/src/pam/pam_poldi.c
@@ -347,44 +347,6 @@ modify_environment (pam_handle_t *pam_handle, poldi_ctx_t ctx)
   modify_environment_putenv (pam_handle, ctx,
 			     "PAM_POLDI_LANGUAGE", cardinfo->disp_lang);
 }
-
-/* Retrieve the username through the PAM handle contained in CTX and
-   store it in *USERNAME.  Returns proper error code.  */
-static gpg_error_t
-retrieve_username_from_pam (pam_handle_t *handle, const char **username)
-{
-  const void *username_void;
-  gpg_error_t err;
-  int ret;
-
-  ret = pam_get_item (handle, PAM_USER, &username_void);
-  if (ret == PAM_SUCCESS)
-    {
-      err = 0;
-      *username = username_void;
-    }
-  else
-    err = gpg_error (GPG_ERR_INTERNAL);
-
-  return err;
-}
-
-/* Make USERNAME available to the application through the PAM handle
-   contained in CTX.  Returns proper error code.  */
-static gpg_error_t
-send_username_to_pam (pam_handle_t *handle, const char *username)
-{
-  gpg_error_t err;
-  int ret;
-
-  ret = pam_set_item (handle, PAM_USER, username);
-  if (ret == PAM_SUCCESS)
-    err = 0;
-  else
-    err = gpg_error (GPG_ERR_INTERNAL);
-
-  return err;
-}
 

 
 /*
@@ -582,12 +544,12 @@ pam_sm_authenticate (pam_handle_t *pam_handle,
 
   /*** Retrieve username from PAM.  ***/
 
-  err = retrieve_username_from_pam (ctx->pam_handle, &pam_username);
-  if (err)
+  ret = pam_get_item (ctx->pam_handle, PAM_USER, (const void **)&pam_username);
+  if (ret != PAM_SUCCESS)
     {
+      /* It's not fatal, username can be in the card.  */
       log_msg_error (ctx->loghandle,
-		     _("failed to retrieve username from PAM: %s"),
-		     gpg_strerror (err));
+		     _("Can't retrieve username from PAM"));
     }
 
   /*** Connect to Scdaemon. ***/
@@ -667,7 +629,13 @@ pam_sm_authenticate (pam_handle_t *pam_handle,
 	{
 	  /* Send username received during authentication process back
 	     to PAM.  */
-	  err = send_username_to_pam (ctx->pam_handle, username_authenticated);
+	  ret = pam_set_item (ctx->pam_handle, PAM_USER,
+			      username_authenticated);
+	  if (ret == PAM_SUCCESS)
+	    err = 0;
+	  else
+	    err = gpg_error (GPG_ERR_INTERNAL);
+
 	  xfree (username_authenticated);
 	}
     }

commit 64b07726e2d3e3a6140dcf49416ad30f83fecfc0
Author: NIIBE Yutaka <gniibe at fsij.org>
Date:   Tue Nov 15 08:14:15 2016 +0900

    Simplify things for PAM.
    
    * src/pam/auth-support/pam-util.h: Remove.
    * src/pam/auth-support/pam-util.c: Remove.  Merge into...
    * src/pam/pam_poldi.c (retrieve_username_from_pam): ... here.
    (send_username_to_pam): Likewise.
    * src/pam/auth-method-localdb/auth-localdb.c: Clean up.
    * src/pam/auth-method-x509/auth-x509.c: Likewise.
    * src/pam/auth-support/Makefile.am: Remove pam-util.{c,h}.
    --
    
    Signed-off-by: NIIBE Yutaka <gniibe at fsij.org>

diff --git a/src/pam/auth-method-localdb/auth-localdb.c b/src/pam/auth-method-localdb/auth-localdb.c
index 0c65817..07dfe64 100644
--- a/src/pam/auth-method-localdb/auth-localdb.c
+++ b/src/pam/auth-method-localdb/auth-localdb.c
@@ -35,7 +35,6 @@
 #include "util/support.h"
 #include "auth-support/ctx.h"
 #include "auth-support/wait-for-card.h"
-#include "auth-support/pam-util.h"
 
 #include "usersdb.h"
 #include "key-lookup.h"
diff --git a/src/pam/auth-method-x509/auth-x509.c b/src/pam/auth-method-x509/auth-x509.c
index 4b391db..d71d988 100644
--- a/src/pam/auth-method-x509/auth-x509.c
+++ b/src/pam/auth-method-x509/auth-x509.c
@@ -34,7 +34,6 @@
 #include "util/support.h"
 #include "auth-support/ctx.h"
 #include "auth-support/getpin-cb.h"
-#include "auth-support/pam-util.h"
 #include "auth-methods.h"
 #include "util/defs.h"
 #include "util/simplelog.h"
diff --git a/src/pam/auth-support/Makefile.am b/src/pam/auth-support/Makefile.am
index 9ab48a0..9a47d73 100644
--- a/src/pam/auth-support/Makefile.am
+++ b/src/pam/auth-support/Makefile.am
@@ -41,5 +41,4 @@ libpam_poldi_auth_support_a_SOURCES = \
  ctx.h \
  conv.c conv.h \
  getpin-cb.c getpin-cb.h \
- pam-util.c pam-util.h \
  wait-for-card.c wait-for-card.h
diff --git a/src/pam/auth-support/pam-util.c b/src/pam/auth-support/pam-util.c
deleted file mode 100644
index b133061..0000000
--- a/src/pam/auth-support/pam-util.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/* pam-util.c - PAM util functions for Poldi.
- * Copyright (C) 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 3 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, see <http://www.gnu.org/licenses/>.
- */
-
-#include <config.h>
-
-#include <gpg-error.h>
-
-#define PAM_SM_AUTH
-#include <security/pam_modules.h>
-
-

-
-/* Retrieve the username through the PAM handle contained in CTX and
-   store it in *USERNAME.  Returns proper error code.  */
-gpg_error_t
-retrieve_username_from_pam (pam_handle_t *handle, const char **username)
-{
-  const void *username_void;
-  gpg_error_t err;
-  int ret;
-
-  ret = pam_get_item (handle, PAM_USER, &username_void);
-  if (ret == PAM_SUCCESS)
-    {
-      err = 0;
-      *username = username_void;
-    }
-  else
-    err = gpg_error (GPG_ERR_INTERNAL);
-
-  return err;
-}
-
-/* Make USERNAME available to the application through the PAM handle
-   contained in CTX.  Returns proper error code.  */
-gpg_error_t
-send_username_to_pam (pam_handle_t *handle, const char *username)
-{
-  gpg_error_t err;
-  int ret;
-
-  ret = pam_set_item (handle, PAM_USER, username);
-  if (ret == PAM_SUCCESS)
-    err = 0;
-  else
-    err = gpg_error (GPG_ERR_INTERNAL);
-
-  return err;
-}
diff --git a/src/pam/auth-support/pam-util.h b/src/pam/auth-support/pam-util.h
deleted file mode 100644
index 4a03f3d..0000000
--- a/src/pam/auth-support/pam-util.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* pam-util.c - PAM util functions for Poldi.
- * Copyright (C) 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 3 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, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef PAM_UTIL_H
-#define PAM_UTIL_H
-
-#include <gpg-error.h>
-
-#define PAM_SM_AUTH
-#include <security/pam_modules.h>
-
-/* Retrieve the username through the PAM handle contained in CTX and
-   store it in *USERNAME.  Returns proper error code.  */
-gpg_error_t retrieve_username_from_pam (pam_handle_t *handle, const char **username);
-
-/* Make USERNAME available to the application through the PAM handle
-   contained in CTX.  Returns proper error code.  */
-gpg_error_t send_username_to_pam (pam_handle_t *handle, const char *username);
-
-#endif
diff --git a/src/pam/pam_poldi.c b/src/pam/pam_poldi.c
index a27a3e9..48dbb3c 100644
--- a/src/pam/pam_poldi.c
+++ b/src/pam/pam_poldi.c
@@ -37,7 +37,6 @@
 #include "scd/scd.h"
 
 #include "auth-support/wait-for-card.h"
-#include "auth-support/pam-util.h"
 #include "auth-support/conv.h"
 #include "auth-support/getpin-cb.h"
 #include "auth-methods.h"
@@ -349,6 +348,43 @@ modify_environment (pam_handle_t *pam_handle, poldi_ctx_t ctx)
 			     "PAM_POLDI_LANGUAGE", cardinfo->disp_lang);
 }
 
+/* Retrieve the username through the PAM handle contained in CTX and
+   store it in *USERNAME.  Returns proper error code.  */
+static gpg_error_t
+retrieve_username_from_pam (pam_handle_t *handle, const char **username)
+{
+  const void *username_void;
+  gpg_error_t err;
+  int ret;
+
+  ret = pam_get_item (handle, PAM_USER, &username_void);
+  if (ret == PAM_SUCCESS)
+    {
+      err = 0;
+      *username = username_void;
+    }
+  else
+    err = gpg_error (GPG_ERR_INTERNAL);
+
+  return err;
+}
+
+/* Make USERNAME available to the application through the PAM handle
+   contained in CTX.  Returns proper error code.  */
+static gpg_error_t
+send_username_to_pam (pam_handle_t *handle, const char *username)
+{
+  gpg_error_t err;
+  int ret;
+
+  ret = pam_set_item (handle, PAM_USER, username);
+  if (ret == PAM_SUCCESS)
+    err = 0;
+  else
+    err = gpg_error (GPG_ERR_INTERNAL);
+
+  return err;
+}
 

 
 /*

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

Summary of changes:
 NEWS                                       |   9 +-
 configure.ac                               |   7 +-
 po/POTFILES.in                             |  34 ++-
 po/de.po                                   | 414 +++++++++++------------------
 po/poldi.pot                               | 280 +------------------
 src/pam/auth-method-localdb/auth-localdb.c |  12 +-
 src/pam/auth-method-localdb/key-lookup.c   |  10 +-
 src/pam/auth-method-x509/auth-x509.c       |  31 +--
 src/pam/auth-method-x509/dirmngr.c         |   8 +-
 src/pam/auth-support/Makefile.am           |   1 -
 src/pam/auth-support/getpin-cb.c           |   8 +-
 src/pam/auth-support/pam-util.c            |  65 -----
 src/pam/auth-support/pam-util.h            |  36 ---
 src/pam/pam_poldi.c                        |  92 ++++---
 src/scd/scd.c                              |  68 +++--
 15 files changed, 313 insertions(+), 762 deletions(-)
 delete mode 100644 src/pam/auth-support/pam-util.c
 delete mode 100644 src/pam/auth-support/pam-util.h


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




More information about the Gnupg-commits mailing list