コード例 #1
0
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);
    }
}
コード例 #2
0
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;
}
コード例 #3
0
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;
}