示例#1
0
SSOERROR
SSOKeyValuePairNew(
    PSSO_KEY_VALUE_PAIR* pp,
    PCSTRING pszKey,
    PCSTRING pszValue)
{
    SSOERROR e = SSOERROR_NONE;
    PSSO_KEY_VALUE_PAIR p = NULL;

    ASSERT_NOT_NULL(pp);
    ASSERT_NOT_NULL(pszKey);
    ASSERT_NOT_NULL(pszValue);

    e = SSOMemoryAllocate(sizeof(SSO_KEY_VALUE_PAIR), (void**) &p);
    BAIL_ON_ERROR(e);

    e = SSOStringAllocate(pszKey, &p->pszKey);
    BAIL_ON_ERROR(e);

    e = SSOStringAllocate(pszValue, &p->pszValue);
    BAIL_ON_ERROR(e);

    *pp = p;

error:
    if (e != SSOERROR_NONE)
    {
        SSOKeyValuePairDelete(p);
    }
    return e;
}
示例#2
0
文件: cdc.c 项目: vmware/lightwave
SSOERROR
SSOCdcGetAffinitizedHost(
    PCSSO_CDC pCdc,
    PCSTRING domainName,
    int cdcFlags,
    PSTRING* ppszAffinitizedHost)
{
    SSOERROR e = SSOERROR_NONE;

    DWORD dwError = 0;
    PVMAFD_SERVER pServer = NULL;
    PCDC_DC_INFO_A pDCInfo = NULL;
    PSTRING pszAffinitizedHost = NULL;

    if (pCdc == NULL || ppszAffinitizedHost == NULL)
    {
        e = SSOERROR_INVALID_ARGUMENT;
        BAIL_ON_ERROR(e);
    }

    dwError = (*(DWORD (*)(PCSTR, PCSTR, PCSTR, PVMAFD_SERVER*))pCdc->pVmAfdOpenServer)(NULL, NULL, NULL, &pServer);
    if (dwError != 0)
    {
        e = SSOERROR_VMAFD_CALL_FAILURE;
        BAIL_ON_ERROR(e);
    }

    dwError = (*(DWORD (*)(PVMAFD_SERVER, PCSTR, GUID_A, PCSTR, DWORD, PCDC_DC_INFO_A*))pCdc->pCdcGetDCName)(pServer, domainName, NULL, NULL, cdcFlags, &pDCInfo);
    if (dwError != 0)
    {
        e = SSOERROR_VMAFD_CALL_FAILURE;
        BAIL_ON_ERROR(e);
    }

    e = SSOStringAllocate(pDCInfo->pszDCName, &pszAffinitizedHost);
    BAIL_ON_ERROR(e);

    *ppszAffinitizedHost = pszAffinitizedHost;

    error:

    if (e != SSOERROR_NONE)
    {
        SSOStringFree(pszAffinitizedHost);
    }

    // cleanup
    if (pServer != NULL)
    {
        (*(VOID (*)(PVMAFD_SERVER))pCdc->pVmAfdCloseServer)(pServer);
    }

    if (pDCInfo != NULL)
    {
        (*(VOID (*)(PCDC_DC_INFO_A))pCdc->pCdcFreeDomainControllerInfo)(pDCInfo);
    }

    return e;
}
示例#3
0
SSOERROR
SSOStringAllocateFromInt(
    int i,
    PSTRING* ppsz /* OUT */)
{
    char pszBuffer[20]; // 20 is more than enough to fit the largest unsigned 64 bit integer

    ASSERT_NOT_NULL(ppsz);

    sprintf(pszBuffer, "%d", i);

    return SSOStringAllocate(pszBuffer, ppsz);
}
示例#4
0
// make sure you call OidcClientGlobalInit once per process before calling this
// on success, pp will be non-null, when done, OidcClientDelete it
// psztlsCAPath: NULL means skip tls validation, otherwise LIGHTWAVE_TLS_CA_PATH will work on lightwave client and server
SSOERROR
OidcClientBuild(
    POIDC_CLIENT* pp,
    PCSTRING pszServer, // OPT: null means use HA to get affinitized host
    int portNumber,
    PCSTRING pszTenant,
    PCSTRING pszClientID /* OPT */,
    PCSTRING pszTlsCAPath /* OPT, see comment above */)
{
    SSOERROR e = SSOERROR_NONE;
    POIDC_CLIENT p = NULL;
    POIDC_SERVER_METADATA pServerMetadata = NULL;

    BAIL_ON_NULL_ARGUMENT(pp);
    BAIL_ON_NULL_ARGUMENT(pszTenant);

    e = SSOMemoryAllocate(sizeof(OIDC_CLIENT), (void**) &p);
    BAIL_ON_ERROR(e);

    if (NULL == pszServer)
    {
        e = SSOCdcNew(&p->pClientDCCache);
        BAIL_ON_ERROR(e);

        e = SSOCdcGetAffinitizedHost(
            p->pClientDCCache,
            NULL, // PCSTRING domainName
            0, // int cdcFlags,
            &p->pszServer);
        BAIL_ON_ERROR(e);
    }
    else
    {
        e = SSOStringAllocate(pszServer, &p->pszServer);
        BAIL_ON_ERROR(e);
    }

    if (pszClientID != NULL)
    {
        e = SSOStringAllocate(pszClientID, &p->pszClientID);
        BAIL_ON_ERROR(e);
    }

    if (pszTlsCAPath != NULL)
    {
        e = SSOStringAllocate(pszTlsCAPath, &p->pszTlsCAPath);
        BAIL_ON_ERROR(e);
    }

    e = OidcServerMetadataAcquire(&pServerMetadata, p->pszServer, portNumber, pszTenant, p->pszTlsCAPath);
    BAIL_ON_ERROR(e);

    e = SSOStringAllocate(OidcServerMetadataGetTokenEndpointUrl(pServerMetadata), &p->pszTokenEndpointUrl);
    BAIL_ON_ERROR(e);

    e = SSOStringAllocate(OidcServerMetadataGetSigningCertificatePEM(pServerMetadata), &p->pszSigningCertificatePEM);
    BAIL_ON_ERROR(e);

    *pp = p;

error:

    if (e != SSOERROR_NONE)
    {
        OidcClientDelete(p);
    }

    OidcServerMetadataDelete(pServerMetadata);

    return e;
}
示例#5
0
SSOERROR
SSOStringReplace(
    PCSTRING pszInput,
    PCSTRING pszFind,
    PCSTRING pszReplace,
    PSTRING* ppsz /* OUT */)
{
    SSOERROR e = SSOERROR_NONE;
    PSTRING psz = NULL;
    PSTRING pszPrefix = NULL;
    PSTRING pszSuffix = NULL;
    PSTRING pszPrefixPlusReplace = NULL;
    char* pszLocation = strstr(pszInput, pszFind);

    ASSERT_NOT_NULL(pszInput);
    ASSERT_NOT_NULL(pszFind);
    ASSERT_NOT_NULL(pszReplace);
    ASSERT_NOT_NULL(ppsz);

    if (pszLocation != NULL)
    {
        size_t inputLength = strlen(pszInput);
        size_t findLength = strlen(pszFind);
        size_t locationLength = strlen(pszLocation);
        size_t prefixLength = inputLength - locationLength;
        size_t suffixLength = locationLength - findLength;

        if (prefixLength > 0)
        {
            e = SSOStringAllocateSubstring(pszInput, 0, prefixLength - 1, &pszPrefix);
            BAIL_ON_ERROR(e);
        }
        else
        {
            e = SSOStringAllocate("", &pszPrefix);
            BAIL_ON_ERROR(e);
        }

        if (suffixLength > 0)
        {
            e = SSOStringAllocateSubstring(pszInput, inputLength - suffixLength, inputLength - 1, &pszSuffix);
            BAIL_ON_ERROR(e);
        }
        else
        {
            e = SSOStringAllocate("", &pszSuffix);
            BAIL_ON_ERROR(e);
        }

        e = SSOStringConcatenate(pszPrefix, pszReplace, &pszPrefixPlusReplace);
        BAIL_ON_ERROR(e);

        e = SSOStringConcatenate(pszPrefixPlusReplace, pszSuffix, &psz);
        BAIL_ON_ERROR(e);
    }
    else
    {
        // not found, return a copy of the input
        e = SSOStringAllocate(pszInput, &psz);
        BAIL_ON_ERROR(e);
    }

    *ppsz = psz;

error:

    if (e != SSOERROR_NONE)
    {
        SSOStringFree(psz);
    }

    SSOStringFree(pszPrefix);
    SSOStringFree(pszSuffix);
    SSOStringFree(pszPrefixPlusReplace);

    return e;
}