|
@@ -504,7 +504,9 @@ static int _config_server(int argc, char *argv[], dns_server_type_t type, int de
|
|
|
unsigned char *spki = NULL;
|
|
|
int drop_packet_latency_ms = 0;
|
|
|
int is_bootstrap_dns = 0;
|
|
|
- int is_hostip_set = 0;
|
|
|
+ char host_ip[DNS_MAX_IPLEN] = {0};
|
|
|
+ int no_tls_host_name = 0;
|
|
|
+ int no_tls_host_verify = 0;
|
|
|
|
|
|
int ttl = 0;
|
|
|
/* clang-format off */
|
|
@@ -576,14 +578,6 @@ static int _config_server(int argc, char *argv[], dns_server_type_t type, int de
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if (type == DNS_SERVER_HTTPS) {
|
|
|
- safe_strncpy(server->hostname, server->server, sizeof(server->hostname));
|
|
|
- safe_strncpy(server->httphost, server->server, sizeof(server->httphost));
|
|
|
- if (server->path[0] == 0) {
|
|
|
- safe_strncpy(server->path, "/", sizeof(server->path));
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
/* if port is not defined, set port to default 53 */
|
|
|
if (port == PORT_NOT_DEFINED) {
|
|
|
port = default_port;
|
|
@@ -624,6 +618,7 @@ static int _config_server(int argc, char *argv[], dns_server_type_t type, int de
|
|
|
|
|
|
case 'k': {
|
|
|
server->skip_check_cert = 1;
|
|
|
+ no_tls_host_verify = 1;
|
|
|
break;
|
|
|
}
|
|
|
case 'b': {
|
|
@@ -655,10 +650,10 @@ static int _config_server(int argc, char *argv[], dns_server_type_t type, int de
|
|
|
break;
|
|
|
}
|
|
|
case 258: {
|
|
|
- if (check_is_ipaddr(server->server) != 0) {
|
|
|
- _conf_domain_rule_address(server->server, optarg);
|
|
|
- is_hostip_set = 1;
|
|
|
+ if (check_is_ipaddr(optarg) != 0) {
|
|
|
+ goto errout;
|
|
|
}
|
|
|
+ safe_strncpy(host_ip, optarg, DNS_MAX_IPLEN);
|
|
|
break;
|
|
|
}
|
|
|
case 259: {
|
|
@@ -669,6 +664,7 @@ static int _config_server(int argc, char *argv[], dns_server_type_t type, int de
|
|
|
safe_strncpy(server->hostname, optarg, DNS_MAX_CNAME_LEN);
|
|
|
if (strncmp(server->hostname, "-", 2) == 0) {
|
|
|
server->hostname[0] = '\0';
|
|
|
+ no_tls_host_name = 1;
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
@@ -678,6 +674,10 @@ static int _config_server(int argc, char *argv[], dns_server_type_t type, int de
|
|
|
}
|
|
|
case 262: {
|
|
|
safe_strncpy(server->tls_host_verify, optarg, DNS_MAX_CNAME_LEN);
|
|
|
+ if (strncmp(server->tls_host_verify, "-", 2) == 0) {
|
|
|
+ server->tls_host_verify[0] = '\0';
|
|
|
+ no_tls_host_verify = 1;
|
|
|
+ }
|
|
|
break;
|
|
|
}
|
|
|
default:
|
|
@@ -686,23 +686,30 @@ static int _config_server(int argc, char *argv[], dns_server_type_t type, int de
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /* if server is domain name, then verify domain */
|
|
|
- if (server->tls_host_verify[0] == '\0' && check_is_ipaddr(server->server) != 0) {
|
|
|
- safe_strncpy(server->tls_host_verify, server->server, DNS_MAX_CNAME_LEN);
|
|
|
- }
|
|
|
-
|
|
|
- /* update address rules for host-ip */
|
|
|
- if (is_hostip_set == 1) {
|
|
|
- struct dns_domain_rule *rule = _config_domain_rule_get(server->server);
|
|
|
- if (rule) {
|
|
|
- if (rule->rules[DOMAIN_RULE_ADDRESS_IPV4] != NULL && rule->rules[DOMAIN_RULE_ADDRESS_IPV6] == NULL) {
|
|
|
- _conf_domain_rule_address(server->server, "#6");
|
|
|
- } else if (rule->rules[DOMAIN_RULE_ADDRESS_IPV4] == NULL && rule->rules[DOMAIN_RULE_ADDRESS_IPV6] != NULL) {
|
|
|
- _conf_domain_rule_address(server->server, "#4");
|
|
|
- }
|
|
|
+ if (check_is_ipaddr(server->server) != 0) {
|
|
|
+ /* if server is domain name, then verify domain */
|
|
|
+ if (server->tls_host_verify[0] == '\0' && no_tls_host_verify == 0) {
|
|
|
+ safe_strncpy(server->tls_host_verify, server->server, DNS_MAX_CNAME_LEN);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (server->hostname[0] == '\0' && no_tls_host_name == 0) {
|
|
|
+ safe_strncpy(server->hostname, server->server, DNS_MAX_CNAME_LEN);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (server->httphost[0] == '\0') {
|
|
|
+ safe_strncpy(server->httphost, server->server, DNS_MAX_CNAME_LEN);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (host_ip[0] != '\0') {
|
|
|
+ safe_strncpy(server->server, host_ip, DNS_MAX_IPLEN);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /* if server is domain name, then verify domain */
|
|
|
+ if (server->tls_host_verify[0] == '\0' && server->hostname[0] != '\0' && no_tls_host_verify == 0) {
|
|
|
+ safe_strncpy(server->tls_host_verify, server->hostname, DNS_MAX_CNAME_LEN);
|
|
|
+ }
|
|
|
+
|
|
|
/* add new server */
|
|
|
server->type = type;
|
|
|
server->port = port;
|
|
@@ -915,7 +922,7 @@ static int _config_setup_domain_key(const char *domain, char *domain_key, int do
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static struct dns_domain_rule *_config_domain_rule_get(const char *domain)
|
|
|
+static __attribute__((unused)) struct dns_domain_rule *_config_domain_rule_get(const char *domain)
|
|
|
{
|
|
|
char domain_key[DNS_MAX_CONF_CNAME_LEN];
|
|
|
int len = 0;
|