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
***************************************

Reply via email to