📄 main.c
字号:
LoadString(g_hInstance, IDS_TITLE, szTitle, sizeof(szTitle));
LoadString(g_hInstance, IDS_E_NOLDAP, szMsg, sizeof(szMsg));
if (!Config.szLDAPServer) // !Config.bUpdateAdminPrefs ||
{
MessageBox(hwndDlg, szMsg, szTitle, MB_ICONEXCLAMATION);
break;
}
err = PGPclGetPrefsFromServer(Config.pgpContext,
Config.tlsContext, hwndDlg, Config.prefRef,
Config.prefRefNet);
if (IsPGPError(err) && (err != kPGPError_UserAbort))
PGPclErrorBox(hwndDlg, err);
else
{
FreeAdminOptions(&Config);
InitAdminOptions(g_pgpContext, &Config, FALSE);
LoadAdminOptions(&Config);
EnableWindow(GetDlgItem(hwndDlg, IDC_UPDATESERVER), TRUE);
EnableWindow(GetDlgItem(hwndDlg, IDC_CREATEINSTALL), TRUE);
}
bReturn = TRUE;
}
break;
case IDC_UPDATESERVER:
{
char szTitle[255];
char szMsg[255];
PGPPrefArray *pArray;
char szRNG[_MAX_PATH];
LoadString(g_hInstance, IDS_TITLE, szTitle, sizeof(szTitle));
LoadString(g_hInstance, IDS_E_NOLDAP, szMsg, sizeof(szMsg));
if (!Config.szLDAPServer) // !Config.bUpdateAdminPrefs ||
{
MessageBox(hwndDlg, szMsg, szTitle, MB_ICONEXCLAMATION);
break;
}
if (!Config.bCopyNetHosts)
{
PGPGetPrefArray(Config.prefRefNet, kPGPNetPrefHostArray,
&pArray);
PGPClearPrefData(Config.prefRefNet, kPGPNetPrefHostArray);
PGPSavePrefFile(Config.prefRefNet);
PGPWritePrefsHash(Config.pgpContext, Config.prefRefNet);
}
PGPGetPrefStringBuffer(Config.prefRef, kPGPPrefRNGSeedFile,
_MAX_PATH, szRNG);
PGPSetPrefString(Config.prefRef, kPGPPrefRNGSeedFile, "");
PGPSavePrefFile(Config.prefRef);
err = PGPclSendPrefsToServer(Config.pgpContext,
Config.tlsContext, hwndDlg, Config.prefRef,
Config.prefRefNet, Config.keyDB);
PGPSetPrefString(Config.prefRef, kPGPPrefRNGSeedFile, szRNG);
PGPSavePrefFile(Config.prefRef);
if (!Config.bCopyNetHosts)
{
PGPSetPrefArray(Config.prefRefNet, kPGPNetPrefHostArray,
pArray);
PGPFreePrefArray(pArray);
PGPSavePrefFile(Config.prefRefNet);
PGPWritePrefsHash(Config.pgpContext, Config.prefRefNet);
}
if (IsPGPError(err) && (err != kPGPError_UserAbort))
PGPclErrorBox(hwndDlg, err);
else
Config.bSave = FALSE;
bReturn = TRUE;
}
break;
case IDC_CREATEINSTALL:
{
PGPUInt32 nUserAccountStatus;
PGPBoolean bFirstKeyGenerated;
PGPPrefArray *pArray;
char szRNG[_MAX_PATH];
PGPGetPrefNumber(Config.prefRef, kPGPPrefUserAccountStatus,
&nUserAccountStatus);
PGPGetPrefBoolean(Config.prefRef, kPGPPrefFirstKeyGenerated,
&bFirstKeyGenerated);
if (Config.bPreselectInstall &&
Config.bRemainSilentAfterInstall)
{
PGPSetPrefNumber(Config.prefRef, kPGPPrefUserAccountStatus,
kPGPPrefPGPDisabled);
}
else
{
PGPSetPrefNumber(Config.prefRef, kPGPPrefUserAccountStatus,
kPGPPrefPGPNotInitialized);
}
PGPSetPrefBoolean(Config.prefRef, kPGPPrefFirstKeyGenerated,
FALSE);
PGPGetPrefStringBuffer(Config.prefRef, kPGPPrefRNGSeedFile,
_MAX_PATH, szRNG);
PGPSetPrefString(Config.prefRef, kPGPPrefRNGSeedFile, "");
PGPSavePrefFile(Config.prefRef);
if (!Config.bCopyNetHosts)
{
PGPGetPrefArray(Config.prefRefNet, kPGPNetPrefHostArray,
&pArray);
PGPClearPrefData(Config.prefRefNet, kPGPNetPrefHostArray);
PGPSavePrefFile(Config.prefRefNet);
PGPWritePrefsHash(Config.pgpContext, Config.prefRefNet);
}
SaveAdminOptions(&Config);
DialogBoxParam(g_hInstance, MAKEINTRESOURCE(IDD_INSTALLER),
hwndDlg, InstallerDlgProc, (LPARAM) &Config);
Config.bSave = FALSE;
PGPSetPrefBoolean(Config.prefRef, kPGPPrefFirstKeyGenerated,
bFirstKeyGenerated);
PGPSetPrefNumber(Config.prefRef, kPGPPrefUserAccountStatus,
nUserAccountStatus);
PGPSetPrefString(Config.prefRef, kPGPPrefRNGSeedFile, szRNG);
PGPSavePrefFile(Config.prefRef);
if (!Config.bCopyNetHosts)
{
PGPSetPrefArray(Config.prefRefNet, kPGPNetPrefHostArray,
pArray);
PGPFreePrefArray(pArray);
PGPSavePrefFile(Config.prefRefNet);
PGPWritePrefsHash(Config.pgpContext, Config.prefRefNet);
}
bReturn = TRUE;
break;
}
}
break;
case WM_CLOSE:
if (Config.bSave)
{
char szTitle[255];
char szMsg[255];
int nResult;
LoadString(g_hInstance, IDS_TITLE, szTitle, 254);
LoadString(g_hInstance, IDS_E_NOTSAVED, szMsg, 254);
nResult = MessageBox(hwndDlg, szMsg, szTitle, MB_YESNO |
MB_ICONQUESTION);
if (nResult == IDNO)
break;
}
HtmlHelp(NULL, NULL, HH_CLOSE_ALL, 0);
EndDialog(hwndDlg, 0);
break;
}
return bReturn;
}
//-------------------------------------------------------------------|
// Load DIB bitmap and associated palette
static HPALETTE
CreateDIBPalette (LPBITMAPINFO lpbmi,
LPINT lpiNumColors)
{
LPBITMAPINFOHEADER lpbi;
LPLOGPALETTE lpPal;
HANDLE hLogPal;
HPALETTE hPal = NULL;
INT i;
lpbi = (LPBITMAPINFOHEADER)lpbmi;
if (lpbi->biBitCount <= 8) {
*lpiNumColors = (1 << lpbi->biBitCount);
}
else
*lpiNumColors = 0; // No palette needed for 24 BPP DIB
if (*lpiNumColors) {
hLogPal = GlobalAlloc (GHND, sizeof (LOGPALETTE) +
sizeof (PALETTEENTRY) * (*lpiNumColors));
lpPal = (LPLOGPALETTE) GlobalLock (hLogPal);
lpPal->palVersion = 0x300;
lpPal->palNumEntries = *lpiNumColors;
for (i = 0; i < *lpiNumColors; i++) {
lpPal->palPalEntry[i].peRed = lpbmi->bmiColors[i].rgbRed;
lpPal->palPalEntry[i].peGreen = lpbmi->bmiColors[i].rgbGreen;
lpPal->palPalEntry[i].peBlue = lpbmi->bmiColors[i].rgbBlue;
lpPal->palPalEntry[i].peFlags = 0;
}
hPal = CreatePalette (lpPal);
GlobalUnlock (hLogPal);
GlobalFree (hLogPal);
}
return hPal;
}
static HBITMAP
LoadResourceBitmap (HINSTANCE hInstance,
LPSTR lpString,
HPALETTE FAR* lphPalette)
{
HRSRC hRsrc;
HGLOBAL hGlobal;
HBITMAP hBitmapFinal = NULL;
LPBITMAPINFOHEADER lpbi;
HDC hdc;
INT iNumColors;
if (hRsrc = FindResource (hInstance, lpString, RT_BITMAP)) {
hGlobal = LoadResource (hInstance, hRsrc);
lpbi = (LPBITMAPINFOHEADER)LockResource (hGlobal);
hdc = GetDC(NULL);
*lphPalette = CreateDIBPalette ((LPBITMAPINFO)lpbi, &iNumColors);
if (*lphPalette) {
SelectPalette (hdc,*lphPalette,FALSE);
RealizePalette (hdc);
}
hBitmapFinal = CreateDIBitmap (hdc,
(LPBITMAPINFOHEADER)lpbi,
(LONG)CBM_INIT,
(LPSTR)lpbi + lpbi->biSize + iNumColors * sizeof(RGBQUAD),
(LPBITMAPINFO)lpbi,
DIB_RGB_COLORS );
ReleaseDC (NULL,hdc);
UnlockResource (hGlobal);
FreeResource (hGlobal);
}
return (hBitmapFinal);
}
static void sNewPrefs()
{
PFLFileSpecRef prefFile;
PGPPrefRef prefRef = NULL;
PGPPrefRef prefRefNet = NULL;
char szPath[_MAX_PATH];
InitAdminOptions(g_pgpContext, &Config, FALSE);
Config.prefRef = NULL;
Config.prefRefNet = NULL;
GetTempPath(sizeof(Config.szClientPrefs), Config.szClientPrefs);
strcpy(Config.szNetPrefs, Config.szClientPrefs);
strcpy(Config.szDefaultKeys, Config.szClientPrefs);
strcat(Config.szClientPrefs, "client.txt");
strcat(Config.szNetPrefs, "net.txt");
strcat(Config.szDefaultKeys, "keys.asc");
CloseHandle(CreateFile(Config.szClientPrefs, GENERIC_WRITE, 0, NULL,
OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL));
CloseHandle(CreateFile(Config.szNetPrefs, GENERIC_WRITE, 0, NULL,
OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL));
CloseHandle(CreateFile(Config.szDefaultKeys, GENERIC_WRITE, 0, NULL,
OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL));
PFLNewFileSpecFromFullPath(Config.memoryMgr, Config.szClientPrefs,
&prefFile);
PGPOpenPrefFile(prefFile, clientDefaults, clientDefaultsSize,
&Config.prefRef);
PFLFreeFileSpec(prefFile);
PGPSavePrefFile(Config.prefRef);
PFLNewFileSpecFromFullPath(Config.memoryMgr, Config.szNetPrefs,
&prefFile);
PGPOpenPrefFile(prefFile, netDefaults, netDefaultsSize,
&Config.prefRefNet);
PFLFreeFileSpec(prefFile);
PGPSavePrefFile(Config.prefRefNet);
PGPclPeekClientLibPrefRefs(&prefRef, &prefRefNet);
PGPGetPrefStringBuffer(prefRef, kPGPPrefPublicKeyringFile, _MAX_PATH,
szPath);
PGPSetPrefString(Config.prefRef, kPGPPrefPublicKeyringFile, szPath);
PGPGetPrefStringBuffer(prefRef, kPGPPrefPrivateKeyringFile, _MAX_PATH,
szPath);
PGPSetPrefString(Config.prefRef, kPGPPrefPrivateKeyringFile, szPath);
PGPGetPrefStringBuffer(prefRef, kPGPPrefRNGSeedFile, _MAX_PATH,
szPath);
PGPSetPrefString(Config.prefRef, kPGPPrefRNGSeedFile, szPath);
if (prefRefNet != NULL)
{
PGPGetPrefStringBuffer(prefRefNet, kPGPNetPrefPublicKeyringFile,
_MAX_PATH, szPath);
PGPSetPrefString(Config.prefRefNet, kPGPNetPrefPublicKeyringFile,
szPath);
PGPGetPrefStringBuffer(prefRefNet, kPGPNetPrefPrivateKeyringFile,
_MAX_PATH, szPath);
PGPSetPrefString(Config.prefRefNet, kPGPNetPrefPrivateKeyringFile,
szPath);
}
return;
}
static void sSavePrefs(HWND hwndMain)
{
OPENFILENAME openFile;
char szFile[MAX_PATH];
char szTitle[256];
strcpy(szFile, "PGPPrefs.txt");
LoadString(g_hInstance, IDS_SAVEPREFS, szTitle, 255);
openFile.lStructSize = sizeof(OPENFILENAME);
openFile.hwndOwner = hwndMain;
openFile.lpstrFilter = "Preference Files (*.txt)\0"
"*.txt\0";
openFile.lpstrCustomFilter = NULL;
openFile.nFilterIndex = 1;
openFile.lpstrFile = szFile;
openFile.nMaxFile = MAX_PATH-1;
openFile.lpstrFileTitle = NULL;
openFile.lpstrInitialDir = NULL;
openFile.lpstrTitle = szTitle;
openFile.Flags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_NOCHANGEDIR;
openFile.lpstrDefExt = "txt";
if (!GetSaveFileName(&openFile))
return;
CopyFile(Config.szClientPrefs, szFile, FALSE);
strcpy(szFile, "PGPnetPrefs.txt");
LoadString(g_hInstance, IDS_SAVENETPREFS, szTitle, 255);
if (GetSaveFileName(&openFile))
CopyFile(Config.szNetPrefs, szFile, FALSE);
Config.bSave = FALSE;
return;
}
static void sFreeData()
{
FreeAdminOptions(&Config);
if (Config.prefRef != NULL)
{
PGPFreePrefs(Config.prefRef);
DeleteFile(Config.szClientPrefs);
}
if (Config.prefRefNet != NULL)
{
PGPFreePrefs(Config.prefRefNet);
DeleteFile(Config.szNetPrefs);
}
if (strlen(Config.szDefaultKeys) > 0)
DeleteFile(Config.szDefaultKeys);
return;
}
/*__Editor_settings____
Local Variables:
tab-width: 4
End:
vi: ts=4 sw=4
vim: si
_____________________*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -