|
Lines 135-141
Link Here
|
| 135 |
|
135 |
|
| 136 |
for (serv = daemon->servers; serv; serv=serv->next) |
136 |
for (serv = daemon->servers; serv; serv=serv->next) |
| 137 |
/* domain matches take priority over NODOTS matches */ |
137 |
/* domain matches take priority over NODOTS matches */ |
| 138 |
if ((serv->flags & SERV_FOR_NODOTS) && *type != SERV_HAS_DOMAIN && !strchr(qdomain, '.')) |
138 |
if ((serv->flags & SERV_FOR_NODOTS) && *type != SERV_HAS_DOMAIN && !strchr(qdomain, '.') && namelen != 0) |
| 139 |
{ |
139 |
{ |
| 140 |
unsigned short sflag = serv->addr.sa.sa_family == AF_INET ? F_IPV4 : F_IPV6; |
140 |
unsigned short sflag = serv->addr.sa.sa_family == AF_INET ? F_IPV4 : F_IPV6; |
| 141 |
*type = SERV_FOR_NODOTS; |
141 |
*type = SERV_FOR_NODOTS; |
|
Lines 195-201
Link Here
|
| 195 |
else |
195 |
else |
| 196 |
log_query(F_CONFIG | F_FORWARD | flags, qdomain, *addrpp, 0, NULL, 0); |
196 |
log_query(F_CONFIG | F_FORWARD | flags, qdomain, *addrpp, 0, NULL, 0); |
| 197 |
} |
197 |
} |
| 198 |
else if (qtype && (daemon->options & OPT_NODOTS_LOCAL) && !strchr(qdomain, '.')) |
198 |
else if (qtype && (daemon->options & OPT_NODOTS_LOCAL) && !strchr(qdomain, '.') && namelen != 0) |
| 199 |
flags = F_NXDOMAIN; |
199 |
flags = F_NXDOMAIN; |
| 200 |
|
200 |
|
| 201 |
if (flags == F_NXDOMAIN && check_for_local_domain(qdomain, now, daemon)) |
201 |
if (flags == F_NXDOMAIN && check_for_local_domain(qdomain, now, daemon)) |
|
Lines 216-228
Link Here
|
| 216 |
char *domain = NULL; |
216 |
char *domain = NULL; |
| 217 |
int type = 0; |
217 |
int type = 0; |
| 218 |
struct all_addr *addrp = NULL; |
218 |
struct all_addr *addrp = NULL; |
|
|
219 |
unsigned int crc = questions_crc(header, (unsigned int)plen, daemon->namebuff); |
| 219 |
unsigned short flags = 0; |
220 |
unsigned short flags = 0; |
| 220 |
unsigned short gotname = extract_request(header, (unsigned int)plen, daemon->namebuff, NULL); |
221 |
unsigned short gotname = extract_request(header, (unsigned int)plen, daemon->namebuff, NULL); |
| 221 |
struct server *start = NULL; |
222 |
struct server *start = NULL; |
| 222 |
unsigned int crc = questions_crc(header,(unsigned int)plen, daemon->namebuff); |
223 |
|
| 223 |
|
224 |
/* may be no servers available. */ |
| 224 |
/* may be recursion not speced or no servers available. */ |
225 |
if (!daemon->servers) |
| 225 |
if (!header->rd || !daemon->servers) |
|
|
| 226 |
forward = NULL; |
226 |
forward = NULL; |
| 227 |
else if ((forward = lookup_frec_by_sender(ntohs(header->id), udpaddr, crc))) |
227 |
else if ((forward = lookup_frec_by_sender(ntohs(header->id), udpaddr, crc))) |
| 228 |
{ |
228 |
{ |