mirror of https://github.com/wolfSSL/wolfssh.git
commit
e2ee49f064
|
@ -273,6 +273,7 @@ int ClientPublicKeyCheck(const byte* pubKey, word32 pubKeySz, void* ctx)
|
|||
char *env;
|
||||
|
||||
env = getenv("HOME");
|
||||
if (env != NULL) {
|
||||
sz = (word32)(WSTRLEN(env) + WSTRLEN(defaultName) + 1);
|
||||
knownHostsName = (char*)WMALLOC(sz, NULL, 0);
|
||||
if (knownHostsName != NULL) {
|
||||
|
@ -280,13 +281,14 @@ int ClientPublicKeyCheck(const byte* pubKey, word32 pubKeySz, void* ctx)
|
|||
WSTRCAT(knownHostsName, defaultName);
|
||||
}
|
||||
}
|
||||
else
|
||||
ret = -1;
|
||||
}
|
||||
|
||||
if (ret == 0) {
|
||||
sz = 0;
|
||||
ret = load_der_file(knownHostsName, (byte**)&knownHosts, &sz);
|
||||
/* load_der_file() loads exactly what's in the file. Since it is
|
||||
* NL terminated lines of known host data, and the last line ends
|
||||
* in a NL, overwrite that with a nul to terminate the new string. */
|
||||
knownHosts[sz - 1] = 0;
|
||||
}
|
||||
|
||||
if (ret == 0) {
|
||||
if (sz < sizeof(word32)) {
|
||||
|
@ -297,6 +299,11 @@ int ClientPublicKeyCheck(const byte* pubKey, word32 pubKeySz, void* ctx)
|
|||
}
|
||||
|
||||
if (ret == 0) {
|
||||
/* load_der_file() loads exactly what's in the file. Since it is
|
||||
* NL terminated lines of known host data, and the last line ends
|
||||
* in a NL, overwrite that with a nul to terminate the new string. */
|
||||
knownHosts[sz - 1] = 0;
|
||||
|
||||
encodedKey = (char*)WMALLOC(WOLFSSH_CLIENT_ENCKEY_SIZE_ESTIMATE
|
||||
+ WOLFSSH_CLIENT_PUBKEYTYPE_SIZE_ESTIMATE
|
||||
+ WOLFSSH_CLIENT_FINGERPRINT_SIZE_ESTIMATE, NULL, 0);
|
||||
|
@ -306,8 +313,6 @@ int ClientPublicKeyCheck(const byte* pubKey, word32 pubKeySz, void* ctx)
|
|||
}
|
||||
|
||||
if (ret == 0) {
|
||||
word32 keySz;
|
||||
|
||||
pubKeyType = encodedKey + WOLFSSH_CLIENT_ENCKEY_SIZE_ESTIMATE;
|
||||
fp = pubKeyType + WOLFSSH_CLIENT_PUBKEYTYPE_SIZE_ESTIMATE;
|
||||
|
||||
|
@ -316,8 +321,9 @@ int ClientPublicKeyCheck(const byte* pubKey, word32 pubKeySz, void* ctx)
|
|||
fp[0] = 0;
|
||||
|
||||
/* Get the key type out of the key. */
|
||||
ato32(pubKey, &keySz);
|
||||
if (keySz > sz - sizeof(word32)) {
|
||||
ato32(pubKey, &sz);
|
||||
if ((sz > pubKeySz - sizeof(word32))
|
||||
|| (sz > WOLFSSH_CLIENT_PUBKEYTYPE_SIZE_ESTIMATE - 1)) {
|
||||
ret = -1;
|
||||
}
|
||||
}
|
||||
|
@ -479,6 +485,8 @@ int ClientPublicKeyCheck(const byte* pubKey, word32 pubKeySz, void* ctx)
|
|||
WFREE(encodedKey, NULL, 0);
|
||||
if (knownHosts)
|
||||
WFREE(knownHosts, NULL, 0);
|
||||
if (knownHostsName)
|
||||
WFREE(knownHostsName, NULL, 0);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue