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.

275 lines
8.4 KiB

  1. //
  2. // SECCERTS.CPP
  3. //
  4. #include "pch.h"
  5. INT_PTR CALLBACK SecurityCertsDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
  6. {
  7. switch (uMsg)
  8. {
  9. case WM_INITDIALOG:
  10. CheckRadioButton(hDlg, IDC_NOSC, IDC_IMPORTSC, IDC_NOSC);
  11. DisableDlgItem(hDlg, IDC_MODIFYSC);
  12. CheckRadioButton(hDlg, IDC_NOAUTH, IDC_IMPORTAUTH, IDC_NOAUTH);
  13. DisableDlgItem(hDlg, IDC_MODIFYAUTH);
  14. return TRUE;
  15. case UM_SAVE:
  16. {
  17. TCHAR szSecWorkDir[MAX_PATH];
  18. TCHAR szSiteCertInf[MAX_PATH];
  19. TCHAR szRootStr[MAX_PATH];
  20. TCHAR szCaStr[MAX_PATH];
  21. TCHAR szAuthCodeInf[MAX_PATH];
  22. HCURSOR hOldCur;
  23. BOOL fCheckDirtyOnly = (BOOL) lParam;
  24. hOldCur = SetCursor(LoadCursor(NULL, IDC_WAIT));
  25. // prepare the work dir where the SITECERT.INF and *.STR would temporarily get copied to
  26. PathCombine(szSecWorkDir, g_szWorkDir, TEXT("sitecert.wrk"));
  27. PathCombine(szSiteCertInf, szSecWorkDir, TEXT("sitecert.inf"));
  28. PathCombine(szRootStr, szSecWorkDir, TEXT("root.str"));
  29. PathCombine(szCaStr, szSecWorkDir, TEXT("ca.str"));
  30. if (IsDlgButtonChecked(hDlg, IDC_IMPORTSC) == BST_CHECKED)
  31. {
  32. if (!fCheckDirtyOnly)
  33. {
  34. ImportSiteCert(g_szInsFile, NULL, szSiteCertInf, TRUE);
  35. CheckRadioButton(hDlg, IDC_NOSC, IDC_IMPORTSC, IDC_NOSC);
  36. DisableDlgItem(hDlg, IDC_MODIFYSC);
  37. }
  38. g_fInsDirty = TRUE;
  39. }
  40. // prepare the work dir where the AUTHCODE.INF would temporarily get copied to
  41. PathCombine(szSecWorkDir, g_szWorkDir, TEXT("authcode.wrk"));
  42. PathCombine(szAuthCodeInf, szSecWorkDir, TEXT("authcode.inf"));
  43. if (IsDlgButtonChecked(hDlg, IDC_IMPORTAUTH) == BST_CHECKED)
  44. {
  45. if (!fCheckDirtyOnly)
  46. {
  47. ImportAuthCode(g_szInsFile, NULL, szAuthCodeInf, TRUE);
  48. CheckRadioButton(hDlg, IDC_NOAUTH, IDC_IMPORTAUTH, IDC_NOAUTH);
  49. DisableDlgItem(hDlg, IDC_MODIFYAUTH);
  50. }
  51. g_fInsDirty = TRUE;
  52. }
  53. SetCursor(hOldCur);
  54. }
  55. *((LPBOOL)wParam) = TRUE;
  56. break;
  57. case WM_CLOSE:
  58. DestroyWindow(hDlg);
  59. break;
  60. case WM_COMMAND:
  61. switch (wParam)
  62. {
  63. case IDC_NOSC:
  64. DisableDlgItem(hDlg, IDC_MODIFYSC);
  65. return TRUE;
  66. case IDC_IMPORTSC:
  67. EnableDlgItem(hDlg, IDC_MODIFYSC);
  68. return TRUE;
  69. case IDC_MODIFYSC:
  70. ModifySiteCert(hDlg);
  71. SetFocus(GetDlgItem(hDlg, IDC_MODIFYSC));
  72. break;
  73. case IDC_NOAUTH:
  74. DisableDlgItem(hDlg, IDC_MODIFYAUTH);
  75. return TRUE;
  76. case IDC_IMPORTAUTH:
  77. EnableDlgItem(hDlg, IDC_MODIFYAUTH);
  78. return TRUE;
  79. case IDC_MODIFYAUTH:
  80. ModifyAuthCode(hDlg);
  81. SetFocus(GetDlgItem(hDlg, IDC_MODIFYAUTH));
  82. return TRUE;
  83. }
  84. break;
  85. }
  86. return FALSE;
  87. }
  88. HRESULT CertsFinalCopy(LPCTSTR pcszDestDir, DWORD dwFlags, LPDWORD pdwCabState)
  89. {
  90. TCHAR szFrom[MAX_PATH];
  91. if ((HasFlag(dwFlags, PM_CHECK) && pdwCabState != NULL) || HasFlag(dwFlags, PM_COPY))
  92. {
  93. TCHAR szFile[MAX_PATH];
  94. // move sitecert.inf, *.str and *.dis to pcszDestDir
  95. PathCombine(szFrom, g_szWorkDir, TEXT("sitecert.wrk"));
  96. PathCombine(szFile, szFrom, TEXT("sitecert.inf"));
  97. if (HasFlag(dwFlags, PM_CHECK) && pdwCabState != NULL && PathFileExists(szFile))
  98. SetFlag(pdwCabState, CAB_TYPE_CONFIG);
  99. if (HasFlag(dwFlags, PM_COPY))
  100. CopyFileToDir(szFile, pcszDestDir);
  101. PathCombine(szFile, szFrom, TEXT("root.str"));
  102. if (HasFlag(dwFlags, PM_CHECK) && pdwCabState != NULL && PathFileExists(szFile))
  103. SetFlag(pdwCabState, CAB_TYPE_CONFIG);
  104. if (HasFlag(dwFlags, PM_COPY))
  105. CopyFileToDir(szFile, pcszDestDir);
  106. PathCombine(szFile, szFrom, TEXT("root.dis"));
  107. if (HasFlag(dwFlags, PM_CHECK) && pdwCabState != NULL && PathFileExists(szFile))
  108. SetFlag(pdwCabState, CAB_TYPE_CONFIG);
  109. if (HasFlag(dwFlags, PM_COPY))
  110. CopyFileToDir(szFile, pcszDestDir);
  111. PathCombine(szFile, szFrom, TEXT("ca.str"));
  112. if (HasFlag(dwFlags, PM_CHECK) && pdwCabState != NULL && PathFileExists(szFile))
  113. SetFlag(pdwCabState, CAB_TYPE_CONFIG);
  114. if (HasFlag(dwFlags, PM_COPY))
  115. CopyFileToDir(szFile, pcszDestDir);
  116. // move authcode.inf to pcszDestDir
  117. PathCombine(szFrom, g_szWorkDir, TEXT("authcode.wrk"));
  118. PathCombine(szFile, szFrom, TEXT("authcode.inf"));
  119. if (HasFlag(dwFlags, PM_CHECK) && pdwCabState != NULL && PathFileExists(szFile))
  120. SetFlag(pdwCabState, CAB_TYPE_CONFIG);
  121. if (HasFlag(dwFlags, PM_COPY))
  122. CopyFileToDir(szFile, pcszDestDir);
  123. }
  124. // blow away the work dirs
  125. if (HasFlag(dwFlags, PM_CLEAR))
  126. {
  127. PathCombine(szFrom, g_szWorkDir, TEXT("sitecert.wrk"));
  128. PathRemovePath(szFrom);
  129. PathCombine(szFrom, g_szWorkDir, TEXT("authcode.wrk"));
  130. PathRemovePath(szFrom);
  131. }
  132. return S_OK;
  133. }
  134. INT_PTR CALLBACK SecurityAuthDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
  135. {
  136. switch (uMsg)
  137. {
  138. case WM_INITDIALOG:
  139. CheckRadioButton(hDlg, IDC_NOAUTH, IDC_IMPORTAUTH, IDC_NOAUTH);
  140. DisableDlgItem(hDlg, IDC_MODIFYAUTH);
  141. HideDlgItem(hDlg, IDC_TPL_TEXT);
  142. HideDlgItem(hDlg, IDC_TPL);
  143. break;
  144. case UM_SAVE:
  145. { // process authenticode
  146. TCHAR szInf[MAX_PATH];
  147. HCURSOR hOldCur;
  148. BOOL fCheckDirtyOnly = (BOOL) lParam;
  149. hOldCur = SetCursor(LoadCursor(NULL, IDC_WAIT));
  150. PathCombine(szInf, g_szWorkDir, TEXT("authcode.wrk"));
  151. PathAppend(szInf, TEXT("authcode.inf"));
  152. if (IsDlgButtonChecked(hDlg, IDC_IMPORTAUTH) == BST_CHECKED)
  153. {
  154. if (!fCheckDirtyOnly)
  155. {
  156. ImportAuthCode(g_szInsFile, NULL, szInf, TRUE);
  157. CheckRadioButton(hDlg, IDC_NOAUTH, IDC_IMPORTAUTH, IDC_NOAUTH);
  158. DisableDlgItem(hDlg, IDC_MODIFYAUTH);
  159. }
  160. g_fInsDirty = TRUE;
  161. }
  162. else
  163. if (!fCheckDirtyOnly)
  164. ImportAuthCode(g_szInsFile, NULL, szInf, FALSE);
  165. SetCursor(hOldCur);
  166. }
  167. *((LPBOOL)wParam) = TRUE;
  168. break;
  169. case WM_CLOSE:
  170. DestroyWindow(hDlg);
  171. break;
  172. case WM_COMMAND:
  173. if (GET_WM_COMMAND_CMD(wParam, lParam) != BN_CLICKED)
  174. return FALSE;
  175. switch (GET_WM_COMMAND_ID(wParam, lParam))
  176. {
  177. case IDC_NOAUTH:
  178. DisableDlgItem(hDlg, IDC_MODIFYAUTH);
  179. break;
  180. case IDC_IMPORTAUTH:
  181. EnableDlgItem(hDlg, IDC_MODIFYAUTH);
  182. break;
  183. case IDC_MODIFYAUTH:
  184. ModifyAuthCode(hDlg);
  185. break;
  186. default:
  187. return FALSE;
  188. }
  189. break;
  190. default:
  191. return FALSE;
  192. }
  193. return TRUE;
  194. }
  195. HRESULT AuthFinalCopy(LPCTSTR pcszDestDir, DWORD dwFlags, LPDWORD pdwCabState)
  196. {
  197. TCHAR szFrom[MAX_PATH];
  198. if ((HasFlag(dwFlags, PM_CHECK) && pdwCabState != NULL) || HasFlag(dwFlags, PM_COPY))
  199. {
  200. TCHAR szFile[MAX_PATH];
  201. // move authcode.inf to pcszDestDir
  202. PathCombine(szFrom, g_szWorkDir, TEXT("authcode.wrk"));
  203. PathCombine(szFile, szFrom, TEXT("authcode.inf"));
  204. if (HasFlag(dwFlags, PM_CHECK) && pdwCabState != NULL && PathFileExists(szFile))
  205. SetFlag(pdwCabState, CAB_TYPE_CONFIG);
  206. if (HasFlag(dwFlags, PM_COPY))
  207. CopyFileToDir(szFile, pcszDestDir);
  208. }
  209. // blow away the work dir
  210. if (HasFlag(dwFlags, PM_CLEAR))
  211. {
  212. PathCombine(szFrom, g_szWorkDir, TEXT("authcode.wrk"));
  213. PathRemovePath(szFrom);
  214. }
  215. return S_OK;
  216. }