Leaked source code of windows server 2003
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.
 
 
 
 
 
 

891 lines
30 KiB

/**********************************************************************************
*
*
* UI_DPROP.C - contains functions for the Directory Service Property dialog
*
*
*
**********************************************************************************/
#include "_apipch.h"
#ifdef OLD_LDAP_UI
extern HINSTANCE ghCommCtrlDLLInst;
extern LPPROPERTYSHEET gpfnPropertySheet;
// Params passed to dialog box
typedef struct _tagLSP
{
LPTSTR lpszName;
LDAPSERVERPARAMS ldapsp;
int nRetVal;
BOOL bAddNew;
} LSP, * LPLSP;
// Return codes from Dialog Box
enum _DSPROPS
{
DSPROP_ERROR=0,
DSPROP_OK,
DSPROP_CANCEL
};
/*
* Prototypes
*/
int CreateDSPropertySheet( HWND hwndOwner, LPLSP lpLsp);
BOOL APIENTRY_16 fnDSPropsProc(HWND hDlg,UINT message,UINT wParam,LPARAM lParam);
BOOL APIENTRY_16 fnDSAdvancedPropsProc(HWND hDlg,UINT message,UINT wParam,LPARAM lParam);
BOOL FillDSPropsUI( HWND hDlg,
int nPropSheet,
LPLSP lpLsp);
BOOL GetDSPropsFromUI( HWND hDlg,
int nPropSheet,
LPLSP lpLsp);
BOOL SetDSPropsUI(HWND hDlg,
int nPropSheet);
// List of property sheets in this UI
enum _DSProps
{
propDSProp=0,
propDSPropAdvanced,
propDSMax
};
#define EDIT_LEN MAX_UI_STR-16
/*
* Help IDs
*/
static DWORD rgDsPropsHelpIDs[] =
{
IDC_LDAP_PROPS_FRAME, IDH_WAB_COMM_GROUPBOX,
IDC_LDAP_PROPS_FRAME2, IDH_WAB_COMM_GROUPBOX,
//IDC_LDAP_PROPS_STATIC_CAPTION,
IDC_LDAP_PROPS_STATIC_NAME_FRIENDLY,IDH_WABLDAP_DIRSSERV_FRIENDLY_NAME,
IDC_LDAP_PROPS_EDIT_NAME_FRIENDLY, IDH_WABLDAP_DIRSSERV_FRIENDLY_NAME,
IDC_LDAP_PROPS_RADIO_SICILY, IDH_WABLDAP_DIRSSERV_AUTH_SICILY,
IDC_LDAP_PROPS_CHECK_NAMES, IDH_WABLDAP_DIRSSERV_CHECK_AGAINST,
IDC_LDAP_PROPS_STATIC_NAME, IDH_WABLDAP_DIRSSERV_NAME,
IDC_LDAP_PROPS_EDIT_NAME, IDH_WABLDAP_DIRSSERV_NAME,
IDC_LDAP_PROPS_RADIO_ANON, IDH_WABLDAP_DIRSSERV_AUTH_ANON,
IDC_LDAP_PROPS_RADIO_USERPASS, IDH_WABLDAP_DIRSSERV_AUTH_PASS,
IDC_LDAP_PROPS_STATIC_USERNAME, IDH_WABLDAP_DIRSSERV_AUTH_PASS_UNAME,
IDC_LDAP_PROPS_EDIT_USERNAME, IDH_WABLDAP_DIRSSERV_AUTH_PASS_UNAME,
IDC_LDAP_PROPS_STATIC_PASSWORD, IDH_WABLDAP_DIRSSERV_AUTH_PASS_PASS,
IDC_LDAP_PROPS_EDIT_PASSWORD, IDH_WABLDAP_DIRSSERV_AUTH_PASS_PASS,
IDC_LDAP_PROPS_STATIC_PASSWORD2, IDH_WABLDAP_DIRSSERV_AUTH_PASS_PASS_CONF,
IDC_LDAP_PROPS_EDIT_CONFIRMPASSWORD,IDH_WABLDAP_DIRSSERV_AUTH_PASS_PASS_CONF,
IDC_LDAP_PROPS_FRAME_ROOT, IDH_LDAP_SEARCH_BASE,
IDC_LDAP_PROPS_EDIT_ROOT, IDH_LDAP_SEARCH_BASE,
IDC_LDAP_PROPS_STATIC_SEARCH, IDH_WABLDAP_SEARCH_TIMEOUT,
IDC_LDAP_PROPS_EDIT_SEARCH, IDH_WABLDAP_SEARCH_TIMEOUT,
IDC_LDAP_PROPS_STATIC_NUMRESULTS, IDH_WABLDAP_SEARCH_LIMIT,
IDC_LDAP_PROPS_EDIT_NUMRESULTS, IDH_WABLDAP_SEARCH_LIMIT,
0,0
};
#endif // OLD_LDAP_UI
///////////////////////////////////////////////////////////////////
//
// HrShowDSProps - shows Directory Service properties UI
//
// hWndParent - hWnd of Parent
// lpszName - pointer to a buffer ... also contains name of LDAP
// server to view prperties on - this name can be modified so
// lpszName should point to a big enough buffer
// bAddNew - TRUE if this is a new entry, false if this is props
///////////////////////////////////////////////////////////////////
HRESULT HrShowDSProps(HWND hWndParent,
LPTSTR lpszName,
BOOL bAddNew)
{
HRESULT hr = hrSuccess;
IImnAccountManager * lpAccountManager = NULL;
IImnAccount * lpAccount = NULL;
// init account manager
// Make sure there is an account manager
if (hr = InitAccountManager(&lpAccountManager)) {
ShowMessageBox(hWndParent, idsLDAPUnconfigured, MB_ICONEXCLAMATION | MB_OK);
goto out;
}
// find this account
if (hr = lpAccountManager->lpVtbl->FindAccount(lpAccountManager,
AP_ACCOUNT_NAME,
lpszName,
&lpAccount)) {
DebugTrace("FindAccount(%s) -> %x\n", lpszName, GetScode(hr));
goto out;
}
// show properties
if (hr = lpAccount->lpVtbl->ShowProperties(lpAccount,
hWndParent,
0)) {
DebugTrace("ShowProperties(%s) -> %x\n", lpszName, GetScode(hr));
goto out;
}
{
TCHAR szBuf[MAX_UI_STR];
// Get the friendly name (== account name if this changed)
if (! (HR_FAILED(hr = lpAccount->lpVtbl->GetPropSz(lpAccount,
AP_ACCOUNT_NAME,
szBuf,
sizeof(szBuf)))))
{
lstrcpy(lpszName, szBuf);
}
}
#ifdef OLD_LDAP_UI
SCODE sc = SUCCESS_SUCCESS;
TCHAR szOldName[MAX_UI_STR];
ULONG i = 0, j = 0;
LSP lsp = {0};
DebugPrintTrace(("----------\nHrShowDSProps Entry\n"));
// if no common control, exit
if (NULL == ghCommCtrlDLLInst) {
hr = ResultFromScode(MAPI_E_UNCONFIGURED);
goto out;
}
lsp.lpszName = lpszName;
lsp.nRetVal = DSPROP_ERROR;
lsp.bAddNew = bAddNew;
// Store the old name in case it changes later on ...
szOldName[0]='\0';
if (! bAddNew) {
lstrcpy(szOldName, lpszName);
}
// Get the details of this DS from the registry
if (lpszName && *lpszName) {
if (hr = GetLDAPServerParams(lpszName, &(lsp.ldapsp))) {
DebugTrace("No Account Manager\n");
ShowMessageBox(hWndParent, idsLDAPUnconfigured, MB_ICONEXCLAMATION | MB_OK);
goto out;
}
} else {
// Fill in the default values for the props here:
lsp.ldapsp.dwSearchSizeLimit = LDAP_SEARCH_SIZE_LIMIT;
lsp.ldapsp.dwSearchTimeLimit = LDAP_SEARCH_TIME_LIMIT;
lsp.ldapsp.dwAuthMethod = LDAP_AUTH_METHOD_ANONYMOUS;
lsp.ldapsp.lpszUserName = NULL;
lsp.ldapsp.lpszPassword = NULL;
lsp.ldapsp.lpszURL = NULL;
lsp.ldapsp.fResolve = FALSE;
lsp.ldapsp.lpszBase = NULL;
lsp.ldapsp.lpszName = NULL;
}
retry:
// PropSheets
if (CreateDSPropertySheet(hWndParent,&lsp) == -1)
{
// Something failed ...
hr = E_FAIL;
goto out;
}
switch(lsp.nRetVal)
{
case DSPROP_OK:
if(lstrlen(lsp.lpszName))
{
// If this was an old entry that changed, remove the old entry from the
// registry and rewrite this again ...
// if(!bAddNew &&
// (lstrcmpi(szOldName, lsp.lpszName)))
// SetLDAPServerParams(szOldName, NULL);
//
// On second thoughts, we will let the calling function handle the old new thing
// because the calling function should be able to recover from a User Cancel ...
if (GetScode(SetLDAPServerParams(lpszName, &(lsp.ldapsp))) == MAPI_E_COLLISION) {
// Name collision with existing account.
DebugTrace("Collision in LDAP server names\n");
ShowMessageBoxParam(hWndParent, IDE_SERVER_NAME_COLLISION, MB_ICONERROR, lsp.lpszName);
goto retry;
}
}
hr = S_OK;
break;
case DSPROP_CANCEL:
hr = MAPI_E_USER_CANCEL;
break;
case DSPROP_ERROR:
hr = E_FAIL;
break;
}
out:
FreeLDAPServerParams(lsp.ldapsp);
#endif // OLD_LDAP_UI
out:
if (lpAccount) {
lpAccount->lpVtbl->Release(lpAccount);
}
// Don't release the account manager. It will be done when the IAdrBook is released.
// if (lpAccountManager) {
// lpAccountManager->lpVtbl->Release(lpAccountManager);
// }
return hr;
}
#ifdef OLD_LDAP_UI
/****************************************************************************
* FUNCTION: CreateDSPropertySheet(HWND)
*
* PURPOSE: Creates the DL property sheet
*
****************************************************************************/
int CreateDSPropertySheet( HWND hwndOwner,
LPLSP lpLsp)
{
PROPSHEETPAGE psp[propDSMax];
PROPSHEETHEADER psh;
TCHAR szBuf[propDSMax][MAX_UI_STR];
TCHAR szBuf2[MAX_UI_STR];
psp[propDSProp].dwSize = sizeof(PROPSHEETPAGE);
psp[propDSProp].dwFlags = PSP_USETITLE;
psp[propDSProp].hInstance = hinstMapiX;
psp[propDSProp].pszTemplate = MAKEINTRESOURCE(IDD_DIALOG_LDAP_PROPERTIES);
psp[propDSProp].pszIcon = NULL;
psp[propDSProp].pfnDlgProc = (DLGPROC) fnDSPropsProc;
LoadString(hinstMapiX, idsCertGeneralTitle, szBuf[propDSProp], sizeof(szBuf[propDSProp]));
psp[propDSProp].pszTitle = szBuf[propDSProp];
psp[propDSProp].lParam = (LPARAM) lpLsp;
psp[propDSPropAdvanced].dwSize = sizeof(PROPSHEETPAGE);
psp[propDSPropAdvanced].dwFlags = PSP_USETITLE;
psp[propDSPropAdvanced].hInstance = hinstMapiX;
psp[propDSPropAdvanced].pszTemplate = MAKEINTRESOURCE(IDD_DIALOG_LDAP_PROPERTIES_ADVANCED);
psp[propDSPropAdvanced].pszIcon = NULL;
psp[propDSPropAdvanced].pfnDlgProc = (DLGPROC) fnDSAdvancedPropsProc;
LoadString(hinstMapiX, idsCertAdvancedTitle, szBuf[propDSPropAdvanced], sizeof(szBuf[propDSPropAdvanced]));
psp[propDSPropAdvanced].pszTitle = szBuf[propDSPropAdvanced];
psp[propDSPropAdvanced].lParam = (LPARAM) lpLsp;
psh.dwSize = sizeof(PROPSHEETHEADER);
psh.dwFlags = PSH_PROPSHEETPAGE | PSH_NOAPPLYNOW;
psh.hwndParent = hwndOwner;
psh.hInstance = hinstMapiX;
psh.pszIcon = NULL;
LoadString(hinstMapiX, IDS_DETAILS_CAPTION, szBuf2, sizeof(szBuf2));
psh.pszCaption = szBuf2;
psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE);
psh.nStartPage = propDSProp;
psh.ppsp = (LPCPROPSHEETPAGE) &psp;
return (gpfnPropertySheet(&psh));
}
/****************************************************************************
* FUNCTION: SetDSPropsUI(HWND)
*
* PURPOSE: Sets up the UI for this PropSheet
*
* hDlg - Dialog
* nPropSheet - property sheet
*
****************************************************************************/
BOOL SetDSPropsUI(HWND hDlg, int nPropSheet)
{
ULONG i =0;
// Set the font of all the children to the default GUI font
EnumChildWindows( hDlg,
SetChildDefaultGUIFont,
(LPARAM) 0);
switch(nPropSheet)
{
case propDSProp:
SendMessage(GetDlgItem(hDlg,IDC_LDAP_PROPS_EDIT_NAME),EM_SETLIMITTEXT,(WPARAM) EDIT_LEN,0);
SendMessage(GetDlgItem(hDlg,IDC_LDAP_PROPS_EDIT_NAME_FRIENDLY),EM_SETLIMITTEXT,(WPARAM) EDIT_LEN,0);
SendMessage(GetDlgItem(hDlg,IDC_LDAP_PROPS_EDIT_USERNAME),EM_SETLIMITTEXT,(WPARAM) EDIT_LEN,0);
SendMessage(GetDlgItem(hDlg,IDC_LDAP_PROPS_EDIT_PASSWORD),EM_SETLIMITTEXT,(WPARAM) EDIT_LEN,0);
SendMessage(GetDlgItem(hDlg,IDC_LDAP_PROPS_EDIT_CONFIRMPASSWORD),EM_SETLIMITTEXT,(WPARAM) EDIT_LEN,0);
break;
case propDSPropAdvanced:
SendMessage(GetDlgItem(hDlg,IDC_LDAP_PROPS_EDIT_SEARCH),EM_SETLIMITTEXT,(WPARAM) EDIT_LEN,0);
SendMessage(GetDlgItem(hDlg,IDC_LDAP_PROPS_EDIT_NUMRESULTS),EM_SETLIMITTEXT,(WPARAM) EDIT_LEN,0);
SendMessage(GetDlgItem(hDlg,IDC_LDAP_PROPS_EDIT_ROOT),EM_SETLIMITTEXT,(WPARAM) EDIT_LEN,0);
break;
}
return TRUE;
}
/****************************************************************************
* FUNCTION: FillDSPropsUI(HWND)
*
* PURPOSE: Fills in the dialog items on the property sheet
*
****************************************************************************/
BOOL FillDSPropsUI(HWND hDlg, int nPropSheet, LPLSP lpLsp)
{
ULONG i = 0,j = 0;
BOOL bRet = FALSE;
int id;
switch(nPropSheet)
{
case propDSProp:
{
// Set the authentication method UI
switch(lpLsp->ldapsp.dwAuthMethod)
{
case LDAP_AUTH_METHOD_ANONYMOUS:
id = IDC_LDAP_PROPS_RADIO_ANON;
break;
case LDAP_AUTH_METHOD_SIMPLE:
id = IDC_LDAP_PROPS_RADIO_USERPASS;
break;
case LDAP_AUTH_METHOD_SICILY:
id = IDC_LDAP_PROPS_RADIO_SICILY;
break;
}
if( (id == IDC_LDAP_PROPS_RADIO_ANON) ||
(id == IDC_LDAP_PROPS_RADIO_SICILY) )
{
EnableWindow(GetDlgItem(hDlg,IDC_LDAP_PROPS_EDIT_USERNAME),FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_LDAP_PROPS_EDIT_PASSWORD),FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_LDAP_PROPS_EDIT_CONFIRMPASSWORD),FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_LDAP_PROPS_STATIC_USERNAME),FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_LDAP_PROPS_STATIC_PASSWORD),FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_LDAP_PROPS_STATIC_PASSWORD2),FALSE);
}
//
// Club the radio buttons togethor ...
CheckRadioButton( hDlg,
IDC_LDAP_PROPS_RADIO_ANON,
IDC_LDAP_PROPS_RADIO_USERPASS,
id);
// Fill in other details
if(lstrlen(lpLsp->lpszName))
{
SetDlgItemText(hDlg, IDC_LDAP_PROPS_EDIT_NAME_FRIENDLY, lpLsp->lpszName);
SetWindowPropertiesTitle(GetParent(hDlg), lpLsp->lpszName);
}
if(lpLsp->ldapsp.lpszName)
SetDlgItemText(hDlg, IDC_LDAP_PROPS_EDIT_NAME, lpLsp->ldapsp.lpszName);
if(lpLsp->ldapsp.lpszUserName)
SetDlgItemText(hDlg, IDC_LDAP_PROPS_EDIT_USERNAME, lpLsp->ldapsp.lpszUserName);
if(lpLsp->ldapsp.lpszPassword)
{
SetDlgItemText(hDlg, IDC_LDAP_PROPS_EDIT_PASSWORD, lpLsp->ldapsp.lpszPassword);
SetDlgItemText(hDlg, IDC_LDAP_PROPS_EDIT_CONFIRMPASSWORD, lpLsp->ldapsp.lpszPassword);
}
id = (lpLsp->ldapsp.fResolve) ? BST_CHECKED : BST_UNCHECKED;
CheckDlgButton(hDlg, IDC_LDAP_PROPS_CHECK_NAMES, id);
}
break;
case propDSPropAdvanced:
{
SetDlgItemInt( hDlg,
IDC_LDAP_PROPS_EDIT_SEARCH,
lpLsp->ldapsp.dwSearchTimeLimit,
FALSE);
SetDlgItemInt( hDlg,
IDC_LDAP_PROPS_EDIT_NUMRESULTS,
lpLsp->ldapsp.dwSearchSizeLimit,
FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_LDAP_PROPS_EDIT_ROOT),TRUE);
if(lpLsp->ldapsp.lpszBase)
{
SetDlgItemText(hDlg, IDC_LDAP_PROPS_EDIT_ROOT, lpLsp->ldapsp.lpszBase);
}
else
{
LPTSTR lpszBase = TEXT("c=%s"); //Hopefully this string doesnt need localization
TCHAR szBuf[32], szCode[4];
ReadRegistryLDAPDefaultCountry(NULL, szCode);
wsprintf(szBuf, lpszBase, szCode);
SetDlgItemText(hDlg, IDC_LDAP_PROPS_EDIT_ROOT, szBuf);
}
}
break;
}
bRet = TRUE;
return bRet;
}
////////////////////////////////////////////////////////////////////////////////
//
// GetDSPropsFromUI - reads the UI for its parameters and verifies that
// all required fields are set. Params are stored back in the lpLsp struct
//
////////////////////////////////////////////////////////////////////////////////
BOOL GetDSPropsFromUI(HWND hDlg, int nPropSheet, LPLSP lpLsp)
{
BOOL bRet = FALSE;
LDAPSERVERPARAMS Params={0};
TCHAR szBuf[2 * EDIT_LEN];
switch(nPropSheet)
{
case propDSProp:
{
//
// First check the required property (which is the Name and Friendly Name)
//
BOOL bName = FALSE, bFName = FALSE;
DWORD dwID = 0;
BOOL bExists = FALSE;
szBuf[0]='\0'; //reset
GetDlgItemText(hDlg, IDC_LDAP_PROPS_EDIT_NAME_FRIENDLY, szBuf, sizeof(szBuf));
TrimSpaces(szBuf);
if(lstrlen(szBuf))
bFName = TRUE;
// We want the friendly names to be unique .. hence check if this friendly name
// already exists or not ...
bExists = GetLDAPServerParams(szBuf, &Params);
if((bExists && lpLsp->bAddNew) ||
(bExists && !lpLsp->bAddNew && (Params.dwID != lpLsp->ldapsp.dwID)))
{
// We are adding a new entry, but we found that another entry exists with the
// same name or we are editing an existing entry and then found that another
// entry exists whose ID does not match this entries ID.
// Warn them that they must add a unique friendly name
ShowMessageBoxParam(hDlg, idsEnterUniqueLDAPName, MB_ICONEXCLAMATION | MB_OK, szBuf);
goto out;
}
szBuf[0]='\0'; //
GetDlgItemText(hDlg, IDC_LDAP_PROPS_EDIT_NAME, szBuf, sizeof(szBuf));
TrimSpaces(szBuf);
if(lstrlen(szBuf))
bName = TRUE;
if(!bName || !bFName)
{
ShowMessageBox(hDlg, idsEnterLDAPServerName, MB_ICONEXCLAMATION | MB_OK);
goto out;
}
GetDlgItemText(hDlg, IDC_LDAP_PROPS_EDIT_NAME, szBuf, sizeof(szBuf));
TrimSpaces(szBuf);
LocalFreeAndNull(&lpLsp->ldapsp.lpszName);
lpLsp->ldapsp.lpszName = LocalAlloc(LMEM_ZEROINIT, lstrlen(szBuf)+1);
if(lpLsp->ldapsp.lpszName)
lstrcpy(lpLsp->ldapsp.lpszName, szBuf);
GetDlgItemText(hDlg, IDC_LDAP_PROPS_EDIT_NAME_FRIENDLY, szBuf, sizeof(szBuf));
TrimSpaces(szBuf);
lstrcpy(lpLsp->lpszName, szBuf);
//
// check the selected authentication type
//
if(IsDlgButtonChecked(hDlg, IDC_LDAP_PROPS_RADIO_ANON) == 1)
lpLsp->ldapsp.dwAuthMethod = LDAP_AUTH_METHOD_ANONYMOUS;
else if(IsDlgButtonChecked(hDlg, IDC_LDAP_PROPS_RADIO_USERPASS) == 1)
lpLsp->ldapsp.dwAuthMethod = LDAP_AUTH_METHOD_SIMPLE;
else if(IsDlgButtonChecked(hDlg, IDC_LDAP_PROPS_RADIO_SICILY) == 1)
lpLsp->ldapsp.dwAuthMethod = LDAP_AUTH_METHOD_SICILY;
LocalFreeAndNull(&lpLsp->ldapsp.lpszUserName);
LocalFreeAndNull(&lpLsp->ldapsp.lpszPassword);
//
// Get the user name password, if applicable
//
if(lpLsp->ldapsp.dwAuthMethod == LDAP_AUTH_METHOD_SIMPLE)
{
TCHAR szBuf2[MAX_UI_STR*2];
//
// Verify that the entered password matches the confirmed password
//
szBuf[0]='\0'; //reset
GetDlgItemText(hDlg, IDC_LDAP_PROPS_EDIT_PASSWORD, szBuf, sizeof(szBuf));
szBuf2[0]='\0'; //reset
GetDlgItemText(hDlg, IDC_LDAP_PROPS_EDIT_CONFIRMPASSWORD, szBuf2, sizeof(szBuf2));
TrimSpaces(szBuf);
TrimSpaces(szBuf2);
if(lstrcmp(szBuf,szBuf2))
{
ShowMessageBox(hDlg, idsConfirmPassword, MB_ICONEXCLAMATION | MB_OK);
SetDlgItemText(hDlg, IDC_LDAP_PROPS_EDIT_PASSWORD, szEmpty);
SetDlgItemText(hDlg, IDC_LDAP_PROPS_EDIT_CONFIRMPASSWORD, szEmpty);
goto out;
}
// otherwise keep this password ...
lpLsp->ldapsp.lpszPassword = LocalAlloc(LMEM_ZEROINIT, lstrlen(szBuf)+1);
if(!(lpLsp->ldapsp.lpszPassword))
{
DebugPrintError(("LocalAlloc failed to allocate memory\n"));
goto out;
}
lstrcpy(lpLsp->ldapsp.lpszPassword,szBuf);
szBuf[0]='\0'; //reset
GetDlgItemText(hDlg, IDC_LDAP_PROPS_EDIT_USERNAME, szBuf, sizeof(szBuf));
TrimSpaces(szBuf);
if(lstrlen(szBuf))
{
lpLsp->ldapsp.lpszUserName = LocalAlloc(LMEM_ZEROINIT, lstrlen(szBuf)+1);
if(!(lpLsp->ldapsp.lpszUserName))
{
DebugPrintError(("LocalAlloc failed to allocate memory\n"));
goto out;
}
lstrcpy(lpLsp->ldapsp.lpszUserName,szBuf);
}
}
if(IsDlgButtonChecked(hDlg, IDC_LDAP_PROPS_CHECK_NAMES) == BST_CHECKED)
lpLsp->ldapsp.fResolve = TRUE;
else
lpLsp->ldapsp.fResolve = FALSE;
if(lpLsp->bAddNew)
lpLsp->ldapsp.dwID = GetLDAPNextServerID(0);
}
break;
case propDSPropAdvanced:
{
lpLsp->ldapsp.dwSearchTimeLimit = GetDlgItemInt(
hDlg,
IDC_LDAP_PROPS_EDIT_SEARCH,
NULL,
FALSE);
lpLsp->ldapsp.dwSearchSizeLimit = GetDlgItemInt(
hDlg,
IDC_LDAP_PROPS_EDIT_NUMRESULTS,
NULL,
FALSE);
GetDlgItemText(hDlg, IDC_LDAP_PROPS_EDIT_ROOT, szBuf, sizeof(szBuf));
TrimSpaces(szBuf);
if(lstrlen(szBuf))
{
LocalFreeAndNull(&lpLsp->ldapsp.lpszBase);
lpLsp->ldapsp.lpszBase = LocalAlloc(LMEM_ZEROINIT, lstrlen(szBuf)+1);
if(lpLsp->ldapsp.lpszBase)
lstrcpy(lpLsp->ldapsp.lpszBase, szBuf);
}
}
break;
}
bRet = TRUE;
out:
FreeLDAPServerParams(Params);
return bRet;
}
#define lpLSP ((LPLSP) pps->lParam)
/*//$$***********************************************************************
* FUNCTION: fnDSPropsProc
*
* PURPOSE: Window proc for property sheet ...
*
****************************************************************************/
BOOL APIENTRY_16 fnDSPropsProc(HWND hDlg,UINT message,UINT wParam,LPARAM lParam)
{
PROPSHEETPAGE * pps;
BOOL bRet = FALSE;
ULONG ulcPropCount = 0;
pps = (PROPSHEETPAGE *) GetWindowLong(hDlg, DWL_USER);
switch(message)
{
case WM_INITDIALOG:
SetWindowLong(hDlg,DWL_USER,lParam);
pps = (PROPSHEETPAGE *) lParam;
SetDSPropsUI(hDlg, propDSProp);
FillDSPropsUI(hDlg, propDSProp, lpLSP);
return TRUE;
case WM_HELP:
#ifndef WIN16
WinHelp( ((LPHELPINFO)lParam)->hItemHandle,
g_szWABHelpFileName,
HELP_WM_HELP,
(DWORD)(LPSTR) rgDsPropsHelpIDs );
#else
WinHelp( hDlg,
g_szWABHelpFileName,
HELP_CONTENTS,
0L );
#endif // !WIN16
break;
#ifndef WIN16
case WM_CONTEXTMENU:
WinHelp((HWND) wParam,
g_szWABHelpFileName,
HELP_CONTEXTMENU,
(DWORD)(LPVOID) rgDsPropsHelpIDs );
break;
#endif // !WIN16
case WM_COMMAND:
switch(GET_WM_COMMAND_CMD(wParam,lParam)) //check the notification code
{
case EN_CHANGE:
switch(LOWORD(wParam))
{
case IDC_LDAP_PROPS_EDIT_NAME_FRIENDLY:
{
// Update the dialog title with the friendly name
TCHAR szBuf[MAX_UI_STR];
GetWindowText((HWND) lParam,szBuf,sizeof(szBuf));
SetWindowPropertiesTitle(GetParent(hDlg), szBuf);
}
break;
}
break;
}
switch(GET_WM_COMMAND_ID(wParam,lParam))
{
case IDCANCEL:
// This is a windows bug that prevents ESC canceling prop sheets
// which have MultiLine Edit boxes KB: Q130765
SendMessage(GetParent(hDlg),message,wParam,lParam);
break;
case IDC_LDAP_PROPS_RADIO_ANON:
case IDC_LDAP_PROPS_RADIO_USERPASS:
case IDC_LDAP_PROPS_RADIO_SICILY:
CheckRadioButton( hDlg,
IDC_LDAP_PROPS_RADIO_ANON,
IDC_LDAP_PROPS_RADIO_USERPASS,
LOWORD(wParam));
{
int id = LOWORD(wParam);
if( (id == IDC_LDAP_PROPS_RADIO_ANON) ||
(id == IDC_LDAP_PROPS_RADIO_SICILY) )
{
EnableWindow(GetDlgItem(hDlg,IDC_LDAP_PROPS_EDIT_USERNAME),FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_LDAP_PROPS_EDIT_PASSWORD),FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_LDAP_PROPS_EDIT_CONFIRMPASSWORD),FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_LDAP_PROPS_STATIC_USERNAME),FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_LDAP_PROPS_STATIC_PASSWORD),FALSE);
EnableWindow(GetDlgItem(hDlg,IDC_LDAP_PROPS_STATIC_PASSWORD2),FALSE);
}
else if (id = IDC_LDAP_PROPS_RADIO_USERPASS)
{
EnableWindow(GetDlgItem(hDlg,IDC_LDAP_PROPS_EDIT_USERNAME),TRUE);
EnableWindow(GetDlgItem(hDlg,IDC_LDAP_PROPS_EDIT_PASSWORD),TRUE);
EnableWindow(GetDlgItem(hDlg,IDC_LDAP_PROPS_EDIT_CONFIRMPASSWORD),TRUE);
EnableWindow(GetDlgItem(hDlg,IDC_LDAP_PROPS_STATIC_USERNAME),TRUE);
EnableWindow(GetDlgItem(hDlg,IDC_LDAP_PROPS_STATIC_PASSWORD),TRUE);
EnableWindow(GetDlgItem(hDlg,IDC_LDAP_PROPS_STATIC_PASSWORD2),TRUE);
}
}
break;
}
break;
case WM_NOTIFY:
switch(((NMHDR FAR *)lParam)->code)
{
case PSN_SETACTIVE: //initialize
break;
case PSN_APPLY: //ok
if (!GetDSPropsFromUI(hDlg, propDSProp, lpLSP))
{
//something failed ... abort this OK ... ie dont let them close
SetWindowLong(hDlg,DWL_MSGRESULT, TRUE);
return TRUE;
}
lpLSP->nRetVal = DSPROP_OK;
break;
case PSN_KILLACTIVE: //Losing activation to another page
break;
case PSN_RESET: //cancel
lpLSP->nRetVal = DSPROP_CANCEL;
break;
}
return TRUE;
}
return bRet;
}
/*//$$***********************************************************************
* FUNCTION: fnDSAdvancedPropsProc
*
* PURPOSE: Window proc for advanced property sheet ...
*
****************************************************************************/
BOOL APIENTRY_16 fnDSAdvancedPropsProc(HWND hDlg,UINT message,UINT wParam,LPARAM lParam)
{
PROPSHEETPAGE * pps;
BOOL bRet = FALSE;
ULONG ulcPropCount = 0;
pps = (PROPSHEETPAGE *) GetWindowLong(hDlg, DWL_USER);
switch(message)
{
case WM_INITDIALOG:
SetWindowLong(hDlg,DWL_USER,lParam);
pps = (PROPSHEETPAGE *) lParam;
SetDSPropsUI(hDlg, propDSPropAdvanced);
FillDSPropsUI(hDlg, propDSPropAdvanced, lpLSP);
return TRUE;
case WM_HELP:
#ifndef WIN16
WinHelp( ((LPHELPINFO)lParam)->hItemHandle,
g_szWABHelpFileName,
HELP_WM_HELP,
(DWORD)(LPSTR) rgDsPropsHelpIDs );
#else
WinHelp( hDlg,
g_szWABHelpFileName,
HELP_CONTENTS,
0L );
#endif // !WIN16
break;
#ifndef WIN16
case WM_CONTEXTMENU:
WinHelp((HWND) wParam,
g_szWABHelpFileName,
HELP_CONTEXTMENU,
(DWORD)(LPVOID) rgDsPropsHelpIDs );
break;
#endif // !WIN16
case WM_COMMAND:
switch(GET_WM_COMMAND_ID(wParam,lParam))
{
case IDCANCEL:
// This is a windows bug that prevents ESC canceling prop sheets
// which have MultiLine Edit boxes KB: Q130765
SendMessage(GetParent(hDlg),message,wParam,lParam);
break;
}
break;
case WM_NOTIFY:
switch(((NMHDR FAR *)lParam)->code)
{
case PSN_SETACTIVE: //initialize
break;
case PSN_APPLY: //ok
if (!GetDSPropsFromUI(hDlg, propDSPropAdvanced, lpLSP))
{
//something failed ... abort this OK ... ie dont let them close
SetWindowLong(hDlg,DWL_MSGRESULT, TRUE);
return TRUE;
}
lpLSP->nRetVal = DSPROP_OK;
break;
case PSN_KILLACTIVE: //Losing activation to another page
break;
case PSN_RESET: //cancel
lpLSP->nRetVal = DSPROP_CANCEL;
break;
}
return TRUE;
}
return bRet;
}
#endif // OLD_LDAP_UI