dns_conf: fix server-https options issue.

This commit is contained in:
Nick Peng
2023-11-10 20:46:09 +08:00
parent f1debd0878
commit d02bceabf1
6 changed files with 43 additions and 33 deletions

View File

@@ -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,21 +686,28 @@ 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);
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);
}
}
/* 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 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 */
@@ -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;