|
|
|
@ -239,20 +239,29 @@ static uint32_t DCERPCParseBINDCTXItem(DCERPC *dcerpc, uint8_t *input, uint32_t
|
|
|
|
|
dcerpc->dcerpcbindbindack.versionminor |= *(p + 23) << 8;
|
|
|
|
|
//if (dcerpc->dcerpcbindbindack.ctxid == dcerpc->dcerpcbindbindack.numctxitems
|
|
|
|
|
// - dcerpc->dcerpcbindbindack.numctxitemsleft) {
|
|
|
|
|
dcerpc->dcerpcbindbindack.uuid_entry = (DCERPCUuidEntry *)
|
|
|
|
|
SCCalloc(1, sizeof(DCERPCUuidEntry));
|
|
|
|
|
|
|
|
|
|
dcerpc->dcerpcbindbindack.uuid_entry = (DCERPCUuidEntry *)SCCalloc(1, sizeof(DCERPCUuidEntry));
|
|
|
|
|
if (dcerpc->dcerpcbindbindack.uuid_entry == NULL) {
|
|
|
|
|
SCLogDebug("UUID Entry is NULL");
|
|
|
|
|
SCReturnUInt(0);
|
|
|
|
|
} else {
|
|
|
|
|
dcerpc->dcerpcbindbindack.uuid_entry->internal_id =
|
|
|
|
|
dcerpc->dcerpcbindbindack.uuid_internal_id++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dcerpc->dcerpcbindbindack.uuid_entry->internal_id = dcerpc->dcerpcbindbindack.uuid_internal_id++;
|
|
|
|
|
|
|
|
|
|
memcpy(dcerpc->dcerpcbindbindack.uuid_entry->uuid,
|
|
|
|
|
dcerpc->dcerpcbindbindack.uuid,
|
|
|
|
|
sizeof(dcerpc->dcerpcbindbindack.uuid));
|
|
|
|
|
|
|
|
|
|
dcerpc->dcerpcbindbindack.uuid_entry->ctxid = dcerpc->dcerpcbindbindack.ctxid;
|
|
|
|
|
dcerpc->dcerpcbindbindack.uuid_entry->version = dcerpc->dcerpcbindbindack.version;
|
|
|
|
|
dcerpc->dcerpcbindbindack.uuid_entry->versionminor = dcerpc->dcerpcbindbindack.versionminor;
|
|
|
|
|
|
|
|
|
|
/* store the first frag flag in the uuid as pfc_flags will
|
|
|
|
|
* be overwritten by new packets. */
|
|
|
|
|
if (dcerpc->dcerpchdr.pfc_flags & PFC_FIRST_FRAG) {
|
|
|
|
|
dcerpc->dcerpcbindbindack.uuid_entry->flags |= DCERPC_UUID_ENTRY_FLAG_FF;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TAILQ_INSERT_HEAD(&dcerpc->dcerpcbindbindack.uuid_list,
|
|
|
|
|
dcerpc->dcerpcbindbindack.uuid_entry,
|
|
|
|
|
next);
|
|
|
|
@ -265,7 +274,7 @@ static uint32_t DCERPCParseBINDCTXItem(DCERPC *dcerpc, uint8_t *input, uint32_t
|
|
|
|
|
dcerpc->bytesprocessed += (44);
|
|
|
|
|
dcerpc->dcerpcbindbindack.ctxbytesprocessed += (44);
|
|
|
|
|
SCReturnUInt(44U);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//} else {
|
|
|
|
|
// SCLogDebug("ctxitem %u, expected %u\n", dcerpc->dcerpcbindbindack.ctxid,
|
|
|
|
|
// dcerpc->dcerpcbindbindack.numctxitems - dcerpc->dcerpcbindbindack.numctxitemsleft);
|
|
|
|
@ -455,7 +464,8 @@ static uint32_t DCERPCParseBINDCTXItem(DCERPC *dcerpc, uint8_t *input, uint32_t
|
|
|
|
|
if (dcerpc->dcerpcbindbindack.uuid_entry == NULL) {
|
|
|
|
|
SCLogDebug("UUID Entry is NULL\n");
|
|
|
|
|
SCReturnUInt(0);
|
|
|
|
|
} else {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dcerpc->dcerpcbindbindack.uuid_entry->internal_id =
|
|
|
|
|
dcerpc->dcerpcbindbindack.uuid_internal_id++;
|
|
|
|
|
memcpy(dcerpc->dcerpcbindbindack.uuid_entry->uuid,
|
|
|
|
@ -464,6 +474,13 @@ static uint32_t DCERPCParseBINDCTXItem(DCERPC *dcerpc, uint8_t *input, uint32_t
|
|
|
|
|
dcerpc->dcerpcbindbindack.uuid_entry->ctxid = dcerpc->dcerpcbindbindack.ctxid;
|
|
|
|
|
dcerpc->dcerpcbindbindack.uuid_entry->version = dcerpc->dcerpcbindbindack.version;
|
|
|
|
|
dcerpc->dcerpcbindbindack.uuid_entry->versionminor = dcerpc->dcerpcbindbindack.versionminor;
|
|
|
|
|
|
|
|
|
|
/* store the first frag flag in the uuid as pfc_flags will
|
|
|
|
|
* be overwritten by new packets. */
|
|
|
|
|
if (dcerpc->dcerpchdr.pfc_flags & PFC_FIRST_FRAG) {
|
|
|
|
|
dcerpc->dcerpcbindbindack.uuid_entry->flags |= DCERPC_UUID_ENTRY_FLAG_FF;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TAILQ_INSERT_HEAD(&dcerpc->dcerpcbindbindack.uuid_list,
|
|
|
|
|
dcerpc->dcerpcbindbindack.uuid_entry,
|
|
|
|
|
next);
|
|
|
|
@ -476,7 +493,7 @@ static uint32_t DCERPCParseBINDCTXItem(DCERPC *dcerpc, uint8_t *input, uint32_t
|
|
|
|
|
dcerpc->bytesprocessed += (p - input);
|
|
|
|
|
dcerpc->dcerpcbindbindack.ctxbytesprocessed += (p - input);
|
|
|
|
|
SCReturnUInt((uint32_t)(p - input));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//} else {
|
|
|
|
|
// SCLogDebug("ctxitem %u, expected %u\n", dcerpc->dcerpcbindbindack.ctxid,
|
|
|
|
|
// dcerpc->dcerpcbindbindack.numctxitems - dcerpc->dcerpcbindbindack.numctxitemsleft);
|
|
|
|
|