Directory Services

Checking the Query Filter Syntax

The LDAP API provides a simple syntax-verification function. Be aware that it only verifies the syntax and not the existence of the properties specified in the filter.

The following function verifies the syntax of the query filter and returns S_OK if the filter is valid or S_FALSE if it is not.

HRESULT CheckFilterSyntax(
	LPOLESTR szServer, // NULL binds to a DC in the current domain.
	LPOLESTR szFilter) // Filter to check.
{
HRESULT hr = S_OK;
DWORD dwReturn;
LDAP *hConnect = NULL;  // Connection handle
 
if (!szFilter)
  return E_POINTER;
 
// LDAP_PORT is the default port, 389
 
hConnect  = ldap_open(szServer,  LDAP_PORT);
 
// Bind using the preferred authentication method on Windows 2000
// and the calling thread's security context.
 
dwReturn = ldap_bind_s( hConnect, NULL, NULL, LDAP_AUTH_NEGOTIATE );
if (dwReturn==LDAP_SUCCESS) {
	dwReturn = ldap_check_filter(hConnect, szFilter);
	if (dwReturn==LDAP_SUCCESS)
		hr = S_OK;
	else
		hr = S_FALSE;
}
 
// Unbind to free the connection.
 
ldap_unbind( hConnect );
 
return hr;
}