agent/
[gnupg.git] / agent / trustlist.c
index 16b7dc3..edb0065 100644 (file)
 
 #include "agent.h"
 #include <assuan.h> /* fixme: need a way to avoid assuan calls here */
+#include "i18n.h"
 
 static const char headerblurb[] =
-"# This is the list of trusted keys.  Comments like this one and empty\n"
-"# lines are allowed but keep in mind that the entire file is integrity\n"
+"# This is the list of trusted keys.  Comment lines, like this one, as\n"
+"# well as empty lines are ignored. The entire file may be integrity\n"
 "# protected by the use of a MAC, so changing the file does not make\n"
-"# much sense without the knowledge of the MAC key.  Lines do have a\n"
-"# length limit but this is not serious limitation as the format of the\n"
+"# sense without the knowledge of the MAC key.  Lines do have a length\n"
+"# limit but this is not serious limitation as the format of the\n"
 "# entries is fixed and checked by gpg-agent: A non-comment line starts\n"
-"# with optional white spaces, followed by exactly 40 hex character,\n"
-"# optioanlly followed by a flag character which my either be 'P', 'S'\n"
-"# or '*'. Additional data delimited with by a white space is ignored.\n"
+"# with optional white spaces, followed by the SHA-1 fingerpint in hex,\n"
+"# optionally followed by a flag character which my either be 'P', 'S'\n"
+"# or '*'. Additional data, delimited by white space, is ignored.\n"
+"#\n"
 "# NOTE: You should give the gpg-agent a HUP after editing this file.\n"
 "\n";
 
@@ -97,7 +99,7 @@ static int
 read_list (char *key, int *keyflag)
 {
   int rc;
-  int c, i;
+  int c, i, j;
   char *p, line[256];
   
   if (!trustfp)
@@ -125,16 +127,17 @@ read_list (char *key, int *keyflag)
                                  : GPG_ERR_INCOMPLETE_LINE);
         }
       
-      /* Allow for emty lines and spaces */
+      /* Allow for empty lines and spaces */
       for (p=line; spacep (p); p++)
         ;
     }
   while (!*p || *p == '\n' || *p == '#');
   
-  for (i=0; hexdigitp (p+i) && i < 40; i++)
-    key[i] = p[i] >= 'a'? (p[i] & 0xdf): p[i];
-  key[i] = 0;
-  if (i!=40 || !(spacep (p+i) || p[i] == '\n'))
+  for (i=j=0; (p[i] == ':' || hexdigitp (p+i)) && j < 40; i++)
+    if ( p[i] != ':' )
+      key[j++] = p[i] >= 'a'? (p[i] & 0xdf): p[i];
+  key[j] = 0;
+  if (j!=40 || !(spacep (p+i) || p[i] == '\n'))
     {
       log_error ("invalid formatted fingerprint in trustlist\n");
       return gpg_error (GPG_ERR_BAD_DATA);
@@ -288,17 +291,30 @@ agent_marktrusted (CTRL ctrl, const char *name, const char *fpr, int flag)
       return gpg_error (GPG_ERR_NOT_SUPPORTED);
     }
 
-  /* insert a new one */
+  /* Insert a new one. */
   if (asprintf (&desc,
-                "Please verify that the certificate identified as:%%0A"
-                "  \"%s\"%%0A"
-                "has the fingerprint:%%0A"
-                "  %s", name, fpr) < 0 )
+                /* TRANSLATORS: This prompt is shown by the Pinentry
+                   and has one special property: A "%%0A" is used by
+                   Pinentry to insert a line break.  The double
+                   percent sign is actually needed because it is also
+                   a printf format string.  If you need to insert a
+                   plain % sign, you need to encode it as "%%25".  The
+                   second "%s" gets replaced by a hexdecimal
+                   fingerprint string whereas the first one receives
+                   the name as store in the certificate. */
+                _("Please verify that the certificate identified as:%%0A"
+                  "  \"%s\"%%0A"
+                  "has the fingerprint:%%0A"
+                  "  %s"), name, fpr) < 0 )
     {
       trustfp_used--;
       return out_of_core ();
     }
-  rc = agent_get_confirmation (ctrl, desc, "Correct", "No");
+
+  /* TRANSLATORS: "Correct" is the label of a button and intended to
+     be hit if the fingerprint matches the one of the CA.  The other
+     button is "the default "Cancel" of the Pinentry. */
+  rc = agent_get_confirmation (ctrl, desc, _("Correct"), NULL);
   free (desc);
   if (rc)
     {
@@ -307,15 +323,23 @@ agent_marktrusted (CTRL ctrl, const char *name, const char *fpr, int flag)
     }
 
   if (asprintf (&desc,
-                "Do you ultimately trust%%0A"
-                "  \"%s\"%%0A"
-                "to correctly certify user certificates?",
+                /* TRANSLATORS: This prompt is shown by the Pinentry
+                   and has one special property: A "%%0A" is used by
+                   Pinentry to insert a line break.  The double
+                   percent sign is actually needed because it is also
+                   a printf format string.  If you need to insert a
+                   plain % sign, you need to encode it as "%%25".  The
+                   "%s" gets replaced by the name as store in the
+                   certificate. */
+                _("Do you ultimately trust%%0A"
+                  "  \"%s\"%%0A"
+                  "to correctly certify user certificates?"),
                 name) < 0 )
     {
       trustfp_used--;
       return out_of_core ();
     }
-  rc = agent_get_confirmation (ctrl, desc, "Yes", "No");
+  rc = agent_get_confirmation (ctrl, desc, _("Yes"), _("No"));
   free (desc);
   if (rc)
     {