conf: fix local domain handling issues
This commit is contained in:
@@ -2123,26 +2123,42 @@ static int _config_log_level(void *data, int argc, char *argv[])
|
|||||||
static void _config_setup_smartdns_domain(void)
|
static void _config_setup_smartdns_domain(void)
|
||||||
{
|
{
|
||||||
char hostname[DNS_MAX_CNAME_LEN];
|
char hostname[DNS_MAX_CNAME_LEN];
|
||||||
/* get local host name */
|
char domainname[DNS_MAX_CNAME_LEN];
|
||||||
if (getdomainname(hostname, DNS_MAX_CNAME_LEN) != 0) {
|
|
||||||
gethostname(hostname, DNS_MAX_CNAME_LEN);
|
hostname[0] = '\0';
|
||||||
|
domainname[0] = '\0';
|
||||||
|
|
||||||
|
/* get local domain name */
|
||||||
|
if (getdomainname(domainname, DNS_MAX_CNAME_LEN - 1) == 0) {
|
||||||
|
/* check domain is valid */
|
||||||
|
if (strncmp(domainname, "(none)", DNS_MAX_CNAME_LEN - 1) == 0) {
|
||||||
|
domainname[0] = '\0';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* get host name again */
|
if (gethostname(hostname, DNS_MAX_CNAME_LEN - 1) == 0) {
|
||||||
if (strncmp(hostname, "(none)", DNS_MAX_CNAME_LEN - 1) == 0) {
|
/* check hostname is valid */
|
||||||
gethostname(hostname, DNS_MAX_CNAME_LEN);
|
if (strncmp(hostname, "(none)", DNS_MAX_CNAME_LEN - 1) == 0) {
|
||||||
|
hostname[0] = '\0';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if hostname is (none), return smartdns */
|
if (dns_conf_resolv_hostname == 1) {
|
||||||
if (strncmp(hostname, "(none)", DNS_MAX_CNAME_LEN - 1) == 0) {
|
/* add hostname to rule table */
|
||||||
safe_strncpy(hostname, "smartdns", DNS_MAX_CNAME_LEN);
|
if (hostname[0] != '\0') {
|
||||||
|
_config_domain_rule_flag_set(hostname, DOMAIN_FLAG_SMARTDNS_DOMAIN, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* add domainname to rule table */
|
||||||
|
if (domainname[0] != '\0') {
|
||||||
|
char full_domain[DNS_MAX_CNAME_LEN];
|
||||||
|
snprintf(full_domain, DNS_MAX_CNAME_LEN, "%.64s.%.128s", hostname, domainname);
|
||||||
|
_config_domain_rule_flag_set(full_domain, DOMAIN_FLAG_SMARTDNS_DOMAIN, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dns_conf_resolv_hostname == 1 && hostname[0] != '\0') {
|
/* add server name to rule table */
|
||||||
_config_domain_rule_flag_set(hostname, DOMAIN_FLAG_SMARTDNS_DOMAIN, 0);
|
if (dns_conf_server_name[0] != '\0' && strncmp(dns_conf_server_name, "smartdns", DNS_MAX_CNAME_LEN - 1) != 0) {
|
||||||
}
|
|
||||||
|
|
||||||
if (dns_conf_server_name[0] != '\0') {
|
|
||||||
_config_domain_rule_flag_set(dns_conf_server_name, DOMAIN_FLAG_SMARTDNS_DOMAIN, 0);
|
_config_domain_rule_flag_set(dns_conf_server_name, DOMAIN_FLAG_SMARTDNS_DOMAIN, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3161,33 +3161,40 @@ static int _dns_server_process_local_ptr(struct dns_request *request)
|
|||||||
goto errout;
|
goto errout;
|
||||||
}
|
}
|
||||||
|
|
||||||
char hostname[DNS_MAX_CNAME_LEN];
|
char full_hostname[DNS_MAX_CNAME_LEN];
|
||||||
if (dns_conf_server_name[0] == 0) {
|
if (dns_conf_server_name[0] == 0) {
|
||||||
/* get local host name */
|
char hostname[DNS_MAX_CNAME_LEN];
|
||||||
if (getdomainname(hostname, DNS_MAX_CNAME_LEN) != 0) {
|
char domainname[DNS_MAX_CNAME_LEN];
|
||||||
if (gethostname(hostname, DNS_MAX_CNAME_LEN) != 0) {
|
|
||||||
return -1;
|
/* get local domain name */
|
||||||
|
if (getdomainname(domainname, DNS_MAX_CNAME_LEN - 1) == 0) {
|
||||||
|
/* check domain is valid */
|
||||||
|
if (strncmp(domainname, "(none)", DNS_MAX_CNAME_LEN - 1) == 0) {
|
||||||
|
domainname[0] = '\0';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* get host name again */
|
if (gethostname(hostname, DNS_MAX_CNAME_LEN - 1) == 0) {
|
||||||
if (strncmp(hostname, "(none)", DNS_MAX_CNAME_LEN - 1) == 0) {
|
/* check hostname is valid */
|
||||||
if (gethostname(hostname, DNS_MAX_CNAME_LEN) != 0) {
|
if (strncmp(hostname, "(none)", DNS_MAX_CNAME_LEN - 1) == 0) {
|
||||||
return -1;
|
hostname[0] = '\0';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if hostname is (none), return smartdns */
|
if (hostname[0] != '\0' && domainname[0] != '\0') {
|
||||||
if (strncmp(hostname, "(none)", DNS_MAX_CNAME_LEN - 1) == 0) {
|
snprintf(full_hostname, sizeof(full_hostname), "%.64s.%.128s", hostname, domainname);
|
||||||
safe_strncpy(hostname, "smartdns", DNS_MAX_CNAME_LEN);
|
} else if (hostname[0] != '\0') {
|
||||||
|
safe_strncpy(full_hostname, hostname, DNS_MAX_CNAME_LEN);
|
||||||
|
} else {
|
||||||
|
safe_strncpy(full_hostname, "smartdns", DNS_MAX_CNAME_LEN);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* return configured server name */
|
/* return configured server name */
|
||||||
safe_strncpy(hostname, dns_conf_server_name, DNS_MAX_CNAME_LEN);
|
safe_strncpy(full_hostname, dns_conf_server_name, DNS_MAX_CNAME_LEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
request->has_ptr = 1;
|
request->has_ptr = 1;
|
||||||
safe_strncpy(request->ptr_hostname, hostname, DNS_MAX_CNAME_LEN);
|
safe_strncpy(request->ptr_hostname, full_hostname, DNS_MAX_CNAME_LEN);
|
||||||
|
|
||||||
freeifaddrs(ifaddr);
|
freeifaddrs(ifaddr);
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user