code: cleanup lint and extra compile warnings

This commit is contained in:
Nick Peng
2022-07-10 10:32:01 +08:00
parent 4e2161c6fc
commit a83818c094
22 changed files with 695 additions and 574 deletions

View File

@@ -60,9 +60,9 @@
#define RECV_ERROR_AGAIN 1
#define RECV_ERROR_OK 0
#define RECV_ERROR_FAIL -1
#define RECV_ERROR_CLOSE -2
#define RECV_ERROR_INVALID_PACKET -3
#define RECV_ERROR_FAIL (-1)
#define RECV_ERROR_CLOSE (-2)
#define RECV_ERROR_INVALID_PACKET (-3)
typedef enum {
DNS_CONN_TYPE_UDP_SERVER = 0,
@@ -104,7 +104,7 @@ struct dns_server_post_context {
struct dns_request *request;
struct dns_packet *packet;
int ip_num;
int qtype;
dns_type_t qtype;
int do_cache;
int do_reply;
int do_ipset;
@@ -150,7 +150,6 @@ struct dns_ip_address {
struct dns_request_pending_list {
pthread_mutex_t request_list_lock;
int is_requester;
unsigned short qtype;
char domain[DNS_MAX_CNAME_LEN];
struct list_head request_list;
@@ -173,8 +172,8 @@ struct dns_request {
/* dns query */
char domain[DNS_MAX_CNAME_LEN];
dns_type_t qtype;
unsigned long send_tick;
unsigned short qtype;
unsigned short id;
unsigned short rcode;
unsigned short ss_family;
@@ -230,7 +229,7 @@ struct dns_request {
pthread_mutex_t ip_map_lock;
int ip_map_num;
atomic_t ip_map_num;
DECLARE_HASHTABLE(ip_map, 4);
struct dns_domain_rule domain_rule;
@@ -242,7 +241,7 @@ struct dns_request {
/* dns server data */
struct dns_server {
int run;
atomic_t run;
int epoll_fd;
struct list_head conn_list;
@@ -387,7 +386,6 @@ static void _dns_server_post_context_init(struct dns_server_post_context *contex
context->inpacket_maxlen = sizeof(context->inpacket_buff);
context->qtype = request->qtype;
context->request = request;
return;
}
static void _dns_server_post_context_init_from(struct dns_server_post_context *context, struct dns_request *request,
@@ -401,10 +399,10 @@ static void _dns_server_post_context_init_from(struct dns_server_post_context *c
context->inpacket_maxlen = sizeof(context->inpacket);
context->qtype = request->qtype;
context->request = request;
return;
}
struct dns_ip_address *_dns_ip_address_get(struct dns_request *request, unsigned char *addr, dns_type_t addr_type)
static struct dns_ip_address *_dns_ip_address_get(struct dns_request *request, unsigned char *addr,
dns_type_t addr_type)
{
uint32_t key = 0;
struct dns_ip_address *addr_map = NULL;
@@ -450,10 +448,10 @@ static void _dns_server_audit_log(struct dns_server_post_context *context)
struct tlog_time tm;
int i = 0;
int j = 0;
int rr_count;
int rr_count = 0;
struct dns_rrs *rrs = NULL;
char name[DNS_MAX_CNAME_LEN] = {0};
int ttl;
int ttl = 0;
int len = 0;
int left_len = sizeof(req_result);
int total_len = 0;
@@ -575,13 +573,13 @@ static void _dns_rrs_result_log(struct dns_server_post_context *context, struct
static int _dns_rrs_add_all_best_ip(struct dns_server_post_context *context)
{
struct dns_ip_address *addr_map;
struct dns_ip_address *addr_map = NULL;
struct dns_ip_address *added_ip_addr = NULL;
struct hlist_node *tmp;
struct hlist_node *tmp = NULL;
struct dns_request *request = context->request;
int bucket = 0;
unsigned long bucket = 0;
char *domain;
char *domain = NULL;
int ret = 0;
int ignore_speed = 0;
int maxhit = 0;
@@ -657,7 +655,7 @@ static int _dns_rrs_add_all_best_ip(struct dns_server_post_context *context)
static void _dns_server_setup_soa(struct dns_request *request)
{
struct dns_soa *soa;
struct dns_soa *soa = NULL;
soa = &request->soa;
safe_strncpy(soa->mname, "a.gtld-servers.net", DNS_MAX_CNAME_LEN);
@@ -732,7 +730,7 @@ static int _dns_add_rrs(struct dns_server_post_context *context)
}
if (request->rcode != DNS_RC_NOERROR) {
tlog(TLOG_INFO, "result %s, qtype: %d, rccode: %d", domain, context->qtype, request->rcode);
tlog(TLOG_INFO, "result %s, qtype: %d, rtcode: %d", domain, context->qtype, request->rcode);
}
return ret;
@@ -828,7 +826,7 @@ static void _dns_server_conn_get(struct dns_server_conn_head *conn)
static int _dns_server_reply_tcp_to_buffer(struct dns_server_conn_tcp_client *tcpclient, void *packet, int len)
{
if (sizeof(tcpclient->sndbuff.buf) - tcpclient->sndbuff.size < len) {
if ((int)sizeof(tcpclient->sndbuff.buf) - tcpclient->sndbuff.size < len) {
return -1;
}
@@ -876,8 +874,11 @@ static int _dns_server_reply_udp(struct dns_request *request, struct dns_server_
unsigned char *inpacket, int inpacket_len)
{
int send_len = 0;
send_len =
sendto(udpserver->head.fd, inpacket, inpacket_len, 0, (struct sockaddr *)&request->addr, request->addr_len);
if (atomic_read(&server.run) == 0) {
return -1;
}
send_len = sendto(udpserver->head.fd, inpacket, inpacket_len, 0, &request->addr, request->addr_len);
if (send_len != inpacket_len) {
tlog(TLOG_ERROR, "send failed, %s", strerror(errno));
return -1;
@@ -912,7 +913,7 @@ static int _dns_reply_inpacket(struct dns_request *request, unsigned char *inpac
static int _dns_server_request_update_cache(struct dns_request *request, dns_type_t qtype,
struct dns_cache_data *cache_data, int has_soa)
{
int ttl;
int ttl = 0;
int speed = 0;
if (qtype != DNS_T_A && qtype != DNS_T_AAAA) {
@@ -959,15 +960,15 @@ errout:
return -1;
}
int _dns_cache_cname_packet(struct dns_server_post_context *context)
static int _dns_cache_cname_packet(struct dns_server_post_context *context)
{
struct dns_packet *packet = context->packet;
struct dns_packet *cname_packet;
struct dns_packet *cname_packet = NULL;
int ret = 0;
int i = 0;
int j = 0;
int rr_count = 0;
int ttl;
int ttl = 0;
int speed = 0;
unsigned char packet_buff[DNS_PACKSIZE];
unsigned char inpacket_buff[DNS_IN_PACKSIZE];
@@ -1007,7 +1008,7 @@ int _dns_cache_cname_packet(struct dns_server_post_context *context)
continue;
}
ret = dns_add_A(cname_packet, rrs->type, request->cname, ttl, ipv4_addr);
ret = dns_add_A(cname_packet, DNS_RRS_AN, request->cname, ttl, ipv4_addr);
if (ret != 0) {
return -1;
}
@@ -1019,7 +1020,7 @@ int _dns_cache_cname_packet(struct dns_server_post_context *context)
continue;
}
ret = dns_add_AAAA(cname_packet, rrs->type, request->cname, ttl, ipv6_addr);
ret = dns_add_AAAA(cname_packet, DNS_RRS_AN, request->cname, ttl, ipv6_addr);
if (ret != 0) {
return -1;
}
@@ -1031,7 +1032,7 @@ int _dns_cache_cname_packet(struct dns_server_post_context *context)
continue;
}
ret = dns_add_SOA(cname_packet, rrs->type, request->cname, ttl, &soa);
ret = dns_add_SOA(cname_packet, DNS_RRS_AN, request->cname, ttl, &soa);
if (ret != 0) {
return -1;
}
@@ -1246,14 +1247,17 @@ static int _dns_cache_reply_packet(struct dns_server_post_context *context)
static int _dns_server_setup_ipset_packet(struct dns_server_post_context *context)
{
int ttl;
int ttl = 0;
struct dns_request *request = context->request;
char name[DNS_MAX_CNAME_LEN] = {0};
int rr_count;
int rr_count = 0;
int i = 0;
int j = 0;
struct dns_rrs *rrs = NULL;
struct dns_ipset_rule *rule = NULL, *ipset_rule = NULL, *ipset_rule_v4 = NULL, *ipset_rule_v6 = NULL;
struct dns_ipset_rule *rule = NULL;
struct dns_ipset_rule *ipset_rule = NULL;
struct dns_ipset_rule *ipset_rule_v4 = NULL;
struct dns_ipset_rule *ipset_rule_v6 = NULL;
struct dns_rule_flags *rule_flags = NULL;
if (_dns_server_has_bind_flag(request, BIND_FLAG_NO_RULE_IPSET) == 0) {
@@ -1422,10 +1426,11 @@ static int _dns_server_reply_SOA(int rcode, struct dns_request *request)
return 0;
}
int _dns_server_reply_all_pending_list(struct dns_request *request, struct dns_server_post_context *context)
static int _dns_server_reply_all_pending_list(struct dns_request *request, struct dns_server_post_context *context)
{
struct dns_request_pending_list *pending_list;
struct dns_request *req, *tmp;
struct dns_request_pending_list *pending_list = NULL;
struct dns_request *req = NULL;
struct dns_request *tmp = NULL;
int ret = 0;
if (request->request_pending_list == NULL) {
@@ -1439,7 +1444,7 @@ int _dns_server_reply_all_pending_list(struct dns_request *request, struct dns_s
pthread_mutex_unlock(&server.request_pending_lock);
pthread_mutex_lock(&pending_list->request_list_lock);
list_del(&request->pending_list);
list_del_init(&request->pending_list);
list_for_each_entry_safe(req, tmp, &(pending_list->request_list), pending_list)
{
struct dns_server_post_context context_pending;
@@ -1462,7 +1467,7 @@ int _dns_server_reply_all_pending_list(struct dns_request *request, struct dns_s
_dns_server_reply_passthrouth(&context_pending);
req->request_pending_list = NULL;
list_del(&req->pending_list);
list_del_init(&req->pending_list);
_dns_server_request_release_complete(req, 0);
}
pthread_mutex_unlock(&pending_list->request_list_lock);
@@ -1617,7 +1622,7 @@ static int _dns_ip_address_check_add(struct dns_request *request, char *cname, u
return -1;
}
request->ip_map_num++;
atomic_inc(&request->ip_map_num);
addr_map = malloc(sizeof(*addr_map));
if (addr_map == NULL) {
pthread_mutex_unlock(&request->ip_map_lock);
@@ -1643,7 +1648,8 @@ static int _dns_ip_address_check_add(struct dns_request *request, char *cname, u
static void _dns_server_request_remove_all(void)
{
struct dns_request *request, *tmp;
struct dns_request *request = NULL;
struct dns_request *tmp = NULL;
LIST_HEAD(remove_list);
pthread_mutex_lock(&server.request_list_lock);
@@ -1664,13 +1670,13 @@ static void _dns_server_request_remove_all(void)
static void _dns_server_select_possible_ipaddress(struct dns_request *request)
{
int maxhit = 0;
int bucket = 0;
unsigned long bucket = 0;
unsigned long max_recv_tick = 0;
struct dns_ip_address *addr_map;
struct dns_ip_address *addr_map = NULL;
struct dns_ip_address *maxhit_addr_map = NULL;
struct dns_ip_address *last_recv_addr_map = NULL;
struct dns_ip_address *selected_addr_map = NULL;
struct hlist_node *tmp;
struct hlist_node *tmp = NULL;
if (atomic_read(&request->notified) > 0) {
return;
@@ -1759,7 +1765,7 @@ static void _dns_server_complete_with_multi_ipaddress(struct dns_request *reques
return;
}
if (request->ip_map_num > 0) {
if (atomic_read(&request->ip_map_num) > 0) {
request->has_soa = 0;
}
@@ -1782,9 +1788,9 @@ static void _dns_server_complete_with_multi_ipaddress(struct dns_request *reques
static void _dns_server_request_release_complete(struct dns_request *request, int do_complete)
{
struct dns_ip_address *addr_map;
struct hlist_node *tmp;
int bucket = 0;
struct dns_ip_address *addr_map = NULL;
struct hlist_node *tmp = NULL;
unsigned long bucket = 0;
pthread_mutex_lock(&server.request_list_lock);
int refcnt = atomic_dec_return(&request->refcnt);
@@ -1830,9 +1836,10 @@ static void _dns_server_request_get(struct dns_request *request)
}
}
int _dns_server_set_to_pending_list(struct dns_request *request)
static int _dns_server_set_to_pending_list(struct dns_request *request)
{
struct dns_request_pending_list *pending_list;
struct dns_request_pending_list *pending_list = NULL;
struct dns_request_pending_list *pending_list_tmp = NULL;
uint32_t key = 0;
int ret = -1;
if (request->qtype != DNS_T_A && request->qtype != DNS_T_AAAA) {
@@ -1842,28 +1849,31 @@ int _dns_server_set_to_pending_list(struct dns_request *request)
key = hash_string(request->domain);
key = jhash(&(request->qtype), sizeof(request->qtype), key);
pthread_mutex_lock(&server.request_pending_lock);
hash_for_each_possible(server.request_pending, pending_list, node, key)
hash_for_each_possible(server.request_pending, pending_list_tmp, node, key)
{
if (request->qtype != pending_list->qtype) {
if (request->qtype != pending_list_tmp->qtype) {
continue;
}
if (strncmp(request->domain, pending_list->domain, DNS_MAX_CNAME_LEN) != 0) {
if (strncmp(request->domain, pending_list_tmp->domain, DNS_MAX_CNAME_LEN) != 0) {
continue;
}
pending_list = pending_list_tmp;
break;
}
if (pending_list == NULL) {
pending_list = malloc(sizeof(*pending_list));
if (pending_list == NULL) {
goto out;
ret = -1;
goto errout;
}
memset(pending_list, 0, sizeof(*pending_list));
pthread_mutex_init(&pending_list->request_list_lock, 0);
pthread_mutex_init(&pending_list->request_list_lock, NULL);
INIT_LIST_HEAD(&pending_list->request_list);
INIT_HLIST_NODE(&pending_list->node);
pending_list->qtype = request->qtype;
safe_strncpy(pending_list->domain, request->domain, DNS_MAX_CNAME_LEN);
hash_add(server.request_pending, &pending_list->node, key);
@@ -1872,15 +1882,15 @@ int _dns_server_set_to_pending_list(struct dns_request *request)
ret = 0;
}
out:
pthread_mutex_unlock(&server.request_pending_lock);
pthread_mutex_lock(&pending_list->request_list_lock);
if (ret == 0) {
_dns_server_request_get(request);
}
list_add_tail(&request->pending_list, &pending_list->request_list);
pthread_mutex_unlock(&pending_list->request_list_lock);
errout:
pthread_mutex_unlock(&server.request_pending_lock);
return ret;
}
@@ -1898,6 +1908,7 @@ static struct dns_request *_dns_server_new_request(void)
pthread_mutex_init(&request->ip_map_lock, NULL);
atomic_set(&request->adblock, 0);
atomic_set(&request->soa_num, 0);
atomic_set(&request->ip_map_num, 0);
atomic_set(&request->refcnt, 0);
atomic_set(&request->notified, 0);
atomic_set(&request->do_callback, 0);
@@ -1910,6 +1921,8 @@ static struct dns_request *_dns_server_new_request(void)
request->result_callback = NULL;
request->check_order_list = &dns_conf_check_orders;
INIT_LIST_HEAD(&request->list);
INIT_LIST_HEAD(&request->pending_list);
INIT_LIST_HEAD(&request->check_list);
hash_init(request->ip_map);
_dns_server_request_get(request);
@@ -1953,7 +1966,7 @@ static void _dns_server_ping_result(struct ping_host_struct *ping_host, const ch
return;
}
unsigned int rtt = tv->tv_sec * 10000 + tv->tv_usec / 100;
int rtt = tv->tv_sec * 10000 + tv->tv_usec / 100;
int last_rtt = request->ping_time;
if (result == PING_RESULT_RESPONSE) {
@@ -1964,7 +1977,7 @@ static void _dns_server_ping_result(struct ping_host_struct *ping_host, const ch
switch (addr->sa_family) {
case AF_INET: {
struct sockaddr_in *addr_in;
struct sockaddr_in *addr_in = NULL;
addr_in = (struct sockaddr_in *)addr;
addr_map = _dns_ip_address_get(request, (unsigned char *)&addr_in->sin_addr.s_addr, DNS_T_A);
if (addr_map) {
@@ -1995,7 +2008,7 @@ static void _dns_server_ping_result(struct ping_host_struct *ping_host, const ch
}
} break;
case AF_INET6: {
struct sockaddr_in6 *addr_in6;
struct sockaddr_in6 *addr_in6 = NULL;
addr_in6 = (struct sockaddr_in6 *)addr;
if (IN6_IS_ADDR_V4MAPPED(&addr_in6->sin6_addr)) {
addr_map = _dns_ip_address_get(request, addr_in6->sin6_addr.s6_addr + 12, DNS_T_A);
@@ -2050,7 +2063,7 @@ static void _dns_server_ping_result(struct ping_host_struct *ping_host, const ch
/* If the ping delay is less than the threshold, the result is returned */
if (rtt < threshold) {
may_complete = 1;
} else if (rtt < (get_tick_count() - request->send_tick) * 8) {
} else if (rtt < (int)(get_tick_count() - request->send_tick) * 8) {
may_complete = 1;
}
@@ -2176,7 +2189,7 @@ match:
return 0;
}
static int _dns_server_is_adblock_ipv6(unsigned char addr[16])
static int _dns_server_is_adblock_ipv6(const unsigned char addr[16])
{
int i = 0;
@@ -2193,10 +2206,10 @@ static int _dns_server_is_adblock_ipv6(unsigned char addr[16])
return -1;
}
static int _dns_server_process_answer_A(struct dns_rrs *rrs, struct dns_request *request, char *domain, char *cname,
static int _dns_server_process_answer_A(struct dns_rrs *rrs, struct dns_request *request, const char *domain, char *cname,
unsigned int result_flag)
{
int ttl;
int ttl = 0;
int ip_check_result = 0;
unsigned char addr[4];
char name[DNS_MAX_CNAME_LEN] = {0};
@@ -2271,13 +2284,13 @@ static int _dns_server_process_answer_A(struct dns_rrs *rrs, struct dns_request
return 0;
}
static int _dns_server_process_answer_AAAA(struct dns_rrs *rrs, struct dns_request *request, char *domain, char *cname,
static int _dns_server_process_answer_AAAA(struct dns_rrs *rrs, struct dns_request *request, const char *domain, char *cname,
unsigned int result_flag)
{
unsigned char addr[16];
char name[DNS_MAX_CNAME_LEN] = {0};
char ip[DNS_MAX_CNAME_LEN] = {0};
int ttl;
int ttl = 0;
int ip_check_result = 0;
if (request->qtype != DNS_T_AAAA) {
@@ -2349,13 +2362,13 @@ static int _dns_server_process_answer_AAAA(struct dns_rrs *rrs, struct dns_reque
return 0;
}
static int _dns_server_process_answer(struct dns_request *request, char *domain, struct dns_packet *packet,
static int _dns_server_process_answer(struct dns_request *request, const char *domain, struct dns_packet *packet,
unsigned int result_flag)
{
int ttl;
int ttl = 0;
char name[DNS_MAX_CNAME_LEN] = {0};
char cname[DNS_MAX_CNAME_LEN] = {0};
int rr_count;
int rr_count = 0;
int i = 0;
int j = 0;
struct dns_rrs *rrs = NULL;
@@ -2415,7 +2428,7 @@ static int _dns_server_process_answer(struct dns_request *request, char *domain,
domain, request->qtype, request->soa.mname, request->soa.rname, request->soa.serial,
request->soa.refresh, request->soa.retry, request->soa.expire, request->soa.minimum);
int soa_num = atomic_inc_return(&request->soa_num);
if ((soa_num >= (dns_server_num() / 3) + 1 || soa_num > 4) && request->ip_map_num <= 0) {
if ((soa_num >= (dns_server_num() / 3) + 1 || soa_num > 4) && atomic_read(&request->ip_map_num) <= 0) {
_dns_server_request_complete(request);
}
} break;
@@ -2429,7 +2442,7 @@ static int _dns_server_process_answer(struct dns_request *request, char *domain,
return 0;
}
static int _dns_server_passthrough_rule_check(struct dns_request *request, char *domain, struct dns_packet *packet,
static int _dns_server_passthrough_rule_check(struct dns_request *request, const char *domain, struct dns_packet *packet,
unsigned int result_flag, int *pttl)
{
int ttl = 0;
@@ -2458,7 +2471,7 @@ static int _dns_server_passthrough_rule_check(struct dns_request *request, char
switch (rrs->type) {
case DNS_T_A: {
unsigned char addr[4];
int ttl_tmp;
int ttl_tmp = 0;
if (request->qtype != DNS_T_A) {
/* ignore non-matched query type */
if (request->dualstack_selection == 0) {
@@ -2475,7 +2488,8 @@ static int _dns_server_passthrough_rule_check(struct dns_request *request, char
continue;
}
tlog(TLOG_DEBUG, "domain: %s TTL:%d IP: %d.%d.%d.%d", name, ttl_tmp, addr[0], addr[1], addr[2], addr[3]);
tlog(TLOG_DEBUG, "domain: %s TTL:%d IP: %d.%d.%d.%d", name, ttl_tmp, addr[0], addr[1], addr[2],
addr[3]);
/* ip rule check */
ip_check_result = _dns_server_ip_rule_check(request, addr, 4, DNS_T_A, result_flag);
@@ -2493,7 +2507,7 @@ static int _dns_server_passthrough_rule_check(struct dns_request *request, char
} break;
case DNS_T_AAAA: {
unsigned char addr[16];
int ttl_tmp;
int ttl_tmp = 0;
if (request->qtype != DNS_T_AAAA) {
/* ignore non-matched query type */
break;
@@ -2546,7 +2560,6 @@ static int _dns_server_get_answer(struct dns_server_post_context *context)
int ttl = 0;
struct dns_rrs *rrs = NULL;
int rr_count = 0;
char name[DNS_MAX_CNAME_LEN] = {0};
struct dns_request *request = context->request;
struct dns_packet *packet = context->packet;
@@ -2604,11 +2617,13 @@ static int _dns_server_get_answer(struct dns_server_post_context *context)
} break;
case DNS_T_NS: {
char cname[DNS_MAX_CNAME_LEN];
char name[DNS_MAX_CNAME_LEN] = {0};
dns_get_CNAME(rrs, name, DNS_MAX_CNAME_LEN, &ttl, cname, DNS_MAX_CNAME_LEN);
tlog(TLOG_DEBUG, "NS: %s ttl:%d cname: %s\n", name, ttl, cname);
} break;
case DNS_T_CNAME: {
char cname[DNS_MAX_CNAME_LEN];
char name[DNS_MAX_CNAME_LEN] = {0};
if (dns_conf_force_no_cname) {
continue;
}
@@ -2620,6 +2635,7 @@ static int _dns_server_get_answer(struct dns_server_post_context *context)
request->has_cname = 1;
} break;
case DNS_T_SOA: {
char name[DNS_MAX_CNAME_LEN] = {0};
request->has_soa = 1;
if (request->rcode != DNS_RC_NOERROR) {
request->rcode = packet->head.rcode;
@@ -2635,7 +2651,6 @@ static int _dns_server_get_answer(struct dns_server_post_context *context)
}
} break;
default:
tlog(TLOG_DEBUG, "%s, qtype: %d", name, rrs->type);
break;
}
}
@@ -2679,12 +2694,12 @@ static int _dns_server_reply_passthrouth(struct dns_server_post_context *context
return _dns_server_reply_all_pending_list(request, context);
}
void _dns_server_query_end(struct dns_request *request)
static void _dns_server_query_end(struct dns_request *request)
{
int ip_num = 0;
int request_wait = 0;
pthread_mutex_lock(&request->ip_map_lock);
ip_num = request->ip_map_num;
ip_num = atomic_read(&request->ip_map_num);
/* if adblock ip address exist */
ip_num += atomic_read(&request->adblock) == 0 ? 0 : 1;
request_wait = request->request_wait;
@@ -2708,8 +2723,8 @@ out:
_dns_server_request_release(request);
}
int dns_server_dualstack_callback(char *domain, dns_rtcode_t rtcode, dns_type_t addr_type, char *ip,
unsigned int ping_time, void *user_ptr)
static int dns_server_dualstack_callback(const char *domain, dns_rtcode_t rtcode, dns_type_t addr_type, char *ip,
unsigned int ping_time, void *user_ptr)
{
struct dns_request *request = (struct dns_request *)user_ptr;
tlog(TLOG_DEBUG, "dualstack result: domain: %s, ip: %s, type: %d, ping: %d", domain, ip, addr_type, ping_time);
@@ -2728,7 +2743,7 @@ int dns_server_dualstack_callback(char *domain, dns_rtcode_t rtcode, dns_type_t
return 0;
}
static int dns_server_resolve_callback(char *domain, dns_result_type rtype, struct dns_server_info *server_info,
static int dns_server_resolve_callback(const char *domain, dns_result_type rtype, struct dns_server_info *server_info,
struct dns_packet *packet, unsigned char *inpacket, int inpacket_len,
void *user_ptr)
{
@@ -2798,8 +2813,8 @@ static int _dns_server_get_inet_by_addr(struct sockaddr_storage *localaddr, stru
switch (ifa->ifa_addr->sa_family) {
case AF_INET: {
struct sockaddr_in *addr_in_1;
struct sockaddr_in *addr_in_2;
struct sockaddr_in *addr_in_1 = NULL;
struct sockaddr_in *addr_in_2 = NULL;
addr_in_1 = (struct sockaddr_in *)ifa->ifa_addr;
addr_in_2 = (struct sockaddr_in *)localaddr;
if (memcmp(&(addr_in_1->sin_addr.s_addr), &(addr_in_2->sin_addr.s_addr), 4) != 0) {
@@ -2807,8 +2822,8 @@ static int _dns_server_get_inet_by_addr(struct sockaddr_storage *localaddr, stru
}
} break;
case AF_INET6: {
struct sockaddr_in6 *addr_in6_1;
struct sockaddr_in6 *addr_in6_2;
struct sockaddr_in6 *addr_in6_1 = NULL;
struct sockaddr_in6 *addr_in6_2 = NULL;
addr_in6_1 = (struct sockaddr_in6 *)ifa->ifa_addr;
addr_in6_2 = (struct sockaddr_in6 *)localaddr;
if (IN6_IS_ADDR_V4MAPPED(&addr_in6_1->sin6_addr)) {
@@ -2874,7 +2889,7 @@ static int _dns_server_reply_request_eth_ip(struct dns_request *request)
{
struct sockaddr_in *addr_in = NULL;
struct sockaddr_in6 *addr_in6 = NULL;
struct sockaddr_storage *localaddr;
struct sockaddr_storage *localaddr = NULL;
struct sockaddr_storage localaddr_buff;
localaddr = &request->localaddr;
@@ -2955,7 +2970,7 @@ static int _dns_server_process_local_ptr(struct dns_request *request)
{
struct ifaddrs *ifaddr = NULL;
struct ifaddrs *ifa = NULL;
unsigned char *addr;
unsigned char *addr = NULL;
char reverse_addr[128] = {0};
int found = 0;
@@ -2971,14 +2986,14 @@ static int _dns_server_process_local_ptr(struct dns_request *request)
switch (ifa->ifa_addr->sa_family) {
case AF_INET: {
struct sockaddr_in *addr_in;
struct sockaddr_in *addr_in = NULL;
addr_in = (struct sockaddr_in *)ifa->ifa_addr;
addr = (unsigned char *)&(addr_in->sin_addr.s_addr);
snprintf(reverse_addr, sizeof(reverse_addr), "%d.%d.%d.%d.in-addr.arpa", addr[3], addr[2], addr[1],
addr[0]);
} break;
case AF_INET6: {
struct sockaddr_in6 *addr_in6;
struct sockaddr_in6 *addr_in6 = NULL;
addr_in6 = (struct sockaddr_in6 *)ifa->ifa_addr;
if (IN6_IS_ADDR_V4MAPPED(&addr_in6->sin6_addr)) {
addr = addr_in6->sin6_addr.s6_addr + 12;
@@ -3010,7 +3025,7 @@ static int _dns_server_process_local_ptr(struct dns_request *request)
}
/* Determine if the smartdns service is in effect. */
if (strncmp(request->domain, "0.0.0.0.in-addr.arpa", DNS_MAX_CNAME_LEN) == 0) {
if (strncmp(request->domain, "0.0.0.0.in-addr.arpa", DNS_MAX_CNAME_LEN - 1) == 0) {
found = 1;
}
@@ -3033,14 +3048,14 @@ static int _dns_server_process_local_ptr(struct dns_request *request)
}
/* get host name again */
if (strncmp(hostname, "(none)", DNS_MAX_CNAME_LEN) == 0) {
if (strncmp(hostname, "(none)", DNS_MAX_CNAME_LEN - 1) == 0) {
if (gethostname(hostname, DNS_MAX_CNAME_LEN) != 0) {
return -1;
}
}
/* if hostname is (none), return smartdns */
if (strncmp(hostname, "(none)", DNS_MAX_CNAME_LEN) == 0) {
if (strncmp(hostname, "(none)", DNS_MAX_CNAME_LEN - 1) == 0) {
safe_strncpy(hostname, "smartdns", DNS_MAX_CNAME_LEN);
}
} else {
@@ -3161,9 +3176,9 @@ static int _dns_server_get_rules(unsigned char *key, uint32_t key_len, void *val
return 0;
}
void _dns_server_get_domain_rule(struct dns_request *request)
static void _dns_server_get_domain_rule(struct dns_request *request)
{
int domain_len;
int domain_len = 0;
char domain_key[DNS_MAX_CNAME_LEN];
int matched_key_len = DNS_MAX_CNAME_LEN;
unsigned char matched_key[DNS_MAX_CNAME_LEN];
@@ -3204,8 +3219,6 @@ void _dns_server_get_domain_rule(struct dns_request *request)
matched_key[matched_key_len] = 0;
_dns_server_log_rule(request->domain, i, matched_key, matched_key_len);
}
return;
}
static int _dns_server_pre_process_rule_flags(struct dns_request *request)
@@ -3504,7 +3517,7 @@ static int _dns_server_process_cache(struct dns_request *request)
}
if (request->dualstack_selection) {
int dualstack_qtype;
int dualstack_qtype = 0;
if (request->qtype == DNS_T_A) {
dualstack_qtype = DNS_T_AAAA;
} else if (request->qtype == DNS_T_AAAA) {
@@ -3578,7 +3591,7 @@ out:
return ret;
}
void _dns_server_check_ipv6_ready(void)
static void _dns_server_check_ipv6_ready(void)
{
static int do_get_conf = 0;
static int is_icmp_check_set;
@@ -3604,7 +3617,7 @@ void _dns_server_check_ipv6_ready(void)
}
if (is_icmp_check_set) {
struct ping_host_struct *check_ping = fast_ping_start(PING_TYPE_ICMP, "2001::", 1, 0, 100, 0, 0);
struct ping_host_struct *check_ping = fast_ping_start(PING_TYPE_ICMP, "2001::", 1, 0, 100, NULL, NULL);
if (check_ping) {
fast_ping_stop(check_ping);
is_ipv6_ready = 1;
@@ -3618,7 +3631,7 @@ void _dns_server_check_ipv6_ready(void)
}
if (is_tcp_check_set) {
struct ping_host_struct *check_ping = fast_ping_start(PING_TYPE_TCP, "2001::", 1, 0, 100, 0, 0);
struct ping_host_struct *check_ping = fast_ping_start(PING_TYPE_TCP, "2001::", 1, 0, 100, NULL, NULL);
if (check_ping) {
fast_ping_stop(check_ping);
is_ipv6_ready = 1;
@@ -3846,7 +3859,7 @@ static int _dns_server_setup_query_option(struct dns_request *request, struct dn
return 0;
}
int _dns_server_query_dualstack(struct dns_request *request)
static int _dns_server_query_dualstack(struct dns_request *request)
{
int ret = -1;
struct dns_request *request_dualstack = NULL;
@@ -3993,11 +4006,11 @@ errout:
static int _dns_server_parser_request(struct dns_request *request, struct dns_packet *packet)
{
struct dns_rrs *rrs;
struct dns_rrs *rrs = NULL;
int rr_count = 0;
int i = 0;
int ret = 0;
int qclass;
int qclass = 0;
int qtype = DNS_T_ALL;
char domain[DNS_MAX_CNAME_LEN];
@@ -4048,7 +4061,7 @@ static int _dns_server_recv(struct dns_server_conn_head *conn, unsigned char *in
struct sockaddr_storage *local, socklen_t local_len, struct sockaddr_storage *from,
socklen_t from_len)
{
int decode_len;
int decode_len = 0;
int ret = -1;
unsigned char packet_buff[DNS_PACKSIZE];
char name[DNS_MAX_CNAME_LEN];
@@ -4150,7 +4163,7 @@ errout:
return ret;
}
int dns_server_query(char *domain, int qtype, uint32_t server_flags, dns_result_callback callback, void *user_ptr)
int dns_server_query(const char *domain, int qtype, uint32_t server_flags, dns_result_callback callback, void *user_ptr)
{
int ret = -1;
struct dns_request *request = NULL;
@@ -4184,7 +4197,7 @@ errout:
static int _dns_server_process_udp(struct dns_server_conn_udp *udpconn, struct epoll_event *event, unsigned long now)
{
int len;
int len = 0;
unsigned char inpacket[DNS_IN_PACKSIZE];
struct sockaddr_storage from;
socklen_t from_len = sizeof(from);
@@ -4193,7 +4206,7 @@ static int _dns_server_process_udp(struct dns_server_conn_udp *udpconn, struct e
struct msghdr msg;
struct iovec iov;
char ans_data[4096];
struct cmsghdr *cmsg;
struct cmsghdr *cmsg = NULL;
memset(&msg, 0, sizeof(msg));
iov.iov_base = (char *)inpacket;
@@ -4304,11 +4317,11 @@ errout:
static int _dns_server_tcp_recv(struct dns_server_conn_tcp_client *tcpclient)
{
int len = 0;
ssize_t len = 0;
/* Receive data */
while (tcpclient->recvbuff.size < sizeof(tcpclient->recvbuff.buf)) {
if (tcpclient->recvbuff.size == sizeof(tcpclient->recvbuff.buf)) {
while (tcpclient->recvbuff.size < (int)sizeof(tcpclient->recvbuff.buf)) {
if (tcpclient->recvbuff.size == (int)sizeof(tcpclient->recvbuff.buf)) {
return 0;
}
@@ -4333,7 +4346,7 @@ static int _dns_server_tcp_recv(struct dns_server_conn_tcp_client *tcpclient)
static int _dns_server_tcp_process_one_request(struct dns_server_conn_tcp_client *tcpclient)
{
int request_len = 0;
unsigned short request_len = 0;
int total_len = tcpclient->recvbuff.size;
int proceed_len = 0;
unsigned char *request_data = NULL;
@@ -4341,7 +4354,7 @@ static int _dns_server_tcp_process_one_request(struct dns_server_conn_tcp_client
/* Handling multiple requests */
for (;;) {
if ((total_len - proceed_len) <= sizeof(unsigned short)) {
if ((total_len - proceed_len) <= (int)sizeof(unsigned short)) {
ret = RECV_ERROR_AGAIN;
break;
}
@@ -4424,7 +4437,7 @@ static int _dns_server_tcp_process_requests(struct dns_server_conn_tcp_client *t
static int _dns_server_tcp_send(struct dns_server_conn_tcp_client *tcpclient)
{
int len;
int len = 0;
while (tcpclient->sndbuff.size > 0) {
len = send(tcpclient->head.fd, tcpclient->sndbuff.buf, tcpclient->sndbuff.size, MSG_NOSIGNAL);
if (len < 0) {
@@ -4477,7 +4490,7 @@ static int _dns_server_process_tcp(struct dns_server_conn_tcp_client *dnsserver,
static int _dns_server_process(struct dns_server_conn_head *conn, struct epoll_event *event, unsigned long now)
{
int ret;
int ret = 0;
_dns_server_client_touch(conn);
_dns_server_conn_get(conn);
if (conn->type == DNS_CONN_TYPE_UDP_SERVER) {
@@ -4512,8 +4525,8 @@ static int _dns_server_process(struct dns_server_conn_head *conn, struct epoll_e
static int _dns_server_second_ping_check(struct dns_request *request)
{
struct dns_ip_address *addr_map;
int bucket = 0;
struct dns_ip_address *addr_map = NULL;
unsigned long bucket = 0;
char ip[DNS_MAX_CNAME_LEN] = {0};
int ret = -1;
@@ -4587,8 +4600,9 @@ static void _dns_server_prefetch_expired_domain(struct dns_cache *dns_cache)
static void _dns_server_tcp_idle_check(void)
{
struct dns_server_conn_head *conn, *tmp;
time_t now;
struct dns_server_conn_head *conn = NULL;
struct dns_server_conn_head *tmp = NULL;
time_t now = 0;
if (dns_conf_tcp_idle_time <= 0) {
return;
@@ -4613,7 +4627,7 @@ static void _dns_server_period_run_second(void)
{
static unsigned int sec = 0;
static time_t last = 0;
time_t now;
time_t now = 0;
sec++;
time(&now);
@@ -4665,7 +4679,8 @@ static void _dns_server_period_run_second(void)
static void _dns_server_period_run(void)
{
struct dns_request *request, *tmp;
struct dns_request *request = NULL;
struct dns_request *tmp = NULL;
static unsigned int msec = 0;
LIST_HEAD(check_list);
@@ -4681,7 +4696,7 @@ static void _dns_server_period_run(void)
{
/* Need to use tcping detection speed */
int check_order = request->check_order + 1;
if (request->ip_map_num == 0 || request->has_soa) {
if (atomic_read(&request->ip_map_num) == 0 || request->has_soa) {
continue;
}
@@ -4703,7 +4718,8 @@ static void _dns_server_period_run(void)
static void _dns_server_close_socket(void)
{
struct dns_server_conn_head *conn, *tmp;
struct dns_server_conn_head *conn = NULL;
struct dns_server_conn_head *tmp = NULL;
list_for_each_entry_safe(conn, tmp, &server.conn_list, list)
{
@@ -4711,11 +4727,30 @@ static void _dns_server_close_socket(void)
}
}
static void _dns_server_close_socket_server(void)
{
struct dns_server_conn_head *conn = NULL;
struct dns_server_conn_head *tmp = NULL;
list_for_each_entry_safe(conn, tmp, &server.conn_list, list)
{
switch (conn->type) {
case DNS_CONN_TYPE_UDP_SERVER:
case DNS_CONN_TYPE_TCP_SERVER:
case DNS_CONN_TYPE_TLS_SERVER:
_dns_server_client_close(conn);
break;
default:
break;
}
}
}
int dns_server_run(void)
{
struct epoll_event events[DNS_MAX_EVENTS + 1];
int num;
int i;
int num = 0;
int i = 0;
unsigned long now = {0};
int sleep = 100;
int sleep_time = 0;
@@ -4724,7 +4759,7 @@ int dns_server_run(void)
sleep_time = sleep;
now = get_tick_count() - sleep;
expect_time = now + sleep;
while (server.run) {
while (atomic_read(&server.run)) {
now = get_tick_count();
if (now >= expect_time) {
_dns_server_period_run();
@@ -4760,7 +4795,7 @@ int dns_server_run(void)
}
}
_dns_server_close_socket();
_dns_server_close_socket_server();
close(server.epoll_fd);
server.epoll_fd = -1;
@@ -4815,7 +4850,7 @@ static int _dns_create_socket(const char *host_ip, int type)
struct addrinfo *gai = NULL;
char port_str[8];
char ip[MAX_IP_LEN];
int port;
int port = 0;
char *host = NULL;
int optval = 1;
int yes = 1;
@@ -4898,7 +4933,7 @@ static int _dns_server_set_flags(struct dns_server_conn_head *head, struct dns_b
static int _dns_server_socket_udp(struct dns_bind_ip *bind_ip)
{
const char *host_ip;
const char *host_ip = NULL;
struct dns_server_conn_udp *conn = NULL;
int fd = -1;
@@ -4934,7 +4969,7 @@ errout:
static int _dns_server_socket_tcp(struct dns_bind_ip *bind_ip)
{
const char *host_ip;
const char *host_ip = NULL;
struct dns_server_conn_tcp_server *conn = NULL;
int fd = -1;
@@ -5110,7 +5145,7 @@ int dns_server_init(void)
pthread_mutex_init(&server.request_list_lock, NULL);
INIT_LIST_HEAD(&server.request_list);
server.epoll_fd = epollfd;
server.run = 1;
atomic_set(&server.run, 1);
if (dns_server_start() != 0) {
tlog(TLOG_ERROR, "start service failed.\n");
@@ -5123,7 +5158,7 @@ int dns_server_init(void)
return 0;
errout:
server.run = 0;
atomic_set(&server.run, 0);
if (epollfd) {
close(epollfd);
@@ -5139,7 +5174,7 @@ errout:
void dns_server_stop(void)
{
server.run = 0;
atomic_set(&server.run, 0);
}
void dns_server_exit(void)