* card-util.c, delkey.c, keygen.c, plaintext.c, keyedit.c, passphrase.c,
[gnupg.git] / g10 / card-util.c
index a58dda0..066db0c 100644 (file)
@@ -67,7 +67,7 @@ change_pin (int chvno, int allow_admin)
 
   if (opt.batch)
     {
-      log_error (_("sorry, can't do this in batch mode\n"));
+      log_error (_("can't do this in batch mode\n"));
       return;
     }
 
@@ -523,6 +523,7 @@ change_url (void)
 static int
 fetch_url(void)
 {
+#if GNUPG_MAJOR_VERSION == 1
   int rc;
   struct agent_card_info_s info;
 
@@ -560,6 +561,9 @@ fetch_url(void)
     log_error("no URL set on card\n");
 
   return rc;
+#else
+  return 0;
+#endif
 }
 
 
@@ -577,17 +581,26 @@ change_login (const char *args)
       for (args++; spacep (args); args++)
         ;
       fp = fopen (args, "rb");
+#if GNUPG_MAJOR_VERSION == 1
+      if (fp && is_secured_file (fileno (fp)))
+        {
+          fclose (fp);
+          fp = NULL;
+          errno = EPERM;
+        }
+#endif
       if (!fp)
         {
-          tty_printf ("can't open `%s': %s\n", args, strerror (errno));
+          tty_printf (_("can't open `%s': %s\n"), args, strerror (errno));
           return -1;
         }
+          
       data = xmalloc (254);
       n = fread (data, 1, 254, fp);
       fclose (fp);
       if (n < 0)
         {
-          tty_printf ("error reading `%s': %s\n", args, strerror (errno));
+          tty_printf (_("error reading `%s': %s\n"), args, strerror (errno));
           xfree (data);
           return -1;
         }
@@ -832,6 +845,7 @@ restore_forced_chv1 (int *forced_chv1)
     }
 }
 
+#if GNUPG_MAJOR_VERSION == 1
 /* Helper for the key generation/edit functions.  */
 static void
 show_card_key_info (struct agent_card_info_s *info)
@@ -844,8 +858,9 @@ show_card_key_info (struct agent_card_info_s *info)
   print_sha1_fpr (NULL, info->fpr3valid? info->fpr3:NULL);
   tty_printf ("\n");
 }
+#endif
 
-
+#if GNUPG_MAJOR_VERSION == 1
 /* Helper for the key generation/edit functions.  */
 static int
 replace_existing_key_p (struct agent_card_info_s *info, int keyno)
@@ -860,12 +875,12 @@ replace_existing_key_p (struct agent_card_info_s *info, int keyno)
       log_info ("WARNING: such a key has already been stored on the card!\n");
       tty_printf ("\n");
       if ( !cpr_get_answer_is_yes( "cardedit.genkeys.replace_key",
-                                  _("Replace existing key? ")))
+                                  _("Replace existing key? (y/N) ")))
         return -1;
     }
   return 0;
 }
-
+#endif
 
 
 static void
@@ -878,9 +893,21 @@ generate_card_keys (const char *serialno)
   if (get_info_for_key_operation (&info))
     return;
 
-  want_backup = !(cpr_get_answer_is_yes 
+#if GNUPG_MAJOR_VERSION == 1
+  {
+    char *answer=cpr_get("cardedit.genkeys.backup_enc",
+                        _("Make off-card backup of encryption key? (Y/n) "));
+
+    want_backup=answer_is_yes_no_default(answer,1);
+    cpr_kill_prompt();
+    m_free(answer);
+  }
+#else
+  want_backup = cpr_get_answer_is_yes 
                   ( "cardedit.genkeys.backup_enc",
-                    _("Inhibit creation of encryption key backup? ")));
+                    _("Make off-card backup of encryption key? (Y/n) "));
+  /*FIXME: we need answer_is_yes_no_default()*/
+#endif
 
   if ( (info.fpr1valid && !fpr_is_zero (info.fpr1))
        || (info.fpr2valid && !fpr_is_zero (info.fpr2))
@@ -890,7 +917,7 @@ generate_card_keys (const char *serialno)
       log_info ("NOTE: keys are already stored on the card!\n");
       tty_printf ("\n");
       if ( !cpr_get_answer_is_yes( "cardedit.genkeys.replace_keys",
-                                  _("Replace existing keys? ")))
+                                  _("Replace existing keys? (y/N) ")))
         {
           agent_release_card_info (&info);
           return;
@@ -900,7 +927,7 @@ generate_card_keys (const char *serialno)
     {
       tty_printf ("\n");
       tty_printf (_("Please note that the factory settings of the PINs are\n"
-                    "   PIN = \"%s\"     Admin PIN = \"%s\"\n"
+                    "   PIN = `%s'     Admin PIN = `%s'\n"
                     "You should change them using the command --change-pin\n"),
                   "123456", "12345678");
       tty_printf ("\n");
@@ -909,8 +936,12 @@ generate_card_keys (const char *serialno)
   if (check_pin_for_key_operation (&info, &forced_chv1))
     goto leave;
   
+#if GNUPG_MAJOR_VERSION == 1
   generate_keypair (NULL, info.serialno,
                     want_backup? opt.homedir:NULL);
+#else
+  generate_keypair (NULL, info.serialno);
+#endif
 
  leave:
   agent_release_card_info (&info);
@@ -923,6 +954,7 @@ generate_card_keys (const char *serialno)
 int
 card_generate_subkey (KBNODE pub_keyblock, KBNODE sec_keyblock)
 {
+#if GNUPG_MAJOR_VERSION == 1
   struct agent_card_info_s info;
   int okay = 0;
   int forced_chv1 = 0;
@@ -969,6 +1001,9 @@ card_generate_subkey (KBNODE pub_keyblock, KBNODE sec_keyblock)
   agent_release_card_info (&info);
   restore_forced_chv1 (&forced_chv1);
   return okay;
+#else
+  return 0;
+#endif
 }
 
 
@@ -978,6 +1013,7 @@ card_generate_subkey (KBNODE pub_keyblock, KBNODE sec_keyblock)
 int 
 card_store_subkey (KBNODE node, int use)
 {
+#if GNUPG_MAJOR_VERSION == 1
   struct agent_card_info_s info;
   int okay = 0;
   int rc;
@@ -1098,6 +1134,9 @@ card_store_subkey (KBNODE node, int use)
     free_secret_key (copied_sk);
   agent_release_card_info (&info);
   return okay;
+#else
+  return 0;
+#endif
 }
 
 
@@ -1156,7 +1195,7 @@ card_edit (STRLIST commands)
     ;
   else if (opt.batch && !have_commands)
     {
-      log_error(_("can't do that in batchmode\n"));
+      log_error(_("can't do this in batch mode\n"));
       goto leave;
     }
 
@@ -1166,6 +1205,7 @@ card_edit (STRLIST commands)
       const char *arg_string = "";
       char *p;
       int i;
+      int cmd_admin_only;
       
       tty_printf("\n");
       if (redisplay )
@@ -1208,46 +1248,39 @@ card_edit (STRLIST commands)
            }
            trim_spaces(answer);
        }
-      while( *answer == '#' );
+      while ( *answer == '#' );
 
       arg_number = 0; /* Yes, here is the init which egcc complains about */
+      cmd_admin_only = 0;
       if (!*answer)
         cmd = cmdLIST; /* Default to the list command */
       else if (*answer == CONTROL_D)
         cmd = cmdQUIT;
-      else {
-        if ((p=strchr (answer,' ')))
-          {
-            *p++ = 0;
-            trim_spaces (answer);
-            trim_spaces (p);
-            arg_number = atoi(p);
-            arg_string = p;
-          }
-
-        for (i=0; cmds[i].name; i++ )
-          if (!ascii_strcasecmp (answer, cmds[i].name ))
-            break;
-
-        cmd = cmds[i].id;
-      }
+      else 
+        {
+          if ((p=strchr (answer,' ')))
+            {
+              *p++ = 0;
+              trim_spaces (answer);
+              trim_spaces (p);
+              arg_number = atoi(p);
+              arg_string = p;
+            }
+          
+          for (i=0; cmds[i].name; i++ )
+            if (!ascii_strcasecmp (answer, cmds[i].name ))
+              break;
 
-      if(!allow_admin)
-       switch(cmd)
-         {
-         case cmdNAME:
-         case cmdURL:
-         case cmdLOGIN:
-         case cmdLANG:
-         case cmdCAFPR:
-         case cmdFORCESIG:
-         case cmdGENERATE:
-           tty_printf ("\n");
-           tty_printf (_("Admin-only command\n"));
-           continue;
-         default:
-           break;
-         }
+          cmd = cmds[i].id;
+          cmd_admin_only = cmds[i].admin_only;
+        }
+
+      if (!allow_admin && cmd_admin_only)
+       {
+          tty_printf ("\n");
+          tty_printf (_("Admin-only command\n"));
+          continue;
+        }
 
       switch (cmd)
         {
@@ -1260,6 +1293,10 @@ card_edit (STRLIST commands)
 
        case cmdADMIN:
          allow_admin=!allow_admin;
+         if(allow_admin)
+           tty_printf(_("Admin commands are allowed\n"));
+         else
+           tty_printf(_("Admin commands are not allowed\n"));
          break;
 
         case cmdLIST: