Generate debian / asus-optware package
This commit is contained in:
@@ -42,7 +42,7 @@ int config_server_name(char *value)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int config_server(char *value, dns_conf_server_type_t type)
|
||||
int config_server(char *value, dns_server_type_t type)
|
||||
{
|
||||
int index = dns_conf_server_num;
|
||||
struct dns_servers *server;
|
||||
@@ -172,17 +172,17 @@ errout:
|
||||
|
||||
int config_server_udp(char *value)
|
||||
{
|
||||
return config_server(value, DNS_CONF_TYPE_UDP);
|
||||
return config_server(value, DNS_SERVER_UDP);
|
||||
}
|
||||
|
||||
int config_server_tcp(char *value)
|
||||
{
|
||||
return config_server(value, DNS_CONF_TYPE_TCP);
|
||||
return config_server(value, DNS_SERVER_TCP);
|
||||
}
|
||||
|
||||
int config_server_http(char *value)
|
||||
{
|
||||
return config_server(value, DNS_CONF_TYPE_HTTP);
|
||||
return config_server(value, DNS_SERVER_HTTP);
|
||||
}
|
||||
|
||||
int config_cache_size(char *value)
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
#include "list.h"
|
||||
#include "art.h"
|
||||
#include "dns.h"
|
||||
#include "dns_client.h"
|
||||
|
||||
#define DNS_MAX_SERVERS 32
|
||||
#define DNS_MAX_IPLEN 64
|
||||
@@ -11,16 +12,10 @@
|
||||
#define DEFAULT_DNS_PORT 53
|
||||
#define DNS_MAX_CONF_CNAME_LEN 128
|
||||
|
||||
typedef enum dns_conf_server_type {
|
||||
DNS_CONF_TYPE_UDP,
|
||||
DNS_CONF_TYPE_TCP,
|
||||
DNS_CONF_TYPE_HTTP,
|
||||
} dns_conf_server_type_t;
|
||||
|
||||
struct dns_servers {
|
||||
char server[DNS_MAX_IPLEN];
|
||||
unsigned short port;
|
||||
dns_conf_server_type_t type;
|
||||
dns_server_type_t type;
|
||||
};
|
||||
|
||||
struct dns_address {
|
||||
|
||||
13
src/dns.c
13
src/dns.c
@@ -35,6 +35,8 @@
|
||||
#define RCODE_MASK 0x000F
|
||||
#define DNS_RR_END (0XFFFF)
|
||||
|
||||
#define UNUSED(expr) do { (void)(expr); } while (0)
|
||||
|
||||
/* read short and move pointer */
|
||||
short dns_read_short(unsigned char **buffer)
|
||||
{
|
||||
@@ -833,7 +835,7 @@ static int _dns_decode_domain(struct dns_context *context, char *output, int siz
|
||||
context->ptr = ptr;
|
||||
}
|
||||
ptr = context->data + len;
|
||||
if (context->maxsize - (ptr - context->data) < 0) {
|
||||
if (context->maxsize < (ptr - context->data)) {
|
||||
tlog(TLOG_ERROR, "length is not enouth %u:%ld, %p, %p", context->maxsize, (long)(ptr - context->data), context->ptr, context->data);
|
||||
return -1;
|
||||
}
|
||||
@@ -847,7 +849,7 @@ static int _dns_decode_domain(struct dns_context *context, char *output, int siz
|
||||
output++;
|
||||
}
|
||||
|
||||
if (context->maxsize - (ptr - context->data) < 0) {
|
||||
if (context->maxsize < (ptr - context->data)) {
|
||||
tlog(TLOG_ERROR, "length is not enouth %u:%ld, %p, %p", context->maxsize, (long)(ptr - context->data), context->ptr, context->data);
|
||||
return -1;
|
||||
}
|
||||
@@ -856,7 +858,7 @@ static int _dns_decode_domain(struct dns_context *context, char *output, int siz
|
||||
if (output_len < size - 1) {
|
||||
/* copy sub string */
|
||||
copy_len = (len < size - output_len) ? len : size - 1 - output_len;
|
||||
if (context->maxsize - (ptr - context->data) < 0) {
|
||||
if (context->maxsize < (ptr - context->data)) {
|
||||
tlog(TLOG_ERROR, "length is not enouth %u:%ld, %p, %p", context->maxsize, (long)(ptr - context->data), context->ptr, context->data);
|
||||
return -1;
|
||||
}
|
||||
@@ -1250,6 +1252,9 @@ static int _dns_decode_opt(struct dns_context *context, dns_rr_type type, unsign
|
||||
unsigned char *start = context->ptr;
|
||||
struct dns_packet *packet = context->packet;
|
||||
int ret = 0;
|
||||
|
||||
UNUSED(ever);
|
||||
|
||||
/*
|
||||
Field Name Field Type Description
|
||||
------------------------------------------------------
|
||||
@@ -1284,7 +1289,7 @@ static int _dns_decode_opt(struct dns_context *context, dns_rr_type type, unsign
|
||||
tlog(TLOG_ERROR, "extend rcode invalid.");
|
||||
return -1;
|
||||
}
|
||||
ever = ever;
|
||||
|
||||
|
||||
tlog(TLOG_DEBUG, "decode opt.");
|
||||
while (context->ptr - start < rr_len) {
|
||||
|
||||
@@ -119,6 +119,8 @@ struct dns_request {
|
||||
|
||||
atomic_t notified;
|
||||
|
||||
atomic_t adblock;
|
||||
|
||||
/* send original raw packet to server/client like proxy */
|
||||
int passthrough;
|
||||
|
||||
@@ -535,12 +537,6 @@ static int _dns_server_process_answer(struct dns_request *request, char *domain,
|
||||
break;
|
||||
}
|
||||
|
||||
if (addr[0] == 0) {
|
||||
_dns_server_request_release(request);
|
||||
tlog(TLOG_WARN, "Ad blocker, domain: %s", domain);
|
||||
break;
|
||||
}
|
||||
|
||||
if (request->has_ipv4 == 0) {
|
||||
memcpy(request->ipv4_addr, addr, DNS_RR_A_LEN);
|
||||
request->ttl_v4 = _dns_server_get_conf_ttl(ttl);
|
||||
@@ -550,6 +546,14 @@ static int _dns_server_process_answer(struct dns_request *request, char *domain,
|
||||
request->ttl_v4 = _dns_server_get_conf_ttl(ttl);
|
||||
}
|
||||
}
|
||||
|
||||
if (addr[0] == 0 || addr[0] == 127) {
|
||||
if (atomic_inc_return(&request->adblock) <= 1) {
|
||||
_dns_server_request_release(request);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (_dns_ip_address_check_add(request, addr, DNS_T_A) != 0) {
|
||||
_dns_server_request_release(request);
|
||||
break;
|
||||
@@ -859,6 +863,7 @@ static int _dns_server_recv(unsigned char *inpacket, int inpacket_len, struct so
|
||||
request = malloc(sizeof(*request));
|
||||
memset(request, 0, sizeof(*request));
|
||||
pthread_mutex_init(&request->ip_map_lock, 0);
|
||||
atomic_set(&request->adblock, 0);
|
||||
request->ping_ttl_v4 = -1;
|
||||
request->ping_ttl_v6 = -1;
|
||||
request->rcode = DNS_RC_SERVFAIL;
|
||||
|
||||
@@ -61,7 +61,7 @@ void help(void)
|
||||
"Online help: http://smartdns.github.io"
|
||||
"\n";
|
||||
/* clang-format on */
|
||||
printf(help);
|
||||
printf("%s", help);
|
||||
}
|
||||
|
||||
int smartdns_load_from_resolv(void)
|
||||
@@ -283,10 +283,10 @@ int main(int argc, char *argv[])
|
||||
is_forground = 1;
|
||||
break;
|
||||
case 'c':
|
||||
snprintf(config_file, sizeof(config_file), optarg);
|
||||
snprintf(config_file, sizeof(config_file), "%s", optarg);
|
||||
break;
|
||||
case 'p':
|
||||
snprintf(pid_file, sizeof(pid_file), optarg);
|
||||
snprintf(pid_file, sizeof(pid_file), "%s", optarg);
|
||||
break;
|
||||
case 'h':
|
||||
help();
|
||||
|
||||
Reference in New Issue
Block a user