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

Bug#192876: libc6: getaddrinfo() does not detect invalid numeric services



Package: libc6
Version: 2.3.1-16
Severity: normal

By my reading of the getaddrinfo() manual (and also the Solaris
manpage) getaddrinfo() ought to return EAI_SERVICE when the requested
service is not available.  However, it does not seem to do this when
the service is a number, but out of the valid range 1-65535 for TCP
ports.

Here is a reproduction case:

------------------
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>

/* try getaddrinfo */
int main(void)
{
	int err;
	struct addrinfo *res;
	struct addrinfo hints;

	bzero(&hints, sizeof hints);
 	hints.ai_family = AF_INET; 
	hints.ai_socktype = SOCK_STREAM;
	hints.ai_flags = AI_PASSIVE;

	err = getaddrinfo(NULL, "80000", &hints, &res);
	printf("err=%d, %s\n", err, gai_strerror(err));

	return 0;
}
------------------

On my machine this returns 0, rather than the expected -8 "servname
not supported".

If I change "80000" to an invalid non-numeric string then the error
is flagged as expected.


-- System Information:
Debian Release: testing/unstable
Architecture: i386
Kernel: Linux wistful 2.4.20 #24 Mon Dec 30 19:32:14 EST 2002 i686
Locale: LANG=C, LC_CTYPE=C

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

-- no debconf information

--
Martin



Reply to: