Commit b9eb9201 authored by Chen Wei's avatar Chen Wei

check_server print out server for special domains

parent eceb5eef
......@@ -35,7 +35,6 @@ rules.
### Issues
* `tcp_request` not working
* `check_server` not print out server supported domains properly
[Contact me](mailto: weichen302@gmail.com)
......@@ -18,7 +18,6 @@
#include "dnsmasq.h"
#define MAXLABELS 128
#define OPEN_ADDRESSING_MAXJUMP 7 /* no reason, just like 7 */
#define OPEN_ADDRESSING_DEFAULT_SLOT 4
#define FNV1_32A_INIT ((uint32_t)0x811c9dc5)
......@@ -466,3 +465,48 @@ struct server *lookup_or_install_new_server(struct server *serv)
return res;
}
/* print the daemon->dh_special_domains tree recursively
*
* do we really need it? */
void print_server_special_domains (struct dict_node *node,
char *parents[], int current_level)
{
struct dict_node *np;
struct special_domain *obj;
char buf[MAXDNAME];
char ip_buf[16];
int j, level;
int port = 0;
uint32_t i;
level = current_level + 1;
if (node->label != NULL)
{
parents[level] = node->label;
if (node->obj != NULL)
{
obj = (struct special_domain *) node->obj;
if (obj->domain_flags & SERV_HAS_DOMAIN)
{
memset (buf, 0, MAXDNAME);
for (j = level; j > 1; j--)
{
strcat (buf, parents[j]);
strcat (buf, ".");
}
buf[strlen (buf) - 1] = '\0';
port = prettyprint_addr (&obj->server->addr, ip_buf);
my_syslog(LOG_INFO, _("using nameserver %s#%d for domain %s"),
ip_buf, port, buf);
}
}
}
if (node->sub_count > 0)
{
for (i = 0; i < node->sub_slots; i++)
if ((np = node->sub[i]) != NULL)
print_server_special_domains (np, parents, level);
}
}
......@@ -1400,6 +1400,7 @@ int add_to_ipset(const char *setname, const struct all_addr *ipaddr, int flags,
#endif
/* dict.c */
#define MAXLABELS 128
struct dict_node *new_dictnode (char *label, int len);
struct dict_node *add_or_lookup_dictnode (struct dict_node *node, char *label);
struct dict_node *lookup_domain(struct dict_node *root, char *domain);
......@@ -1407,6 +1408,8 @@ struct dict_node *match_domain(struct dict_node *root, char *domain);
struct dict_node *add_or_lookup_domain (struct dict_node *root, char *domain);
struct server *lookup_or_install_new_server(struct server *serv);
void free_dicttree (struct dict_node *node);
void print_server_special_domains(struct dict_node *node,
char *parents[], int current_level);
/* helper.c */
#if defined(HAVE_SCRIPT)
......
......@@ -1422,6 +1422,10 @@ void check_servers(void)
if (!option_bool(OPT_NOWILD))
enumerate_interfaces(0);
char *levels[MAXLABELS];
struct dict_node *root = daemon->dh_special_domains;
print_server_special_domains(root, levels, 0);
for (serv = daemon->servers; serv; serv = serv->next)
{
if (!(serv->flags & (SERV_LITERAL_ADDRESS | SERV_NO_ADDR | SERV_USE_RESOLV | SERV_NO_REBIND)))
......@@ -1461,15 +1465,11 @@ void check_servers(void)
if (!(serv->flags & SERV_NO_REBIND))
{
if (serv->flags & (SERV_HAS_DOMAIN | SERV_FOR_NODOTS | SERV_USE_RESOLV))
if (serv->flags & (SERV_FOR_NODOTS | SERV_USE_RESOLV))
{
char *s1, *s2;
if (!(serv->flags & SERV_HAS_DOMAIN))
s1 = _("unqualified"), s2 = _("names");
/*
else if (strlen(serv->domain) == 0)
s1 = _("default"), s2 = "";
*/
else
s1 = _("domain"), s2 = serv->domain;
......
......@@ -2369,7 +2369,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
newserv.flags |= SERV_HAS_DOMAIN;
obj->server = lookup_or_install_new_server (&newserv);
obj->server->domain = NULL;
obj->domain_flags |= SERV_HAS_DOMAIN;
}
if (option == LOPT_NO_REBIND)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment