host_offset = 0;
record_type = 0;
ttl = 0;
+ options_offset = 0;
}
uint8_t get_state() const
void set_host_offset(uint16_t hostOffset)
{ host_offset = hostOffset; }
+ uint16_t get_options_offset() const
+ { return options_offset; }
+
+ void set_options_offset(uint16_t optionsOffset)
+ { options_offset = optionsOffset; }
+
protected:
uint8_t state = 0;
uint8_t response_type = 0;
uint32_t ttl = 0;
std::string host;
uint16_t host_offset = 0;
+ uint16_t options_offset = 0;
};
#endif
APPID_STATUS_CODE DnsValidator::add_dns_query_info(AppIdSession& asd, uint16_t id,
const uint8_t* host, uint8_t host_len, uint16_t host_offset, uint16_t record_type,
- AppidChangeBits& change_bits)
+ uint16_t options_offset, AppidChangeBits& change_bits)
{
AppIdDnsSession* dsession = asd.get_dns_session();
if (!dsession)
return APPID_NOMATCH;
dsession->set_host(new_host, change_bits);
dsession->set_host_offset(host_offset);
+ dsession->set_options_offset(options_offset);
snort_free(new_host);
}
}
case PATTERN_SOA_REC:
case PATTERN_NS_REC:
case PATTERN_ANY_REC:
- ret = add_dns_query_info(asd, id, host, host_len, host_offset, record_type, change_bits);
+ ret = add_dns_query_info(asd, id, host, host_len, host_offset, record_type, *offset, change_bits);
break;
case PATTERN_PTR_REC:
- ret = add_dns_query_info(asd, id, nullptr, 0, 0, record_type, change_bits);
+ ret = add_dns_query_info(asd, id, nullptr, 0, 0, record_type, *offset, change_bits);
break;
default:
break;
{
protected:
APPID_STATUS_CODE add_dns_query_info(AppIdSession&, uint16_t, const uint8_t*,
- uint8_t, uint16_t, uint16_t, AppidChangeBits&);
+ uint8_t, uint16_t, uint16_t, uint16_t, AppidChangeBits&);
APPID_STATUS_CODE add_dns_response_info(AppIdSession&, uint16_t, const uint8_t*,
uint8_t, uint16_t, uint8_t, uint32_t, AppidChangeBits&);
APPID_STATUS_CODE dns_validate_label(const uint8_t*, uint16_t&, uint16_t, uint8_t&, bool&);
char const* APPID_UT_INITIATOR_IP_ADDR = "192.168.0.3";
char const* APPID_ID_UT_DNS_HOST = "delphi.opendns.com";
+#define APPID_UT_DNS_OPTIONS_OFFSET 28
#define APPID_UT_DNS_HOST_OFFSET 22
#define APPID_UT_DNS_PATTERN_CNAME_REC 5
#define APPID_UT_DNS_NOERROR 0
{
host = (const char*) APPID_ID_UT_DNS_HOST;
host_offset = APPID_UT_DNS_HOST_OFFSET;
+ options_offset = APPID_UT_DNS_OPTIONS_OFFSET;
record_type = APPID_UT_DNS_PATTERN_CNAME_REC;
response_type = APPID_UT_DNS_NOERROR;
ttl = APPID_UT_DNS_TTL;
qoff = dsession->get_host_offset();
CHECK_TRUE(qoff == APPID_UT_DNS_HOST_OFFSET);
+ uint16_t opoff;
+ opoff = dsession->get_options_offset();
+ CHECK_TRUE(opoff == APPID_UT_DNS_OPTIONS_OFFSET);
+
uint16_t rt;
rt = dsession->get_record_type();
CHECK_TRUE(rt == APPID_UT_DNS_PATTERN_CNAME_REC);