static std::string fetch_payload(const nrpe::data::packet *p) { const char *data = payload_offset(p); return std::string(data); }
static int xc_dom_probe_bzimage_kernel(struct xc_dom_image *dom) { struct setup_header *hdr; int ret; if ( dom->kernel_blob == NULL ) { xc_dom_panic(XC_INTERNAL_ERROR, "%s: no kernel image loaded\n", __FUNCTION__); return -EINVAL; } if ( dom->kernel_size < sizeof(struct setup_header) ) { xc_dom_panic(XC_INTERNAL_ERROR, "%s: kernel image too small\n", __FUNCTION__); return -EINVAL; } hdr = dom->kernel_blob; if ( memcmp(&hdr->header, HDR_MAGIC, HDR_MAGIC_SZ) != 0 ) { xc_dom_panic(XC_INVALID_KERNEL, "%s: kernel is not a bzImage\n", __FUNCTION__); return -EINVAL; } if ( hdr->version < VERSION(2,8) ) { xc_dom_panic(XC_INVALID_KERNEL, "%s: boot protocol too old (%04x)\n", __FUNCTION__, hdr->version); return -EINVAL; } dom->kernel_blob = dom->kernel_blob + payload_offset(hdr); dom->kernel_size = hdr->payload_length; if ( memcmp(dom->kernel_blob, "\037\213", 2) == 0 ) { ret = xc_dom_try_gunzip(dom, &dom->kernel_blob, &dom->kernel_size); if ( ret == -1 ) { xc_dom_panic(XC_INVALID_KERNEL, "%s: unable to gzip decompress kernel\n", __FUNCTION__); return -EINVAL; } } else if ( memcmp(dom->kernel_blob, "\102\132\150", 3) == 0 ) { ret = xc_try_bzip2_decode(dom, &dom->kernel_blob, &dom->kernel_size); if ( ret < 0 ) { xc_dom_panic(XC_INVALID_KERNEL, "%s unable to BZIP2 decompress kernel", __FUNCTION__); return -EINVAL; } } else if ( memcmp(dom->kernel_blob, "\135\000", 2) == 0 ) { ret = xc_try_lzma_decode(dom, &dom->kernel_blob, &dom->kernel_size); if ( ret < 0 ) { xc_dom_panic(XC_INVALID_KERNEL, "%s unable to LZMA decompress kernel\n", __FUNCTION__); return -EINVAL; } } else { xc_dom_panic(XC_INVALID_KERNEL, "%s: unknown compression format\n", __FUNCTION__); return -EINVAL; } return elf_loader.probe(dom); }
static void update_payload(nrpe::data::packet *p, const std::string &payload) { char *data = payload_offset(p); strncpy(data, payload.c_str(), payload.length()); data[payload.length()] = 0; }