aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndreas Steffen <andreas.steffen@strongswan.org>2011-11-18 19:42:05 +0100
committerAndreas Steffen <andreas.steffen@strongswan.org>2012-03-13 16:27:17 +0100
commit21b0f216b96c56970894a8f21a03d7f3dc473259 (patch)
treeb7385dadf9027cf94dc4454557c15a7ad82350b7 /src
parent70fd2d1af7f02a1a5fedd0d07a6d4607d2ce3ac0 (diff)
downloadstrongswan-21b0f216b96c56970894a8f21a03d7f3dc473259.tar.bz2
strongswan-21b0f216b96c56970894a8f21a03d7f3dc473259.tar.xz
created libradius shared by eap-radius and tnc-pdp plugins
Diffstat (limited to 'src')
-rw-r--r--src/libcharon/plugins/eap_radius/Makefile.am2
-rw-r--r--src/libcharon/plugins/tnc_pdp/Makefile.am4
-rw-r--r--src/libcharon/plugins/tnc_pdp/tnc_pdp.c15
-rw-r--r--src/libradius/Makefile.am1
4 files changed, 20 insertions, 2 deletions
diff --git a/src/libcharon/plugins/eap_radius/Makefile.am b/src/libcharon/plugins/eap_radius/Makefile.am
index 181497ab5..625d4a9f6 100644
--- a/src/libcharon/plugins/eap_radius/Makefile.am
+++ b/src/libcharon/plugins/eap_radius/Makefile.am
@@ -9,6 +9,8 @@ noinst_LTLIBRARIES = libstrongswan-eap-radius.la
else
libstrongswan_eap_radius_la_LIBADD = $(top_builddir)/src/libradius/libradius.la
plugin_LTLIBRARIES = libstrongswan-eap-radius.la
+libstrongswan_eap_radius_la_LIBADD = \
+ $(top_builddir)/src/libradius/libradius.la
endif
libstrongswan_eap_radius_la_SOURCES = \
diff --git a/src/libcharon/plugins/tnc_pdp/Makefile.am b/src/libcharon/plugins/tnc_pdp/Makefile.am
index 7123dd926..170a6f989 100644
--- a/src/libcharon/plugins/tnc_pdp/Makefile.am
+++ b/src/libcharon/plugins/tnc_pdp/Makefile.am
@@ -2,7 +2,8 @@
INCLUDES = \
-I$(top_srcdir)/src/libstrongswan \
-I$(top_srcdir)/src/libhydra \
- -I$(top_srcdir)/src/libcharon
+ -I$(top_srcdir)/src/libcharon \
+ -I$(top_srcdir)/src/libradius
AM_CFLAGS = -rdynamic
@@ -11,6 +12,7 @@ noinst_LTLIBRARIES = libstrongswan-tnc-pdp.la
else
plugin_LTLIBRARIES = libstrongswan-tnc-pdp.la
libstrongswan_tnc_pdp_la_LIBADD = \
+ $(top_builddir)/src/libradius/libradius.la \
$(top_builddir)/src/libtls/libtls.la \
$(top_builddir)/src/libtnccs/libtnccs.la
endif
diff --git a/src/libcharon/plugins/tnc_pdp/tnc_pdp.c b/src/libcharon/plugins/tnc_pdp/tnc_pdp.c
index f0cf86680..54cf4b328 100644
--- a/src/libcharon/plugins/tnc_pdp/tnc_pdp.c
+++ b/src/libcharon/plugins/tnc_pdp/tnc_pdp.c
@@ -18,6 +18,8 @@
#include <errno.h>
#include <unistd.h>
+#include <radius_message.h>
+
#include <daemon.h>
#include <debug.h>
#include <threading/thread.h>
@@ -28,7 +30,7 @@ typedef struct private_tnc_pdp_t private_tnc_pdp_t;
/**
* Maximum size of a RADIUS IP packet
*/
-#define MAX_PACKET 2048
+#define MAX_PACKET 4096
/**
* private data of tnc_pdp_t
@@ -128,6 +130,7 @@ static job_requeue_t receive(private_tnc_pdp_t *this)
{
while (TRUE)
{
+ radius_message_t *request;
char buffer[MAX_PACKET];
int max_fd = 0, selected = 0, bytes_read = 0;
fd_set rfds;
@@ -198,6 +201,16 @@ static job_requeue_t receive(private_tnc_pdp_t *this)
source = host_create_from_sockaddr((sockaddr_t*)&src);
DBG2(DBG_NET, "received RADIUS packet from %#H", source);
DBG3(DBG_NET, "%b", buffer, bytes_read);
+ request = radius_message_parse_response(chunk_create(buffer, bytes_read));
+ if (request)
+ {
+ DBG2(DBG_NET, "received valid RADIUS message");
+ request->destroy(request);
+ }
+ else
+ {
+ DBG1(DBG_NET, "received invalid RADIUS message, ignored");
+ }
source->destroy(source);
}
return JOB_REQUEUE_FAIR;
diff --git a/src/libradius/Makefile.am b/src/libradius/Makefile.am
index 618dbbc04..f891e018a 100644
--- a/src/libradius/Makefile.am
+++ b/src/libradius/Makefile.am
@@ -7,3 +7,4 @@ libradius_la_SOURCES = \
radius_socket.h radius_socket.c \
radius_client.h radius_client.c \
radius_config.h radius_config.c
+