void ClearPassphrases(HWND hDlg,GPP *gpp)
{
	HWND hwndPhrase1,hwndPhrase2;

	if(gpp->pszPassPhraseConf)
	{
		secFree(gpp->pszPassPhraseConf);
		gpp->pszPassPhraseConf=NULL;
	}

	if(gpp->szDummy)
	{
		secFree(gpp->szDummy);
		gpp->szDummy=NULL;
	}

	hwndPhrase1=GetDlgItem(hDlg,IDC_PHRASE1);
	hwndPhrase2=GetDlgItem(hDlg,IDC_PHRASE2);

	if(hwndPhrase1)
	{
		WipeEditBox (gpp,hDlg, IDC_PHRASE1);
		SetWindowText (hwndPhrase1, "");
	}

	if(hwndPhrase2)
	{
		WipeEditBox (gpp,hDlg, IDC_PHRASE2);
		SetWindowText (hwndPhrase2, "");
	}

	SetFocus (hwndPhrase1);
}
static void
FreePassphrases(GPP *gpp)
{
	if (gpp->pszPassPhrase) {
		secFree(gpp->pszPassPhrase);
		gpp->pszPassPhrase=NULL;
	}

	if (gpp->pszPassPhraseConf) {
		secFree(gpp->pszPassPhraseConf);
		gpp->pszPassPhraseConf=NULL;
	}

}
static void
ClearPassphrases(GPP *gpp)
{
	if(gpp->pszPassPhraseConf) {
		secFree(gpp->pszPassPhraseConf);
		gpp->pszPassPhraseConf=NULL;
	}

}
示例#4
0
static VOID
sEmptyCache (PCACHE pcache)
{
	if (pcache->pszCachedPassphrase) 
	{
		secFree (pcache->pszCachedPassphrase);
		pcache->pszCachedPassphrase = NULL;
		pcache->iCachedPassphraseLength = 0;
	}

	if (pcache->pCachedPasskey) 
	{
		secFree (pcache->pCachedPasskey);

		pcache->pCachedPasskey = NULL;
		pcache->iCachedPasskeyLength = 0;
	}
	
	pgpClearMemory (pcache->CachedKeyID, kPGPMaxExportedKeyIDSize);
	pcache->CachedKeyAlg = 0;
	pcache->CachedHashAlg = 0;
	pcache->uCachedOptions = 0;
}
VOID 
WipeEditBox (
		GPP *gpp,
		HWND hDlg, 
		UINT uID) 
{
	CHAR*	p;
	INT		i;

	i = SendDlgItemMessage (hDlg, uID, WM_GETTEXTLENGTH, 0, 0);
	if (i > 0) {
		p = (char *)secAlloc (gpp->context,i+1);
		if (p) {
			FillMemory (p, i, ' ');
			SendDlgItemMessage (hDlg, uID, WM_SETTEXT, 0, (LPARAM)p);
			secFree (p);
		}
	}
}
LRESULT APIENTRY 
PhraseSubclassProc (
		HWND	hWnd, 
		UINT	uMsg, 
		WPARAM	wParam, 
		LPARAM	lParam) 
{
	UINT				uQuality;
	CHAR *				szBuf;
	LRESULT				lResult;
	BOOL				OKactive;
	GPP					 *gpp;

	gpp=(GPP *)GetWindowLong (GetParent(hWnd), GWL_USERDATA);

	if (CommonPhraseMsgProc (hWnd, uMsg, wParam, lParam)) return 0;

	switch (uMsg) 
	{
		case WM_GETTEXT :
		{
			if (!gpp->pszPassPhrase) return 0;
			lParam = (LPARAM)gpp->pszPassPhrase;
			break;
		}

		case WM_CHAR :
		{
			if (wParam == VK_TAB) 
			{
				if (GetKeyState (VK_SHIFT) & 0x8000) 
					SetFocus (GetDlgItem (GetParent (hWnd), IDC_HIDETYPING));
				else 
					SetFocus (GetDlgItem (GetParent (hWnd), gpp->iNextTabControl));
			}
			else 
			{
				OKactive=TRUE;

				lResult = CallWindowProc (gpp->wpOrigPhrase1Proc, 
					hWnd, uMsg, wParam, lParam); 

				// Get our passphrase in secure memory
				szBuf=(char *)secAlloc(gpp->context,1024);
				CallWindowProc (gpp->wpOrigPhrase1Proc, 
					hWnd, WM_GETTEXT, 1024, (LPARAM)szBuf); 

				// Estimate its quality
				uQuality=pgpEstimatePassphraseQuality(szBuf);
/*
				// Check length for setting OK to TRUE
				if(options->mMinPassphraseLength!=0)
				{
					if(strlen(szBuf)<options->mMinPassphraseLength)
					{
						OKactive=FALSE;
					}
				}
*/
				// Free the passphrase
				memset (szBuf, 0, sizeof(szBuf));
				secFree(szBuf);

				// Check Quality for setting OK to TRUE
				if(gpp->options->mMinPassphraseQuality!=0)
				{
					if(uQuality<gpp->options->mMinPassphraseQuality)
					{
						OKactive=FALSE;
					}
				}
	
				if(gpp->hwndQuality)
				{
					// Set new quality
					SendMessage (gpp->hwndQuality, PBM_SETPOS, uQuality, 0);
				}

				// Enable/disable OK
				EnableWindow (GetDlgItem (GetParent(hWnd), IDOK), OKactive);
				return lResult;
			}
			break;
		}
	}
    return CallWindowProc (gpp->wpOrigPhrase1Proc, 
		hWnd, uMsg, wParam, lParam); 
} 
BOOL CALLBACK 
pgpConfirmationDlgProc (
		HWND	hDlg, 
		UINT	uMsg, 
		WPARAM	wParam,
		LPARAM	lParam) 
{
	CPGPConfirmationPassphraseDialogOptions *options;
	GPP				*gpp;
	INT				i;
	DWORD			Common;

	Common=DoCommonCalls (hDlg,uMsg,wParam,lParam); 

	if(Common)
		return Common;

	switch (uMsg) 
	{
		case WM_INITDIALOG:
		{
			gpp=(GPP *)GetWindowLong (hDlg, GWL_USERDATA);
			options = (CPGPConfirmationPassphraseDialogOptions *)
				gpp->options;

			gpp->iNextTabControl = IDC_PHRASE2;
			gpp->hwndQuality = GetDlgItem (hDlg, IDC_PHRASEQUALITY);
			gpp->hwndMinQuality = GetDlgItem (hDlg, IDC_MINQUALITY);

			gpp->wpOrigPhrase1Proc = (WNDPROC) SetWindowLong (
				GetDlgItem (hDlg, IDC_PHRASE1), 
				GWL_WNDPROC, 
				(LONG) PhraseSubclassProc); 
			gpp->wpOrigPhrase2Proc = (WNDPROC) SetWindowLong (
				GetDlgItem (hDlg, IDC_PHRASE2), 
				GWL_WNDPROC, 
				(LONG) PhraseConfirmSubclassProc); 

			gpp->hwndOptionsControl=DisplayOptions(hDlg,options->mDialogOptions,215);

			// If we aren't showing quality, don't show either bar
			if(!options->mShowPassphraseQuality)
			{
				EnableWindow (GetDlgItem (hDlg, IDC_STATICPASSQUAL), FALSE);
				ShowWindow (GetDlgItem (hDlg, IDC_STATICPASSQUAL), SW_HIDE);
				EnableWindow (GetDlgItem (hDlg, IDC_STATICMINQUAL), FALSE);
				ShowWindow (GetDlgItem (hDlg, IDC_STATICMINQUAL), SW_HIDE);

				EnableWindow (GetDlgItem (hDlg, IDC_MINQUALITY), FALSE);
				ShowWindow (GetDlgItem (hDlg, IDC_MINQUALITY), SW_HIDE);
				EnableWindow (GetDlgItem (hDlg, IDC_PHRASEQUALITY), FALSE);
				ShowWindow (GetDlgItem (hDlg, IDC_PHRASEQUALITY), SW_HIDE);
			}

			// If we don't give a min quality, don't show bar
			if(options->mMinPassphraseQuality==0)
			{
				EnableWindow (GetDlgItem (hDlg, IDC_STATICMINQUAL), FALSE);
				ShowWindow (GetDlgItem (hDlg, IDC_STATICMINQUAL), SW_HIDE);

				EnableWindow (GetDlgItem (hDlg, IDC_MINQUALITY), FALSE);
				ShowWindow (GetDlgItem (hDlg, IDC_MINQUALITY), SW_HIDE);
			}

			// Set our min quality benchmark
			SendMessage (gpp->hwndMinQuality, PBM_SETPOS, 
				options->mMinPassphraseQuality, 0);

			// Disable OK till we get a good passphrase if mins are active
			if(options->mMinPassphraseQuality!=0)
//			  (options->mMinPassphraseLength!=0))
				EnableWindow (GetDlgItem (hDlg, IDOK), FALSE);

			return FALSE;
		}

		case WM_COMMAND:
		{
			gpp=(GPP *)GetWindowLong (hDlg, GWL_USERDATA);
			options = (CPGPConfirmationPassphraseDialogOptions *)
				gpp->options;

			switch(LOWORD (wParam)) 
			{
				case IDOK: 
				{
					FreePassphrases(gpp);

					// get passphrase
					i = SendDlgItemMessage (hDlg, IDC_PHRASE1, 
						WM_GETTEXTLENGTH, 0, 0) +1;

					gpp->szDummy = (char *)secAlloc (gpp->context, i);

					if(gpp->szDummy)
					{
						gpp->pszPassPhrase = (char *)secAlloc (gpp->context, i);

						if (gpp->pszPassPhrase) 
						{
							GetDlgItemText (hDlg, IDC_PHRASE1, gpp->szDummy, i);

							// get passphrase confirmation
							i = SendDlgItemMessage (hDlg, IDC_PHRASE2, 
								WM_GETTEXTLENGTH, 0, 0) +1;
							gpp->pszPassPhraseConf = (char *)secAlloc (gpp->context, i);
							if (gpp->pszPassPhraseConf) 
							{
								GetDlgItemText (hDlg, IDC_PHRASE2, gpp->szDummy, i);

								if(PassphraseLengthAndQualityOK(hDlg,options,gpp->pszPassPhrase))
								{
									if (!lstrcmp (gpp->pszPassPhrase, gpp->pszPassPhraseConf))
									{
										ClearPassphrases(hDlg,gpp);
										if(gpp->pszPassPhraseConf)
										{
											secFree(gpp->pszPassPhraseConf);
											gpp->pszPassPhraseConf=NULL;
										}
										SaveOptionSettings(gpp->hwndOptionsControl);
										EndDialog (hDlg, kPGPError_NoErr);
										break;
									}
									else
									{
										PGPsdkUIMessageBox (hDlg, IDS_PGPERROR, 
											IDS_PHRASEMISMATCH, MB_OK|MB_ICONEXCLAMATION);
									}
								}
								// Badpassphrase/quality
								ClearPassphrases(hDlg,gpp);
								FreePassphrases(gpp);
								SendMessage (gpp->hwndQuality, PBM_SETPOS, 0, 0);
								if(options->mMinPassphraseQuality!=0)
									EnableWindow (GetDlgItem (hDlg, IDOK), FALSE);
								break;
							}
						}
					}

					// Couldn't allocate passphrases
					ClearPassphrases(hDlg,gpp);
					FreePassphrases(gpp);
					EndDialog (hDlg, kPGPError_OutOfMemory);
					break;
				}
			}
			break;
		}
	}
	return FALSE;
}
示例#8
0
VOID PGPclExport
PGPclFreeCachedPhrase (LPSTR szPhrase) 
{
	pgpClearMemory (szPhrase, lstrlen (szPhrase));
	secFree (szPhrase);
}
示例#9
0
char* retrieveHeader(int fd, int timeout)
{
    char* cp_header = NULL;
    ssize_t i = 0;
    ssize_t in_size = 0;
    bool b_gotnl = FALSE;
    bool b_gotcr = FALSE;
    
    // first of all allocated our big buffer
    cp_header = secCalloc(MAX_HEADER_SIZE + 1, sizeof(char));
    
    for(i=0; i<MAX_HEADER_SIZE; ++i)
    {
        in_size = pollAndRead(fd, timeout, &cp_header[i], 1);
        // Error from file is never good
        if(in_size == EXIT_FAILURE)
        {
            debugVerbose(FILEHANDLING, "Got problems with our fds\n");
            secFree(cp_header);
            return NULL;
        }
        // Header has to end with \n\n
        if(in_size == 0)
        {
            debugVerbose(NORMALISE, "Invalid Header delimiter detected\n");
            secExit(STATUS_BAD_REQUEST);
        }
        // register a \r
        if(cp_header[i] == '\r')
        {
            b_gotcr = TRUE;
            continue;
        }
        // special things to do on \n
        if(cp_header[i] == '\n')
        {
            // replace previous \r by \n
            if(b_gotcr == TRUE)
            {
                cp_header[i-1] = '\n';
                cp_header[i] = '\0';
                --i;
                b_gotcr = FALSE;
            }
            // break up if we had found a previous \n, thats the only right way to get out here
            if(b_gotnl == TRUE)
            {
                ++i;
                break;
            }
            b_gotnl = TRUE;
            continue;
        }
        // if we found a non character or a single \r we will break
        if(isValid(cp_header, i) == EXIT_FAILURE || b_gotcr == TRUE)
        {
            debugVerbose(FILEHANDLING, "Detected invalid char while retrieving header\n");
            secExit(STATUS_BAD_REQUEST);
        }
        b_gotnl = FALSE;
        b_gotcr = FALSE;
    }
    
    // Header is too large
    if(i == MAX_HEADER_SIZE)
    {
        debug(FILEHANDLING, "Too long header! We don't like to get overflowed, bye bye\n");
        secExit(STATUS_BAD_REQUEST);
    }
    
    cp_header[i] = '\0';
    return secRealloc(cp_header, (i + 1) * sizeof(char));
}