From 21b0f216b96c56970894a8f21a03d7f3dc473259 Mon Sep 17 00:00:00 2001 From: Andreas Steffen Date: Fri, 18 Nov 2011 19:42:05 +0100 Subject: [PATCH] created libradius shared by eap-radius and tnc-pdp plugins --- configure.in | 2 +- src/libcharon/plugins/eap_radius/Makefile.am | 2 ++ src/libcharon/plugins/tnc_pdp/Makefile.am | 4 +++- src/libcharon/plugins/tnc_pdp/tnc_pdp.c | 15 ++++++++++++++- src/libradius/Makefile.am | 1 + 5 files changed, 21 insertions(+), 3 deletions(-) diff --git a/configure.in b/configure.in index f533a8b8f..4e607c301 100644 --- a/configure.in +++ b/configure.in @@ -254,7 +254,7 @@ if test x$eap_tls = xtrue -o x$eap_ttls = xtrue -o x$eap_peap = xtrue; then tls=true; fi -if test x$eap_radius = xtrue -o x$radattr = xtrue; then +if test x$eap_radius = xtrue -o x$radattr = xtrue -o x$tnc_pdp = xtrue; then radius=true; fi 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 #include +#include + #include #include #include @@ -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 +