summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'net-dialup/freeradius/files/freeradius-2.1.10-qafixes.patch')
-rw-r--r--net-dialup/freeradius/files/freeradius-2.1.10-qafixes.patch2018
1 files changed, 2018 insertions, 0 deletions
diff --git a/net-dialup/freeradius/files/freeradius-2.1.10-qafixes.patch b/net-dialup/freeradius/files/freeradius-2.1.10-qafixes.patch
new file mode 100644
index 000000000000..f9d8b2629ea8
--- /dev/null
+++ b/net-dialup/freeradius/files/freeradius-2.1.10-qafixes.patch
@@ -0,0 +1,2018 @@
+diff -Naur freeradius-server-2.1.10.orig/configure.in freeradius-server-2.1.10/configure.in
+--- freeradius-server-2.1.10.orig/configure.in 2010-09-28 13:03:56.000000000 +0200
++++ freeradius-server-2.1.10/configure.in 2011-02-09 17:42:53.000000000 +0100
+@@ -556,7 +556,19 @@
+ ],
+ [ AC_MSG_WARN([pcap library not found, silently disabling the RADIUS sniffer.]) ])
+
+-AC_LIB_READLINE
++AC_CHECK_LIB(readline, readline,
++ [ LIBREADLINE="-lreadline"
++ AC_DEFINE(HAVE_LIBREADLINE, 1,
++ [Define to 1 if you have a readline compatible library.])
++ AC_DEFINE(HAVE_READLINE_READLINE_H, 1,
++ [Define to 1 if you have the <readline/readline.h> header file.])
++ AC_DEFINE(HAVE_READLINE_HISTORY, 1,
++ [Define if your readline library has \`add_history'])
++ AC_DEFINE(HAVE_READLINE_HISTORY_H, 1,
++ [Define to 1 if you have the <readline/history.h> header file.])
++ ],
++ [ LIBREADLINE="" ])
++AC_SUBST(LIBREADLINE)
+
+ dnl #############################################################
+ dnl #
+diff -Naur freeradius-server-2.1.10.orig/configure.in.orig freeradius-server-2.1.10/configure.in.orig
+--- freeradius-server-2.1.10.orig/configure.in.orig 1970-01-01 01:00:00.000000000 +0100
++++ freeradius-server-2.1.10/configure.in.orig 2010-09-28 13:03:56.000000000 +0200
+@@ -0,0 +1,1204 @@
++dnl #############################################################
++dnl #
++dnl # For information about autoconf, see:
++dnl #
++dnl # http://www.gnu.org/software/autoconf/
++dnl #
++dnl # The recommended order is:
++dnl #
++dnl # AC_INIT(file)
++dnl # 0. checks for compiler, libtool, and command line options
++dnl # 1. checks for programs
++dnl # 2. checks for libraries
++dnl # 3. checks for header files
++dnl # 4. checks for typedefs
++dnl # 5. checks for structures and functions
++dnl # 6. checks for compiler characteristics
++dnl # 7. checks for library functions
++dnl # 8. checks for system services
++dnl # AC_OUTPUT([file...])
++dnl #
++dnl #############################################################
++
++AC_PREREQ([2.59])
++export CFLAGS LIBS LDFLAGS CPPFLAGS
++AC_INIT(src/main/radiusd.c)
++AC_CONFIG_HEADER(src/include/autoconf.h)
++AC_REVISION($Revision: 1.1 $)dnl
++
++dnl # The version of the software
++RADIUSD_VERSION=`cat VERSION`
++RADIUSD_MAJOR_VERSION=`cat VERSION | sed 's/\..*//'`
++RADIUSD_MINOR_VERSION=`cat VERSION | sed 's/^2\.//'`
++PACKAGE=freeradius
++
++dnl #############################################################
++dnl #
++dnl # 0. Checks for compiler, libtool, and command line options.
++dnl #
++dnl #############################################################
++
++dnl Check for GNU cc
++AC_PROG_CC
++AC_PROG_CXX
++
++dnl #
++dnl # check for AIX, to allow us to use some BSD functions
++dnl # must be before macros that call the compiler.
++dnl #
++AC_AIX
++
++AC_PROG_GCC_TRADITIONAL
++AC_PROG_CC_SUNPRO
++AC_PROG_RANLIB
++
++dnl Compile in large (2G+) file support.
++AC_SYS_LARGEFILE
++
++dnl # check for system bytesex
++dnl # AC_DEFINES WORDS_BIGENDIAN
++AC_C_BIGENDIAN
++
++dnl Find GNU Make.
++AC_CHECK_PROG(GMAKE, gmake, yes, no)
++if test $GMAKE = no; then
++ AC_PATH_PROG(MAKE, make, /usr/local/bin/make)
++else
++ AC_PATH_PROG(MAKE, gmake, /usr/local/gnu/bin/make)
++fi
++makever=`$ac_cv_path_MAKE --version 2>&1 | grep "GNU Make"`
++if test -z "$makever"; then
++ AC_MSG_ERROR(GNU Make is not installed. Please download and install it
++ from ftp://prep.ai.mit.edu/pub/gnu/make/ before continuing.)
++fi
++
++AC_ARG_WITH(system-libltdl,
++[ --with-system-libltdl Use the libltdl installed in your system (default=use our own)],
++[
++LIBLTDL="-lltdl"
++INCLTDL=
++LTDL_SUBDIRS=
++],
++[
++dnl If libltdl isn't installable, set it to be installable.
++[test x"$enable_ltdl_install" = x && enable_ltdl_install=yes]
++AC_LIBLTDL_INSTALLABLE
++
++dnl tell Makefile to build ltdl if needed
++if test x"$enable_ltdl_install" = x"yes"; then
++ LTDL_SUBDIRS=libltdl
++fi
++])
++AC_SUBST(LTDL_SUBDIRS)
++
++dnl use system-wide libtool, if it exists
++AC_ARG_WITH(system-libtool,
++[ --with-system-libtool Use the libtool installed in your system (default=use our own)],
++[ AC_PATH_PROG(LIBTOOL, libtool,,$PATH:/usr/local/bin) ],
++[
++ LIBTOOL="`pwd`/libtool"
++ AC_SUBST(LIBTOOL)
++ dnl ensure that we're looking for dlopen
++ AC_LIBTOOL_DLOPEN
++
++ dnl Figure out how to build shared libraries
++ AC_PROG_LIBTOOL
++])
++
++
++dnl Put this in later, when all distributed modules use autoconf.
++dnl AC_ARG_WITH(disablemodulefoo,
++dnl [ --without-rlm_foo Disables module compilation. Module list:]
++dnl esyscmd([find src/modules -type d -name rlm_\* -print |\
++dnl sed -e 's%src/modules/.*/% (sub)- %; s%.*/%- %' |\
++dnl awk '{print " "$0}']))
++
++AC_ARG_ENABLE(strict-dependencies,
++[ --enable-strict-dependencies Fail configure on lack of module dependancy.])
++
++dnl extra argument: --with-docdir
++docdir='${datadir}/doc/freeradius'
++AC_MSG_CHECKING(docdir)
++AC_ARG_WITH(docdir,
++[ --with-docdir=DIR Directory for documentation [DATADIR/doc/freeradius] ],
++[ case "$withval" in
++ no)
++ docdir=no
++ ;;
++ yes)
++ ;;
++ [[\\/$]]* | ?:[[\\/]]* )
++ docdir="$withval"
++ ;;
++ *)
++ AC_MSG_ERROR([expected an absolute directory name for --with-docdir: $withval])
++ ;;
++ esac ]
++)
++AC_SUBST(docdir)
++AC_MSG_RESULT($docdir)
++if test "x$docdir" = xno; then
++ AC_MSG_WARN(Documentation files will NOT be installed.)
++fi
++
++dnl extra argument: --with-logdir
++logdir='${localstatedir}/log/radius'
++AC_MSG_CHECKING(logdir)
++AC_ARG_WITH(logdir,
++[ --with-logdir=DIR Directory for logfiles [LOCALSTATEDIR/log/radius] ],
++[ case "$withval" in
++ no)
++ AC_MSG_ERROR(Need logdir)
++ ;;
++ yes)
++ ;;
++ [[\\/$]]* | ?:[[\\/]]* )
++ logdir="$withval"
++ ;;
++ *)
++ AC_MSG_ERROR([expected an absolute directory name for --with-logdir: $withval])
++ ;;
++ esac ]
++)
++AC_SUBST(logdir)
++AC_MSG_RESULT($logdir)
++
++dnl extra argument: --with-radacctdir
++radacctdir='${logdir}/radacct'
++AC_MSG_CHECKING(radacctdir)
++AC_ARG_WITH(radacctdir,
++[ --with-radacctdir=DIR Directory for detail files [LOGDIR/radacct] ],
++[ case "$withval" in
++ no)
++ AC_MSG_ERROR(Need radacctdir)
++ ;;
++ yes)
++ ;;
++ [[\\/$]]* | ?:[[\\/]]* )
++ radacctdir="$withval"
++ ;;
++ *)
++ AC_MSG_ERROR([expected an absolute directory name for --with-radacctdir: $withval])
++ ;;
++ esac ]
++)
++AC_SUBST(radacctdir)
++AC_MSG_RESULT($radacctdir)
++
++dnl extra argument: --with-raddbdir
++raddbdir='${sysconfdir}/raddb'
++AC_MSG_CHECKING(raddbdir)
++AC_ARG_WITH(raddbdir,
++[ --with-raddbdir=DIR Directory for config files [SYSCONFDIR/raddb] ],
++[ case "$withval" in
++ no)
++ AC_MSG_ERROR(Need raddbdir)
++ ;;
++ yes)
++ ;;
++ [[\\/$]]* | ?:[[\\/]]* )
++ raddbdir="$withval"
++ ;;
++ *)
++ AC_MSG_ERROR([expected an absolute directory name for --with-raddbdir: $withval])
++ ;;
++ esac ]
++)
++AC_SUBST(raddbdir)
++AC_MSG_RESULT($raddbdir)
++
++dnl extra argument: --with-ascend-binary
++ASCEND_BINARY=yes
++AC_ARG_WITH(ascend-binary,
++[ --with-ascend-binary Include support for Ascend binary filter attributes (default=yes)],
++[ case "$withval" in
++ yes)
++ ;;
++ *)
++ ASCEND_BINARY=""
++ esac ]
++)
++if test "X$ASCEND_BINARY" = "Xyes"; then
++ AC_DEFINE(ASCEND_BINARY, [], [Include support for Ascend binary filter attributes])
++fi
++
++dnl extra argument: --with-threads
++WITH_THREADS=yes
++AC_ARG_WITH(threads,
++[ --with-threads Use threads, if available. (default=yes) ],
++[ case "$withval" in
++ yes)
++ ;;
++ *)
++ WITH_THREADS=""
++ esac ]
++)
++
++dnl extra argument: --with-vmps
++WITH_VMPS=yes
++AC_ARG_WITH(vmps,
++[ --with-vmps Compile in VMPS support. (default=yes)],
++[ case "$withval" in
++ yes)
++ ;;
++ *)
++ WITH_VMPS=no
++ esac ]
++)
++if test "x$WITH_VMPS" = "xyes"; then
++ AC_DEFINE(WITH_VMPS, [1], [define if you want VMPS support])
++fi
++
++dnl extra argument: --with-dhcp
++AC_ARG_WITH(dhcp,
++[ --with-dhcp Compile in DHCP support. (default=no)],
++[ case "$withval" in
++ yes)
++ AC_DEFINE(WITH_DHCP, [1], [Include experimental support for DHCP])
++ ;;
++ *)
++ ;;
++ esac ]
++)
++
++
++dnl #
++dnl # Allow the user to specify a list of modules to be linked
++dnl # statically to the server.
++dnl #
++STATIC_MODULES=
++AC_ARG_WITH(static_modules,
++[ --with-static-modules=QUOTED-MODULE-LIST],[
++ for i in $withval; do
++ STATIC_MODULES="$STATIC_MODULES -dlpreopen ../modules/rlm_$i/rlm_$i.la"
++ done
++])
++
++MODULES=
++AC_ARG_WITH(modules,
++[ --with-modules=QUOTED-MODULE-LIST],[
++ for i in $withval; do
++ MODULES="$MODULES $i"
++ done
++])
++
++dnl #
++dnl # Enable developer C compiler warnings
++dnl #
++AC_ARG_ENABLE(developer,
++[ --enable-developer Enables features of interest to developers.],
++[ case "$enableval" in
++ no)
++ developer=no
++ ;;
++ *)
++ developer=yes
++ esac ]
++)
++
++if test "x$developer" != "xno" -a -d $srcdir/CVS; then
++ dnl turn on the developer flag when taken from a CVS checkout (not a release)
++ developer="yes"
++fi
++
++if test "x$developer" != "xno" -a -d $srcdir/.git; then
++ dnl turn on the developer flag when taken from a git checkout (not a release)
++ developer="yes"
++fi
++
++dnl extra argument: --with-experimental-modules
++EXPERIMENTAL=
++AC_ARG_WITH(experimental-modules,
++[ --with-experimental-modules Use experimental and unstable modules. (default=no) ],
++[ case "$withval" in
++ yes)
++ EXPERIMENTAL=yes
++ ;;
++ *)
++ esac ]
++)
++
++dnl extra argument: --with-openssl
++WITH_OPENSSL=yes
++AC_ARG_WITH(openssl,
++[ --with-openssl Use OpenSSL. (default=yes)],
++[ case "$withval" in
++ no)
++ WITH_OPENSSL=no
++ ;;
++ *)
++ WITH_OPENSSL=yes
++ ;;
++ esac ]
++)
++
++dnl #
++dnl # extra argument: --with-openssl-includes=dir
++dnl #
++OPENSSL_INCLUDE_DIR=
++AC_ARG_WITH(openssl-includes,
++[ --with-openssl-includes=DIR Directory to look for OpenSSL include files],
++[ case "$withval" in
++ *) OPENSSL_INCLUDE_DIR="$withval"
++ ;;
++ esac ]
++)
++
++dnl #
++dnl # extra argument: --with-openssl-libraries=dir
++dnl #
++OPENSSL_LIB_DIR=
++AC_ARG_WITH(openssl-libraries,
++[ --with-openssl-libraries=DIR Directory to look for OpenSSL library files],
++[ case "$withval" in
++ *) OPENSSL_LIB_DIR="$withval"
++ ;;
++ esac ]
++)
++
++dnl #
++dnl # These next two arguments don't actually do anything. They're
++dnl # place holders so that the top-level configure script can tell
++dnl # the user how to configure lower-level modules
++dnl #
++
++dnl #
++dnl # extra argument: --with-rlm-FOO-lib-dir
++dnl #
++AC_ARG_WITH(rlm-FOO-lib-dir,
++[ --with-rlm-FOO-lib-dir=DIR Directory to look for library files used by module FOO],
++[ case "$withval" in
++ *)
++ ;;
++ esac ]
++)
++
++dnl #
++dnl # extra argument: --with-rlm-FOO-include-dir
++dnl #
++AC_ARG_WITH(rlm-FOO-include-dir,
++[ --with-rlm-FOO-include-dir=DIR Directory to look for include files used by module FOO],
++[ case "$withval" in
++ *)
++ ;;
++ esac ]
++)
++
++dnl See what include-style is used by the make program.
++dnl AC_MSG_CHECKING(include style for make)
++dnl echo "include /dev/null" > testmake.$$
++dnl echo "all:" >> testmake.$$
++dnl make -f testmake.$$ >/dev/null 2>&1
++dnl if test $? = 0
++dnl then
++dnl INCLUDE=include
++dnl IQUOTE=
++dnl else
++dnl INCLUDE=.include
++dnl IQUOTE='"'
++dnl fi
++dnl rm -f testmake.$$
++dnl AC_MSG_RESULT(" $INCLUDE")
++dnl AC_SUBST(INCLUDE)
++dnl AC_SUBST(IQUOTE)
++
++dnl extra argument: --with-udpfromto
++WITH_UDPFROMTO=no
++AC_ARG_WITH(udpfromto,
++[ --with-udpfromto Compile in UDPFROMTO support. (default=no)],
++[ case "$withval" in
++ yes)
++ WITH_UDPFROMTO=yes
++ ;;
++ *)
++ WITH_UDPFROMTO=no
++ esac ]
++)
++
++if test "x$WITH_UDPFROMTO" = "xyes"; then
++ AC_DEFINE(WITH_UDPFROMTO, [], [define if you want udpfromto])
++fi
++
++dnl #############################################################
++dnl #
++dnl # 1. Checks for programs
++dnl #
++dnl #############################################################
++
++CHECKRAD=checkrad.pl
++AC_PATH_PROG(PERL, perl, /usr/local/bin/perl)
++if test "x$ac_cv_path_PERL" = "x"; then
++ AC_MSG_WARN(perl not found - Simultaneous-Use and checkrad.pl may not work)
++fi
++AC_PATH_PROG(SNMPGET, snmpget)
++if test "x$ac_cv_path_SNMPGET" = "x"; then
++ AC_MSG_WARN(snmpget not found - Simultaneous-Use and checkrad.pl may not work)
++fi
++
++AC_PATH_PROG(SNMPWALK, snmpwalk)
++if test "x$ac_cv_path_SNMPWALK" = "x"; then
++ AC_MSG_WARN(snmpwalk not found - Simultaneous-Use and checkrad.pl may not work)
++fi
++
++AC_PATH_PROG(RUSERS, rusers, /usr/bin/rusers)
++
++dnl FIXME This is truly gross.
++missing_dir=`cd $ac_aux_dir && pwd`
++AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
++AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
++AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
++
++AC_PATH_PROG(LOCATE,locate)
++AC_PATH_PROG(DIRNAME,dirname)
++AC_PATH_PROG(GREP,grep)
++
++dnl #############################################################
++dnl #
++dnl # 2. Checks for libraries
++dnl #
++dnl #############################################################
++
++dnl If using pthreads, check for -lpthread (posix) or -lc_r (*BSD)
++old_CFLAGS=$CFLAGS
++if test "x$WITH_THREADS" = "xyes"; then
++ if test $ac_cv_prog_suncc = "yes"; then
++ CFLAGS="$CFLAGS -mt"
++ fi
++
++ AC_CHECK_HEADERS(pthread.h, [], [ WITH_THREADS="no" ])
++
++dnl #
++dnl # pthread stuff is usually in -lpthread
++dnl # or in -lc_r, on *BSD
++dnl #
++dnl # On Some systems, we need extra pre-processor flags, to get them to
++dnl # to do the threading properly.
++dnl #
++ AC_CHECK_LIB(pthread, pthread_create,
++ [ CFLAGS="$CFLAGS -D_REENTRANT -D_POSIX_PTHREAD_SEMANTICS"
++ LIBS="$LIBS -lpthread" ],
++ AC_CHECK_LIB(c_r, pthread_create,
++ [ CFLAGS="$CFLAGS -pthread -D_THREAD_SAFE" ],
++ [ WITH_THREADS="no" ]
++ )
++ )
++fi
++
++dnl #
++dnl # If we have NO pthread libraries, remove any knowledge of threads.
++dnl #
++if test "x$WITH_THREADS" != "xyes"; then
++ CFLAGS=$old_CFLAGS
++ ac_cv_header_pthread_h="no"
++ WITH_THREADS=no
++else
++ dnl #
++ dnl # We need sem_init() and friends, as they're the friendliest
++ dnl # semaphore functions for threading.
++ dnl #
++ dnl # HP/UX requires linking with librt, too, to get the sem_* symbols.
++ dnl # Some systems have them in -lsem
++ dnl # Solaris has them in -lposix4
++ dnl # NetBSD has them in -lsemaphore
++
++ AC_SEARCH_LIBS(sem_init, pthread sem posix4 rt semaphore,
++ [],
++ [AC_MSG_ERROR(-lsem not found. You may want to download it from ftp://ftp.to.gd-es.com/pub/BSDI/libsem.tar.bz2 or ftp://ftp.freeradius.org/pub/radius/contrib/libsem.tar.gz)]
++ )
++fi
++
++dnl Check if we need -lsocket
++AC_CHECK_LIB(socket, getsockname)
++
++dnl Check for -lresolv
++dnl This library may be needed later.
++AC_CHECK_LIB(resolv, inet_aton)
++
++dnl Check if we need -lnsl. Usually if we want to
++dnl link against -lsocket we need to include -lnsl as well.
++AC_CHECK_LIB(nsl, inet_ntoa)
++
++dnl Check for OpenSSL libraries.
++OPENSSL_LIBS=
++if test "x$WITH_OPENSSL" = xyes; then
++ old_LIBS=$LIBS
++ old_LDFLAGS="$LDFLAGS"
++ if test "x$OPENSSL_LIB_DIR" != "x"; then
++ LDFLAGS="$LDFLAGS -L$OPENSSL_LIB_DIR"
++ fi
++ AC_CHECK_LIB(crypto, DH_new,
++ [
++ LIBS="-lcrypto $LIBS"
++ AC_DEFINE(HAVE_LIBCRYPTO, 1,
++ [Define to 1 if you have the `crypto' library (-lcrypto).])
++ AC_CHECK_LIB(ssl, SSL_new,
++ [
++ AC_DEFINE(HAVE_LIBSSL, 1,
++ [Define to 1 if you have the `ssl' library (-lssl).])
++ if test "x$OPENSSL_LIB_DIR" != "x"; then
++ OPENSSL_LIBS="-L$OPENSSL_LIB_DIR"
++ fi
++ OPENSSL_LIBS="$OPENSSL_LIBS -lcrypto -lssl -lcrypto"
++ ], [])
++ ], [])
++ LIBS=$old_LIBS
++ LDFLAGS="$old_LDFLAGS"
++fi
++
++AC_CHECK_LIB(ws2_32, htonl)
++
++dnl Check the pcap library for the RADIUS sniffer.
++PCAP_LIBS=
++AC_CHECK_LIB(pcap, pcap_open_live,
++ [ PCAP_LIBS="-lpcap"
++ AC_DEFINE(HAVE_LIBPCAP, 1,
++ [Define to 1 if you have the `pcap' library (-lpcap).])
++ ],
++ [ AC_MSG_WARN([pcap library not found, silently disabling the RADIUS sniffer.]) ])
++
++AC_LIB_READLINE
++
++dnl #############################################################
++dnl #
++dnl # 3. Checks for header files
++dnl #
++dnl #############################################################
++
++dnl #
++dnl # Interix requires us to set -D_ALL_SOURCE, otherwise
++dnl # getopt will be #included, but won't link. <sigh>
++dnl #
++dnl #
++case "$host" in
++*-interix*)
++ CFLAGS="$CFLAGS -D_ALL_SOURCE"
++ ;;
++*-darwin*)
++ CFLAGS="$CFLAGS -DDARWIN"
++ LIBS="-framework DirectoryService $LIBS"
++ ;;
++esac
++
++AC_HEADER_DIRENT
++AC_HEADER_STDC
++AC_HEADER_TIME
++AC_HEADER_SYS_WAIT
++
++AC_CHECK_HEADERS( \
++ unistd.h \
++ crypt.h \
++ errno.h \
++ resource.h \
++ sys/resource.h \
++ getopt.h \
++ malloc.h \
++ utmp.h \
++ utmpx.h \
++ signal.h \
++ sys/select.h \
++ syslog.h \
++ inttypes.h \
++ stdint.h \
++ stdio.h \
++ netdb.h \
++ semaphore.h \
++ arpa/inet.h \
++ netinet/in.h \
++ sys/types.h \
++ sys/socket.h \
++ winsock.h \
++ sys/time.h \
++ sys/wait.h \
++ sys/security.h \
++ fcntl.h \
++ sys/fcntl.h \
++ sys/prctl.h \
++ sys/un.h \
++ glob.h \
++ prot.h \
++ pwd.h \
++ grp.h \
++ sia.h \
++ siad.h
++)
++
++dnl FreeBSD requires sys/socket.h before net/if.h
++AC_CHECK_HEADERS(net/if.h, [], [],
++[#ifdef HAVE_SYS_SOCKET_H
++# include <sys/socket.h>
++# endif
++])
++
++REGEX=no
++AC_CHECK_HEADER(regex.h, AC_DEFINE(HAVE_REGEX_H, [], [define this if we have the <regex.h> header file]))
++if test "x$ac_cv_header_regex_h" = "xyes"; then
++ REGEX_EXTENDED=no
++ REGEX=yes
++ AC_EGREP_CPP(yes,
++ [#include <regex.h>
++ #ifdef REG_EXTENDED
++ yes
++ #endif
++ ], [AC_DEFINE(HAVE_REG_EXTENDED, [], [define this if we have REG_EXTENDED (from <regex.h>)]) REGEX_EXTENDED=yes])
++fi
++AC_SUBST(REGEX)
++AC_SUBST(REGEX_EXTENDED)
++
++dnl #
++dnl # other checks which require headers
++dnl #
++if test "x$ac_cv_header_sys_security_h" = "xyes" && test "x$ac_cv_header_prot_h" = "xyes"
++then
++ AC_DEFINE(OSFC2, [], [define if you have OSFC2 authentication])
++fi
++
++if test "x$ac_cv_header_sia_h" = "xyes" && test "x$ac_cv_header_siad_h" = "xyes"
++then
++ AC_DEFINE(OSFSIA, [], [define if you have OSFSIA authentication])
++fi
++
++dnl Check for OpenSSL includes.
++OPENSSL_INCLUDE="-DNO_OPENSSL"
++if test "x$WITH_OPENSSL" = xyes; then
++ if test "x$OPENSSL_LIBS" = "x"; then
++ AC_MSG_NOTICE([skipping test for openssl/ssl.h])
++ else
++ old_CPPFLAGS=$CPPFLAGS
++ if test "x$OPENSSL_INCLUDE_DIR" != "x"; then
++ CPPFLAGS="$CPPFLAGS -I$OPENSSL_INCLUDE_DIR"
++ fi
++ dnl # stupid RedHat shit
++ CPPFLAGS="$CPPFLAGS -DOPENSSL_NO_KRB5"
++ AC_CHECK_HEADERS( \
++ openssl/ssl.h \
++ openssl/crypto.h \
++ openssl/err.h \
++ openssl/evp.h \
++ openssl/engine.h,
++ [],
++ OPENSSL_LIBS=
++ )
++ if test "x$OPENSSL_LIBS" != "x"; then
++ AC_MSG_CHECKING([for OpenSSL version >= 0.9.7])
++ AC_EGREP_CPP(yes,
++ [#include <openssl/crypto.h>
++ #if (OPENSSL_VERSION_NUMBER >= 0x00907000L)
++ yes
++ #endif
++ ], goodssl="yes")
++ if test "x$goodssl" != "xyes"; then
++ AC_MSG_RESULT(no)
++ OPENSSL_LIBS=
++ else
++ AC_MSG_RESULT(yes)
++ if test "x$OPENSSL_INCLUDE_DIR" != "x"; then
++ OPENSSL_INCLUDE="-I$OPENSSL_INCLUDE_DIR -DOPENSSL_NO_KRB5"
++ else
++ OPENSSL_INCLUDE="-DOPENSSL_NO_KRB5"
++ fi
++ fi
++ fi
++ CPPFLAGS=$old_CPPFLAGS
++ fi
++fi
++AC_SUBST(OPENSSL_INCLUDE)
++AC_SUBST(OPENSSL_LIBS)
++export OPENSSL_LIBS
++
++dnl Check the pcap includes for the RADIUS sniffer.
++if test "x$PCAP_LIBS" = x; then
++ AC_MSG_NOTICE([skipping test for pcap.h.])
++else
++ AC_CHECK_HEADER(pcap.h,
++ AC_DEFINE(HAVE_PCAP_H, 1,
++ [Define to 1 if you have the <pcap.h> header file.]),
++ [ PCAP_LIBS=
++ AC_MSG_WARN([pcap.h not found, silently disabling the RADIUS sniffer.])
++ ])
++fi
++AC_SUBST(PCAP_LIBS)
++
++dnl #############################################################
++dnl #
++dnl # 4. Checks for typedefs
++dnl #
++dnl #############################################################
++
++dnl #
++dnl # Ensure that these are defined
++dnl #
++AC_TYPE_OFF_T
++AC_TYPE_PID_T
++AC_TYPE_SIZE_T
++AC_TYPE_UID_T
++
++dnl check for socklen_t
++FR_CHECK_TYPE_INCLUDE([
++#ifdef HAVE_SYS_TYPES_H
++#include <sys/types.h>
++#endif
++#ifdef HAVE_SYS_SOCKET_H
++#include <sys/socket.h>
++#endif
++],socklen_t, int, [socklen_t is generally 'int' on systems which don't use it])
++
++dnl check for uint8_t
++FR_CHECK_TYPE_INCLUDE([
++#ifdef HAVE_INTTYPES_H
++#include <inttypes.h>
++#endif
++#ifdef HAVE_STDINT_H
++#include <stdint.h>
++#endif
++],uint8_t, unsigned char, [uint8_t should be the canonical 'octet' for network traffic])
++
++dnl check for uint16_t
++FR_CHECK_TYPE_INCLUDE([
++#ifdef HAVE_INTTYPES_H
++#include <inttypes.h>
++#endif
++#ifdef HAVE_STDINT_H
++#include <stdint.h>
++#endif
++],uint16_t, unsigned short, [uint16_t should be the canonical '2 octets' for network traffic])
++
++dnl check for uint32_t
++FR_CHECK_TYPE_INCLUDE([
++#ifdef HAVE_INTTYPES_H
++#include <inttypes.h>
++#endif
++#ifdef HAVE_STDINT_H
++#include <stdint.h>
++#endif
++],uint32_t, unsigned int, [uint32_t should be the canonical 'network integer])
++
++AC_CHECK_TYPE(struct in6_addr, AC_DEFINE(HAVE_STRUCT_IN6_ADDR, 1, [IPv6 address structure]), [], [
++#ifdef HAVE_NETINET_IN_H
++#include <netinet/in.h>
++#endif
++])
++
++AC_CHECK_TYPE(struct sockaddr_storage, AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1, [Generic socket addresses]), [], [
++#ifdef HAVE_NETINET_IN_H
++#include <netinet/in.h>
++#endif
++#ifdef HAVE_SYS_SOCKET_H
++#include <sys/socket.h>
++#endif
++])
++
++AC_CHECK_TYPE(struct sockaddr_in6, AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6, 1, [IPv6 socket addresses]), [], [
++#ifdef HAVE_NETINET_IN_H
++#include <netinet/in.h>
++#endif
++])
++
++AC_CHECK_TYPE(struct addrinfo, AC_DEFINE(HAVE_STRUCT_ADDRINFO, 1, [Generic DNS lookups]), [], [
++#ifdef HAVE_SYS_TYPES_H
++#include <sys/types.h>
++#endif
++#ifdef HAVE_SYS_SOCKET_H
++#include <sys/socket.h>
++#endif
++#ifdef HAVE_NETDB_H
++#include <netdb.h>
++#endif
++])
++
++dnl #############################################################
++dnl #
++dnl # 5. Checks for structures and functions
++dnl #
++dnl #############################################################
++AC_CHECK_FUNCS( \
++ getopt_long \
++ lockf \
++ strsignal \
++ sigaction \
++ sigprocmask \
++ pthread_sigmask \
++ snprintf \
++ vsnprintf \
++ setsid \
++ strncasecmp \
++ strcasecmp \
++ localtime_r \
++ ctime_r \
++ gmtime_r \
++ strsep \
++ inet_aton \
++ inet_pton \
++ inet_ntop \
++ setlinebuf \
++ setvbuf \
++ getusershell \
++ initgroups \
++ getaddrinfo \
++ getnameinfo \
++ closefrom \
++ gettimeofday \
++ getpeereid \
++ setuid \
++ setresuid \
++ getresuid \
++ strlcat \
++ strlcpy
++)
++RADIUSD_NEED_DECLARATIONS( \
++ crypt \
++ strncasecmp \
++ strcasecmp \
++ inet_aton \
++ setlinebuf \
++ getusershell \
++ endusershell
++)
++
++AC_TYPE_SIGNAL
++
++dnl # check if we have utmpx.h
++dnl # if so, check if struct utmpx has entry ut_xtime
++dnl # if not, set it to define ut_xtime == ut_tv.tv_sec
++if test "x$ac_cv_header_utmpx_h" = "xyes"
++then
++ FR_CHECK_STRUCT_HAS_MEMBER([#include <utmpx.h>], [struct utmpx], ut_xtime)
++ if test "x$ac_cv_type_struct_utmpx_has_ut_xtime" = "x"
++ then
++ AC_DEFINE(ut_xtime,ut_tv.tv_sec, [define to something if you don't have ut_xtime in struct utmpx])
++ fi
++fi
++
++dnl # struct ip_pktinfo
++FR_CHECK_STRUCT_HAS_MEMBER([#include <netinet/in.h>], [struct in_pktinfo], ipi_addr)
++if test "x$ac_cv_type_struct_in_pktinfo_has_ipi_addr" = "xyes"
++then
++ AC_DEFINE(HAVE_IP_PKTINFO, [], [define if you have IP_PKTINFO (Linux)])
++fi
++
++dnl # struct in6_pktinfo
++FR_CHECK_STRUCT_HAS_MEMBER([#include <netinet/in.h>], [struct in6_pktinfo], ipi6_addr)
++if test "x$ac_cv_type_struct_in6_pktinfo_has_ipi6_addr" = "xyes"
++then
++ AC_DEFINE(HAVE_IN6_PKTINFO, [], [define if you have IN6_PKTINFO (Linux)])
++fi
++
++dnl #############################################################
++dnl #
++dnl # 6. Checks for compiler characteristics
++dnl #
++dnl #############################################################
++
++dnl #
++dnl # Ensure that these are defined
++dnl #
++AC_C_CONST
++
++dnl #
++dnl # See if this is OS/2
++dnl #
++AC_MSG_CHECKING(type of OS)
++OS=`uname -s`
++AC_MSG_RESULT($OS)
++if test "$OS" = "OS/2"; then
++ LIBPREFIX=
++else
++ LIBPREFIX=lib
++fi
++AC_SUBST(LIBPREFIX)
++
++dnl #
++dnl # Set Default CFLAGS
++dnl #
++if test "x$GCC" = "xyes"; then
++ CFLAGS="$CFLAGS -Wall -D_GNU_SOURCE"
++fi
++
++AC_MSG_CHECKING(for developer gcc flags)
++if test "x$developer" = "xyes" -a "x$GCC" = "xyes"; then
++ devflags="-g -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wnested-externs -W -Wredundant-decls -Wundef"
++ CFLAGS="$CFLAGS $devflags"
++ INSTALLSTRIP=""
++ AC_MSG_RESULT(yes. Using $devflags)
++else
++ devflags=""
++ CFLAGS="$CFLAGS -DNDEBUG"
++ INSTALLSTRIP=""
++ AC_MSG_RESULT(no.)
++fi
++
++FR_TLS
++
++dnl #############################################################
++dnl #
++dnl # 7. Checks for library functions
++dnl #
++dnl #############################################################
++
++old_LIBS="$LIBS"
++LIBS="$LIBS $LIBLTDL"
++AC_CHECK_FUNC(lt_dladvise_init, AC_DEFINE(HAVE_HAVE_LT_DLADVISE_INIT, [], [Do we have the lt_dladvise_init function]))
++LIBS="$old_LIBS"
++
++dnl Check for libcrypt
++dnl We use crypt(3) which may be in libc, or in libcrypt (eg FreeBSD)
++AC_CHECK_LIB(crypt, crypt,
++ CRYPTLIB="-lcrypt"
++)
++if test "$CRYPTLIB" != ""; then
++ AC_DEFINE(HAVE_CRYPT, [], [Do we have the crypt function])
++else
++ AC_CHECK_FUNC(crypt, AC_DEFINE(HAVE_CRYPT, [], [Do we have the crypt function]))
++fi
++
++dnl Check for libcipher
++AC_CHECK_LIB(cipher, setkey,
++ CRYPTLIB="${CRYPTLIB} -lcipher"
++)
++AC_SUBST(CRYPTLIB)
++
++dnl Check the style of gethostbyaddr, in order of preference
++dnl GNU (_r eight args)
++AC_DEFINE(GNUSTYLE, [1], [GNU-Style get*byaddr_r])
++dnl SYSV (_r six args)
++AC_DEFINE(SYSVSTYLE, [2], [SYSV-Style get*byaddr_r])
++dnl BSD (three args, may not be thread safe)
++AC_DEFINE(BSDSTYLE, [3], [BSD-Style get*byaddr_r])
++dnl Tru64 has BSD version, but it is thread safe
++dnl http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51B_HTML/MAN/MAN3/1739____.HTM
++dnl We need #stdio.h to define NULL on FreeBSD (at least)
++gethostbyaddrrstyle=""
++AC_MSG_CHECKING([gethostbyaddr_r() syntax])
++case "$host" in
++*-freebsd*)
++dnl With FreeBSD, check if there's a prototype for gethostbyaddr_r.
++dnl Some versions (FreeBSD 5.1?) have a symbol but no prototype - so we
++dnl override this test to BSDSTYLE. FreeBSD 6.2 and up have proper GNU
++dnl style support.
++ AC_CHECK_DECLS([gethostbyaddr_r], [], [
++ AC_DEFINE(GETHOSTBYADDRRSTYLE, BSDSTYLE,
++ [style of gethostbyaddr_r functions ])
++ gethostbyaddrrstyle=BSD
++ AC_MSG_WARN([FreeBSD overridden to BSD-style])
++ ], [
++#ifdef HAVE_NETDB_H
++#include <netdb.h>
++#endif
++])
++ ;;
++esac
++if test "x$gethostbyaddrrstyle" = "x"; then
++ AC_TRY_LINK([
++#include <stdio.h>
++#include <netdb.h>
++], [ gethostbyaddr_r(NULL, 0, 0, NULL, NULL, 0, NULL, NULL) ], [
++ AC_DEFINE(GETHOSTBYADDRRSTYLE, GNUSTYLE, [style of gethostbyaddr_r functions ])
++ gethostbyaddrrstyle=GNU
++])
++fi
++if test "x$gethostbyaddrrstyle" = "x"; then
++ AC_TRY_LINK([
++#include <stdio.h>
++#include <netdb.h>
++], [ gethostbyaddr_r(NULL, 0, 0, NULL, NULL, 0, NULL) ] , [
++ AC_DEFINE(GETHOSTBYADDRRSTYLE, SYSVSTYLE, [style of gethostbyaddr_r functions ])
++ gethostbyaddrrstyle=SYSV
++ ])
++fi
++if test "x$gethostbyaddrrstyle" = "x"; then
++ AC_TRY_LINK([
++#include <stdio.h>
++#include <netdb.h>
++], [ gethostbyaddr(NULL, 0, 0) ], [
++ AC_DEFINE(GETHOSTBYADDRRSTYLE, BSDSTYLE, [style of gethostbyaddr_r functions ])
++ gethostbyaddrrstyle=BSD
++ ])
++fi
++
++if test "x$gethostbyaddrrstyle" = "x"; then
++ AC_MSG_RESULT([none! It must not exist, here.])
++else
++ AC_MSG_RESULT([${gethostbyaddrrstyle}-style])
++fi
++
++if test "x$gethostbyaddrrstyle" = "xBSD"; then
++ AC_MSG_WARN([ ****** BSD-style gethostbyaddr might NOT be thread-safe! ****** ])
++fi
++
++dnl Check the style of gethostbyname, in order of preference
++dnl GNU (_r seven args)
++dnl SYSV (_r five args)
++dnl BSD (two args, may not be thread safe)
++dnl Tru64 has BSD version, but it _is_ thread safe
++dnl http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51B_HTML/MAN/MAN3/1946____.HTM
++dnl We need #stdio.h to define NULL on FreeBSD (at least)
++gethostbynamerstyle=""
++AC_MSG_CHECKING([gethostbyname_r() syntax])
++AC_TRY_LINK([
++#include <stdio.h>
++#include <netdb.h>
++], [ gethostbyname_r(NULL, NULL, NULL, 0, NULL, NULL) ], [
++ AC_DEFINE(GETHOSTBYNAMERSTYLE, GNUSTYLE, [style of gethostbyname_r functions ])
++ gethostbynamerstyle=GNU
++])
++if test "x$gethostbynamerstyle" = "x"; then
++ AC_TRY_LINK([
++#include <stdio.h>
++#include <netdb.h>
++], [ gethostbyname_r(NULL, NULL, NULL, 0, NULL) ] , [
++ AC_DEFINE(GETHOSTBYNAMERSTYLE, SYSVSTYLE, [style of gethostbyname_r functions ])
++ gethostbynamerstyle=SYSV
++ ])
++fi
++if test "x$gethostbynamerstyle" = "x"; then
++ AC_TRY_LINK([
++#include <stdio.h>
++#include <netdb.h>
++], [ gethostbyname(NULL) ], [
++ AC_DEFINE(GETHOSTBYNAMERSTYLE, BSDSTYLE, [style of gethostbyname_r functions ])
++ gethostbynamerstyle=BSD
++ ])
++fi
++
++if test "x$gethostbynamerstyle" = "x"; then
++ AC_MSG_RESULT([none! It must not exist, here.])
++else
++ AC_MSG_RESULT([${gethostbynamerstyle}-style])
++fi
++
++if test "x$gethostbynamerstyle" = "xBSD"; then
++ AC_MSG_WARN([ ****** BSD-style gethostbyname might NOT be thread-safe! ****** ])
++fi
++
++dnl check for non-posix solaris ctime_r (extra buflen int arg)
++AC_DEFINE(POSIXSTYLE, [1], [Posix-Style ctime_r])
++AC_DEFINE(SOLARISSTYLE, [2], [Solaris-Style ctime_r])
++ctimerstyle=""
++AC_MSG_CHECKING([ctime_r() syntax])
++AC_TRY_LINK([
++#include <time.h>
++], [ ctime_r(NULL, NULL, 0) ], [
++ AC_DEFINE(CTIMERSTYLE, SOLARISSTYLE, [style of ctime_r function])
++ ctimerstyle="SOLARIS"
++])
++if test "x$ctimerstyle" = "x"; then
++ AC_TRY_LINK([
++#include <time.h>
++], [ ctime_r(NULL, NULL) ], [
++ AC_DEFINE(CTIMERSTYLE, POSIXSTYLE, [style of ctime_r function])
++ ctimerstyle="POSIX"
++ ])
++fi
++
++if test "x$ctimerstyle" = "x"; then
++ AC_MSG_RESULT([none! It must not exist, here.])
++else
++ AC_MSG_RESULT([${ctimerstyle}-style])
++fi
++
++AC_SUBST(HOSTINFO, $host)
++
++dnl #############################################################
++dnl #
++dnl # 8. Checks for system services
++dnl #
++dnl #############################################################
++
++dnl #
++dnl # Figure out where libtool is located,
++dnl #
++top_builddir=`pwd`
++export top_builddir
++AC_MSG_RESULT([top_builddir=$top_builddir])
++dnl # AC_SUBST(top_builddir)
++AC_SUBST(LIBLTDL)
++AC_SUBST(INCLTDL)
++
++dnl import libtool stuff
++
++dnl #############################################################
++dnl #
++dnl # Configure in any module directories.
++dnl #
++dnl #############################################################
++
++mysubdirs="$LIBLTDLPATH"
++if test "x$EXPERIMENTAL" = "xyes"; then
++ bar=`ls -1 "${srcdir}"/src/modules/rlm_*/configure | sed 's%/configure%%'`
++ dnl # get rid of LF's.
++ mysubdirs=`echo $mysubdirs $bar`
++else
++ dnl #
++ dnl # Find 'configure' in ONLY the stable modules
++ dnl #
++ for bar in `cat "${srcdir}"/src/modules/stable`; do
++ if test -f "${srcdir}"/src/modules/$bar/configure; then
++ mysubdirs="$mysubdirs src/modules/$bar"
++ fi
++ done
++fi
++
++dnl ############################################################
++dnl # make modules by list
++dnl #############################################################
++if test "x$EXPERIMENTAL" = "xyes"; then
++ for foo in `ls -1 "${srcdir}"/src/modules | grep rlm_`; do
++ MODULES="$MODULES $foo"
++ done
++else
++ dnl #
++ dnl # make ONLY the stable modules
++ dnl #
++ for foo in `cat "${srcdir}"/src/modules/stable`; do
++ MODULES="$MODULES $foo"
++ done
++fi
++
++dnl #
++dnl # Don't change the variable name here. Autoconf goes bonkers
++dnl # if you do.
++dnl #
++AC_CONFIG_SUBDIRS($LTDL_SUBDIRS $mysubdirs)
++AC_SUBST(MODULES)
++
++dnl #############################################################
++dnl #
++dnl # And finally, output the results.
++dnl #
++dnl #############################################################
++
++AC_CONFIG_COMMANDS([stamp-h], [echo timestamp > src/include/stamp-h])
++AC_CONFIG_COMMANDS([build-radpaths-h], [(cd ./src/include && /bin/sh ./build-radpaths-h)])
++AC_CONFIG_COMMANDS([main-chmod], [(cd ./src/main && chmod +x checkrad.pl radlast radtest)])
++AC_CONFIG_COMMANDS([scripts-chmod], [(cd ./scripts && chmod +x rc.radiusd radwatch radiusd.cron.daily radiusd.cron.monthly cryptpasswd)])
++
++dnl #
++dnl # Substitute whatever libraries we found to be necessary
++dnl #
++AC_SUBST(LIBS)
++AC_SUBST(INSTALLSTRIP)
++
++USE_SHARED_LIBS=$enable_shared
++AC_SUBST(USE_SHARED_LIBS)
++USE_STATIC_LIBS=$enable_static
++AC_SUBST(USE_STATIC_LIBS)
++AC_SUBST(STATIC_MODULES)
++AC_SUBST(RADIUSD_MAJOR_VERSION)
++AC_SUBST(RADIUSD_MINOR_VERSION)
++AC_SUBST(RADIUSD_VERSION)
++
++AC_OUTPUT(\
++ ./Make.inc \
++ ./src/include/build-radpaths-h \
++ ./src/main/Makefile \
++ ./src/main/checkrad.pl \
++ ./src/main/radlast \
++ ./src/main/radtest \
++ ./scripts/rc.radiusd \
++ ./scripts/radwatch \
++ ./scripts/radiusd.cron.daily \
++ ./scripts/radiusd.cron.monthly \
++ ./scripts/cryptpasswd \
++ ./raddb/dictionary \
++ ./raddb/radrelay.conf \
++ ./raddb/radiusd.conf
++)
+diff -Naur freeradius-server-2.1.10.orig/src/include/radiusd.h freeradius-server-2.1.10/src/include/radiusd.h
+--- freeradius-server-2.1.10.orig/src/include/radiusd.h 2010-09-28 13:03:56.000000000 +0200
++++ freeradius-server-2.1.10/src/include/radiusd.h 2011-02-09 17:42:53.000000000 +0100
+@@ -645,6 +645,7 @@
+ void event_new_fd(rad_listen_t *listener);
+
+ /* evaluate.c */
++int radius_get_vp(REQUEST *request, const char *name, VALUE_PAIR **vp_p);
+ int radius_evaluate_condition(REQUEST *request, int modreturn, int depth,
+ const char **ptr, int evaluate_it, int *presult);
+ int radius_update_attrlist(REQUEST *request, CONF_SECTION *cs,
+diff -Naur freeradius-server-2.1.10.orig/src/include/radiusd.h.orig freeradius-server-2.1.10/src/include/radiusd.h.orig
+--- freeradius-server-2.1.10.orig/src/include/radiusd.h.orig 1970-01-01 01:00:00.000000000 +0100
++++ freeradius-server-2.1.10/src/include/radiusd.h.orig 2010-09-28 13:03:56.000000000 +0200
+@@ -0,0 +1,653 @@
++#ifndef RADIUSD_H
++#define RADIUSD_H
++/*
++ * radiusd.h Structures, prototypes and global variables
++ * for the FreeRADIUS server.
++ *
++ * Version: $Id: freeradius-2.1.10-qafixes.patch,v 1.1 2011/05/26 15:31:45 hwoarang Exp $
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
++ *
++ * Copyright 1999,2000,2002,2003,2004,2005,2006,2007,2008 The FreeRADIUS server project
++ *
++ */
++
++#include <freeradius-devel/ident.h>
++RCSIDH(radiusd_h, "$Id: freeradius-2.1.10-qafixes.patch,v 1.1 2011/05/26 15:31:45 hwoarang Exp $")
++
++#include <freeradius-devel/libradius.h>
++#include <freeradius-devel/radpaths.h>
++#include <freeradius-devel/conf.h>
++#include <freeradius-devel/conffile.h>
++#include <freeradius-devel/event.h>
++
++typedef struct auth_req REQUEST;
++
++#ifdef HAVE_PTHREAD_H
++#include <pthread.h>
++#endif
++
++#ifndef NDEBUG
++#define REQUEST_MAGIC (0xdeadbeef)
++#endif
++
++/*
++ * New defines for minimizing the size of the server, to strip
++ * out functionality. In order to ensure that people don't have
++ * to re-run "configure", after "cvs update", we play some
++ * special games with the defines. i.e. any top-level "configure"
++ * option should set both WITH_FOO and WITHOUT_FOO. After a few
++ * weeks, the WITHOUT_FOO can be deleted from the configure script.
++ */
++#ifndef WITHOUT_PROXY
++#define WITH_PROXY (1)
++#endif
++
++#ifndef WITHOUT_DETAIL
++#define WITH_DETAIL (1)
++#endif
++
++#ifndef WITHOUT_SESSION_MGMT
++#define WITH_SESSION_MGMT (1)
++#endif
++
++#ifndef WITHOUT_UNLANG
++#define WITH_UNLANG (1)
++#endif
++
++#ifndef WITHOUT_ACCOUNTING
++#define WITH_ACCOUNTING (1)
++#else
++#ifdef WITH_SESSION_MGMT
++#error WITH_SESSION_MGMT is defined, but WITH_ACCOUNTING is not. Session management requires accounting.
++#endif
++#ifdef WITH_DETAIL
++#error WITH_DETAIL is defined, but WITH_ACCOUNTING is not. Detail file reading requires accounting.
++#endif
++#endif
++
++#ifndef WITHOUT_DYNAMIC_CLIENTS
++#define WITH_DYNAMIC_CLIENTS (1)
++#endif
++
++#ifndef WITHOUT_STATS
++#define WITH_STATS
++#endif
++
++#ifndef WITHOUT_COMMAND_SOCKET
++#ifdef HAVE_SYS_UN_H
++#define WITH_COMMAND_SOCKET (1)
++#else
++#define WITHOUT_COMMAND_SOCKET (1)
++#endif
++#endif
++
++#ifndef WITHOUT_COA
++#define WITH_COA (1)
++#ifndef WITH_PROXY
++#error WITH_COA requires WITH_PROXY
++#endif
++#endif
++
++#include <freeradius-devel/stats.h>
++#include <freeradius-devel/realms.h>
++
++
++/*
++ * See util.c
++ */
++typedef struct request_data_t request_data_t;
++
++typedef struct radclient {
++ fr_ipaddr_t ipaddr;
++ int prefix;
++ char *longname;
++ char *secret;
++ char *shortname;
++ int message_authenticator;
++ char *nastype;
++ char *login;
++ char *password;
++ char *server;
++ int number; /* internal use only */
++ const CONF_SECTION *cs;
++#ifdef WITH_STATS
++ fr_stats_t *auth;
++#ifdef WITH_ACCOUNTING
++ fr_stats_t *acct;
++#endif
++#endif
++
++#ifdef WITH_DYNAMIC_CLIENTS
++ int lifetime;
++ int dynamic; /* was dynamically defined */
++ time_t created;
++ time_t last_new_client;
++ char *client_server;
++ int rate_limit;
++#endif
++
++#ifdef WITH_COA
++ char *coa_name;
++ home_server *coa_server;
++ home_pool_t *coa_pool;
++#endif
++} RADCLIENT;
++
++/*
++ * Types of listeners.
++ *
++ * Ordered by priority!
++ */
++typedef enum RAD_LISTEN_TYPE {
++ RAD_LISTEN_NONE = 0,
++#ifdef WITH_PROXY
++ RAD_LISTEN_PROXY,
++#endif
++ RAD_LISTEN_AUTH,
++#ifdef WITH_ACCOUNTING
++ RAD_LISTEN_ACCT,
++#endif
++#ifdef WITH_DETAIL
++ RAD_LISTEN_DETAIL,
++#endif
++#ifdef WITH_VMPS
++ RAD_LISTEN_VQP,
++#endif
++#ifdef WITH_DHCP
++ RAD_LISTEN_DHCP,
++#endif
++#ifdef WITH_COMMAND_SOCKET
++ RAD_LISTEN_COMMAND,
++#endif
++#ifdef WITH_COA
++ RAD_LISTEN_COA,
++#endif
++ RAD_LISTEN_MAX
++} RAD_LISTEN_TYPE;
++
++
++/*
++ * For listening on multiple IP's and ports.
++ */
++typedef struct rad_listen_t rad_listen_t;
++typedef void (*radlog_func_t)(int, int, REQUEST *, const char *, ...);
++
++#define REQUEST_DATA_REGEX (0xadbeef00)
++#define REQUEST_MAX_REGEX (8)
++
++struct auth_req {
++#ifndef NDEBUG
++ uint32_t magic; /* for debugging only */
++#endif
++ RADIUS_PACKET *packet;
++#ifdef WITH_PROXY
++ RADIUS_PACKET *proxy;
++#endif
++ RADIUS_PACKET *reply;
++#ifdef WITH_PROXY
++ RADIUS_PACKET *proxy_reply;
++#endif
++ VALUE_PAIR *config_items;
++ VALUE_PAIR *username;
++ VALUE_PAIR *password;
++
++ struct main_config_t *root;
++
++ request_data_t *data;
++ RADCLIENT *client;
++#ifdef HAVE_PTHREAD_H
++ pthread_t child_pid;
++#endif
++ time_t timestamp;
++ unsigned int number; /* internal server number */
++
++ rad_listen_t *listener;
++#ifdef WITH_PROXY
++ rad_listen_t *proxy_listener;
++#endif
++
++
++ int simul_max; /* see modcall.c && xlat.c */
++#ifdef WITH_SESSION_MGMT
++ int simul_count;
++ int simul_mpp; /* WEIRD: 1 is false, 2 is true */
++#endif
++
++ int options; /* miscellanous options */
++ const char *module; /* for debugging unresponsive children */
++ const char *component; /* ditto */
++
++ struct timeval received;
++ struct timeval when; /* to wake up */
++ int delay;
++
++ int master_state;
++ int child_state;
++ RAD_LISTEN_TYPE priority;
++
++ fr_event_t *ev;
++ struct timeval next_when;
++ fr_event_callback_t next_callback;
++
++ int in_request_hash;
++#ifdef WITH_PROXY
++ int in_proxy_hash;
++
++ home_server *home_server;
++ home_pool_t *home_pool; /* for dynamic failover */
++
++ struct timeval proxy_when;
++
++ int num_proxied_requests;
++ int num_proxied_responses;
++#endif
++
++ const char *server;
++ REQUEST *parent;
++ radlog_func_t radlog; /* logging function, if set */
++#ifdef WITH_COA
++ REQUEST *coa;
++ int num_coa_requests;
++#endif
++}; /* REQUEST typedef */
++
++#define RAD_REQUEST_OPTION_NONE (0)
++#define RAD_REQUEST_OPTION_DEBUG (1)
++#define RAD_REQUEST_OPTION_DEBUG2 (2)
++#define RAD_REQUEST_OPTION_DEBUG3 (3)
++#define RAD_REQUEST_OPTION_DEBUG4 (4)
++
++#define REQUEST_ACTIVE (1)
++#define REQUEST_STOP_PROCESSING (2)
++#define REQUEST_COUNTED (3)
++
++#define REQUEST_QUEUED (1)
++#define REQUEST_RUNNING (2)
++#define REQUEST_PROXIED (3)
++#define REQUEST_REJECT_DELAY (4)
++#define REQUEST_CLEANUP_DELAY (5)
++#define REQUEST_DONE (6)
++
++/*
++ * Function handler for requests.
++ */
++typedef int (*RAD_REQUEST_FUNP)(REQUEST *);
++
++typedef struct radclient_list RADCLIENT_LIST;
++
++typedef struct pair_list {
++ const char *name;
++ VALUE_PAIR *check;
++ VALUE_PAIR *reply;
++ int lineno;
++ int order;
++ struct pair_list *next;
++ struct pair_list *lastdefault;
++} PAIR_LIST;
++
++
++typedef int (*rad_listen_recv_t)(rad_listen_t *, RAD_REQUEST_FUNP *, REQUEST **);
++typedef int (*rad_listen_send_t)(rad_listen_t *, REQUEST *);
++typedef int (*rad_listen_print_t)(const rad_listen_t *, char *, size_t);
++typedef int (*rad_listen_encode_t)(rad_listen_t *, REQUEST *);
++typedef int (*rad_listen_decode_t)(rad_listen_t *, REQUEST *);
++
++struct rad_listen_t {
++ struct rad_listen_t *next; /* should be rbtree stuff */
++
++ /*
++ * For normal sockets.
++ */
++ RAD_LISTEN_TYPE type;
++ int fd;
++ const char *server;
++ int status;
++
++ rad_listen_recv_t recv;
++ rad_listen_send_t send;
++ rad_listen_encode_t encode;
++ rad_listen_decode_t decode;
++ rad_listen_print_t print;
++
++ void *data;
++
++#ifdef WITH_STATS
++ fr_stats_t stats;
++#endif
++};
++
++#define RAD_LISTEN_STATUS_INIT (0)
++#define RAD_LISTEN_STATUS_KNOWN (1)
++#define RAD_LISTEN_STATUS_CLOSED (2)
++#define RAD_LISTEN_STATUS_FINISH (3)
++
++typedef enum radlog_dest_t {
++ RADLOG_STDOUT = 0,
++ RADLOG_FILES,
++ RADLOG_SYSLOG,
++ RADLOG_STDERR,
++ RADLOG_NULL,
++ RADLOG_NUM_DEST
++} radlog_dest_t;
++
++typedef struct main_config_t {
++ struct main_config *next;
++ int refcount;
++ fr_ipaddr_t myip; /* from the command-line only */
++ int port; /* from the command-line only */
++ int log_auth;
++ int log_auth_badpass;
++ int log_auth_goodpass;
++ int allow_core_dumps;
++ int debug_level;
++ int proxy_requests;
++ int reject_delay;
++ int status_server;
++ int max_request_time;
++ int cleanup_delay;
++ int max_requests;
++#ifdef DELETE_BLOCKED_REQUESTS
++ int kill_unresponsive_children;
++#endif
++ char *log_file;
++ char *checkrad;
++ const char *pid_file;
++ rad_listen_t *listen;
++ int syslog_facility;
++ int radlog_fd;
++ radlog_dest_t radlog_dest;
++ CONF_SECTION *config;
++ const char *name;
++ const char *auth_badpass_msg;
++ const char *auth_goodpass_msg;
++} MAIN_CONFIG_T;
++
++#define DEBUG if(debug_flag)log_debug
++#define DEBUG2 if (debug_flag > 1)log_debug
++#define DEBUG3 if (debug_flag > 2)log_debug
++#define DEBUG4 if (debug_flag > 3)log_debug
++
++#if __GNUC__ >= 3
++#define RDEBUG(fmt, ...) if(request && request->radlog) request->radlog(L_DBG, 1, request, fmt, ## __VA_ARGS__)
++#define RDEBUG2(fmt, ...) if(request && request->radlog) request->radlog(L_DBG, 2, request, fmt, ## __VA_ARGS__)
++#define RDEBUG3(fmt, ...) if(request && request->radlog) request->radlog(L_DBG, 3, request, fmt, ## __VA_ARGS__)
++#define RDEBUG4(fmt, ...) if(request && request->radlog) request->radlog(L_DBG, 4, request, fmt, ## __VA_ARGS__)
++#else
++#define RDEBUG DEBUG
++#define RDEBUG2 DEBUG2
++#define RDEBUG3 DEBUG3
++#define RDEBUG4 DEBUG4
++#endif
++
++#define SECONDS_PER_DAY 86400
++#define MAX_REQUEST_TIME 30
++#define CLEANUP_DELAY 5
++#define MAX_REQUESTS 256
++#define RETRY_DELAY 5
++#define RETRY_COUNT 3
++#define DEAD_TIME 120
++
++#define L_DBG 1
++#define L_AUTH 2
++#define L_INFO 3
++#define L_ERR 4
++#define L_PROXY 5
++#define L_ACCT 6
++#define L_CONS 128
++
++#ifndef FALSE
++#define FALSE 0
++#endif
++#ifndef TRUE
++/*
++ * This definition of true as NOT false is definitive. :) Making
++ * it '1' can cause problems on stupid platforms. See articles
++ * on C portability for more information.
++ */
++#define TRUE (!FALSE)
++#endif
++
++/* for paircompare_register */
++typedef int (*RAD_COMPARE_FUNC)(void *instance, REQUEST *,VALUE_PAIR *, VALUE_PAIR *, VALUE_PAIR *, VALUE_PAIR **);
++
++typedef enum request_fail_t {
++ REQUEST_FAIL_UNKNOWN = 0,
++ REQUEST_FAIL_NO_THREADS, /* no threads to handle it */
++ REQUEST_FAIL_DECODE, /* rad_decode didn't like it */
++ REQUEST_FAIL_PROXY, /* call to proxy modules failed */
++ REQUEST_FAIL_PROXY_SEND, /* proxy_send didn't like it */
++ REQUEST_FAIL_NO_RESPONSE, /* we weren't told to respond, so we reject */
++ REQUEST_FAIL_HOME_SERVER, /* the home server didn't respond */
++ REQUEST_FAIL_HOME_SERVER2, /* another case of the above */
++ REQUEST_FAIL_HOME_SERVER3, /* another case of the above */
++ REQUEST_FAIL_NORMAL_REJECT, /* authentication failure */
++ REQUEST_FAIL_SERVER_TIMEOUT /* the server took too long to process the request */
++} request_fail_t;
++
++/*
++ * Global variables.
++ *
++ * We really shouldn't have this many.
++ */
++extern const char *progname;
++extern int debug_flag;
++extern const char *radacct_dir;
++extern const char *radlog_dir;
++extern const char *radlib_dir;
++extern const char *radius_dir;
++extern const char *radius_libdir;
++extern uint32_t expiration_seconds;
++extern int log_stripped_names;
++extern int log_auth_detail;
++extern const char *radiusd_version;
++void radius_signal_self(int flag);
++
++#define RADIUS_SIGNAL_SELF_NONE (0)
++#define RADIUS_SIGNAL_SELF_HUP (1 << 0)
++#define RADIUS_SIGNAL_SELF_TERM (1 << 1)
++#define RADIUS_SIGNAL_SELF_EXIT (1 << 2)
++#define RADIUS_SIGNAL_SELF_DETAIL (1 << 3)
++#define RADIUS_SIGNAL_SELF_NEW_FD (1 << 4)
++#define RADIUS_SIGNAL_SELF_MAX (1 << 5)
++
++
++/*
++ * Function prototypes.
++ */
++
++/* acct.c */
++int rad_accounting(REQUEST *);
++
++/* session.c */
++int rad_check_ts(uint32_t nasaddr, unsigned int port, const char *user,
++ const char *sessionid);
++int session_zap(REQUEST *request, uint32_t nasaddr,
++ unsigned int port, const char *user,
++ const char *sessionid, uint32_t cliaddr,
++ char proto,int session_time);
++
++/* radiusd.c */
++#undef debug_pair
++void debug_pair(VALUE_PAIR *);
++void debug_pair_list(VALUE_PAIR *);
++int log_err (char *);
++
++/* util.c */
++void (*reset_signal(int signo, void (*func)(int)))(int);
++void request_free(REQUEST **request);
++int rad_mkdir(char *directory, int mode);
++int rad_checkfilename(const char *filename);
++void *rad_malloc(size_t size); /* calls exit(1) on error! */
++REQUEST *request_alloc(void);
++REQUEST *request_alloc_fake(REQUEST *oldreq);
++REQUEST *request_alloc_coa(REQUEST *request);
++int request_data_add(REQUEST *request,
++ void *unique_ptr, int unique_int,
++ void *opaque, void (*free_opaque)(void *));
++void *request_data_get(REQUEST *request,
++ void *unique_ptr, int unique_int);
++void *request_data_reference(REQUEST *request,
++ void *unique_ptr, int unique_int);
++int rad_copy_string(char *dst, const char *src);
++int rad_copy_variable(char *dst, const char *from);
++
++/* client.c */
++RADCLIENT_LIST *clients_init(void);
++void clients_free(RADCLIENT_LIST *clients);
++RADCLIENT_LIST *clients_parse_section(CONF_SECTION *section);
++void client_free(RADCLIENT *client);
++int client_add(RADCLIENT_LIST *clients, RADCLIENT *client);
++#ifdef WITH_DYNAMIC_CLIENTS
++void client_delete(RADCLIENT_LIST *clients, RADCLIENT *client);
++RADCLIENT *client_create(RADCLIENT_LIST *clients, REQUEST *request);
++#endif
++RADCLIENT *client_find(const RADCLIENT_LIST *clients,
++ const fr_ipaddr_t *ipaddr);
++RADCLIENT *client_findbynumber(const RADCLIENT_LIST *clients,
++ int number);
++RADCLIENT *client_find_old(const fr_ipaddr_t *ipaddr);
++int client_validate(RADCLIENT_LIST *clients, RADCLIENT *master,
++ RADCLIENT *c);
++RADCLIENT *client_read(const char *filename, int in_server, int flag);
++
++
++/* files.c */
++int pairlist_read(const char *file, PAIR_LIST **list, int complain);
++void pairlist_free(PAIR_LIST **);
++
++/* version.c */
++void version(void);
++
++/* log.c */
++int vradlog(int, const char *, va_list ap);
++int radlog(int, const char *, ...)
++#ifdef __GNUC__
++ __attribute__ ((format (printf, 2, 3)))
++#endif
++;
++int log_debug(const char *, ...)
++#ifdef __GNUC__
++ __attribute__ ((format (printf, 1, 2)))
++#endif
++;
++void vp_listdebug(VALUE_PAIR *vp);
++void radlog_request(int lvl, int priority, REQUEST *request, const char *msg, ...)
++#ifdef __GNUC__
++ __attribute__ ((format (printf, 4, 5)))
++#endif
++;
++
++/* auth.c */
++char *auth_name(char *buf, size_t buflen, REQUEST *request, int do_cli);
++int rad_authenticate (REQUEST *);
++int rad_postauth(REQUEST *);
++
++/* exec.c */
++int radius_exec_program(const char *, REQUEST *, int,
++ char *user_msg, int msg_len,
++ VALUE_PAIR *input_pairs,
++ VALUE_PAIR **output_pairs,
++ int shell_escape);
++
++/* timestr.c */
++int timestr_match(char *, time_t);
++
++/* valuepair.c */
++int paircompare_register(int attr, int otherattr,
++ RAD_COMPARE_FUNC func,
++ void *instance);
++void paircompare_unregister(int attr, RAD_COMPARE_FUNC func);
++int paircompare(REQUEST *req, VALUE_PAIR *request, VALUE_PAIR *check,
++ VALUE_PAIR **reply);
++void pairxlatmove(REQUEST *, VALUE_PAIR **to, VALUE_PAIR **from);
++int radius_compare_vps(REQUEST *request, VALUE_PAIR *check, VALUE_PAIR *vp);
++int radius_callback_compare(REQUEST *req, VALUE_PAIR *request,
++ VALUE_PAIR *check, VALUE_PAIR *check_pairs,
++ VALUE_PAIR **reply_pairs);
++int radius_find_compare(int attribute);
++VALUE_PAIR *radius_paircreate(REQUEST *request, VALUE_PAIR **vps,
++ int attribute, int type);
++VALUE_PAIR *radius_pairmake(REQUEST *request, VALUE_PAIR **vps,
++ const char *attribute, const char *value,
++ int operator);
++
++/* xlat.c */
++typedef size_t (*RADIUS_ESCAPE_STRING)(char *out, size_t outlen, const char *in);
++
++int radius_xlat(char * out, int outlen, const char *fmt,
++ REQUEST * request, RADIUS_ESCAPE_STRING func);
++typedef size_t (*RAD_XLAT_FUNC)(void *instance, REQUEST *, char *, char *, size_t, RADIUS_ESCAPE_STRING func);
++int xlat_register(const char *module, RAD_XLAT_FUNC func,
++ void *instance);
++void xlat_unregister(const char *module, RAD_XLAT_FUNC func);
++void xlat_free(void);
++
++/* threads.c */
++extern int thread_pool_init(CONF_SECTION *cs, int *spawn_flag);
++extern int thread_pool_addrequest(REQUEST *, RAD_REQUEST_FUNP);
++extern pid_t rad_fork(void);
++extern pid_t rad_waitpid(pid_t pid, int *status);
++extern int total_active_threads(void);
++extern void thread_pool_lock(void);
++extern void thread_pool_unlock(void);
++extern void thread_pool_queue_stats(int *array);
++
++#ifndef HAVE_PTHREAD_H
++#define rad_fork(n) fork()
++#define rad_waitpid(a,b) waitpid(a,b, 0)
++#endif
++
++/* mainconfig.c */
++/* Define a global config structure */
++extern struct main_config_t mainconfig;
++
++int read_mainconfig(int reload);
++int free_mainconfig(void);
++void hup_mainconfig(void);
++void fr_suid_down(void);
++void fr_suid_up(void);
++void fr_suid_down_permanent(void);
++
++/* listen.c */
++void listen_free(rad_listen_t **head);
++int listen_init(CONF_SECTION *cs, rad_listen_t **head);
++rad_listen_t *proxy_new_listener(fr_ipaddr_t *ipaddr, int exists);
++RADCLIENT *client_listener_find(const rad_listen_t *listener,
++ const fr_ipaddr_t *ipaddr, int src_port);
++#ifdef WITH_STATS
++RADCLIENT_LIST *listener_find_client_list(const fr_ipaddr_t *ipaddr,
++ int port);
++rad_listen_t *listener_find_byipaddr(const fr_ipaddr_t *ipaddr, int port);
++#endif
++
++/* event.c */
++int radius_event_init(CONF_SECTION *cs, int spawn_flag);
++void radius_event_free(void);
++int radius_event_process(void);
++void radius_handle_request(REQUEST *request, RAD_REQUEST_FUNP fun);
++int received_request(rad_listen_t *listener,
++ RADIUS_PACKET *packet, REQUEST **prequest,
++ RADCLIENT *client);
++REQUEST *received_proxy_response(RADIUS_PACKET *packet);
++void event_new_fd(rad_listen_t *listener);
++
++/* evaluate.c */
++int radius_evaluate_condition(REQUEST *request, int modreturn, int depth,
++ const char **ptr, int evaluate_it, int *presult);
++int radius_update_attrlist(REQUEST *request, CONF_SECTION *cs,
++ VALUE_PAIR *input_vps, const char *name);
++void radius_pairmove(REQUEST *request, VALUE_PAIR **to, VALUE_PAIR *from);
++#endif /*RADIUSD_H*/
+diff -Naur freeradius-server-2.1.10.orig/src/lib/Makefile freeradius-server-2.1.10/src/lib/Makefile
+--- freeradius-server-2.1.10.orig/src/lib/Makefile 2010-09-28 13:03:56.000000000 +0200
++++ freeradius-server-2.1.10/src/lib/Makefile 2011-02-09 17:42:53.000000000 +0100
+@@ -42,7 +42,7 @@
+
+ $(TARGET).la: $(LT_OBJS)
+ $(LIBTOOL) --mode=link $(CC) -release $(RADIUSD_VERSION) \
+- $(LDFLAGS) $(LINK_MODE) -o $@ -rpath $(libdir) $^
++ $(LDFLAGS) $(LINK_MODE) -o $@ -rpath $(libdir) $^ $(LIBS)
+
+ $(LT_OBJS): $(INCLUDES)
+
+diff -Naur freeradius-server-2.1.10.orig/src/lib/Makefile.orig freeradius-server-2.1.10/src/lib/Makefile.orig
+--- freeradius-server-2.1.10.orig/src/lib/Makefile.orig 1970-01-01 01:00:00.000000000 +0100
++++ freeradius-server-2.1.10/src/lib/Makefile.orig 2010-09-28 13:03:56.000000000 +0200
+@@ -0,0 +1,60 @@
++#
++# Makefile
++#
++# Version: $Id: freeradius-2.1.10-qafixes.patch,v 1.1 2011/05/26 15:31:45 hwoarang Exp $
++#
++
++include ../../Make.inc
++
++SRCS = dict.c filters.c hash.c hmac.c hmacsha1.c isaac.c log.c \
++ misc.c missing.c md4.c md5.c print.c radius.c rbtree.c \
++ sha1.c snprintf.c strlcat.c strlcpy.c token.c udpfromto.c \
++ valuepair.c fifo.c packet.c event.c getaddrinfo.c vqp.c \
++ heap.c dhcp.c
++
++LT_OBJS = $(SRCS:.c=.lo)
++
++INCLUDES = ../include/radius.h ../include/libradius.h \
++ ../include/missing.h ../include/autoconf.h \
++ ../include/ident.h
++
++CFLAGS += -D_LIBRADIUS -I$(top_builddir)/src
++
++# if you have problems with things that need SHA1-HMAC, this will
++# dump the key and the input to the hash so you can compare to what
++# the other end is doing.
++#CFLAGS += -DHMAC_SHA1_DATA_PROBLEMS
++
++ifeq ($(USE_SHARED_LIBS),yes)
++LINK_MODE = -export-dynamic
++else
++LINK_MODE = -static
++endif
++
++TARGET = $(LIBPREFIX)freeradius-radius
++
++# Define new rule for libtool objects
++%.lo : %.c
++ $(LIBTOOL) --mode=compile $(CC) $(CFLAGS) -c $<
++
++.PHONY: all clean install reconfig
++all: $(TARGET).la
++
++$(TARGET).la: $(LT_OBJS)
++ $(LIBTOOL) --mode=link $(CC) -release $(RADIUSD_VERSION) \
++ $(LDFLAGS) $(LINK_MODE) -o $@ -rpath $(libdir) $^
++
++$(LT_OBJS): $(INCLUDES)
++
++clean:
++ rm -f *.o *.lo $(TARGET).la
++ rm -rf .libs
++
++install: all
++ $(INSTALL) -d -m 755 $(R)$(libdir)
++ $(LIBTOOL) --mode=install $(INSTALL) -c $(TARGET).la \
++ $(R)$(libdir)/$(TARGET).la
++ rm -f $(R)$(libdir)/$(TARGET)-$(RADIUSD_VERSION).la;
++ ln -s $(TARGET).la $(R)$(libdir)/$(TARGET)-$(RADIUSD_VERSION).la
++
++reconfig:
+diff -Naur freeradius-server-2.1.10.orig/src/main/listen.c freeradius-server-2.1.10/src/main/listen.c
+--- freeradius-server-2.1.10.orig/src/main/listen.c 2010-09-28 13:03:56.000000000 +0200
++++ freeradius-server-2.1.10/src/main/listen.c 2011-02-09 17:42:53.000000000 +0100
+@@ -49,6 +49,9 @@
+ #include <fcntl.h>
+ #endif
+
++#ifdef WITH_UDPFROMTO
++#include <freeradius-devel/udpfromto.h>
++#endif
+
+ /*
+ * We'll use this below.
+diff -Naur freeradius-server-2.1.10.orig/src/modules/rlm_passwd/rlm_passwd.c freeradius-server-2.1.10/src/modules/rlm_passwd/rlm_passwd.c
+--- freeradius-server-2.1.10.orig/src/modules/rlm_passwd/rlm_passwd.c 2010-09-28 13:03:56.000000000 +0200
++++ freeradius-server-2.1.10/src/modules/rlm_passwd/rlm_passwd.c 2011-02-09 17:42:53.000000000 +0100
+@@ -247,8 +247,7 @@
+
+ static struct mypasswd * get_next(char *name, struct hashtable *ht)
+ {
+-#define passwd ((struct mypasswd *) ht->buffer)
+- struct mypasswd * hashentry;
++ struct mypasswd * hashentry, * passwd;
+ char buffer[1024];
+ int len;
+ char *list, *nextlist;
+@@ -267,6 +266,7 @@
+ }
+ /* printf("try to find in file\n"); */
+ if (!ht->fp) return NULL;
++ passwd = (struct mypasswd *) ht->buffer;
+ while (fgets(buffer, 1024,ht->fp)) {
+ if(*buffer && *buffer!='\n' && (len = string_to_entry(buffer, ht->nfields, ht->delimiter, passwd, sizeof(ht->buffer)-1)) &&
+ (!ht->ignorenis || (*buffer !='-' && *buffer != '+') ) ){
+@@ -288,7 +288,6 @@
+ fclose(ht->fp);
+ ht->fp = NULL;
+ return NULL;
+-#undef passwd
+ }
+
+ static struct mypasswd * get_pw_nam(char * name, struct hashtable* ht)