diff --git a/g10/keyedit.c b/g10/keyedit.c index 15500ef1d..cfbbed7c9 100644 --- a/g10/keyedit.c +++ b/g10/keyedit.c @@ -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)