summaryrefslogtreecommitdiff
path: root/src/common/compat.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/compat.c')
-rw-r--r--src/common/compat.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/common/compat.c b/src/common/compat.c
index c54342e56f..904d5308cb 100644
--- a/src/common/compat.c
+++ b/src/common/compat.c
@@ -1207,8 +1207,20 @@ get_user_homedir(const char *username)
* but works on Windows and Solaris.)
*/
int
-tor_inet_aton(const char *c, struct in_addr* addr)
+tor_inet_aton(const char *str, struct in_addr* addr)
{
+ int a,b,c,d;
+ char more;
+ if (sscanf(str, "%d.%d.%d.%d%c", &a,&b,&c,&d,&more) != 4)
+ return 0;
+ if (a < 0 || a > 255) return 0;
+ if (b < 0 || b > 255) return 0;
+ if (c < 0 || c > 255) return 0;
+ if (d < 0 || d > 255) return 0;
+ addr->s_addr = htonl((a<<24) | (b<<16) | (c<<8) | d);
+ return 1;
+
+#if 0
#ifdef HAVE_INET_ATON
return inet_aton(c, addr);
#else
@@ -1225,6 +1237,7 @@ tor_inet_aton(const char *c, struct in_addr* addr)
addr->s_addr = r;
return 1;
#endif
+#endif
}
/** Given <b>af</b>==AF_INET and <b>src</b> a struct in_addr, or