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
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
|
|
|