void CPasswordPolicyDlg::OnUseHexdigits() { UnselectNamedPolicy(); UpdateData(TRUE); do_hex(IsDlgButtonChecked(IDC_USEHEXDIGITS) == BST_CHECKED); // Do not use UpdateData(FALSE) here or // all the good work in "do_hex" will be undone }
static VOID _VPrint(PCSTR pszMsg, va_list args, PCHAR pszBuffer, LONG cbBuffer) { INT nDigits = 0; PCHAR pszOut = pszBuffer; pszBuffer[0] = '\0'; __try { while (*pszMsg) { if (*pszMsg == '%') { pszMsg++; while (*pszMsg >= '0' && *pszMsg <= '9') { nDigits = nDigits * 10 + (*pszMsg++ - '0'); } BOOL fLarge = FALSE; if (*pszMsg == 'h') { fLarge = FALSE; pszMsg++; } else if (*pszMsg == 'l') { fLarge = TRUE; pszMsg++; } if (*pszMsg == 's') { pszMsg++; PCHAR pszBuf = pszOut; PVOID pvData = va_arg(args, PVOID); __try { *pszOut++ = '\"'; if (fLarge) { PWCHAR pwz = (PWCHAR)pvData; for (int n = 0; *pwz && n < 120; n++) { WCHAR w = *pwz++; *pszOut++ = (w >= ' ' && w < 127) ? (CHAR)w : '.'; } } else { PCHAR psz = (PCHAR)pvData; for (int n = 0; *psz && n < 120; n++) { CHAR c = *psz++; *pszOut++ = (c >= ' ' && c < 127) ? c : '.'; } } *pszOut++ = '\"'; } __except(EXCEPTION_EXECUTE_HANDLER) { pszOut = pszBuf; *pszOut++ = 'x'; pszOut = do_hex(pszOut, (DWORD)pvData); } } else if (*pszMsg == 'x') { pszMsg++; *pszOut++ = 'x'; pszOut = do_hex(pszOut, va_arg(args, DWORD)); } else if (*pszMsg == 'd') { pszMsg++; pszOut = do_dec(pszOut, va_arg(args, DWORD)); } else { *pszOut++ = *pszMsg++; } }
void CPasswordPolicyDlg::SetSpecificPolicyControls(const BOOL bEnable) { if (bEnable == FALSE) { // Disable all specific controls after saving info m_save[SAVE_LOWERCASE] = m_PWUseLowercase; m_save[SAVE_UPPERCASE] = m_PWUseUppercase; m_save[SAVE_DIGITS] = m_PWUseDigits; m_save[SAVE_SYMBOLS] = m_PWUseSymbols; m_save[SAVE_EASYVISION] = m_PWEasyVision; m_save[SAVE_PRONOUNCEABLE] = m_PWMakePronounceable; m_savelen[SAVE_LOWERCASE] = m_PWLowerMinLength; m_savelen[SAVE_UPPERCASE] = m_PWUpperMinLength; m_savelen[SAVE_DIGITS] = m_PWDigitMinLength; m_savelen[SAVE_SYMBOLS] = m_PWSymbolMinLength; for (int i = 0; i < N_HEX_LENGTHS * 2; i++) { GetDlgItem(LenTxts[i])->EnableWindow(FALSE); } for (int i = 0; i < N_HEX_LENGTHS; i++) { GetDlgItem(nonHexLengths[i])->EnableWindow(FALSE); } for (int i = 0; i < N_HEX_LENGTHS; i++) { GetDlgItem(nonHexLengthSpins[i])->EnableWindow(FALSE); } for (int i = 0; i < N_HEX_LENGTHS; i++) { GetDlgItem(nonHex[i])->EnableWindow(FALSE); } GetDlgItem(IDC_EASYVISION)->EnableWindow(FALSE); GetDlgItem(IDC_USEHEXDIGITS)->EnableWindow(FALSE); GetDlgItem(IDC_PRONOUNCEABLE)->EnableWindow(FALSE); GetDlgItem(IDC_DEFPWLENGTH)->EnableWindow(FALSE); // Disable Symbols m_SymbolsEdit.EnableWindow(FALSE); } else { // Restore previous values m_PWUseLowercase = m_save[SAVE_LOWERCASE]; m_PWUseUppercase = m_save[SAVE_UPPERCASE]; m_PWUseDigits = m_save[SAVE_DIGITS]; m_PWUseSymbols = m_save[SAVE_SYMBOLS]; m_PWEasyVision = m_save[SAVE_EASYVISION]; m_PWMakePronounceable = m_save[SAVE_PRONOUNCEABLE]; m_PWLowerMinLength = m_savelen[SAVE_LOWERCASE]; m_PWUpperMinLength = m_savelen[SAVE_UPPERCASE]; m_PWDigitMinLength = m_savelen[SAVE_DIGITS]; m_PWSymbolMinLength = m_savelen[SAVE_SYMBOLS]; // Enable lengths GetDlgItem(IDC_STATIC_PSWDLENGTH)->EnableWindow(TRUE); GetDlgItem(IDC_DEFPWLENGTH)->EnableWindow(TRUE); // Set up the correct controls (enabled/disabled) do_hex(m_PWUseHexdigits == TRUE); GetDlgItem(IDC_USEHEXDIGITS)->EnableWindow(TRUE); int iSet = EVPR_NONE; if (m_PWEasyVision == TRUE) iSet = EVPR_EV; else if (m_PWMakePronounceable == TRUE) iSet = EVPR_PR; do_easyorpronounceable(iSet); } }
BOOL CPasswordPolicyDlg::OnInitDialog() { CPWDialog::OnInitDialog(); // If started with Tall and won't fit - return to be called again with Wide if (m_bLongPPs && !GetMainDlg()->LongPPs(this)) { EndDialog(-1); return FALSE; } if (m_bReadOnly && m_uicaller != IDS_GENERATEPASSWORD) { // Change OK button test CString cs_close(MAKEINTRESOURCE(IDS_CLOSE)); GetDlgItem(IDOK)->SetWindowText(cs_close); // Hide the Cancel button GetDlgItem(IDCANCEL)->EnableWindow(FALSE); GetDlgItem(IDCANCEL)->ShowWindow(SW_HIDE); } CString cs_title; switch (m_uicaller) { case IDS_OPTIONS: // Set correct window title cs_title.LoadString(IDS_EDIT_DEFAULT_POLICY); SetWindowText(cs_title); // These are only used in Manage -> Generate Password or Add/Edit Policy names GetDlgItem(IDC_GENERATEPASSWORD)->EnableWindow(FALSE); GetDlgItem(IDC_GENERATEPASSWORD)->ShowWindow(SW_HIDE); GetDlgItem(IDC_COPYPASSWORD)->EnableWindow(FALSE); GetDlgItem(IDC_COPYPASSWORD)->ShowWindow(SW_HIDE); GetDlgItem(IDC_PASSWORD)->EnableWindow(FALSE); GetDlgItem(IDC_PASSWORD)->ShowWindow(SW_HIDE); GetDlgItem(IDC_POLICYNAME)->EnableWindow(FALSE); GetDlgItem(IDC_POLICYNAME)->ShowWindow(SW_HIDE); GetDlgItem(IDC_POLICYLIST)->EnableWindow(FALSE); GetDlgItem(IDC_POLICYLIST)->ShowWindow(SW_HIDE); GetDlgItem(IDC_USENAMED_POLICY)->EnableWindow(FALSE); GetDlgItem(IDC_USENAMED_POLICY)->ShowWindow(SW_HIDE); GetDlgItem(IDC_STATIC_NAMEDPOLICY)->ShowWindow(SW_HIDE); break; case IDS_GENERATEPASSWORD: { // Set correct window title cs_title.LoadString(IDS_GENERATEPASSWORD); SetWindowText(cs_title); // These are only used in Manage -> Add/Edit Policy names GetDlgItem(IDC_POLICYNAME)->EnableWindow(FALSE); GetDlgItem(IDC_POLICYNAME)->ShowWindow(SW_HIDE); // Used to generate passwords GetDlgItem(IDC_POLICYLIST)->ShowWindow(SW_SHOW); GetDlgItem(IDC_USENAMED_POLICY)->EnableWindow(TRUE); GetDlgItem(IDC_USENAMED_POLICY)->ShowWindow(SW_SHOW); GetDlgItem(IDC_STATIC_NAMEDPOLICY)->ShowWindow(SW_HIDE); // Populate the combo box m_cbxPolicyNames.ResetContent(); // Get all password policy names std::vector<std::wstring> vNames; GetMainDlg()->GetPolicyNames(vNames); // Add Default const CString cs_default(MAKEINTRESOURCE(IDSC_DEFAULT_POLICY)); m_cbxPolicyNames.AddString(cs_default); for (std::vector<std::wstring>::iterator iter = vNames.begin(); iter != vNames.end(); ++iter) { m_cbxPolicyNames.AddString(iter->c_str()); } // Select Default m_cbxPolicyNames.SelectString(-1, cs_default); // and check the box ((CButton *)GetDlgItem(IDC_USENAMED_POLICY))->SetCheck(BST_CHECKED); // Centre the OK button & change its text RECT rc, rcOK; CWnd *pOK = GetDlgItem(IDOK); GetClientRect(&rc); pOK->GetWindowRect(&rcOK); ScreenToClient(&rcOK); int top = rcOK.top; pOK->GetClientRect(&rcOK); int left = (rc.right - rcOK.right) / 2; pOK->MoveWindow(left, top, rcOK.right, rcOK.bottom); CString cs_close(MAKEINTRESOURCE(IDS_CLOSE)); pOK->SetWindowText(cs_close); // Hide the Cancel & Help buttons GetDlgItem(IDCANCEL)->EnableWindow(FALSE); GetDlgItem(IDCANCEL)->ShowWindow(SW_HIDE); GetDlgItem(ID_HELP)->EnableWindow(FALSE); GetDlgItem(ID_HELP)->ShowWindow(SW_HIDE); Fonts::GetInstance()->ApplyPasswordFont(GetDlgItem(IDC_PASSWORD)); m_ex_password.SetSecure(false); // Remove password character so that the password is displayed m_ex_password.SetPasswordChar(0); // Load bitmap UINT nImageID = PWSprefs::GetInstance()->GetPref(PWSprefs::UseNewToolbar) ? IDB_COPYPASSWORD_NEW : IDB_COPYPASSWORD_CLASSIC; BOOL brc = m_CopyPswdBitmap.Attach(::LoadImage( ::AfxFindResourceHandle(MAKEINTRESOURCE(nImageID), RT_BITMAP), MAKEINTRESOURCE(nImageID), IMAGE_BITMAP, 0, 0, (LR_DEFAULTSIZE | LR_CREATEDIBSECTION | LR_SHARED))); ASSERT(brc); FixBitmapBackground(m_CopyPswdBitmap); CButton *pBtn = (CButton *)GetDlgItem(IDC_COPYPASSWORD); pBtn->SetBitmap(m_CopyPswdBitmap); break; } case IDS_PSWDPOLICY: // Set correct window title cs_title.LoadString(m_policyname.IsEmpty() ? IDS_ADD_NAMED_POLICY : IDS_EDIT_NAMED_POLICY); SetWindowText(cs_title); // These are only used in Manage -> Password Policy GetDlgItem(IDC_GENERATEPASSWORD)->EnableWindow(FALSE); GetDlgItem(IDC_GENERATEPASSWORD)->ShowWindow(SW_HIDE); GetDlgItem(IDC_COPYPASSWORD)->EnableWindow(FALSE); GetDlgItem(IDC_COPYPASSWORD)->ShowWindow(SW_HIDE); GetDlgItem(IDC_PASSWORD)->EnableWindow(FALSE); GetDlgItem(IDC_PASSWORD)->ShowWindow(SW_HIDE); GetDlgItem(IDC_POLICYLIST)->EnableWindow(FALSE); GetDlgItem(IDC_POLICYLIST)->ShowWindow(SW_HIDE); GetDlgItem(IDC_USENAMED_POLICY)->EnableWindow(FALSE); GetDlgItem(IDC_USENAMED_POLICY)->ShowWindow(SW_HIDE); GetDlgItem(IDC_STATIC_NAMEDPOLICY)->ShowWindow(SW_SHOW); if (!m_policyname.IsEmpty() && m_iter->second.usecount > 0) { // Cannot edit the policy 'Name' if it is present and use count > 0 m_PolicyNameEdit.SetReadOnly(TRUE); m_PolicyNameEdit.EnableWindow(FALSE); } m_PolicyNameEdit.SetWindowText(m_policyname); // Max. length of policy name is 255 - only one byte used for length // in database header m_PolicyNameEdit.SetLimitText(255); break; } setupBuddy(this, IDC_PWLENSPIN, IDC_DEFPWLENGTH, m_PWDefaultLength, 4); setupBuddy(this, IDC_SPINDIGITS, IDC_MINDIGITLENGTH, m_PWDigitMinLength); setupBuddy(this, IDC_SPINLOWERCASE, IDC_MINLOWERLENGTH, m_PWLowerMinLength); setupBuddy(this, IDC_SPINUPPERCASE, IDC_MINUPPERLENGTH, m_PWUpperMinLength); setupBuddy(this, IDC_SPINSYMBOLS, IDC_MINSYMBOLLENGTH, m_PWSymbolMinLength); m_save[SAVE_LOWERCASE] = m_PWUseLowercase; m_save[SAVE_UPPERCASE] = m_PWUseUppercase; m_save[SAVE_DIGITS] = m_PWUseDigits; m_save[SAVE_SYMBOLS] = m_PWUseSymbols; m_save[SAVE_EASYVISION] = m_PWEasyVision; m_save[SAVE_PRONOUNCEABLE] = m_PWMakePronounceable; m_savelen[SAVE_LOWERCASE] = m_PWLowerMinLength; m_savelen[SAVE_UPPERCASE] = m_PWUpperMinLength; m_savelen[SAVE_DIGITS] = m_PWDigitMinLength; m_savelen[SAVE_SYMBOLS] = m_PWSymbolMinLength; // Set up the correct controls (enabled/disabled) do_hex(m_PWUseHexdigits == TRUE); int iSet = EVPR_NONE; if (m_PWEasyVision == TRUE) iSet = EVPR_EV; else if (m_PWMakePronounceable == TRUE) iSet = EVPR_PR; do_easyorpronounceable(iSet); GetDlgItem(IDC_OWNSYMBOLS)->EnableWindow(m_PWUseSymbols); GetDlgItem(IDC_RESET_SYMBOLS)->EnableWindow(m_PWUseSymbols); m_SymbolsEdit.SetWindowText(m_Symbols); if (m_uicaller == IDS_GENERATEPASSWORD) { // Disable Specific policy controls as default is to use a named policy (database default) SetSpecificPolicyControls(FALSE); m_pToolTipCtrl = new CToolTipCtrl; if (!m_pToolTipCtrl->Create(this, TTS_ALWAYSTIP | TTS_BALLOON | TTS_NOPREFIX)) { pws_os::Trace(L"Unable To create Advanced Dialog ToolTip\n"); delete m_pToolTipCtrl; m_pToolTipCtrl = NULL; return TRUE; } // Tooltips EnableToolTips(); // Activate the tooltip control. m_pToolTipCtrl->Activate(TRUE); m_pToolTipCtrl->SetMaxTipWidth(300); // Quadruple the time to allow reading by user int iTime = m_pToolTipCtrl->GetDelayTime(TTDT_AUTOPOP); m_pToolTipCtrl->SetDelayTime(TTDT_AUTOPOP, 4 * iTime); AddTool(IDC_COPYPASSWORD, IDS_CLICKTOCOPY); } // Set appropriate focus GetDlgItem(m_uicaller == IDS_GENERATEPASSWORD ? IDC_GENERATEPASSWORD : IDCANCEL)->SetFocus(); return FALSE; }