aboutsummaryrefslogtreecommitdiffstats
path: root/main/freeradius/fix-request_running-segfault.patch
diff options
context:
space:
mode:
Diffstat (limited to 'main/freeradius/fix-request_running-segfault.patch')
-rw-r--r--main/freeradius/fix-request_running-segfault.patch55
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 {