1
0
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:
Andreas Schneider
2018-07-05 13:21:23 +02:00
parent c866768da4
commit c3dac948c9

View File

@@ -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);