DWORD VmDirRESTObjectGet( void* pIn, void** ppOut ) { DWORD dwError = 0; PSTR pszTenant = NULL; PSTR pszDN = NULL; size_t skipped = 0; PVDIR_LDAP_CONTROL pPagedResultsCtrl = NULL; json_t* pjResult = NULL; PVDIR_REST_OPERATION pRestOp = NULL; PVDIR_OPERATION pSearchOp = NULL; if (!pIn) { dwError = VMDIR_ERROR_INVALID_PARAMETER; BAIL_ON_VMDIR_ERROR(dwError); } pRestOp = (PVDIR_REST_OPERATION)pIn; dwError = VmDirExternalOperationCreate( NULL, -1, LDAP_REQ_SEARCH, pRestOp->pConn, &pSearchOp); BAIL_ON_VMDIR_ERROR(dwError); dwError = VmDirRESTGetObjectGetParams( pRestOp, &pszTenant, &pSearchOp->request.searchReq.scope, &pSearchOp->request.searchReq.filter, &pSearchOp->request.searchReq.attrs, &pPagedResultsCtrl); BAIL_ON_VMDIR_ERROR(dwError); dwError = VmDirRESTDecodeObjectPathToDN( pRestOp->pszSubPath, pszTenant, &pszDN); BAIL_ON_VMDIR_ERROR(dwError); dwError = VmDirStringToBervalContent(pszDN, &pSearchOp->reqDn); BAIL_ON_VMDIR_ERROR(dwError); pSearchOp->showPagedResultsCtrl = pPagedResultsCtrl; pSearchOp->request.searchReq.bStoreRsltInMem = TRUE; dwError = VmDirMLSearch(pSearchOp); BAIL_ON_VMDIR_ERROR(dwError); // set operation result dwError = VmDirRESTEncodeObjectArray( &pSearchOp->internalSearchEntryArray, pSearchOp->request.searchReq.attrs, pszTenant, &pjResult, &skipped); BAIL_ON_VMDIR_ERROR(dwError); dwError = VmDirRESTResultSetObjData(pRestOp->pResult, "result", pjResult); BAIL_ON_VMDIR_ERROR(dwError); dwError = VmDirRESTResultSetIntData( pRestOp->pResult, "result_count", pSearchOp->internalSearchEntryArray.iSize - skipped); BAIL_ON_VMDIR_ERROR(dwError); if (pPagedResultsCtrl) { VDIR_PAGED_RESULT_CONTROL_VALUE* pCtrl = &pPagedResultsCtrl->value.pagedResultCtrlVal; if (!IsNullOrEmptyString(pCtrl->cookie)) { dwError = VmDirRESTResultSetStrData( pRestOp->pResult, "paged_results_cookie", pCtrl->cookie); BAIL_ON_VMDIR_ERROR(dwError); } } cleanup: VMDIR_SET_REST_RESULT(pRestOp, pSearchOp, dwError, NULL); VMDIR_SAFE_FREE_MEMORY(pPagedResultsCtrl); VMDIR_SAFE_FREE_MEMORY(pszTenant); VMDIR_SAFE_FREE_MEMORY(pszDN); VmDirFreeOperation(pSearchOp); return dwError; error: VMDIR_LOG_ERROR( VMDIR_LOG_MASK_ALL, "%s failed, error (%d)", __FUNCTION__, dwError); if (pjResult) { json_decref(pjResult); } goto cleanup; }
/* * get certs * return cert array */ DWORD VmDirRESTGetRootCerts( void* pIn, void** ppOut ) { DWORD dwError = 0; PVDIR_REST_OPERATION pRestOp = NULL; PSTR pszCACNFilter = NULL; BOOLEAN bDetail = FALSE; PVMDIR_CA_CERT_ARRAY pCerts = NULL; json_t* pjCerts = NULL; PCSTR pszBaseDN = NULL; if (!pIn) { dwError = VMDIR_ERROR_INVALID_PARAMETER; BAIL_ON_VMDIR_ERROR(dwError); } pRestOp = (PVDIR_REST_OPERATION)pIn; dwError = VmDirRESTGetStrParam( pRestOp, "ca_cn_filter", &pszCACNFilter, FALSE); BAIL_ON_VMDIR_ERROR(dwError); dwError = VmDirRESTGetBoolParam( pRestOp, "detail", &bDetail, FALSE); BAIL_ON_VMDIR_ERROR(dwError); pszBaseDN = VmDirSearchDomainDN(pRestOp->pConn->AccessInfo.pszNormBindedDn); if (IsNullOrEmptyString(pszBaseDN)) { BAIL_WITH_VMDIR_ERROR(dwError, VMDIR_ERROR_INVALID_PARAMETER); } dwError = VmDirGetCACerts( pRestOp->pConn, pszBaseDN, pszCACNFilter, bDetail, &pCerts); BAIL_ON_VMDIR_ERROR(dwError); dwError = _VmDirGetCertsJson(pCerts, bDetail, &pjCerts); BAIL_ON_VMDIR_ERROR(dwError); dwError = VmDirRESTResultSetObjData( pRestOp->pResult, "certs", pjCerts); BAIL_ON_VMDIR_ERROR(dwError); cleanup: VmDirFreeCACertArray(pCerts); VMDIR_SET_REST_RESULT(pRestOp, NULL, dwError, NULL); VMDIR_SAFE_FREE_MEMORY(pszCACNFilter); return dwError; error: VMDIR_LOG_ERROR( VMDIR_LOG_MASK_ALL, "%s failed, error (%d)", __FUNCTION__, dwError); if (pjCerts) { json_decref(pjCerts); } goto cleanup; }