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. ...@@ -35,7 +35,6 @@ rules.
### Issues ### Issues
* `tcp_request` not working * `tcp_request` not working
* `check_server` not print out server supported domains properly
[Contact me](mailto: weichen302@gmail.com) [Contact me](mailto: weichen302@gmail.com)
...@@ -18,7 +18,6 @@ ...@@ -18,7 +18,6 @@
#include "dnsmasq.h" #include "dnsmasq.h"
#define MAXLABELS 128
#define OPEN_ADDRESSING_MAXJUMP 7 /* no reason, just like 7 */ #define OPEN_ADDRESSING_MAXJUMP 7 /* no reason, just like 7 */
#define OPEN_ADDRESSING_DEFAULT_SLOT 4 #define OPEN_ADDRESSING_DEFAULT_SLOT 4
#define FNV1_32A_INIT ((uint32_t)0x811c9dc5) #define FNV1_32A_INIT ((uint32_t)0x811c9dc5)
...@@ -466,3 +465,48 @@ struct server *lookup_or_install_new_server(struct server *serv) ...@@ -466,3 +465,48 @@ struct server *lookup_or_install_new_server(struct server *serv)
return res; 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, ...@@ -1400,6 +1400,7 @@ int add_to_ipset(const char *setname, const struct all_addr *ipaddr, int flags,
#endif #endif
/* dict.c */ /* dict.c */
#define MAXLABELS 128
struct dict_node *new_dictnode (char *label, int len); 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 *add_or_lookup_dictnode (struct dict_node *node, char *label);
struct dict_node *lookup_domain(struct dict_node *root, char *domain); 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); ...@@ -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 dict_node *add_or_lookup_domain (struct dict_node *root, char *domain);
struct server *lookup_or_install_new_server(struct server *serv); struct server *lookup_or_install_new_server(struct server *serv);
void free_dicttree (struct dict_node *node); void free_dicttree (struct dict_node *node);
void print_server_special_domains(struct dict_node *node,
char *parents[], int current_level);
/* helper.c */ /* helper.c */
#if defined(HAVE_SCRIPT) #if defined(HAVE_SCRIPT)
......
...@@ -1422,6 +1422,10 @@ void check_servers(void) ...@@ -1422,6 +1422,10 @@ void check_servers(void)
if (!option_bool(OPT_NOWILD)) if (!option_bool(OPT_NOWILD))
enumerate_interfaces(0); 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) for (serv = daemon->servers; serv; serv = serv->next)
{ {
if (!(serv->flags & (SERV_LITERAL_ADDRESS | SERV_NO_ADDR | SERV_USE_RESOLV | SERV_NO_REBIND))) if (!(serv->flags & (SERV_LITERAL_ADDRESS | SERV_NO_ADDR | SERV_USE_RESOLV | SERV_NO_REBIND)))
...@@ -1461,15 +1465,11 @@ void check_servers(void) ...@@ -1461,15 +1465,11 @@ void check_servers(void)
if (!(serv->flags & SERV_NO_REBIND)) 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; char *s1, *s2;
if (!(serv->flags & SERV_HAS_DOMAIN)) if (!(serv->flags & SERV_HAS_DOMAIN))
s1 = _("unqualified"), s2 = _("names"); s1 = _("unqualified"), s2 = _("names");
/*
else if (strlen(serv->domain) == 0)
s1 = _("default"), s2 = "";
*/
else else
s1 = _("domain"), s2 = serv->domain; s1 = _("domain"), s2 = serv->domain;
......
...@@ -2369,7 +2369,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma ...@@ -2369,7 +2369,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
newserv.flags |= SERV_HAS_DOMAIN; newserv.flags |= SERV_HAS_DOMAIN;
obj->server = lookup_or_install_new_server (&newserv); obj->server = lookup_or_install_new_server (&newserv);
obj->server->domain = NULL; obj->server->domain = NULL;
obj->domain_flags |= SERV_HAS_DOMAIN;
} }
if (option == LOPT_NO_REBIND) 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