mirror of https://github.com/wolfSSL/wolfssh.git
commit
e2ee49f064
|
@ -273,20 +273,22 @@ int ClientPublicKeyCheck(const byte* pubKey, word32 pubKeySz, void* ctx)
|
||||||
char *env;
|
char *env;
|
||||||
|
|
||||||
env = getenv("HOME");
|
env = getenv("HOME");
|
||||||
sz = (word32)(WSTRLEN(env) + WSTRLEN(defaultName) + 1);
|
if (env != NULL) {
|
||||||
knownHostsName = (char*)WMALLOC(sz, NULL, 0);
|
sz = (word32)(WSTRLEN(env) + WSTRLEN(defaultName) + 1);
|
||||||
if (knownHostsName != NULL) {
|
knownHostsName = (char*)WMALLOC(sz, NULL, 0);
|
||||||
WSTRCPY(knownHostsName, env);
|
if (knownHostsName != NULL) {
|
||||||
WSTRCAT(knownHostsName, defaultName);
|
WSTRCPY(knownHostsName, env);
|
||||||
|
WSTRCAT(knownHostsName, defaultName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
ret = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
sz = 0;
|
if (ret == 0) {
|
||||||
ret = load_der_file(knownHostsName, (byte**)&knownHosts, &sz);
|
sz = 0;
|
||||||
/* load_der_file() loads exactly what's in the file. Since it is
|
ret = load_der_file(knownHostsName, (byte**)&knownHosts, &sz);
|
||||||
* 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 (ret == 0) {
|
||||||
if (sz < sizeof(word32)) {
|
if (sz < sizeof(word32)) {
|
||||||
|
@ -297,6 +299,11 @@ int ClientPublicKeyCheck(const byte* pubKey, word32 pubKeySz, void* ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret == 0) {
|
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
|
encodedKey = (char*)WMALLOC(WOLFSSH_CLIENT_ENCKEY_SIZE_ESTIMATE
|
||||||
+ WOLFSSH_CLIENT_PUBKEYTYPE_SIZE_ESTIMATE
|
+ WOLFSSH_CLIENT_PUBKEYTYPE_SIZE_ESTIMATE
|
||||||
+ WOLFSSH_CLIENT_FINGERPRINT_SIZE_ESTIMATE, NULL, 0);
|
+ WOLFSSH_CLIENT_FINGERPRINT_SIZE_ESTIMATE, NULL, 0);
|
||||||
|
@ -306,8 +313,6 @@ int ClientPublicKeyCheck(const byte* pubKey, word32 pubKeySz, void* ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
word32 keySz;
|
|
||||||
|
|
||||||
pubKeyType = encodedKey + WOLFSSH_CLIENT_ENCKEY_SIZE_ESTIMATE;
|
pubKeyType = encodedKey + WOLFSSH_CLIENT_ENCKEY_SIZE_ESTIMATE;
|
||||||
fp = pubKeyType + WOLFSSH_CLIENT_PUBKEYTYPE_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;
|
fp[0] = 0;
|
||||||
|
|
||||||
/* Get the key type out of the key. */
|
/* Get the key type out of the key. */
|
||||||
ato32(pubKey, &keySz);
|
ato32(pubKey, &sz);
|
||||||
if (keySz > sz - sizeof(word32)) {
|
if ((sz > pubKeySz - sizeof(word32))
|
||||||
|
|| (sz > WOLFSSH_CLIENT_PUBKEYTYPE_SIZE_ESTIMATE - 1)) {
|
||||||
ret = -1;
|
ret = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -479,6 +485,8 @@ int ClientPublicKeyCheck(const byte* pubKey, word32 pubKeySz, void* ctx)
|
||||||
WFREE(encodedKey, NULL, 0);
|
WFREE(encodedKey, NULL, 0);
|
||||||
if (knownHosts)
|
if (knownHosts)
|
||||||
WFREE(knownHosts, NULL, 0);
|
WFREE(knownHosts, NULL, 0);
|
||||||
|
if (knownHostsName)
|
||||||
|
WFREE(knownHostsName, NULL, 0);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue