Changes in uspace/srv/net/dnsrsrv/query.c [959d2ec:716357f] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/net/dnsrsrv/query.c
r959d2ec r716357f 54 54 dns_question_t *question; 55 55 dns_host_info_t *info; 56 char *sname, *cname;57 size_t eoff;58 56 int rc; 59 57 … … 85 83 } 86 84 87 /* Start with the caller-provided name */88 sname = str_dup(name);89 90 85 list_foreach(amsg->answer, link) { 91 86 dns_rr_t *rr = list_get_instance(link, dns_rr_t, msg); … … 94 89 rr->name, rr->rtype, rr->rclass, rr->rdata_size); 95 90 96 if (rr->rtype == DTYPE_CNAME && rr->rclass == DC_IN &&97 str_cmp(rr->name, sname) == 0) {98 log_msg(LOG_DEFAULT, LVL_DEBUG, "decode cname (%p, %zu, %zu)",99 amsg->pdu.data, amsg->pdu.size, rr->roff);100 rc = dns_name_decode(&amsg->pdu, rr->roff, &cname, &eoff);101 if (rc != EOK) {102 log_msg(LOG_DEFAULT, LVL_DEBUG,103 "error decoding cname");104 assert(rc == EINVAL || rc == ENOMEM);105 dns_message_destroy(msg);106 dns_message_destroy(amsg);107 return rc;108 }109 110 log_msg(LOG_DEFAULT, LVL_DEBUG, "name = '%s' "111 "cname = '%s'", sname, cname);112 113 free(sname);114 /* Continue looking for the more canonical name */115 sname = cname;116 }117 118 91 if (rr->rtype == DTYPE_A && rr->rclass == DC_IN && 119 rr->rdata_size == sizeof(uint32_t) && 120 str_cmp(rr->name, sname) == 0) { 92 rr->rdata_size == sizeof(uint32_t)) { 121 93 122 94 info = calloc(1, sizeof(dns_host_info_t)); 123 95 if (info == NULL) { 124 dns_message_destroy(msg);125 96 dns_message_destroy(amsg); 126 97 return ENOMEM; 127 98 } 128 99 129 info-> cname = str_dup(rr->name);100 info->name = str_dup(rr->name); 130 101 info->addr.ipv4 = dns_uint32_t_decode(rr->rdata, rr->rdata_size); 131 log_msg(LOG_DEFAULT, LVL_DEBUG, "info-> name = '%s' "132 "info->addr = %x", info->cname,info->addr.ipv4);102 log_msg(LOG_DEFAULT, LVL_DEBUG, "info->addr = %x", 103 info->addr.ipv4); 133 104 134 105 dns_message_destroy(msg); … … 141 112 dns_message_destroy(msg); 142 113 dns_message_destroy(amsg); 143 log_msg(LOG_DEFAULT, LVL_DEBUG, " '%s' not resolved, fail", sname);114 log_msg(LOG_DEFAULT, LVL_DEBUG, "No A/IN found, fail"); 144 115 145 116 return EIO; … … 148 119 void dns_hostinfo_destroy(dns_host_info_t *info) 149 120 { 150 free(info-> cname);121 free(info->name); 151 122 free(info); 152 123 }
Note:
See TracChangeset
for help on using the changeset viewer.