271 lines
6.4 KiB
C++
271 lines
6.4 KiB
C++
#define MAX_TOKEN_LENGTH 1024
|
|
|
|
#define MAXCOMPONENTS 64
|
|
|
|
#define TOKEN_IDENTIFIER 1
|
|
#define TOKEN_COMMA 2
|
|
|
|
// This no longer exists
|
|
// #define TOKEN_BSLASH 3
|
|
|
|
#define TOKEN_END 4
|
|
#define TOKEN_DOMAIN 5
|
|
#define TOKEN_USER 6
|
|
#define TOKEN_GROUP 7
|
|
#define TOKEN_PRINTER 8
|
|
#define TOKEN_COMPUTER 9
|
|
#define TOKEN_SERVICE 10
|
|
#define TOKEN_ATSIGN 11
|
|
#define TOKEN_EXCLAMATION 12
|
|
#define TOKEN_COLON 13
|
|
#define TOKEN_FSLASH 14
|
|
#define TOKEN_PROVIDER 15
|
|
#define TOKEN_FILESERVICE 16
|
|
#define TOKEN_SCHEMA 17
|
|
#define TOKEN_CLASS 18
|
|
#define TOKEN_FUNCTIONALSET 19
|
|
#define TOKEN_FUNCTIONALSETALIAS 20
|
|
#define TOKEN_PROPERTY 21
|
|
#define TOKEN_SYNTAX 22
|
|
#define TOKEN_FILESHARE 23
|
|
#define TOKEN_PERIOD 24
|
|
#define TOKEN_EQUAL 25
|
|
#define TOKEN_NAMESPACE 26
|
|
#define TOKEN_TREE 27
|
|
#define TOKEN_LDAPOBJECT 28
|
|
#define TOKEN_LOCALITY 29
|
|
#define TOKEN_ORGANIZATION 30
|
|
#define TOKEN_ORGANIZATIONUNIT 31
|
|
#define TOKEN_COUNTRY 32
|
|
#define TOKEN_ROOTDSE 33
|
|
#define TOKEN_SEMICOLON 34
|
|
|
|
|
|
#define TOKEN_OPENBRACKET 40
|
|
#define TOKEN_CLOSEBRACKET 41
|
|
#define TOKEN_QUOTE 42
|
|
#define TOKEN_DOLLAR 43
|
|
#define TOKEN_NAME 44
|
|
#define TOKEN_DESC 45
|
|
#define TOKEN_OBSOLETE 46
|
|
#define TOKEN_SUP 47
|
|
#define TOKEN_EQUALITY 48
|
|
#define TOKEN_ORDERING 49
|
|
#define TOKEN_SUBSTR 50
|
|
#define TOKEN_SINGLE_VALUE 52
|
|
#define TOKEN_COLLECTIVE 53
|
|
#define TOKEN_DYNAMIC 54
|
|
#define TOKEN_NO_USER_MODIFICATION 55
|
|
#define TOKEN_USAGE 56
|
|
#define TOKEN_ABSTRACT 57
|
|
#define TOKEN_STRUCTURAL 58
|
|
#define TOKEN_AUXILIARY 59
|
|
#define TOKEN_MUST 60
|
|
#define TOKEN_MAY 61
|
|
#define TOKEN_AUX 62
|
|
#define TOKEN_NOT 63
|
|
#define TOKEN_FORM 64
|
|
#define TOKEN_OPEN_CURLY 65
|
|
#define TOKEN_CLOSE_CURLY 66
|
|
//
|
|
// Token X is used for terms like X- in the schema.
|
|
// These are provider specific and need to be ignored.
|
|
//
|
|
#define TOKEN_X 67
|
|
|
|
|
|
#define PATHTYPE_WINDOWS 1
|
|
#define PATHTYPE_X500 2
|
|
|
|
|
|
|
|
typedef struct _component {
|
|
LPTSTR szComponent;
|
|
LPTSTR szValue;
|
|
}COMPONENT, *PCOMPONENT;
|
|
|
|
typedef struct _objectinfo {
|
|
LPTSTR ProviderName;
|
|
LPTSTR NamespaceName;
|
|
LPTSTR TreeName;
|
|
LPTSTR DisplayTreeName;
|
|
DWORD ObjectType;
|
|
LPTSTR ObjectClass;
|
|
DWORD dwServerPresent;
|
|
DWORD dwPathType;
|
|
DWORD NumComponents;
|
|
COMPONENT ComponentArray[MAXCOMPONENTS];
|
|
COMPONENT DisplayComponentArray[MAXCOMPONENTS];
|
|
DWORD PortNumber;
|
|
LPWSTR szStrBuf;
|
|
LPWSTR szDisplayStrBuf;
|
|
LPWSTR szStrBufPtr;
|
|
LPWSTR szDisplayStrBufPtr;
|
|
} OBJECTINFO, *POBJECTINFO;
|
|
|
|
typedef struct _kwdlist {
|
|
DWORD dwTokenId;
|
|
LPTSTR Keyword;
|
|
} KWDLIST, *PKWDLIST;
|
|
|
|
extern KWDLIST KeywordList[];
|
|
extern DWORD gdwKeywordListSize;
|
|
|
|
class FAR CLexer
|
|
{
|
|
public:
|
|
__declspec(dllexport)
|
|
CLexer(LPTSTR szBuffer);
|
|
__declspec(dllexport)
|
|
~CLexer();
|
|
|
|
BOOL
|
|
CLexer::IsKeyword(LPTSTR szToken, LPDWORD pdwToken);
|
|
|
|
TCHAR
|
|
CLexer::NextChar();
|
|
|
|
void
|
|
CLexer::PushbackChar();
|
|
|
|
__declspec(dllexport)
|
|
HRESULT
|
|
CLexer::GetNextToken(LPTSTR szToken, LPDWORD pdwToken);
|
|
|
|
HRESULT
|
|
CLexer::GetNextToken(LPTSTR szToken, LPTSTR szDisplayToken, LPDWORD pdwToken);
|
|
|
|
HRESULT
|
|
CLexer::PushBackToken();
|
|
|
|
__declspec(dllexport)
|
|
void
|
|
CLexer::SetAtDisabler(BOOL bFlag);
|
|
|
|
BOOL
|
|
CLexer::GetAtDisabler();
|
|
|
|
__declspec(dllexport)
|
|
void
|
|
CLexer::SetFSlashDisabler(BOOL bFlag);
|
|
|
|
BOOL
|
|
CLexer::GetFSlashDisabler();
|
|
|
|
__declspec(dllexport)
|
|
void
|
|
CLexer::SetExclaimnationDisabler(BOOL bFlag);
|
|
|
|
BOOL
|
|
CLexer::GetExclaimnationDisabler();
|
|
|
|
private:
|
|
|
|
LPTSTR _ptr;
|
|
LPTSTR _Buffer;
|
|
DWORD _dwLastTokenLength;
|
|
DWORD _dwLastToken;
|
|
DWORD _dwEndofString;
|
|
BOOL _bAtDisabled;
|
|
BOOL _bFSlashDisabled;
|
|
BOOL _bExclaimDisabled;
|
|
|
|
};
|
|
|
|
|
|
|
|
HRESULT
|
|
ADsObject(
|
|
LPWSTR pszADsPathName,
|
|
POBJECTINFO pObjectInfo
|
|
);
|
|
|
|
|
|
HRESULT
|
|
GetNextToken(
|
|
CLexer *pTokenizer,
|
|
POBJECTINFO pObjectInfo,
|
|
LPWSTR *ppszToken,
|
|
LPWSTR *ppszDisplayToken,
|
|
DWORD *pdwToken
|
|
);
|
|
|
|
HRESULT
|
|
GetNextToken(
|
|
CLexer *pTokenizer,
|
|
POBJECTINFO pObjectInfo,
|
|
LPWSTR *ppszToken,
|
|
DWORD *pdwToken
|
|
);
|
|
|
|
HRESULT
|
|
ADsObjectParse(CLexer * pTokenizer, POBJECTINFO pObjectInfo);
|
|
|
|
HRESULT
|
|
LDAPObject(CLexer * pTokenizer, POBJECTINFO pObjectInfo);
|
|
|
|
|
|
HRESULT
|
|
DsPathName(CLexer * pTokenizer, POBJECTINFO pObjectInfo);
|
|
|
|
|
|
HRESULT
|
|
PathName(CLexer * pTokenizer, POBJECTINFO pObjectInfo);
|
|
|
|
HRESULT
|
|
Component(CLexer * pTokenizer, POBJECTINFO pObjectInfo);
|
|
|
|
HRESULT
|
|
Type(CLexer * pTokenizer, POBJECTINFO pObjectInfo);
|
|
|
|
HRESULT
|
|
ProviderName(CLexer * pTokenizer, POBJECTINFO pObjectInfo);
|
|
|
|
HRESULT
|
|
AddTreeName(POBJECTINFO pObjectInfo, LPTSTR szToken, LPTSTR szDisplayToken);
|
|
|
|
HRESULT
|
|
AddPortNumber(POBJECTINFO pObjectInfo, DWORD dwPort);
|
|
|
|
HRESULT
|
|
SetType(POBJECTINFO pObjectInfo, DWORD dwToken);
|
|
|
|
HRESULT
|
|
SchemaPathName(CLexer * pTokenizer, POBJECTINFO pObjectInfo);
|
|
|
|
HRESULT
|
|
SchemaComponent(CLexer * pTokenizer, POBJECTINFO pObjectInfo);
|
|
|
|
VOID
|
|
FreeObjectInfo( POBJECTINFO pObjectInfo );
|
|
|
|
HRESULT
|
|
InitObjectInfo(
|
|
LPWSTR pszADsPathName,
|
|
POBJECTINFO pObjectInfo
|
|
);
|
|
|
|
HRESULT
|
|
AddComponent( POBJECTINFO pObjectInfo, LPTSTR szComponent, LPTSTR szValue,
|
|
LPTSTR szDisplayComponent, LPTSTR szDisplayValue );
|
|
|
|
HRESULT
|
|
AddProviderName( POBJECTINFO pObjectInfo, LPTSTR szToken );
|
|
|
|
HRESULT
|
|
AddNamespaceName( POBJECTINFO pObjectInfo, LPTSTR szToken );
|
|
|
|
|
|
HRESULT
|
|
GetDisplayName(
|
|
LPWSTR szName,
|
|
LPWSTR *ppszDisplayName
|
|
);
|
|
|
|
HRESULT
|
|
GetLDAPTypeName(
|
|
LPWSTR szName,
|
|
LPWSTR *ppszDisplayName
|
|
);
|
|
|