
--- 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);

