@@ -504,7 +504,9 @@ static int _config_server(int argc, char *argv[], dns_server_type_t type, int de
504
504
unsigned char * spki = NULL ;
505
505
int drop_packet_latency_ms = 0 ;
506
506
int is_bootstrap_dns = 0 ;
507
- int is_hostip_set = 0 ;
507
+ char host_ip [DNS_MAX_IPLEN ] = {0 };
508
+ int no_tls_host_name = 0 ;
509
+ int no_tls_host_verify = 0 ;
508
510
509
511
int ttl = 0 ;
510
512
/* clang-format off */
@@ -576,14 +578,6 @@ static int _config_server(int argc, char *argv[], dns_server_type_t type, int de
576
578
}
577
579
}
578
580
579
- if (type == DNS_SERVER_HTTPS ) {
580
- safe_strncpy (server -> hostname , server -> server , sizeof (server -> hostname ));
581
- safe_strncpy (server -> httphost , server -> server , sizeof (server -> httphost ));
582
- if (server -> path [0 ] == 0 ) {
583
- safe_strncpy (server -> path , "/" , sizeof (server -> path ));
584
- }
585
- }
586
-
587
581
/* if port is not defined, set port to default 53 */
588
582
if (port == PORT_NOT_DEFINED ) {
589
583
port = default_port ;
@@ -624,6 +618,7 @@ static int _config_server(int argc, char *argv[], dns_server_type_t type, int de
624
618
625
619
case 'k' : {
626
620
server -> skip_check_cert = 1 ;
621
+ no_tls_host_verify = 1 ;
627
622
break ;
628
623
}
629
624
case 'b' : {
@@ -655,10 +650,10 @@ static int _config_server(int argc, char *argv[], dns_server_type_t type, int de
655
650
break ;
656
651
}
657
652
case 258 : {
658
- if (check_is_ipaddr (server -> server ) != 0 ) {
659
- _conf_domain_rule_address (server -> server , optarg );
660
- is_hostip_set = 1 ;
653
+ if (check_is_ipaddr (optarg ) != 0 ) {
654
+ goto errout ;
661
655
}
656
+ safe_strncpy (host_ip , optarg , DNS_MAX_IPLEN );
662
657
break ;
663
658
}
664
659
case 259 : {
@@ -669,6 +664,7 @@ static int _config_server(int argc, char *argv[], dns_server_type_t type, int de
669
664
safe_strncpy (server -> hostname , optarg , DNS_MAX_CNAME_LEN );
670
665
if (strncmp (server -> hostname , "-" , 2 ) == 0 ) {
671
666
server -> hostname [0 ] = '\0' ;
667
+ no_tls_host_name = 1 ;
672
668
}
673
669
break ;
674
670
}
@@ -678,6 +674,10 @@ static int _config_server(int argc, char *argv[], dns_server_type_t type, int de
678
674
}
679
675
case 262 : {
680
676
safe_strncpy (server -> tls_host_verify , optarg , DNS_MAX_CNAME_LEN );
677
+ if (strncmp (server -> tls_host_verify , "-" , 2 ) == 0 ) {
678
+ server -> tls_host_verify [0 ] = '\0' ;
679
+ no_tls_host_verify = 1 ;
680
+ }
681
681
break ;
682
682
}
683
683
default :
@@ -686,23 +686,30 @@ static int _config_server(int argc, char *argv[], dns_server_type_t type, int de
686
686
}
687
687
}
688
688
689
- /* if server is domain name, then verify domain */
690
- if (server -> tls_host_verify [0 ] == '\0' && check_is_ipaddr (server -> server ) != 0 ) {
691
- safe_strncpy (server -> tls_host_verify , server -> server , DNS_MAX_CNAME_LEN );
692
- }
693
-
694
- /* update address rules for host-ip */
695
- if (is_hostip_set == 1 ) {
696
- struct dns_domain_rule * rule = _config_domain_rule_get (server -> server );
697
- if (rule ) {
698
- if (rule -> rules [DOMAIN_RULE_ADDRESS_IPV4 ] != NULL && rule -> rules [DOMAIN_RULE_ADDRESS_IPV6 ] == NULL ) {
699
- _conf_domain_rule_address (server -> server , "#6" );
700
- } else if (rule -> rules [DOMAIN_RULE_ADDRESS_IPV4 ] == NULL && rule -> rules [DOMAIN_RULE_ADDRESS_IPV6 ] != NULL ) {
701
- _conf_domain_rule_address (server -> server , "#4" );
702
- }
689
+ if (check_is_ipaddr (server -> server ) != 0 ) {
690
+ /* if server is domain name, then verify domain */
691
+ if (server -> tls_host_verify [0 ] == '\0' && no_tls_host_verify == 0 ) {
692
+ safe_strncpy (server -> tls_host_verify , server -> server , DNS_MAX_CNAME_LEN );
693
+ }
694
+
695
+ if (server -> hostname [0 ] == '\0' && no_tls_host_name == 0 ) {
696
+ safe_strncpy (server -> hostname , server -> server , DNS_MAX_CNAME_LEN );
697
+ }
698
+
699
+ if (server -> httphost [0 ] == '\0' ) {
700
+ safe_strncpy (server -> httphost , server -> server , DNS_MAX_CNAME_LEN );
701
+ }
702
+
703
+ if (host_ip [0 ] != '\0' ) {
704
+ safe_strncpy (server -> server , host_ip , DNS_MAX_IPLEN );
703
705
}
704
706
}
705
707
708
+ /* if server is domain name, then verify domain */
709
+ if (server -> tls_host_verify [0 ] == '\0' && server -> hostname [0 ] != '\0' && no_tls_host_verify == 0 ) {
710
+ safe_strncpy (server -> tls_host_verify , server -> hostname , DNS_MAX_CNAME_LEN );
711
+ }
712
+
706
713
/* add new server */
707
714
server -> type = type ;
708
715
server -> port = port ;
@@ -915,7 +922,7 @@ static int _config_setup_domain_key(const char *domain, char *domain_key, int do
915
922
return 0 ;
916
923
}
917
924
918
- static struct dns_domain_rule * _config_domain_rule_get (const char * domain )
925
+ static __attribute__(( unused )) struct dns_domain_rule * _config_domain_rule_get (const char * domain )
919
926
{
920
927
char domain_key [DNS_MAX_CONF_CNAME_LEN ];
921
928
int len = 0 ;
0 commit comments