}
}
- /* parse rcode, e.g. "noerror" or "nxdomain" */
- uint8_t rcode = ntohs(dns_header->flags) & 0x0F;
- if (rcode <= DNS_RCODE_NOTZONE) {
- SCLogDebug("rcode %u", rcode);
- if (tx != NULL)
- tx->rcode = rcode;
- } else {
- /* this is not invalid, rcodes can be user defined */
- SCLogDebug("unexpected DNS rcode %u", rcode);
+ /* if we previously didn't have a tx, it could have been created by the
+ * above code, so lets check again */
+ if (tx == NULL) {
+ tx = DNSTransactionFindByTxId(dns_state, ntohs(dns_header->tx_id));
}
+ if (tx != NULL) {
+ /* parse rcode, e.g. "noerror" or "nxdomain" */
+ uint8_t rcode = ntohs(dns_header->flags) & 0x0F;
+ if (rcode <= DNS_RCODE_NOTZONE) {
+ SCLogDebug("rcode %u", rcode);
+ tx->rcode = rcode;
+ } else {
+ /* this is not invalid, rcodes can be user defined */
+ SCLogDebug("unexpected DNS rcode %u", rcode);
+ }
- if (ntohs(dns_header->flags) & 0x0080) {
- SCLogDebug("recursion desired");
- if (tx != NULL)
+ if (ntohs(dns_header->flags) & 0x0080) {
+ SCLogDebug("recursion desired");
tx->recursion_desired = 1;
- }
+ }
- if (tx != NULL) {
tx->replied = 1;
}
-
SCReturnInt(1);
bad_data: