void k5_ccc_update_ui(HWND hwnd, k5_ccc_dlg_data * d) { khm_size i; HWND lv; if (d->work.inc_api) CheckDlgButton(hwnd, IDC_CFG_INCAPI, BST_CHECKED); else CheckDlgButton(hwnd, IDC_CFG_INCAPI, BST_UNCHECKED); if (d->work.inc_mslsa) CheckDlgButton(hwnd, IDC_CFG_INCMSLSA, BST_CHECKED); else CheckDlgButton(hwnd, IDC_CFG_INCMSLSA, BST_UNCHECKED); lv = GetDlgItem(hwnd, IDC_CFG_FCLIST); #ifdef DEBUG assert(lv); #endif ListView_DeleteAllItems(lv); for (i=0; i<d->work.n_file_ccs; i++) { LVITEM lvi; ZeroMemory(&lvi, sizeof(lvi)); lvi.mask = LVIF_PARAM | LVIF_TEXT; lvi.lParam = (LPARAM) i; lvi.pszText = d->work.file_ccs[i].path; ListView_InsertItem(lv, &lvi); } if (k5_ccc_get_mod(d)) { khui_cfg_set_flags(d->node, KHUI_CNFLAG_MODIFIED, KHUI_CNFLAG_MODIFIED); } else { khui_cfg_set_flags(d->node, 0, KHUI_CNFLAG_MODIFIED); } }
INT_PTR CALLBACK krb4_confg_proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { static BOOL in_init = FALSE; k4_config_dlg_data * d; switch(uMsg) { case WM_INITDIALOG: { wchar_t wbuf[MAX_PATH]; CHAR krb_path[MAX_PATH]; CHAR krbrealm_path[MAX_PATH]; CHAR ticketName[MAX_PATH]; char * pticketName; size_t krb_path_sz = sizeof(krb_path); size_t krbrealm_path_sz = sizeof(krbrealm_path); khm_size cbsize; d = PMALLOC(sizeof(*d)); ZeroMemory(d, sizeof(*d)); #pragma warning(push) #pragma warning(disable: 4244) SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR) d); #pragma warning(pop) d->node = (khui_config_node) lParam; in_init = TRUE; // Set KRB.CON memset(krb_path, '\0', sizeof(krb_path)); if (!pkrb_get_krbconf2(krb_path, &krb_path_sz)) { // Error has happened } else { // normal find AnsiStrToUnicode(wbuf, sizeof(wbuf), krb_path); SetDlgItemText(hwnd, IDC_CFG_CFGPATH, wbuf); StringCbCopyA(d->krb_path, sizeof(d->krb_path), krb_path); } // Set KRBREALM.CON memset(krbrealm_path, '\0', sizeof(krbrealm_path)); if (!pkrb_get_krbrealm2(krbrealm_path, &krbrealm_path_sz)) { // Error has happened } else { AnsiStrToUnicode(wbuf, sizeof(wbuf), krbrealm_path); SetDlgItemText(hwnd, IDC_CFG_RLMPATH, wbuf); StringCbCopyA(d->krbrealm_path, sizeof(d->krbrealm_path), krbrealm_path); } cbsize = sizeof(wbuf); if (KHM_SUCCEEDED(khc_read_string(csp_params, L"TktString", wbuf, &cbsize)) && wbuf[0] != L'\0') { UnicodeStrToAnsi(ticketName, sizeof(ticketName), wbuf); } else { // Set TICKET.KRB file Editbox *ticketName = 0; pkrb_set_tkt_string(0); pticketName = ptkt_string(); if (pticketName) StringCbCopyA(ticketName, sizeof(ticketName), pticketName); } if (!*ticketName) { // error } else { AnsiStrToUnicode(wbuf, sizeof(wbuf), ticketName); SetDlgItemText(hwnd, IDC_CFG_CACHE, wbuf); StringCbCopyA(d->tkt_string, sizeof(d->tkt_string), ticketName); } in_init = FALSE; } break; case WM_COMMAND: if (MAKEWPARAM(IDC_CFG_CACHE, EN_CHANGE)) { char tkt_string[MAX_PATH]; wchar_t wtkt_string[MAX_PATH]; if (in_init) { return TRUE; } d = (k4_config_dlg_data *) (LONG_PTR) GetWindowLongPtr(hwnd, DWLP_USER); if (d == NULL) return TRUE; tkt_string[0] = 0; wtkt_string[0] = 0; GetDlgItemText(hwnd, IDC_CFG_CACHE, wtkt_string, ARRAYLENGTH(wtkt_string)); UnicodeStrToAnsi(tkt_string, sizeof(tkt_string), wtkt_string); if (_stricmp(tkt_string, d->tkt_string)) { khui_cfg_set_flags(d->node, KHUI_CNFLAG_MODIFIED, KHUI_CNFLAG_MODIFIED); } else { khui_cfg_set_flags(d->node, 0, KHUI_CNFLAG_MODIFIED); } return TRUE; } break; case KHUI_WM_CFG_NOTIFY: if (HIWORD(wParam) == WMCFG_APPLY) { wchar_t wtkt_string[MAX_PATH]; char tkt_string[MAX_PATH]; int t; d = (k4_config_dlg_data *) (LONG_PTR) GetWindowLongPtr(hwnd, DWLP_USER); if (d == NULL) return TRUE; t = GetDlgItemText(hwnd, IDC_CFG_CACHE, wtkt_string, ARRAYLENGTH(wtkt_string)); if (t == 0) return TRUE; UnicodeStrToAnsi(tkt_string, sizeof(tkt_string), wtkt_string); if (_stricmp(tkt_string, d->tkt_string)) { pkrb_set_tkt_string(tkt_string); khc_write_string(csp_params, L"TktString", wtkt_string); khui_cfg_set_flags(d->node, KHUI_CNFLAG_APPLIED, KHUI_CNFLAG_APPLIED | KHUI_CNFLAG_MODIFIED); khm_krb4_list_tickets(); } else { khui_cfg_set_flags(d->node, 0, KHUI_CNFLAG_MODIFIED); } return TRUE; } break; case WM_DESTROY: d = (k4_config_dlg_data *) (LONG_PTR) GetWindowLongPtr(hwnd, DWLP_USER); if (d) { PFREE(d); SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR) 0); } break; } return FALSE; }
INT_PTR CALLBACK k5_ccconfig_dlgproc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { k5_ccc_dlg_data * d; switch(uMsg) { case WM_INITDIALOG: d = PMALLOC(sizeof(*d)); #ifdef DEBUG assert(d); #endif ZeroMemory(d, sizeof(*d)); k5_read_file_cc_data(&d->save); k5_copy_file_cc_data(&d->work, &d->save); d->node = (khui_config_node) lParam; #pragma warning(push) #pragma warning(disable: 4244) SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR) d); #pragma warning(pop) { LVCOLUMN lvc; HWND lv; wchar_t buf[256]; RECT r; lv = GetDlgItem(hwnd, IDC_CFG_FCLIST); #ifdef DEBUG assert(lv); #endif ZeroMemory(&lvc, sizeof(lvc)); lvc.mask = LVCF_TEXT | LVCF_WIDTH; LoadString(hResModule, IDS_CFG_FCTITLE, buf, ARRAYLENGTH(buf)); GetWindowRect(lv, &r); lvc.pszText = buf; lvc.cx = (r.right - r.left) * 9 / 10; ListView_InsertColumn(lv, 0, &lvc); } SendDlgItemMessage(hwnd, IDC_CFG_FCNAME, EM_SETLIMITTEXT, MAX_PATH - 1, 0); k5_ccc_update_ui(hwnd, d); break; case WM_COMMAND: d = (k5_ccc_dlg_data *) (DWORD_PTR) GetWindowLongPtr(hwnd, DWLP_USER); if (d == NULL) break; switch(wParam) { case MAKEWPARAM(IDC_CFG_ADD, BN_CLICKED): { wchar_t path[MAX_PATH]; wchar_t cpath[MAX_PATH]; khm_size i; GetDlgItemText(hwnd, IDC_CFG_FCNAME, cpath, ARRAYLENGTH(cpath)); PathCanonicalize(path, cpath); if (!*path) return TRUE; /* nothing to add */ for (i=0; i < d->work.n_file_ccs; i++) { if (!_wcsicmp(path, d->work.file_ccs[i].path)) { /* allow the user to correct case, as appropriate */ StringCbCopy(d->work.file_ccs[i].path, sizeof(d->work.file_ccs[i].path), path); k5_ccc_update_ui(hwnd, d); return TRUE; } } /* not there. we need to add. but check a few things first */ if (!PathFileExists(path)) { wchar_t title[64]; wchar_t text[128]; LoadString(hResModule, IDS_CFG_FCN_WARNING, title, ARRAYLENGTH(title)); LoadString(hResModule, IDS_CFG_FCN_W_NOTFOUND, text, ARRAYLENGTH(text)); #if _WIN32_WINNT >= 0x501 if (IS_COMMCTL6()) { EDITBALLOONTIP bt; bt.cbStruct = sizeof(bt); bt.pszTitle = title; bt.pszText = text; bt.ttiIcon = TTI_WARNING; SendDlgItemMessage(hwnd, IDC_CFG_FCNAME, EM_SHOWBALLOONTIP, 0, (LPARAM) &bt); } else { #endif MessageBox(hwnd, text, title, MB_OK | MB_ICONWARNING); #if _WIN32_WINNT >= 0x501 } #endif } else if (PathIsRelative(path)) { wchar_t title[64]; wchar_t text[128]; LoadString(hResModule, IDS_CFG_FCN_WARNING, title, ARRAYLENGTH(title)); LoadString(hResModule, IDS_CFG_FCN_W_RELATIVE, text, ARRAYLENGTH(text)); #if _WIN32_WINNT >= 0x501 if (IS_COMMCTL6()) { EDITBALLOONTIP bt; bt.cbStruct = sizeof(bt); bt.pszTitle = title; bt.pszText = text; bt.ttiIcon = TTI_WARNING; SendDlgItemMessage(hwnd, IDC_CFG_FCNAME, EM_SHOWBALLOONTIP, 0, (LPARAM) &bt); } else { #endif MessageBox(hwnd, text, title, MB_OK | MB_ICONWARNING); #if _WIN32_WINNT >= 0x501 } #endif } k5_add_file_cc(&d->work, path); k5_ccc_update_ui(hwnd, d); } return TRUE; case MAKEWPARAM(IDC_CFG_BROWSE, BN_CLICKED): { OPENFILENAME ofn; wchar_t path[MAX_PATH * 8]; wchar_t title[128]; ZeroMemory(&ofn, sizeof(ofn)); ZeroMemory(path, sizeof(path)); GetDlgItemText(hwnd, IDC_CFG_FCNAME, path, ARRAYLENGTH(path)); /* don't pass in invalid paths */ if (!PathFileExists(path)) *path = 0; ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = hwnd; ofn.lpstrFilter = L"All files\0*.*\0\0"; ofn.nFilterIndex = 1; ofn.lpstrFile = path; ofn.nMaxFile = ARRAYLENGTH(path); ofn.lpstrTitle = title; LoadString(hResModule, IDS_CFG_FCOPENTITLE, title, ARRAYLENGTH(title)); ofn.Flags = OFN_ALLOWMULTISELECT | OFN_DONTADDTORECENT | OFN_FORCESHOWHIDDEN | OFN_EXPLORER; if (GetOpenFileName(&ofn)) { wchar_t * p; wchar_t spath[MAX_PATH]; p = multi_string_next(path); if (p) { /* multi select */ for(;p && *p; p = multi_string_next(p)) { StringCbCopy(spath, sizeof(spath), path); PathAppend(spath, p); k5_add_file_cc(&d->work, spath); } } else { /* single select */ k5_add_file_cc(&d->work, path); } k5_ccc_update_ui(hwnd, d); } } return TRUE; case MAKEWPARAM(IDC_CFG_REMOVE, BN_CLICKED): { khm_size i; int lv_idx; HWND lv; wchar_t buf[MAX_PATH]; lv = GetDlgItem(hwnd, IDC_CFG_FCLIST); #ifdef DEBUG assert(lv); #endif lv_idx = -1; while((lv_idx = ListView_GetNextItem(lv, lv_idx, LVNI_SELECTED)) != -1) { ListView_GetItemText(lv, lv_idx, 0, buf, ARRAYLENGTH(buf)); for (i=0; i < d->work.n_file_ccs; i++) { if (!_wcsicmp(buf, d->work.file_ccs[i].path)) { k5_del_file_cc(&d->work, i); break; } } } k5_ccc_update_ui(hwnd, d); } return TRUE; case MAKEWPARAM(IDC_CFG_INCAPI, BN_CLICKED): case MAKEWPARAM(IDC_CFG_INCMSLSA, BN_CLICKED): k5_ccc_update_data(hwnd, &d->work); k5_ccc_update_ui(hwnd, d); return TRUE; } break; case WM_DESTROY: d = (k5_ccc_dlg_data *) (DWORD_PTR) GetWindowLongPtr(hwnd, DWLP_USER); if (d == NULL) break; k5_free_file_ccs(&d->work); k5_free_file_ccs(&d->save); PFREE(d); SetWindowLongPtr(hwnd, DWLP_USER, 0); return TRUE; case KHUI_WM_CFG_NOTIFY: d = (k5_ccc_dlg_data *) (DWORD_PTR) GetWindowLongPtr(hwnd, DWLP_USER); if (d == NULL) break; switch(HIWORD(wParam)) { case WMCFG_APPLY: if (k5_ccc_get_mod(d)) { k5_write_file_cc_data(&d->work); k5_copy_file_cc_data(&d->save, &d->work); khui_cfg_set_flags(d->node, KHUI_CNFLAG_APPLIED, KHUI_CNFLAG_APPLIED); k5_ccc_update_ui(hwnd, d); kmq_post_sub_msg(k5_sub, KMSG_CRED, KMSG_CRED_REFRESH, 0, 0); } break; } } return FALSE; }