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.
 
 
 
 
 
 

245 lines
7.0 KiB

/*
** c e r e r d l g . c p p
**
** Purpose:
** Handles the certificate error dialog box
**
** History
** 2/17/97: (t-erikne) Created.
**
** Copyright (C) Microsoft Corp. 1997.
*/
///////////////////////////////////////////////////////////////////////////
//
// Depends on
//
#include "pch.hxx"
#include <resource.h>
#include <mimeole.h>
#include "demand.h"
#include "secutil.h"
// from globals.h
//N why didn't this work?
//extern IMimeAllocator *g_pMoleAlloc;
///////////////////////////////////////////////////////////////////////////
//
// Prototypes
//
INT_PTR CALLBACK CertErrorDlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
static void FillListView(HWND hwndList, IMimeAddressTable *pAdrTable);
static void InitListView(HWND hwndList);
///////////////////////////////////////////////////////////////////////////
//
// Functions
//
INT_PTR CALLBACK CertErrorDlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
CERTERRPARAM * pCertErrParam = NULL;
IMimeAddressTable *pAdrTable = NULL;
TCHAR szText[CCHMAX_STRINGRES];
switch (message)
{
case WM_INITDIALOG:
HWND hwndList;
CenterDialog(hwnd);
// save our cookie pointer
Assert(pAdrTable == NULL);
pCertErrParam = (CERTERRPARAM *) lParam;
pAdrTable = pCertErrParam->pAdrTable;
Assert(pAdrTable != NULL);
//N not needed right now
//SetWindowLong(hwnd, DWL_USER, (LONG)pAdrTable);
// set initial state of controls
hwndList = GetDlgItem(hwnd, idcCertList);
if (hwndList)
{
InitListView(hwndList);
FillListView(hwndList, pAdrTable);
}
// Force Encryption change static text and disable OK button)
if(pCertErrParam->fForceEncryption)
{
szText[0] = _T('\0');
AthLoadString(idsSecPolicyForceEncr,
szText, ARRAYSIZE(szText));
SetDlgItemText(hwnd, idcErrStat, szText);
EnableWindow(GetDlgItem(hwnd, IDOK), FALSE);
}
return(TRUE);
case WM_HELP:
case WM_CONTEXTMENU:
//return OnContextHelp(hwnd, message, wParam, lParam, g_rgCtxMapMailRead);
return FALSE; // BUGBUG: should no doubt do something else here
case WM_COMMAND:
// remember to bail if the cookie is null
switch (LOWORD(wParam))
{
case IDOK:
{
}
// fall through...
case IDCANCEL:
EndDialog(hwnd, LOWORD(wParam));
return(TRUE);
break;
}
break; // wm_command
case WM_CLOSE:
SendMessage(hwnd, WM_COMMAND, IDCANCEL, 0L);
return (TRUE);
} // message switch
return(FALSE);
}
void InitListView(HWND hwndList)
{
LV_COLUMN lvc;
RECT rc;
// Set up the columns. The first column will be for the person's
// name and the second for the certificate error
GetClientRect(hwndList, &rc);
lvc.mask = LVCF_FMT | LVCF_WIDTH;
lvc.fmt = LVCFMT_LEFT;
lvc.cx = rc.right / 2;
ListView_InsertColumn(hwndList, 0, &lvc);
ListView_InsertColumn(hwndList, 1, &lvc);
}
void FillListView(HWND hwndList, IMimeAddressTable *pAdrTable)
{
IMimeEnumAddressTypes *pEnum;
const ULONG numToGet = 1;
ADDRESSPROPS rAddress;
LV_ITEM lvi;
TCHAR szText[CCHMAX_STRINGRES];
Assert(g_pMoleAlloc && hwndList && pAdrTable);
if (FAILED(pAdrTable->EnumTypes(IAT_ALL, IAP_ADRTYPE | IAP_CERTSTATE | IAP_FRIENDLY, &pEnum)))
return;
lvi.mask = LVIF_TEXT;
lvi.iItem = 0;
lvi.stateMask = 0;
while(S_OK == pEnum->Next(numToGet, &rAddress, NULL))
{
if (CERTIFICATE_OK != rAddress.certstate)
{
// if this is the sender and the problem is that the cert
// is missing, ignore it. We handle that elsewhere
if (IAT_FROM == rAddress.dwAdrType &&
FMissingCert(rAddress.certstate))
{
continue;
}
// we have a body worthy of viewing
if (NULL != rAddress.pszFriendly)
{
lvi.iSubItem = 0;
lvi.pszText = rAddress.pszFriendly;
if (-1 == ListView_InsertItem(hwndList, &lvi))
goto freecont;
// now compute the actual certificate error text
// subtract one becuse the enum is zero-based
AthLoadString(idsSecurityCertMissing+(UINT)rAddress.certstate-1,
szText, ARRAYSIZE(szText));
lvi.iSubItem = 1;
lvi.pszText = szText;
ListView_SetItem(hwndList, &lvi);
}
}
freecont:
g_pMoleAlloc->FreeAddressProps(&rAddress);
}
ReleaseObj(pEnum);
return;
}
INT_PTR CALLBACK CertWarnDlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
ERRIDS *pErrIds = NULL;
TCHAR szRes[CCHMAX_STRINGRES];
switch (message)
{
case WM_INITDIALOG:
CenterDialog(hwnd);
// save our cookie pointer
Assert(pErrIds == NULL);
pErrIds = (ERRIDS *)lParam;
Assert(pErrIds != NULL);
//N not needed right now
//SetWindowLong(hwnd, DWL_USER, (LONG)pAdrTable);
// set initial state of controls
AthLoadString(pErrIds->idsText1, szRes, sizeof(szRes));
SetDlgItemText(hwnd, idcStatic1, szRes);
AthLoadString(pErrIds->idsText2, szRes, sizeof(szRes));
SetDlgItemText(hwnd, idcStatic2, szRes);
return(TRUE);
case WM_HELP:
case WM_CONTEXTMENU:
//return OnContextHelp(hwnd, message, wParam, lParam, g_rgCtxMapMailRead);
return FALSE; // BUGBUG: should no doubt do something else here
case WM_COMMAND:
// remember to bail if the cookie is null
switch (LOWORD(wParam))
{
case IDOK:
// fall through...
case IDC_DONTSIGN:
// fall through...
case IDCANCEL:
EndDialog(hwnd, LOWORD(wParam));
return(TRUE);
break;
}
break; // wm_command
case WM_CLOSE:
SendMessage(hwnd, WM_COMMAND, IDCANCEL, 0L);
return (TRUE);
} // message switch
return(FALSE);
}