Index: uspace/lib/c/generic/dnsr.c
===================================================================
--- uspace/lib/c/generic/dnsr.c	(revision 8fdb18e1b43cce69fbf3e0ce3a63e333e77c79db)
+++ uspace/lib/c/generic/dnsr.c	(revision d242cb6a311e633e1cf8c95117046ea51295d4c7)
@@ -71,4 +71,7 @@
 {
 	async_exch_t *exch = dnsr_exchange_begin();
+	char cname_buf[DNSR_NAME_MAX_SIZE + 1];
+	ipc_call_t cnreply;
+	size_t act_size;
 	dnsr_hostinfo_t *info;
 
@@ -76,4 +79,6 @@
 	aid_t req = async_send_0(exch, DNSR_NAME2HOST, &answer);
 	sysarg_t retval = async_data_write_start(exch, name, str_size(name));
+	aid_t cnreq = async_data_read(exch, cname_buf, DNSR_NAME_MAX_SIZE,
+	    &cnreply);
 
 	dnsr_exchange_end(exch);
@@ -81,8 +86,15 @@
 	if (retval != EOK) {
 		async_forget(req);
+		async_forget(cnreq);
 		return retval;
 	}
 
 	async_wait_for(req, &retval);
+	if (retval != EOK) {
+		async_forget(cnreq);
+		return EIO;
+	}
+
+	async_wait_for(cnreq, &retval);
 	if (retval != EOK)
 		return EIO;
@@ -92,5 +104,9 @@
 		return ENOMEM;
 
-	info->name = str_dup(name);
+	act_size = IPC_GET_ARG2(cnreply);
+	assert(act_size <= DNSR_NAME_MAX_SIZE);
+	cname_buf[act_size] = '\0';
+
+	info->cname = str_dup(cname_buf);
 	info->addr.ipv4 = IPC_GET_ARG1(answer);
 
@@ -104,5 +120,5 @@
 		return;
 
-	free(info->name);
+	free(info->cname);
 	free(info);
 }
Index: uspace/lib/c/include/inet/dnsr.h
===================================================================
--- uspace/lib/c/include/inet/dnsr.h	(revision 8fdb18e1b43cce69fbf3e0ce3a63e333e77c79db)
+++ uspace/lib/c/include/inet/dnsr.h	(revision d242cb6a311e633e1cf8c95117046ea51295d4c7)
@@ -38,7 +38,11 @@
 #include <inet/inet.h>
 
+enum {
+	DNSR_NAME_MAX_SIZE = 255
+};
+
 typedef struct {
-	/** Host name */
-	char *name;
+	/** Host canonical name */
+	char *cname;
 	/** Host address */
 	inet_addr_t addr;
