Fix CNAME buff too short issue
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user