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