Send connman mailing list submissions to
[email protected]
To subscribe or unsubscribe via the World Wide Web, visit
https://lists.01.org/mailman/listinfo/connman
or, via email, send a message with subject or body 'help' to
[email protected]
You can reach the person managing the list at
[email protected]
When replying, please edit your Subject line so it is more specific
than "Re: Contents of connman digest..."
Today's Topics:
1. [PATCH 1/7] mozjs: Fix error handling for wrongly-formatted
hostname ([email protected])
2. [PATCH 3/7] mozjs: Rename 'ctx' argument to dnsresolve() to
'jsctx' ([email protected])
3. [PATCH 2/7] plugins: New shared C file for common JavaScript
routines ([email protected])
4. [PATCH 5/7] js: add __pacrunner_js_resolve() function
([email protected])
----------------------------------------------------------------------
Message: 1
Date: Tue, 16 Aug 2016 17:01:31 +0100
From: [email protected]
To: [email protected]
Subject: [PATCH 1/7] mozjs: Fix error handling for wrongly-formatted
hostname
Message-ID: <[email protected]>
From: David Woodhouse <[email protected]>
In commit d9ea7b8a ("plugins: Do not try to resolve a wrongly formated
hostname") we introduced a check on the string before we attempt to resolve
it. In the mozjs case we simply return a NULL result instead of raising an
exception when this function fails... except that the new sanity check was
placed before the JS_SET_RVAL() call, and no return value was set at all.
Move it to the right place.
---
plugins/mozjs.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/plugins/mozjs.c b/plugins/mozjs.c
index 130c3c9..feaabd9 100644
--- a/plugins/mozjs.c
+++ b/plugins/mozjs.c
@@ -132,6 +132,8 @@ static JSBool dnsresolve(JSContext *ctx, uintN argc, jsval
*vp)
DBG("host %s", host);
+ JS_SET_RVAL(ctx, vp, JSVAL_NULL);
+
/* Q&D test on host to know if it is a proper hostname */
split_res = g_strsplit_set(host, ":%?!,;@\\'*|<>{}[]()+=$&~# \"", -1);
if (split_res) {
@@ -142,8 +144,6 @@ static JSBool dnsresolve(JSContext *ctx, uintN argc, jsval
*vp)
goto out;
}
- JS_SET_RVAL(ctx, vp, JSVAL_NULL);
-
if (resolve(host, address, sizeof(address)) < 0)
goto out;
--
2.7.4
------------------------------
Message: 2
Date: Tue, 16 Aug 2016 17:01:33 +0100
From: [email protected]
To: [email protected]
Subject: [PATCH 3/7] mozjs: Rename 'ctx' argument to dnsresolve() to
'jsctx'
Message-ID: <[email protected]>
From: David Woodhouse <[email protected]>
...for reasons which will become apparent shortly.
---
plugins/mozjs.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/plugins/mozjs.c b/plugins/mozjs.c
index 0b9a4c9..b980d9d 100644
--- a/plugins/mozjs.c
+++ b/plugins/mozjs.c
@@ -121,16 +121,16 @@ static JSBool myipaddress(JSContext *jsctx, uintN argc,
jsval *vp)
return JS_TRUE;
}
-static JSBool dnsresolve(JSContext *ctx, uintN argc, jsval *vp)
+static JSBool dnsresolve(JSContext *jsctx, uintN argc, jsval *vp)
{
char address[NI_MAXHOST];
- jsval *argv = JS_ARGV(ctx, vp);
- char *host = JS_EncodeString(ctx, JS_ValueToString(ctx, argv[0]));
+ jsval *argv = JS_ARGV(jsctx, vp);
+ char *host = JS_EncodeString(jsctx, JS_ValueToString(jsctx, argv[0]));
char **split_res;
DBG("host %s", host);
- JS_SET_RVAL(ctx, vp, JSVAL_NULL);
+ JS_SET_RVAL(jsctx, vp, JSVAL_NULL);
/* Q&D test on host to know if it is a proper hostname */
split_res = g_strsplit_set(host, ":%?!,;@\\'*|<>{}[]()+=$&~# \"", -1);
@@ -147,10 +147,10 @@ static JSBool dnsresolve(JSContext *ctx, uintN argc,
jsval *vp)
DBG("address %s", address);
- JS_SET_RVAL(ctx, vp, STRING_TO_JSVAL(JS_NewStringCopyZ(ctx, address)));
+ JS_SET_RVAL(jsctx, vp, STRING_TO_JSVAL(JS_NewStringCopyZ(jsctx,
address)));
out:
- JS_free(ctx, host);
+ JS_free(jsctx, host);
return JS_TRUE;
}
--
2.7.4
------------------------------
Message: 3
Date: Tue, 16 Aug 2016 17:01:32 +0100
From: [email protected]
To: [email protected]
Subject: [PATCH 2/7] plugins: New shared C file for common JavaScript
routines
Message-ID: <[email protected]>
Content-Type: text/plain; charset=UTF-8
From: David Woodhouse <[email protected]>
---
Makefile.am | 10 ++-
plugins/mozjs.c | 6 +-
plugins/v8.cc | 3 +-
src/javascript.h | 199 ------------------------------------------------
src/js.h | 4 +
src/js_funcs.c | 224 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
6 files changed, 237 insertions(+), 209 deletions(-)
delete mode 100644 src/javascript.h
create mode 100644 src/js_funcs.c
diff --git a/Makefile.am b/Makefile.am
index 55b51e7..d637baf 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -27,6 +27,7 @@ builtin_libadd += @CURL_LIBS@
endif
if MOZJS
+js_sources = src/js_funcs.c
builtin_modules += mozjs
builtin_sources += plugins/mozjs.c
builtin_cflags += @MOZJS_CFLAGS@
@@ -34,6 +35,7 @@ builtin_libadd += @MOZJS_LIBS@
endif
if V8
+js_sources = src/js_funcs.c
builtin_modules += v8
builtin_sources += plugins/v8.cc
builtin_libadd += @V8_LIBS@
@@ -41,12 +43,12 @@ endif
sbin_PROGRAMS = src/pacrunner
-src_pacrunner_SOURCES = $(gdbus_sources) $(builtin_sources) \
+src_pacrunner_SOURCES = $(gdbus_sources) $(builtin_sources) $(js_sources) \
src/main.c src/pacrunner.h \
src/log.h src/log.c src/plugin.h src/plugin.c \
src/download.h src/download.c \
src/client.c src/manager.c src/proxy.c \
- src/manual.c src/js.h src/js.c src/javascript.h
+ src/manual.c src/js.h src/js.c
src_pacrunner_LDADD = $(builtin_libadd) @GLIB_LIBS@ @PTHREAD_LIBS@ \
@DBUS_LIBS@ -ldl
@@ -97,7 +99,7 @@ noinst_PROGRAMS = unit/test-pacrunner
unit_test_pacrunner_SOURCES = unit/test-pacrunner.c src/pacrunner.h \
src/proxy.c src/manual.c src/download.c \
- src/js.c src/log.c src/plugin.c
+ src/js.c src/log.c src/plugin.c $(js_sources)
unit_test_pacrunner_LDADD = @GLIB_LIBS@ -ldl
@@ -118,7 +120,7 @@ noinst_PROGRAMS += unit/test-mozjs
unit_test_mozjs_SOURCES = unit/test-mozjs.c src/pacrunner.h \
src/proxy.c src/manual.c src/download.c \
- src/js.c plugins/mozjs.c
+ src/js.c plugins/mozjs.c $(js_sources)
unit_test_mozjs_LDADD = @MOZJS_LIBS@ @GLIB_LIBS@ @PTHREAD_LIBS@
endif
diff --git a/plugins/mozjs.c b/plugins/mozjs.c
index feaabd9..0b9a4c9 100644
--- a/plugins/mozjs.c
+++ b/plugins/mozjs.c
@@ -37,8 +37,6 @@
#include <jsapi.h>
#pragma GCC diagnostic error "-Wredundant-decls"
-#include "javascript.h"
-
#include "pacrunner.h"
#include "js.h"
@@ -203,8 +201,8 @@ static int create_object(struct pacrunner_proxy *proxy)
JS_DefineFunction(ctx->jsctx, ctx->jsobj,
"dnsResolve", dnsresolve, 1, 0);
- JS_EvaluateScript(ctx->jsctx, ctx->jsobj, JAVASCRIPT_ROUTINES,
- strlen(JAVASCRIPT_ROUTINES), NULL, 0, &rval);
+ JS_EvaluateScript(ctx->jsctx, ctx->jsobj, __pacrunner_js_routines,
+ strlen(__pacrunner_js_routines), NULL, 0, &rval);
JS_EvaluateScript(ctx->jsctx, ctx->jsobj, script, strlen(script),
"wpad.dat", 0, &rval);
diff --git a/plugins/v8.cc b/plugins/v8.cc
index 93a1ea5..ebb88a6 100644
--- a/plugins/v8.cc
+++ b/plugins/v8.cc
@@ -34,7 +34,6 @@
#include <linux/if_arp.h>
#include <v8.h>
-#include "javascript.h"
extern "C" {
#include "pacrunner.h"
@@ -175,7 +174,7 @@ static void create_object(void)
v8::Handle<v8::Script> script_scr;
v8::Handle<v8::Value> result;
- script_scr = v8::Script::Compile(v8::String::New(JAVASCRIPT_ROUTINES));
+ script_scr =
v8::Script::Compile(v8::String::New(__pacrunner_js_routines));
if (script_scr.IsEmpty()) {
v8::String::Utf8Value err(exc.Exception());
DBG("Javascript failed to compile: %s", *err);
diff --git a/src/javascript.h b/src/javascript.h
deleted file mode 100644
index d48bd0c..0000000
--- a/src/javascript.h
+++ /dev/null
@@ -1,199 +0,0 @@
-#define JAVASCRIPT_ROUTINES \
-"function dnsDomainIs(host, domain) {\n" \
-" return (host.length >= domain.length &&\n" \
-" host.substring(host.length - domain.length) == domain);\n" \
-"}\n" \
-"function dnsDomainLevels(host) {\n" \
-" return host.split('.').length-1;\n" \
-"}\n" \
-"function convert_addr(ipchars) {\n" \
-" var bytes = ipchars.split('.');\n" \
-" var result = ((bytes[0] & 0xff) << 24) |\n" \
-" ((bytes[1] & 0xff) << 16) |\n" \
-" ((bytes[2] & 0xff) << 8) |\n" \
-" (bytes[3] & 0xff);\n" \
-" return result;\n" \
-"}\n" \
-"function isInNet(ipaddr, pattern, maskstr) {\n" \
-" var test =
/^(\\d{1,4})\\.(\\d{1,4})\\.(\\d{1,4})\\.(\\d{1,4})$/.exec(ipaddr);\n" \
-" if (test == null) {\n" \
-" ipaddr = dnsResolve(ipaddr);\n" \
-" if (ipaddr == null)\n" \
-" return false;\n" \
-" } else if (test[1] > 255 || test[2] > 255 ||\n" \
-" test[3] > 255 || test[4] > 255) {\n" \
-" return false;\n" \
-" }\n" \
-" var host = convert_addr(ipaddr);\n" \
-" var pat = convert_addr(pattern);\n" \
-" var mask = convert_addr(maskstr);\n" \
-" return ((host & mask) == (pat & mask));\n" \
-"}\n" \
-"function isPlainHostName(host) {\n" \
-" return (host.search('\\\\.') == -1);\n" \
-"}\n" \
-"function isResolvable(host) {\n" \
-" var ip = dnsResolve(host);\n" \
-" return (ip != null);\n" \
-"}\n" \
-"function localHostOrDomainIs(host, hostdom) {\n" \
-" if (isPlainHostName(host)) {\n" \
-" return (hostdom.search('/^' + host + '/') != -1);\n" \
-" }\n" \
-" else {\n" \
-" return (host == hostdom);\n" \
-" }\n" \
-"}\n" \
-"function shExpMatch(url, pattern) {\n" \
-" pattern = pattern.replace(/\\./g, '\\\\.');\n" \
-" pattern = pattern.replace(/\\*/g, '.*');\n" \
-" pattern = pattern.replace(/\\?/g, '.');\n" \
-" var newRe = new RegExp('^'+pattern+'$');\n" \
-" return newRe.test(url);\n" \
-"}\n" \
-"var wdays = new Array('SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT');\n" \
-"var monthes = new Array('JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL',
'AUG', 'SEP', 'OCT', 'NOV', 'DEC');\n" \
-"function weekdayRange() {\n" \
-" function getDay(weekday) {\n" \
-" for (var i = 0; i < 6; i++) {\n" \
-" if (weekday == wdays[i])\n" \
-" return i;\n" \
-" }\n" \
-" return -1;\n" \
-" }\n" \
-" var date = new Date();\n" \
-" var argc = arguments.length;\n" \
-" var wday;\n" \
-" if (argc < 1)\n" \
-" return false;\n" \
-" if (arguments[argc - 1] == 'GMT') {\n" \
-" argc--;\n" \
-" wday = date.getUTCDay();\n" \
-" } else {\n" \
-" wday = date.getDay();\n" \
-" }\n" \
-" var wd1 = getDay(arguments[0]);\n" \
-" var wd2 = (argc == 2) ? getDay(arguments[1]) : wd1;\n" \
-" return (wd1 == -1 || wd2 == -1) ? false\n" \
-" : (wd1 <= wday && wday <= wd2);\n" \
-"}\n" \
-"function dateRange() {\n" \
-" function getMonth(name) {\n" \
-" for (var i = 0; i < 6; i++) {\n" \
-" if (name == monthes[i])\n" \
-" return i;\n" \
-" }\n" \
-" return -1;\n" \
-" }\n" \
-" var date = new Date();\n" \
-" var argc = arguments.length;\n" \
-" if (argc < 1) {\n" \
-" return false;\n" \
-" }\n" \
-" var isGMT = (arguments[argc - 1] == 'GMT');\n" \
-" if (isGMT) {\n" \
-" argc--;\n" \
-" }\n" \
-" if (argc == 1) {\n" \
-" var tmp = parseInt(arguments[0]);\n" \
-" if (isNaN(tmp)) {\n" \
-" return ((isGMT ? date.getUTCMonth() : date.getMonth()) ==
getMonth(arguments[0]));\n" \
-" } else if (tmp < 32) {\n" \
-" return ((isGMT ? date.getUTCDate() : date.getDate()) == tmp);\n" \
-" } else {\n" \
-" return ((isGMT ? date.getUTCFullYear() : date.getFullYear()) ==
tmp);\n" \
-" }\n" \
-" }\n" \
-" var year = date.getFullYear();\n" \
-" var date1, date2;\n" \
-" date1 = new Date(year, 0, 1, 0, 0, 0);\n" \
-" date2 = new Date(year, 11, 31, 23, 59, 59);\n" \
-" var adjustMonth = false;\n" \
-" for (var i = 0; i < (argc >> 1); i++) {\n" \
-" var tmp = parseInt(arguments[i]);\n" \
-" if (isNaN(tmp)) {\n" \
-" var mon = getMonth(arguments[i]);\n" \
-" date1.setMonth(mon);\n" \
-" } else if (tmp < 32) {\n" \
-" adjustMonth = (argc <= 2);\n" \
-" date1.setDate(tmp);\n" \
-" } else {\n" \
-" date1.setFullYear(tmp);\n" \
-" }\n" \
-" }\n" \
-" for (var i = (argc >> 1); i < argc; i++) {\n" \
-" var tmp = parseInt(arguments[i]);\n" \
-" if (isNaN(tmp)) {\n" \
-" var mon = getMonth(arguments[i]);\n" \
-" date2.setMonth(mon);\n" \
-" } else if (tmp < 32) {\n" \
-" date2.setDate(tmp);\n" \
-" } else {\n" \
-" date2.setFullYear(tmp);\n" \
-" }\n" \
-" }\n" \
-" if (adjustMonth) {\n" \
-" date1.setMonth(date.getMonth());\n" \
-" date2.setMonth(date.getMonth());\n" \
-" }\n" \
-" if (isGMT) {\n" \
-" var tmp = date;\n" \
-" tmp.setFullYear(date.getUTCFullYear());\n" \
-" tmp.setMonth(date.getUTCMonth());\n" \
-" tmp.setDate(date.getUTCDate());\n" \
-" tmp.setHours(date.getUTCHours());\n" \
-" tmp.setMinutes(date.getUTCMinutes());\n" \
-" tmp.setSeconds(date.getUTCSeconds());\n" \
-" date = tmp;\n" \
-" }\n" \
-" return ((date1 <= date) && (date <= date2));\n" \
-"}\n" \
-"function timeRange() {\n" \
-" var argc = arguments.length;\n" \
-" var date = new Date();\n" \
-" var isGMT= false;\n" \
-" if (argc < 1) {\n" \
-" return false;\n" \
-" }\n" \
-" if (arguments[argc - 1] == 'GMT') {\n" \
-" isGMT = true;\n" \
-" argc--;\n" \
-" }\n" \
-" var hour = isGMT ? date.getUTCHours() : date.getHours();\n" \
-" var date1, date2;\n" \
-" date1 = new Date();\n" \
-" date2 = new Date();\n" \
-" if (argc == 1) {\n" \
-" return (hour == arguments[0]);\n" \
-" } else if (argc == 2) {\n" \
-" return ((arguments[0] <= hour) && (hour <= arguments[1]));\n" \
-" } else {\n" \
-" switch (argc) {\n" \
-" case 6:\n" \
-" date1.setSeconds(arguments[2]);\n" \
-" date2.setSeconds(arguments[5]);\n" \
-" case 4:\n" \
-" var middle = argc >> 1;\n" \
-" date1.setHours(arguments[0]);\n" \
-" date1.setMinutes(arguments[1]);\n" \
-" date2.setHours(arguments[middle]);\n" \
-" date2.setMinutes(arguments[middle + 1]);\n" \
-" if (middle == 2) {\n" \
-" date2.setSeconds(59);\n" \
-" }\n" \
-" break;\n" \
-" default:\n" \
-" throw 'timeRange: bad number of arguments'\n" \
-" }\n" \
-" }\n" \
-" if (isGMT) {\n" \
-" date.setFullYear(date.getUTCFullYear());\n" \
-" date.setMonth(date.getUTCMonth());\n" \
-" date.setDate(date.getUTCDate());\n" \
-" date.setHours(date.getUTCHours());\n" \
-" date.setMinutes(date.getUTCMinutes());\n" \
-" date.setSeconds(date.getUTCSeconds());\n" \
-" }\n" \
-" return ((date1 <= date) && (date <= date2));\n" \
-"}\n" \
-""
diff --git a/src/js.h b/src/js.h
index e5d7abc..f45efbf 100644
--- a/src/js.h
+++ b/src/js.h
@@ -34,3 +34,7 @@ struct pacrunner_js_driver {
int pacrunner_js_driver_register(struct pacrunner_js_driver *driver);
void pacrunner_js_driver_unregister(struct pacrunner_js_driver *driver);
+
+/* Common functions for JS plugins */
+extern const char __pacrunner_js_routines[];
+
diff --git a/src/js_funcs.c b/src/js_funcs.c
new file mode 100644
index 0000000..6e9cf1e
--- /dev/null
+++ b/src/js_funcs.c
@@ -0,0 +1,224 @@
+/*
+ *
+ * PACrunner - Proxy configuration daemon
+ *
+ * Copyright ? 2010-2016 Intel Corporation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+const char __pacrunner_js_routines[] =
+"function dnsDomainIs(host, domain) {\n" \
+" return (host.length >= domain.length &&\n" \
+" host.substring(host.length - domain.length) == domain);\n" \
+"}\n" \
+"function dnsDomainLevels(host) {\n" \
+" return host.split('.').length-1;\n" \
+"}\n" \
+"function convert_addr(ipchars) {\n" \
+" var bytes = ipchars.split('.');\n" \
+" var result = ((bytes[0] & 0xff) << 24) |\n" \
+" ((bytes[1] & 0xff) << 16) |\n" \
+" ((bytes[2] & 0xff) << 8) |\n" \
+" (bytes[3] & 0xff);\n" \
+" return result;\n" \
+"}\n" \
+"function isInNet(ipaddr, pattern, maskstr) {\n" \
+" var test =
/^(\\d{1,4})\\.(\\d{1,4})\\.(\\d{1,4})\\.(\\d{1,4})$/.exec(ipaddr);\n" \
+" if (test == null) {\n" \
+" ipaddr = dnsResolve(ipaddr);\n" \
+" if (ipaddr == null)\n" \
+" return false;\n" \
+" } else if (test[1] > 255 || test[2] > 255 ||\n" \
+" test[3] > 255 || test[4] > 255) {\n" \
+" return false;\n" \
+" }\n" \
+" var host = convert_addr(ipaddr);\n" \
+" var pat = convert_addr(pattern);\n" \
+" var mask = convert_addr(maskstr);\n" \
+" return ((host & mask) == (pat & mask));\n" \
+"}\n" \
+"function isPlainHostName(host) {\n" \
+" return (host.search('\\\\.') == -1);\n" \
+"}\n" \
+"function isResolvable(host) {\n" \
+" var ip = dnsResolve(host);\n" \
+" return (ip != null);\n" \
+"}\n" \
+"function localHostOrDomainIs(host, hostdom) {\n" \
+" if (isPlainHostName(host)) {\n" \
+" return (hostdom.search('/^' + host + '/') != -1);\n" \
+" }\n" \
+" else {\n" \
+" return (host == hostdom);\n" \
+" }\n" \
+"}\n" \
+"function shExpMatch(url, pattern) {\n" \
+" pattern = pattern.replace(/\\./g, '\\\\.');\n" \
+" pattern = pattern.replace(/\\*/g, '.*');\n" \
+" pattern = pattern.replace(/\\?/g, '.');\n" \
+" var newRe = new RegExp('^'+pattern+'$');\n" \
+" return newRe.test(url);\n" \
+"}\n" \
+"var wdays = new Array('SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT');\n" \
+"var monthes = new Array('JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL',
'AUG', 'SEP', 'OCT', 'NOV', 'DEC');\n" \
+"function weekdayRange() {\n" \
+" function getDay(weekday) {\n" \
+" for (var i = 0; i < 6; i++) {\n" \
+" if (weekday == wdays[i])\n" \
+" return i;\n" \
+" }\n" \
+" return -1;\n" \
+" }\n" \
+" var date = new Date();\n" \
+" var argc = arguments.length;\n" \
+" var wday;\n" \
+" if (argc < 1)\n" \
+" return false;\n" \
+" if (arguments[argc - 1] == 'GMT') {\n" \
+" argc--;\n" \
+" wday = date.getUTCDay();\n" \
+" } else {\n" \
+" wday = date.getDay();\n" \
+" }\n" \
+" var wd1 = getDay(arguments[0]);\n" \
+" var wd2 = (argc == 2) ? getDay(arguments[1]) : wd1;\n" \
+" return (wd1 == -1 || wd2 == -1) ? false\n" \
+" : (wd1 <= wday && wday <= wd2);\n" \
+"}\n" \
+"function dateRange() {\n" \
+" function getMonth(name) {\n" \
+" for (var i = 0; i < 6; i++) {\n" \
+" if (name == monthes[i])\n" \
+" return i;\n" \
+" }\n" \
+" return -1;\n" \
+" }\n" \
+" var date = new Date();\n" \
+" var argc = arguments.length;\n" \
+" if (argc < 1) {\n" \
+" return false;\n" \
+" }\n" \
+" var isGMT = (arguments[argc - 1] == 'GMT');\n" \
+" if (isGMT) {\n" \
+" argc--;\n" \
+" }\n" \
+" if (argc == 1) {\n" \
+" var tmp = parseInt(arguments[0]);\n" \
+" if (isNaN(tmp)) {\n" \
+" return ((isGMT ? date.getUTCMonth() : date.getMonth()) ==
getMonth(arguments[0]));\n" \
+" } else if (tmp < 32) {\n" \
+" return ((isGMT ? date.getUTCDate() : date.getDate()) == tmp);\n" \
+" } else {\n" \
+" return ((isGMT ? date.getUTCFullYear() : date.getFullYear()) ==
tmp);\n" \
+" }\n" \
+" }\n" \
+" var year = date.getFullYear();\n" \
+" var date1, date2;\n" \
+" date1 = new Date(year, 0, 1, 0, 0, 0);\n" \
+" date2 = new Date(year, 11, 31, 23, 59, 59);\n" \
+" var adjustMonth = false;\n" \
+" for (var i = 0; i < (argc >> 1); i++) {\n" \
+" var tmp = parseInt(arguments[i]);\n" \
+" if (isNaN(tmp)) {\n" \
+" var mon = getMonth(arguments[i]);\n" \
+" date1.setMonth(mon);\n" \
+" } else if (tmp < 32) {\n" \
+" adjustMonth = (argc <= 2);\n" \
+" date1.setDate(tmp);\n" \
+" } else {\n" \
+" date1.setFullYear(tmp);\n" \
+" }\n" \
+" }\n" \
+" for (var i = (argc >> 1); i < argc; i++) {\n" \
+" var tmp = parseInt(arguments[i]);\n" \
+" if (isNaN(tmp)) {\n" \
+" var mon = getMonth(arguments[i]);\n" \
+" date2.setMonth(mon);\n" \
+" } else if (tmp < 32) {\n" \
+" date2.setDate(tmp);\n" \
+" } else {\n" \
+" date2.setFullYear(tmp);\n" \
+" }\n" \
+" }\n" \
+" if (adjustMonth) {\n" \
+" date1.setMonth(date.getMonth());\n" \
+" date2.setMonth(date.getMonth());\n" \
+" }\n" \
+" if (isGMT) {\n" \
+" var tmp = date;\n" \
+" tmp.setFullYear(date.getUTCFullYear());\n" \
+" tmp.setMonth(date.getUTCMonth());\n" \
+" tmp.setDate(date.getUTCDate());\n" \
+" tmp.setHours(date.getUTCHours());\n" \
+" tmp.setMinutes(date.getUTCMinutes());\n" \
+" tmp.setSeconds(date.getUTCSeconds());\n" \
+" date = tmp;\n" \
+" }\n" \
+" return ((date1 <= date) && (date <= date2));\n" \
+"}\n" \
+"function timeRange() {\n" \
+" var argc = arguments.length;\n" \
+" var date = new Date();\n" \
+" var isGMT= false;\n" \
+" if (argc < 1) {\n" \
+" return false;\n" \
+" }\n" \
+" if (arguments[argc - 1] == 'GMT') {\n" \
+" isGMT = true;\n" \
+" argc--;\n" \
+" }\n" \
+" var hour = isGMT ? date.getUTCHours() : date.getHours();\n" \
+" var date1, date2;\n" \
+" date1 = new Date();\n" \
+" date2 = new Date();\n" \
+" if (argc == 1) {\n" \
+" return (hour == arguments[0]);\n" \
+" } else if (argc == 2) {\n" \
+" return ((arguments[0] <= hour) && (hour <= arguments[1]));\n" \
+" } else {\n" \
+" switch (argc) {\n" \
+" case 6:\n" \
+" date1.setSeconds(arguments[2]);\n" \
+" date2.setSeconds(arguments[5]);\n" \
+" case 4:\n" \
+" var middle = argc >> 1;\n" \
+" date1.setHours(arguments[0]);\n" \
+" date1.setMinutes(arguments[1]);\n" \
+" date2.setHours(arguments[middle]);\n" \
+" date2.setMinutes(arguments[middle + 1]);\n" \
+" if (middle == 2) {\n" \
+" date2.setSeconds(59);\n" \
+" }\n" \
+" break;\n" \
+" default:\n" \
+" throw 'timeRange: bad number of arguments'\n" \
+" }\n" \
+" }\n" \
+" if (isGMT) {\n" \
+" date.setFullYear(date.getUTCFullYear());\n" \
+" date.setMonth(date.getUTCMonth());\n" \
+" date.setDate(date.getUTCDate());\n" \
+" date.setHours(date.getUTCHours());\n" \
+" date.setMinutes(date.getUTCMinutes());\n" \
+" date.setSeconds(date.getUTCSeconds());\n" \
+" }\n" \
+" return ((date1 <= date) && (date <= date2));\n" \
+"}\n" \
+"";
--
2.7.4
------------------------------
Message: 4
Date: Tue, 16 Aug 2016 17:01:35 +0100
From: [email protected]
To: [email protected]
Subject: [PATCH 5/7] js: add __pacrunner_js_resolve() function
Message-ID: <[email protected]>
From: David Woodhouse <[email protected]>
Remove the duplicate definitions from mozjs and v8 plugins
---
plugins/mozjs.c | 34 ++++------------------------------
plugins/v8.cc | 33 +--------------------------------
src/js.h | 2 ++
src/js_funcs.c | 33 +++++++++++++++++++++++++++++++++
4 files changed, 40 insertions(+), 62 deletions(-)
diff --git a/plugins/mozjs.c b/plugins/mozjs.c
index 2720cac..a923203 100644
--- a/plugins/mozjs.c
+++ b/plugins/mozjs.c
@@ -45,25 +45,6 @@ struct pacrunner_mozjs {
JSObject *jsobj;
};
-static int resolve(const char *node, char *host, size_t hostlen)
-{
- struct addrinfo *info;
- int err;
-
- if (getaddrinfo(node, NULL, NULL, &info) < 0)
- return -EIO;
-
- err = getnameinfo(info->ai_addr, info->ai_addrlen,
- host, hostlen, NULL, 0, NI_NUMERICHOST);
-
- freeaddrinfo(info);
-
- if (err < 0)
- return -EIO;
-
- return 0;
-}
-
static JSBool myipaddress(JSContext *jsctx, uintN argc, jsval *vp)
{
struct pacrunner_mozjs *ctx = JS_GetContextPrivate(jsctx);
@@ -89,26 +70,19 @@ static JSBool myipaddress(JSContext *jsctx, uintN argc,
jsval *vp)
static JSBool dnsresolve(JSContext *jsctx, uintN argc, jsval *vp)
{
+ struct pacrunner_mozjs *ctx = JS_GetContextPrivate(jsctx);
char address[NI_MAXHOST];
jsval *argv = JS_ARGV(jsctx, vp);
char *host = JS_EncodeString(jsctx, JS_ValueToString(jsctx, argv[0]));
- char **split_res;
DBG("host %s", host);
JS_SET_RVAL(jsctx, vp, JSVAL_NULL);
- /* Q&D test on host to know if it is a proper hostname */
- split_res = g_strsplit_set(host, ":%?!,;@\\'*|<>{}[]()+=$&~# \"", -1);
- if (split_res) {
- int length = g_strv_length(split_res);
- g_strfreev(split_res);
-
- if (length > 1)
- goto out;
- }
+ if (!ctx)
+ goto out;
- if (resolve(host, address, sizeof(address)) < 0)
+ if (__pacrunner_js_resolve(ctx->proxy, host, address, sizeof(address))
< 0)
goto out;
DBG("address %s", address);
diff --git a/plugins/v8.cc b/plugins/v8.cc
index 954239d..00aef82 100644
--- a/plugins/v8.cc
+++ b/plugins/v8.cc
@@ -48,25 +48,6 @@ static gboolean v8_gc(gpointer user_data)
return !v8::V8::IdleNotification();
}
-static int resolve(const char *node, char *host, size_t hostlen)
-{
- struct addrinfo *info;
- int err;
-
- if (getaddrinfo(node, NULL, NULL, &info) < 0)
- return -EIO;
-
- err = getnameinfo(info->ai_addr, info->ai_addrlen,
- host, hostlen, NULL, 0, NI_NUMERICHOST);
-
- freeaddrinfo(info);
-
- if (err < 0)
- return -EIO;
-
- return 0;
-}
-
static v8::Handle<v8::Value> myipaddress(const v8::Arguments& args)
{
const char *interface;
@@ -96,19 +77,7 @@ static v8::Handle<v8::Value> dnsresolve(const v8::Arguments&
args)
DBG("host %s", *host);
- /* Q&D test on host to know if it is a proper hostname */
- split_res = g_strsplit_set(*host, ":%?!,;@\\'*|<>{}[]()+=$&~# \"", -1);
- if (split_res) {
- int length = g_strv_length(split_res);
- g_strfreev(split_res);
-
- if (length > 1) {
- v8::ThrowException(
- v8::String::New("Failed to resolve"));
- }
- }
-
- if (resolve(*host, address, sizeof(address)) < 0)
+ if (__pacrunner_js_resolve(current_proxy, *host, address,
sizeof(address)) < 0)
return v8::ThrowException(v8::String::New("Failed to resolve"));
DBG("address %s", address);
diff --git a/src/js.h b/src/js.h
index b924cdb..ab36b4d 100644
--- a/src/js.h
+++ b/src/js.h
@@ -38,5 +38,7 @@ void pacrunner_js_driver_unregister(struct
pacrunner_js_driver *driver);
/* Common functions for JS plugins */
int __pacrunner_js_getipaddr(struct pacrunner_proxy *proxy, char *host,
size_t hostlen);
+int __pacrunner_js_resolve(struct pacrunner_proxy *proxy, const char *node,
+ char *host, size_t hostlen);
extern const char __pacrunner_js_routines[];
diff --git a/src/js_funcs.c b/src/js_funcs.c
index d8204e5..eff73f7 100644
--- a/src/js_funcs.c
+++ b/src/js_funcs.c
@@ -29,6 +29,7 @@
#include <sys/ioctl.h>
#include <stdio.h>
+#include <netdb.h>
#include <arpa/inet.h>
#include <linux/if_arp.h>
@@ -67,6 +68,38 @@ int __pacrunner_js_getipaddr(struct pacrunner_proxy *proxy,
char *host,
return 0;
}
+int __pacrunner_js_resolve(struct pacrunner_proxy *proxy, const char *node,
+ char *host, size_t hostlen)
+{
+ struct addrinfo *info;
+ char **split_res;
+ int err;
+
+ /* Q&D test on host to know if it is a proper hostname */
+ split_res = g_strsplit_set(node, ":%?!,;@\\'*|<>{}[]()+=$&~# \"", -1);
+ if (split_res) {
+ int length = g_strv_length(split_res);
+ g_strfreev(split_res);
+
+ if (length > 1)
+ return -EINVAL;
+ }
+
+
+ if (getaddrinfo(node, NULL, NULL, &info) < 0)
+ return -EIO;
+
+ err = getnameinfo(info->ai_addr, info->ai_addrlen,
+ host, hostlen, NULL, 0, NI_NUMERICHOST);
+
+ freeaddrinfo(info);
+
+ if (err < 0)
+ return -EIO;
+
+ return 0;
+}
+
const char __pacrunner_js_routines[] =
"function dnsDomainIs(host, domain) {\n" \
" return (host.length >= domain.length &&\n" \
--
2.7.4
------------------------------
Subject: Digest Footer
_______________________________________________
connman mailing list
[email protected]
https://lists.01.org/mailman/listinfo/connman
------------------------------
End of connman Digest, Vol 10, Issue 15
***************************************