[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#291609: libc6: Missing funcions in libresolv



Package: libc6
Version: 2.3.2.ds1-20
Severity: normal


I'm using functions defined in arpa/nameser.h, undocumented in libc, but
explained in chapter 12 of O'Reilly's DNS & BIND (ISBN: 0-596-00158-4).
I do think that this lack of documentation is also a bug.

They are included in /usr/lib/libresolv.a from libc6-dev package, but
not in libresolv.so. Below is included a small example program to
demonstrate this.

This is the error:

$ gcc -Wall -pedantic test.c -lresolv -o test
/tmp/cc6jU6ZL.o(.text+0xa4): In function `main':
: undefined reference to `__ns_initparse'
/tmp/cc6jU6ZL.o(.text+0x124): In function `main':
: undefined reference to `__ns_parserr'
/tmp/cc6jU6ZL.o(.text+0x190): In function `main':
: undefined reference to `__ns_name_uncompress'
collect2: ld returned 1 exit status
$

But this works:

$ gcc -Wall -pedantic test.c /usr/lib/libresolv.a -o test
$

I have repeated this behaviour in Woody.

Code (test.c)
====================
#include <netinet/in.h>
#include <arpa/nameser.h>
#include <resolv.h>
#include <netdb.h>

int main(void) {
	char domain[] = "debian.org";
	int rlen;
	u_char ans[PACKETSZ];
	u_char *cp;
	ns_msg handle;
	ns_rr rr;
	int i;

	int prio;
	char mx[MAXDNAME + 1];

	rlen = res_query(domain, C_IN, T_MX, ans, PACKETSZ);
	if(rlen < 0) {
		herror("resolver");
		return 1;
	}
	if (ns_initparse(ans, rlen, &handle) < 0) {
		perror("ns_initparse");
		return(1);
	}
	if(ns_msg_count(handle, ns_s_an) == 0) {
		return(1);
	}
	for(i = 0; i < ns_msg_count(handle, ns_s_an); i++) {
		if(ns_parserr(&handle, ns_s_an, i, &rr) < 0) {
			perror("ns_parserr");
			continue;
		}

		cp = (u_char *)ns_rr_rdata(rr);
		prio = ns_get16(cp);
		if(ns_name_uncompress(ns_msg_base(handle), ns_msg_end(handle),
					cp + 2, mx, sizeof(mx)) < 0) {
			perror("ns_name_uncompress");
			continue;
		}
		printf("prio: %d, mx: %s\n", prio, mx);
	}
	return 0;
}
=========================

-- System Information:
Debian Release: 3.1
  APT prefers testing
  APT policy: (900, 'testing'), (1, 'experimental')
Architecture: i386 (i686)
Kernel: Linux 2.6.8-1-686
Locale: LANG=es_AR, LC_CTYPE=es_AR (charmap=ISO-8859-1)

Versions of packages libc6 depends on:
ii  libdb1-compat                 2.1.3-7    The Berkeley database routines [gl

-- no debconf information



Reply to: