Fix CNAME buff too short issue

This commit is contained in:
Nick Peng
2019-10-07 23:14:23 +08:00
parent 65e8cd5e61
commit 9213f898c3
2 changed files with 9 additions and 4 deletions

View File

@@ -265,6 +265,7 @@ static int _dns_add_qr_head(struct dns_data_context *data_context, char *domain,
static int _dns_get_qr_head(struct dns_data_context *data_context, char *domain, int maxsize, int *qtype, int *qclass) static int _dns_get_qr_head(struct dns_data_context *data_context, char *domain, int maxsize, int *qtype, int *qclass)
{ {
int i; int i;
int is_read_all = 0;
/* question head */ /* question head */
/* |domain | /* |domain |
* |qtype | qclass | * |qtype | qclass |
@@ -278,6 +279,7 @@ static int _dns_get_qr_head(struct dns_data_context *data_context, char *domain,
domain++; domain++;
data_context->ptr++; data_context->ptr++;
i++; i++;
is_read_all = 1;
break; break;
} }
*domain = *data_context->ptr; *domain = *data_context->ptr;
@@ -286,6 +288,9 @@ static int _dns_get_qr_head(struct dns_data_context *data_context, char *domain,
} }
*domain = '\0'; *domain = '\0';
if (is_read_all == 0) {
return -1;
}
if (_dns_data_left_len(data_context) < 4) { if (_dns_data_left_len(data_context) < 4) {
return -1; return -1;

View File

@@ -1428,13 +1428,13 @@ static int _dns_server_process_answer(struct dns_request *request, char *domain,
request->rcode = packet->head.rcode; request->rcode = packet->head.rcode;
} break; } break;
case DNS_T_NS: { case DNS_T_NS: {
char cname[128]; char cname[DNS_MAX_CNAME_LEN];
dns_get_CNAME(rrs, name, 128, &ttl, cname, 128); 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); tlog(TLOG_DEBUG, "NS: %s ttl:%d cname: %s\n", name, ttl, cname);
} break; } break;
case DNS_T_CNAME: { case DNS_T_CNAME: {
char cname[128]; char cname[DNS_MAX_CNAME_LEN];
dns_get_CNAME(rrs, name, 128, &ttl, cname, 128); dns_get_CNAME(rrs, name, DNS_MAX_CNAME_LEN, &ttl, cname, DNS_MAX_CNAME_LEN);
tlog(TLOG_DEBUG, "name:%s ttl: %d cname: %s\n", name, ttl, cname); tlog(TLOG_DEBUG, "name:%s ttl: %d cname: %s\n", name, ttl, cname);
safe_strncpy(request->cname, cname, DNS_MAX_CNAME_LEN); safe_strncpy(request->cname, cname, DNS_MAX_CNAME_LEN);
request->ttl_cname = ttl; request->ttl_cname = ttl;