ssahani / rpms / freeradius

Forked from rpms/freeradius 5 years ago
Clone
b1ead8e
From 64ee0b30df59857bce8f0efea019d065cf48c54c Mon Sep 17 00:00:00 2001
b1ead8e
From: Nikolai Kondrashov <Nikolai.Kondrashov@redhat.com>
b1ead8e
Date: Thu, 18 Dec 2014 22:05:35 +0200
b1ead8e
Subject: [PATCH 2/2] Don't overwrite ip_hton af/prefix in fr_pton4/6
b1ead8e
b1ead8e
Don't overwrite address family and prefix set by ip_hton (which can fall
b1ead8e
back onto other address family) with AF_INET/32 and AF_INET6/128, in
b1ead8e
fr_pton4 and fr_pton6 respectively.
b1ead8e
b1ead8e
This fixes radiusd listening on wrong address data when falling back to
b1ead8e
another address family.
b1ead8e
---
b1ead8e
 src/lib/misc.c | 12 ++++++------
b1ead8e
 1 file changed, 6 insertions(+), 6 deletions(-)
b1ead8e
b1ead8e
diff --git a/src/lib/misc.c b/src/lib/misc.c
b1ead8e
index ad27057..cf49917 100644
b1ead8e
--- a/src/lib/misc.c
b1ead8e
+++ b/src/lib/misc.c
b1ead8e
@@ -238,6 +238,9 @@ int fr_pton4(fr_ipaddr_t *out, char const *value, size_t inlen, bool resolve, bo
b1ead8e
 	 *	192.0.2.2 is parsed as if it was /32
b1ead8e
 	 */
b1ead8e
 	if (!p) {
b1ead8e
+		out->prefix = 32;
b1ead8e
+		out->af = AF_INET;
b1ead8e
+
b1ead8e
 		/*
b1ead8e
 		 *	Allow '*' as the wildcard address usually 0.0.0.0
b1ead8e
 		 */
b1ead8e
@@ -258,9 +261,6 @@ int fr_pton4(fr_ipaddr_t *out, char const *value, size_t inlen, bool resolve, bo
b1ead8e
 			}
b1ead8e
 		} else if (ip_hton(out, AF_INET, value, fallback) < 0) return -1;
b1ead8e
 
b1ead8e
-		out->prefix = 32;
b1ead8e
-		out->af = AF_INET;
b1ead8e
-
b1ead8e
 		return 0;
b1ead8e
 	}
b1ead8e
 
b1ead8e
@@ -338,6 +338,9 @@ int fr_pton6(fr_ipaddr_t *out, char const *value, size_t inlen, bool resolve, bo
b1ead8e
 
b1ead8e
 	p = strchr(value, '/');
b1ead8e
 	if (!p) {
b1ead8e
+		out->prefix = 128;
b1ead8e
+		out->af = AF_INET6;
b1ead8e
+
b1ead8e
 		/*
b1ead8e
 		 *	Allow '*' as the wildcard address
b1ead8e
 		 */
b1ead8e
@@ -350,9 +353,6 @@ int fr_pton6(fr_ipaddr_t *out, char const *value, size_t inlen, bool resolve, bo
b1ead8e
 			}
b1ead8e
 		} else if (ip_hton(out, AF_INET6, value, fallback) < 0) return -1;
b1ead8e
 
b1ead8e
-		out->prefix = 128;
b1ead8e
-		out->af = AF_INET6;
b1ead8e
-
b1ead8e
 		return 0;
b1ead8e
 	}
b1ead8e
 
b1ead8e
-- 
b1ead8e
2.1.3
b1ead8e