version 1.330, 2019/05/29 08:30:26 |
version 1.334, 2019/07/05 04:55:40 |
|
|
#include "xmalloc.h" |
#include "xmalloc.h" |
#include "sshkey.h" |
#include "sshkey.h" |
#include "authfile.h" |
#include "authfile.h" |
#include "uuencode.h" |
|
#include "sshbuf.h" |
#include "sshbuf.h" |
#include "pathnames.h" |
#include "pathnames.h" |
#include "log.h" |
#include "log.h" |
|
|
|
|
if (!have_identity) |
if (!have_identity) |
ask_filename(pw, "Enter file in which the key is"); |
ask_filename(pw, "Enter file in which the key is"); |
if (stat(identity_file, &st) < 0) |
if (stat(identity_file, &st) == -1) |
fatal("%s: %s: %s", __progname, identity_file, strerror(errno)); |
fatal("%s: %s: %s", __progname, identity_file, strerror(errno)); |
if ((r = sshkey_load_public(identity_file, &k, NULL)) != 0) |
if ((r = sshkey_load_public(identity_file, &k, NULL)) != 0) |
k = load_identity(identity_file); |
k = load_identity(identity_file); |
|
|
|
|
if (!have_identity) |
if (!have_identity) |
ask_filename(pw, "Enter file in which the key is"); |
ask_filename(pw, "Enter file in which the key is"); |
if (stat(identity_file, &st) < 0) |
if (stat(identity_file, &st) == -1) |
fatal("%s: %s: %s", __progname, identity_file, strerror(errno)); |
fatal("%s: %s: %s", __progname, identity_file, strerror(errno)); |
|
|
switch (convert_format) { |
switch (convert_format) { |
|
|
|
|
if (!have_identity) |
if (!have_identity) |
ask_filename(pw, "Enter file in which the key is"); |
ask_filename(pw, "Enter file in which the key is"); |
if (stat(identity_file, &st) < 0) |
if (stat(identity_file, &st) == -1) |
fatal("%s: %s", identity_file, strerror(errno)); |
fatal("%s: %s", identity_file, strerror(errno)); |
prv = load_identity(identity_file); |
prv = load_identity(identity_file); |
if ((r = sshkey_write(prv, stdout)) != 0) |
if ((r = sshkey_write(prv, stdout)) != 0) |
|
|
struct sshkey *public = NULL; |
struct sshkey *public = NULL; |
int r; |
int r; |
|
|
if (stat(identity_file, &st) < 0) |
if (stat(identity_file, &st) == -1) |
fatal("%s: %s", path, strerror(errno)); |
fatal("%s: %s", path, strerror(errno)); |
if ((r = sshkey_load_public(path, &public, &comment)) != 0) { |
if ((r = sshkey_load_public(path, &public, &comment)) != 0) { |
debug("load public \"%s\": %s", path, ssh_err(r)); |
debug("load public \"%s\": %s", path, ssh_err(r)); |
|
|
|
|
if (!have_identity) |
if (!have_identity) |
ask_filename(pw, "Enter file in which the key is"); |
ask_filename(pw, "Enter file in which the key is"); |
if (stat(identity_file, &st) < 0) |
if (stat(identity_file, &st) == -1) |
fatal("%s: %s", identity_file, strerror(errno)); |
fatal("%s: %s", identity_file, strerror(errno)); |
/* Try to load the file with empty passphrase. */ |
/* Try to load the file with empty passphrase. */ |
r = sshkey_load_private(identity_file, "", &private, &comment); |
r = sshkey_load_private(identity_file, "", &private, &comment); |
|
|
|
|
if (fname == NULL) |
if (fname == NULL) |
fatal("%s: no filename", __func__); |
fatal("%s: no filename", __func__); |
if (stat(fname, &st) < 0) { |
if (stat(fname, &st) == -1) { |
if (errno == ENOENT) |
if (errno == ENOENT) |
return 0; |
return 0; |
fatal("%s: %s", fname, strerror(errno)); |
fatal("%s: %s", fname, strerror(errno)); |
|
|
|
|
if (!have_identity) |
if (!have_identity) |
ask_filename(pw, "Enter file in which the key is"); |
ask_filename(pw, "Enter file in which the key is"); |
if (stat(identity_file, &st) < 0) |
if (stat(identity_file, &st) == -1) |
fatal("%s: %s", identity_file, strerror(errno)); |
fatal("%s: %s", identity_file, strerror(errno)); |
if ((r = sshkey_load_private(identity_file, "", |
if ((r = sshkey_load_private(identity_file, "", |
&private, &comment)) == 0) |
&private, &comment)) == 0) |
|
|
|
|
/* Signer for sshkey_certify_custom that uses the agent */ |
/* Signer for sshkey_certify_custom that uses the agent */ |
static int |
static int |
agent_signer(const struct sshkey *key, u_char **sigp, size_t *lenp, |
agent_signer(struct sshkey *key, u_char **sigp, size_t *lenp, |
const u_char *data, size_t datalen, |
const u_char *data, size_t datalen, |
const char *alg, u_int compat, void *ctx) |
const char *alg, u_int compat, void *ctx) |
{ |
{ |
|
|
|
|
if (!have_identity) |
if (!have_identity) |
ask_filename(pw, "Enter file in which the key is"); |
ask_filename(pw, "Enter file in which the key is"); |
if (strcmp(identity_file, "-") != 0 && stat(identity_file, &st) < 0) |
if (strcmp(identity_file, "-") != 0 && stat(identity_file, &st) == -1) |
fatal("%s: %s: %s", __progname, identity_file, strerror(errno)); |
fatal("%s: %s: %s", __progname, identity_file, strerror(errno)); |
|
|
path = identity_file; |
path = identity_file; |
|
|
extern int optind; |
extern int optind; |
extern char *optarg; |
extern char *optarg; |
|
|
ssh_malloc_init(); /* must be called before any mallocs */ |
|
/* Ensure that fds 0, 1 and 2 are open or directed to /dev/null */ |
/* Ensure that fds 0, 1 and 2 are open or directed to /dev/null */ |
sanitise_stdfd(); |
sanitise_stdfd(); |
|
|
|
|
pw = getpwuid(getuid()); |
pw = getpwuid(getuid()); |
if (!pw) |
if (!pw) |
fatal("No user exists for uid %lu", (u_long)getuid()); |
fatal("No user exists for uid %lu", (u_long)getuid()); |
if (gethostname(hostname, sizeof(hostname)) < 0) |
if (gethostname(hostname, sizeof(hostname)) == -1) |
fatal("gethostname: %s", strerror(errno)); |
fatal("gethostname: %s", strerror(errno)); |
|
|
/* Remaining characters: Ydw */ |
/* Remaining characters: Ydw */ |
|
|
snprintf(dotsshdir, sizeof dotsshdir, "%s/%s", |
snprintf(dotsshdir, sizeof dotsshdir, "%s/%s", |
pw->pw_dir, _PATH_SSH_USER_DIR); |
pw->pw_dir, _PATH_SSH_USER_DIR); |
if (strstr(identity_file, dotsshdir) != NULL) { |
if (strstr(identity_file, dotsshdir) != NULL) { |
if (stat(dotsshdir, &st) < 0) { |
if (stat(dotsshdir, &st) == -1) { |
if (errno != ENOENT) { |
if (errno != ENOENT) { |
error("Could not stat %s: %s", dotsshdir, |
error("Could not stat %s: %s", dotsshdir, |
strerror(errno)); |
strerror(errno)); |
} else if (mkdir(dotsshdir, 0700) < 0) { |
} else if (mkdir(dotsshdir, 0700) == -1) { |
error("Could not create directory '%s': %s", |
error("Could not create directory '%s': %s", |
dotsshdir, strerror(errno)); |
dotsshdir, strerror(errno)); |
} else if (!quiet) |
} else if (!quiet) |