diff --git a/src/sbbs3/js_global.c b/src/sbbs3/js_global.c
index 0bf116682c3940ef4430442c40642ecf6e8990e1..701899d8d171e5a2c2fb796ef433380e1b316d37 100644
--- a/src/sbbs3/js_global.c
+++ b/src/sbbs3/js_global.c
@@ -1270,6 +1270,29 @@ js_strftime(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
 	*rval = STRING_TO_JSVAL(js_str);
 	return(JS_TRUE);
 }
+
+static JSBool
+js_resolve_ip(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
+{
+	struct in_addr addr;
+	JSString*	str;
+
+	*rval = JSVAL_NULL;
+
+	if(argv[0]==JSVAL_VOID)
+		return(JS_TRUE);
+
+	if((addr.s_addr=resolve_ip(JS_GetStringBytes(JS_ValueToString(cx, argv[0]))))
+		==INADDR_NONE)
+		return(JS_TRUE);
+	
+	if((str=JS_NewStringCopyZ(cx, inet_ntoa(addr)))==NULL)
+		return(JS_FALSE);
+
+	*rval = STRING_TO_JSVAL(str);
+	return(JS_TRUE);
+}
+
 	
 static JSClass js_global_class = {
      "Global"				/* name			*/
@@ -1405,6 +1428,9 @@ static jsMethodSpec js_global_functions[] = {
 	{"chksum_calc",		js_chksum,			1,	JSTYPE_NUMBER,	JSDOCSTR("string text")
 	,JSDOCSTR("calculate and return 32-bit checksum of text string")
 	},
+	{"resolve_ip",		js_resolve_ip,		1,	JSTYPE_STRING,	JSDOCSTR("string hostname")
+	,JSDOCSTR("resolve IP address of specified hostname")
+	},
 	{0}
 };