--- src/lib/proxy_factory.c.orig 2009-04-11 14:23:45.000000000 +0200 +++ src/lib/proxy_factory.c 2009-04-11 14:28:23.000000000 +0200 @@ -514,6 +514,8 @@ px_proxy_factory_get_proxies (pxProxyFac pxConfig *config = NULL; char **response = px_strsplit("direct://", ";"); char *tmp = NULL, *order = NULL, **orderv = NULL; + char *wpad_fallback_env = NULL; + int do_wpad_fallback = 0; // default to not fall back // Verify some basic stuff if (!self) goto do_return; @@ -581,9 +583,24 @@ px_proxy_factory_get_proxies (pxProxyFac for (int i=0 ; self->configs && self->configs[i] && !config ; i++) config = self->configs[i]->callback(self); + // check PX_WPAD_FALLBACK env var for an override for the WPAD fall + // back mechanism + wpad_fallback_env = getenv("PX_WPAD_FALLBACK"); + if (wpad_fallback_env) + { + if (strcmp(wpad_fallback_env, "0")) { + do_wpad_fallback = 1; + } + } + // No plugin returned a valid config, fall back to 'wpad://' if (!config) { + if (!do_wpad_fallback) + { + fprintf(stderr, "*** Unable to locate valid config and WPAD fallback disabled! Falling back to direct...\n"); + goto do_return; + } fprintf(stderr, "*** Unable to locate valid config! Falling back to auto-detection...\n"); config = px_malloc0(sizeof(pxConfig)); config->url = px_strdup("wpad://"); @@ -595,20 +612,23 @@ px_proxy_factory_get_proxies (pxProxyFac !strncmp(config->url, "socks://", 8) || !strncmp(config->url, "pac+", 4) || !strcmp (config->url, "wpad://") || - !strcmp (config->url, "direct://"))) + !strcmp (config->url, "direct://")) + && do_wpad_fallback) { fprintf(stderr, "*** Config plugin returned invalid URL type! Falling back to auto-detection...\n"); px_free(config->url); config->url = px_strdup("wpad://"); } - else if (!strncmp(config->url, "pac+", 4) && !px_url_is_valid(config->url + 4)) + else if (!strncmp(config->url, "pac+", 4) && !px_url_is_valid(config->url + 4) + && do_wpad_fallback) { fprintf(stderr, "*** Config plugin returned malformed URL! Falling back to auto-detection...\n"); px_free(config->url); config->url = px_strdup("wpad://"); } else if ((!strncmp(config->url, "http://", 7) || !strncmp(config->url, "socks://", 8)) && - !px_url_is_valid(config->url)) + !px_url_is_valid(config->url) && + do_wpad_fallback) { fprintf(stderr, "*** Config plugin returned malformed URL! Falling back to auto-detection...\n"); px_free(config->url);