From efce8db03af505f76c0c579f2439757bd6998dc9 Mon Sep 17 00:00:00 2001
From: Linus Nordberg <linus@nordu.net>
Date: Sat, 12 Mar 2011 01:03:43 +0100
Subject: Fix crash bug in _rs_peer_destroy().

Don't expect a peer to always have a connection.
---
 lib/radsec.c | 21 +++------------------
 1 file changed, 3 insertions(+), 18 deletions(-)

(limited to 'lib')

diff --git a/lib/radsec.c b/lib/radsec.c
index 0957365..a05a22b 100644
--- a/lib/radsec.c
+++ b/lib/radsec.c
@@ -131,23 +131,6 @@ rs_resolv (struct evutil_addrinfo **addr,
   return NULL;
 }
 
-static void
-_rs_peer_destroy (struct rs_peer *p)
-{
-  assert (p);
-  assert (p->conn);
-  assert (p->conn->ctx);
-
-  /* NOTE: The peer object doesn't own conn, nor realm.  */
-  /* NOTE: secret is owned by config */
-  if (p->addr)
-    {
-      evutil_freeaddrinfo (p->addr);
-      p->addr = NULL;
-    }
-  rs_free (p->conn->ctx, p);
-}
-
 void
 rs_context_destroy (struct rs_context *ctx)
 {
@@ -160,8 +143,10 @@ rs_context_destroy (struct rs_context *ctx)
       for (p = r->peers; p; )
 	{
 	  struct rs_peer *tmp = p;
+	  if (p->addr)
+	    evutil_freeaddrinfo (p->addr);
 	  p = p->next;
-	  _rs_peer_destroy (tmp);
+	  rs_free (ctx, tmp);
 	}
       rs_free (ctx, r->name);
       r = r->next;
-- 
cgit v1.1