Skip to content

Commit 341efb4

Browse files
fixes for brace style, null deref, ecc curve detection, unused variables
1 parent 4ddac11 commit 341efb4

10 files changed

Lines changed: 276 additions & 202 deletions

File tree

apps/wolfsshd/configuration.c

Lines changed: 49 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,11 @@ struct WOLFSSHD_CONFIG {
8787
char* authKeysFile;
8888
char* forceCmd;
8989
char* pidFile;
90+
#ifdef USE_WINDOWS_API
9091
char* winUserStores;
9192
char* winUserDwFlags;
9293
char* winUserPvPara;
94+
#endif /* USE_WINDOWS_API */
9395
WOLFSSHD_CONFIG* next; /* next config in list */
9496
long loginTimer;
9597
word16 port;
@@ -331,9 +333,11 @@ void wolfSSHD_ConfigFree(WOLFSSHD_CONFIG* conf)
331333
#endif /* WOLFSSH_CERTS */
332334
#endif /* USE_WINDOWS_API */
333335
FreeString(&current->pidFile, heap);
336+
#ifdef USE_WINDOWS_API
334337
FreeString(&current->winUserStores, heap);
335338
FreeString(&current->winUserDwFlags, heap);
336339
FreeString(&current->winUserPvPara, heap);
340+
#endif /* USE_WINDOWS_API */
337341

338342
WFREE(current, heap, DYNTYPE_SSHD);
339343
current = next;
@@ -381,13 +385,16 @@ enum {
381385
OPT_BANNER = 23,
382386
OPT_TRUSTED_SYSTEM_CA_KEYS = 24,
383387
OPT_TRUSTED_USER_CA_STORE = 25,
388+
#ifdef USE_WINDOWS_API
384389
OPT_WIN_USER_STORES = 26,
385390
OPT_WIN_USER_DW_FLAGS = 27,
386-
OPT_WIN_USER_PV_PARA = 28
391+
OPT_WIN_USER_PV_PARA = 28,
392+
#endif /* USE_WINDOWS_API */
387393
};
388394
enum {
389-
NUM_OPTIONS = 29
395+
NUM_OPTIONS = 26
390396
#ifdef USE_WINDOWS_API
397+
+ 3
391398
#ifdef WOLFSSH_CERTS
392399
+ 3
393400
#endif /* WOLFSSH_CERTS */
@@ -432,9 +439,11 @@ static const CONFIG_OPTION options[NUM_OPTIONS] = {
432439
{OPT_BANNER, "Banner"},
433440
{OPT_TRUSTED_SYSTEM_CA_KEYS, "wolfSSH_TrustedSystemCAKeys"},
434441
{OPT_TRUSTED_USER_CA_STORE, "wolfSSH_TrustedUserCaStore"},
442+
#ifdef USE_WINDOWS_API
435443
{OPT_WIN_USER_STORES, "wolfSSH_WinUserStores"},
436444
{OPT_WIN_USER_DW_FLAGS, "wolfSSH_WinUserDwFlags"},
437-
{OPT_WIN_USER_PV_PARA, "wolfSSH_WinUserPvPara"}
445+
{OPT_WIN_USER_PV_PARA, "wolfSSH_WinUserPvPara"},
446+
#endif /* USE_WINDOWS_API */
438447
};
439448

440449
/* returns WS_SUCCESS on success */
@@ -1088,6 +1097,7 @@ static int HandleConfigOption(WOLFSSHD_CONFIG** conf, int opt,
10881097
case OPT_TRUSTED_USER_CA_STORE:
10891098
ret = wolfSSHD_ConfigSetUserCAStore(*conf, value);
10901099
break;
1100+
#ifdef USE_WINDOWS_API
10911101
case OPT_WIN_USER_STORES:
10921102
ret = wolfSSHD_ConfigSetWinUserStores(*conf, value);
10931103
break;
@@ -1097,6 +1107,7 @@ static int HandleConfigOption(WOLFSSHD_CONFIG** conf, int opt,
10971107
case OPT_WIN_USER_PV_PARA:
10981108
ret = wolfSSHD_ConfigSetWinUserPvPara(*conf, value);
10991109
break;
1110+
#endif /* USE_WINDOWS_API */
11001111
#ifdef USE_WINDOWS_API
11011112
#ifdef WOLFSSH_CERTS
11021113
case OPT_HOST_KEY_STORE:
@@ -1474,11 +1485,13 @@ int wolfSSHD_ConfigSetUserCAStore(WOLFSSHD_CONFIG* conf, const char* value)
14741485
return ret;
14751486
}
14761487

1477-
char* wolfSSHD_ConfigGetWinUserStores(WOLFSSHD_CONFIG* conf) {
1488+
#ifdef USE_WINDOWS_API
1489+
char* wolfSSHD_ConfigGetWinUserStores(WOLFSSHD_CONFIG* conf)
1490+
{
14781491
if (conf != NULL) {
14791492
if (conf->winUserStores == NULL) {
14801493
/* If no value was specified, default to CERT_STORE_PROV_SYSTEM */
1481-
CreateString(&conf->winUserStores, "CERT_STORE_PROV_SYSTEM",
1494+
CreateString(&conf->winUserStores, "CERT_STORE_PROV_SYSTEM",
14821495
(int)WSTRLEN("CERT_STORE_PROV_SYSTEM"), conf->heap);
14831496
}
14841497

@@ -1488,24 +1501,32 @@ char* wolfSSHD_ConfigGetWinUserStores(WOLFSSHD_CONFIG* conf) {
14881501
return NULL;
14891502
}
14901503

1491-
int wolfSSHD_ConfigSetWinUserStores(WOLFSSHD_CONFIG* conf, const char* value) {
1504+
int wolfSSHD_ConfigSetWinUserStores(WOLFSSHD_CONFIG* conf, const char* value)
1505+
{
14921506
int ret = WS_SUCCESS;
14931507

14941508
if (conf == NULL) {
14951509
ret = WS_BAD_ARGUMENT;
14961510
}
14971511

1498-
ret = CreateString(&conf->winUserStores, value, (int)WSTRLEN(value), conf->heap);
1512+
if (ret == WS_SUCCESS) {
1513+
ret = CreateString(&conf->winUserStores, value,
1514+
(int)WSTRLEN(value), conf->heap);
1515+
}
14991516

15001517
return ret;
15011518
}
15021519

1503-
char* wolfSSHD_ConfigGetWinUserDwFlags(WOLFSSHD_CONFIG* conf) {
1520+
char* wolfSSHD_ConfigGetWinUserDwFlags(WOLFSSHD_CONFIG* conf)
1521+
{
15041522
if (conf != NULL) {
15051523
if (conf->winUserDwFlags == NULL) {
1506-
/* If no value was specified, default to CERT_SYSTEM_STORE_CURRENT_USER */
1507-
CreateString(&conf->winUserDwFlags, "CERT_SYSTEM_STORE_CURRENT_USER",
1508-
(int)WSTRLEN("CERT_SYSTEM_STORE_CURRENT_USER"), conf->heap);
1524+
/* If no value was specified, default to
1525+
* CERT_SYSTEM_STORE_CURRENT_USER */
1526+
CreateString(&conf->winUserDwFlags,
1527+
"CERT_SYSTEM_STORE_CURRENT_USER",
1528+
(int)WSTRLEN("CERT_SYSTEM_STORE_CURRENT_USER"),
1529+
conf->heap);
15091530
}
15101531

15111532
return conf->winUserDwFlags;
@@ -1514,23 +1535,29 @@ char* wolfSSHD_ConfigGetWinUserDwFlags(WOLFSSHD_CONFIG* conf) {
15141535
return NULL;
15151536
}
15161537

1517-
int wolfSSHD_ConfigSetWinUserDwFlags(WOLFSSHD_CONFIG* conf, const char* value) {
1538+
int wolfSSHD_ConfigSetWinUserDwFlags(WOLFSSHD_CONFIG* conf, const char* value)
1539+
{
15181540
int ret = WS_SUCCESS;
15191541

15201542
if (conf == NULL) {
15211543
ret = WS_BAD_ARGUMENT;
15221544
}
15231545

1524-
ret = CreateString(&conf->winUserDwFlags, value, (int)WSTRLEN(value), conf->heap);
1546+
if (ret == WS_SUCCESS) {
1547+
ret = CreateString(&conf->winUserDwFlags, value,
1548+
(int)WSTRLEN(value), conf->heap);
1549+
}
15251550

15261551
return ret;
15271552
}
15281553

1529-
char* wolfSSHD_ConfigGetWinUserPvPara(WOLFSSHD_CONFIG* conf) {
1554+
char* wolfSSHD_ConfigGetWinUserPvPara(WOLFSSHD_CONFIG* conf)
1555+
{
15301556
if (conf != NULL) {
15311557
if (conf->winUserPvPara == NULL) {
15321558
/* If no value was specified, default to MY */
1533-
CreateString(&conf->winUserPvPara, "MY", (int)WSTRLEN("MY"), conf->heap);
1559+
CreateString(&conf->winUserPvPara, "MY",
1560+
(int)WSTRLEN("MY"), conf->heap);
15341561
}
15351562

15361563
return conf->winUserPvPara;
@@ -1539,17 +1566,22 @@ char* wolfSSHD_ConfigGetWinUserPvPara(WOLFSSHD_CONFIG* conf) {
15391566
return NULL;
15401567
}
15411568

1542-
int wolfSSHD_ConfigSetWinUserPvPara(WOLFSSHD_CONFIG* conf, const char* value) {
1569+
int wolfSSHD_ConfigSetWinUserPvPara(WOLFSSHD_CONFIG* conf, const char* value)
1570+
{
15431571
int ret = WS_SUCCESS;
15441572

15451573
if (conf == NULL) {
15461574
ret = WS_BAD_ARGUMENT;
15471575
}
15481576

1549-
ret = CreateString(&conf->winUserPvPara, value, (int)WSTRLEN(value), conf->heap);
1577+
if (ret == WS_SUCCESS) {
1578+
ret = CreateString(&conf->winUserPvPara, value,
1579+
(int)WSTRLEN(value), conf->heap);
1580+
}
15501581

15511582
return ret;
15521583
}
1584+
#endif /* USE_WINDOWS_API */
15531585

15541586
char* wolfSSHD_ConfigGetUserCAKeysFile(const WOLFSSHD_CONFIG* conf)
15551587
{

apps/wolfsshd/configuration.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,14 @@ int wolfSSHD_ConfigSetSystemCA(WOLFSSHD_CONFIG* conf, const char* value);
5353
int wolfSSHD_ConfigGetSystemCA(const WOLFSSHD_CONFIG* conf);
5454
int wolfSSHD_ConfigSetUserCAStore(WOLFSSHD_CONFIG* conf, const char* value);
5555
int wolfSSHD_ConfigGetUserCAStore(const WOLFSSHD_CONFIG* conf);
56+
#ifdef USE_WINDOWS_API
5657
char* wolfSSHD_ConfigGetWinUserStores(WOLFSSHD_CONFIG* conf);
5758
int wolfSSHD_ConfigSetWinUserStores(WOLFSSHD_CONFIG* conf, const char* value);
5859
char* wolfSSHD_ConfigGetWinUserDwFlags(WOLFSSHD_CONFIG* conf);
5960
int wolfSSHD_ConfigSetWinUserDwFlags(WOLFSSHD_CONFIG* conf, const char* value);
6061
char* wolfSSHD_ConfigGetWinUserPvPara(WOLFSSHD_CONFIG* conf);
6162
int wolfSSHD_ConfigSetWinUserPvPara(WOLFSSHD_CONFIG* conf, const char* value);
63+
#endif /* USE_WINDOWS_API */
6264
int wolfSSHD_ConfigSetUserCAKeysFile(WOLFSSHD_CONFIG* conf, const char* file);
6365
word16 wolfSSHD_ConfigGetPort(const WOLFSSHD_CONFIG* conf);
6466
char* wolfSSHD_ConfigGetAuthKeysFile(const WOLFSSHD_CONFIG* conf);

apps/wolfsshd/wolfsshd.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -538,7 +538,7 @@ static int SetupCTX(WOLFSSHD_CONFIG* conf, WOLFSSH_CTX** ctx,
538538

539539
if (ret == WS_SUCCESS) {
540540
if (wolfSSHD_ConfigGetUserCAStore(conf)) {
541-
#if defined(_WIN32)
541+
#ifdef USE_WINDOWS_API
542542
if (wolfSSL_CTX_load_windows_user_CA_certs(sslCtx,
543543
wolfSSHD_ConfigGetWinUserStores(conf),
544544
wolfSSHD_ConfigGetWinUserDwFlags(conf),
@@ -550,7 +550,7 @@ static int SetupCTX(WOLFSSHD_CONFIG* conf, WOLFSSH_CTX** ctx,
550550
wolfSSH_Log(WS_LOG_INFO,
551551
"[SSHD] User CA store is only supported on Windows");
552552
ret = WS_BAD_ARGUMENT;
553-
#endif /* _WIN32 */
553+
#endif /* USE_WINDOWS_API */
554554
}
555555
}
556556

examples/client/common.c

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1223,5 +1223,92 @@ int ClientSetupCertStoreAuth(WOLFSSH_CTX* ctx)
12231223
fprintf(stderr, "No cert store key found in CTX\n");
12241224
return WS_BAD_ARGUMENT;
12251225
}
1226+
1227+
1228+
/* Parse a cert store spec string "store:subject:flags" into wide-string
1229+
* components. Allocates wStoreName and wSubjectName via WMALLOC; caller
1230+
* must WFREE them. dwFlags is set to the parsed flags value.
1231+
* Returns WS_SUCCESS on success. */
1232+
int ParseCertStoreSpec(const char* spec,
1233+
wchar_t** wStoreName, wchar_t** wSubjectName,
1234+
DWORD* dwFlags, void* heap)
1235+
{
1236+
char* specCopy = NULL;
1237+
char* storeName = NULL;
1238+
char* subjectName = NULL;
1239+
char* flagsStr = NULL;
1240+
int wStoreNameLen, wSubjectNameLen;
1241+
size_t specLen;
1242+
1243+
if (spec == NULL || wStoreName == NULL || wSubjectName == NULL ||
1244+
dwFlags == NULL) {
1245+
return WS_BAD_ARGUMENT;
1246+
}
1247+
1248+
*wStoreName = NULL;
1249+
*wSubjectName = NULL;
1250+
*dwFlags = CERT_SYSTEM_STORE_CURRENT_USER;
1251+
1252+
specLen = WSTRLEN(spec) + 1;
1253+
specCopy = (char*)WMALLOC(specLen, heap, DYNTYPE_TEMP);
1254+
if (specCopy == NULL)
1255+
return WS_MEMORY_E;
1256+
WSTRNCPY(specCopy, spec, specLen);
1257+
1258+
/* Parse "store:subject:flags" */
1259+
storeName = specCopy;
1260+
subjectName = WSTRCHR(storeName, ':');
1261+
if (subjectName != NULL) {
1262+
*subjectName++ = '\0';
1263+
flagsStr = WSTRCHR(subjectName, ':');
1264+
if (flagsStr != NULL) {
1265+
*flagsStr++ = '\0';
1266+
if (WSTRCMP(flagsStr, "CURRENT_USER") == 0) {
1267+
*dwFlags = CERT_SYSTEM_STORE_CURRENT_USER;
1268+
} else if (WSTRCMP(flagsStr, "LOCAL_MACHINE") == 0) {
1269+
*dwFlags = CERT_SYSTEM_STORE_LOCAL_MACHINE;
1270+
} else {
1271+
*dwFlags = (DWORD)atoi(flagsStr);
1272+
}
1273+
}
1274+
}
1275+
1276+
if (storeName == NULL || subjectName == NULL || *storeName == '\0' ||
1277+
*subjectName == '\0') {
1278+
WFREE(specCopy, heap, DYNTYPE_TEMP);
1279+
return WS_BAD_ARGUMENT;
1280+
}
1281+
1282+
/* Convert to wide strings */
1283+
wStoreNameLen = MultiByteToWideChar(CP_UTF8, 0, storeName, -1, NULL, 0);
1284+
wSubjectNameLen = MultiByteToWideChar(CP_UTF8, 0, subjectName, -1,
1285+
NULL, 0);
1286+
1287+
*wStoreName = (wchar_t*)WMALLOC(wStoreNameLen * sizeof(wchar_t),
1288+
heap, DYNTYPE_TEMP);
1289+
*wSubjectName = (wchar_t*)WMALLOC(wSubjectNameLen * sizeof(wchar_t),
1290+
heap, DYNTYPE_TEMP);
1291+
1292+
if (*wStoreName == NULL || *wSubjectName == NULL) {
1293+
if (*wStoreName != NULL) {
1294+
WFREE(*wStoreName, heap, DYNTYPE_TEMP);
1295+
*wStoreName = NULL;
1296+
}
1297+
if (*wSubjectName != NULL) {
1298+
WFREE(*wSubjectName, heap, DYNTYPE_TEMP);
1299+
*wSubjectName = NULL;
1300+
}
1301+
WFREE(specCopy, heap, DYNTYPE_TEMP);
1302+
return WS_MEMORY_E;
1303+
}
1304+
1305+
MultiByteToWideChar(CP_UTF8, 0, storeName, -1,
1306+
*wStoreName, wStoreNameLen);
1307+
MultiByteToWideChar(CP_UTF8, 0, subjectName, -1,
1308+
*wSubjectName, wSubjectNameLen);
1309+
1310+
WFREE(specCopy, heap, DYNTYPE_TEMP);
1311+
return WS_SUCCESS;
1312+
}
12261313
#endif /* WOLFSSH_CERTS */
12271314
#endif /* USE_WINDOWS_API */

examples/client/common.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ int ClientSetTpm(WOLFSSH* ssh);
4040
int ClientSetPrivateKeyFromStore(WOLFSSH_CTX* ctx,
4141
const wchar_t* storeName, DWORD dwFlags, const wchar_t* subjectName);
4242
int ClientSetupCertStoreAuth(WOLFSSH_CTX* ctx);
43+
int ParseCertStoreSpec(const char* spec,
44+
wchar_t** wStoreName, wchar_t** wSubjectName,
45+
DWORD* dwFlags, void* heap);
4346
#endif /* WOLFSSH_CERTS */
4447
#endif /* USE_WINDOWS_API */
4548

0 commit comments

Comments
 (0)