Просмотр исходного кода

check_radius: Support FreeRADIUS Client library

Allow for using the FreeRADIUS Client library instead of radiusclient or
radiusclient-ng.  The latter two projects are dead.

Closes #1231.
Holger Weiss 11 лет назад
Родитель
Сommit
39546b7f64
4 измененных файлов с 31 добавлено и 14 удалено
  1. 1 0
      NEWS
  2. 7 5
      REQUIREMENTS
  3. 9 2
      configure.ac
  4. 14 7
      plugins/check_radius.c

+ 1 - 0
NEWS

@@ -8,6 +8,7 @@ This file documents the major additions and syntax changes between releases.
 	Timeout States Implemented - Plugins that support a timeout state will now also support specifying the exit state in case of timeout with the syntax -t <timeout>:<state> (abrist)
 	Timeout States Implemented - Plugins that support a timeout state will now also support specifying the exit state in case of timeout with the syntax -t <timeout>:<state> (abrist)
 	Perl plugins now use FindBin for path discovery, obsoleting the nasty AWK script (evgeni, abrist)
 	Perl plugins now use FindBin for path discovery, obsoleting the nasty AWK script (evgeni, abrist)
 	check_http.c - Added support for chunked transfer-encoding (koenwtje, dermoth, sreinhardt)
 	check_http.c - Added support for chunked transfer-encoding (koenwtje, dermoth, sreinhardt)
+	check_radius.c - Added support for the FreeRADIUS Client library (weiss)
 	check_snmp.c - Added thresholds to performance data (seemuellera)
 	check_snmp.c - Added thresholds to performance data (seemuellera)
 	check_snmp.c - Added new option (-N) for SNMPv3 context (Johannes Engel)
 	check_snmp.c - Added new option (-N) for SNMPv3 context (Johannes Engel)
 	check_snmp.c - Added IPv6 support (abrist)
 	check_snmp.c - Added IPv6 support (abrist)

+ 7 - 5
REQUIREMENTS

@@ -50,14 +50,16 @@ check_dbi:
 	  http://libdbi.sourceforge.net/
 	  http://libdbi.sourceforge.net/
 
 
 check_radius:
 check_radius:
-	- Requires the radiusclient-ng library available from:
-	  http://developer.berlios.de/projects/radiusclient-ng/
+	- Requires the FreeRADIUS Client library available from:
+	  http://freeradius.org/freeradius-client/
+	- As an alternative, the radiusclient-ng library may be used:
+ 	  http://sourceforge.net/projects/radiusclient-ng.berlios/
 	- This plugin also works with the original radiusclient library from
 	- This plugin also works with the original radiusclient library from
 	  ftp://ftp.cityline.net/pub/radiusclient/
 	  ftp://ftp.cityline.net/pub/radiusclient/
 		RPM (rpmfind): radiusclient 0.3.2, radiusclient-devel-0.3.2
 		RPM (rpmfind): radiusclient 0.3.2, radiusclient-devel-0.3.2
-	  Unless you're using a distro-maintained version of this library you
-	  probably want to use radiusclient-ng. The original radiusclient library is
-	  unmaintained and has many known issues, particularly with 64bit systems.
+	  However, you probably want to use the FreeRADIUS Client library, as
+	  both radiusclient and radiusclient-ng are unmaintained and have known
+	  issues.
 
 
 check_snmp:
 check_snmp:
 	- Requires the NET-SNMP package available from
 	- Requires the NET-SNMP package available from

+ 9 - 2
configure.ac

@@ -297,8 +297,15 @@ AS_IF([test "x$with_radius" != "xno"], [
     	  RADIUSLIBS="-lradiusclient-ng"
     	  RADIUSLIBS="-lradiusclient-ng"
       AC_SUBST(RADIUSLIBS)
       AC_SUBST(RADIUSLIBS)
     else
     else
-      AC_MSG_WARN([Skipping radius plugin])
-      AC_MSG_WARN([install radius libs to compile this plugin (see REQUIREMENTS).])
+      AC_CHECK_LIB(freeradius-client,rc_read_config)
+      if test "$ac_cv_lib_freeradius_client_rc_read_config" = "yes"; then
+        EXTRAS="$EXTRAS check_radius\$(EXEEXT)"
+        RADIUSLIBS="-lfreeradius-client"
+        AC_SUBST(RADIUSLIBS)
+      else
+        AC_MSG_WARN([Skipping radius plugin])
+        AC_MSG_WARN([install radius libs to compile this plugin (see REQUIREMENTS).])
+      fi
     fi
     fi
   fi
   fi
   LIBS="$_SAVEDLIBS"
   LIBS="$_SAVEDLIBS"

+ 14 - 7
plugins/check_radius.c

@@ -36,9 +36,10 @@ const char *email = "devel@nagios-plugins.org";
 #include "utils.h"
 #include "utils.h"
 #include "netutils.h"
 #include "netutils.h"
 
 
-#ifdef HAVE_LIBRADIUSCLIENT_NG
+#if defined(HAVE_LIBFREERADIUS_CLIENT)
+#include <freeradius-client.h>
+#elif defined(HAVE_LIBRADIUSCLIENT_NG)
 #include <radiusclient-ng.h>
 #include <radiusclient-ng.h>
-rc_handle *rch = NULL;
 #else
 #else
 #include <radiusclient.h>
 #include <radiusclient.h>
 #endif
 #endif
@@ -47,11 +48,14 @@ int process_arguments (int, char **);
 void print_help (void);
 void print_help (void);
 void print_usage (void);
 void print_usage (void);
 
 
-/* libradiusclient(-ng) wrapper functions */
-#ifdef HAVE_LIBRADIUSCLIENT_NG
+#if defined(HAVE_LIBFREERADIUS_CLIENT) || defined(HAVE_LIBRADIUSCLIENT_NG)
 #define my_rc_conf_str(a) rc_conf_str(rch,a)
 #define my_rc_conf_str(a) rc_conf_str(rch,a)
 #define my_rc_send_server(a,b) rc_send_server(rch,a,b)
 #define my_rc_send_server(a,b) rc_send_server(rch,a,b)
+#ifdef HAVE_LIBFREERADIUS_CLIENT
+#define my_rc_buildreq(a,b,c,d,e,f) rc_buildreq(rch,a,b,c,d,(a)->secret,e,f)
+#else
 #define my_rc_buildreq(a,b,c,d,e,f) rc_buildreq(rch,a,b,c,d,e,f)
 #define my_rc_buildreq(a,b,c,d,e,f) rc_buildreq(rch,a,b,c,d,e,f)
+#endif
 #define my_rc_own_ipaddress() rc_own_ipaddress(rch)
 #define my_rc_own_ipaddress() rc_own_ipaddress(rch)
 #define my_rc_avpair_add(a,b,c,d) rc_avpair_add(rch,a,b,c,-1,d)
 #define my_rc_avpair_add(a,b,c,d) rc_avpair_add(rch,a,b,c,-1,d)
 #define my_rc_read_dictionary(a) rc_read_dictionary(rch, a)
 #define my_rc_read_dictionary(a) rc_read_dictionary(rch, a)
@@ -72,6 +76,10 @@ void print_usage (void);
 
 
 int my_rc_read_config(char *);
 int my_rc_read_config(char *);
 
 
+#if defined(HAVE_LIBFREERADIUS_CLIENT) || defined(HAVE_LIBRADIUSCLIENT_NG)
+rc_handle *rch = NULL;
+#endif
+
 char *server = NULL;
 char *server = NULL;
 char *username = NULL;
 char *username = NULL;
 char *password = NULL;
 char *password = NULL;
@@ -142,11 +150,10 @@ Please note that all tags must be lowercase to use the DocBook XML DTD.
 int
 int
 main (int argc, char **argv)
 main (int argc, char **argv)
 {
 {
-	UINT4 service;
 	char msg[BUFFER_LEN];
 	char msg[BUFFER_LEN];
 	SEND_DATA data;
 	SEND_DATA data;
 	int result = STATE_UNKNOWN;
 	int result = STATE_UNKNOWN;
-	UINT4 client_id;
+	uint32_t client_id, service;
 	char *str;
 	char *str;
 
 
 	setlocale (LC_ALL, "");
 	setlocale (LC_ALL, "");
@@ -389,7 +396,7 @@ print_usage (void)
 
 
 int my_rc_read_config(char * a)
 int my_rc_read_config(char * a)
 {
 {
-#ifdef HAVE_LIBRADIUSCLIENT_NG
+#if defined(HAVE_LIBFREERADIUS_CLIENT) || defined(HAVE_LIBRADIUSCLIENT_NG)
 	rch = rc_read_config(a);
 	rch = rc_read_config(a);
 	return (rch == NULL) ? 1 : 0;
 	return (rch == NULL) ? 1 : 0;
 #else
 #else