421 lines
8.8 KiB
C
421 lines
8.8 KiB
C
/*++
|
|
|
|
Copyright (c) 1996 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
nds95.h
|
|
|
|
Abstract:
|
|
|
|
Originally nds.h in WIN95 redirector's source, renamed to nds95.h due to
|
|
name conflict.
|
|
Win95 header for nds services.
|
|
|
|
Author:
|
|
|
|
Felix Wong (t-felixw) 27-Sep-1996
|
|
|
|
Environment:
|
|
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
/*
|
|
* Netware Directory Services structures
|
|
*/
|
|
|
|
|
|
#define DUMMY_ITER_HANDLE ((unsigned long) 0xffffffff)
|
|
|
|
#define ENTRY_INFO_NAME_ONLY 0
|
|
#define ENTRY_INFO_NAME_VALUE 1
|
|
#define ENTRY_INFO_EFF_RIGHTS 2
|
|
|
|
#define MAX_NDS_NAME_CHARS 256
|
|
#define MAX_NDS_NAME_SIZE (MAX_NDS_NAME_CHARS*2)
|
|
typedef DWORD DS_ENTRY_ID;
|
|
typedef DWORD NDS_TIME;
|
|
|
|
/*
|
|
typedef struct {
|
|
DWORD length;
|
|
WORD text[];
|
|
} NDS_STRING;
|
|
|
|
typedef struct {
|
|
DWORD syntaxId;
|
|
NDS_STRING attribName;
|
|
DWORD numValues;
|
|
BYTE attribData[];
|
|
} ATTRIB;
|
|
*/
|
|
|
|
typedef struct {
|
|
BYTE subFunction;
|
|
DWORD fragHandle;
|
|
DWORD maxFragSize;
|
|
DWORD messageSize;
|
|
DWORD fragFlags;
|
|
DWORD verb;
|
|
DWORD replyBufSize;
|
|
} FRAG_REQ_HEADER;
|
|
|
|
typedef struct {
|
|
DWORD fragSize;
|
|
DWORD fragHandle;
|
|
} FRAG_REPLY_HEADER;
|
|
|
|
|
|
#define NDSV_RESOLVE_NAME 1
|
|
typedef struct {
|
|
DWORD version;
|
|
DWORD flags; // see below
|
|
DWORD scope;
|
|
//NDS_STRING targetName;
|
|
// struct {
|
|
// DWORD length = 1;
|
|
// DWORD value = 0;
|
|
// } transportType;
|
|
// struct {
|
|
// DWORD length = 1;
|
|
// DWORD value = 0;
|
|
//} treeWalkerType;
|
|
} REQ_RESOLVE_NAME;
|
|
|
|
// values for RESOLVE_NAME request flags
|
|
//
|
|
#define RSLV_DEREF_ALIASES 0x40
|
|
#define RSLV_READABLE 0x02
|
|
#define RSLV_WRITABLE 0x04
|
|
#define RSLV_WALK_TREE 0x20
|
|
#define RSLV_CREATE_ID 0x10
|
|
#define RSLV_ENTRY_ID 0x1
|
|
|
|
|
|
typedef struct {
|
|
DWORD ccode;
|
|
DWORD remoteEntry;
|
|
DS_ENTRY_ID entryId;
|
|
DWORD cServers;
|
|
DWORD addrType;
|
|
DWORD addrLength;
|
|
//BYTE addr[addrLength];
|
|
} REPLY_RESOLVE_NAME;
|
|
|
|
#define NDSV_READ_ENTRY_INFO 2
|
|
|
|
typedef struct {
|
|
DWORD version;
|
|
DWORD entryId;
|
|
} REQ_READ_ENTRY_INFO;
|
|
|
|
typedef struct {
|
|
DWORD ccode;
|
|
DWORD flags;
|
|
DWORD subCount;
|
|
DWORD modTime;
|
|
//NDS_STRING BaseClass;
|
|
//NDS_STRING EntryName;
|
|
} REPLY_READ_ENTRY_INFO;
|
|
|
|
#define NDSV_READ 3
|
|
typedef struct {
|
|
DWORD version;
|
|
DWORD iterationHandle;
|
|
DWORD entryId;
|
|
DWORD infoType;
|
|
DWORD allAttribs;
|
|
DWORD numAttribs;
|
|
//NDS_STRING attribNames[];
|
|
} REQ_READ;
|
|
|
|
typedef struct {
|
|
DWORD ccode;
|
|
DWORD iterationHandle;
|
|
DWORD infoType;
|
|
DWORD numAttribs;
|
|
//ATTRIB attribs[];
|
|
} REPLY_READ;
|
|
|
|
#define NDSV_LIST 5
|
|
|
|
typedef struct {
|
|
DWORD version;
|
|
DWORD flags;
|
|
DWORD iterationHandle;
|
|
DWORD parentEntryId;
|
|
} REQ_LIST;
|
|
|
|
typedef struct {
|
|
DWORD ccode;
|
|
DWORD iterationHandle;
|
|
DWORD numEntries;
|
|
// struct {
|
|
// DWORD entryId;
|
|
// DWORD flags;
|
|
// DWORD subCount;
|
|
// DWORD modTime;
|
|
// NDS_STRING BaseClass;
|
|
// NDS_STRING entryName;
|
|
// } [];
|
|
} REPLY_LIST;
|
|
|
|
#define NDSV_SEARCH 6
|
|
typedef struct {
|
|
DWORD version; // 2
|
|
DWORD flags; // 0x10000
|
|
DWORD iterationHandle;
|
|
DWORD baseEntryId;
|
|
DWORD scope;
|
|
DWORD numNodes;
|
|
DWORD infoType;
|
|
DWORD allAttribs;
|
|
DWORD numAttribs;
|
|
// Search clause
|
|
} REQ_SEARCH;
|
|
|
|
typedef struct {
|
|
DWORD ccode;
|
|
DWORD iterationHandle;
|
|
DWORD nodesSearched;
|
|
DWORD infoType;
|
|
DWORD searchLength;
|
|
DWORD numEntries;
|
|
} REPLY_SEARCH;
|
|
|
|
#define NDSV_MODIFY_ATTRIB 9
|
|
typedef struct {
|
|
DWORD version; // = 0
|
|
DWORD flags;
|
|
DWORD entryId; // object
|
|
DWORD Count; // of changes
|
|
// struct {
|
|
// DWORD modifyType;
|
|
// NDS_STRING attribName;
|
|
// DWORD numValues;
|
|
// ATTRIB attribValues[];
|
|
// } Changes[];
|
|
} REQ_MODIFY_ATTRIB;
|
|
|
|
#define NDSV_DEFINE_ATTRIB 11
|
|
typedef struct {
|
|
DWORD version; // = 0
|
|
DWORD AttribFlags;
|
|
// NDS_STRING AttribName;
|
|
// DWORD syntaxId;
|
|
// DWORD lower;
|
|
// DWORD upper;
|
|
// DWORD asn1IdLength;
|
|
// BYTE asn1Id[asn1IdLength];
|
|
} REQ_DEFINE_ATTRIB;
|
|
|
|
#define NDSV_MODIFY_CLASS 16
|
|
|
|
#define NDSV_GET_EFF_RIGHTS 19
|
|
|
|
|
|
#define NDSV_OPEN_STREAM 27
|
|
|
|
typedef struct {
|
|
DWORD version;
|
|
DWORD flags;
|
|
DWORD entryId;
|
|
// NDS_STRING AttribName;
|
|
} REQ_OPEN_STREAM;
|
|
|
|
typedef struct {
|
|
DWORD ccode;
|
|
DWORD hNWFile;
|
|
DWORD fileLength;
|
|
} REPLY_OPEN_STREAM;
|
|
|
|
#define NDSV_GET_SERVER_ADDRESS 53
|
|
typedef struct {
|
|
DWORD syntaxId; // = 9 (OCTET STRING)
|
|
struct {
|
|
DWORD nameLength;
|
|
WORD name[11]; // "Public Key"
|
|
WORD filler;
|
|
} attribName;
|
|
DWORD entries; // = 1
|
|
DWORD totalLength; // of attribute value OCTET STRING
|
|
DWORD unknown1; // =1
|
|
DWORD unknown2; // = 4
|
|
WORD _issuerDNLength;
|
|
WORD totalDNLength;
|
|
WORD length2;
|
|
WORD length3;
|
|
WORD issuerDNLength;
|
|
WORD userDNLength;
|
|
WORD bsafeSectionLength;
|
|
DWORD length4;
|
|
//WORD issuerDN[];
|
|
//WORD userDN[];
|
|
//DWORD unknown3;
|
|
//DWORD unknown4;
|
|
// WORD bsafePubKeyLength;
|
|
} PUBLIC_KEY_ATTRIB;
|
|
|
|
|
|
|
|
typedef struct {
|
|
DWORD blockLength; // cipherLength + size of following hdr fields
|
|
DWORD version; // = 1
|
|
DWORD encType; // 0x060001 for RC2; 0x090001 and 0x0A0001 for RSA
|
|
WORD cipherLength; // of ciphertext
|
|
WORD dataLength; // of plaintext
|
|
} ENC_BLOCK_HDR;
|
|
|
|
typedef struct {
|
|
DWORD version;
|
|
WORD tag;
|
|
} TAG_DATA_HEADER;
|
|
|
|
#define TAG_PRIVATE_KEY 2
|
|
#define TAG_PUBLIC_KEY 4
|
|
#define TAG_CREDENTIAL 6
|
|
#define TAG_SIGNATURE 7
|
|
#define TAG_PROOF 8
|
|
|
|
typedef struct {
|
|
TAG_DATA_HEADER tdh;
|
|
NDS_TIME validityBegin;
|
|
NDS_TIME validityEnd;
|
|
DWORD random;
|
|
WORD optDataSize;
|
|
WORD userNameLength;
|
|
// BYTE optData[optDataSize];
|
|
// BYTE userName[userNameLength];
|
|
} NDS_CREDENTIAL;
|
|
|
|
typedef struct {
|
|
TAG_DATA_HEADER tdh;
|
|
WORD signDataLength;
|
|
//BYTE signData[signLength];
|
|
} NDS_SIGNATURE;
|
|
|
|
typedef struct {
|
|
TAG_DATA_HEADER tdh;
|
|
WORD keyDataLength;
|
|
//BYTE BsafeKeyData[keyDataLength];
|
|
} NDS_PRIVATE_KEY;
|
|
|
|
typedef struct {
|
|
DWORD challenge;
|
|
DWORD oldPwLength; // 16
|
|
BYTE oldPwHash[16];
|
|
DWORD newPwStrLength; //password length
|
|
DWORD newPwLength; // 16
|
|
BYTE newPwHash[16];
|
|
ENC_BLOCK_HDR encPrivKeyHdr;
|
|
// BYTE encPrivKey[];
|
|
} NDS_CHPW_MSG;
|
|
|
|
#define NDSV_CHANGE_PASSWORD 55
|
|
typedef struct {
|
|
DWORD version; // = 0
|
|
DWORD entryId;
|
|
DWORD totalLength;
|
|
DWORD secVersion; // = 1
|
|
DWORD envelopId1; // 0x00020009
|
|
DWORD envelopLength1;
|
|
//ENC_BLOCK_HDR rsaHeader; // secret key data encrypted with RSA
|
|
//BYTE rsaCipher[53]; // 53 + 3 pad bytes
|
|
//BYTE pad[3];
|
|
//ENC_BLOCK_HDR rc2Header;
|
|
//BYTE rc2Cipher[];
|
|
} REQ_CHANGE_PASSWORD;
|
|
|
|
#define NDSV_BEGIN_LOGIN 57
|
|
typedef struct {
|
|
DWORD version;
|
|
DWORD entryId;
|
|
} REQ_BEGIN_LOGIN;
|
|
|
|
|
|
typedef struct {
|
|
DWORD ccode;
|
|
DWORD entryId; // need not be same as in request
|
|
DWORD challenge;
|
|
} REPLY_BEGIN_LOGIN;
|
|
|
|
#define NDSV_FINISH_LOGIN 58
|
|
typedef struct {
|
|
DWORD version;
|
|
DWORD flags; // = 0
|
|
DWORD entryId;
|
|
DWORD totalLength; // = 0x494
|
|
DWORD secVersion; // = 1
|
|
DWORD envelopId1; // 0x00020009
|
|
DWORD envelopLength1; // 0x488
|
|
//ENC_BLOCK_HDR rsaHeader; // secret key data encrypted with RSA
|
|
//BYTE rsaCipher[53]; // 53 + 3 pad bytes
|
|
//BYTE pad[3];
|
|
//ENC_BLOCK_HDR rc2Header;
|
|
//BYTE rc2Cipher[0x430];
|
|
} REQ_FINISH_LOGIN;
|
|
|
|
typedef struct {
|
|
DWORD ccode;
|
|
DWORD valStart;
|
|
DWORD valEnd;
|
|
//ENC_BLOCK_HDR rc2Header;
|
|
//BYTE rc2Cipher[0x140];
|
|
} REPLY_FINISH_LOGIN;
|
|
|
|
#define NDSV_BEGIN_AUTHENTICATE 59
|
|
typedef struct {
|
|
DWORD version;
|
|
DWORD entryId;
|
|
DWORD clientRand;
|
|
} REQ_BEGIN_AUTHENTICATE;
|
|
|
|
typedef struct {
|
|
DWORD svrRand;
|
|
DWORD totalLength;
|
|
TAG_DATA_HEADER tdh;
|
|
WORD unknown; // = 2
|
|
DWORD encClientRandLength;
|
|
//CIPHER_BLOCK_HEADER keyCipherHdr;
|
|
//BYTE keyCipher[];
|
|
//CIPHER_BLOCK_HEADER encClientRandHdr;
|
|
//BYTE encClientRand[];
|
|
} REPLY_BEGIN_AUTHENTICATE;
|
|
|
|
|
|
#define NDSV_FINISH_AUTHENTICATE 60
|
|
//typedef struct {
|
|
// DWORD sessionKeyLength;
|
|
// BYTE encSessionKey[sessionKeyLength];
|
|
// DWORD credentialLength;
|
|
// BYTE credential[credentialLength];
|
|
// WORD unknown = 0;
|
|
// DWORD proofLength;
|
|
// TAG_DATA_HEADER proofTDH;
|
|
// WORD log2DigestBase; //=16
|
|
// WORD proofOrder; //=3;
|
|
// totalXLength;
|
|
// BYTE x1[];
|
|
// BYTE x2[];
|
|
// BYTE x3[];
|
|
// BYTE y1[];
|
|
// BYTE y2[];
|
|
// BYTE y3[];
|
|
// } REQ_FINISH_AUTHENTICATE;
|
|
|
|
#define NDSV_LOGOUT 61
|
|
|
|
#define ROUNDUP4(x) (((x)+3)&(~3))
|
|
|
|
// Transport type
|
|
|
|
// referral scope
|
|
#define ANY_SCOPE 0
|
|
#define COUNTRY_SCOPE 1
|
|
#define ORGANIZATION_SCOPE 2
|
|
#define LOCAL_SCOPE 3
|
|
|