static void dump_wintrust_data(WINTRUST_DATA *data) { TRACE("%p\n", data); if (data) { TRACE("cbStruct: %d\n", data->cbStruct); TRACE("pPolicyCallbackData: %p\n", data->pPolicyCallbackData); TRACE("pSIPClientData: %p\n", data->pSIPClientData); TRACE("dwUIChoice: %d\n", data->dwUIChoice); TRACE("fdwRevocationChecks: %08x\n", data->fdwRevocationChecks); TRACE("dwUnionChoice: %d\n", data->dwUnionChoice); switch (data->dwUnionChoice) { case WTD_CHOICE_FILE: dump_file_info(data->u.pFile); break; case WTD_CHOICE_CATALOG: dump_catalog_info(data->u.pCatalog); break; case WTD_CHOICE_BLOB: dump_blob_info(data->u.pBlob); break; case WTD_CHOICE_SIGNER: dump_sgnr_info(data->u.pSgnr); break; case WTD_CHOICE_CERT: dump_cert_info(data->u.pCert); break; } TRACE("dwStateAction: %d\n", data->dwStateAction); TRACE("hWVTStateData: %p\n", data->hWVTStateData); TRACE("pwszURLReference: %s\n", debugstr_w(data->pwszURLReference)); TRACE("dwProvFlags: %08x\n", data->dwProvFlags); TRACE("dwUIContext: %d\n", data->dwUIContext); } }
static void do_query(DiscoverFnTy fn_discovery, struct syserv_mesg *mesg) { int ret; long k; if (mesg->len > inbuf_size) { inbuf_size += mesg->len; inbuf = (char *) realloc(inbuf, inbuf_size); if (inbuf == NULL) { err(1, "realloc for inbuf failed"); } } ret = read_all(fdin, inbuf, mesg->len); if (ret != SUCCESS) { err(1, "read from fdin failed"); } num_addrs = 0; total_num_addrs = 0; max_num_addrs = 0; sent_ok_mesg = 0; if (sigsetjmp(jmpbuf, 1) == 0) { // initial return on success jmpbuf_ok = 1; memset(&fnb_info, 0, sizeof(fnb_info)); code_ranges_reinit(); function_entries_reinit(); dump_file_info(inbuf, fn_discovery); jmpbuf_ok = 0; // pad list of addrs in case there are fewer function addrs than // size of map. fnb_info.num_entries = total_num_addrs; for (k = total_num_addrs; k < max_num_addrs; k++) { syserv_add_addr(NULL, 0); } if (num_addrs > 0) { ret = write_all(fdout, addr_buf, num_addrs * sizeof(void *)); if (ret != SUCCESS) { errx(1, "write to fdout failed"); } num_addrs = 0; } // add rusage maxrss to allow client to track memory usage. // units are Kbytes struct rusage usage; if (getrusage(RUSAGE_SELF, &usage) == 0) { fnb_info.memsize = usage.ru_maxrss; } else { fnb_info.memsize = -1; } fnb_info.magic = FNBOUNDS_MAGIC; fnb_info.status = SYSERV_OK; ret = write_all(fdout, &fnb_info, sizeof(fnb_info)); if (ret != SUCCESS) { err(1, "write to fdout failed"); } } else if (sent_ok_mesg) { // failed return from long jmp after we've told the client ok. // for now, close the pipe and exit. errx(1, "caught signal after telling client ok"); } else { // failed return from long jmp before we've told the client ok. // in this case, we can send an ERR mesg. ret = write_mesg(SYSERV_ERR, 0); if (ret != SUCCESS) { errx(1, "write to fdout failed"); } } }