int LoadKeyring(void) { FILE * f_pkr; char line[200], * t_key, ** tmpkr; int ii, ll; f_pkr = fopen("pegwit.pkr", "r"); if (!f_pkr) return 0; if (keyring) FreeKeyring(); keyring = malloc(KR_SIZE * sizeof(keyring[0])); if (!keyring) return 0; memset(keyring, 0, KR_SIZE * sizeof(keyring[0])); num_keys = KR_SIZE; ii = 0; while (keyring && !feof(f_pkr)) { if (!fgets(line, sizeof(line), f_pkr)) break; ll = strlen(line); while (line[ll-1] == '\r' || line[ll-1] == '\n') line[--ll] = 0; if (ll < KEYSIZE+2) continue; if (line[KEYSIZE] != ',') continue; if (ii >= num_keys) { tmpkr = realloc(keyring, (num_keys + KR_SIZE) * sizeof(keyring[0])); if (!tmpkr) break; keyring = tmpkr; memset(keyring + num_keys, 0, KR_SIZE * sizeof(keyring[0])); num_keys += KR_SIZE; } t_key = malloc(ll+1); if (!t_key) break; strcpy(t_key, line); keyring[ii++] = t_key; } fclose(f_pkr); return num_keys; } // LoadKeyring
BOOL CALLBACK RevokerSelectDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { BOOL bReturnCode = FALSE; pgpConfigInfo * pConfig = NULL; HWND hList; g_hCurrentDlgWnd = hwndDlg; if (uMsg != WM_INITDIALOG) pConfig = (pgpConfigInfo *) GetWindowLong(hwndDlg, GWL_USERDATA); hList = GetDlgItem(hwndDlg, IDC_REVOKER_ID); switch(uMsg) { case WM_INITDIALOG: { RECT rc; PROPSHEETPAGE *ppspConfig = (PROPSHEETPAGE *) lParam; // center dialog on screen GetWindowRect(GetParent(hwndDlg), &rc); SetWindowPos(GetParent(hwndDlg), NULL, (GetSystemMetrics(SM_CXSCREEN) - (rc.right - rc.left))/2, (GetSystemMetrics(SM_CYSCREEN) - (rc.bottom - rc.top))/2, 0, 0, SWP_NOSIZE | SWP_NOZORDER); pConfig = (pgpConfigInfo *) ppspConfig->lParam; SetWindowLong(hwndDlg, GWL_USERDATA, (LPARAM) pConfig); ShowKeyring(hwndDlg, IDC_REVOKER_ID, pConfig->pgpContext, NULL, FALSE, TRUE, FALSE, TRUE); g_bGotReloadMsg = FALSE; break; } case WM_DESTROY: FreeKeyring(hwndDlg, IDC_REVOKER_ID); break; case WM_PAINT: if (pConfig->hPalette) { PAINTSTRUCT ps; HDC hDC = BeginPaint (hwndDlg, &ps); SelectPalette (hDC, pConfig->hPalette, FALSE); RealizePalette (hDC); EndPaint (hwndDlg, &ps); bReturnCode = TRUE; } break; case WM_NOTIFY: { LPNMHDR pnmh; pnmh = (LPNMHDR) lParam; switch(pnmh->code) { case PSN_SETACTIVE: { int nIndex; // Initialize window nIndex = ListView_GetNextItem(hList, -1, LVNI_SELECTED); if (nIndex > -1) { PostMessage(GetParent(hwndDlg), PSM_SETWIZBUTTONS, 0, PSWIZB_NEXT | PSWIZB_BACK); bNextEnabled = TRUE; } else { PostMessage(GetParent(hwndDlg), PSM_SETWIZBUTTONS, 0, PSWIZB_BACK); bNextEnabled = FALSE; } SendDlgItemMessage(hwndDlg, IDC_WIZBITMAP, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM) pConfig->hBitmap); SetTimer(hwndDlg, ID_TIMER, 500, NULL); bReturnCode = TRUE; break; } case PSN_KILLACTIVE: { KillTimer(hwndDlg, ID_TIMER); bReturnCode = TRUE; break; } case PSN_WIZNEXT: { int nIndex; LV_ITEM lviKey; char *szKeyID; char szUserID[kPGPMaxUserIDSize+1]; if (pConfig->szRevokerKeyID != NULL) { pgpFree(pConfig->szRevokerKeyID); pConfig->szRevokerKeyID = NULL; } if (pConfig->szRevokerKey != NULL) { pgpFree(pConfig->szRevokerKey); pConfig->szRevokerKey = NULL; } // Save user data for this page nIndex = ListView_GetNextItem(hList, -1, LVNI_SELECTED); if (nIndex > -1) { lviKey.mask = LVIF_PARAM | LVIF_IMAGE | LVIF_TEXT; lviKey.iItem = nIndex; lviKey.iSubItem = 0; lviKey.pszText = szUserID; lviKey.cchTextMax = kPGPMaxUserIDSize; ListView_GetItem(hList, &lviKey); szKeyID = (char *) lviKey.lParam; pConfig->szRevokerKeyID = (char *) pgpAlloc(strlen(szKeyID)+1); strcpy(pConfig->szRevokerKeyID, szKeyID); pConfig->szRevokerKey = (char *) pgpAlloc(strlen(szUserID)+1); strcpy(pConfig->szRevokerKey, szUserID); if (lviKey.iImage == IDX_RSAPUBKEY) pConfig->revokerKeyType = kPGPPublicKeyAlgorithm_RSA; if (lviKey.iImage == IDX_DSAPUBKEY) pConfig->revokerKeyType = kPGPPublicKeyAlgorithm_DSA; } bReturnCode = TRUE; break; } case PSN_HELP: { // Display help break; } case PSN_QUERYCANCEL: { // User wants to quit g_bGotReloadMsg = FALSE; break; } case NM_CLICK: case NM_RCLICK: case NM_DBLCLK: case NM_RDBLCLK: if (pnmh->idFrom == IDC_REVOKER_ID) { int nIndex; nIndex = ListView_GetNextItem(hList, -1, LVNI_SELECTED); if (nIndex > -1) { SendMessage(GetParent(hwndDlg), PSM_SETWIZBUTTONS, 0, PSWIZB_NEXT | PSWIZB_BACK); bNextEnabled = TRUE; } bReturnCode = TRUE; } break; } break; } case WM_TIMER: { int nIndex; nIndex = ListView_GetNextItem(hList, -1, LVNI_SELECTED); if (nIndex > -1) { if (!bNextEnabled) { SendMessage(GetParent(hwndDlg), PSM_SETWIZBUTTONS, 0, PSWIZB_NEXT | PSWIZB_BACK); bNextEnabled = TRUE; } } else if (bNextEnabled) { SendMessage(GetParent(hwndDlg), PSM_SETWIZBUTTONS, 0, PSWIZB_BACK); bNextEnabled = FALSE; } bReturnCode = TRUE; SetTimer(hwndDlg, ID_TIMER, 500, NULL); break; } } return(bReturnCode); }