Fix bug 894.
[gnupg.git] / g10 / passphrase.c
index 122b251..8703580 100644 (file)
@@ -1,12 +1,12 @@
 /* passphrase.c -  Get a passphrase
  * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004,
- *               2005, 2006 Free Software Foundation, Inc.
+ *               2005, 2006, 2007 Free Software Foundation, Inc.
  *
  * This file is part of GnuPG.
  *
  * GnuPG is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
+ * the Free Software Foundation; either version 3 of the License, or
  * (at your option) any later version.
  *
  * GnuPG is distributed in the hope that it will be useful,
@@ -15,9 +15,7 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- * USA.
+ * along with this program; if not, see <http://www.gnu.org/licenses/>.
  */
 
 #include <config.h>
@@ -259,7 +257,7 @@ passphrase_get ( u32 *keyid, int mode, const char *cacheid,
   PKT_public_key *pk = xmalloc_clear( sizeof *pk );
   byte fpr[MAX_FINGERPRINT_LEN];
   int have_fpr = 0;
-  char *orig_codeset = NULL;
+  char *orig_codeset;
   char *my_prompt;
   char hexfprbuf[20*2+1];
   const char *my_cacheid;
@@ -279,20 +277,7 @@ passphrase_get ( u32 *keyid, int mode, const char *cacheid,
       pk = NULL; /* oops: no key for some reason */
     }
   
-#ifdef ENABLE_NLS
-  /* The Assuan agent protocol requires us to transmit utf-8 strings */
-  orig_codeset = bind_textdomain_codeset (PACKAGE, NULL);
-#ifdef HAVE_LANGINFO_CODESET
-  if (!orig_codeset)
-    orig_codeset = nl_langinfo (CODESET);
-#endif
-  if (orig_codeset)
-    { /* We only switch when we are able to restore the codeset later. */
-      orig_codeset = xstrdup (orig_codeset);
-      if (!bind_textdomain_codeset (PACKAGE, "utf-8"))
-        orig_codeset = NULL; 
-    }
-#endif
+  orig_codeset = i18n_switchto_utf8 ();
 
   if (custom_description)
     atext = native_to_utf8 (custom_description);
@@ -321,10 +306,11 @@ passphrase_get ( u32 *keyid, int mode, const char *cacheid,
 
 #undef KEYIDSTRING
 
-#define PROMPTSTRING _("You need a passphrase to unlock the secret" \
-                      " key for user:\n" \
+#define PROMPTSTRING _("Please enter the passphrase to unlock the" \
+                      " secret key for the OpenPGP certificate:\n" \
                       "\"%.*s\"\n" \
-                      "%u-bit %s key, ID %s, created %s%s\n" )
+                      "%u-bit %s key, ID %s,\n" \
+                       "created %s%s.\n" )
 
       atext = xmalloc ( 100 + strlen (PROMPTSTRING)  
                         + uidlen + 15 + strlen(algo_name) + keystrlen()
@@ -368,6 +354,9 @@ passphrase_get ( u32 *keyid, int mode, const char *cacheid,
   xfree (my_prompt);
   xfree (atext); atext = NULL;
 
+  i18n_switchback (orig_codeset);
+
+
   if (!rc)
     ;
   else if ( gpg_err_code (rc) == GPG_ERR_CANCELED )
@@ -389,14 +378,7 @@ passphrase_get ( u32 *keyid, int mode, const char *cacheid,
       if (canceled)
         *canceled = 1;
     }
-      
-#ifdef ENABLE_NLS
-  if (orig_codeset)
-    {
-      bind_textdomain_codeset (PACKAGE, orig_codeset);
-      xfree (orig_codeset);
-    }
-#endif
+
   if (pk)
     free_public_key( pk );
   if (rc)
@@ -467,7 +449,8 @@ ask_passphrase (const char *description,
     {
       if (strchr (description, '%'))
         {
-          char *tmp = unescape_percent_string (description);
+          char *tmp = unescape_percent_string
+            ((const unsigned char*)description);
           tty_printf ("\n%s\n", tmp);
           xfree (tmp);
         }