aboutsummaryrefslogtreecommitdiff
path: root/init.c
diff options
context:
space:
mode:
authorJames Yonan <james@openvpn.net>2010-07-10 03:04:27 +0000
committerJames Yonan <james@openvpn.net>2010-07-10 03:04:27 +0000
commit3796f902a67ba1bcdeff27c5339907206185503b (patch)
treedd6a00bff733f852d887bb41b3e18fa28d770f40 /init.c
parentAdded support for MSVC debugging of openvpn.exe in settings.in: (diff)
downloadopenvpn-3796f902a67ba1bcdeff27c5339907206185503b.tar.xz
Fixed bug in proxy fallback capability where openvpn.exe could
core dump if http-proxy-fallback-disable command was issued in response to ">PROXY:NEED_NOW management" interface notification. git-svn-id: http://svn.openvpn.net/projects/openvpn/branches/BETA21/openvpn@6284 e7ae566f-a301-0410-adde-c780ea21d3b5
Diffstat (limited to 'init.c')
-rw-r--r--init.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/init.c b/init.c
index 5e45ccd..90b253f 100644
--- a/init.c
+++ b/init.c
@@ -122,7 +122,8 @@ ce_http_proxy_fallback_defined(const struct context *c)
int i;
for (i = 0; i < l->len; ++i)
{
- if (l->array[i]->flags & CE_HTTP_PROXY_FALLBACK)
+ const struct connection_entry *ce = l->array[i];
+ if (ce->flags & CE_HTTP_PROXY_FALLBACK)
return true;
}
}
@@ -193,12 +194,9 @@ management_callback_http_proxy_fallback_cmd (void *arg, const char *server, cons
struct connection_entry *ce = l->array[i];
if (ce->flags & CE_HTTP_PROXY_FALLBACK)
{
- if (ho)
- {
- ce->http_proxy_options = ho;
- ret = true;
- }
+ ce->http_proxy_options = ho;
ce->ce_http_proxy_fallback_timestamp = now;
+ ret = true;
}
}
}
@@ -278,7 +276,7 @@ next_connection_entry (struct context *c)
do {
const char *remote_ip_hint = NULL;
- bool advanced = false;
+ bool newcycle = false;
ce_defined = true;
if (l->no_advance && l->current >= 0)
@@ -295,7 +293,8 @@ next_connection_entry (struct context *c)
msg (M_FATAL, "No usable connection profiles are present");
}
- advanced = true;
+ if (l->current == 0)
+ newcycle = true;
show_connection_list(l);
}
@@ -305,7 +304,7 @@ next_connection_entry (struct context *c)
remote_ip_hint = c->options.remote_ip_hint;
#if HTTP_PROXY_FALLBACK
- if (advanced && ce_http_proxy_fallback_defined(c))
+ if (newcycle && ce_http_proxy_fallback_defined(c))
ce_http_proxy_fallback_start(c, remote_ip_hint);
if (ce->flags & CE_HTTP_PROXY_FALLBACK)