You are viewing a plain text version of this content. The canonical link for it is here.
Posted to apache-bugdb@apache.org by Rob Kreamer <de...@vaxxine.com> on 1999/12/17 23:09:14 UTC
os-osf/5490: Virtual host broken due to INADDR_NONE
>Number: 5490
>Category: os-osf
>Synopsis: Virtual host broken due to INADDR_NONE
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: apache
>State: open
>Class: duplicate
>Submitter-Id: apache
>Arrival-Date: Fri Dec 17 14:10:00 PST 1999
>Last-Modified:
>Originator: develop@vaxxine.com
>Organization:
apache
>Release: 1.3.9
>Environment:
Digital UNIX 4.0D - Newest patch level
uname -a: OSF1 alpha.vaxxine.com V4.0 878 alpha
gcc --version: 2.95.2
cc -V: DEC C V5.6-084 on Digital UNIX V4.0 (Rev. 878)
>From /usr/include/netinet/in.h:
@(#)$RCSfile: in.h,v $ $Revision: 4.3.26.3 $ (DEC) $Date: 1997/10/08 19:01:25 $
>Description:
Hello. This error is a repeat of the PR#463 but occurred in Apache 1.3.9
using either gcc or cc.
The problem, like PR#463, seems to be related to typing. In
/usr/include/in/netstd.h I have:
#ifndef _KERNEL
#define INADDR_NONE 0xffffffff /* -1 return */
#endif
If I create a test program and compile via either cc or gcc the failure
of inet_addr() does not match INADDR_NONE.
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>
int main( void )
{
char *w = "entersomedomainhere";
struct hostent *hep;
unsigned long my_addr;
char *p;
hep = gethostbyname(w);
if ((!hep) || (hep->h_addrtype != AF_INET || !hep->h_addr_list[0])) {
fprintf(stderr, "Cannot resolve host name %s --- exiting!\n", w);
exit(1);
}
my_addr = inet_addr( w );
printf( "Name = %s\n", hep->h_name );
printf( "inet_addr (unsigned) = %u\n", my_addr );
printf( "inet_addr (decimal) = %d\n", my_addr );
printf( "No address (unsigned) = %u\n", INADDR_NONE );
printf( "No address (decimal) = %d\n", ((unsigned long) -1) );
printf( "UL: %d != %d ? %d\n", my_addr, INADDR_NONE,
(my_addr != INADDR_NONE) );
}
I get:
Name = entersomedomainhere
inet_addr (unsigned) = 4294967295
inet_addr (decimal) = -1
No address (unsigned) = 4294967295
No address (decimal) = -1
UL: -1 != -1 ? 1
>How-To-Repeat:
If necessary I can provide a short term shell account.
>Fix:
I was able to resolve the problem by #undef'ing INADDR_NONE and letting the
existing #define with http_vhost.c take effect. Admittedly one should not
have to do so but it patched the problem. Maybe a test of the sizeof the
return value of inet_addr() and the sizeof INADDR_NONE if compiled on an
alpha when httpd starts? It would at least let alpha users know there's a
problem.
>Audit-Trail:
>Unformatted:
[In order for any reply to be added to the PR database, you need]
[to include <ap...@Apache.Org> in the Cc line and make sure the]
[subject line starts with the report component and number, with ]
[or without any 'Re:' prefixes (such as "general/1098:" or ]
["Re: general/1098:"). If the subject doesn't match this ]
[pattern, your message will be misfiled and ignored. The ]
["apbugs" address is not added to the Cc line of messages from ]
[the database automatically because of the potential for mail ]
[loops. If you do not include this Cc, your reply may be ig- ]
[nored unless you are responding to an explicit request from a ]
[developer. Reply only with text; DO NOT SEND ATTACHMENTS! ]