upstream: simplify sshkey_try_load_public()
ok markus@ OpenBSD-Commit-ID: 05a5d46562aafcd70736c792208b1856064f40ad
This commit is contained in:
parent
f290ab0833
commit
d01f39304e
58
authfile.c
58
authfile.c
|
@ -1,4 +1,4 @@
|
|||
/* $OpenBSD: authfile.c,v 1.137 2020/01/25 23:02:13 djm Exp $ */
|
||||
/* $OpenBSD: authfile.c,v 1.138 2020/04/08 00:09:24 djm Exp $ */
|
||||
/*
|
||||
* Copyright (c) 2000, 2013 Markus Friedl. All rights reserved.
|
||||
*
|
||||
|
@ -195,17 +195,24 @@ sshkey_load_private(const char *filename, const char *passphrase,
|
|||
}
|
||||
|
||||
static int
|
||||
sshkey_try_load_public(struct sshkey *k, const char *filename, char **commentp)
|
||||
sshkey_try_load_public(struct sshkey **kp, const char *filename,
|
||||
char **commentp)
|
||||
{
|
||||
FILE *f;
|
||||
char *line = NULL, *cp;
|
||||
size_t linesize = 0;
|
||||
int r;
|
||||
struct sshkey *k = NULL;
|
||||
|
||||
*kp = NULL;
|
||||
if (commentp != NULL)
|
||||
*commentp = NULL;
|
||||
if ((f = fopen(filename, "r")) == NULL)
|
||||
return SSH_ERR_SYSTEM_ERROR;
|
||||
if ((k = sshkey_new(KEY_UNSPEC)) == NULL) {
|
||||
fclose(f);
|
||||
return SSH_ERR_ALLOC_FAIL;
|
||||
}
|
||||
while (getline(&line, &linesize, f) != -1) {
|
||||
cp = line;
|
||||
switch (*cp) {
|
||||
|
@ -230,12 +237,15 @@ sshkey_try_load_public(struct sshkey *k, const char *filename, char **commentp)
|
|||
if (*commentp == NULL)
|
||||
r = SSH_ERR_ALLOC_FAIL;
|
||||
}
|
||||
/* success */
|
||||
*kp = k;
|
||||
free(line);
|
||||
fclose(f);
|
||||
return r;
|
||||
}
|
||||
}
|
||||
}
|
||||
free(k);
|
||||
free(line);
|
||||
fclose(f);
|
||||
return SSH_ERR_INVALID_FORMAT;
|
||||
|
@ -245,8 +255,7 @@ sshkey_try_load_public(struct sshkey *k, const char *filename, char **commentp)
|
|||
int
|
||||
sshkey_load_public(const char *filename, struct sshkey **keyp, char **commentp)
|
||||
{
|
||||
struct sshkey *pub = NULL;
|
||||
char *file = NULL;
|
||||
char *pubfile = NULL;
|
||||
int r;
|
||||
|
||||
if (keyp != NULL)
|
||||
|
@ -254,35 +263,17 @@ sshkey_load_public(const char *filename, struct sshkey **keyp, char **commentp)
|
|||
if (commentp != NULL)
|
||||
*commentp = NULL;
|
||||
|
||||
if ((pub = sshkey_new(KEY_UNSPEC)) == NULL)
|
||||
return SSH_ERR_ALLOC_FAIL;
|
||||
if ((r = sshkey_try_load_public(pub, filename, commentp)) == 0) {
|
||||
if (keyp != NULL) {
|
||||
*keyp = pub;
|
||||
pub = NULL;
|
||||
}
|
||||
r = 0;
|
||||
if ((r = sshkey_try_load_public(keyp, filename, commentp)) == 0)
|
||||
goto out;
|
||||
}
|
||||
sshkey_free(pub);
|
||||
|
||||
/* try .pub suffix */
|
||||
if (asprintf(&file, "%s.pub", filename) == -1)
|
||||
if (asprintf(&pubfile, "%s.pub", filename) == -1)
|
||||
return SSH_ERR_ALLOC_FAIL;
|
||||
if ((pub = sshkey_new(KEY_UNSPEC)) == NULL) {
|
||||
r = SSH_ERR_ALLOC_FAIL;
|
||||
if ((r = sshkey_try_load_public(keyp, pubfile, commentp)) == 0)
|
||||
goto out;
|
||||
}
|
||||
if ((r = sshkey_try_load_public(pub, file, commentp)) == 0) {
|
||||
if (keyp != NULL) {
|
||||
*keyp = pub;
|
||||
pub = NULL;
|
||||
}
|
||||
r = 0;
|
||||
}
|
||||
|
||||
out:
|
||||
free(file);
|
||||
sshkey_free(pub);
|
||||
free(pubfile);
|
||||
return r;
|
||||
}
|
||||
|
||||
|
@ -300,18 +291,7 @@ sshkey_load_cert(const char *filename, struct sshkey **keyp)
|
|||
if (asprintf(&file, "%s-cert.pub", filename) == -1)
|
||||
return SSH_ERR_ALLOC_FAIL;
|
||||
|
||||
if ((pub = sshkey_new(KEY_UNSPEC)) == NULL) {
|
||||
goto out;
|
||||
}
|
||||
if ((r = sshkey_try_load_public(pub, file, NULL)) != 0)
|
||||
goto out;
|
||||
/* success */
|
||||
if (keyp != NULL) {
|
||||
*keyp = pub;
|
||||
pub = NULL;
|
||||
}
|
||||
r = 0;
|
||||
out:
|
||||
r = sshkey_try_load_public(keyp, file, NULL);
|
||||
free(file);
|
||||
sshkey_free(pub);
|
||||
return r;
|
||||
|
|
Loading…
Reference in New Issue