You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
3.4 KiB
119 lines
3.4 KiB
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
//
|
|
// Copyright (C) Microsoft Corporation, 1997 - 2002
|
|
//
|
|
// File: ldaputil.h
|
|
//
|
|
// Summary:
|
|
// Contains utility functions for working with LDAP.
|
|
//
|
|
// Notes:
|
|
// You will need to build with 'USE_WTL=1' in your sources file.
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
|
|
#ifndef _LDAP_UTIL_
|
|
#define _LDAP_UTIL_
|
|
|
|
#include <string> // Need this for wstring.
|
|
using namespace std;
|
|
|
|
//
|
|
// Forward declarations (list all functions declared in this file here).
|
|
//
|
|
void
|
|
LdapEscape(IN wstring& input, OUT wstring& strFilter);
|
|
|
|
|
|
|
|
|
|
//
|
|
// Implementations.
|
|
//
|
|
|
|
|
|
//+--------------------------------------------------------------------------
|
|
//
|
|
// Function: LdapEscape
|
|
//
|
|
// Synopsis: Escape the characters in *[pszInput] as required by
|
|
// RFC 2254.
|
|
//
|
|
// Arguments: [input] - string to escape
|
|
// [strFilter] - input string but with special characters escaped;
|
|
//
|
|
// History: 06-23-2000 DavidMun Created
|
|
// 2002/04/24 ArtM Changed interface to use wstring.
|
|
//
|
|
// Notes: RFC 2254
|
|
//
|
|
// If a value should contain any of the following characters
|
|
//
|
|
// Character ASCII value
|
|
// ---------------------------
|
|
// * 0x2a
|
|
// ( 0x28
|
|
// ) 0x29
|
|
// \ 0x5c
|
|
// NUL 0x00
|
|
//
|
|
// the character must be encoded as the backslash '\'
|
|
// character (ASCII 0x5c) followed by the two hexadecimal
|
|
// digits representing the ASCII value of the encoded
|
|
// character. The case of the two hexadecimal digits is not
|
|
// significant.
|
|
//
|
|
// More Notes: Passing LPCWSTR as input parameter.
|
|
// The compiler will automatically create a temporary wstring
|
|
// object if you pass a LPCWSTR for input. The wstring constructor
|
|
// that takes a WCHAR* will croak most egregiously though if you pass
|
|
// it NULL, so make sure you know a pointer is not NULL before passing
|
|
// it to this function.
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
|
|
void
|
|
LdapEscape(const wstring& input, OUT wstring& strFilter)
|
|
{
|
|
// Normally I would call strFilter.clear() to do this but for
|
|
// some reason the compiler cannot find that function for
|
|
// wstring (even though it is in the documentation).
|
|
strFilter = L"";
|
|
|
|
wstring::size_type iLen = input.length();
|
|
|
|
for( int i = 0; i < iLen; ++i)
|
|
{
|
|
switch (input[i])
|
|
{
|
|
case L'*':
|
|
strFilter += L"\\2a";
|
|
break;
|
|
|
|
case L'(':
|
|
strFilter += L"\\28";
|
|
break;
|
|
|
|
case L')':
|
|
strFilter += L"\\29";
|
|
break;
|
|
|
|
case L'\\':
|
|
strFilter += L"\\5c";
|
|
break;
|
|
|
|
default:
|
|
// If it is not a special character, simply append
|
|
// it to the end of the filtered string.
|
|
strFilter += input[i];
|
|
break;
|
|
} // end switch
|
|
}
|
|
|
|
} // LdapEscape()
|
|
|
|
|
|
#endif //_LDAP_UTIL_
|