2025-04-27 07:49:33 -04:00

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 );
}