Changeset 959d2ec in mainline


Ignore:
Timestamp:
2013-05-08T10:29:45Z (11 years ago)
Author:
Jiri Svoboda <jiri@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
d242cb6
Parents:
9f029aa
Message:

Return canonical name to caller.

Location:
uspace
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/dnsres/dnsres.c

    r9f029aa r959d2ec  
    5050        int rc;
    5151        dnsr_hostinfo_t *hinfo;
     52        char *hname;
    5253        char *saddr;
    5354
     
    5758        }
    5859
    59         rc = dnsr_name2host(argv[1], &hinfo);
     60        hname = argv[1];
     61
     62        rc = dnsr_name2host(hname, &hinfo);
    6063        if (rc != EOK) {
    6164                printf(NAME ": Error resolving '%s'.\n", argv[1]);
     
    7073        }
    7174
    72         printf("Host name: %s address: %s\n", hinfo->name, saddr);
     75        printf("Host name: %s\n", hname);
     76        if (str_cmp(hname, hinfo->cname) != 0)
     77                printf("Canonical name: %s\n", hinfo->cname);
     78        printf("Address: %s\n", saddr);
     79
    7380        dnsr_hostinfo_destroy(hinfo);
    7481        free(saddr);
  • uspace/app/ping/ping.c

    r9f029aa r959d2ec  
    234234
    235235        if (hinfo != NULL) {
    236                 rc = asprintf(&sdest, "%s (%s)", hinfo->name, adest);
     236                rc = asprintf(&sdest, "%s (%s)", hinfo->cname, adest);
    237237                if (rc < 0) {
    238238                        printf(NAME ": Out of memory.\n");
  • uspace/lib/c/generic/dnsr.c

    r9f029aa r959d2ec  
    7171{
    7272        async_exch_t *exch = dnsr_exchange_begin();
     73        char cname_buf[DNSR_NAME_MAX_SIZE + 1];
     74        ipc_call_t cnreply;
     75        size_t act_size;
    7376        dnsr_hostinfo_t *info;
    7477
     
    7679        aid_t req = async_send_0(exch, DNSR_NAME2HOST, &answer);
    7780        sysarg_t retval = async_data_write_start(exch, name, str_size(name));
     81        aid_t cnreq = async_data_read(exch, cname_buf, DNSR_NAME_MAX_SIZE,
     82            &cnreply);
    7883
    7984        dnsr_exchange_end(exch);
     
    8186        if (retval != EOK) {
    8287                async_forget(req);
     88                async_forget(cnreq);
    8389                return retval;
    8490        }
    8591
    8692        async_wait_for(req, &retval);
     93        if (retval != EOK) {
     94                async_forget(cnreq);
     95                return EIO;
     96        }
     97
     98        async_wait_for(cnreq, &retval);
    8799        if (retval != EOK)
    88100                return EIO;
     
    92104                return ENOMEM;
    93105
    94         info->name = str_dup(name);
     106        act_size = IPC_GET_ARG2(cnreply);
     107        assert(act_size <= DNSR_NAME_MAX_SIZE);
     108        cname_buf[act_size] = '\0';
     109
     110        info->cname = str_dup(cname_buf);
    95111        info->addr.ipv4 = IPC_GET_ARG1(answer);
    96112
     
    104120                return;
    105121
    106         free(info->name);
     122        free(info->cname);
    107123        free(info);
    108124}
  • uspace/lib/c/include/inet/dnsr.h

    r9f029aa r959d2ec  
    3838#include <inet/inet.h>
    3939
     40enum {
     41        DNSR_NAME_MAX_SIZE = 255
     42};
     43
    4044typedef struct {
    41         /** Host name */
    42         char *name;
     45        /** Host canonical name */
     46        char *cname;
    4347        /** Host address */
    4448        inet_addr_t addr;
  • uspace/srv/net/dnsrsrv/dns_type.h

    r9f029aa r959d2ec  
    113113typedef struct {
    114114        /** Host name */
    115         char *name;
     115        char *cname;
    116116        /** Host address */
    117117        inet_addr_t addr;
  • uspace/srv/net/dnsrsrv/dnsrsrv.c

    r9f029aa r959d2ec  
    8989        char *name;
    9090        dns_host_info_t *hinfo;
     91        ipc_callid_t rcallid;
     92        size_t size;
     93        sysarg_t retval;
     94        size_t act_size;
    9195        int rc;
    9296
     
    100104        }
    101105
     106        if (!async_data_read_receive(&rcallid, &size)) {
     107                async_answer_0(rcallid, EREFUSED);
     108                async_answer_0(callid, EREFUSED);
     109                return;
     110        }
     111
    102112        rc = dns_name2host(name, &hinfo);
    103113        if (rc != EOK) {
     114                async_answer_0(rcallid, rc);
    104115                async_answer_0(callid, rc);
    105116                return;
    106117        }
    107118
    108         async_answer_1(callid, EOK, hinfo->addr.ipv4);
     119        act_size = str_size(hinfo->cname);
     120        if (act_size > size) {
     121                async_answer_0(rcallid, EOVERFLOW);
     122                async_answer_0(callid, EOVERFLOW);
     123                return;
     124        }
     125
     126        retval = async_data_read_finalize(rcallid, hinfo->cname, act_size);
     127        async_answer_1(callid, retval, hinfo->addr.ipv4);
    109128
    110129        dns_hostinfo_destroy(hinfo);
  • uspace/srv/net/dnsrsrv/query.c

    r9f029aa r959d2ec  
    127127                        }
    128128
    129                         info->name = str_dup(rr->name);
     129                        info->cname = str_dup(rr->name);
    130130                        info->addr.ipv4 = dns_uint32_t_decode(rr->rdata, rr->rdata_size);
    131131                        log_msg(LOG_DEFAULT, LVL_DEBUG, "info->name = '%s' "
    132                             "info->addr = %x", info->name, info->addr.ipv4);
     132                            "info->addr = %x", info->cname, info->addr.ipv4);
    133133
    134134                        dns_message_destroy(msg);
     
    148148void dns_hostinfo_destroy(dns_host_info_t *info)
    149149{
    150         free(info->name);
     150        free(info->cname);
    151151        free(info);
    152152}
Note: See TracChangeset for help on using the changeset viewer.