slackbuilds_ponce/libraries/libproxy/4.6-r797.patch
dsomero 24cb543d48 libraries/libproxy: Patched to fix build problems.
Added a patch to bring the code up to r797.
  This fixes some issues with seamonkey.

Signed-off-by: dsomero <xgizzmo@slackbuilds.org>
2011-04-11 21:32:34 -05:00

798 lines
27 KiB
Diff

Index: cmake/mingw32.cmake
===================================================================
--- cmake/mingw32.cmake (revision 753)
+++ cmake/mingw32.cmake (revision 797)
@@ -15,3 +15,5 @@
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+# We want libgcc being statically linked. Everything else is annoying
+set(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -static-libgcc")
Index: cmake/paths.cmk
===================================================================
--- cmake/paths.cmk (revision 753)
+++ cmake/paths.cmk (revision 797)
@@ -1,11 +1,11 @@
if(WIN32)
set(CMAKE_INSTALL_PREFIX "" CACHE PATH "Install prefix")
- set(BIN_INSTALL_DIR "" CACHE PATH "Binary install dir")
- set(LIB_INSTALL_DIR "" CACHE PATH "Library install dir")
- set(LIBEXEC_INSTALL_DIR "" CACHE PATH "Private executable install dir")
+ set(BIN_INSTALL_DIR . CACHE PATH "Binary install dir")
+ set(LIB_INSTALL_DIR . CACHE PATH "Library install dir")
+ set(LIBEXEC_INSTALL_DIR . CACHE PATH "Private executable install dir")
set(INCLUDE_INSTALL_DIR include CACHE PATH "Include install dir")
- set(SYSCONF_INSTALL_DIR "" CACHE PATH "Configuration install dir")
- set(SHARE_INSTALL_DIR "" CACHE PATH "Data install dir")
+ set(SYSCONF_INSTALL_DIR . CACHE PATH "Configuration install dir")
+ set(SHARE_INSTALL_DIR . CACHE PATH "Data install dir")
else(WIN32)
set(CMAKE_INSTALL_PREFIX /usr/local CACHE PATH "Install prefix")
set(BIN_INSTALL_DIR bin CACHE PATH "Binary install dir")
Index: bindings/ruby/Libproxy.i
===================================================================
--- bindings/ruby/Libproxy.i (revision 753)
+++ bindings/ruby/Libproxy.i (revision 797)
@@ -4,7 +4,6 @@
#include "../../libproxy/proxy.h"
%}
-
%typemap(out) char ** {
VALUE arr = rb_ary_new2(255);
int i;
@@ -15,7 +14,7 @@
}
%typemap(freearg) char ** {
- free($source);
+ free($source);
}
%include "../../libproxy/proxy.h"
Index: bindings/ruby/test.rb
===================================================================
--- bindings/ruby/test.rb (revision 753)
+++ bindings/ruby/test.rb (revision 797)
@@ -1,8 +1,7 @@
require 'Libproxy'
pf = Libproxy.px_proxy_factory_new
-
proxies = Libproxy.px_proxy_factory_get_proxies(pf, "http://www.google.com")
-print proxies
-
+proxies.each { |proxy| print proxy + " " }
+print "\n"
Index: bindings/python/CMakeLists.txt
===================================================================
--- bindings/python/CMakeLists.txt (revision 753)
+++ bindings/python/CMakeLists.txt (revision 797)
@@ -12,21 +12,11 @@
message(STATUS "Found python version ${PYTHON_VERSION}")
- if (IS_ABSOLUTE "${LIB_INSTALL_DIR}")
- set(libdir "${LIB_INSTALL_DIR}")
- else()
- set(libdir "${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR}")
- endif()
-
- if (IS_DIRECTORY "${libdir}/python${PYTHON_VERSION}/site-packages")
- set(PYTHON_SITEPKG_DIR "${libdir}/python${PYTHON_VERSION}/site-packages")
- else()
- execute_process(COMMAND
- ${PYTHON_EXECUTABLE}
- -c "import distutils.sysconfig ; print distutils.sysconfig.get_python_lib(plat_specific=0)"
- OUTPUT_VARIABLE PYTHON_SITEPKG_DIR
- OUTPUT_STRIP_TRAILING_WHITESPACE)
- endif()
+ execute_process(COMMAND
+ ${PYTHON_EXECUTABLE}
+ -c "import distutils.sysconfig ; print distutils.sysconfig.get_python_lib(plat_specific=0)"
+ OUTPUT_VARIABLE PYTHON_SITEPKG_DIR
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
endif()
message(STATUS "Using PYTHON_SITEPKG_DIR=${PYTHON_SITEPKG_DIR}")
Index: bindings/perl/src/CMakeLists.txt
===================================================================
--- bindings/perl/src/CMakeLists.txt (revision 753)
+++ bindings/perl/src/CMakeLists.txt (revision 797)
@@ -1,5 +1,4 @@
include_directories( ${PERL_INCLUDE_PATH} ${CMAKE_SOURCE_DIR}/libproxy )
-link_directories(${LIBPROXY_LIBRARY_DIRS})
# Run doxsubpp.pl to run xsubpp on Libproxy.xs
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/Libproxy.c
@@ -10,9 +9,6 @@
set(Libproxy_LIB_SRCS Libproxy.c)
-set(CMAKE_C_COMPILER ${CMAKE_CXX_COMPILER})
-set(CMAKE_C_FLAGS ${PERL_CXX_FLAGS} )
-
set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/perl/blib/arch/auto/Net)
add_library(PLlibproxy SHARED ${Libproxy_LIB_SRCS})
Index: utils/CMakeLists.txt
===================================================================
--- utils/CMakeLists.txt (revision 753)
+++ utils/CMakeLists.txt (revision 797)
@@ -1,5 +1,4 @@
include_directories("../libproxy")
-link_directories(${LIBPROXY_LIBRARY_DIRS})
add_executable(proxy proxy.c)
target_link_libraries(proxy libproxy)
Index: libmodman/test/main.hpp
===================================================================
--- libmodman/test/main.hpp (revision 753)
+++ libmodman/test/main.hpp (revision 797)
@@ -20,6 +20,8 @@
#ifndef MAIN_HPP_
#define MAIN_HPP_
+#include <typeinfo>
+
#include "../module_manager.hpp"
using namespace std;
Index: libmodman/module_manager.cpp
===================================================================
--- libmodman/module_manager.cpp (revision 753)
+++ libmodman/module_manager.cpp (revision 797)
@@ -20,6 +20,7 @@
#include <algorithm> // For sort()
#include <sys/stat.h> // For stat()
#include <iostream>
+#include <typeinfo>
#ifdef WIN32
#include <windows.h>
@@ -42,7 +43,7 @@
#define pdlopenl(filename) LoadLibraryEx(filename, NULL, DONT_RESOLVE_DLL_REFERENCES)
#define pdlclose(module) FreeLibrary((pdlmtype) module)
static void* pdlsym(pdlmtype mod, string sym) {
- return GetProcAddress(mod, sym.c_str());
+ return (void *) GetProcAddress(mod, sym.c_str());
}
static pdlmtype pdlreopen(const char* filename, pdlmtype module) {
Index: libmodman/module.hpp
===================================================================
--- libmodman/module.hpp (revision 753)
+++ libmodman/module.hpp (revision 797)
@@ -26,10 +26,9 @@
#define MM_MODULE_BUILTIN
#endif
-#ifdef WIN32
+#ifdef _MSC_VER
#define __MM_DLL_EXPORT __declspec(dllexport)
#else
-#include <typeinfo>
#define __MM_DLL_EXPORT __attribute__ ((visibility("default")))
#endif
@@ -79,10 +78,10 @@
template <class basetype, bool sngl=false>
class __MM_DLL_EXPORT extension : public base_extension {
public:
-#ifdef WIN32
+#ifdef _MSC_VER
static const char* base_type() { return __FUNCSIG__; }
#else
- static const char* base_type() { return typeid(basetype).name(); }
+ static const char* base_type() { return __PRETTY_FUNCTION__; }
#endif
static bool singleton() { return sngl; }
@@ -96,7 +95,11 @@
struct __MM_DLL_EXPORT mm_module
{
- const unsigned int vers;
+/* For some unknown reason, when vers is const VC++ (win32) NULLs out the whole struct.
+ * This obviously breaks module loading. I'd love to know the reason for this, so if
+ * anyone knows, please tell me. In the meantime, vers not being const is by design,
+ * so don't change it. */
+ unsigned int vers;
const char* name;
const char* (*type)();
libmodman::base_extension** (*init)();
Index: libmodman/CMakeLists.txt
===================================================================
--- libmodman/CMakeLists.txt (revision 753)
+++ libmodman/CMakeLists.txt (revision 797)
@@ -3,19 +3,17 @@
if (WIN32)
add_definitions(-D_CRT_SECURE_NO_WARNINGS=1)
else(WIN32)
- set(CMAKE_CXX_FLAGS "-fvisibility=hidden ${CMAKE_CXX_FLAGS}")
+ set(CMAKE_CXX_FLAGS "-fvisibility=hidden -fPIC ${CMAKE_CXX_FLAGS}")
endif(WIN32)
include_directories(${CMAKE_SOURCE_DIR})
-add_library(modman SHARED
+add_library(modman STATIC
module.hpp
module_manager.hpp
module_manager.cpp)
if(NOT WIN32)
target_link_libraries(modman dl)
endif()
-set_target_properties(modman PROPERTIES PREFIX "lib" VERSION 1.0.0 SOVERSION 1)
-install(TARGETS modman DESTINATION ${LIB_INSTALL_DIR})
### Tests
add_testdirectory(test)
Index: libproxy/test/url-test.cpp
===================================================================
--- libproxy/test/url-test.cpp (revision 753)
+++ libproxy/test/url-test.cpp (revision 797)
@@ -59,6 +59,12 @@
{
bool rtv = true;
+#ifdef WIN32
+ WSADATA wsadata;
+ WORD vers = MAKEWORD(2, 2);
+ WSAStartup(vers, &wsadata);
+#endif
+
try_url ("file:///allo", rtv,
"file",
"", "",
@@ -131,6 +137,17 @@
"", "",
"", 0,
"80");
+
+ /* Handle the case where there is nothing other than the scheme */
+ try_url ("http://", rtv,
+ "http",
+ "", "",
+ "", 80,
+ "");
+
+#ifdef WIN32
+ WSACleanup();
+#endif
return !rtv;
}
Index: libproxy/cmake/libproxy.cmk
===================================================================
--- libproxy/cmake/libproxy.cmk (revision 753)
+++ libproxy/cmake/libproxy.cmk (revision 797)
@@ -18,5 +18,6 @@
set_property(SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/proxy.cpp
PROPERTY COMPILE_DEFINITIONS MODULEDIR="${MODULEDIR}";BUILTIN_MODULES=${BUILTIN_MODULES})
set_target_properties(libproxy PROPERTIES PREFIX "" VERSION 1.0.0 SOVERSION 1)
+set_target_properties(libproxy PROPERTIES LINK_INTERFACE_LIBRARIES "")
install(TARGETS libproxy DESTINATION ${LIB_INSTALL_DIR})
install(FILES proxy.h DESTINATION ${INCLUDE_INSTALL_DIR})
Index: libproxy/cmake/modules.cmk
===================================================================
--- libproxy/cmake/modules.cmk (revision 753)
+++ libproxy/cmake/modules.cmk (revision 797)
@@ -14,11 +14,12 @@
include(cmake/modules/config_macosx.cmk)
include(cmake/modules/network_networkmanager.cmk)
include(cmake/modules/pacrunner_mozjs.cmk)
+include(cmake/modules/pacrunner_natus.cmk)
include(cmake/modules/pacrunner_webkit.cmk)
# Build the pacrunner into libproxy unless we are building for multiple engines
set(BIPR 1)
-if(MOZJS_FOUND AND WEBKIT_FOUND)
+if((MOZJS_FOUND AND WEBKIT_FOUND) OR (MOZJS_FOUND AND NATUS_FOUND) OR (WEBKIT_FOUND AND NATUS_FOUND))
set(BIPR 0)
endif()
@@ -36,6 +37,7 @@
px_module(ignore_ip 1 1)
px_module(network_networkmanager "${NM_FOUND}" 0 ${NM_LIBRARIES})
px_module(pacrunner_mozjs "${MOZJS_FOUND}" ${BIPR} ${MOZJS_LIBRARIES})
+px_module(pacrunner_natus "${NATUS_FOUND}" ${BIPR} ${NATUS_LIBRARIES})
px_module(pacrunner_webkit "${WEBKIT_FOUND}" ${BIPR} ${WEBKIT_LIBRARIES})
px_module(wpad_dns_alias 1 1)
message("")
Index: libproxy/cmake/modules/pacrunner_natus.cmk
===================================================================
--- libproxy/cmake/modules/pacrunner_natus.cmk (revision 0)
+++ libproxy/cmake/modules/pacrunner_natus.cmk (revision 797)
@@ -0,0 +1,7 @@
+if(WIN32)
+ set(NATUS_FOUND 0)
+elseif(APPLE)
+ set(NATUS_FOUND 0)
+else()
+ px_check_modules(NATUS natus)
+endif()
\ No newline at end of file
Index: libproxy/cmake/modules/pacrunner_mozjs.cmk
===================================================================
--- libproxy/cmake/modules/pacrunner_mozjs.cmk (revision 753)
+++ libproxy/cmake/modules/pacrunner_mozjs.cmk (revision 797)
@@ -7,16 +7,19 @@
include_directories("${MOZJS_INCLUDE_DIR}")
endif()
elseif(NOT APPLE)
- set(MOZJS_SEARCH_ORDER "xulrunner-js;firefox-js;mozilla-js;seamonkey-js" CACHE STRING "MozJS search order")
+ set(MOZJS_SEARCH_ORDER "mozilla-js;xulrunner-js;firefox-js;seamonkey-js" CACHE STRING "MozJS search order")
option(WITH_MOZJS "Search for MOZJS package" ON)
if (WITH_MOZJS)
- pkg_search_module(MOZJS ${MOZJS_SEARCH_ORDER})
- if(MOZJS_FOUND)
- include_directories(${MOZJS_INCLUDE_DIRS})
- link_directories(${MOZJS_LIBRARY_DIRS})
- else()
- set(MOZJS_FOUND 0)
- endif()
+ foreach(MOZJSLIB ${MOZJS_SEARCH_ORDER})
+ pkg_search_module(MOZJS ${MOZJSLIB}>=2.0b12)
+ if(MOZJS_FOUND)
+ include_directories(${MOZJS_INCLUDE_DIRS})
+ link_directories(${MOZJS_LIBRARY_DIRS})
+ break()
+ else()
+ set(MOZJS_FOUND 0)
+ endif()
+ endforeach()
else()
set(MOZJS_FOUND 0)
endif()
Index: libproxy/cmake/modules/pacrunner_webkit.cmk
===================================================================
--- libproxy/cmake/modules/pacrunner_webkit.cmk (revision 753)
+++ libproxy/cmake/modules/pacrunner_webkit.cmk (revision 797)
@@ -12,5 +12,9 @@
set(WEBKIT_FOUND 1)
endif()
else()
- px_check_modules(WEBKIT webkit-1.0)
-endif()
\ No newline at end of file
+ if(WITH_WEBKIT3)
+ px_check_modules(WEBKIT webkitgtk-3.0)
+ else()
+ px_check_modules(WEBKIT webkit-1.0)
+ endif()
+endif()
Index: libproxy/url.cpp
===================================================================
--- libproxy/url.cpp (revision 753)
+++ libproxy/url.cpp (revision 797)
@@ -36,12 +36,9 @@
#ifdef WIN32
#include <io.h>
-#define pfsize(st) (st.st_size)
#define close _close
#define read _read
#define SHUT_RDWR SD_BOTH
-#else
-#define pfsize(st) (st.st_blksize * st.st_blocks)
#endif
#include "url.hpp"
@@ -56,13 +53,6 @@
// This is the maximum pac size (to avoid memory attacks)
#define PAC_MAX_SIZE 102400
-const string url::GENERIC_DELIMITERS(":/?#[]@");
-const string url::SUBCOMPONENT_DELIMITERS("!$&'()*+,;=");
-const string url::ALLOWED_IN_USERINFO_ELEMENT(url::SUBCOMPONENT_DELIMITERS);
-const string url::ALLOWED_IN_USERINFO(url::ALLOWED_IN_USERINFO_ELEMENT + ":");
-const string url::ALLOWED_IN_PATH_ELEMENT(url::SUBCOMPONENT_DELIMITERS + ":@");
-const string url::ALLOWED_IN_PATH(url::ALLOWED_IN_PATH_ELEMENT + "/");
-
static inline int get_default_port(string scheme) {
struct servent *serv;
size_t plus = scheme.find('+');
@@ -109,8 +99,8 @@
string url::encode(const string &data, const string &valid_reserved) {
ostringstream encoded;
- for (int i=0; data[i]; i++) {
- if (isalnum(data[i])
+ for (unsigned int i=0; i < data.size(); i++) {
+ if (isalnum((unsigned char)data[i])
|| valid_reserved.find(data[i]) != string::npos
|| string("-._~").find(data[i]) != string::npos)
encoded << data[i];
@@ -211,7 +201,8 @@
host_start = userinfo_end + 1;
/* Check for IPv6 IP */
- if (hier_part[host_start] == '[') {
+ if (host_start < hier_part.size()
+ && hier_part[host_start] == '[') {
host_end = hier_part.find(']', host_start);
if (host_end == string::npos)
throw parse_error("Invalid URL: " + url);
@@ -232,7 +223,7 @@
/* Get port */
m_port = get_default_port(m_scheme);
- if (host_end != hier_part.size()
+ if (host_end < hier_part.size()
&& hier_part[host_end] == ':') {
size_t port_start = host_end + 1;
m_port = atoi(hier_part.c_str() + port_start);
@@ -400,10 +391,12 @@
struct stat st;
if ((sock = ::open(m_path.c_str(), O_RDONLY)) < 0)
return NULL;
- if (!fstat(sock, &st) && pfsize(st) < PAC_MAX_SIZE) {
- buffer = new char[pfsize(st)+1];
- if (read(sock, buffer, pfsize(st)) == 0) {
- delete buffer;
+
+ if (!fstat(sock, &st) && st.st_size < PAC_MAX_SIZE) {
+ buffer = new char[st.st_size+1];
+ memset(buffer, 0, st.st_size+1);
+ if (read(sock, buffer, st.st_size) == 0) {
+ delete[] buffer;
buffer = NULL;
}
}
@@ -435,7 +428,7 @@
if (sock < 0) return NULL;
// Build the request string
- request = "GET " + m_path + " HTTP/1.1\r\n";
+ request = "GET " + (m_path.size() > 0 ? m_path : "/") + " HTTP/1.1\r\n";
request += "Host: " + m_host + "\r\n";
request += "Accept: " + string(PAC_MIME_TYPE) + "\r\n";
request += "Connection: close\r\n";
Index: libproxy/url.hpp
===================================================================
--- libproxy/url.hpp (revision 753)
+++ libproxy/url.hpp (revision 797)
@@ -27,6 +27,13 @@
#include "config.hpp"
+#define URL_GENERIC_DELIMITERS ":/?#[]@"
+#define URL_SUBCOMPONENT_DELIMITERS "!$&'()*+,;="
+#define URL_ALLOWED_IN_USERINFO_ELEMENT URL_SUBCOMPONENT_DELIMITERS
+#define URL_ALLOWED_IN_USERINFO URL_ALLOWED_IN_USERINFO_ELEMENT ":"
+#define URL_ALLOWED_IN_PATH_ELEMENT URL_SUBCOMPONENT_DELIMITERS ":@"
+#define URL_ALLOWED_IN_PATH URL_ALLOWED_IN_PATH_ELEMENT "/"
+
namespace libproxy {
using namespace std;
@@ -38,13 +45,6 @@
class DLL_PUBLIC url {
public:
- static const string ALLOWED_IN_PATH;
- static const string ALLOWED_IN_PATH_ELEMENT;
- static const string ALLOWED_IN_USERINFO;
- static const string ALLOWED_IN_USERINFO_ELEMENT;
- static const string GENERIC_DELIMITERS;
- static const string SUBCOMPONENT_DELIMITERS;
-
static bool is_valid(const string url);
static string encode(const string &data, const string &valid_reserved = "");
Index: libproxy/proxy.cpp
===================================================================
--- libproxy/proxy.cpp (revision 753)
+++ libproxy/proxy.cpp (revision 797)
@@ -21,6 +21,7 @@
#include <cstring> // For strdup()
#include <iostream> // For cerr
#include <stdexcept> // For exception
+#include <typeinfo> // Only for debug messages.
#include <libmodman/module_manager.hpp>
@@ -164,7 +165,7 @@
proxy_factory::~proxy_factory() {
lock();
- if (this->pac) delete this->pac;
+ if (this->pac) delete[] this->pac;
if (this->pacurl) delete this->pacurl;
unlock();
@@ -260,7 +261,7 @@
/* Check our ignore patterns */
ignores = this->mm.get_extensions<ignore_extension>();
- invign = confign[0] == '-';
+ invign = confign.size() > 0 && confign[0] == '-';
if (invign) confign = confign.substr(1);
for (size_t i=0 ; i < confign.size() && !ignored;) {
size_t next = confign.find(',', i);
Index: libproxy/modules/pacrunner_mozjs.cpp
===================================================================
--- libproxy/modules/pacrunner_mozjs.cpp (revision 753)
+++ libproxy/modules/pacrunner_mozjs.cpp (revision 797)
@@ -42,12 +42,12 @@
#define INET6_ADDRSTRLEN 46
#endif
-static JSBool dnsResolve(JSContext *cx, JSObject * /*obj*/, uintN /*argc*/, jsval *argv, jsval *rval) {
+static JSBool dnsResolve_(JSContext *cx, jsval hostname, jsval *vp) {
// Get hostname argument
- char *tmp = JS_strdup(cx, JS_GetStringBytes(JS_ValueToString(cx, argv[0])));
+ char *tmp = JS_EncodeString(cx, JS_ValueToString(cx, hostname));
// Set the default return value
- *rval = JSVAL_NULL;
+ JS_SET_RVAL(cx, vp, JSVAL_NULL);
// Look it up
struct addrinfo *info = NULL;
@@ -66,7 +66,7 @@
NI_NUMERICHOST)) goto out;
// We succeeded
- *rval = STRING_TO_JSVAL(JS_NewString(cx, tmp, strlen(tmp)));
+ JS_SET_RVAL(cx, vp, STRING_TO_JSVAL(JS_NewStringCopyN(cx, tmp, strlen(tmp))));
tmp = NULL;
out:
@@ -75,15 +75,20 @@
return true;
}
-static JSBool myIpAddress(JSContext *cx, JSObject *obj, uintN /*argc*/, jsval * /*argv*/, jsval *rval) {
+static JSBool dnsResolve(JSContext *cx, uintN /*argc*/, jsval *vp) {
+ jsval *argv = JS_ARGV(cx, vp);
+ return dnsResolve_(cx, argv[0], vp);
+}
+
+static JSBool myIpAddress(JSContext *cx, uintN /*argc*/, jsval *vp) {
char *hostname = (char *) JS_malloc(cx, 1024);
if (!gethostname(hostname, 1023)) {
- JSString *myhost = JS_NewString(cx, hostname, strlen(hostname));
+ JSString *myhost = JS_NewStringCopyN(cx, hostname, strlen(hostname));
jsval arg = STRING_TO_JSVAL(myhost);
- return dnsResolve(cx, obj, 1, &arg, rval);
+ return dnsResolve_(cx, 1, &arg);
}
JS_free(cx, hostname);
- *rval = JSVAL_NULL;
+ JS_SET_RVAL(cx, vp, JSVAL_NULL);
return true;
}
@@ -91,7 +96,7 @@
// This MUST be a static global
static JSClass cls = {
"global", JSCLASS_GLOBAL_FLAGS,
- JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub,
+ JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_StrictPropertyStub,
JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
};
@@ -111,7 +116,7 @@
//JS_SetOptions(this->jsctx, JSOPTION_VAROBJFIX);
//JS_SetVersion(this->jsctx, JSVERSION_LATEST);
//JS_SetErrorReporter(cx, reportError);
- if (!(this->jsglb = JS_NewObject(this->jsctx, &cls, NULL, NULL))) goto error;
+ if (!(this->jsglb = JS_NewCompartmentAndGlobalObject(this->jsctx, &cls, NULL))) goto error;
if (!JS_InitStandardClasses(this->jsctx, this->jsglb)) goto error;
// Define Javascript functions
@@ -147,15 +152,19 @@
throw bad_alloc();
}
jsval args[2] = {
- STRING_TO_JSVAL(JS_NewString(this->jsctx, tmpurl, strlen(tmpurl))),
- STRING_TO_JSVAL(JS_NewString(this->jsctx, tmphost, strlen(tmphost)))
+ STRING_TO_JSVAL(JS_NewStringCopyN(this->jsctx, tmpurl, strlen(tmpurl))),
+ STRING_TO_JSVAL(JS_NewStringCopyN(this->jsctx, tmphost, strlen(tmphost)))
};
// Find the proxy (call FindProxyForURL())
jsval rval;
JSBool result = JS_CallFunctionName(this->jsctx, this->jsglb, "FindProxyForURL", 2, args, &rval);
if (!result) return "";
- string answer = string(JS_GetStringBytes(JS_ValueToString(this->jsctx, rval)));
+
+ char * tmpanswer = JS_EncodeString(this->jsctx, JS_ValueToString(this->jsctx, rval));
+ string answer = string(tmpanswer);
+ JS_free(this->jsctx, tmpanswer);
+
if (answer == "undefined") return "";
return answer;
}
Index: libproxy/modules/pacrunner_natus.cpp
===================================================================
--- libproxy/modules/pacrunner_natus.cpp (revision 0)
+++ libproxy/modules/pacrunner_natus.cpp (revision 797)
@@ -0,0 +1,111 @@
+/*******************************************************************************
+ * libproxy - A library for proxy configuration
+ * Copyright (C) 2006 Nathaniel McCallum <nathaniel@natemccallum.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ ******************************************************************************/
+
+#include "../extension_pacrunner.hpp"
+using namespace libproxy;
+
+#define I_ACKNOWLEDGE_THAT_NATUS_IS_NOT_STABLE
+#include <natus/natus.h>
+#include "pacutils.h"
+
+using namespace natus;
+
+static Value dnsResolve(Value& ths, Value& fnc, vector<Value>& arg) {
+ Value exc = checkArguments(ths, arg, "s");
+ if (exc.isException()) return exc;
+
+ // Look it up
+ struct addrinfo *info;
+ if (getaddrinfo(arg[0].toString().c_str(), NULL, NULL, &info))
+ return NULL;
+
+ // Try for IPv4
+ char* tmp = new char[INET6_ADDRSTRLEN+1];
+ if (getnameinfo(info->ai_addr, info->ai_addrlen,
+ tmp, INET6_ADDRSTRLEN+1,
+ NULL, 0,
+ NI_NUMERICHOST)) {
+ freeaddrinfo(info);
+ delete tmp;
+ return NULL;
+ }
+ freeaddrinfo(info);
+
+ // Create the return value
+ Value ret = ths.newString(tmp);
+ delete tmp;
+ return ret;
+}
+
+static Value myIpAddress(Value& ths, Value& fnc, vector<Value>& arg) {
+ char hostname[1024];
+ if (!gethostname(hostname, 1023)) {
+ vector<Value> dnsargs;
+ dnsargs.push_back(ths.newString(hostname));
+ return dnsResolve(ths, fnc, dnsargs);
+ }
+ return ths.newString("Unable to find hostname!").toException();
+}
+
+class natus_pacrunner : public pacrunner {
+public:
+ natus_pacrunner(string pac, const url& pacurl) throw (bad_alloc) : pacrunner(pac, pacurl) {
+ Value exc;
+
+ // Create the basic context
+ if (!eng.initialize()) goto error;
+ glb = this->eng.newGlobal();
+ if (glb.isException()) goto error;
+
+ // Add dnsResolve into the context
+ if (!glb.set("dnsResolve", glb.newFunction(dnsResolve))) goto error;
+
+ // Add myIpAddress into the context
+ if (!glb.set("myIpAddress", glb.newFunction(myIpAddress))) goto error;
+
+ // Add all other routines into the context
+ exc = glb.evaluate(JAVASCRIPT_ROUTINES);
+ if (exc.isException()) goto error;
+
+ // Add the PAC into the context
+ exc = glb.evaluate(pac.c_str(), pacurl.to_string());
+ if (exc.isException()) goto error;
+ return;
+
+ error:
+ throw bad_alloc();
+ }
+
+ string run(const url& url_) throw (bad_alloc) {
+ vector<Value> args;
+ args.push_back(glb.newString(url_.to_string()));
+ args.push_back(glb.newString(url_.get_host()));
+
+ Value res = glb.call("FindProxyForURL", args);
+ if (res.isString() && !res.isException())
+ return res.toString();
+ return "";
+ }
+
+private:
+ Engine eng;
+ Value glb;
+};
+
+PX_PACRUNNER_MODULE_EZ(natus, "nt_engine_init", "natus");
Index: libproxy/modules/config_gnome.cpp
===================================================================
--- libproxy/modules/config_gnome.cpp (revision 753)
+++ libproxy/modules/config_gnome.cpp (revision 797)
@@ -102,10 +102,8 @@
if (dup2(rpipe[1], STDOUT_FILENO) != STDOUT_FILENO) _exit(2);
// Close unneeded fds
- close(rpipe[0]);
- close(rpipe[1]);
- close(wpipe[0]);
- close(wpipe[1]);
+ for (int i = 3; i < sysconf(_SC_OPEN_MAX); i++)
+ close(i);
// Exec
execl("/bin/sh", "sh", "-c", program, (char*) NULL);
@@ -194,8 +192,8 @@
else if (this->data[PROXY_MODE] == "manual") {
string type, host, port;
bool auth = this->data[PROXY_USE_AUTHENTICATION] == "true";
- string username = url::encode(this->data[PROXY_AUTH_USER], url::ALLOWED_IN_USERINFO_ELEMENT);
- string password = url::encode(this->data[PROXY_AUTH_PASSWORD], url::ALLOWED_IN_USERINFO_ELEMENT);
+ string username = url::encode(this->data[PROXY_AUTH_USER], URL_ALLOWED_IN_USERINFO_ELEMENT);
+ string password = url::encode(this->data[PROXY_AUTH_PASSWORD], URL_ALLOWED_IN_USERINFO_ELEMENT);
bool same_proxy = this->data[PROXY_SAME_FOR_ALL] == "true";
// If socks is set use it (except when same_proxy is set)
Index: NEWS
===================================================================
--- NEWS (revision 753)
+++ NEWS (revision 797)
@@ -1,3 +1,14 @@
+New in version 0.4.7
+==============================
+* Support/require xulrunner 2.0+
+* Support linking againgst libwebkit-gtk3 (-DWITH_WEBKIT3=ON)
+* Issues closed:
+ - #149: always test for the right python noarch module path
+ - #155: Cannot compile with Firefox 4
+ - #156: libproxy should build against webkitgtk-3.0
+ - #158: Won't compile w/ xulrunner 2.0 final
+ - #159: libproxy fails with autoconfiguration "http://proxy.domain.com"
+
New in version 0.4.6
==============================
* Fixed a crash in the URL parser
Index: CMakeLists.txt
===================================================================
--- CMakeLists.txt (revision 753)
+++ CMakeLists.txt (revision 797)
@@ -24,6 +24,8 @@
include(cmake/ctest.cmk)
include(cmake/paths.cmk)
+option(WITH_WEBKIT3 "Build against gtk-3 version of webkitgtk" OFF)
+
### Subdirectories
# Conditionally build bundled libmodman
option(FORCE_SYSTEM_LIBMODMAN "Force using system libmodman" OFF)
@@ -44,8 +46,12 @@
endif()
endif()
+# Conditionally build bindings
+if(NOT WIN32)
+ add_subdirectory(bindings)
+endif()
+
# Always build these
add_subdirectory(libproxy)
-add_subdirectory(bindings)
add_subdirectory(utils)