mirror of
https://git.libssh.org/projects/libssh.git
synced 2025-08-08 19:02:06 +03:00
pki: Improve pubkey buffer handling form file
Signed-off-by: Andreas Schneider <asn@cryptomilk.org>
This commit is contained in:
21
src/pki.c
21
src/pki.c
@@ -1028,6 +1028,7 @@ int ssh_pki_import_pubkey_file(const char *filename, ssh_key *pkey)
|
|||||||
enum ssh_keytypes_e type;
|
enum ssh_keytypes_e type;
|
||||||
struct stat sb;
|
struct stat sb;
|
||||||
char *key_buf, *p;
|
char *key_buf, *p;
|
||||||
|
size_t buflen, i;
|
||||||
const char *q;
|
const char *q;
|
||||||
FILE *file;
|
FILE *file;
|
||||||
off_t size;
|
off_t size;
|
||||||
@@ -1079,19 +1080,29 @@ int ssh_pki_import_pubkey_file(const char *filename, ssh_key *pkey)
|
|||||||
return SSH_ERROR;
|
return SSH_ERROR;
|
||||||
}
|
}
|
||||||
key_buf[size] = '\0';
|
key_buf[size] = '\0';
|
||||||
|
buflen = strlen(key_buf);
|
||||||
|
|
||||||
q = p = key_buf;
|
q = p = key_buf;
|
||||||
while (*p != '\0' && !isspace((int)*p)) p++;
|
for (i = 0; i < buflen; i++) {
|
||||||
*p = '\0';
|
if (isspace((int)p[i])) {
|
||||||
|
p[i] = '\0';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
type = ssh_key_type_from_name(q);
|
type = ssh_key_type_from_name(q);
|
||||||
if (type == SSH_KEYTYPE_UNKNOWN) {
|
if (type == SSH_KEYTYPE_UNKNOWN) {
|
||||||
SAFE_FREE(key_buf);
|
SAFE_FREE(key_buf);
|
||||||
return SSH_ERROR;
|
return SSH_ERROR;
|
||||||
}
|
}
|
||||||
q = ++p;
|
|
||||||
while (*p != '\0' && !isspace((int)*p)) p++;
|
q = &p[i + 1];
|
||||||
*p = '\0';
|
for (; i < buflen; i++) {
|
||||||
|
if (isspace((int)p[i])) {
|
||||||
|
p[i] = '\0';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
rc = ssh_pki_import_pubkey_base64(q, type, pkey);
|
rc = ssh_pki_import_pubkey_base64(q, type, pkey);
|
||||||
SAFE_FREE(key_buf);
|
SAFE_FREE(key_buf);
|
||||||
|
Reference in New Issue
Block a user