Skip to content

Commit 7b7aff5

Browse files
remove legacy support and address review items
1 parent 7b4b61f commit 7b7aff5

4 files changed

Lines changed: 158 additions & 157 deletions

File tree

apps/wolfsshd/wolfsshd.c

Lines changed: 48 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -466,51 +466,51 @@ static int SetupCTX(WOLFSSHD_CONFIG* conf, WOLFSSH_CTX** ctx,
466466
ret = WS_BAD_ARGUMENT;
467467
}
468468
else {
469-
byte* data;
470-
word32 dataSz = 0;
469+
byte* data;
470+
word32 dataSz = 0;
471+
472+
/* The host private key is a secret trust anchor: refuse a symlink,
473+
* an unsafe owner or path, or a group/world readable/writable
474+
* file. */
475+
data = getBufferFromFile(hostKey, &dataSz, heap,
476+
WOLFSSHD_LOAD_SECRET);
477+
if (data == NULL) {
478+
/* NULL means the secure gate rejected the file (bad owner,
479+
* symlink, group/world writable/readable; reason already
480+
* logged) or the read failed, so report a file error rather
481+
* than a memory error. */
482+
wolfSSH_Log(WS_LOG_ERROR,
483+
"[SSHD] Error reading host key file.");
484+
ret = WS_BAD_FILE_E;
471485

472-
/* The host private key is a secret trust anchor: refuse a symlink,
473-
* an unsafe owner or path, or a group/world readable/writable
474-
* file. */
475-
data = getBufferFromFile(hostKey, &dataSz, heap,
476-
WOLFSSHD_LOAD_SECRET);
477-
if (data == NULL) {
478-
/* NULL means the secure gate rejected the file (bad owner,
479-
* symlink, group/world writable/readable; reason already
480-
* logged) or the read failed, so report a file error rather
481-
* than a memory error. */
482-
wolfSSH_Log(WS_LOG_ERROR,
483-
"[SSHD] Error reading host key file.");
484-
ret = WS_BAD_FILE_E;
486+
}
485487

486-
}
488+
if (ret == WS_SUCCESS) {
489+
if (wc_PemToDer(data, dataSz, PRIVATEKEY_TYPE, &der, NULL,
490+
NULL, NULL) != 0) {
491+
wolfSSH_Log(WS_LOG_DEBUG, "[SSHD] Failed to convert host "
492+
"private key from PEM. Assuming key in DER "
493+
"format.");
494+
privBuf = data;
495+
privBufSz = dataSz;
496+
}
497+
else {
498+
privBuf = der->buffer;
499+
privBufSz = der->length;
500+
}
487501

488-
if (ret == WS_SUCCESS) {
489-
if (wc_PemToDer(data, dataSz, PRIVATEKEY_TYPE, &der, NULL,
490-
NULL, NULL) != 0) {
491-
wolfSSH_Log(WS_LOG_DEBUG, "[SSHD] Failed to convert host "
492-
"private key from PEM. Assuming key in DER "
493-
"format.");
494-
privBuf = data;
495-
privBufSz = dataSz;
496-
}
497-
else {
498-
privBuf = der->buffer;
499-
privBufSz = der->length;
500-
}
502+
if (wolfSSH_CTX_UsePrivateKey_buffer(*ctx, privBuf, privBufSz,
503+
WOLFSSH_FORMAT_ASN1) < 0) {
504+
wolfSSH_Log(WS_LOG_ERROR,
505+
"[SSHD] Failed to use host private key.");
506+
ret = WS_BAD_ARGUMENT;
507+
}
501508

502-
if (wolfSSH_CTX_UsePrivateKey_buffer(*ctx, privBuf, privBufSz,
503-
WOLFSSH_FORMAT_ASN1) < 0) {
504-
wolfSSH_Log(WS_LOG_ERROR,
505-
"[SSHD] Failed to use host private key.");
506-
ret = WS_BAD_ARGUMENT;
509+
freeBufferFromFile(data, heap);
510+
wc_FreeDer(&der);
507511
}
508-
509-
freeBufferFromFile(data, heap);
510-
wc_FreeDer(&der);
511512
}
512513
}
513-
}
514514
}
515515

516516
#if defined(WOLFSSH_OSSH_CERTS) || defined(WOLFSSH_CERTS)
@@ -615,6 +615,16 @@ static int SetupCTX(WOLFSSHD_CONFIG* conf, WOLFSSH_CTX** ctx,
615615
wolfSSL_CTX_free(sslCtx);
616616
}
617617
}
618+
#else
619+
/* The system/user CA-store directives are parsed unconditionally, so warn
620+
* if they were set but wolfSSL was built without WOLFSSL_SYS_CA_CERTS,
621+
* rather than silently ignoring them. */
622+
if (ret == WS_SUCCESS && (wolfSSHD_ConfigGetSystemCA(conf)
623+
|| wolfSSHD_ConfigGetUserCAStore(conf))) {
624+
wolfSSH_Log(WS_LOG_ERROR,
625+
"[SSHD] wolfSSH_TrustedSystemCAKeys/wolfSSH_TrustedUserCaStore set "
626+
"but wolfSSL was built without WOLFSSL_SYS_CA_CERTS; ignoring.");
627+
}
618628
#endif
619629

620630
/* load in CA certs from file set */

0 commit comments

Comments
 (0)