本文整理汇总了C++中VDIR_SAFE_STRING函数的典型用法代码示例。如果您正苦于以下问题:C++ VDIR_SAFE_STRING函数的具体用法?C++ VDIR_SAFE_STRING怎么用?C++ VDIR_SAFE_STRING使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了VDIR_SAFE_STRING函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: VmDirMDBDNToEntry
/* VmDirMDBDNToEntry: For a given entry DN, reads an entry from the entry DB.
*
* Returns: BE error - BACKEND_ERROR, BACKEND OPERATIONS, BACKEND_ENTRY_NOTFOUND
*
*/
DWORD
VmDirMDBDNToEntry(
PVDIR_BACKEND_CTX pBECtx,
PVDIR_SCHEMA_CTX pSchemaCtx,
VDIR_BERVALUE* pDn,
PVDIR_ENTRY pEntry,
VDIR_BACKEND_ENTRY_LOCKTYPE entryLockType)
{
DWORD dwError = LDAP_SUCCESS;
ENTRYID eId = {0};
// make sure we look up normalized dn value
dwError = VmDirNormalizeDN( pDn, pSchemaCtx );
BAIL_ON_VMDIR_ERROR(dwError);
dwError = VmDirMDBDNToEntryId( pBECtx, pDn, &eId );
BAIL_ON_VMDIR_ERROR( dwError );
dwError = VmDirMDBEIdToEntry( pBECtx, pSchemaCtx, eId, pEntry, entryLockType );
BAIL_ON_VMDIR_ERROR( dwError );
cleanup:
return dwError;
error:
VMDIR_LOG_ERROR( LDAP_DEBUG_BACKEND, "BEDNToEntry DN (%s) failed, (%u)(%s)",
VDIR_SAFE_STRING( pDn->bvnorm_val), dwError, VDIR_SAFE_STRING(pBECtx->pszBEErrorMsg) );
VMDIR_SET_BACKEND_ERROR(dwError); // if dwError no in BE space, set to ERROR_BACKEND_ERROR
goto cleanup;
}
示例2: VmDirGetKrbMasterKey
DWORD
VmDirGetKrbMasterKey(
PSTR pszFQDN, // [in] FQDN
PBYTE* ppKeyBlob,
DWORD* pSize
)
{
DWORD dwError = 0;
PBYTE pRetMasterKey = NULL;
if (IsNullOrEmptyString(pszFQDN)
|| !ppKeyBlob
|| !pSize
)
{
dwError = VMDIR_ERROR_INVALID_PARAMETER;
BAIL_ON_VMDIR_ERROR(dwError);
}
// Currently, we only support single krb realm.
// Global cache gVmdirKrbGlobals is initialized during startup stage.
if (VmDirStringCompareA( pszFQDN, VDIR_SAFE_STRING(gVmdirKrbGlobals.pszRealm), FALSE) != 0)
{
dwError = VMDIR_ERROR_INVALID_REALM;
BAIL_ON_VMDIR_ERROR(dwError);
}
dwError = VmDirAllocateMemory(
gVmdirKrbGlobals.bervMasterKey.lberbv.bv_len,
(PVOID*)&pRetMasterKey
);
BAIL_ON_VMDIR_ERROR(dwError);
dwError = VmDirCopyMemory (
pRetMasterKey,
gVmdirKrbGlobals.bervMasterKey.lberbv.bv_len,
gVmdirKrbGlobals.bervMasterKey.lberbv.bv_val,
gVmdirKrbGlobals.bervMasterKey.lberbv.bv_len
);
BAIL_ON_VMDIR_ERROR(dwError);
*ppKeyBlob = pRetMasterKey;
*pSize = (DWORD) gVmdirKrbGlobals.bervMasterKey.lberbv.bv_len;
pRetMasterKey = NULL;
cleanup:
return dwError;
error:
VMDIR_LOG_ERROR( LDAP_DEBUG_RPC, "VmDirGetKrbMasterKey failed. (%u)(%s)",
dwError, VDIR_SAFE_STRING(pszFQDN));
VMDIR_SAFE_FREE_MEMORY(pRetMasterKey);
goto cleanup;
}
示例3: VmDirNormalizeMods
/*
* NormalizeMods:
* 1. Normalize attribute values present in the modifications list.
* 2. Make sure no duplicate value
*/
int
VmDirNormalizeMods(
PVDIR_SCHEMA_CTX pSchemaCtx,
PVDIR_MODIFICATION pMods,
PSTR* ppszErrorMsg
)
{
int retVal = LDAP_SUCCESS;
PVDIR_MODIFICATION pMod = NULL;
unsigned int i = 0;
PSTR pszDupAttributeName = NULL;
PSTR pszLocalErrorMsg = NULL;
for (pMod = pMods; pMod != NULL; pMod = pMod->next)
{
if (pMod->attr.pATDesc == NULL
&&
(pMod->attr.pATDesc = VmDirSchemaAttrNameToDesc(pSchemaCtx, pMod->attr.type.lberbv.bv_val)) == NULL
)
{
retVal = VMDIR_ERROR_UNDEFINED_TYPE;
BAIL_ON_VMDIR_ERROR_WITH_MSG(retVal, (pszLocalErrorMsg),
"Undefined attribute (%s)",
VDIR_SAFE_STRING(pMod->attr.type.lberbv.bv_val));
}
for (i=0; i < pMod->attr.numVals; i++)
{
retVal = VmDirSchemaBervalNormalize(pSchemaCtx, pMod->attr.pATDesc, &pMod->attr.vals[i]);
BAIL_ON_VMDIR_ERROR_WITH_MSG(retVal, (pszLocalErrorMsg),
"attribute value normalization failed (%s)(%.*s)",
VDIR_SAFE_STRING(pMod->attr.pATDesc->pszName),
VMDIR_MIN(pMod->attr.vals[i].lberbv.bv_len, VMDIR_MAX_LOG_OUTPUT_LEN),
VDIR_SAFE_STRING(pMod->attr.vals[i].lberbv.bv_val));
}
// Make sure we have no duplicate value in mod->attr
retVal = VmDirAttributeDupValueCheck(&pMod->attr, &pszDupAttributeName);
BAIL_ON_VMDIR_ERROR_WITH_MSG(retVal, (pszLocalErrorMsg),
"attribute (%s) has duplicate value",
VDIR_SAFE_STRING(pszDupAttributeName));
}
cleanup:
if (ppszErrorMsg)
{
*ppszErrorMsg = pszLocalErrorMsg;
}
else
{
VMDIR_SAFE_FREE_MEMORY(pszLocalErrorMsg);
}
return retVal;
error:
goto cleanup;
}
示例4: VmDirSendSASLBindResponse
/*
4.2.2. Bind Response
The Bind response is defined as follows.
BindResponse ::= [APPLICATION 1] SEQUENCE {
COMPONENTS OF LDAPResult,
serverSaslCreds [7] OCTET STRING OPTIONAL }
*/
VOID
VmDirSendSASLBindResponse(
PVDIR_OPERATION pOperation
)
{
DWORD dwError = 0;
BerElementBuffer berbuf;
BerElement * ber = (BerElement *) &berbuf;
PVDIR_LDAP_RESULT pResult = &(pOperation->ldapResult);
ber_tag_t respType = GetResultTag(pOperation->reqCode);
(void) memset( (char *)&berbuf, '\0', sizeof( BerElementBuffer ));
ber_init2( ber, NULL, LBER_USE_DER );
VMDIR_LOG_INFO( LDAP_DEBUG_ARGS, "VmDirSendLdapResponse: code (%d), Error (%d)(%s)",
respType, pResult->errCode, VDIR_SAFE_STRING(pResult->pszErrMsg));
dwError = ber_printf( ber, "{it{ess" /*"}}"*/,
pOperation->msgId, // message sequence id
GetResultTag(pOperation->reqCode), // ldap response type
pResult->errCode, // ldap return code e.g. LDAP_SASL_CONNTINUE
pResult->matchedDn.lberbv.bv_len > 0 ? pResult->matchedDn.lberbv.bv_val : "",
VDIR_SAFE_STRING(pResult->pszErrMsg)); // error text detail
BAIL_ON_LBER_ERROR(dwError);
// Send back TAG and SASL reply blob
// NOTE, not exactly sure if we ever need to send Tag but WITHOUT blob reply if blob is empty.
// but this should NOT happen in GSSAPI scenario.
if ( pResult->replyInfo.type == REP_SASL
&&
pResult->replyInfo.replyData.bvSaslReply.lberbv.bv_len > 0
)
{
dwError = ber_printf( ber, "tO",
LDAP_TAG_SASL_RES_CREDS,
&pResult->replyInfo.replyData.bvSaslReply.lberbv );
BAIL_ON_LBER_ERROR(dwError);
}
dwError = ber_printf( ber, "N}N}" );
BAIL_ON_LBER_ERROR(dwError);
dwError = WriteBerOnSocket( pOperation->conn, ber );
BAIL_ON_VMDIR_ERROR(dwError);
cleanup:
ber_free_buf( ber );
return;
error:
VMDIR_LOG_ERROR( VMDIR_LOG_MASK_ALL, "lber error (%d)", dwError);
goto cleanup;
}
示例5: _VmDirSchemaAttrReplaceValue
static
DWORD
_VmDirSchemaAttrReplaceValue(
PVDIR_ATTRIBUTE pAttr,
PCSTR pszMatchSubstr,
PCSTR pszValue
)
{
#define MAX_BUF_SIZE_256 256
DWORD dwError = 0;
unsigned iCnt = 0;
CHAR pszBuf[MAX_BUF_SIZE_256] = {0};
dwError = VmDirStringPrintFA( pszBuf, MAX_BUF_SIZE_256 -1 , "NAME '%s' ", pszMatchSubstr );
BAIL_ON_VMDIR_ERROR(dwError);
for (iCnt = 0; iCnt < pAttr->numVals; iCnt++)
{
if ( VmDirCaselessStrStrA( pAttr->vals[iCnt].lberbv_val, pszBuf ) != NULL )
{
if ( VmDirStringCompareA( VDIR_SAFE_STRING(pAttr->vals[iCnt].lberbv_val),
pszValue,
FALSE ) != 0
)
{
VMDIR_LOG_INFO( VMDIR_LOG_MASK_ALL, "Merge schema, replace old - %s",
VDIR_SAFE_STRING(pAttr->vals[iCnt].lberbv_val));
VMDIR_LOG_INFO( VMDIR_LOG_MASK_ALL, "Merge schema, replace new - %s", pszValue );
}
VMDIR_LOG_DEBUG( VMDIR_LOG_MASK_ALL, "Merge schema, replace old - %s",
VDIR_SAFE_STRING(pAttr->vals[iCnt].lberbv_val));
VmDirFreeBervalContent( &(pAttr->vals[iCnt]) );
dwError = VmDirAllocateStringA( pszValue, &(pAttr->vals[iCnt].lberbv_val) );
BAIL_ON_VMDIR_ERROR(dwError);
pAttr->vals[iCnt].lberbv_len = VmDirStringLenA( pszValue );
pAttr->vals[iCnt].bOwnBvVal = TRUE;
VMDIR_LOG_DEBUG( VMDIR_LOG_MASK_ALL, "Merge schema, replace new - %s",
VDIR_SAFE_STRING(pAttr->vals[iCnt].lberbv_val));
break;
}
}
cleanup:
return dwError;
error:
goto cleanup;
}
示例6: VmDirMDBDeleteEntry
/* MdbDeleteEntry: Deletes an entry in the MDB DBs.
*
* Returns: BE error codes.
*
*/
DWORD
VmDirMDBDeleteEntry(
PVDIR_BACKEND_CTX pBECtx,
PVDIR_MODIFICATION pMods,
PVDIR_ENTRY pEntry
)
{
DWORD dwError = 0;
VDIR_MODIFICATION * mod = NULL;
PVDIR_DB_TXN pTxn = NULL;
assert( pBECtx && pBECtx->pBEPrivate && pMods && pEntry );
pTxn = (PVDIR_DB_TXN)pBECtx->pBEPrivate;
// Delete child from the parentId index
dwError = MDBDeleteParentIdIndex( pBECtx, &(pEntry->pdn), pEntry->eId );
BAIL_ON_VMDIR_ERROR(dwError);
for (mod = pMods; mod != NULL; mod = mod->next)
{
switch (mod->operation)
{
case MOD_OP_DELETE:
if ((dwError = MdbUpdateIndicesForAttr( pBECtx->pBE, pTxn, &(pEntry->dn), &(mod->attr.type), mod->attr.vals, mod->attr.numVals,
pEntry->eId, BE_INDEX_OP_TYPE_DELETE )) != 0)
{
dwError = MDBToBackendError(dwError, 0, ERROR_BACKEND_ERROR, pBECtx,
VDIR_SAFE_STRING(mod->attr.type.lberbv.bv_val));
BAIL_ON_VMDIR_ERROR( dwError );
}
break;
default:
assert( FALSE );
}
}
// Delete Entry Blob
if ((dwError = MDBDeleteEntryBlob(pBECtx, pEntry->eId)) != 0)
{
dwError = MDBToBackendError(dwError, 0, ERROR_BACKEND_ERROR, pBECtx, "MDBDeleteEntryBlob");
BAIL_ON_VMDIR_ERROR( dwError );
}
cleanup:
return dwError;
error:
VMDIR_SET_BACKEND_ERROR(dwError); // if dwError no in BE space, set to ERROR_BACKEND_ERROR
VMDIR_LOG_ERROR(LDAP_DEBUG_BACKEND, "VmDirMDBDeleteEntry: failed: error=%d,DN=%s",
dwError, VDIR_SAFE_STRING(pEntry->dn.lberbv.bv_val));
goto cleanup;
}
示例7: VmDirSchemaBervalSyntaxCheck
DWORD
VmDirSchemaBervalSyntaxCheck(
PVDIR_SCHEMA_CTX pCtx,
PVDIR_SCHEMA_AT_DESC pATDesc,
PVDIR_BERVALUE pBerv
)
{
DWORD dwError = 0;
if (!pCtx || !pATDesc || !pBerv)
{
if (pCtx)
{
pCtx->dwErrorCode = ERROR_INVALID_PARAMETER;
VMDIR_SAFE_FREE_MEMORY(pCtx->pszErrorMsg);
dwError = VmDirAllocateStringA(
"No descriptor or value",
&pCtx->pszErrorMsg);
}
dwError = ERROR_INVALID_PARAMETER;
BAIL_ON_VMDIR_ERROR(dwError);
}
//TODO, if NO pSyntax, i.e. this syntax is NOT supported yet.
// just bypass checking and move on.
if (pATDesc->pSyntax &&
pATDesc->pSyntax->pValidateFunc(pBerv) == FALSE)
{
pCtx->dwErrorCode = ERROR_INVALID_SYNTAX;
VMDIR_SAFE_FREE_MEMORY(pCtx->pszErrorMsg);
dwError = VmDirAllocateStringAVsnprintf(
&pCtx->pszErrorMsg,
"%s value (%s) is not a valid (%s) syntax",
pATDesc->pszName,
VDIR_SAFE_STRING(pBerv->lberbv.bv_val),
VDIR_SAFE_STRING(pATDesc->pszSyntaxName));
dwError = ERROR_INVALID_SYNTAX;
BAIL_ON_VMDIR_ERROR(dwError);
}
cleanup:
return dwError;
error:
goto cleanup;
}
示例8: VmDirMDBCheckRefIntegrity
/* MdbCheckRefIntegrity: Checks for the attributes that have referential integrity constraint set, that the DN attribute
* values refer to existing objects.
*
* Returns: BE error codes.
*
*/
DWORD
VmDirMDBCheckRefIntegrity(
PVDIR_BACKEND_CTX pBECtx,
PVDIR_ENTRY pEntry)
{
DWORD dwError = 0;
VDIR_ATTRIBUTE * attr = NULL;
assert( pBECtx && pBECtx->pBEPrivate && pEntry );
for (attr = pEntry->attrs; attr; attr = attr->next)
{
// SJ-TBD: Instead of checking referential integrity for hard coded attributes, we should have a
// proprietary flag e.g. X-constraint in the attribute schema definition
if (VmDirStringCompareA(attr->type.lberbv.bv_val, ATTR_MEMBER, FALSE) == 0)
{
unsigned int i = 0;
ENTRYID eId = 0;
for (; i < attr->numVals; i++)
{
// Lookup in the DN index.
if ((dwError = VmDirNormalizeDN( &(attr->vals[i]), pEntry->pSchemaCtx)) != 0)
{
dwError = ERROR_BACKEND_OPERATIONS;
BAIL_ON_VMDIR_ERROR( dwError );
}
if ((dwError = VmDirMDBDNToEntryId( pBECtx, &(attr->vals[i]), &eId )) != 0)
{
dwError = MDBToBackendError(dwError, ERROR_BACKEND_ENTRY_NOTFOUND,
ERROR_BACKEND_CONSTRAINT, pBECtx,
VDIR_SAFE_STRING(attr->vals[i].lberbv.bv_val));
BAIL_ON_VMDIR_ERROR( dwError );
}
}
}
}
cleanup:
return dwError;
error:
// TODO set pBECtx->pszBEErrorMsg
VMDIR_LOG_ERROR( LDAP_DEBUG_BACKEND, "BE DN (%s) reference check, error (%u)(%s)",
pEntry->dn.lberbv_val, dwError, VDIR_SAFE_STRING(pBECtx->pszBEErrorMsg) );
VMDIR_SET_BACKEND_ERROR(dwError); // if dwError no in BE space, set to ERROR_BACKEND_ERROR
goto cleanup;
}
示例9: scope
/*
* Called during entry add
*
* grouptype :
*
http://msdn.microsoft.com/en-us/library/windows/desktop/ms675935%28v=vs.85%29.aspx
Value Description
1 (0x00000001) Specifies a group that is created by the system.
2 (0x00000002) Specifies a group with global scope.
4 (0x00000004) Specifies a group with domain local scope.
8 (0x00000008) Specifies a group with universal scope.
16 (0x00000010) Specifies an APP_BASIC group for Windows Server Authorization Manager.
32 (0x00000020) Specifies an APP_QUERY group for Windows Server Authorization Manager.
2147483648 (0x80000000) Specifies a security group. If this flag is not set, then the group is a distribution group.
Currently, Lotus only supports global scope (2).
*/
DWORD
VmDirPluginGroupTypePreAdd(
PVDIR_OPERATION pOperation,
PVDIR_ENTRY pEntry,
DWORD dwPriorResult
)
{
DWORD dwError = 0;
PSTR pszLocalErrorMsg = NULL;
if ( pOperation->opType != VDIR_OPERATION_TYPE_REPL
&&
TRUE == VmDirIsEntryWithObjectclass(pEntry, OC_GROUP)
)
{
PVDIR_ATTRIBUTE pAttrGroupType = VmDirFindAttrByName(pEntry, ATTR_GROUPTYPE);
if (pAttrGroupType == NULL)
{
dwError = VmDirEntryAddSingleValueStrAttribute(pEntry, ATTR_GROUPTYPE, GROUPTYPE_GLOBAL_SCOPE);
BAIL_ON_VMDIR_ERROR(dwError);
}
else
{
if ( pAttrGroupType->numVals != 1 // grouptype is a single value attribute
||
VmDirStringCompareA( VDIR_SAFE_STRING( pAttrGroupType->vals[0].lberbv.bv_val),
GROUPTYPE_GLOBAL_SCOPE, FALSE) != 0
)
{
dwError = ERROR_INVALID_ENTRY;
BAIL_ON_VMDIR_ERROR_WITH_MSG( dwError, pszLocalErrorMsg, "invalid or unsupported grouptype (%s)",
VDIR_SAFE_STRING( pAttrGroupType->vals[0].lberbv.bv_val));
}
}
}
cleanup:
VMDIR_SAFE_FREE_MEMORY(pszLocalErrorMsg);
return dwError;
error:
VmDirLog( LDAP_DEBUG_ANY, "Group check: (%d)(%s)", dwError, VDIR_SAFE_STRING(pszLocalErrorMsg));
VMDIR_APPEND_ERROR_MSG(pOperation->ldapResult.pszErrMsg, pszLocalErrorMsg);
goto cleanup;
}
示例10: _VmDirReplDCConnectInit
static
DWORD
_VmDirReplDCConnectInit(
PVMDIR_REPLICATION_AGREEMENT pReplAgr
)
{
DWORD dwError = 0;
pReplAgr->dcConn.connType = DC_CONNECTION_TYPE_REPL;
pReplAgr->dcConn.creds.bUseDCAccountCreds = TRUE;
pReplAgr->dcConn.dwConnectTimeoutSec = gVmdirGlobals.dwLdapConnectTimeoutSec;
dwError = VmDirAllocateStringA(pReplAgr->pszHostname, &pReplAgr->dcConn.pszHostname);
BAIL_ON_VMDIR_ERROR(dwError);
// spawn background thread to handle connection
VmDirInitDCConnThread(&pReplAgr->dcConn);
cleanup:
return dwError;
error:
pReplAgr->isDeleted = TRUE;
VMDIR_LOG_ERROR(
VMDIR_LOG_MASK_ALL,
"%s: %s error code (%d)",
__FUNCTION__,
VDIR_SAFE_STRING(pReplAgr->ldapURI),
dwError);
goto cleanup;
}
示例11: VmDirRegConfigHandleClose
static
VOID
VmDirRegConfigHandleClose(
PVMDIR_CONFIG_CONNECTION_HANDLE pCfgHandle
)
{
#ifndef _WIN32
if (pCfgHandle->hConnection)
{
if (pCfgHandle->hKey)
{
DWORD dwError = RegCloseKey(
pCfgHandle->hConnection,
pCfgHandle->hKey);
if (dwError != 0)
{ // Do not bail, best effort to cleanup.
VmDirLog(
LDAP_DEBUG_ANY,
"RegCloseKey failed, Error code: (%u)(%s)",
dwError,
VDIR_SAFE_STRING(LwWin32ErrorToName(dwError)));
}
}
RegCloseServer(pCfgHandle->hConnection);
}
#else
if (pCfgHandle->hKey)
{
RegCloseKey(pCfgHandle->hKey);
}
#endif
VMDIR_SAFE_FREE_MEMORY(pCfgHandle);
}
示例12: _VmDirSchemaCheckNameform
static
DWORD
_VmDirSchemaCheckNameform(
PVDIR_SCHEMA_CTX pCtx,
PVDIR_ENTRY pEntry,
PVDIR_SCHEMA_OC_DESC pStructOCDesc
)
{
DWORD dwError = 0;
PSTR pszLocalErrorMsg = NULL;
if ( !pCtx || !pStructOCDesc || !pEntry || !pEntry->dn.bvnorm_val )
{
dwError = ERROR_INVALID_PARAMETER;
BAIL_ON_VMDIR_ERROR(dwError);
}
#if 0
// should NOT enable this until we have all namform and structure rule defined
if ( pStructOCDesc->usNumMustRDNs > 0 )
{ // not yet support multi RDNs case. only check the first MUST RDN for now.
size_t iLen = VmDirStringLenA(pStructOCDesc->ppszMustRDNs[0]);
if ( VmDirStringNCompareA( pEntry->dn.bvnorm_val,
pStructOCDesc->ppszMustRDNs[0],
iLen,
FALSE ) != 0
||
pEntry->dn.bvnorm_val[iLen] != '='
)
{
dwError = ERROR_INVALID_ENTRY;
BAIL_ON_VMDIR_ERROR_WITH_MSG( dwError, pszLocalErrorMsg,
"_VmDirSchemaCheckNameform: rdn must be (%s). (%d)",
VDIR_SAFE_STRING( pStructOCDesc->ppszMustRDNs[0] ), dwError );
}
}
#endif
cleanup:
VMDIR_SAFE_FREE_MEMORY(pszLocalErrorMsg);
return dwError;
error:
if ( !pCtx->pszErrorMsg )
{
pCtx->pszErrorMsg = pszLocalErrorMsg;
pszLocalErrorMsg = NULL;
pCtx->dwErrorCode = dwError;
}
goto cleanup;
}
示例13: VmDirAttributeAllocate
/*
* Create an Attribute on the heap and establish its pATDesc
* two memory allocate
* 1. pAttribute
* 2. pAttribute->vals (BerValue array is one more then requested)
*/
DWORD
VmDirAttributeAllocate(
PCSTR pszName,
USHORT usBerSize,
PVDIR_SCHEMA_CTX pCtx,
PVDIR_ATTRIBUTE* ppOutAttr)
{
DWORD dwError = 0;
PVDIR_ATTRIBUTE pAttr = NULL;
if (!ppOutAttr)
{
return 0;
}
dwError = VmDirAllocateMemory(
sizeof(VDIR_ATTRIBUTE),
(PVOID*)&pAttr);
BAIL_ON_VMDIR_ERROR(dwError);
// add one more BerValue as Encode/Decode entry in data store layer needs it.
dwError = VmDirAllocateMemory(
sizeof(VDIR_BERVALUE) * (usBerSize + 1),
(PVOID*)&pAttr->vals);
BAIL_ON_VMDIR_ERROR(dwError);
pAttr->numVals = usBerSize;
pAttr->pATDesc = VmDirSchemaAttrNameToDesc(
pCtx,
pszName);
if (!pAttr->pATDesc)
{
dwError = VMDIR_ERROR_NO_SUCH_ATTRIBUTE;
BAIL_ON_VMDIR_ERROR(dwError);
}
// pAttr->type.lberbv.bv_val always store in-place
pAttr->type.lberbv.bv_val = pAttr->pATDesc->pszName;
pAttr->type.lberbv.bv_len = VmDirStringLenA(pAttr->type.lberbv.bv_val);
*ppOutAttr = pAttr;
cleanup:
return dwError;
error:
if (pAttr)
{
VmDirFreeAttribute(pAttr);
}
VmDirLog( LDAP_DEBUG_ANY, "AllocateAttribute failed (%d)(%s)",
dwError, VDIR_SAFE_STRING(pszName));
goto cleanup;
}
示例14: _VmDirSchemaCheckMustAttrPresent
/*
* Mark MUST attributes presented.
*/
static
DWORD
_VmDirSchemaCheckMustAttrPresent(
PVDIR_SCHEMA_CTX pCtx,
PVDIR_SCHEMA_OC_DESC pOCDesc,
PVDIR_ENTRY pEntry,
PBOOLEAN pbPresentList
)
{
DWORD dwError = 0;
int iCnt = 0;
assert(pCtx && pOCDesc && pEntry && pbPresentList);
for (iCnt = 0; pOCDesc->ppAllMustATs[iCnt] != NULL; iCnt++)
{
int iIdx = 0;
PVDIR_ATTRIBUTE pAttr = pEntry->attrs;
for (iIdx = 0; pAttr != NULL; pAttr = pAttr->next, iIdx++)
{
if (pAttr->pATDesc->usAttrID == pOCDesc->ppAllMustATs[iCnt]->usAttrID)
{
pbPresentList[iIdx] = TRUE; // find must attribute
break;
}
}
// ignore missing "nTSecurityDescriptor" must attribute for now.
// ADSI needs it to be a must attribute. However, it is NOT easy/clean to make and
// enforce this change in Lotus. (e.g. in VmDirInteralAddEntry, schema check is called
// prior to SD generation currently.)
// TODO, clean up SD generation in bootstratp/promo/normal paths.
if ( pAttr == NULL
&&
VmDirStringCompareA( pOCDesc->ppAllMustATs[iCnt]->pszName,
ATTR_OBJECT_SECURITY_DESCRIPTOR,
FALSE) != 0
)
{
VMDIR_SAFE_FREE_MEMORY(pCtx->pszErrorMsg);
VmDirAllocateStringAVsnprintf(&pCtx->pszErrorMsg,
"Missing must attribute (%s)",
VDIR_SAFE_STRING(pOCDesc->ppAllMustATs[iCnt]->pszName));
VmDirLog( LDAP_DEBUG_ANY, "%s", pCtx->pszErrorMsg);
dwError = pCtx->dwErrorCode = ERROR_INVALID_ENTRY;
BAIL_ON_VMDIR_ERROR(dwError);
}
}
error:
return dwError;
}
示例15: VdcadminSetVmdirState
VOID
VdcadminSetVmdirState(
VOID
)
{
DWORD dwError = 0;
char pszState[SIZE_256] = {0};
PSTR pszLocalErrorMsg = NULL;
PVMDIR_SERVER_CONTEXT hServer = NULL;
VDIR_SERVER_STATE vmdirState = VMDIRD_STATE_NORMAL;
VmDirReadString(
"Enter state (NORMAL|READ_ONLY): ",
pszState,
SIZE_256,
FALSE);
if ( VmDirStringCompareA( pszState, "NORMAL", FALSE) == 0 )
{
vmdirState = VMDIRD_STATE_NORMAL;
}
else if ( VmDirStringCompareA( pszState, "READ_ONLY", FALSE) == 0 )
{
vmdirState = VMDIRD_STATE_READ_ONLY;
}
else
{
dwError = VMDIR_ERROR_INVALID_PARAMETER;
BAIL_ON_VMDIR_ERROR(dwError);
}
if (g_hServer)
{
hServer = g_hServer;
}
dwError = VmDirSetState(hServer, vmdirState );
BAIL_ON_VMDIR_ERROR_WITH_MSG( dwError, (pszLocalErrorMsg),
"VmDirSetState() failed. error(%u)", dwError );
printf("\n\n State of Vmdir set to %s\n\n", pszState);
cleanup:
VMDIR_SAFE_FREE_MEMORY(pszLocalErrorMsg);
return;
error:
printf("\n SetVmDirState failed: %s\n", VDIR_SAFE_STRING(pszLocalErrorMsg));
goto cleanup;
}