Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/net/dnsrsrv/query.c

    r959d2ec r716357f  
    5454        dns_question_t *question;
    5555        dns_host_info_t *info;
    56         char *sname, *cname;
    57         size_t eoff;
    5856        int rc;
    5957
     
    8583        }
    8684
    87         /* Start with the caller-provided name */
    88         sname = str_dup(name);
    89 
    9085        list_foreach(amsg->answer, link) {
    9186                dns_rr_t *rr = list_get_instance(link, dns_rr_t, msg);
     
    9489                        rr->name, rr->rtype, rr->rclass, rr->rdata_size);
    9590
    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 
    11891                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)) {
    12193
    12294                        info = calloc(1, sizeof(dns_host_info_t));
    12395                        if (info == NULL) {
    124                                 dns_message_destroy(msg);
    12596                                dns_message_destroy(amsg);
    12697                                return ENOMEM;
    12798                        }
    12899
    129                         info->cname = str_dup(rr->name);
     100                        info->name = str_dup(rr->name);
    130101                        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);
    133104
    134105                        dns_message_destroy(msg);
     
    141112        dns_message_destroy(msg);
    142113        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");
    144115
    145116        return EIO;
     
    148119void dns_hostinfo_destroy(dns_host_info_t *info)
    149120{
    150         free(info->cname);
     121        free(info->name);
    151122        free(info);
    152123}
Note: See TracChangeset for help on using the changeset viewer.