Added the ability to specify to the PwdMechanism through the auth.policy that it should only utilize credentials that match the specified realm.
This commit is contained in:
parent
67485b5388
commit
0eda6a0830
@ -40,6 +40,7 @@ CasaStatus
|
|||||||
GetUserCredentials(
|
GetUserCredentials(
|
||||||
IN const char *pRealm,
|
IN const char *pRealm,
|
||||||
IN void *pCredStoreScope,
|
IN void *pCredStoreScope,
|
||||||
|
IN bool realm_credentials_only,
|
||||||
INOUT char **ppUsername,
|
INOUT char **ppUsername,
|
||||||
INOUT char **ppPassword)
|
INOUT char **ppPassword)
|
||||||
//
|
//
|
||||||
@ -52,6 +53,9 @@ GetUserCredentials(
|
|||||||
// to specific users. This can only be leveraged when running in
|
// to specific users. This can only be leveraged when running in
|
||||||
// the context of System under Windows.
|
// the context of System under Windows.
|
||||||
//
|
//
|
||||||
|
// realm_credentials_only -
|
||||||
|
// Only utilize credentials associated with the specified realm.
|
||||||
|
//
|
||||||
// ppUsername -
|
// ppUsername -
|
||||||
// Pointer to variable that will receive buffer with the username.
|
// Pointer to variable that will receive buffer with the username.
|
||||||
//
|
//
|
||||||
@ -105,7 +109,8 @@ GetUserCredentials(
|
|||||||
&credtype,
|
&credtype,
|
||||||
&credential,
|
&credential,
|
||||||
(SSCS_EXT_T*) pCredStoreScope);
|
(SSCS_EXT_T*) pCredStoreScope);
|
||||||
if (rcode != NSSCS_SUCCESS)
|
if (rcode != NSSCS_SUCCESS
|
||||||
|
&& realm_credentials_only == false)
|
||||||
{
|
{
|
||||||
// There were no credentials for the realm, now try to obtain the
|
// There were no credentials for the realm, now try to obtain the
|
||||||
// desktop credentials.
|
// desktop credentials.
|
||||||
@ -275,6 +280,7 @@ AuthTokenIf_GetAuthToken(
|
|||||||
char *pUsername = NULL;
|
char *pUsername = NULL;
|
||||||
char *pPassword = NULL;
|
char *pPassword = NULL;
|
||||||
char *pToken;
|
char *pToken;
|
||||||
|
bool realm_credentials_only = false;
|
||||||
|
|
||||||
DbgTrace(1, "-AuthTokenIf_GetAuthToken- Start\n", 0);
|
DbgTrace(1, "-AuthTokenIf_GetAuthToken- Start\n", 0);
|
||||||
|
|
||||||
@ -293,9 +299,44 @@ AuthTokenIf_GetAuthToken(
|
|||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Process any mechanism information that may have been provided
|
||||||
|
if (pMechInfo)
|
||||||
|
{
|
||||||
|
// Mechanism information has been provided. Mechanism information
|
||||||
|
// consists of semicolon delimited settings. The settings are formated
|
||||||
|
// using the format settingName=settingvalue. No white space is allowed
|
||||||
|
// as part of the mechanism information.
|
||||||
|
char *pNextSettingToken;
|
||||||
|
char *pSettingValueToken = strtok_s(pMechInfo, ";", &pNextSettingToken);
|
||||||
|
while (pSettingValueToken != NULL)
|
||||||
|
{
|
||||||
|
char *pNextToken;
|
||||||
|
char *pSettingName = strtok_s(pSettingValueToken, "=", &pNextToken);
|
||||||
|
char *pSettingValue = strtok_s(NULL, "=", &pNextToken);
|
||||||
|
if (pSettingValue)
|
||||||
|
{
|
||||||
|
// Process the setting
|
||||||
|
if (strcmpi(pSettingName, "REALM_CREDENTIALS_ONLY") == 0)
|
||||||
|
{
|
||||||
|
if (strcmpi(pSettingValue, "true") == 0)
|
||||||
|
{
|
||||||
|
realm_credentials_only = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("Bad setting\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
pSettingValueToken = strtok_s(NULL, ";", &pNextSettingToken);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Get the user credentials
|
// Get the user credentials
|
||||||
retStatus = GetUserCredentials(pContext,
|
retStatus = GetUserCredentials(pContext,
|
||||||
pCredStoreScope,
|
pCredStoreScope,
|
||||||
|
realm_credentials_only,
|
||||||
&pUsername,
|
&pUsername,
|
||||||
&pPassword);
|
&pPassword);
|
||||||
if (CASA_SUCCESS(retStatus))
|
if (CASA_SUCCESS(retStatus))
|
||||||
|
Loading…
Reference in New Issue
Block a user