コード例 #1
0
ファイル: buf.c プロジェクト: aosm/Kerberos
KHMEXP khm_int32 KHMAPI kcdb_buf_get_attr_string(
    khm_handle  record,
    khm_int32   attr_id,
    wchar_t *   buffer,
    khm_size *  pcbbuf,
    khm_int32  flags)
{
    if(kcdb_cred_is_active_cred(record))
        return kcdb_cred_get_attr_string(record, attr_id, buffer, pcbbuf, flags);
    else if(kcdb_is_active_identity(record))
        return kcdb_identity_get_attr_string(record, attr_id, buffer, pcbbuf, flags);
    else
        return KHM_ERROR_INVALID_PARAM;
}
コード例 #2
0
ファイル: proppage.c プロジェクト: kkhan-ksl/kcacred
/* Dialog procedure for the property sheet.  This will run under the
   UI thread when a property sheet is being displayed for one of our
   credentials.. */
INT_PTR CALLBACK
pp_cred_dlg_proc(HWND hwnd,
                 UINT uMsg,
                 WPARAM wParam,
                 LPARAM lParam) {

    khui_property_sheet * ps;

    switch (uMsg) {
    case WM_INITDIALOG:
        {
            PROPSHEETPAGE * p;
            wchar_t notavailable[128];

            p = (PROPSHEETPAGE *) lParam;
            ps = (khui_property_sheet *) p->lParam;

#pragma warning(push)
#pragma warning(disable: 4244)
            SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR) ps);
#pragma warning(pop)

            if (ps->cred) {
                wchar_t tbuf[512];
                khm_size cb;
                khm_handle ident = NULL;

                LoadString(hResModule, IDS_NOTAVAILABLE,
                           notavailable, ARRAYLENGTH(notavailable));

                cb = sizeof(tbuf);
                if (KHM_SUCCEEDED(kcdb_cred_get_attr_string(ps->cred,
                                                            attr_id_subj_email,
                                                            tbuf,
                                                            &cb,
                                                            KCDB_TS_LONG))) {
                    SetDlgItemText(hwnd, IDC_PP_SUBJ_E, tbuf);
                } else {
                    SetDlgItemText(hwnd, IDC_PP_SUBJ_E, notavailable);
                }

                cb = sizeof(tbuf);
                if (KHM_SUCCEEDED(kcdb_cred_get_attr_string(ps->cred,
                                                            attr_id_subj_display,
                                                            tbuf,
                                                            &cb,
                                                            KCDB_TS_LONG))) {
                    SetDlgItemText(hwnd, IDC_PP_SUBJ_D, tbuf);
                } else {
                    SetDlgItemText(hwnd, IDC_PP_SUBJ_D, notavailable);
                }

                cb = sizeof(tbuf);
                if (KHM_SUCCEEDED(kcdb_cred_get_attr_string(ps->cred,
                                                            attr_id_auth_realm,
                                                            tbuf,
                                                            &cb,
                                                            KCDB_TS_LONG))) {
                    SetDlgItemText(hwnd, IDC_PP_REALM, tbuf);
                } else {
                    SetDlgItemText(hwnd, IDC_PP_REALM, notavailable);
                }

                cb = sizeof(tbuf);
                if (KHM_SUCCEEDED(kcdb_cred_get_attr_string(ps->cred,
                                                            attr_id_issuer_display,
                                                            tbuf,
                                                            &cb,
                                                            KCDB_TS_LONG))) {
                    SetDlgItemText(hwnd, IDC_PP_ISSUER, tbuf);
                } else {
                    SetDlgItemText(hwnd, IDC_PP_ISSUER, notavailable);
                }

                cb = sizeof(tbuf);
                if (KHM_SUCCEEDED(kcdb_cred_get_attr_string(ps->cred,
                                                            KCDB_ATTR_ISSUE,
                                                            tbuf,
                                                            &cb,
                                                            KCDB_TS_LONG))) {
                    SetDlgItemText(hwnd, IDC_PP_NOTBEFORE, tbuf);
                } else {
                    SetDlgItemText(hwnd, IDC_PP_NOTBEFORE, notavailable);
                }

                cb = sizeof(tbuf);
                if (KHM_SUCCEEDED(kcdb_cred_get_attr_string(ps->cred,
                                                            KCDB_ATTR_EXPIRE,
                                                            tbuf,
                                                            &cb,
                                                            KCDB_TS_LONG))) {
                    SetDlgItemText(hwnd, IDC_PP_NOTAFTER, tbuf);
                } else {
                    SetDlgItemText(hwnd, IDC_PP_NOTAFTER, notavailable);
                }

            } else {
#ifdef DEBUG
                /* we really shouldn't get here */
                DebugBreak();
#endif
            }
        }
        return FALSE;

    case WM_COMMAND:
        {
            HCERTSTORE     hStoreHandle = NULL;
            PCCERT_CONTEXT pCertContext = NULL;
            CERT_ID        certId;
            BYTE           sn_buf[1024];
            BYTE           issuer_buf[1024];
            CRYPTUI_VIEWCERTIFICATE_STRUCT vcs;
            wchar_t title_fmt[128];
            wchar_t cert_name[128];
            wchar_t title[256];
            BOOL b;

            khm_size       cb;

            if (wParam != MAKEWPARAM(IDC_PP_DETAILS, BN_CLICKED))
                break;

            ps = (khui_property_sheet *) GetWindowLongPtr(hwnd, DWLP_USER);

            if (ps == NULL || ps->cred == NULL) {
#ifdef DEBUG
                DebugBreak();
#endif
                break;
            }

            /* we need to display the standard UI for this certificate */

            ZeroMemory(&certId, sizeof(certId));

            cb = sizeof(sn_buf);
            if (KHM_FAILED(kcdb_cred_get_attr(ps->cred, attr_id_serial_number,
                                              NULL, sn_buf, &cb))) {
                break;
            }

            certId.IssuerSerialNumber.SerialNumber.cbData = (DWORD)cb;
            certId.IssuerSerialNumber.SerialNumber.pbData = sn_buf;

            cb = sizeof(issuer_buf);
            if (KHM_FAILED(kcdb_cred_get_attr(ps->cred, attr_id_issuer_name,
                                              NULL, issuer_buf, &cb))) {
                break;
            }

            certId.IssuerSerialNumber.Issuer.cbData = (DWORD)cb;
            certId.IssuerSerialNumber.Issuer.pbData = issuer_buf;

            certId.dwIdChoice = CERT_ID_ISSUER_SERIAL_NUMBER;

            if (!(hStoreHandle = CertOpenSystemStore(0, WIN32MYCERT_STORE))) {
                log_printf("Unable to access the system store");
                return TRUE;
            }

            pCertContext = CertFindCertificateInStore(hStoreHandle,
                                                      X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
                                                      0,
                                                      CERT_FIND_CERT_ID,
                                                      &certId,
                                                      NULL);

            if (!pCertContext) {
                /* the certificate was not found */
                EnableWindow(GetDlgItem(hwnd, IDC_PP_DETAILS), FALSE);
                goto _clean_dt;
            }

            ZeroMemory(&vcs, sizeof(vcs));

            vcs.dwSize = sizeof(vcs);
            vcs.hwndParent = hwnd;
            vcs.dwFlags = 0;

            LoadString(hResModule, IDS_PP_TITLE,
                       title_fmt, ARRAYLENGTH(title_fmt));
            cb = sizeof(cert_name);
            if (KHM_FAILED(kcdb_cred_get_attr(ps->cred, attr_id_auth_realm,
                                              NULL, cert_name, &cb))) {
                cb = sizeof(cert_name);
                if (KHM_FAILED(kcdb_cred_get_attr(ps->cred, attr_id_subj_email,
                                                  NULL, cert_name, &cb))) {
                    cb = sizeof(cert_name);
                    kcdb_get_resource(ps->cred, KCDB_RES_DISPLAYNAME, 0, NULL, NULL,
                                      cert_name, &cb);
                }
            }
            StringCbPrintf(title, sizeof(title), title_fmt, cert_name);

            vcs.szTitle = title;

            vcs.pCertContext = pCertContext;

            CryptUIDlgViewCertificate(&vcs, &b);


        _clean_dt:

            if (pCertContext) {
                CertFreeCertificateContext(pCertContext);
                pCertContext = NULL;
            }

            if (hStoreHandle) {
                CertCloseStore(hStoreHandle, 0);
                hStoreHandle = NULL;
            }

            return TRUE;
        }
        break;
    }

    return FALSE;
}
コード例 #3
0
ファイル: krb5props.c プロジェクト: Brainiarc7/pbis
/* Property page

   Runs in the context of the UI thread.
   */
INT_PTR CALLBACK krb5_pp_proc(HWND hwnd,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam
    )
{
    switch(uMsg) {
    case WM_INITDIALOG:
        {
            khui_property_sheet * s;
            PROPSHEETPAGE * p;
            wchar_t buf[512];
            wchar_t unavailable[64];
            khm_size cbsize;
            khm_int32 rv;
            khm_int32 tflags;

            p = (PROPSHEETPAGE *) lParam;
            s = (khui_property_sheet *) p->lParam;

#pragma warning(push)
#pragma warning(disable: 4244)
            SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR) s);
#pragma warning(pop)

            LoadString(hResModule, IDS_UNAVAILABLE,
                       unavailable, ARRAYLENGTH(unavailable));

            if(s->cred) {
                cbsize = sizeof(buf);
                kcdb_cred_get_name(s->cred, buf, &cbsize);
                SetDlgItemText(hwnd, IDC_PPK5_NAME, buf);

                cbsize = sizeof(buf);
                rv = kcdb_cred_get_attr_string(s->cred,
                                               KCDB_ATTR_ISSUE,
                                               buf, &cbsize, 0);
                if (KHM_SUCCEEDED(rv))
                    SetDlgItemText(hwnd, IDC_PPK5_ISSUE, buf);
                else
                    SetDlgItemText(hwnd, IDC_PPK5_ISSUE, unavailable);

                cbsize = sizeof(buf);
                rv = kcdb_cred_get_attr_string(s->cred,
                                               KCDB_ATTR_EXPIRE,
                                               buf, &cbsize, 0);
                if (KHM_SUCCEEDED(rv))
                    SetDlgItemText(hwnd, IDC_PPK5_VALID, buf);
                else
                    SetDlgItemText(hwnd, IDC_PPK5_VALID, unavailable);

                cbsize = sizeof(buf);
                rv = kcdb_cred_get_attr_string(s->cred,
                                               KCDB_ATTR_RENEW_EXPIRE,
                                               buf, &cbsize, 0);
                if (KHM_SUCCEEDED(rv))
                    SetDlgItemText(hwnd, IDC_PPK5_RENEW, buf);
                else
                    SetDlgItemText(hwnd, IDC_PPK5_RENEW, unavailable);

                tflags = 0;
                cbsize = sizeof(tflags);
                rv = kcdb_cred_get_attr(s->cred,
                                        attr_id_krb5_flags,
                                        NULL,
                                        &tflags,
                                        &cbsize);
                if (KHM_SUCCEEDED(rv)) {

#define ADDBITFLAG(f,s) \
   if (tflags & f) {    \
     LoadString(hResModule, s, buf, ARRAYLENGTH(buf)); \
     SendDlgItemMessage(hwnd, IDC_PPK5_FLAGS, LB_ADDSTRING, 0, (LPARAM) buf); \
   }

                    ADDBITFLAG(TKT_FLG_FORWARDABLE, IDS_FLG_FORWARDABLE);
                    ADDBITFLAG(TKT_FLG_FORWARDED, IDS_FLG_FORWARDED);
                    ADDBITFLAG(TKT_FLG_PROXIABLE, IDS_FLG_PROXIABLE);
                    ADDBITFLAG(TKT_FLG_PROXY, IDS_FLG_PROXY);
                    ADDBITFLAG(TKT_FLG_MAY_POSTDATE, IDS_FLG_MAY_POSTDATE);
                    ADDBITFLAG(TKT_FLG_POSTDATED, IDS_FLG_POSTDATED);
                    ADDBITFLAG(TKT_FLG_INVALID, IDS_FLG_INVALID);
                    ADDBITFLAG(TKT_FLG_RENEWABLE, IDS_FLG_RENEWABLE);
                    ADDBITFLAG(TKT_FLG_INITIAL, IDS_FLG_INITIAL);
                    ADDBITFLAG(TKT_FLG_PRE_AUTH, IDS_FLG_PRE_AUTH);
                    ADDBITFLAG(TKT_FLG_HW_AUTH, IDS_FLG_HW_AUTH);
                    ADDBITFLAG(TKT_FLG_TRANSIT_POLICY_CHECKED, IDS_FLG_TRANSIT_POL);
                    ADDBITFLAG(TKT_FLG_OK_AS_DELEGATE, IDS_FLG_OK_DELEGATE);
                    ADDBITFLAG(TKT_FLG_ANONYMOUS, IDS_FLG_ANONYMOUS);

#undef ADDBITFLAG

                }
            } else {
#ifdef DEBUG
                assert(FALSE);
#endif
            }
        }
        return FALSE;
    }

    return FALSE;
}