864 lines
38 KiB
C++
864 lines
38 KiB
C++
//
|
|
// schema.h -- This file contains the class definitions for:
|
|
// CLDAPSchema
|
|
//
|
|
// Created:
|
|
// April 6, 1997 -- Milan Shah (milans)
|
|
//
|
|
// Changes:
|
|
//
|
|
|
|
#include "precomp.h"
|
|
#include "schema.h"
|
|
#include "ldapstr.h"
|
|
|
|
//+----------------------------------------------------------------------------
|
|
//
|
|
// Function: CNT5LDAPSchema::CNT5LDAPSchema
|
|
//
|
|
// Synopsis: Constructor
|
|
//
|
|
// Arguments: [szSchemaConfigDirectory] -- Ignored.
|
|
// [pdwErr] -- Construction errors are returned here.
|
|
//
|
|
// Returns: Nothing
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
|
|
CNT5LDAPSchema::CNT5LDAPSchema(
|
|
LPSTR szSchemaConfigDirectory,
|
|
LPDWORD pdwErr) : CLDAPSchema(szSchemaConfigDirectory, pdwErr)
|
|
{
|
|
m_DNAttrName = ATTR_DISTINGUISHED_NAME;
|
|
m_RDNAttrName = ATTR_RELATIVE_DISTINGUISHED_NAME;
|
|
|
|
m_IMSConfigClassName = CLASS_IMS_CONFIG;
|
|
m_ChangeGuidAttrName = ATTR_DOMAIN_INFO_GUID;
|
|
m_DomainListAttrName = ATTR_DOMAIN_INFO_LIST;
|
|
m_ServerListAttrName = ATTR_SERVER_LIST;
|
|
m_ConfigObjectName = OBJECT_IMS_CONFIG;
|
|
m_ConfigObjectRDN = OBJECT_IMS_CONFIG_RDN;
|
|
|
|
m_UserClassName = CLASS_USER;
|
|
m_UserEmailAttrName = ATTR_EMAIL_ADDRESS;
|
|
m_UserX400AttrName = ATTR_X400_ADDRESS;
|
|
m_UserHomeServerAttrName = ATTR_HOMESERVER_ADDRESS;
|
|
m_UserFwdAndDeliverName = ATTR_FWD_AND_DELIVER;
|
|
m_UserAlternateName = ATTR_ALTERNATE_ADDRESS;
|
|
m_UserProxyName = ATTR_PROXY_ADDRESS;
|
|
m_UserProxyReturnedName = ATTR_PROXY_RETURNED_ADDRESS;
|
|
m_UserLegacyEXDNName = ATTR_LEGACYEXDN_ADDRESS;
|
|
|
|
m_UserMailboxAttrName = ATTR_IMS_MAILBOX;
|
|
m_UserQuotaAttrName = ATTR_IMS_MAILBOXQUOTA;
|
|
m_UserForwardAttrName = ATTR_IMS_FORWARDADDR;
|
|
m_UserForwardAttrType = ATTR_IMS_FORWARDTYPE;
|
|
m_UserLocalAttrName = ATTR_IMS_LOCAL;
|
|
m_UserAutoReply = ATTR_IMS_AUTOREPLY;
|
|
m_UserAutoReplySubject = ATTR_IMS_AUTOREPLYSUBJECT;
|
|
|
|
m_X500DLClassName = CLASS_X500DL;
|
|
m_X500DLMembersAttrName = ATTR_X500_MEMBERS;
|
|
|
|
m_RFC822DLClassName = CLASS_RFC822DL;
|
|
m_RFC822DLMembersAttrName = ATTR_RFC822_MEMBERS;
|
|
|
|
m_DynamicDLClassName = CLASS_DYNAMICDL;
|
|
m_DynamicDLMembersAttrName = ATTR_DYNAMIC_MEMBERS;
|
|
|
|
m_rgszUserAttrNames[USER_ALL_EMAIL_INDEX] = m_UserEmailAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_X400_INDEX] = m_UserX400AttrName;
|
|
m_rgszUserAttrNames[USER_ALL_HOMESERVER_INDEX] = m_UserHomeServerAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_FWD_AND_DELIVER_INDEX] = m_UserFwdAndDeliverName;
|
|
m_rgszUserAttrNames[USER_ALL_ALTERNATE_INDEX] = m_UserAlternateName;
|
|
m_rgszUserAttrNames[USER_ALL_PROXY_INDEX] = m_UserProxyName;
|
|
m_rgszUserAttrNames[USER_ALL_LEGACYEXDN_INDEX] = m_UserLegacyEXDNName;
|
|
|
|
m_rgszUserAttrNames[USER_ALL_MAILBOX_INDEX] = m_UserMailboxAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_QUOTA_INDEX] = m_UserQuotaAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_FORWARD_INDEX] = m_UserForwardAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_LOCAL_INDEX] = m_UserLocalAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_AUTOREPLY_INDEX] = m_UserAutoReply;
|
|
m_rgszUserAttrNames[USER_ALL_AUTOREPLYSUBJECT_INDEX] = m_UserAutoReplySubject;
|
|
m_rgszUserAttrNames[USER_ALL_LAST_INDEX] = NULL;
|
|
|
|
m_rgszDLAttrNames[DL_ALL_X500_MEMBERS_INDEX] = m_X500DLMembersAttrName;
|
|
m_rgszDLAttrNames[DL_ALL_RFC822_MEMBERS_INDEX] = m_RFC822DLMembersAttrName;
|
|
m_rgszDLAttrNames[DL_ALL_DYNAMIC_MEMBERS_INDEX] = m_DynamicDLMembersAttrName;
|
|
m_rgszDLAttrNames[DL_ALL_LAST_INDEX] = NULL;
|
|
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_OBJECTCLASS_INDEX] = "objectClass";
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_EMAIL_INDEX] = m_UserEmailAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_X400_INDEX] = m_UserX400AttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_HOMESERVER_INDEX] = m_UserHomeServerAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_FWD_AND_DELIVER_INDEX] = m_UserFwdAndDeliverName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_ALTERNATE_INDEX] = m_UserAlternateName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_PROXY_INDEX] = m_UserProxyName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_LEGACYEXDN_INDEX] = m_UserLegacyEXDNName;
|
|
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_MAILBOX_INDEX] = m_UserMailboxAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_QUOTA_INDEX] = m_UserQuotaAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_FORWARD_INDEX] = m_UserForwardAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_LOCAL_INDEX] = m_UserLocalAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_AUTOREPLY_INDEX] = m_UserAutoReply;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_AUTOREPLYSUBJECT_INDEX] = m_UserAutoReplySubject;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_X500_MEMBERS_INDEX] = m_X500DLMembersAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_RFC822_MEMBERS_INDEX] = m_RFC822DLMembersAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_DYNAMIC_MEMBERS_INDEX] = m_DynamicDLMembersAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_DN_INDEX] = m_DNAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_LAST_INDEX] = NULL;
|
|
|
|
*pdwErr = ERROR_SUCCESS;
|
|
}
|
|
|
|
//+----------------------------------------------------------------------------
|
|
//
|
|
// Function: CNT5ExchangeSchema::CNT5ExchangSchema
|
|
//
|
|
// Synopsis: Constructor
|
|
//
|
|
// Arguments: [szSchemaConfigDirectory] -- Ignored.
|
|
// [pdwErr] -- Construction errors are returned here.
|
|
//
|
|
// Returns: Nothing
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
|
|
CNT5ExchangeSchema::CNT5ExchangeSchema(
|
|
LPSTR szSchemaConfigDirectory,
|
|
LPDWORD pdwErr) : CLDAPSchema(szSchemaConfigDirectory, pdwErr)
|
|
{
|
|
m_DNAttrName = NT5EXCHANGE_ATTR_DISTINGUISHED_NAME;
|
|
m_RDNAttrName = NT5EXCHANGE_ATTR_RELATIVE_DISTINGUISHED_NAME;
|
|
|
|
m_IMSConfigClassName = CLASS_IMS_CONFIG;
|
|
m_ChangeGuidAttrName = ATTR_DOMAIN_INFO_GUID;
|
|
m_DomainListAttrName = ATTR_DOMAIN_INFO_LIST;
|
|
m_ServerListAttrName = ATTR_SERVER_LIST;
|
|
m_ConfigObjectName = OBJECT_IMS_CONFIG;
|
|
m_ConfigObjectRDN = OBJECT_IMS_CONFIG_RDN;
|
|
|
|
m_UserClassName = NT5EXCHANGE_CLASS_USER;
|
|
m_UserEmailAttrName = NT5EXCHANGE_ATTR_EMAIL_ADDRESS;
|
|
m_UserX400AttrName = NT5EXCHANGE_ATTR_X400_ADDRESS;
|
|
m_UserHomeServerAttrName = NT5EXCHANGE_ATTR_HOMESERVER;
|
|
m_UserFwdAndDeliverName = NT5EXCHANGE_ATTR_FWD_AND_DELIVER;
|
|
m_UserAlternateName = NT5EXCHANGE_ATTR_ALTERNATE_ADDRESS;
|
|
m_UserProxyName = NT5EXCHANGE_ATTR_PROXY_ADDRESS;
|
|
m_UserProxyReturnedName = NT5EXCHANGE_ATTR_PROXY_RETURNED_ADDRESS;
|
|
m_UserLegacyEXDNName = NT5EXCHANGE_ATTR_LEGACYEXDN_ADDRESS;
|
|
|
|
m_UserMailboxAttrName = NT5EXCHANGE_ATTR_IMS_MAILBOX;
|
|
m_UserQuotaAttrName = NT5EXCHANGE_ATTR_IMS_MAILBOXQUOTA;
|
|
m_UserForwardAttrName = NT5EXCHANGE_ATTR_IMS_FORWARDADDR;
|
|
m_UserForwardAttrType = NT5EXCHANGE_ATTR_IMS_FORWARDTYPE;
|
|
m_UserLocalAttrName = NT5EXCHANGE_ATTR_IMS_LOCAL;
|
|
m_UserAutoReply = NT5EXCHANGE_ATTR_IMS_AUTOREPLY;
|
|
m_UserAutoReplySubject = NT5EXCHANGE_ATTR_IMS_AUTOREPLYSUBJECT;
|
|
|
|
m_X500DLClassName = NT5EXCHANGE_CLASS_X500DL;
|
|
m_X500DLMembersAttrName = NT5EXCHANGE_ATTR_X500_MEMBERS;
|
|
|
|
m_RFC822DLClassName = NT5EXCHANGE_CLASS_RFC822DL;
|
|
m_RFC822DLMembersAttrName = NT5EXCHANGE_ATTR_RFC822_MEMBERS;
|
|
|
|
m_DynamicDLClassName = NT5EXCHANGE_CLASS_DYNAMICDL;
|
|
m_DynamicDLMembersAttrName = NT5EXCHANGE_ATTR_DYNAMIC_MEMBERS;
|
|
|
|
m_rgszUserAttrNames[USER_ALL_EMAIL_INDEX] = m_UserEmailAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_X400_INDEX] = m_UserX400AttrName;
|
|
m_rgszUserAttrNames[USER_ALL_HOMESERVER_INDEX] = m_UserHomeServerAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_FWD_AND_DELIVER_INDEX] = m_UserFwdAndDeliverName;
|
|
m_rgszUserAttrNames[USER_ALL_ALTERNATE_INDEX] = m_UserAlternateName;
|
|
m_rgszUserAttrNames[USER_ALL_PROXY_INDEX] = m_UserProxyName;
|
|
m_rgszUserAttrNames[USER_ALL_LEGACYEXDN_INDEX] = m_UserLegacyEXDNName;
|
|
|
|
m_rgszUserAttrNames[USER_ALL_MAILBOX_INDEX] = m_UserMailboxAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_QUOTA_INDEX] = m_UserQuotaAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_FORWARD_INDEX] = m_UserForwardAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_LOCAL_INDEX] = m_UserLocalAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_AUTOREPLY_INDEX] = m_UserAutoReply;
|
|
m_rgszUserAttrNames[USER_ALL_AUTOREPLYSUBJECT_INDEX] = m_UserAutoReplySubject;
|
|
m_rgszUserAttrNames[USER_ALL_LAST_INDEX] = NULL;
|
|
|
|
m_rgszDLAttrNames[DL_ALL_X500_MEMBERS_INDEX] = m_X500DLMembersAttrName;
|
|
m_rgszDLAttrNames[DL_ALL_RFC822_MEMBERS_INDEX] = m_RFC822DLMembersAttrName;
|
|
m_rgszDLAttrNames[DL_ALL_DYNAMIC_MEMBERS_INDEX] = m_DynamicDLMembersAttrName;
|
|
m_rgszDLAttrNames[DL_ALL_LAST_INDEX] = NULL;
|
|
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_OBJECTCLASS_INDEX] = "objectClass";
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_EMAIL_INDEX] = m_UserEmailAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_X400_INDEX] = m_UserX400AttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_HOMESERVER_INDEX] = m_UserHomeServerAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_FWD_AND_DELIVER_INDEX] = m_UserFwdAndDeliverName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_ALTERNATE_INDEX] = m_UserAlternateName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_PROXY_INDEX] = m_UserProxyName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_LEGACYEXDN_INDEX] = m_UserLegacyEXDNName;
|
|
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_MAILBOX_INDEX] = m_UserMailboxAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_QUOTA_INDEX] = m_UserQuotaAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_FORWARD_INDEX] = m_UserForwardAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_LOCAL_INDEX] = m_UserLocalAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_AUTOREPLY_INDEX] = m_UserAutoReply;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_AUTOREPLYSUBJECT_INDEX] = m_UserAutoReplySubject;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_X500_MEMBERS_INDEX] = m_X500DLMembersAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_RFC822_MEMBERS_INDEX] = m_RFC822DLMembersAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_DYNAMIC_MEMBERS_INDEX] = m_DynamicDLMembersAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_DN_INDEX] = m_DNAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_LAST_INDEX] = NULL;
|
|
|
|
*pdwErr = ERROR_SUCCESS;
|
|
}
|
|
|
|
//+----------------------------------------------------------------------------
|
|
//
|
|
// Function: CNT5ExchangeDLTestSchema::CNT5ExchangDLTestSchema
|
|
//
|
|
// Synopsis: Constructor
|
|
//
|
|
// Arguments: [szSchemaConfigDirectory] -- Ignored.
|
|
// [pdwErr] -- Construction errors are returned here.
|
|
//
|
|
// Returns: Nothing
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
|
|
CNT5ExchangeDLTestSchema::CNT5ExchangeDLTestSchema(
|
|
LPSTR szSchemaConfigDirectory,
|
|
LPDWORD pdwErr) : CLDAPSchema(szSchemaConfigDirectory, pdwErr)
|
|
{
|
|
// Exactly the same as NT5Exchange except for the X500DLClassName
|
|
// attribute string
|
|
m_X500DLClassName = NT5EXCHANGEDLTEST_ATTR_X500DL;
|
|
|
|
m_DNAttrName = NT5EXCHANGE_ATTR_DISTINGUISHED_NAME;
|
|
m_RDNAttrName = NT5EXCHANGE_ATTR_RELATIVE_DISTINGUISHED_NAME;
|
|
|
|
m_IMSConfigClassName = CLASS_IMS_CONFIG;
|
|
m_ChangeGuidAttrName = ATTR_DOMAIN_INFO_GUID;
|
|
m_DomainListAttrName = ATTR_DOMAIN_INFO_LIST;
|
|
m_ServerListAttrName = ATTR_SERVER_LIST;
|
|
m_ConfigObjectName = OBJECT_IMS_CONFIG;
|
|
m_ConfigObjectRDN = OBJECT_IMS_CONFIG_RDN;
|
|
|
|
m_UserClassName = NT5EXCHANGE_CLASS_USER;
|
|
m_UserEmailAttrName = NT5EXCHANGE_ATTR_EMAIL_ADDRESS;
|
|
m_UserX400AttrName = NT5EXCHANGE_ATTR_X400_ADDRESS;
|
|
m_UserHomeServerAttrName = NT5EXCHANGE_ATTR_HOMESERVER;
|
|
m_UserFwdAndDeliverName = NT5EXCHANGE_ATTR_FWD_AND_DELIVER;
|
|
m_UserAlternateName = NT5EXCHANGE_ATTR_ALTERNATE_ADDRESS;
|
|
m_UserProxyName = NT5EXCHANGE_ATTR_PROXY_ADDRESS;
|
|
m_UserProxyReturnedName = NT5EXCHANGE_ATTR_PROXY_RETURNED_ADDRESS;
|
|
m_UserLegacyEXDNName = NT5EXCHANGE_ATTR_LEGACYEXDN_ADDRESS;
|
|
|
|
m_UserMailboxAttrName = NT5EXCHANGE_ATTR_IMS_MAILBOX;
|
|
m_UserQuotaAttrName = NT5EXCHANGE_ATTR_IMS_MAILBOXQUOTA;
|
|
m_UserForwardAttrName = NT5EXCHANGE_ATTR_IMS_FORWARDADDR;
|
|
m_UserForwardAttrType = NT5EXCHANGE_ATTR_IMS_FORWARDTYPE;
|
|
m_UserLocalAttrName = NT5EXCHANGE_ATTR_IMS_LOCAL;
|
|
m_UserAutoReply = NT5EXCHANGE_ATTR_IMS_AUTOREPLY;
|
|
m_UserAutoReplySubject = NT5EXCHANGE_ATTR_IMS_AUTOREPLYSUBJECT;
|
|
|
|
m_X500DLMembersAttrName = NT5EXCHANGE_ATTR_X500_MEMBERS;
|
|
|
|
m_RFC822DLClassName = NT5EXCHANGE_CLASS_RFC822DL;
|
|
m_RFC822DLMembersAttrName = NT5EXCHANGE_ATTR_RFC822_MEMBERS;
|
|
|
|
m_DynamicDLClassName = NT5EXCHANGE_CLASS_DYNAMICDL;
|
|
m_DynamicDLMembersAttrName = NT5EXCHANGE_ATTR_DYNAMIC_MEMBERS;
|
|
|
|
m_rgszUserAttrNames[USER_ALL_EMAIL_INDEX] = m_UserEmailAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_X400_INDEX] = m_UserX400AttrName;
|
|
m_rgszUserAttrNames[USER_ALL_HOMESERVER_INDEX] = m_UserHomeServerAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_FWD_AND_DELIVER_INDEX] = m_UserFwdAndDeliverName;
|
|
m_rgszUserAttrNames[USER_ALL_ALTERNATE_INDEX] = m_UserAlternateName;
|
|
m_rgszUserAttrNames[USER_ALL_PROXY_INDEX] = m_UserProxyName;
|
|
m_rgszUserAttrNames[USER_ALL_LEGACYEXDN_INDEX] = m_UserLegacyEXDNName;
|
|
|
|
m_rgszUserAttrNames[USER_ALL_MAILBOX_INDEX] = m_UserMailboxAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_QUOTA_INDEX] = m_UserQuotaAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_FORWARD_INDEX] = m_UserForwardAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_LOCAL_INDEX] = m_UserLocalAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_AUTOREPLY_INDEX] = m_UserAutoReply;
|
|
m_rgszUserAttrNames[USER_ALL_AUTOREPLYSUBJECT_INDEX] = m_UserAutoReplySubject;
|
|
m_rgszUserAttrNames[USER_ALL_LAST_INDEX] = NULL;
|
|
|
|
m_rgszDLAttrNames[DL_ALL_X500_MEMBERS_INDEX] = m_X500DLMembersAttrName;
|
|
m_rgszDLAttrNames[DL_ALL_RFC822_MEMBERS_INDEX] = m_RFC822DLMembersAttrName;
|
|
m_rgszDLAttrNames[DL_ALL_DYNAMIC_MEMBERS_INDEX] = m_DynamicDLMembersAttrName;
|
|
m_rgszDLAttrNames[DL_ALL_LAST_INDEX] = NULL;
|
|
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_OBJECTCLASS_INDEX] = "objectClass";
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_EMAIL_INDEX] = m_UserEmailAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_X400_INDEX] = m_UserX400AttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_HOMESERVER_INDEX] = m_UserHomeServerAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_FWD_AND_DELIVER_INDEX] = m_UserFwdAndDeliverName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_ALTERNATE_INDEX] = m_UserAlternateName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_PROXY_INDEX] = m_UserProxyName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_LEGACYEXDN_INDEX] = m_UserLegacyEXDNName;
|
|
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_MAILBOX_INDEX] = m_UserMailboxAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_QUOTA_INDEX] = m_UserQuotaAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_FORWARD_INDEX] = m_UserForwardAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_LOCAL_INDEX] = m_UserLocalAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_AUTOREPLY_INDEX] = m_UserAutoReply;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_AUTOREPLYSUBJECT_INDEX] = m_UserAutoReplySubject;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_X500_MEMBERS_INDEX] = m_X500DLMembersAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_RFC822_MEMBERS_INDEX] = m_RFC822DLMembersAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_DYNAMIC_MEMBERS_INDEX] = m_DynamicDLMembersAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_DN_INDEX] = m_DNAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_LAST_INDEX] = NULL;
|
|
|
|
*pdwErr = ERROR_SUCCESS;
|
|
}
|
|
|
|
//+----------------------------------------------------------------------------
|
|
//
|
|
// Function: CExchange5Schema::CExchang5Schema
|
|
//
|
|
// Synopsis: Constructor
|
|
//
|
|
// Arguments: [szSchemaConfigDirectory] -- Ignored.
|
|
// [pdwErr] -- Construction errors are returned here.
|
|
//
|
|
// Returns: Nothing
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
|
|
CExchange5Schema::CExchange5Schema(
|
|
LPSTR szSchemaConfigDirectory,
|
|
LPDWORD pdwErr) : CLDAPSchema(szSchemaConfigDirectory, pdwErr)
|
|
{
|
|
m_DNAttrName = EX5_ATTR_DISTINGUISHED_NAME;
|
|
m_RDNAttrName = EX5_ATTR_RELATIVE_DISTINGUISHED_NAME;
|
|
|
|
m_IMSConfigClassName = CLASS_IMS_CONFIG;
|
|
m_ChangeGuidAttrName = ATTR_DOMAIN_INFO_GUID;
|
|
m_DomainListAttrName = ATTR_DOMAIN_INFO_LIST;
|
|
m_ServerListAttrName = ATTR_SERVER_LIST;
|
|
m_ConfigObjectName = OBJECT_IMS_CONFIG;
|
|
m_ConfigObjectRDN = OBJECT_IMS_CONFIG_RDN;
|
|
|
|
m_UserClassName = EX5_CLASS_USER;
|
|
m_UserEmailAttrName = EX5_ATTR_EMAIL_ADDRESS;
|
|
m_UserX400AttrName = EX5_ATTR_X400_ADDRESS;
|
|
m_UserHomeServerAttrName = EX5_ATTR_HOMESERVER;
|
|
m_UserFwdAndDeliverName = EX5_ATTR_FWD_AND_DELIVER;
|
|
m_UserAlternateName = EX5_ATTR_ALTERNATE_ADDRESS;
|
|
m_UserProxyName = EX5_ATTR_PROXY_ADDRESS;
|
|
m_UserProxyReturnedName = EX5_ATTR_PROXY_RETURNED_ADDRESS;
|
|
m_UserLegacyEXDNName = EX5_ATTR_LEGACYEXDN_ADDRESS;
|
|
|
|
m_UserMailboxAttrName = EX5_ATTR_IMS_MAILBOX;
|
|
m_UserQuotaAttrName = EX5_ATTR_IMS_MAILBOXQUOTA;
|
|
m_UserForwardAttrName = EX5_ATTR_IMS_FORWARDADDR;
|
|
m_UserForwardAttrType = EX5_ATTR_IMS_FORWARDTYPE;
|
|
m_UserLocalAttrName = EX5_ATTR_IMS_LOCAL;
|
|
m_UserAutoReply = EX5_ATTR_IMS_AUTOREPLY;
|
|
m_UserAutoReplySubject = EX5_ATTR_IMS_AUTOREPLYSUBJECT;
|
|
|
|
m_X500DLClassName = EX5_CLASS_X500DL;
|
|
m_X500DLMembersAttrName = EX5_ATTR_X500_MEMBERS;
|
|
|
|
m_RFC822DLClassName = EX5_CLASS_RFC822DL;
|
|
m_RFC822DLMembersAttrName = EX5_ATTR_RFC822_MEMBERS;
|
|
|
|
m_DynamicDLClassName = EX5_CLASS_DYNAMICDL;
|
|
m_DynamicDLMembersAttrName = EX5_ATTR_DYNAMIC_MEMBERS;
|
|
|
|
m_rgszUserAttrNames[USER_ALL_EMAIL_INDEX] = m_UserEmailAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_X400_INDEX] = m_UserX400AttrName;
|
|
m_rgszUserAttrNames[USER_ALL_HOMESERVER_INDEX] = m_UserHomeServerAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_FWD_AND_DELIVER_INDEX] = m_UserFwdAndDeliverName;
|
|
m_rgszUserAttrNames[USER_ALL_ALTERNATE_INDEX] = m_UserAlternateName;
|
|
m_rgszUserAttrNames[USER_ALL_PROXY_INDEX] = m_UserProxyName;
|
|
m_rgszUserAttrNames[USER_ALL_LEGACYEXDN_INDEX] = m_UserLegacyEXDNName;
|
|
|
|
m_rgszUserAttrNames[USER_ALL_MAILBOX_INDEX] = m_UserMailboxAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_QUOTA_INDEX] = m_UserQuotaAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_FORWARD_INDEX] = m_UserForwardAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_LOCAL_INDEX] = m_UserLocalAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_AUTOREPLY_INDEX] = m_UserAutoReply;
|
|
m_rgszUserAttrNames[USER_ALL_AUTOREPLYSUBJECT_INDEX] = m_UserAutoReplySubject;
|
|
m_rgszUserAttrNames[USER_ALL_LAST_INDEX] = NULL;
|
|
|
|
m_rgszDLAttrNames[DL_ALL_X500_MEMBERS_INDEX] = m_X500DLMembersAttrName;
|
|
m_rgszDLAttrNames[DL_ALL_RFC822_MEMBERS_INDEX] = m_RFC822DLMembersAttrName;
|
|
m_rgszDLAttrNames[DL_ALL_DYNAMIC_MEMBERS_INDEX] = m_DynamicDLMembersAttrName;
|
|
m_rgszDLAttrNames[DL_ALL_LAST_INDEX] = NULL;
|
|
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_OBJECTCLASS_INDEX] = "objectClass";
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_EMAIL_INDEX] = m_UserEmailAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_X400_INDEX] = m_UserX400AttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_HOMESERVER_INDEX] = m_UserHomeServerAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_FWD_AND_DELIVER_INDEX] = m_UserFwdAndDeliverName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_ALTERNATE_INDEX] = m_UserAlternateName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_PROXY_INDEX] = m_UserProxyName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_LEGACYEXDN_INDEX] = m_UserLegacyEXDNName;
|
|
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_MAILBOX_INDEX] = m_UserMailboxAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_QUOTA_INDEX] = m_UserQuotaAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_FORWARD_INDEX] = m_UserForwardAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_LOCAL_INDEX] = m_UserLocalAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_AUTOREPLY_INDEX] = m_UserAutoReply;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_AUTOREPLYSUBJECT_INDEX] = m_UserAutoReplySubject;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_X500_MEMBERS_INDEX] = m_X500DLMembersAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_RFC822_MEMBERS_INDEX] = m_RFC822DLMembersAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_DYNAMIC_MEMBERS_INDEX] = m_DynamicDLMembersAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_DN_INDEX] = m_DNAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_LAST_INDEX] = NULL;
|
|
|
|
*pdwErr = ERROR_SUCCESS;
|
|
}
|
|
|
|
//+----------------------------------------------------------------------------
|
|
//
|
|
// Function: CMCIS3Schema::CMCIS3Schema
|
|
//
|
|
// Synopsis: Constructor
|
|
//
|
|
// Arguments: [szSchemaConfigDirectory] -- Ignored.
|
|
// [pdwErr] -- Construction errors are returned here.
|
|
//
|
|
// Returns: Nothing
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
|
|
CMCIS3Schema::CMCIS3Schema(
|
|
LPSTR szSchemaConfigDirectory,
|
|
LPDWORD pdwErr) : CLDAPSchema(szSchemaConfigDirectory, pdwErr)
|
|
{
|
|
m_DNAttrName = MCIS3_ATTR_DISTINGUISHED_NAME;
|
|
m_RDNAttrName = MCIS3_ATTR_RELATIVE_DISTINGUISHED_NAME;
|
|
|
|
m_IMSConfigClassName = CLASS_IMS_CONFIG;
|
|
m_ChangeGuidAttrName = ATTR_DOMAIN_INFO_GUID;
|
|
m_DomainListAttrName = ATTR_DOMAIN_INFO_LIST;
|
|
m_ServerListAttrName = ATTR_SERVER_LIST;
|
|
m_ConfigObjectName = OBJECT_IMS_CONFIG;
|
|
m_ConfigObjectRDN = OBJECT_IMS_CONFIG_RDN;
|
|
|
|
m_UserClassName = MCIS3_CLASS_USER;
|
|
m_UserEmailAttrName = MCIS3_ATTR_EMAIL_ADDRESS;
|
|
m_UserX400AttrName = MCIS3_ATTR_X400_ADDRESS;
|
|
m_UserHomeServerAttrName = MCIS3_ATTR_HOMESERVER;
|
|
m_UserFwdAndDeliverName = MCIS3_ATTR_FWD_AND_DELIVER;
|
|
m_UserAlternateName = MCIS3_ATTR_ALTERNATE_ADDRESS;
|
|
m_UserProxyName = MCIS3_ATTR_PROXY_ADDRESS;
|
|
m_UserProxyReturnedName = MCIS3_ATTR_PROXY_RETURNED_ADDRESS;
|
|
m_UserLegacyEXDNName = MCIS3_ATTR_LEGACYEXDN_ADDRESS;
|
|
|
|
m_UserMailboxAttrName = MCIS3_ATTR_IMS_MAILBOX;
|
|
m_UserQuotaAttrName = MCIS3_ATTR_IMS_MAILBOXQUOTA;
|
|
m_UserForwardAttrName = MCIS3_ATTR_IMS_FORWARDADDR;
|
|
m_UserForwardAttrType = MCIS3_ATTR_IMS_FORWARDTYPE;
|
|
m_UserLocalAttrName = MCIS3_ATTR_IMS_LOCAL;
|
|
m_UserAutoReply = MCIS3_ATTR_IMS_AUTOREPLY;
|
|
m_UserAutoReplySubject = MCIS3_ATTR_IMS_AUTOREPLYSUBJECT;
|
|
|
|
m_X500DLClassName = MCIS3_CLASS_X500DL;
|
|
m_X500DLMembersAttrName = MCIS3_ATTR_X500_MEMBERS;
|
|
|
|
m_RFC822DLClassName = MCIS3_CLASS_RFC822DL;
|
|
m_RFC822DLMembersAttrName = MCIS3_ATTR_RFC822_MEMBERS;
|
|
|
|
m_DynamicDLClassName = MCIS3_CLASS_DYNAMICDL;
|
|
m_DynamicDLMembersAttrName = MCIS3_ATTR_DYNAMIC_MEMBERS;
|
|
|
|
m_rgszUserAttrNames[USER_ALL_EMAIL_INDEX] = m_UserEmailAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_X400_INDEX] = m_UserX400AttrName;
|
|
m_rgszUserAttrNames[USER_ALL_HOMESERVER_INDEX] = m_UserHomeServerAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_FWD_AND_DELIVER_INDEX] = m_UserFwdAndDeliverName;
|
|
m_rgszUserAttrNames[USER_ALL_ALTERNATE_INDEX] = m_UserAlternateName;
|
|
m_rgszUserAttrNames[USER_ALL_PROXY_INDEX] = m_UserProxyName;
|
|
m_rgszUserAttrNames[USER_ALL_LEGACYEXDN_INDEX] = m_UserLegacyEXDNName;
|
|
|
|
m_rgszUserAttrNames[USER_ALL_MAILBOX_INDEX] = m_UserMailboxAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_QUOTA_INDEX] = m_UserQuotaAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_FORWARD_INDEX] = m_UserForwardAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_LOCAL_INDEX] = m_UserLocalAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_AUTOREPLY_INDEX] = m_UserAutoReply;
|
|
m_rgszUserAttrNames[USER_ALL_AUTOREPLYSUBJECT_INDEX] = m_UserAutoReplySubject;
|
|
m_rgszUserAttrNames[USER_ALL_LAST_INDEX] = NULL;
|
|
|
|
m_rgszDLAttrNames[DL_ALL_X500_MEMBERS_INDEX] = m_X500DLMembersAttrName;
|
|
m_rgszDLAttrNames[DL_ALL_RFC822_MEMBERS_INDEX] = m_RFC822DLMembersAttrName;
|
|
m_rgszDLAttrNames[DL_ALL_DYNAMIC_MEMBERS_INDEX] = m_DynamicDLMembersAttrName;
|
|
m_rgszDLAttrNames[DL_ALL_LAST_INDEX] = NULL;
|
|
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_OBJECTCLASS_INDEX] = "objectClass";
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_EMAIL_INDEX] = m_UserEmailAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_X400_INDEX] = m_UserX400AttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_HOMESERVER_INDEX] = m_UserHomeServerAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_FWD_AND_DELIVER_INDEX] = m_UserFwdAndDeliverName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_ALTERNATE_INDEX] = m_UserAlternateName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_PROXY_INDEX] = m_UserProxyName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_LEGACYEXDN_INDEX] = m_UserLegacyEXDNName;
|
|
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_MAILBOX_INDEX] = m_UserMailboxAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_QUOTA_INDEX] = m_UserQuotaAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_FORWARD_INDEX] = m_UserForwardAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_LOCAL_INDEX] = m_UserLocalAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_AUTOREPLY_INDEX] = m_UserAutoReply;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_AUTOREPLYSUBJECT_INDEX] = m_UserAutoReplySubject;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_X500_MEMBERS_INDEX] = m_X500DLMembersAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_RFC822_MEMBERS_INDEX] = m_RFC822DLMembersAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_DYNAMIC_MEMBERS_INDEX] = m_DynamicDLMembersAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_DN_INDEX] = m_DNAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_LAST_INDEX] = NULL;
|
|
|
|
*pdwErr = ERROR_SUCCESS;
|
|
}
|
|
|
|
//+----------------------------------------------------------------------------
|
|
//
|
|
// Function: CGenericSchema::CGenericSchema
|
|
//
|
|
// Synopsis: Constructor for a schema class that reads the schema from an
|
|
// ini file.
|
|
//
|
|
// Arguments: [szSchemaConfigDirectory] -- Directory of ini file.
|
|
// [pdwErr] -- If an error is encountered while parsing the ini
|
|
// file, it is returned here.
|
|
//
|
|
// Returns: Nothing, but pdwErr is significant.
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
|
|
CGenericSchema::CGenericSchema(
|
|
LPSTR szSchemaConfigDirectory,
|
|
LPDWORD pdwErr) : CLDAPSchema(szSchemaConfigDirectory, pdwErr)
|
|
{
|
|
DWORD dwErr = ERROR_SUCCESS;
|
|
DWORD i, cItems;
|
|
CHAR szIniFile[_MAX_PATH];
|
|
|
|
m_UserForwardAttrType = CAT_SMTP;
|
|
|
|
struct {
|
|
LPCSTR szValueName;
|
|
LPSTR *pszValue;
|
|
} rgRequired[] = {
|
|
{GENERIC_CLASS_USER, &m_UserClassName},
|
|
{GENERIC_ATTR_EMAIL_ADDRESS, &m_UserEmailAttrName},
|
|
{GENERIC_ATTR_DISTINGUISHED_NAME, &m_DNAttrName},
|
|
{GENERIC_ATTR_RELATIVE_DISTINGUISHED_NAME, &m_RDNAttrName}
|
|
};
|
|
|
|
struct {
|
|
LPCSTR szValueName;
|
|
LPSTR *pszValue;
|
|
} rgOptional[] = {
|
|
{GENERIC_ATTR_X400_ADDRESS, &m_UserX400AttrName},
|
|
{GENERIC_ATTR_HOMESERVER, &m_UserHomeServerAttrName},
|
|
{GENERIC_ATTR_FWD_AND_DELIVER, &m_UserFwdAndDeliverName},
|
|
{GENERIC_ATTR_ALTERNATE_ADDRESS, &m_UserAlternateName},
|
|
{GENERIC_ATTR_PROXY_ADDRESS, &m_UserProxyName},
|
|
{GENERIC_ATTR_PROXY_RETURNED_ADDRESS, &m_UserProxyReturnedName},
|
|
{GENERIC_ATTR_LEGACYEXDN_ADDRESS, &m_UserLegacyEXDNName},
|
|
|
|
{GENERIC_ATTR_IMSMAILBOX, &m_UserMailboxAttrName},
|
|
{GENERIC_ATTR_IMSMAILBOXQUOTA, &m_UserQuotaAttrName},
|
|
{GENERIC_ATTR_IMSFORWARDADDR, &m_UserForwardAttrName},
|
|
{GENERIC_ATTR_IMSAUTOREPLY, &m_UserAutoReply},
|
|
{GENERIC_ATTR_IMSAUTOREPLYSUBJECT, &m_UserAutoReplySubject},
|
|
{GENERIC_CLASS_X500DL, &m_X500DLClassName},
|
|
{GENERIC_ATTR_X500_MEMBERS, &m_X500DLMembersAttrName},
|
|
{GENERIC_CLASS_RFC822DL, &m_RFC822DLClassName},
|
|
{GENERIC_ATTR_RFC822_MEMBERS, &m_RFC822DLMembersAttrName},
|
|
{GENERIC_CLASS_DYNAMICDL, &m_DynamicDLClassName},
|
|
{GENERIC_ATTR_DYNAMICDL_MEMBERS, &m_DynamicDLMembersAttrName},
|
|
{GENERIC_NOTUSED, &m_IMSConfigClassName},
|
|
{GENERIC_NOTUSED, &m_ChangeGuidAttrName},
|
|
{GENERIC_NOTUSED, &m_DomainListAttrName},
|
|
{GENERIC_NOTUSED, &m_ServerListAttrName},
|
|
{GENERIC_NOTUSED, &m_ConfigObjectName},
|
|
{GENERIC_NOTUSED, &m_ConfigObjectRDN},
|
|
{GENERIC_NOTUSED, &m_UserLocalAttrName}
|
|
};
|
|
|
|
//
|
|
// Innocent until proven guilty...
|
|
//
|
|
|
|
*pdwErr = ERROR_SUCCESS;
|
|
|
|
|
|
//
|
|
// Initialize all member strings to NULL, so if our initialization fails,
|
|
// the destructor can correctly cleanup.
|
|
//
|
|
|
|
cItems = sizeof(rgRequired) / sizeof(rgRequired[1]);
|
|
|
|
for (i = 0; i < cItems; i++) {
|
|
*(rgRequired[i].pszValue) = NULL;
|
|
}
|
|
|
|
cItems = sizeof(rgOptional) / sizeof(rgOptional[1]);
|
|
|
|
for (i = 0; i < cItems; i++) {
|
|
*(rgOptional[i].pszValue) = NULL;
|
|
}
|
|
|
|
//
|
|
// Construct ini file name and make sure it is there.
|
|
//
|
|
|
|
if (szSchemaConfigDirectory != NULL && szSchemaConfigDirectory[0] != 0) {
|
|
|
|
DWORD dwFileAttrs;
|
|
|
|
lstrcpy(szIniFile, szSchemaConfigDirectory);
|
|
|
|
lstrcat(szIniFile, "\\schema.ini");
|
|
|
|
dwFileAttrs = GetFileAttributes(szIniFile);
|
|
|
|
if (dwFileAttrs == -1 ||
|
|
((dwFileAttrs & FILE_ATTRIBUTE_DIRECTORY) != 0)) {
|
|
|
|
*pdwErr = CAT_E_FILE_NOT_FOUND;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
*pdwErr = CAT_E_INVALID_ARG;
|
|
|
|
}
|
|
|
|
//
|
|
// Get all the required values. Required values must be in the ini file.
|
|
//
|
|
|
|
cItems = sizeof(rgRequired) / sizeof(rgRequired[1]);
|
|
|
|
for (i = 0; i < cItems && *pdwErr == ERROR_SUCCESS; i++) {
|
|
|
|
dwErr = GetValueFromIniFile(
|
|
szIniFile,
|
|
rgRequired[i].szValueName,
|
|
rgRequired[i].pszValue,
|
|
NULL);
|
|
|
|
if (dwErr == ERROR_FILE_NOT_FOUND)
|
|
*pdwErr = CAT_E_INVALID_SCHEMA;
|
|
else if (dwErr != ERROR_SUCCESS)
|
|
*pdwErr = dwErr;
|
|
|
|
}
|
|
|
|
//
|
|
// Get the optional values. If optional values are not specified in the
|
|
// ini file (ERROR_FILE_NOT_FOUND returned from GetValueFromIniFile), we
|
|
// use the default value.
|
|
//
|
|
|
|
cItems = sizeof(rgOptional) / sizeof(rgOptional[1]);
|
|
|
|
for (i = 0; i < cItems && *pdwErr == ERROR_SUCCESS; i++) {
|
|
|
|
dwErr = GetValueFromIniFile(
|
|
szIniFile,
|
|
rgOptional[i].szValueName,
|
|
rgOptional[i].pszValue,
|
|
"notUsed");
|
|
|
|
if (dwErr != ERROR_SUCCESS)
|
|
*pdwErr = dwErr;
|
|
|
|
}
|
|
|
|
//
|
|
// If we were able to read all the attribute values so far, we need to
|
|
// populate the arrays of attribute names.
|
|
//
|
|
|
|
if (*pdwErr == ERROR_SUCCESS) {
|
|
|
|
m_rgszUserAttrNames[USER_ALL_EMAIL_INDEX] = m_UserEmailAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_X400_INDEX] = m_UserX400AttrName;
|
|
m_rgszUserAttrNames[USER_ALL_HOMESERVER_INDEX] = m_UserHomeServerAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_FWD_AND_DELIVER_INDEX] = m_UserFwdAndDeliverName;
|
|
m_rgszUserAttrNames[USER_ALL_ALTERNATE_INDEX] = m_UserAlternateName;
|
|
m_rgszUserAttrNames[USER_ALL_PROXY_INDEX] = m_UserProxyName;
|
|
m_rgszUserAttrNames[USER_ALL_LEGACYEXDN_INDEX] = m_UserLegacyEXDNName;
|
|
|
|
m_rgszUserAttrNames[USER_ALL_MAILBOX_INDEX] = m_UserMailboxAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_QUOTA_INDEX] = m_UserQuotaAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_FORWARD_INDEX] = m_UserForwardAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_LOCAL_INDEX] = m_UserLocalAttrName;
|
|
m_rgszUserAttrNames[USER_ALL_AUTOREPLY_INDEX] = m_UserAutoReply;
|
|
m_rgszUserAttrNames[USER_ALL_AUTOREPLYSUBJECT_INDEX] = m_UserAutoReplySubject;
|
|
m_rgszUserAttrNames[USER_ALL_LAST_INDEX] = NULL;
|
|
|
|
m_rgszDLAttrNames[DL_ALL_X500_MEMBERS_INDEX] = m_X500DLMembersAttrName;
|
|
m_rgszDLAttrNames[DL_ALL_RFC822_MEMBERS_INDEX] = m_RFC822DLMembersAttrName;
|
|
m_rgszDLAttrNames[DL_ALL_DYNAMIC_MEMBERS_INDEX] = m_DynamicDLMembersAttrName;
|
|
m_rgszDLAttrNames[DL_ALL_LAST_INDEX] = NULL;
|
|
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_OBJECTCLASS_INDEX] = "objectClass";
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_EMAIL_INDEX] = m_UserEmailAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_X400_INDEX] = m_UserX400AttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_HOMESERVER_INDEX] = m_UserHomeServerAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_FWD_AND_DELIVER_INDEX] = m_UserFwdAndDeliverName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_ALTERNATE_INDEX] = m_UserAlternateName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_PROXY_INDEX] = m_UserProxyName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_LEGACYEXDN_INDEX] = m_UserLegacyEXDNName;
|
|
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_MAILBOX_INDEX] = m_UserMailboxAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_QUOTA_INDEX] = m_UserQuotaAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_FORWARD_INDEX] = m_UserForwardAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_LOCAL_INDEX] = m_UserLocalAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_AUTOREPLY_INDEX] = m_UserAutoReply;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_AUTOREPLYSUBJECT_INDEX] = m_UserAutoReplySubject;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_X500_MEMBERS_INDEX] = m_X500DLMembersAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_RFC822_MEMBERS_INDEX] = m_RFC822DLMembersAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_DYNAMIC_MEMBERS_INDEX] = m_DynamicDLMembersAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_DN_INDEX] = m_DNAttrName;
|
|
m_rgszUserDLAttrNames[USER_DL_ALL_LAST_INDEX] = NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//+----------------------------------------------------------------------------
|
|
//
|
|
// Function: CGenericSchema::~CGenericSchema
|
|
//
|
|
// Synopsis: Destructor
|
|
//
|
|
// Arguments: None
|
|
//
|
|
// Returns: Nothing
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
|
|
CGenericSchema::~CGenericSchema()
|
|
{
|
|
//
|
|
// Delete all strings that were allocated in the constructor
|
|
//
|
|
|
|
if (m_DNAttrName != NULL) delete m_DNAttrName;
|
|
|
|
if (m_IMSConfigClassName != NULL) delete m_IMSConfigClassName;
|
|
if (m_ChangeGuidAttrName != NULL) delete m_ChangeGuidAttrName;
|
|
if (m_DomainListAttrName != NULL) delete m_DomainListAttrName;
|
|
if (m_ServerListAttrName != NULL) delete m_ServerListAttrName;
|
|
if (m_ConfigObjectName != NULL) delete m_ConfigObjectName;
|
|
if (m_ConfigObjectRDN != NULL) delete m_ConfigObjectRDN;
|
|
|
|
if (m_UserClassName != NULL) delete m_UserClassName;
|
|
if (m_UserEmailAttrName != NULL) delete m_UserEmailAttrName;
|
|
if (m_UserX400AttrName != NULL) delete m_UserEmailAttrName;
|
|
if (m_UserHomeServerAttrName != NULL) delete m_UserEmailAttrName;
|
|
if (m_UserFwdAndDeliverName != NULL) delete m_UserFwdAndDeliverName;
|
|
if (m_UserAlternateName != NULL) delete m_UserAlternateName;
|
|
if (m_UserProxyName != NULL) delete m_UserProxyName;
|
|
if (m_UserLegacyEXDNName != NULL) delete m_UserLegacyEXDNName;
|
|
|
|
if (m_UserMailboxAttrName != NULL) delete m_UserMailboxAttrName;
|
|
if (m_UserQuotaAttrName != NULL) delete m_UserQuotaAttrName;
|
|
if (m_UserForwardAttrName != NULL) delete m_UserForwardAttrName;
|
|
if (m_UserLocalAttrName != NULL) delete m_UserLocalAttrName;
|
|
|
|
if (m_X500DLClassName != NULL) delete m_X500DLClassName;
|
|
if (m_X500DLMembersAttrName != NULL) delete m_X500DLMembersAttrName;
|
|
|
|
if (m_RFC822DLClassName != NULL) delete m_RFC822DLClassName;
|
|
if (m_RFC822DLMembersAttrName != NULL) delete m_RFC822DLMembersAttrName;
|
|
|
|
if (m_DynamicDLClassName != NULL) delete m_DynamicDLClassName;
|
|
if (m_DynamicDLMembersAttrName != NULL) delete m_DynamicDLMembersAttrName;
|
|
|
|
}
|
|
|
|
//+----------------------------------------------------------------------------
|
|
//
|
|
// Function: CGenericSchema::GetValueFromIniFile
|
|
//
|
|
// Synopsis: Get a value from the schema.ini file
|
|
//
|
|
// Arguments: [szIniFile] -- Name of ini file
|
|
// [szValueName] -- Name of value to read
|
|
// [pszValue] -- On successful return, contains pointer to
|
|
// buffer holding the value specified in the ini file.
|
|
// [szDefault] -- If non-null, this value is returned for
|
|
// pszValue if szValueName is not in the ini file. If this is
|
|
// null and szValueName is not specified,
|
|
// ERROR_FILE_NOT_FOUND is returned.
|
|
//
|
|
// Returns: [ERROR_SUCCESS] -- On successful retrieval of value
|
|
// [ERROR_OUTOFMEMORY] -- Unable to allocate room for
|
|
// pszValue.
|
|
// [ERROR_FILE_NOT_FOUND] -- szDefault is NULL, and szValueName
|
|
// not specified in ini file.
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
|
|
DWORD CGenericSchema::GetValueFromIniFile(
|
|
LPCSTR szIniFile,
|
|
LPCSTR szValueName,
|
|
LPSTR *pszValue,
|
|
LPCSTR szDefault)
|
|
{
|
|
DWORD dwErr;
|
|
DWORD cbBuffer = 32;
|
|
DWORD cbValue;
|
|
LPCSTR _szDefault = szDefault == NULL ? "" : szDefault;
|
|
|
|
do {
|
|
|
|
*pszValue = new CHAR [cbBuffer];
|
|
|
|
if (*pszValue != NULL) {
|
|
|
|
cbValue = GetPrivateProfileString(
|
|
"LDAPSchema", // "App" name
|
|
(LPSTR) szValueName, // Keyname
|
|
(LPSTR) _szDefault, // Default value
|
|
*pszValue,
|
|
cbBuffer,
|
|
(LPSTR) szIniFile);
|
|
|
|
if (cbValue == (cbBuffer - 1)) {
|
|
|
|
//
|
|
// If the value didn't fit in the buffer,
|
|
// GetPrivateProfileString returns cbBuffer - 1. We need to
|
|
// increase buffer size and try again.
|
|
//
|
|
|
|
cbBuffer *= 2;
|
|
|
|
delete *pszValue;
|
|
|
|
dwErr = ERROR_MORE_DATA;
|
|
|
|
} else if (cbValue == 0) {
|
|
|
|
//
|
|
// Caller did not specify default value, and our default value
|
|
// was used.
|
|
//
|
|
|
|
dwErr = ERROR_FILE_NOT_FOUND;
|
|
|
|
} else {
|
|
|
|
dwErr = ERROR_SUCCESS;
|
|
}
|
|
|
|
} else {
|
|
|
|
dwErr = ERROR_OUTOFMEMORY;
|
|
|
|
}
|
|
|
|
} while ( dwErr == ERROR_MORE_DATA );
|
|
|
|
return( dwErr );
|
|
}
|