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))

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

Reply via email to