From 51c81513ab367f29f0e83c2e9f4a85b494698031 Mon Sep 17 00:00:00 2001 From: Nick Peng Date: Sun, 24 Sep 2023 22:55:10 +0800 Subject: [PATCH] dns_conf: add short option for server options --- etc/smartdns/smartdns.conf | 14 ++--- src/dns_conf.c | 101 +++++++++++++++++++------------------ 2 files changed, 58 insertions(+), 57 deletions(-) diff --git a/etc/smartdns/smartdns.conf b/etc/smartdns/smartdns.conf index 4f8ae3b..6514b91 100644 --- a/etc/smartdns/smartdns.conf +++ b/etc/smartdns/smartdns.conf @@ -193,9 +193,9 @@ log-level info # -blacklist-ip: filter result with blacklist ip # -whitelist-ip: filter result with whitelist ip, result in whitelist-ip will be accepted. # -check-edns: result must exist edns RR, or discard result. -# -group [group]: set server to group, use with nameserver /domain/group. -# -exclude-default-group: exclude this server from default group. -# -proxy [proxy-name]: use proxy to connect to server. +# g|-group [group]: set server to group, use with nameserver /domain/group. +# e|-exclude-default-group: exclude this server from default group. +# p|-proxy [proxy-name]: use proxy to connect to server. # -bootstrap-dns: set as bootstrap dns server. # -set-mark: set mark on packets. # -subnet [ip/subnet]: set edns client subnet. @@ -214,8 +214,8 @@ log-level info # -spki-pin: TLS spki pin to verify. # -tls-host-verify: cert hostname to verify. # -host-name: TLS sni hostname. -# -no-check-certificate: no check certificate. -# -proxy [proxy-name]: use proxy to connect to server. +# k|-no-check-certificate: no check certificate. +# p|-proxy [proxy-name]: use proxy to connect to server. # -bootstrap-dns: set as bootstrap dns server. # Get SPKI with this command: # echo | openssl s_client -connect '[ip]:853' | openssl x509 -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64 @@ -229,8 +229,8 @@ log-level info # -tls-host-verify: cert hostname to verify. # -host-name: TLS sni hostname. # -http-host: http host. -# -no-check-certificate: no check certificate. -# -proxy [proxy-name]: use proxy to connect to server. +# k|-no-check-certificate: no check certificate. +# p|-proxy [proxy-name]: use proxy to connect to server. # -bootstrap-dns: set as bootstrap dns server. # default port is 443 # server-https https://cloudflare-dns.com/dns-query diff --git a/src/dns_conf.c b/src/dns_conf.c index ca59574..70945b0 100644 --- a/src/dns_conf.c +++ b/src/dns_conf.c @@ -509,26 +509,26 @@ static int _config_server(int argc, char *argv[], dns_server_type_t type, int de int ttl = 0; /* clang-format off */ static struct option long_options[] = { - {"blacklist-ip", no_argument, NULL, 'b'}, /* filtering with blacklist-ip */ - {"whitelist-ip", no_argument, NULL, 'w'}, /* filtering with whitelist-ip */ + {"drop-packet-latency", required_argument, NULL, 'D'}, + {"exclude-default-group", no_argument, NULL, 'e'}, /* exclude this from default group */ + {"group", required_argument, NULL, 'g'}, /* add to group */ + {"proxy", required_argument, NULL, 'p'}, /* proxy server */ + {"no-check-certificate", no_argument, NULL, 'k'}, /* do not check certificate */ + {"bootstrap-dns", no_argument, NULL, 'b'}, /* set as bootstrap dns */ #ifdef FEATURE_CHECK_EDNS /* experimental feature */ - {"check-edns", no_argument, NULL, 'e'}, /* check edns */ + {"check-edns", no_argument, NULL, 251}, /* check edns */ #endif - {"drop-packet-latency", required_argument, NULL, 'D'}, - {"spki-pin", required_argument, NULL, 'p'}, /* check SPKI pin */ - {"host-name", required_argument, NULL, 'h'}, /* host name */ - {"http-host", required_argument, NULL, 'H'}, /* http host */ - {"no-check-certificate", no_argument, NULL, 'N'}, /* do not check certificate */ - {"tls-host-verify", required_argument, NULL, 'V' }, /* verify tls hostname */ - {"group", required_argument, NULL, 'g'}, /* add to group */ - {"proxy", required_argument, NULL, 'P'}, /* proxy server */ - {"exclude-default-group", no_argument, NULL, 'E'}, /* exclude this from default group */ + {"whitelist-ip", no_argument, NULL, 252}, /* filtering with whitelist-ip */ + {"blacklist-ip", no_argument, NULL, 253}, /* filtering with blacklist-ip */ {"set-mark", required_argument, NULL, 254}, /* set mark */ - {"bootstrap-dns", no_argument, NULL, 255}, /* set as bootstrap dns */ {"subnet", required_argument, NULL, 256}, /* set subnet */ {"hitchhiking", no_argument, NULL, 257}, /* hitchhiking */ {"host-ip", required_argument, NULL, 258}, /* host ip */ + {"spki-pin", required_argument, NULL, 259}, /* check SPKI pin */ + {"host-name", required_argument, NULL, 260}, /* host name */ + {"http-host", required_argument, NULL, 261}, /* http host */ + {"tls-host-verify", required_argument, NULL, 262 }, /* verify tls hostname */ {NULL, no_argument, NULL, 0} }; /* clang-format on */ @@ -592,40 +592,17 @@ static int _config_server(int argc, char *argv[], dns_server_type_t type, int de /* process extra options */ optind = 1; while (1) { - opt = getopt_long_only(argc, argv, "", long_options, NULL); + opt = getopt_long_only(argc, argv, "D:kg:p:eb", long_options, NULL); if (opt == -1) { break; } switch (opt) { - case 'b': { - result_flag |= DNSSERVER_FLAG_BLACKLIST_IP; - break; - } - case 'w': { - result_flag |= DNSSERVER_FLAG_WHITELIST_IP; - break; - } - case 'e': { - result_flag |= DNSSERVER_FLAG_CHECK_EDNS; - break; - } - case 'h': { - safe_strncpy(server->hostname, optarg, DNS_MAX_CNAME_LEN); - if (strncmp(server->hostname, "-", 2) == 0) { - server->hostname[0] = '\0'; - } - break; - } - case 'H': { - safe_strncpy(server->httphost, optarg, DNS_MAX_CNAME_LEN); - break; - } case 'D': { drop_packet_latency_ms = atoi(optarg); break; } - case 'E': { + case 'e': { server_flag |= SERVER_FLAG_EXCLUDE_DEFAULT; break; } @@ -637,10 +614,6 @@ static int _config_server(int argc, char *argv[], dns_server_type_t type, int de break; } case 'p': { - safe_strncpy(server->spki, optarg, DNS_MAX_SPKI_LEN); - break; - } - case 'P': { if (_dns_conf_get_proxy_name(optarg) == NULL) { tlog(TLOG_ERROR, "add proxy server failed."); goto errout; @@ -648,22 +621,31 @@ static int _config_server(int argc, char *argv[], dns_server_type_t type, int de safe_strncpy(server->proxyname, optarg, PROXY_NAME_LEN); break; } - case 'V': { - safe_strncpy(server->tls_host_verify, optarg, DNS_MAX_CNAME_LEN); + + case 'k': { + server->skip_check_cert = 1; break; } - case 'N': { - server->skip_check_cert = 1; + case 'b': { + is_bootstrap_dns = 1; + break; + } + case 251: { + result_flag |= DNSSERVER_FLAG_CHECK_EDNS; + break; + } + case 252: { + result_flag |= DNSSERVER_FLAG_WHITELIST_IP; + break; + } + case 253: { + result_flag |= DNSSERVER_FLAG_BLACKLIST_IP; break; } case 254: { server->set_mark = atoll(optarg); break; } - case 255: { - is_bootstrap_dns = 1; - break; - } case 256: { _conf_client_subnet(optarg, &server->ipv4_ecs, &server->ipv6_ecs); break; @@ -679,6 +661,25 @@ static int _config_server(int argc, char *argv[], dns_server_type_t type, int de } break; } + case 259: { + safe_strncpy(server->spki, optarg, DNS_MAX_SPKI_LEN); + break; + } + case 260: { + safe_strncpy(server->hostname, optarg, DNS_MAX_CNAME_LEN); + if (strncmp(server->hostname, "-", 2) == 0) { + server->hostname[0] = '\0'; + } + break; + } + case 261: { + safe_strncpy(server->httphost, optarg, DNS_MAX_CNAME_LEN); + break; + } + case 262: { + safe_strncpy(server->tls_host_verify, optarg, DNS_MAX_CNAME_LEN); + break; + } default: break; }