[git] GnuPG - branch, STABLE-BRANCH-2-0, updated. gnupg-2.0.20-17-g8b0cf1f

by Werner Koch cvs at cvs.gnupg.org
Wed Jul 3 15:00:07 CEST 2013


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 "The GNU Privacy Guard".

The branch, STABLE-BRANCH-2-0 has been updated
       via  8b0cf1f59e660b1562ca3421b784172df84b1c5d (commit)
       via  0c01a0436961af5b427a8ace8e57d12be22dbc96 (commit)
       via  9f32499f99a0817f63f7a73b09bdcebe60d4775d (commit)
       via  ed056d67c7c93306b68829f83a2565e978dcfd9b (commit)
       via  27e403bff7a6e46a390ae5f3d63ea63701d1435d (commit)
       via  9b8518ffc97696634cd6d493fed872a512993c52 (commit)
      from  a1398844adb84392f4a1da6db2e50b914a1aada1 (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 8b0cf1f59e660b1562ca3421b784172df84b1c5d
Author: Werner Koch <wk at gnupg.org>
Date:   Wed Jul 3 13:40:16 2013 +0200

    po: Auto updates.
    
    --

diff --git a/po/be.po b/po/be.po
index d29db17..da9d281 100644
--- a/po/be.po
+++ b/po/be.po
@@ -345,7 +345,10 @@ msgstr ""
 msgid "allow presetting passphrase"
 msgstr "Паўтарыце пароль\n"
 
-msgid "enable ssh-agent emulation"
+msgid "enable ssh support"
+msgstr ""
+
+msgid "enable putty support"
 msgstr ""
 
 msgid "|FILE|write environment settings also to FILE"
diff --git a/po/ca.po b/po/ca.po
index 9ccfa8a..b4957ad 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -375,8 +375,21 @@ msgstr ""
 msgid "allow presetting passphrase"
 msgstr "error en la creació de la contrasenya: %s\n"
 
-msgid "enable ssh-agent emulation"
-msgstr ""
+# Gènere?  Nombre?  ivb
+# Werner FIXME: please add translator comment saying *what* is
+# uncompressed so we know the gender. jm
+#, fuzzy
+#| msgid "not supported"
+msgid "enable ssh support"
+msgstr "no és suportat"
+
+# Gènere?  Nombre?  ivb
+# Werner FIXME: please add translator comment saying *what* is
+# uncompressed so we know the gender. jm
+#, fuzzy
+#| msgid "not supported"
+msgid "enable putty support"
+msgstr "no és suportat"
 
 msgid "|FILE|write environment settings also to FILE"
 msgstr ""
@@ -7686,12 +7699,6 @@ msgstr ""
 #~ msgid "wrong secret key used"
 #~ msgstr "s'ha utilitzat una clau secreta incorrecta"
 
-# Gènere?  Nombre?  ivb
-# Werner FIXME: please add translator comment saying *what* is
-# uncompressed so we know the gender. jm
-#~ msgid "not supported"
-#~ msgstr "no és suportat"
-
 #~ msgid "bad key"
 #~ msgstr "la clau és incorrecta"
 
diff --git a/po/cs.po b/po/cs.po
index a94d3c9..688bcfd 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -373,9 +373,16 @@ msgstr "dovolit klientům označit klíče za „důvěryhodné“"
 msgid "allow presetting passphrase"
 msgstr "umožnit přednastavení hesla"
 
-msgid "enable ssh-agent emulation"
+#, fuzzy
+#| msgid "enable ssh-agent emulation"
+msgid "enable ssh support"
 msgstr "zapnout emulaci ssh-agenta"
 
+#, fuzzy
+#| msgid "not supported"
+msgid "enable putty support"
+msgstr "nepodporováno"
+
 msgid "|FILE|write environment settings also to FILE"
 msgstr "|SOUBOR|zapsat nastavení prostředí též do SOUBORU"
 
@@ -7220,9 +7227,6 @@ msgstr ""
 #~ msgid "wrong secret key used"
 #~ msgstr "je použit špatný tajný klíč"
 
-#~ msgid "not supported"
-#~ msgstr "nepodporováno"
-
 #~ msgid "bad key"
 #~ msgstr "špatný klíč"
 
diff --git a/po/da.po b/po/da.po
index 3e9608b..365f6bd 100644
--- a/po/da.po
+++ b/po/da.po
@@ -358,9 +358,14 @@ msgstr "tillad klienter at markere nøgler som »trusted« (troværdige)"
 msgid "allow presetting passphrase"
 msgstr "tillad forhåndsindstilling af adgangsfrase"
 
-msgid "enable ssh-agent emulation"
+#, fuzzy
+#| msgid "enable ssh-agent emulation"
+msgid "enable ssh support"
 msgstr "aktiver ssh-agent-emulering"
 
+msgid "enable putty support"
+msgstr ""
+
 msgid "|FILE|write environment settings also to FILE"
 msgstr "|FIL|skriv også miljøindstillinger til FIL"
 
diff --git a/po/el.po b/po/el.po
index 02fb3f7..afc6a69 100644
--- a/po/el.po
+++ b/po/el.po
@@ -352,8 +352,15 @@ msgstr ""
 msgid "allow presetting passphrase"
 msgstr "óöÜëìá óôç äçìéïõñãßá ôçò öñÜóçò êëåéäß: %s\n"
 
-msgid "enable ssh-agent emulation"
-msgstr ""
+#, fuzzy
+#| msgid "not supported"
+msgid "enable ssh support"
+msgstr "äåí õðïóôçñßæåôáé"
+
+#, fuzzy
+#| msgid "not supported"
+msgid "enable putty support"
+msgstr "äåí õðïóôçñßæåôáé"
 
 msgid "|FILE|write environment settings also to FILE"
 msgstr ""
@@ -7520,9 +7527,6 @@ msgstr ""
 #~ msgid "wrong secret key used"
 #~ msgstr "÷ñÞóç ëÜèïò ìõóôéêïý êëåéäéïý"
 
-#~ msgid "not supported"
-#~ msgstr "äåí õðïóôçñßæåôáé"
-
 #~ msgid "bad key"
 #~ msgstr "êáêü êëåéäß"
 
diff --git a/po/eo.po b/po/eo.po
index 89d5724..c3f568d 100644
--- a/po/eo.po
+++ b/po/eo.po
@@ -352,8 +352,15 @@ msgstr ""
 msgid "allow presetting passphrase"
 msgstr "eraro dum kreado de pasfrazo: %s\n"
 
-msgid "enable ssh-agent emulation"
-msgstr ""
+#, fuzzy
+#| msgid "not supported"
+msgid "enable ssh support"
+msgstr "ne realigita"
+
+#, fuzzy
+#| msgid "not supported"
+msgid "enable putty support"
+msgstr "ne realigita"
 
 msgid "|FILE|write environment settings also to FILE"
 msgstr ""
@@ -7415,9 +7422,6 @@ msgstr ""
 #~ msgid "wrong secret key used"
 #~ msgstr "maløusta sekreta þlosilo uzata"
 
-#~ msgid "not supported"
-#~ msgstr "ne realigita"
-
 #~ msgid "bad key"
 #~ msgstr "malbona þlosilo"
 
diff --git a/po/es.po b/po/es.po
index af58643..b3e9654 100644
--- a/po/es.po
+++ b/po/es.po
@@ -372,9 +372,16 @@ msgstr "permitir que los clientes marquen claves como \"fiables\""
 msgid "allow presetting passphrase"
 msgstr "permitir preestablecer frase contraseña"
 
-msgid "enable ssh-agent emulation"
+#, fuzzy
+#| msgid "enable ssh-agent emulation"
+msgid "enable ssh support"
 msgstr "permitir emulación de ssh-agent"
 
+#, fuzzy
+#| msgid "not supported"
+msgid "enable putty support"
+msgstr "no disponible"
+
 msgid "|FILE|write environment settings also to FILE"
 msgstr "|FICHERO|escribir variables de entorno también en FICHERO"
 
@@ -7332,9 +7339,6 @@ msgstr ""
 #~ msgid "wrong secret key used"
 #~ msgstr "clave secreta incorrecta"
 
-#~ msgid "not supported"
-#~ msgstr "no disponible"
-
 #~ msgid "bad key"
 #~ msgstr "clave incorrecta"
 
diff --git a/po/et.po b/po/et.po
index b4560ea..6a047e9 100644
--- a/po/et.po
+++ b/po/et.po
@@ -349,8 +349,15 @@ msgstr ""
 msgid "allow presetting passphrase"
 msgstr "viga parooli loomisel: %s\n"
 
-msgid "enable ssh-agent emulation"
-msgstr ""
+#, fuzzy
+#| msgid "not supported"
+msgid "enable ssh support"
+msgstr "ei ole toetatud"
+
+#, fuzzy
+#| msgid "not supported"
+msgid "enable putty support"
+msgstr "ei ole toetatud"
 
 msgid "|FILE|write environment settings also to FILE"
 msgstr ""
@@ -7417,9 +7424,6 @@ msgstr ""
 #~ msgid "wrong secret key used"
 #~ msgstr "kasutati valet salajast võtit"
 
-#~ msgid "not supported"
-#~ msgstr "ei ole toetatud"
-
 #~ msgid "bad key"
 #~ msgstr "halb võti"
 
diff --git a/po/fi.po b/po/fi.po
index a33efa5..15d22f4 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -365,8 +365,15 @@ msgstr ""
 msgid "allow presetting passphrase"
 msgstr "virhe luotaessa salasanaa: %s\n"
 
-msgid "enable ssh-agent emulation"
-msgstr ""
+#, fuzzy
+#| msgid "not supported"
+msgid "enable ssh support"
+msgstr "ei tuettu"
+
+#, fuzzy
+#| msgid "not supported"
+msgid "enable putty support"
+msgstr "ei tuettu"
 
 msgid "|FILE|write environment settings also to FILE"
 msgstr ""
@@ -7502,9 +7509,6 @@ msgstr ""
 #~ msgid "wrong secret key used"
 #~ msgstr "käytetty salainen avain on väärä"
 
-#~ msgid "not supported"
-#~ msgstr "ei tuettu"
-
 #~ msgid "bad key"
 #~ msgstr "avain ei kelpaa"
 
diff --git a/po/fr.po b/po/fr.po
index 17d33d5..61faa9b 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -356,9 +356,16 @@ msgstr "permettre de marquer la confiance des clefs"
 msgid "allow presetting passphrase"
 msgstr "permettre de préconfigurer la phrase de passe"
 
-msgid "enable ssh-agent emulation"
+#, fuzzy
+#| msgid "enable ssh-agent emulation"
+msgid "enable ssh support"
 msgstr "activer l'émulation de ssh-agent"
 
+#, fuzzy
+#| msgid "not supported"
+msgid "enable putty support"
+msgstr "non pris en charge"
+
 msgid "|FILE|write environment settings also to FILE"
 msgstr "|FICHIER|écrire aussi les réglages d'env. dans FICHIER"
 
@@ -7339,9 +7346,6 @@ msgstr ""
 #~ msgid "wrong secret key used"
 #~ msgstr "mauvaise clef secrète utilisée"
 
-#~ msgid "not supported"
-#~ msgstr "non pris en charge"
-
 #~ msgid "bad key"
 #~ msgstr "mauvaise clef"
 
diff --git a/po/gl.po b/po/gl.po
index c54c55b..fb7a180 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -352,8 +352,15 @@ msgstr ""
 msgid "allow presetting passphrase"
 msgstr "erro ao crea-lo contrasinal: %s\n"
 
-msgid "enable ssh-agent emulation"
-msgstr ""
+#, fuzzy
+#| msgid "not supported"
+msgid "enable ssh support"
+msgstr "non está soportado"
+
+#, fuzzy
+#| msgid "not supported"
+msgid "enable putty support"
+msgstr "non está soportado"
 
 msgid "|FILE|write environment settings also to FILE"
 msgstr ""
@@ -7526,9 +7533,6 @@ msgstr ""
 #~ msgid "wrong secret key used"
 #~ msgstr "empregouse unha chave secreta errónea"
 
-#~ msgid "not supported"
-#~ msgstr "non está soportado"
-
 #~ msgid "bad key"
 #~ msgstr "chave incorrecta"
 
diff --git a/po/hu.po b/po/hu.po
index d63681d..2aa53f6 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -349,8 +349,15 @@ msgstr ""
 msgid "allow presetting passphrase"
 msgstr "Hiba a jelszó létrehozásakor: %s.\n"
 
-msgid "enable ssh-agent emulation"
-msgstr ""
+#, fuzzy
+#| msgid "not supported"
+msgid "enable ssh support"
+msgstr "nem támogatott"
+
+#, fuzzy
+#| msgid "not supported"
+msgid "enable putty support"
+msgstr "nem támogatott"
 
 msgid "|FILE|write environment settings also to FILE"
 msgstr ""
@@ -7463,9 +7470,6 @@ msgstr ""
 #~ msgid "wrong secret key used"
 #~ msgstr "rossz titkos kulcs használata"
 
-#~ msgid "not supported"
-#~ msgstr "nem támogatott"
-
 #~ msgid "bad key"
 #~ msgstr "rossz kulcs"
 
diff --git a/po/id.po b/po/id.po
index 9a5b483..8cf6765 100644
--- a/po/id.po
+++ b/po/id.po
@@ -354,8 +354,15 @@ msgstr ""
 msgid "allow presetting passphrase"
 msgstr "kesalahan penciptaan passphrase: %s\n"
 
-msgid "enable ssh-agent emulation"
-msgstr ""
+#, fuzzy
+#| msgid "not supported"
+msgid "enable ssh support"
+msgstr "tidak didukung"
+
+#, fuzzy
+#| msgid "not supported"
+msgid "enable putty support"
+msgstr "tidak didukung"
 
 msgid "|FILE|write environment settings also to FILE"
 msgstr ""
@@ -7464,9 +7471,6 @@ msgstr ""
 #~ msgid "wrong secret key used"
 #~ msgstr "digunakan kunci rahasia yang salah"
 
-#~ msgid "not supported"
-#~ msgstr "tidak didukung"
-
 #~ msgid "bad key"
 #~ msgstr "kunci yang buruk"
 
diff --git a/po/it.po b/po/it.po
index 3b8b797..eed6c30 100644
--- a/po/it.po
+++ b/po/it.po
@@ -349,8 +349,15 @@ msgstr ""
 msgid "allow presetting passphrase"
 msgstr "errore nella creazione della passhprase: %s\n"
 
-msgid "enable ssh-agent emulation"
-msgstr ""
+#, fuzzy
+#| msgid "not supported"
+msgid "enable ssh support"
+msgstr "non gestito"
+
+#, fuzzy
+#| msgid "not supported"
+msgid "enable putty support"
+msgstr "non gestito"
 
 msgid "|FILE|write environment settings also to FILE"
 msgstr ""
@@ -7521,9 +7528,6 @@ msgstr ""
 #~ msgid "wrong secret key used"
 #~ msgstr "è stata usata la chiave segreta sbagliata"
 
-#~ msgid "not supported"
-#~ msgstr "non gestito"
-
 #~ msgid "bad key"
 #~ msgstr "chiave sbagliata"
 
diff --git a/po/ja.po b/po/ja.po
index d3ab450..6944f33 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -342,9 +342,14 @@ msgstr "クライアントが鍵に\"trusted\"マークをつけることを認
 msgid "allow presetting passphrase"
 msgstr "パスフレーズの事前設定を認める"
 
-msgid "enable ssh-agent emulation"
+#, fuzzy
+#| msgid "enable ssh-agent emulation"
+msgid "enable ssh support"
 msgstr "ssh-agentエミュレーションを有効とする"
 
+msgid "enable putty support"
+msgstr ""
+
 msgid "|FILE|write environment settings also to FILE"
 msgstr "|FILE|FILEに環境変数の設定も書き出す"
 
diff --git a/po/nb.po b/po/nb.po
index 8fd63eb..809016d 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -361,7 +361,10 @@ msgstr ""
 msgid "allow presetting passphrase"
 msgstr "feil ved opprettelse av passfrase: %s\n"
 
-msgid "enable ssh-agent emulation"
+msgid "enable ssh support"
+msgstr ""
+
+msgid "enable putty support"
 msgstr ""
 
 msgid "|FILE|write environment settings also to FILE"
diff --git a/po/pl.po b/po/pl.po
index 27a4e95..62abfa5 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -352,9 +352,14 @@ msgstr "zezwolenie klientom na oznaczanie kluczy jako \"zaufanych\""
 msgid "allow presetting passphrase"
 msgstr "zezwolenie na predefiniowane has³o"
 
-msgid "enable ssh-agent emulation"
+#, fuzzy
+#| msgid "enable ssh-agent emulation"
+msgid "enable ssh support"
 msgstr "w³±czenie emulacji ssh-agenta"
 
+msgid "enable putty support"
+msgstr ""
+
 msgid "|FILE|write environment settings also to FILE"
 msgstr "|PLIK|zapis ustawieñ ¶rodowiska tak¿e do PLIKU"
 
diff --git a/po/pt.po b/po/pt.po
index 915bac2..302399f 100644
--- a/po/pt.po
+++ b/po/pt.po
@@ -353,8 +353,15 @@ msgstr ""
 msgid "allow presetting passphrase"
 msgstr "erro na criação da frase secreta: %s\n"
 
-msgid "enable ssh-agent emulation"
-msgstr ""
+#, fuzzy
+#| msgid "not supported"
+msgid "enable ssh support"
+msgstr "não suportado"
+
+#, fuzzy
+#| msgid "not supported"
+msgid "enable putty support"
+msgstr "não suportado"
 
 msgid "|FILE|write environment settings also to FILE"
 msgstr ""
@@ -7459,9 +7466,6 @@ msgstr ""
 #~ msgid "wrong secret key used"
 #~ msgstr "chave secreta incorrecta"
 
-#~ msgid "not supported"
-#~ msgstr "não suportado"
-
 #~ msgid "bad key"
 #~ msgstr "chave incorrecta"
 
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 523b5ec..0a1aff5 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -357,8 +357,17 @@ msgstr ""
 msgid "allow presetting passphrase"
 msgstr "erro na criação da frase secreta: %s\n"
 
-msgid "enable ssh-agent emulation"
-msgstr ""
+# suportado ???
+#, fuzzy
+#| msgid "not supported"
+msgid "enable ssh support"
+msgstr "não suportado"
+
+# suportado ???
+#, fuzzy
+#| msgid "not supported"
+msgid "enable putty support"
+msgstr "não suportado"
 
 msgid "|FILE|write environment settings also to FILE"
 msgstr ""
@@ -7289,10 +7298,6 @@ msgstr ""
 #~ msgid "wrong secret key used"
 #~ msgstr "chave secreta incorreta"
 
-# suportado ???
-#~ msgid "not supported"
-#~ msgstr "não suportado"
-
 #~ msgid "bad key"
 #~ msgstr "chave incorreta"
 
diff --git a/po/ro.po b/po/ro.po
index 173c800..6583ef9 100644
--- a/po/ro.po
+++ b/po/ro.po
@@ -363,8 +363,15 @@ msgstr ""
 msgid "allow presetting passphrase"
 msgstr "eroare la crearea frazei-parolã: %s\n"
 
-msgid "enable ssh-agent emulation"
-msgstr ""
+#, fuzzy
+#| msgid "not supported"
+msgid "enable ssh support"
+msgstr "nu este suportat(ã)"
+
+#, fuzzy
+#| msgid "not supported"
+msgid "enable putty support"
+msgstr "nu este suportat(ã)"
 
 msgid "|FILE|write environment settings also to FILE"
 msgstr ""
@@ -7413,9 +7420,6 @@ msgstr ""
 #~ msgid "wrong secret key used"
 #~ msgstr "a fost folositã o cheie secretã greºitã"
 
-#~ msgid "not supported"
-#~ msgstr "nu este suportat(ã)"
-
 #~ msgid "bad key"
 #~ msgstr "cheie incorectã"
 
diff --git a/po/ru.po b/po/ru.po
index 99ef956..0d6e3b2 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -355,9 +355,14 @@ msgstr "позволить клиентам помечать ключи как \
 msgid "allow presetting passphrase"
 msgstr "разрешить предустановленную фразу-пароль"
 
-msgid "enable ssh-agent emulation"
+#, fuzzy
+#| msgid "enable ssh-agent emulation"
+msgid "enable ssh support"
 msgstr "разрешить эмуляцию ssh-агента"
 
+msgid "enable putty support"
+msgstr ""
+
 msgid "|FILE|write environment settings also to FILE"
 msgstr "|FILE|сохранить состояние окружения и в файл"
 
diff --git a/po/sk.po b/po/sk.po
index 004c07e..12be517 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -352,8 +352,15 @@ msgstr ""
 msgid "allow presetting passphrase"
 msgstr "chyba pri vytváraní hesla: %s\n"
 
-msgid "enable ssh-agent emulation"
-msgstr ""
+#, fuzzy
+#| msgid "not supported"
+msgid "enable ssh support"
+msgstr "nepodporované"
+
+#, fuzzy
+#| msgid "not supported"
+msgid "enable putty support"
+msgstr "nepodporované"
 
 msgid "|FILE|write environment settings also to FILE"
 msgstr ""
@@ -7482,9 +7489,6 @@ msgstr ""
 #~ msgid "wrong secret key used"
 #~ msgstr "bol pou¾itý nesprávny tajný kµúè"
 
-#~ msgid "not supported"
-#~ msgstr "nepodporované"
-
 #~ msgid "bad key"
 #~ msgstr "nesprávny kµúè"
 
diff --git a/po/sv.po b/po/sv.po
index b9c1ba4..9a62da2 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -372,9 +372,14 @@ msgstr "tillåt klienter att markera nycklar som \"trusted\""
 msgid "allow presetting passphrase"
 msgstr "tillåt förinställning av lösenfras"
 
-msgid "enable ssh-agent emulation"
+#, fuzzy
+#| msgid "enable ssh-agent emulation"
+msgid "enable ssh support"
 msgstr "aktivera ssh-agent-emulering"
 
+msgid "enable putty support"
+msgstr ""
+
 msgid "|FILE|write environment settings also to FILE"
 msgstr "|FIL|skriv även miljöinställningar till FIL"
 
diff --git a/po/tr.po b/po/tr.po
index 40bcbbb..1c73672 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -347,9 +347,14 @@ msgstr "istemcilerin anahtarları \"güvenilir\" olarak imlemesine izin verilir"
 msgid "allow presetting passphrase"
 msgstr "anahtar parolasının önceden atanmasına izin verilir"
 
-msgid "enable ssh-agent emulation"
+#, fuzzy
+#| msgid "enable ssh-agent emulation"
+msgid "enable ssh support"
 msgstr "ssh-agent öykünümü etkinleşir"
 
+msgid "enable putty support"
+msgstr ""
+
 msgid "|FILE|write environment settings also to FILE"
 msgstr "|DOSYA|ortam ayarlarını ayrıca DOSYAya da yazar"
 
diff --git a/po/uk.po b/po/uk.po
index e14cc6e..571c754 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -357,9 +357,14 @@ msgstr "дозволити клієнтам позначати ключі як 
 msgid "allow presetting passphrase"
 msgstr "дозволити попереднє встановлення пароля"
 
-msgid "enable ssh-agent emulation"
+#, fuzzy
+#| msgid "enable ssh-agent emulation"
+msgid "enable ssh support"
 msgstr "увімкнути емуляцію ssh-агента"
 
+msgid "enable putty support"
+msgstr ""
+
 msgid "|FILE|write environment settings also to FILE"
 msgstr "записати параметри середовища і до файла"
 
diff --git a/po/zh_CN.po b/po/zh_CN.po
index f8ed174..7f1a90f 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -361,8 +361,15 @@ msgstr ""
 msgid "allow presetting passphrase"
 msgstr "生成密码的时候发生错误:%s\n"
 
-msgid "enable ssh-agent emulation"
-msgstr ""
+#, fuzzy
+#| msgid "not supported"
+msgid "enable ssh support"
+msgstr "未被支持"
+
+#, fuzzy
+#| msgid "not supported"
+msgid "enable putty support"
+msgstr "未被支持"
 
 msgid "|FILE|write environment settings also to FILE"
 msgstr ""
@@ -7183,9 +7190,6 @@ msgstr ""
 #~ msgid "wrong secret key used"
 #~ msgstr "使用了错误的私钥"
 
-#~ msgid "not supported"
-#~ msgstr "未被支持"
-
 #~ msgid "bad key"
 #~ msgstr "密钥已损坏"
 
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 5ffea7a..7c6df10 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -336,9 +336,16 @@ msgstr "允許用戶端將金鑰標記為 \"已信任\""
 msgid "allow presetting passphrase"
 msgstr "允許預先設定密語"
 
-msgid "enable ssh-agent emulation"
+#, fuzzy
+#| msgid "enable ssh-agent emulation"
+msgid "enable ssh support"
 msgstr "啟用 ssh-agent 模擬"
 
+#, fuzzy
+#| msgid "not supported"
+msgid "enable putty support"
+msgstr "未支援"
+
 msgid "|FILE|write environment settings also to FILE"
 msgstr "|檔案|將環境設定也寫至「檔案」"
 
@@ -7006,9 +7013,6 @@ msgstr ""
 #~ msgid "wrong secret key used"
 #~ msgstr "用了錯誤的私鑰"
 
-#~ msgid "not supported"
-#~ msgstr "未支援"
-
 #~ msgid "bad key"
 #~ msgstr "損壞的金鑰"
 

commit 0c01a0436961af5b427a8ace8e57d12be22dbc96
Author: Werner Koch <wk at gnupg.org>
Date:   Wed Jul 3 13:32:52 2013 +0200

    Update the German translation.

diff --git a/po/de.po b/po/de.po
index cb89471..14ff5f1 100644
--- a/po/de.po
+++ b/po/de.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnupg-2.0.18\n"
 "Report-Msgid-Bugs-To: translations at gnupg.org\n"
-"PO-Revision-Date: 2013-04-24 09:33+0200\n"
+"PO-Revision-Date: 2013-07-03 13:32+0200\n"
 "Last-Translator: Werner Koch <wk at gnupg.org>\n"
 "Language-Team: German <de at li.org>\n"
 "Language: de\n"
@@ -359,8 +359,11 @@ msgstr "erlaube Aufrufern Schlüssel als \"vertrauenswürdig\" zu markieren"
 msgid "allow presetting passphrase"
 msgstr "erlaube ein \"preset\" von Passphrases"
 
-msgid "enable ssh-agent emulation"
-msgstr "Die ssh-agent-Emulation anschalten"
+msgid "enable ssh support"
+msgstr "Die ssh-agent Komponente anschalten"
+
+msgid "enable putty support"
+msgstr "Die Pageant Komponente anschalten"
 
 msgid "|FILE|write environment settings also to FILE"
 msgstr "|DATEI|Schreibe die Umgebungsvariablen auf DATEI"

commit 9f32499f99a0817f63f7a73b09bdcebe60d4775d
Author: Werner Koch <wk at gnupg.org>
Date:   Wed Jul 3 13:29:47 2013 +0200

    ssh: Add support for Putty.
    
    * agent/gpg-agent.c [W32]: Include Several Windows header.
    (opts): Change help text for enable-ssh-support.
    (opts, main): Add option --enable-putty-support
    (putty_support, PUTTY_IPC_MAGIC, PUTTY_IPC_MAXLEN): New for W32.
    (agent_init_default_ctrl): Add and asssert call.
    (putty_message_proc, putty_message_thread): New.
    (handle_connections) [W32]: Start putty message thread.
    * common/sysutils.c (w32_get_user_sid): New for W32 only
    * tools/gpgconf-comp.c (gc_options_gpg_agent): Add
    --enable-ssh-support and --enable-putty-support.  Make the
    configuration group visible at basic level.
    * agent/command-ssh.c (serve_mmapped_ssh_request): New for W32 only.
    --
    
    This patch enables support for Putty.  It has been tested with Putty
    0.62 using an Unix created ssh key copied to the private-keys-v1.d
    directory on Windows and with a manually crafted sshcontrol file.  It
    also works with a smartcard key.
    
    May thanks to gniibe who implemented a proxy in Python to test the
    putty/gpg-agent communication.
    
    Signed-off-by: Werner Koch <wk at gnupg.org>

diff --git a/NEWS b/NEWS
index 4295ee9..adaa257 100644
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,9 @@ Noteworthy changes in version 2.0.21 (unreleased)
 
  * The included ssh agent does now support ECDSA keys.
 
+ * New option --enable-putty-support to allow gpg-agent to act as a
+   Pageant replacement including full smartcard support.
+
 
 Noteworthy changes in version 2.0.20 (2013-05-10)
 -------------------------------------------------
diff --git a/agent/agent.h b/agent/agent.h
index 15cf8bf..4afe6e9 100644
--- a/agent/agent.h
+++ b/agent/agent.h
@@ -220,6 +220,10 @@ gpg_error_t agent_write_status (ctrl_t ctrl, const char *keyword, ...)
 void bump_key_eventcounter (void);
 void bump_card_eventcounter (void);
 void start_command_handler (ctrl_t, gnupg_fd_t, gnupg_fd_t);
+#ifdef HAVE_W32_SYSTEM
+int serve_mmapped_ssh_request (ctrl_t ctrl,
+                               unsigned char *request, size_t maxreqlen);
+#endif /*HAVE_W32_SYSTEM*/
 
 /*-- command-ssh.c --*/
 void start_command_handler_ssh (ctrl_t, gnupg_fd_t);
diff --git a/agent/command-ssh.c b/agent/command-ssh.c
index 4cd3537..6533730 100644
--- a/agent/command-ssh.c
+++ b/agent/command-ssh.c
@@ -3362,3 +3362,149 @@ start_command_handler_ssh (ctrl_t ctrl, gnupg_fd_t sock_client)
   if (stream_sock)
     es_fclose (stream_sock);
 }
+
+
+#ifdef HAVE_W32_SYSTEM
+/* Serve one ssh-agent request.  This is used for the Putty support.
+   REQUEST is the the mmapped memory which may be accessed up to a
+   length of MAXREQLEN.  Returns 0 on success which also indicates
+   that a valid SSH response message is now in REQUEST.  */
+int
+serve_mmapped_ssh_request (ctrl_t ctrl,
+                           unsigned char *request, size_t maxreqlen)
+{
+  gpg_error_t err;
+  int send_err = 0;
+  int valid_response = 0;
+  ssh_request_spec_t *spec;
+  u32 msglen;
+  estream_t request_stream, response_stream;
+
+  if (setup_ssh_env (ctrl))
+    goto leave; /* Error setting up the environment.  */
+
+  if (maxreqlen < 5)
+    goto leave; /* Caller error.  */
+
+  msglen = uint32_construct (request[0], request[1], request[2], request[3]);
+  if (msglen < 1 || msglen > maxreqlen - 4)
+    {
+      log_error ("ssh message len (%u) out of range", (unsigned int)msglen);
+      goto leave;
+    }
+
+  spec = request_spec_lookup (request[4]);
+  if (!spec)
+    {
+      send_err = 1;  /* Unknown request type.  */
+      goto leave;
+    }
+
+  /* Create a stream object with the data part of the request.  */
+  if (spec->secret_input)
+    request_stream = es_mopen (NULL, 0, 0, 1, realloc_secure, gcry_free, "r+");
+  else
+    request_stream = es_mopen (NULL, 0, 0, 1, gcry_realloc, gcry_free, "r+");
+  if (!request_stream)
+    {
+      err = gpg_error_from_syserror ();
+      goto leave;
+    }
+  /* We have to disable the estream buffering, because the estream
+     core doesn't know about secure memory.  */
+  if (es_setvbuf (request_stream, NULL, _IONBF, 0))
+    {
+      err = gpg_error_from_syserror ();
+      goto leave;
+    }
+  /* Copy the request to the stream but omit the request type.  */
+  err = stream_write_data (request_stream, request + 5, msglen - 1);
+  if (err)
+    goto leave;
+  es_rewind (request_stream);
+
+  response_stream = es_fopenmem (0, "r+b");
+  if (!response_stream)
+    {
+      err = gpg_error_from_syserror ();
+      goto leave;
+    }
+
+  if (opt.verbose)
+    log_info ("ssh request handler for %s (%u) started\n",
+	       spec->identifier, spec->type);
+
+  err = (*spec->handler) (ctrl, request_stream, response_stream);
+
+  if (opt.verbose)
+    {
+      if (err)
+        log_info ("ssh request handler for %s (%u) failed: %s\n",
+                  spec->identifier, spec->type, gpg_strerror (err));
+      else
+        log_info ("ssh request handler for %s (%u) ready\n",
+                  spec->identifier, spec->type);
+    }
+
+  es_fclose (request_stream);
+  request_stream = NULL;
+
+  if (err)
+    {
+      send_err = 1;
+      goto leave;
+    }
+
+  /* Put the response back into the mmapped buffer.  */
+  {
+    void *response_data;
+    size_t response_size;
+
+    /* NB: In contrast to the request-stream, the response stream
+       includes the the message type byte.  */
+    if (es_fclose_snatch (response_stream, &response_data, &response_size))
+      {
+        log_error ("snatching ssh response failed: %s",
+                   gpg_strerror (gpg_error_from_syserror ()));
+        send_err = 1; /* Ooops.  */
+        goto leave;
+      }
+
+    if (opt.verbose > 1)
+      log_info ("sending ssh response of length %u\n",
+                (unsigned int)response_size);
+    if (response_size > maxreqlen - 4)
+      {
+        log_error ("invalid length of the ssh response: %s",
+                   gpg_strerror (GPG_ERR_INTERNAL));
+        es_free (response_data);
+        send_err = 1;
+        goto leave;
+      }
+
+    request[0] = response_size >> 24;
+    request[1] = response_size >> 16;
+    request[2] = response_size >>  8;
+    request[3] = response_size >>  0;
+    memcpy (request+4, response_data, response_size);
+    es_free (response_data);
+    valid_response = 1;
+  }
+
+ leave:
+  if (send_err)
+    {
+      request[0] = 0;
+      request[1] = 0;
+      request[2] = 0;
+      request[3] = 1;
+      request[4] = SSH_RESPONSE_FAILURE;
+      valid_response = 1;
+    }
+
+  /* Reset the SCD in case it has been used. */
+  agent_reset_scd (ctrl);
+
+  return valid_response? 0 : -1;
+}
+#endif /*HAVE_W32_SYSTEM*/
diff --git a/agent/gpg-agent.c b/agent/gpg-agent.c
index ba25875..9d53de9 100644
--- a/agent/gpg-agent.c
+++ b/agent/gpg-agent.c
@@ -1,6 +1,7 @@
 /* gpg-agent.c  -  The GnuPG Agent
  * Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005,
  *               2006, 2007, 2009, 2010 Free Software Foundation, Inc.
+ * Copyright (C) 2013 Werner Koch
  *
  * This file is part of GnuPG.
  *
@@ -30,7 +31,16 @@
 #include <time.h>
 #include <fcntl.h>
 #include <sys/stat.h>
-#ifndef HAVE_W32_SYSTEM
+#ifdef HAVE_W32_SYSTEM
+# ifndef WINVER
+#  define WINVER 0x0500  /* Same as in common/sysutils.c */
+# endif
+# ifdef HAVE_WINSOCK2_H
+#  include <winsock2.h>
+# endif
+# include <aclapi.h>
+# include <sddl.h>
+#else /*!HAVE_W32_SYSTEM*/
 # include <sys/socket.h>
 # include <sys/un.h>
 #endif /*!HAVE_W32_SYSTEM*/
@@ -106,6 +116,7 @@ enum cmd_and_opt_values
   oKeepTTY,
   oKeepDISPLAY,
   oSSHSupport,
+  oPuttySupport,
   oDisableScdaemon,
   oWriteEnvFile
 };
@@ -177,7 +188,14 @@ static ARGPARSE_OPTS opts[] = {
                              N_("allow clients to mark keys as \"trusted\"")},
   { oAllowPresetPassphrase, "allow-preset-passphrase", 0,
                              N_("allow presetting passphrase")},
-  { oSSHSupport, "enable-ssh-support", 0, N_("enable ssh-agent emulation") },
+  { oSSHSupport, "enable-ssh-support", 0, N_("enable ssh support") },
+  { oPuttySupport, "enable-putty-support", 0,
+#ifdef HAVE_W32_SYSTEM
+      N_("enable putty support")
+#else
+      "@"
+#endif
+  },
   { oWriteEnvFile, "write-env-file", 2|8,
             N_("|FILE|write environment settings also to FILE")},
   {0}
@@ -202,6 +220,17 @@ static ARGPARSE_OPTS opts[] = {
 #endif
 
 
+#ifdef HAVE_W32_SYSTEM
+/* Flag indicating that support for Putty has been enabled.  */
+static int putty_support;
+/* A magic value used with WM_COPYDATA.  */
+#define PUTTY_IPC_MAGIC 0x804e50ba
+/* To avoid surprises we limit the size of the mapped IPC file to this
+   value.  Putty currently (0.62) uses 8k, thus 16k should be enough
+   for the foreseeable future.  */
+#define PUTTY_IPC_MAXLEN 16384
+#endif /*HAVE_W32_SYSTEM*/
+
 /* The list of open file descriptors at startup.  Note that this list
    has been allocated using the standard malloc.  */
 static int *startup_fd_list;
@@ -805,6 +834,13 @@ main (int argc, char **argv )
         case oKeepDISPLAY: opt.keep_display = 1; break;
 
 	case oSSHSupport:  opt.ssh_support = 1; break;
+        case oPuttySupport:
+#        ifdef HAVE_W32_SYSTEM
+          putty_support = 1;
+          opt.ssh_support = 1;
+#        endif
+          break;
+
         case oWriteEnvFile:
           if (pargs.r_type)
             env_file_name = pargs.r.ret_str;
@@ -928,6 +964,11 @@ main (int argc, char **argv )
               GC_OPT_FLAG_NONE|GC_OPT_FLAG_RUNTIME);
       printf ("disable-scdaemon:%lu:\n",
               GC_OPT_FLAG_NONE|GC_OPT_FLAG_RUNTIME);
+#ifdef HAVE_W32_SYSTEM
+      printf ("enable-putty-support:%lu:\n", GC_OPT_FLAG_NONE);
+#else
+      printf ("enable-ssh-support:%lu:\n", GC_OPT_FLAG_NONE);
+#endif
 
       agent_exit (0);
     }
@@ -1292,6 +1333,8 @@ agent_exit (int rc)
 static void
 agent_init_default_ctrl (ctrl_t ctrl)
 {
+  assert (ctrl->session_env);
+
   /* Note we ignore malloc errors because we can't do much about it
      and the request will fail anyway shortly after this
      initialization. */
@@ -1309,7 +1352,6 @@ agent_init_default_ctrl (ctrl_t ctrl)
     xfree (ctrl->lc_messages);
   ctrl->lc_messages = default_lc_messages? xtrystrdup (default_lc_messages)
                                     /**/ : NULL;
-
 }
 
 
@@ -1788,6 +1830,199 @@ check_nonce (ctrl_t ctrl, assuan_sock_nonce_t *nonce)
 }
 
 
+#ifdef HAVE_W32_SYSTEM
+/* The window message processing function for Putty.  Warning: This
+   code runs as a native Windows thread.  Use of our own functions
+   needs to be bracket with pth_leave/pth_enter. */
+static LRESULT CALLBACK
+putty_message_proc (HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
+{
+  int ret = 0;
+  int w32rc;
+  COPYDATASTRUCT *cds;
+  const char *mapfile;
+  HANDLE maphd;
+  PSID mysid = NULL;
+  PSID mapsid = NULL;
+  void *data = NULL;
+  PSECURITY_DESCRIPTOR psd = NULL;
+  ctrl_t ctrl = NULL;
+
+  if (msg != WM_COPYDATA)
+    {
+      /* pth_leave (); */
+      /* log_debug ("putty loop: received WM_%u\n", msg ); */
+      /* pth_enter (); */
+      return DefWindowProc (hwnd, msg, wparam, lparam);
+    }
+
+  cds = (COPYDATASTRUCT*)lparam;
+  if (cds->dwData != PUTTY_IPC_MAGIC)
+    return 0;  /* Ignore data with the wrong magic.  */
+  mapfile = cds->lpData;
+  if (!cds->cbData || mapfile[cds->cbData - 1])
+    return 0;  /* Ignore empty and non-properly terminated strings.  */
+
+  if (DBG_ASSUAN)
+    {
+      pth_leave ();
+      log_debug ("ssh map file '%s'", mapfile);
+      pth_enter ();
+    }
+
+  maphd = OpenFileMapping (FILE_MAP_ALL_ACCESS, FALSE, mapfile);
+  if (DBG_ASSUAN)
+    {
+      pth_leave ();
+      log_debug ("ssh map handle %p\n", maphd);
+      pth_enter ();
+    }
+
+  if (!maphd || maphd == INVALID_HANDLE_VALUE)
+    return 0;
+
+  pth_leave ();
+
+  mysid = w32_get_user_sid ();
+  if (!mysid)
+    {
+      log_error ("error getting my sid\n");
+      goto leave;
+    }
+
+  w32rc = GetSecurityInfo (maphd, SE_KERNEL_OBJECT,
+                           OWNER_SECURITY_INFORMATION,
+                           &mapsid, NULL, NULL, NULL,
+                           &psd);
+  if (w32rc)
+    {
+      log_error ("error getting sid of ssh map file: rc=%d", w32rc);
+      goto leave;
+    }
+
+  if (DBG_ASSUAN)
+    {
+      char *sidstr;
+
+      if (!ConvertSidToStringSid (mysid, &sidstr))
+        sidstr = NULL;
+      log_debug ("          my sid: '%s'", sidstr? sidstr: "[error]");
+      LocalFree (sidstr);
+      if (!ConvertSidToStringSid (mapsid, &sidstr))
+        sidstr = NULL;
+      log_debug ("ssh map file sid: '%s'", sidstr? sidstr: "[error]");
+      LocalFree (sidstr);
+    }
+
+  if (!EqualSid (mysid, mapsid))
+    {
+      log_error ("ssh map file has a non-matching sid\n");
+      goto leave;
+    }
+
+  data = MapViewOfFile (maphd, FILE_MAP_ALL_ACCESS, 0, 0, 0);
+  if (DBG_ASSUAN)
+    log_debug ("ssh IPC buffer at %p\n", data);
+  if (!data)
+    goto leave;
+
+  /* log_printhex ("request:", data, 20); */
+
+  ctrl = xtrycalloc (1, sizeof *ctrl);
+  if (!ctrl)
+    {
+      log_error ("error allocating connection control data: %s\n",
+                 strerror (errno) );
+      goto leave;
+    }
+  ctrl->session_env = session_env_new ();
+  if (!ctrl->session_env)
+    {
+      log_error ("error allocating session environment block: %s\n",
+                 strerror (errno) );
+      goto leave;
+    }
+
+  agent_init_default_ctrl (ctrl);
+  if (!serve_mmapped_ssh_request (ctrl, data, PUTTY_IPC_MAXLEN))
+    ret = 1; /* Valid ssh message has been constructed.  */
+  agent_deinit_default_ctrl (ctrl);
+  /* log_printhex ("  reply:", data, 20); */
+
+ leave:
+  xfree (ctrl);
+  if (data)
+    UnmapViewOfFile (data);
+  xfree (mapsid);
+  if (psd)
+    LocalFree (psd);
+  xfree (mysid);
+  CloseHandle (maphd);
+
+  pth_enter ();
+
+  return ret;
+}
+#endif /*HAVE_W32_SYSTEM*/
+
+
+#ifdef HAVE_W32_SYSTEM
+/* The thread handling Putty's IPC requests.  */
+static void *
+putty_message_thread (void *arg)
+{
+  WNDCLASS wndwclass = {0, putty_message_proc, 0, 0,
+                        NULL, NULL, NULL, NULL, NULL, "Pageant"};
+  HWND hwnd;
+  MSG msg;
+
+  (void)arg;
+
+  if (opt.verbose)
+    log_info ("putty message loop thread 0x%lx started\n", pth_thread_id ());
+
+  /* The message loop runs as thread independet from out Pth system.
+     This also meand that we need to make sure that we switch back to
+     our system before calling any no-windows function.  */
+  pth_enter ();
+
+  /* First create a window to make sure that a message queue exists
+     for this thread.  */
+  if (!RegisterClass (&wndwclass))
+    {
+      pth_leave ();
+      log_error ("error registering Pageant window class");
+      return NULL;
+    }
+  hwnd = CreateWindowEx (0, "Pageant", "Pageant", 0,
+                         0, 0, 0, 0,
+                         HWND_MESSAGE,  /* hWndParent */
+                         NULL,          /* hWndMenu   */
+                         NULL,          /* hInstance  */
+                         NULL);         /* lpParm     */
+  if (!hwnd)
+    {
+      pth_leave ();
+      log_error ("error creating Pageant window");
+      return NULL;
+    }
+
+  while (GetMessage(&msg, NULL, 0, 0))
+    {
+      TranslateMessage(&msg);
+      DispatchMessage(&msg);
+    }
+
+  /* Back to Pth.  */
+  pth_leave ();
+
+  if (opt.verbose)
+    log_info ("putty message loop thread 0x%lx stopped\n", pth_thread_id ());
+  return NULL;
+}
+#endif /*HAVE_W32_SYSTEM*/
+
+
 /* This is the standard connection thread's main function.  */
 static void *
 start_connection_thread (void *arg)
@@ -1897,6 +2132,21 @@ handle_connections (gnupg_fd_t listen_fd, gnupg_fd_t listen_fd_ssh)
 #endif
   time_ev = NULL;
 
+  /* On Windows we need to fire up a separate thread to listen for
+     requests from Putty (an SSH client), so we can replace Putty's
+     Pageant (its ssh-agent implementation). */
+#ifdef HAVE_W32_SYSTEM
+  if (putty_support)
+    {
+      pth_attr_set (tattr, PTH_ATTR_NAME, "putty message loop");
+      if (!pth_spawn (tattr, putty_message_thread, NULL))
+        {
+          log_error ("error spawning putty message loop: %s\n",
+                     strerror (errno) );
+        }
+    }
+#endif /*HAVE_W32_SYSTEM*/
+
   /* Set a flag to tell call-scd.c that it may enable event
      notifications.  */
   opt.sigusr2_enabled = 1;
diff --git a/common/sysutils.c b/common/sysutils.c
index 82bc81f..8f93ff5 100644
--- a/common/sysutils.c
+++ b/common/sysutils.c
@@ -1,6 +1,7 @@
 /* sysutils.c -  system helpers
  * Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004,
  *               2007, 2008  Free Software Foundation, Inc.
+ * Copyright (C) 2013 Werner Koch
  *
  * This file is part of GnuPG.
  *
@@ -495,3 +496,59 @@ gnupg_allow_set_foregound_window (pid_t pid)
                (unsigned long)pid, w32_strerror (-1));
 #endif
 }
+
+
+#ifdef HAVE_W32_SYSTEM
+/* Return the user's security identifier from the current process.  */
+PSID
+w32_get_user_sid (void)
+{
+  int okay = 0;
+  HANDLE proc = NULL;
+  HANDLE token = NULL;
+  TOKEN_USER *user = NULL;
+  PSID sid = NULL;
+  DWORD tokenlen, sidlen;
+
+  proc = OpenProcess (PROCESS_QUERY_INFORMATION, FALSE, GetCurrentProcessId());
+  if (!proc)
+    goto leave;
+
+  if (!OpenProcessToken (proc, TOKEN_QUERY, &token))
+    goto leave;
+
+  if (!GetTokenInformation (token, TokenUser, NULL, 0, &tokenlen)
+      && GetLastError() != ERROR_INSUFFICIENT_BUFFER)
+    goto leave;
+
+  user = xtrymalloc (tokenlen);
+  if (!user)
+    goto leave;
+
+  if (!GetTokenInformation (token, TokenUser, user, tokenlen, &tokenlen))
+    goto leave;
+  if (!IsValidSid (user->User.Sid))
+    goto leave;
+  sidlen = GetLengthSid (user->User.Sid);
+  sid = xtrymalloc (sidlen);
+  if (!sid)
+    goto leave;
+  if (!CopySid (sidlen, sid, user->User.Sid))
+    goto leave;
+  okay = 1;
+
+ leave:
+  xfree (user);
+  if (token)
+    CloseHandle (token);
+  if (proc)
+    CloseHandle (proc);
+
+  if (!okay)
+    {
+      xfree (sid);
+      sid = NULL;
+    }
+  return sid;
+}
+#endif /*HAVE_W32_SYSTEM*/
diff --git a/common/sysutils.h b/common/sysutils.h
index fd4340f..0a05e2b 100644
--- a/common/sysutils.h
+++ b/common/sysutils.h
@@ -51,8 +51,9 @@ void gnupg_allow_set_foregound_window (pid_t pid);
 
 
 #ifdef HAVE_W32_SYSTEM
+void *w32_get_user_sid (void);
 
-#include "../jnlib/w32help.h"
+# include "../jnlib/w32help.h"
 
 #endif /*HAVE_W32_SYSTEM*/
 
diff --git a/tools/gpgconf-comp.c b/tools/gpgconf-comp.c
index 49c082b..72e7134 100644
--- a/tools/gpgconf-comp.c
+++ b/tools/gpgconf-comp.c
@@ -482,7 +482,7 @@ static gc_option_t gc_options_gpg_agent[] =
      GC_ARG_TYPE_NONE, GC_BACKEND_GPG_AGENT },
 
    { "Configuration",
-     GC_OPT_FLAG_GROUP, GC_LEVEL_EXPERT,
+     GC_OPT_FLAG_GROUP, GC_LEVEL_BASIC,
      "gnupg", N_("Options controlling the configuration") },
    { "options", GC_OPT_FLAG_NONE, GC_LEVEL_EXPERT,
      "gnupg", "|FILE|read options from FILE",
@@ -490,6 +490,12 @@ static gc_option_t gc_options_gpg_agent[] =
    { "disable-scdaemon", GC_OPT_FLAG_NONE, GC_LEVEL_ADVANCED,
      "gnupg", "do not use the SCdaemon",
      GC_ARG_TYPE_NONE, GC_BACKEND_GPG_AGENT },
+   { "enable-ssh-support", GC_OPT_FLAG_NONE, GC_LEVEL_BASIC,
+     "gnupg", "enable ssh support",
+     GC_ARG_TYPE_NONE, GC_BACKEND_GPG_AGENT },
+   { "enable-putty-support", GC_OPT_FLAG_NONE, GC_LEVEL_BASIC,
+     "gnupg", "enable putty support",
+     GC_ARG_TYPE_NONE, GC_BACKEND_GPG_AGENT },
 
    { "Debug",
      GC_OPT_FLAG_GROUP, GC_LEVEL_ADVANCED,

commit ed056d67c7c93306b68829f83a2565e978dcfd9b
Author: Werner Koch <wk at gnupg.org>
Date:   Wed Jul 3 13:10:29 2013 +0200

    agent: Fix binary vs. text mode problem in ssh.
    
    * agent/command-ssh.c (file_to_buffer)
    (ssh_handler_request_identities): Open streams in binary mode.
    (start_command_handler_ssh): Factor some code out to ..
    (setup_ssh_env): new function.
    --
    
    This is for now a theoretical fix because there is no ssh client yet
    which uses the GnuPG style IPC.  OpenSSL for Cygwin uses only a quite
    similar one.  gniibe suggested to implement that IPC style in
    Libassuan so that a Cygwin version of OpenSSL may be used with GnuPG.
    
    Signed-off-by: Werner Koch <wk at gnupg.org>

diff --git a/agent/command-ssh.c b/agent/command-ssh.c
index 5da1a71..4cd3537 100644
--- a/agent/command-ssh.c
+++ b/agent/command-ssh.c
@@ -683,7 +683,7 @@ file_to_buffer (const char *filename, unsigned char **buffer, size_t *buffer_n)
   buffer_new = NULL;
   err = 0;
 
-  stream = es_fopen (filename, "r");
+  stream = es_fopen (filename, "rb");
   if (! stream)
     {
       err = gpg_error_from_syserror ();
@@ -2200,7 +2200,7 @@ ssh_handler_request_identities (ctrl_t ctrl,
   key_counter = 0;
   err = 0;
 
-  key_blobs = es_mopen (NULL, 0, 0, 1, NULL, NULL, "r+");
+  key_blobs = es_mopen (NULL, 0, 0, 1, NULL, NULL, "r+b");
   if (! key_blobs)
     {
       err = gpg_error_from_syserror ();
@@ -3275,44 +3275,51 @@ ssh_request_process (ctrl_t ctrl, estream_t stream_sock)
   return !!err;
 }
 
-/* Start serving client on SOCK_CLIENT.  */
-void
-start_command_handler_ssh (ctrl_t ctrl, gnupg_fd_t sock_client)
+
+/* Because the ssh protocol does not send us information about the the
+   current TTY setting, we use this function to use those from startup
+   or those explictly set.  */
+static gpg_error_t
+setup_ssh_env (ctrl_t ctrl)
 {
-  estream_t stream_sock = NULL;
+  static const char *names[] =
+    {"GPG_TTY", "DISPLAY", "TERM", "XAUTHORITY", "PINENTRY_USER_DATA", NULL};
   gpg_error_t err = 0;
-  int ret;
+  int idx;
+  const char *value;
 
-  /* Because the ssh protocol does not send us information about the
-     the current TTY setting, we resort here to use those from startup
-     or those explictly set.  */
-  {
-    static const char *names[] =
-      {"GPG_TTY", "DISPLAY", "TERM", "XAUTHORITY", "PINENTRY_USER_DATA", NULL};
-    int idx;
-    const char *value;
+  for (idx=0; !err && names[idx]; idx++)
+    if (!session_env_getenv (ctrl->session_env, names[idx])
+        && (value = session_env_getenv (opt.startup_env, names[idx])))
+      err = session_env_setenv (ctrl->session_env, names[idx], value);
 
-    for (idx=0; !err && names[idx]; idx++)
-      if (!session_env_getenv (ctrl->session_env, names[idx])
-          && (value = session_env_getenv (opt.startup_env, names[idx])))
-        err = session_env_setenv (ctrl->session_env, names[idx], value);
+  if (!err && !ctrl->lc_ctype && opt.startup_lc_ctype)
+    if (!(ctrl->lc_ctype = xtrystrdup (opt.startup_lc_ctype)))
+      err = gpg_error_from_syserror ();
 
-    if (!err && !ctrl->lc_ctype && opt.startup_lc_ctype)
-      if (!(ctrl->lc_ctype = xtrystrdup (opt.startup_lc_ctype)))
-        err = gpg_error_from_syserror ();
+  if (!err && !ctrl->lc_messages && opt.startup_lc_messages)
+    if (!(ctrl->lc_messages = xtrystrdup (opt.startup_lc_messages)))
+      err = gpg_error_from_syserror ();
 
-    if (!err && !ctrl->lc_messages && opt.startup_lc_messages)
-      if (!(ctrl->lc_messages = xtrystrdup (opt.startup_lc_messages)))
-        err = gpg_error_from_syserror ();
+  if (err)
+    log_error ("error setting default session environment: %s\n",
+               gpg_strerror (err));
 
-    if (err)
-      {
-        log_error ("error setting default session environment: %s\n",
-                   gpg_strerror (err));
-        goto out;
-      }
-  }
+  return err;
+}
+
+
+/* Start serving client on SOCK_CLIENT.  */
+void
+start_command_handler_ssh (ctrl_t ctrl, gnupg_fd_t sock_client)
+{
+  estream_t stream_sock = NULL;
+  gpg_error_t err;
+  int ret;
 
+  err = setup_ssh_env (ctrl);
+  if (err)
+    goto out;
 
   /* Create stream from socket.  */
   stream_sock = es_fdopen (FD2INT(sock_client), "r+");

commit 27e403bff7a6e46a390ae5f3d63ea63701d1435d
Author: Werner Koch <wk at gnupg.org>
Date:   Wed Jul 3 12:59:56 2013 +0200

    Silence deprecated warnings from gcc 4.6.3.
    
    * configure.ac (AH_BOTTOM): Define GCRYPT_NO_DEPRECATED.
    --
    
    Frankly, I don't understand why gcc prints them.  We don't use them.
    
    Signed-off-by: Werner Koch <wk at gnupg.org>

diff --git a/configure.ac b/configure.ac
index b85124c..702b8d3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -442,6 +442,9 @@ AH_BOTTOM([
 /* We don't want the old assuan codes anymore. */
 #define _ASSUAN_ONLY_GPG_ERRORS 1
 
+/* We don't need any of the old gcrypt functions.  */
+#define GCRYPT_NO_DEPRECATED 1
+
 /* We explicitly need to disable PTH's soft mapping as Debian
    currently enables it by default for no reason. */
 #define PTH_SYSCALL_SOFT 0

commit 9b8518ffc97696634cd6d493fed872a512993c52
Author: Werner Koch <wk at gnupg.org>
Date:   Wed Jul 3 09:30:22 2013 +0200

    estream: Backport es_fopemem_init from master.
    
    * common/estream.c (es_fopenmem_init): New.
    
    Signed-off-by: Werner Koch <wk at gnupg.org>

diff --git a/common/estream.c b/common/estream.c
index 304e0e6..35b2af0 100644
--- a/common/estream.c
+++ b/common/estream.c
@@ -2362,6 +2362,38 @@ es_fopenmem (size_t memlimit, const char *ES__RESTRICT mode)
 }
 
 
+/* This is the same as es_fopenmem but intializes the memory with a
+   copy of (DATA,DATALEN).  The stream is initally set to the
+   beginning.  If MEMLIMIT is not 0 but shorter than DATALEN it
+   DATALEN will be used as the value for MEMLIMIT.  */
+estream_t
+es_fopenmem_init (size_t memlimit, const char *ES__RESTRICT mode,
+                  const void *data, size_t datalen)
+{
+  estream_t stream;
+
+  if (memlimit && memlimit < datalen)
+    memlimit = datalen;
+
+  stream = es_fopenmem (memlimit, mode);
+  if (stream && data && datalen)
+    {
+      if (es_writen (stream, data, datalen, NULL))
+        {
+          int saveerrno = errno;
+          es_fclose (stream);
+          stream = NULL;
+          _set_errno (saveerrno);
+        }
+      else
+        {
+          es_seek (stream, 0L, SEEK_SET, NULL);
+          es_set_indicators (stream, 0, 0);
+        }
+    }
+  return stream;
+}
+
 
 estream_t
 es_fopencookie (void *ES__RESTRICT cookie,
diff --git a/common/estream.h b/common/estream.h
index f72e4c6..35df20b 100644
--- a/common/estream.h
+++ b/common/estream.h
@@ -76,6 +76,7 @@
 #define es_fopen              _ESTREAM_PREFIX(es_fopen)
 #define es_mopen              _ESTREAM_PREFIX(es_mopen)
 #define es_fopenmem           _ESTREAM_PREFIX(es_fopenmem)
+#define es_fopenmem_init      _ESTREAM_PREFIX(es_fopenmem_init)
 #define es_fdopen             _ESTREAM_PREFIX(es_fdopen)
 #define es_fdopen_nc          _ESTREAM_PREFIX(es_fdopen_nc)
 #define es_fpopen             _ESTREAM_PREFIX(es_fpopen)
@@ -243,6 +244,8 @@ estream_t es_mopen (unsigned char *ES__RESTRICT data,
 		    void (*func_free) (void *mem),
 		    const char *ES__RESTRICT mode);
 estream_t es_fopenmem (size_t memlimit, const char *ES__RESTRICT mode);
+estream_t es_fopenmem_init (size_t memlimit, const char *ES__RESTRICT mode,
+                            const void *data, size_t datalen);
 estream_t es_fdopen (int filedes, const char *mode);
 estream_t es_fdopen_nc (int filedes, const char *mode);
 estream_t es_fpopen (FILE *fp, const char *mode);

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

Summary of changes:
 NEWS                 |    3 +
 agent/agent.h        |    4 +
 agent/command-ssh.c  |  217 ++++++++++++++++++++++++++++++++++++------
 agent/gpg-agent.c    |  256 +++++++++++++++++++++++++++++++++++++++++++++++++-
 common/estream.c     |   32 ++++++
 common/estream.h     |    3 +
 common/sysutils.c    |   57 +++++++++++
 common/sysutils.h    |    3 +-
 configure.ac         |    3 +
 po/be.po             |    5 +-
 po/ca.po             |   23 +++--
 po/cs.po             |   12 ++-
 po/da.po             |    7 +-
 po/de.po             |    9 +-
 po/el.po             |   14 ++-
 po/eo.po             |   14 ++-
 po/es.po             |   12 ++-
 po/et.po             |   14 ++-
 po/fi.po             |   14 ++-
 po/fr.po             |   12 ++-
 po/gl.po             |   14 ++-
 po/hu.po             |   14 ++-
 po/id.po             |   14 ++-
 po/it.po             |   14 ++-
 po/ja.po             |    7 +-
 po/nb.po             |    5 +-
 po/pl.po             |    7 +-
 po/pt.po             |   14 ++-
 po/pt_BR.po          |   17 ++-
 po/ro.po             |   14 ++-
 po/ru.po             |    7 +-
 po/sk.po             |   14 ++-
 po/sv.po             |    7 +-
 po/tr.po             |    7 +-
 po/uk.po             |    7 +-
 po/zh_CN.po          |   14 ++-
 po/zh_TW.po          |   12 ++-
 tools/gpgconf-comp.c |    8 ++-
 38 files changed, 771 insertions(+), 139 deletions(-)


hooks/post-receive
-- 
The GNU Privacy Guard
http://git.gnupg.org




More information about the Gnupg-commits mailing list