Exemplo n.º 1
0
Arquivo: cvss.c Projeto: Shloub/burp
int get_vss(BFILE *bfd, struct sbuf *sb, char **vssdata, size_t *vlen,
	struct conf **confs)
{
	bsid sid;
	char *tmp=NULL;
	*vlen=0;
	while(!ensure_read(bfd, (char *)&sid, bsidsize, 0))
	{
		int64_t s=0;

		if(!(tmp=(char *)realloc_w(tmp, (*vlen)+bsidsize, __func__)))
			goto error;
		memcpy(tmp+(*vlen), &sid, bsidsize);
		(*vlen)+=bsidsize;

		// dwStreamId==1 means start of backup data, so finish.
		if(sid.dwStreamId==1)
		{
		//	logp("\n%s: %d + %d\n",
		//		path, (int)sid.Size, (int)sid.dwStreamNameSize);
			bfd->datalen=sid.Size;
			break;
		}

		// Otherwise, need to read in the rest of the VSS header.
		s=(sid.Size)+(sid.dwStreamNameSize);
		if(!(tmp=(char *)realloc_w(tmp, (*vlen)+s, __func__))
		  || ensure_read(bfd, tmp+(*vlen), s, 1))
		{
			goto error;
			return -1;
		}
		(*vlen)+=s;
	}
	if(!(*vssdata=(char *)realloc_w(*vssdata, (*vlen)+9, __func__)))
		goto error;
	snprintf(*vssdata, 9, "%c%08X", META_VSS, (unsigned int)*vlen);
	memcpy((*vssdata)+9, tmp, *vlen);
	(*vlen)+=9;
	return 0;
error:
	if(tmp) free(tmp);
	if(*vssdata)
	{
		free(*vssdata);
		*vssdata=NULL;
	}
	*vlen=0;
	return -1;
}
Exemplo n.º 2
0
int szb_read8(szb_t *buf) {
    int r;

    assert(buf != NULL);
    ensure_read(buf, 1);
    r = buf->data[buf->pos];
    buf->pos += 1;
    return r;
}
Exemplo n.º 3
0
static int dump_headers(FILE *inp)
{
        struct bsid sid;
	while(!ensure_read(&sid, inp))
        {
		size_t s=0;
		dump_sid(&sid);
		//if(sid.dwStreamId==1) break;
		s=(sid.Size)+(sid.dwStreamNameSize);
		if(skip_data(inp, s)) return -1;
	}
	return 0;
}
Exemplo n.º 4
0
static int main_work(FILE *inp, FILE *outp)
{
        struct bsid sid;
	while(!ensure_read(&sid, inp))
        {
		size_t s=0;
		s=(sid.Size)+(sid.dwStreamNameSize);
		if(sid.dwStreamId==1)
		{
			if(extract_data(inp, outp, s)) return 1;
			break;
		}
		else
		{
			if(skip_data(inp, s)) return -1;
		}
	}
	return 0;
}