2010-04-23 Marcus Brinkmann <marcus@g10code.de>
[gnupg.git] / tools / symcryptrun.c
index b45e356..2ef6822 100644 (file)
@@ -1,11 +1,11 @@
 /* symcryptrun.c - Tool to call simple symmetric encryption tools.
- *     Copyright (C) 2005 Free Software Foundation, Inc.
+ *     Copyright (C) 2005, 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,
@@ -14,9 +14,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/>.
  */
 
 
@@ -76,7 +74,6 @@
 #ifdef HAVE_PTY_H
 #include <pty.h>
 #endif
-#include <utmp.h>
 #include <ctype.h>
 #ifdef HAVE_LOCALE_H
 #include <locale.h>
@@ -203,8 +200,8 @@ my_strusage (int level)
       break;
     case 13: p = VERSION; break;
     case 17: p = PRINTABLE_OS_NAME; break;
-    case 19: p = _("Please report bugs to <" PACKAGE_BUGREPORT ">.\n");
-      break;
+    case 19: p = _("Please report bugs to <@EMAIL@>.\n"); break;
+
     case 1:
     case 40: p = _("Usage: symcryptrun [options] (-h for help)");
       break;
@@ -223,21 +220,6 @@ my_strusage (int level)
 }
 
 
-/* Initialize the gettext system.  */
-static void
-i18n_init(void)
-{
-#ifdef USE_SIMPLE_GETTEXT
-  set_gettext_file (PACKAGE_GT);
-#else
-# ifdef ENABLE_NLS
-  setlocale (LC_ALL, "");
-  bindtextdomain (PACKAGE_GT, LOCALEDIR);
-  textdomain (PACKAGE_GT);
-# endif
-#endif
-}
-
 \f
 /* This is in the GNU C library in unistd.h.  */
 
@@ -253,6 +235,8 @@ i18n_init(void)
        __result; }))
 #endif
 
+/* Include the implementation of map_spwq_error.  */
+MAP_SPWQ_ERROR_IMPL
 
 /* Unlink a file, and shred it if SHRED is true.  */
 int
@@ -439,42 +423,17 @@ confucius_get_pass (const char *cacheid, int again, int *canceled)
 {
   int err;
   char *pw;
-#ifdef HAVE_LANGINFO_CODESET
-  char *orig_codeset = NULL;
-#endif
+  char *orig_codeset;
 
   if (canceled)
     *canceled = 0;
   
-#ifdef ENABLE_NLS
-  /* The Assuan agent protocol requires us to transmit utf-8 strings */
-  orig_codeset = bind_textdomain_codeset (PACKAGE_GT, NULL);
-#ifdef HAVE_LANGINFO_CODESET
-  if (!orig_codeset)
-    orig_codeset = nl_langinfo (CODESET);
-#endif
-  if (orig_codeset && !strcmp (orig_codeset, "UTF-8"))
-    orig_codeset = NULL;
-  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_GT, "utf-8"))
-        orig_codeset = NULL; 
-    }
-#endif
-
+  orig_codeset = i18n_switchto_utf8 ();
   pw = simple_pwquery (cacheid,
                        again ? _("does not match - try again"):NULL,
                        _("Passphrase:"), NULL, 0, &err);
-
-#ifdef ENABLE_NLS
-  if (orig_codeset)
-    {
-      bind_textdomain_codeset (PACKAGE_GT, orig_codeset);
-      xfree (orig_codeset);
-    }
-#endif
+  err = map_spwq_error (err);
+  i18n_switchback (orig_codeset);
 
   if (!pw)
     {
@@ -923,10 +882,9 @@ main (int argc, char **argv)
   set_strusage (my_strusage);
   log_set_prefix ("symcryptrun", 1);
 
-  /* Try to auto set the character set.  */
-  set_native_charset (NULL); 
-
+  /* Make sure that our subsystems are ready.  */
   i18n_init();
+  init_common_subsystems (&argc, &argv);
 
   opt.homedir = default_homedir ();
 
@@ -1040,13 +998,22 @@ main (int argc, char **argv)
   setup_libgcrypt_logging ();
   gcry_control (GCRYCTL_INIT_SECMEM, 16384, 0);
 
+  /* Tell simple-pwquery about the the standard socket name.  */
+  {
+    char *tmp = make_filename (opt.homedir, "S.gpg-agent", NULL);
+    simple_pw_set_socket (tmp);
+    xfree (tmp);
+  }
+
   if (!opt.class)
     {
       log_error (_("no class provided\n"));
       res = 1;
     }
   else if (!strcmp (opt.class, "confucius"))
-    res = confucius_main (mode, argc, argv);
+    {
+      res = confucius_main (mode, argc, argv);
+    }
   else
     {
       log_error (_("class %s is not supported\n"), opt.class);