On 06/01/2010 10:12 AM, Nathaniel McCallum wrote:
Freeradius 2.x includes an experimental module which allows one to cache
results for a certain time period. This is extremely useful for:
1. Reducing the load on your authentication store (LDAP, Database, etc)
2. Reducing the load on your (limited resource) router
3. Enabling successful wireless logins even if the router cannot contact
the authentication store (ie. a WAN outage)

This patch enables experimental modules and then disables them all again
(individually, rather than by group). You can then individually choose
to build the caching module. This patch also adds a patch to create the
config.h.in and configure.in for the rlm_caching module and has been
submitted upstream
(https://lists.freeradius.org/pipermail/freeradius-devel/2010-June/013871.html).


Signed-off-by: Nathaniel McCallum <nathan...@haikulogic.com>

Index: net/freeradius2/patches/001-rlm_caching.patch
===================================================================
--- net/freeradius2/patches/001-rlm_caching.patch (revision 0)
+++ net/freeradius2/patches/001-rlm_caching.patch (revision 0)
@@ -0,0 +1,99 @@
+diff --git a/src/modules/rlm_caching/config.h.in
b/src/modules/rlm_caching/config.h.in
+new file mode 100644
+index 0000000..32fad9e
+--- /dev/null
++++ b/src/modules/rlm_caching/config.h.in
+@@ -0,0 +1,22 @@
++/* config.h.in. Generated from configure.in by autoheader. */
++
++/* do we have gdbm_fdesc */
++#undef HAVE_GDBM_FDESC
++
++/* do we need GDBM_SYNC */
++#undef NEED_GDBM_SYNC
++
++/* Define to the address where bug reports for this package should be
sent. */
++#undef PACKAGE_BUGREPORT
++
++/* Define to the full name of this package. */
++#undef PACKAGE_NAME
++
++/* Define to the full name and version of this package. */
++#undef PACKAGE_STRING
++
++/* Define to the one symbol short name of this package. */
++#undef PACKAGE_TARNAME
++
++/* Define to the version of this package. */
++#undef PACKAGE_VERSION
+diff --git a/src/modules/rlm_caching/configure.in
b/src/modules/rlm_caching/configure.in
+new file mode 100644
+index 0000000..6e9f6ec
+--- /dev/null
++++ b/src/modules/rlm_caching/configure.in
+@@ -0,0 +1,65 @@
++AC_PREREQ([2.53])
++AC_INIT(rlm_caching.c)
++AC_REVISION($Revision$)
++AC_DEFUN(modname,[rlm_caching])
++
++if test x$with_[]modname != xno; then
++ AC_PROG_CC
++ AC_PROG_CPP
++
++ FR_SMART_CHECK_INCLUDE(gdbm.h)
++ FR_SMART_CHECK_LIB(gdbm, gdbm_open)
++ if test "x$ac_cv_lib_gdbm_gdbm_open" != "xyes"; then
++ fail="$fail libgdbm"
++ fi
++
++ if test "x$fail" = "x"; then
++ AC_MSG_CHECKING(to see GDBM_SYNC status)
++ AC_EGREP_CPP(found-gdbm-sync, [
++#include <gdbm.h>
++#ifdef GDBM_SYNC
++ found-gdbm-sync!
++#else
++ not found. this version must use sync by default.
++#endif
++ ], [
++ AC_DEFINE(NEED_GDBM_SYNC, yes, [do we need GDBM_SYNC])
++ AC_MSG_RESULT(needs it.)
++ ], [
++ AC_MSG_RESULT(SYNCs by default.)
++ ]
++ )
++ fi
++
++ old_LIBS=$LIBS
++ LIBS="$LIBS $SMART_LIBS"
++ AC_CHECK_FUNC(gdbm_fdesc)
++ if test "x$ac_cv_func_gdbm_fdesc" = "xyes";
++ then
++ AC_DEFINE(HAVE_GDBM_FDESC, [], [do we have gdbm_fdesc])
++ fi
++ LIBS=$old_LIBS
++
++ targetname=modname
++else
++ targetname=
++ echo \*\*\* module modname is disabled.
++fi
++
++if test x"$fail" != x""; then
++ if test x"${enable_strict_dependencies}" = x"yes"; then
++ AC_MSG_ERROR([set --without-]modname[ to disable it.])
++ else
++ AC_MSG_WARN([silently not building ]modname[.])
++ AC_MSG_WARN([FAILURE: ]modname[ requires: $fail.]);
++ targetname=""
++ fi
++fi
++
++caching_ldflags=$SMART_LIBS
++caching_cflags=$SMART_CFLAGS
++AC_SUBST(caching_ldflags)
++AC_SUBST(caching_cflags)
++AC_SUBST(targetname)
++AC_CONFIG_HEADER(config.h)
++AC_OUTPUT(Makefile)
Index: net/freeradius2/Makefile
===================================================================
--- net/freeradius2/Makefile (revision 21623)
+++ net/freeradius2/Makefile (working copy)
@@ -9,7 +9,7 @@

PKG_NAME:=freeradius2
PKG_VERSION:=2.1.8
-PKG_RELEASE:=3
+PKG_RELEASE:=4

PKG_SOURCE:=freeradius-server-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=ftp://ftp.freeradius.org/pub/freeradius/
@@ -45,6 +45,12 @@
TITLE:=Demo certificates to test the server
endef

+define Package/freeradius2-mod-caching
+ $(call Package/freeradius2/Default)
+ DEPENDS:=freeradius2 +gdbm
+ TITLE:=Caching module (experimental!)
+endef
+
define Package/freeradius2-mod-chap
$(call Package/freeradius2/Default)
DEPENDS:=freeradius2
@@ -302,6 +308,7 @@
--with-raddbdir=/etc/freeradius2 \
--with-radacctdir=/var/db/radacct \
--with-logdir=/var/log \
+ --with-experimental-modules \
--without-edir \
--without-snmp \
--without-rlm_checkval \
@@ -338,6 +345,19 @@
--without-rlm_eap_ikev2 \
--without-rlm_opendirectory \
--without-rlm_wimax \
+ --without-rlm_cram \
+ --without-rlm_eap2 \
+ --without-rlm_example \
+ --without-rlm_jradius \
+ --without-rlm_ns_mta_md5 \
+ --without-rlm_opendirectory \
+ --without-rlm_protocol_filter \
+ --without-rlm_ruby \
+ --without-rlm_sim_files \
+ --without-rlm_smb \
+ --without-rlm_smsotp \
+ --without-rlm_sqlhpwippool \
+ --without-rlm_wimax

PKG_DICTIONARIES:= \
freeradius freeradius.internal \
@@ -346,6 +366,12 @@
microsoft \
wispr \

+ifneq ($(SDK)$(CONFIG_PACKAGE_freeradius2-mod-caching),)
+ CONFIGURE_ARGS+= --with-rlm_caching
+else
+ CONFIGURE_ARGS+= --without-rlm_caching
+endif
+
ifneq ($(SDK)$(CONFIG_PACKAGE_freeradius2-mod-ldap),)
CONFIGURE_ARGS+= \
--with-rlm_ldap-include-dir="$(STAGING_DIR)/usr/include" \
@@ -433,6 +459,11 @@
MYSQL_CONFIG="no" \
ac_cv_lib_readline=no \

+define Build/Configure
+ (cd $(PKG_BUILD_DIR)/src/modules/rlm_caching ; autoconf
-I$(PKG_BUILD_DIR))
+ $(call Build/Configure/Default)
+endef
+
define Build/Compile
$(MAKE) -C $(PKG_BUILD_DIR) \
R="$(PKG_INSTALL_DIR)" \
@@ -501,6 +532,7 @@

$(eval $(call BuildPackage,freeradius2))
$(eval $(call BuildPackage,freeradius2-democerts))
+$(eval $(call BuildPlugin,freeradius2-mod-caching,rlm_caching,))
$(eval $(call
BuildPlugin,freeradius2-mod-chap,rlm_chap,modules/chap,modules,))
$(eval $(call
BuildPlugin,freeradius2-mod-detail,rlm_detail,modules/detail,modules,))
$(eval $(call BuildPlugin,freeradius2-mod-eap,libfreeradius-eap
rlm_eap,eap.conf))


Anyone want to review/merge this?

Nathaniel
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to