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; }
/* * refresh account password * returns: * if force is not specified and password is not aged * {"refreshed":"false"} * if force was specified or password aged * {"refreshed":"true","password":"******"} */ DWORD VmDirRESTRefreshPassword( void* pIn, void** ppOut ) { DWORD dwError = 0; PVDIR_REST_OPERATION pRestOp = NULL; BOOLEAN bRefreshPassword = FALSE; PSTR pszNewPassword = NULL; BOOLEAN bRefreshed = FALSE; if (!pIn) { dwError = VMDIR_ERROR_INVALID_PARAMETER; BAIL_ON_VMDIR_ERROR(dwError); } pRestOp = (PVDIR_REST_OPERATION)pIn; dwError = VmDirRESTGetBoolParam( pRestOp, "force", &bRefreshPassword, TRUE); BAIL_ON_VMDIR_ERROR(dwError) dwError = VmDirRefreshPassword( pRestOp->pConn, bRefreshPassword, &pszNewPassword); BAIL_ON_VMDIR_ERROR(dwError); VMDIR_LOG_DEBUG( VMDIR_LOG_MASK_ALL, "%s: force: %d, %s", __FUNCTION__, bRefreshPassword, pRestOp->pConn->AccessInfo.pszNormBindedDn); if (!IsNullOrEmptyString(pszNewPassword)) { bRefreshed = TRUE; dwError = VmDirRESTResultSetStrData( pRestOp->pResult, "password", pszNewPassword); BAIL_ON_VMDIR_ERROR(dwError); } dwError = VmDirRESTResultSetBooleanData( pRestOp->pResult, "refreshed", bRefreshed); BAIL_ON_VMDIR_ERROR(dwError); cleanup: VMDIR_SET_REST_RESULT(pRestOp, NULL, dwError, NULL); VMDIR_SAFE_FREE_MEMORY(pszNewPassword); return dwError; error: VMDIR_LOG_ERROR( VMDIR_LOG_MASK_ALL, "%s failed, error (%d)", __FUNCTION__, dwError); goto cleanup; }