Commit 5b5591d8 authored by Andrew Tridgell's avatar Andrew Tridgell

make the replacement inet_aton() function independent of

inet_addr(). Some systems were detecting a missing inet_aton(), but
actually had it and inet_addr() called it, causing infinite recursion
parent c55f7021
...@@ -149,12 +149,23 @@ ...@@ -149,12 +149,23 @@
#ifndef HAVE_INET_ATON #ifndef HAVE_INET_ATON
int inet_aton(const char *cp, struct in_addr *inp) int inet_aton(const char *cp, struct in_addr *inp)
{ {
unsigned int a1, a2, a3, a4;
unsigned long ret;
if (strcmp(cp, "255.255.255.255") == 0) { if (strcmp(cp, "255.255.255.255") == 0) {
inp->s_addr = (unsigned) -1; inp->s_addr = (unsigned) -1;
return 1; return 1;
} }
inp->s_addr = inet_addr(cp); if (sscanf(cp, "%u.%u.%u.%u", &a1, &a2, &a3, &a4) != 4 ||
a1 > 255 || a2 > 255 || a3 > 255 || a4 > 255) {
return 1;
}
ret = (a1 << 24) | (a2 << 16) | (a3 << 8) | a4;
inp->s_addr = htonl(ret);
if (inp->s_addr == (unsigned) -1) { if (inp->s_addr == (unsigned) -1) {
return 0; return 0;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment