/* perform shutdown operations */ static void khm_pre_shutdown(void) { khm_handle csp_cw = NULL; khm_handle credset = NULL; khm_int32 t; khm_size s; /* Check if we should destroy all credentials on exit... */ if (KHM_FAILED(khc_open_space(NULL, L"CredWindow", 0, &csp_cw))) return; if (KHM_FAILED(khc_read_int32(csp_cw, L"DestroyCredsOnExit", &t)) || !t) goto _cleanup; if (KHM_FAILED(kcdb_credset_create(&credset))) goto _cleanup; if (KHM_FAILED(kcdb_credset_extract(credset, NULL, NULL, KCDB_TYPE_INVALID))) goto _cleanup; if (KHM_FAILED(kcdb_credset_get_size(credset, &s)) || s == 0) goto _cleanup; kcdb_credset_apply(credset, mw_select_cred, NULL); khui_context_set(KHUI_SCOPE_GROUP, NULL, KCDB_CREDTYPE_INVALID, NULL, NULL, 0, credset); khm_cred_destroy_creds(TRUE, TRUE); _cleanup: if (credset) kcdb_credset_delete(credset); if (csp_cw) khc_close_space(csp_cw); }
static khm_int32 KHMAPI set_state_from_ui_thread(HWND hwnd_main, void * stuff) { struct state_data * d = (struct state_data *) stuff; wchar_t certs[COLLECT_STR_LEN] = L""; initialize_if_necessary(); if (d->credset) kcdb_credset_apply(d->credset, collect_kca_cert_names, certs); if (certs[0] == L'\0') { set_tooltip_and_icon(IDS_CRED_TT_NONE, NULL, IDI_CRED_NONE); return KHM_ERROR_SUCCESS; } set_tooltip_and_icon(IDS_CRED_TT_GOOD, certs, IDI_CRED_GOOD); return KHM_ERROR_SUCCESS; }
/* process KMSG_CRED messages */ khm_int32 KHMAPI afs_msg_cred(khm_int32 msg_subtype, khm_ui_4 uparam, void * vparam) { khm_int32 rv = KHM_ERROR_SUCCESS; switch(msg_subtype) { case KMSG_CRED_REFRESH: afs_list_tokens(); break; case KMSG_CRED_DESTROY_CREDS: { khui_action_context * ctx; ctx = (khui_action_context *) vparam; if (ctx->credset) { _begin_task(0); _report_cs0(KHERR_INFO, L"Destroying AFS Tokens"); _describe(); kcdb_credset_apply(ctx->credset, afs_cred_destroy_proc, NULL); _end_task(); } } break; default: if (IS_CRED_ACQ_MSG(msg_subtype)) return afs_msg_newcred(msg_subtype, uparam, vparam); } return rv; }
static khm_int32 KHMAPI set_state_from_ui_thread(HWND hwnd_main, void * stuff) { struct state_data * d = (struct state_data *) stuff; initialize_if_necessary(); switch (d->state) { case AFSICON_REPORT_TOKENS: { wchar_t cells[COLLECT_STR_LEN] = L""; kcdb_credset_apply(d->credset, collect_cell_names, cells); if (cells[0] == L'\0') { set_tooltip_and_icon(IDS_CRED_TT_NONE, NULL, IDI_CRED_NONE); break; } set_tooltip_and_icon(0, cells, IDI_CRED_OK); } break; case AFSICON_SERVICE_STOPPED: set_tooltip_and_icon(IDS_CRED_TT_NOS, NULL, IDI_CRED_SVCSTOP); break; case AFSICON_SERVICE_ERROR: set_tooltip_and_icon(IDS_CRED_TT_SERR, NULL, IDI_CRED_BROKEN); break; default: assert(FALSE); } (void) hwnd_main; /* unreferenced */ return KHM_ERROR_SUCCESS; }