diff options
Diffstat (limited to 'main/freeradius/fix-request_running-segfault.patch')
-rw-r--r-- | main/freeradius/fix-request_running-segfault.patch | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/main/freeradius/fix-request_running-segfault.patch b/main/freeradius/fix-request_running-segfault.patch index d1ca890302..e6973b19a6 100644 --- a/main/freeradius/fix-request_running-segfault.patch +++ b/main/freeradius/fix-request_running-segfault.patch @@ -21,3 +21,58 @@ index 78c6d8a9e5..c8b3af24e2 100644 (void) setup_post_proxy_fail(request); process_proxy_reply(request, NULL); +From e2de6fab148e800380f1929fe4ea88a38de42053 Mon Sep 17 00:00:00 2001 +From: "Alan T. DeKok" <aland@freeradius.org> +Date: Wed, 20 Nov 2019 13:59:54 -0500 +Subject: [PATCH] a better fix for commit 30ffd21 + +Which still runs post-proxy-type fail if all of the home servers +are dead +--- + src/main/process.c | 9 +++------ + 1 file changed, 3 insertions(+), 6 deletions(-) + +diff --git a/src/main/process.c b/src/main/process.c +index c8b3af24e2..1a48517d43 100644 +--- a/src/main/process.c ++++ b/src/main/process.c +@@ -1642,8 +1642,7 @@ static void request_running(REQUEST *request, int action) + * handler. + */ + if (request_proxy(request) < 0) { +- if (!request->home_server || +- (request->home_server && request->home_server->server)) goto req_finished; ++ if (request->home_server && request->home_server->server) goto req_finished; + + (void) setup_post_proxy_fail(request); + process_proxy_reply(request, NULL); +@@ -2475,13 +2474,12 @@ static int process_proxy_reply(REQUEST *request, RADIUS_PACKET *reply) + } + + old_server = request->server; +- rad_assert(request->home_server != NULL); + + /* + * If the home server is virtual, just run pre_proxy from + * that section. + */ +- if (request->home_server->server) { ++ if (request->home_server && request->home_server->server) { + request->server = request->home_server->server; + + } else { +@@ -3182,13 +3180,12 @@ static int request_will_proxy(REQUEST *request) + } + + old_server = request->server; +- rad_assert(request->home_server != NULL); + + /* + * If the home server is virtual, just run pre_proxy from + * that section. + */ +- if (request->home_server->server) { ++ if (request->home_server && request->home_server->server) { + request->server = request->home_server->server; + + } else { |