|
|
@@ -3582,26 +3582,29 @@ static int _dns_server_ip_rule_check(struct dns_request *request, struct dns_ip_
|
|
|
goto rule_not_found;
|
|
|
}
|
|
|
|
|
|
- rule_flags = container_of(ip_rules->rules[IP_RULE_FLAGS], struct ip_rule_flags, head);
|
|
|
- if (rule_flags != NULL) {
|
|
|
- if (rule_flags->flags & IP_RULE_FLAG_BOGUS) {
|
|
|
- request->rcode = DNS_RC_NXDOMAIN;
|
|
|
- request->has_soa = 1;
|
|
|
- request->force_soa = 1;
|
|
|
- _dns_server_setup_soa(request);
|
|
|
- goto nxdomain;
|
|
|
- }
|
|
|
+ struct dns_ip_rule *rule = ip_rules->rules[IP_RULE_FLAGS];
|
|
|
+ if (rule != NULL) {
|
|
|
+ rule_flags = container_of(rule, struct ip_rule_flags, head);
|
|
|
+ if (rule_flags != NULL) {
|
|
|
+ if (rule_flags->flags & IP_RULE_FLAG_BOGUS) {
|
|
|
+ request->rcode = DNS_RC_NXDOMAIN;
|
|
|
+ request->has_soa = 1;
|
|
|
+ request->force_soa = 1;
|
|
|
+ _dns_server_setup_soa(request);
|
|
|
+ goto nxdomain;
|
|
|
+ }
|
|
|
|
|
|
- /* blacklist-ip */
|
|
|
- if (rule_flags->flags & IP_RULE_FLAG_BLACKLIST) {
|
|
|
- if (result_flag & DNSSERVER_FLAG_BLACKLIST_IP) {
|
|
|
- goto match;
|
|
|
+ /* blacklist-ip */
|
|
|
+ if (rule_flags->flags & IP_RULE_FLAG_BLACKLIST) {
|
|
|
+ if (result_flag & DNSSERVER_FLAG_BLACKLIST_IP) {
|
|
|
+ goto match;
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- /* ignore-ip */
|
|
|
- if (rule_flags->flags & IP_RULE_FLAG_IP_IGNORE) {
|
|
|
- goto skip;
|
|
|
+ /* ignore-ip */
|
|
|
+ if (rule_flags->flags & IP_RULE_FLAG_IP_IGNORE) {
|
|
|
+ goto skip;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -4373,7 +4376,10 @@ static int _dns_server_get_answer(struct dns_server_post_context *context)
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- _dns_server_context_add_ip(context, addr_map->ip_addr);
|
|
|
+ if (addr_map != NULL) {
|
|
|
+ _dns_server_context_add_ip(context, addr_map->ip_addr);
|
|
|
+ }
|
|
|
+
|
|
|
if (request->has_ip == 1) {
|
|
|
continue;
|
|
|
}
|