g10: Allow relative path for specifying the file for bkuptocard.
authorNIIBE Yutaka <gniibe@fsij.org>
Thu, 24 Dec 2015 01:41:23 +0000 (10:41 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Thu, 24 Dec 2015 02:48:16 +0000 (11:48 +0900)
* g10/keyedit.c (keyedit_menu): Assume the file is under GNUPGHOME.
Also support tilda expansion.

g10/keyedit.c

index 15500ef..cfbbed7 100644 (file)
@@ -1927,17 +1927,23 @@ keyedit_menu (ctrl_t ctrl, const char *username, strlist_t locusr,
               backup key as generated by the card generation, parse
               that key and store it on card. */
            KBNODE node;
-           const char *fname;
+           char *fname;
            PACKET *pkt;
            IOBUF a;
 
-           fname = arg_string;
-           if (!*fname)
+            if (!*arg_string)
              {
                tty_printf (_("Command expects a filename argument\n"));
                break;
              }
 
+            if (*arg_string == DIRSEP_C)
+              fname = xstrdup (arg_string);
+            else if (*arg_string == '~')
+              fname = make_filename (arg_string, NULL);
+            else
+              fname = make_filename (opt.homedir, arg_string, NULL);
+
            /* Open that file.  */
            a = iobuf_open (fname);
            if (a && is_secured_file (iobuf_get_fd (a)))
@@ -1946,12 +1952,13 @@ keyedit_menu (ctrl_t ctrl, const char *username, strlist_t locusr,
                a = NULL;
                gpg_err_set_errno (EPERM);
              }
-           if (!a)
-             {
-               tty_printf (_("Can't open '%s': %s\n"),
-                           fname, strerror (errno));
-               break;
-             }
+            if (!a)
+              {
+                tty_printf (_("Can't open '%s': %s\n"),
+                            fname, strerror (errno));
+                xfree (fname);
+                break;
+              }
 
            /* Parse and check that file.  */
            pkt = xmalloc (sizeof *pkt);
@@ -1962,14 +1969,17 @@ keyedit_menu (ctrl_t ctrl, const char *username, strlist_t locusr,
            if (!err && pkt->pkttype != PKT_SECRET_KEY
                && pkt->pkttype != PKT_SECRET_SUBKEY)
              err = GPG_ERR_NO_SECKEY;
-           if (err)
-             {
-               tty_printf (_("Error reading backup key from '%s': %s\n"),
-                           fname, gpg_strerror (err));
-               free_packet (pkt);
-               xfree (pkt);
-               break;
-             }
+            if (err)
+              {
+                tty_printf (_("Error reading backup key from '%s': %s\n"),
+                            fname, gpg_strerror (err));
+                xfree (fname);
+                free_packet (pkt);
+                xfree (pkt);
+                break;
+              }
+
+           xfree (fname);
            node = new_kbnode (pkt);
 
            if (cmd == cmdCHECKBKUPKEY)