Date: Thu, 27 Apr 2000 01:20:24 -0700 (PDT) From: pavlin@catarina.usc.edu To: FreeBSD-gnats-submit@freebsd.org Cc: pavlin@catarina.usc.edu Subject: misc/18251: inet_aton(204.08.126.0) failure Message-ID: <200004270820.BAA56964@gaudi.usc.edu>
next in thread | raw e-mail | index | archive | help
>Number: 18251
>Category: misc
>Synopsis: inet_aton() may fail for some addresses (e.g. 204.08.126.0)
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Thu Apr 27 01:30:01 PDT 2000
>Closed-Date:
>Last-Modified:
>Originator: Pavlin Ivanov Radoslavov
>Release: FreeBSD 4.0-RELEASE i386
>Organization:
University of Southern California, Dept. of CS
>Environment:
FreeBSD 4.0-RELEASE (but probably also true for FreeBSD-current)
>Description:
inet_aton() may fail for some IPv4 addresses that may look OK.
E.g. such address is 204.08.126.0 (note the '0' in front of '8',
i.e. "08" is OK in base-10, but not valid in base-8
(a fact that triggers the error because of the particular
implemetation which uses strtoul()
>How-To-Repeat:
Compile and execute the following code:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int
main()
{
struct in_addr in_addr;
char *s;
s = "204.08.126.0";
if (inet_aton(s, &in_addr) == 1)
printf("OK\n");
else
printf("ERROR\n");
exit (0);
}
>Fix:
The problem is in the inet_aton() implementation in libc:
/usr/src/lib/libc/net/inet_addr.c
Older FreeBSD versions (e.g. FreeBSD-3.2) are OK, so one
possible solution is to use the implementation from
those older systems instead of the FreeBSD-4.0 solution.
>Release-Note:
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200004270820.BAA56964>
