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.

449 lines
12 KiB

  1. // KeyPasswordPage.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "CertWiz.h"
  5. #include "KeyPasswordPage.h"
  6. #include "YesNoUsage.h"
  7. #include "Certificat.h"
  8. #include "CertUtil.h"
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CKeyPasswordPage property page
  16. IMPLEMENT_DYNCREATE(CKeyPasswordPage, CIISWizardPage)
  17. CKeyPasswordPage::CKeyPasswordPage(CCertificate * pCert)
  18. : CIISWizardPage(CKeyPasswordPage::IDD, IDS_CERTWIZ, TRUE),
  19. m_pCert(pCert)
  20. {
  21. //{{AFX_DATA_INIT(CKeyPasswordPage)
  22. m_Password = _T("");
  23. //}}AFX_DATA_INIT
  24. }
  25. CKeyPasswordPage::~CKeyPasswordPage()
  26. {
  27. }
  28. void CKeyPasswordPage::DoDataExchange(CDataExchange* pDX)
  29. {
  30. CIISWizardPage::DoDataExchange(pDX);
  31. //{{AFX_DATA_MAP(CKeyPasswordPage)
  32. DDX_Text_SecuredString(pDX, IDC_KEYPASSWORD, m_Password);
  33. DDV_MaxChars_SecuredString(pDX, m_Password, 64);
  34. //DDX_Text(pDX, IDC_KEYPASSWORD, m_Password);
  35. //DDV_MaxChars(pDX, m_Password, 64);
  36. //}}AFX_DATA_MAP
  37. }
  38. LRESULT
  39. CKeyPasswordPage::OnWizardBack()
  40. /*++
  41. Routine Description:
  42. Prev button handler
  43. Arguments:
  44. None
  45. Return Value:
  46. 0 to automatically advance to the prev page;
  47. 1 to prevent the page from changing.
  48. To jump to a page other than the prev one,
  49. return the identifier of the dialog to be displayed.
  50. --*/
  51. {
  52. return IDD_PAGE_PREV;
  53. }
  54. LRESULT
  55. CKeyPasswordPage::OnWizardNext()
  56. {
  57. UpdateData(TRUE);
  58. if (0 != m_Password.Compare(m_pCert->m_KeyPassword))
  59. {
  60. m_pCert->DeleteKeyRingCert();
  61. m_Password.CopyTo(m_pCert->m_KeyPassword);
  62. }
  63. if (NULL == m_pCert->GetKeyRingCert())
  64. {
  65. // probably password was wrong
  66. CString txt;
  67. txt.LoadString(IDS_FAILED_IMPORT_KEY_FILE);
  68. ASSERT(GetDlgItem(IDC_ERROR_TEXT) != NULL);
  69. SetDlgItemText(IDC_ERROR_TEXT, txt);
  70. GetDlgItem(IDC_KEYPASSWORD)->SetFocus();
  71. GetDlgItem(IDC_KEYPASSWORD)->SendMessage(EM_SETSEL, 0, -1);
  72. SetWizardButtons(PSWIZB_BACK);
  73. return 1;
  74. }
  75. #ifdef ENABLE_W3SVC_SSL_PAGE
  76. if (IsWebServerType(m_pCert->m_WebSiteInstanceName))
  77. {
  78. return IDD_PAGE_NEXT_INSTALL_W3SVC_ONLY;
  79. }
  80. #endif
  81. return IDD_PAGE_NEXT;
  82. }
  83. BOOL
  84. CKeyPasswordPage::OnSetActive()
  85. {
  86. ASSERT(m_pCert != NULL);
  87. m_pCert->m_KeyPassword.CopyTo(m_Password);
  88. UpdateData(FALSE);
  89. SetWizardButtons(m_Password.IsEmpty() ? PSWIZB_BACK : PSWIZB_BACK | PSWIZB_NEXT);
  90. return CIISWizardPage::OnSetActive();
  91. }
  92. BOOL
  93. CKeyPasswordPage::OnKillActive()
  94. {
  95. UpdateData();
  96. m_Password.CopyTo(m_pCert->m_KeyPassword);
  97. return CIISWizardPage::OnKillActive();
  98. }
  99. BEGIN_MESSAGE_MAP(CKeyPasswordPage, CIISWizardPage)
  100. //{{AFX_MSG_MAP(CKeyPasswordPage)
  101. ON_EN_CHANGE(IDC_KEYPASSWORD, OnEditchangePassword)
  102. //}}AFX_MSG_MAP
  103. END_MESSAGE_MAP()
  104. /////////////////////////////////////////////////////////////////////////////
  105. // CSiteNamePage message handlers
  106. void CKeyPasswordPage::OnEditchangePassword()
  107. {
  108. UpdateData(TRUE);
  109. SetWizardButtons(m_Password.IsEmpty() ?
  110. PSWIZB_BACK : PSWIZB_BACK | PSWIZB_NEXT);
  111. CString str;
  112. SetDlgItemText(IDC_ERROR_TEXT, str);
  113. }
  114. /////////////////////////////////////////////////////////////////////////////
  115. // CKeyPasswordPage property page
  116. IMPLEMENT_DYNCREATE(CImportPFXPasswordPage, CIISWizardPage)
  117. CImportPFXPasswordPage::CImportPFXPasswordPage(CCertificate * pCert)
  118. : CIISWizardPage(CImportPFXPasswordPage::IDD, IDS_CERTWIZ, TRUE),
  119. m_pCert(pCert)
  120. {
  121. //{{AFX_DATA_INIT(CImportPFXPasswordPage)
  122. m_Password = _T("");
  123. //}}AFX_DATA_INIT
  124. }
  125. CImportPFXPasswordPage::~CImportPFXPasswordPage()
  126. {
  127. }
  128. void CImportPFXPasswordPage::DoDataExchange(CDataExchange* pDX)
  129. {
  130. CIISWizardPage::DoDataExchange(pDX);
  131. //{{AFX_DATA_MAP(CImportPFXPasswordPage)
  132. //DDX_Text(pDX, IDC_KEYPASSWORD, m_Password);
  133. //DDV_MaxChars(pDX, m_Password, 64);
  134. DDX_Text_SecuredString(pDX, IDC_KEYPASSWORD, m_Password);
  135. DDV_MaxChars_SecuredString(pDX, m_Password, 64);
  136. //}}AFX_DATA_MAP
  137. }
  138. LRESULT
  139. CImportPFXPasswordPage::OnWizardBack()
  140. /*++
  141. Routine Description:
  142. Prev button handler
  143. Arguments:
  144. None
  145. Return Value:
  146. 0 to automatically advance to the prev page;
  147. 1 to prevent the page from changing.
  148. To jump to a page other than the prev one,
  149. return the identifier of the dialog to be displayed.
  150. --*/
  151. {
  152. return IDD_PAGE_PREV;
  153. }
  154. LRESULT
  155. CImportPFXPasswordPage::OnWizardNext()
  156. {
  157. UpdateData(TRUE);
  158. if (0 != m_Password.Compare(m_pCert->m_KeyPassword))
  159. {
  160. m_pCert->DeleteKeyRingCert();
  161. m_Password.CopyTo(m_pCert->m_KeyPassword);
  162. }
  163. // if existing cert exists, then just over write it.
  164. m_pCert->m_OverWriteExisting = TRUE;
  165. if (NULL == m_pCert->GetPFXFileCert())
  166. {
  167. // probably password was wrong
  168. goto OnWizardNext_Error;
  169. }
  170. /*
  171. if (NULL == m_pCert->GetPFXFileCert())
  172. {
  173. // Check if the error was -- object already exist.
  174. // if this is what the error is then
  175. // we have to ask the user if they want to replace the
  176. // existing cert!
  177. if (CRYPT_E_EXISTS == m_pCert->m_hResult)
  178. {
  179. // Try to get the certificate hash.
  180. //DisplayUsageBySitesOfCert((LPCTSTR) m_pCert->m_KeyFileName,(LPCTSTR) m_pCert->m_KeyPassword,m_pCert->m_MachineName_Remote,m_pCert->m_UserName_Remote,m_pCert->m_UserPassword_Remote,m_pCert->m_WebSiteInstanceName_Remote);
  181. CYesNoUsage YesNoUsageDialog(m_pCert);
  182. INT_PTR nRet = YesNoUsageDialog.DoModal();
  183. switch (nRet)
  184. {
  185. case IDOK:
  186. // make sure to overwrite.
  187. m_pCert->m_OverWriteExisting = TRUE;
  188. if (NULL != m_pCert->GetPFXFileCert())
  189. {
  190. goto OnWizardNext_Exit;
  191. }
  192. break;
  193. case IDCANCEL:
  194. default:
  195. return 1;
  196. break;
  197. };
  198. // ask them if they want to try it again...
  199. //CString strFilename;
  200. //CString strMessage;
  201. //strFilename = m_pCert->m_KeyFileName;
  202. //AfxFormatString1(strMessage, IDS_REPLACE_FILE, strFilename);
  203. //if (IDYES == AfxMessageBox(strMessage, MB_ICONEXCLAMATION | MB_YESNO))
  204. //{
  205. // // make sure to overwrite.
  206. // m_pCert->m_OverWriteExisting = TRUE;
  207. // if (NULL != m_pCert->GetPFXFileCert())
  208. // {
  209. // goto OnWizardNext_Exit;
  210. // }
  211. //}
  212. }
  213. goto OnWizardNext_Error;
  214. }
  215. */
  216. #ifdef ENABLE_W3SVC_SSL_PAGE
  217. if (IsWebServerType(m_pCert->m_WebSiteInstanceName))
  218. {
  219. return IDD_PAGE_NEXT_INSTALL_W3SVC_ONLY;
  220. }
  221. #endif
  222. return IDD_PAGE_NEXT;
  223. OnWizardNext_Error:
  224. // probably password was wrong
  225. CString txt;
  226. txt.LoadString(IDS_FAILED_IMPORT_PFX_FILE);
  227. ASSERT(GetDlgItem(IDC_ERROR_TEXT) != NULL);
  228. SetDlgItemText(IDC_ERROR_TEXT, txt);
  229. GetDlgItem(IDC_KEYPASSWORD)->SetFocus();
  230. GetDlgItem(IDC_KEYPASSWORD)->SendMessage(EM_SETSEL, 0, -1);
  231. SetWizardButtons(PSWIZB_BACK);
  232. return 1;
  233. }
  234. BOOL
  235. CImportPFXPasswordPage::OnSetActive()
  236. {
  237. ASSERT(m_pCert != NULL);
  238. m_pCert->m_KeyPassword.CopyTo(m_Password);
  239. UpdateData(FALSE);
  240. SetWizardButtons(m_Password.IsEmpty() ? PSWIZB_BACK : PSWIZB_BACK | PSWIZB_NEXT);
  241. return CIISWizardPage::OnSetActive();
  242. }
  243. BOOL
  244. CImportPFXPasswordPage::OnKillActive()
  245. {
  246. UpdateData();
  247. m_Password.CopyTo(m_pCert->m_KeyPassword);
  248. return CIISWizardPage::OnKillActive();
  249. }
  250. BEGIN_MESSAGE_MAP(CImportPFXPasswordPage, CIISWizardPage)
  251. //{{AFX_MSG_MAP(CImportPFXPasswordPage)
  252. ON_EN_CHANGE(IDC_KEYPASSWORD, OnEditchangePassword)
  253. //}}AFX_MSG_MAP
  254. END_MESSAGE_MAP()
  255. /////////////////////////////////////////////////////////////////////////////
  256. // CSiteNamePage message handlers
  257. void CImportPFXPasswordPage::OnEditchangePassword()
  258. {
  259. UpdateData(TRUE);
  260. SetWizardButtons(m_Password.IsEmpty() ?
  261. PSWIZB_BACK : PSWIZB_BACK | PSWIZB_NEXT);
  262. CString str;
  263. SetDlgItemText(IDC_ERROR_TEXT, str);
  264. }
  265. /////////////////////////////////////////////////////////////////////////////
  266. // CExportPFXPasswordPage property page
  267. IMPLEMENT_DYNCREATE(CExportPFXPasswordPage, CIISWizardPage)
  268. CExportPFXPasswordPage::CExportPFXPasswordPage(CCertificate * pCert)
  269. : CIISWizardPage(CExportPFXPasswordPage::IDD, IDS_CERTWIZ, TRUE),
  270. m_pCert(pCert)
  271. {
  272. //{{AFX_DATA_INIT(CExportPFXPasswordPage)
  273. m_Password = _T("");
  274. m_Password2 = _T("");
  275. m_Export_Private_key = FALSE;
  276. //}}AFX_DATA_INIT
  277. m_Password.Empty();
  278. m_Password2.Empty();
  279. }
  280. CExportPFXPasswordPage::~CExportPFXPasswordPage()
  281. {
  282. }
  283. void CExportPFXPasswordPage::DoDataExchange(CDataExchange* pDX)
  284. {
  285. CIISWizardPage::DoDataExchange(pDX);
  286. //{{AFX_DATA_MAP(CExportPFXPasswordPage)
  287. //DDX_Text(pDX, IDC_KEYPASSWORD, m_Password);
  288. //DDX_Text(pDX, IDC_KEYPASSWORD2, m_Password2);
  289. //DDV_MaxChars(pDX, m_Password, 64);
  290. //DDV_MaxChars(pDX, m_Password2, 64);
  291. DDX_Text_SecuredString(pDX, IDC_KEYPASSWORD, m_Password);
  292. DDX_Text_SecuredString(pDX, IDC_KEYPASSWORD2, m_Password2);
  293. DDV_MaxChars_SecuredString(pDX, m_Password, 64);
  294. DDV_MaxChars_SecuredString(pDX, m_Password2, 64);
  295. DDX_Check(pDX, IDC_CHK_EXPORT_PRIVATE, m_Export_Private_key);
  296. //}}AFX_DATA_MAP
  297. }
  298. LRESULT
  299. CExportPFXPasswordPage::OnWizardBack()
  300. /*++
  301. Routine Description:
  302. Prev button handler
  303. Arguments:
  304. None
  305. Return Value:
  306. 0 to automatically advance to the prev page;
  307. 1 to prevent the page from changing.
  308. To jump to a page other than the prev one,
  309. return the identifier of the dialog to be displayed.
  310. --*/
  311. {
  312. return IDD_PAGE_PREV;
  313. }
  314. LRESULT
  315. CExportPFXPasswordPage::OnWizardNext()
  316. {
  317. UpdateData(TRUE);
  318. if (0 != m_Password.Compare(m_Password2))
  319. {
  320. AfxMessageBox(IDS_PASSWORDS_DOESNT_MATCH);
  321. return 1;
  322. }
  323. if (0 != m_Password.Compare(m_pCert->m_KeyPassword))
  324. {
  325. m_pCert->DeleteKeyRingCert();
  326. m_Password.CopyTo(m_pCert->m_KeyPassword);
  327. m_pCert->m_ExportPFXPrivateKey = m_Export_Private_key;
  328. // There is no sense exporting the key with the private key!
  329. // that's why this HAS to be true!
  330. m_pCert->m_ExportPFXPrivateKey = TRUE;
  331. }
  332. /*
  333. if (NULL == m_pCert->GetKeyRingCert())
  334. {
  335. // probably password was wrong
  336. CString txt;
  337. txt.LoadString(IDS_FAILED_IMPORT_KEY_FILE);
  338. ASSERT(GetDlgItem(IDC_ERROR_TEXT) != NULL);
  339. SetDlgItemText(IDC_ERROR_TEXT, txt);
  340. GetDlgItem(IDC_KEYPASSWORD)->SetFocus();
  341. GetDlgItem(IDC_KEYPASSWORD)->SendMessage(EM_SETSEL, 0, -1);
  342. SetWizardButtons(PSWIZB_BACK);
  343. return 1;
  344. }
  345. */
  346. return IDD_PAGE_NEXT;
  347. }
  348. BOOL
  349. CExportPFXPasswordPage::OnSetActive()
  350. {
  351. ASSERT(m_pCert != NULL);
  352. m_pCert->m_KeyPassword.CopyTo(m_Password);
  353. UpdateData(FALSE);
  354. SetWizardButtons((m_Password.IsEmpty() || m_Password2.IsEmpty()) ? PSWIZB_BACK : PSWIZB_BACK | PSWIZB_NEXT);
  355. return CIISWizardPage::OnSetActive();
  356. }
  357. BOOL
  358. CExportPFXPasswordPage::OnKillActive()
  359. {
  360. UpdateData();
  361. m_Password.CopyTo(m_pCert->m_KeyPassword);
  362. return CIISWizardPage::OnKillActive();
  363. }
  364. BEGIN_MESSAGE_MAP(CExportPFXPasswordPage, CIISWizardPage)
  365. //{{AFX_MSG_MAP(CExportPFXPasswordPage)
  366. ON_EN_CHANGE(IDC_KEYPASSWORD, OnEditchangePassword)
  367. ON_EN_CHANGE(IDC_KEYPASSWORD2, OnEditchangePassword)
  368. //}}AFX_MSG_MAP
  369. END_MESSAGE_MAP()
  370. void CExportPFXPasswordPage::OnEditchangePassword()
  371. {
  372. UpdateData(TRUE);
  373. SetWizardButtons(( m_Password.IsEmpty() || m_Password2.IsEmpty()) ?
  374. PSWIZB_BACK : PSWIZB_BACK | PSWIZB_NEXT);
  375. CString str;
  376. SetDlgItemText(IDC_ERROR_TEXT, str);
  377. }